Vous devez fournir le discriminateur d'instructions aux données de votre transaction comme l'a mentionné Ademola. Ce que vous pouvez faire est de récupérer le discriminateur d'instructions, puis de l'ajouter à vos données dans les 8 premiers octets. Récupérer le discriminateur d'instructions dans Rust pub fn sighash(espace de noms : &str, nom : &str) -> [u8; 8] { let preimage = format!("{}:{}", espace de noms, nom);
laissez mut soupirer = [0u8; 8]; soupir.copy_from_slice( &anchor_client::anchor_lang::solana_program::hash::hash(preimage.as_bytes()).to_bytes() [..8], ); soupir }
println!("{:?}", sighash("global", "initialize"));
Récupérer l'instruction du discriminateur en dactylographié function sighash (nameSpace : string, ixName : string) : Buffer { let nom = serpentCase(ixName); laissez préimage = `${nameSpace}:${name}`; return Buffer.from(sha256.digest(preimage)).slice(0, 8); }
l'espace de noms doit être global Voici un exemple dans Typescript // Création du InstructionBuffer const ixBuffer = sighash('global','initialize');
const instructionBuffer = Buffer.concat([ ixBuffer, // espace de noms+nom_méthode OtherBuffer, // Autres données que vous souhaitez transmettre à l'instruction. ])
// Créez l'instruction const transactionInstruction = nouvelle TransactionInstruction({ ID de programme : adresse de programme, données : instructionBuffer, touches : [ ... ] })