Вы должны предоставить дискриминатор инструкций для данных вашей транзакции, как упоминал Адемола. Что вы можете сделать, так это получить дискриминатор инструкций, а затем добавить его к своим данным в первых 8 байтах. Дискриминатор инструкций выборки в Rust паб fn Sighash (пространство имен: &str, имя: &str) -> [u8; 8] { let preimage = format!("{}:{}", namespace, name);
пусть mut sighash = [0u8; 8]; вздох.copy_from_slice( &anchor_client::anchor_lang::solana_program::hash::hash(preimage.as_bytes()).to_bytes() [..8], ); сигаш }
println!("{:?}", Sighash("глобальный", "инициализировать");
Инструкция получения дискриминатора в машинописном тексте функция sighash(nameSpace: string, ixName: string): Buffer { пусть имя = SnakeCase (ixName); let preimage = `${nameSpace}:${name}`; return Buffer.from(sha256.digest(предварительное изображение)).slice(0, 8); }
пространство имен должно быть глобальным Вот пример в Typescript // Создание буфера инструкций const ixBuffer = Sighash('глобальный','инициализация');
const инструкцияBuffer = Buffer.concat([ ixBuffer, // пространство имен+имя_метода OtherBuffer, // Другие данные, которые вы хотите передать инструкции. ])
// Создаем инструкцию const transactionInstruction = новая TransactionInstruction({ идентификатор программы: адрес программы, данные: инструкцияБуфер, ключи: [ ... ] })