Ademolaが述べたように、トランザクションのデータに命令識別子を提供する必要があります。 できることは、命令識別子をフェッチし、それをデータの最初の 8 バイトに追加することです。 Rustのフェッチ命令識別子 pub fn sighash(名前空間: &str, 名前: &str) -> [u8; 8] { let preimage = format!("{}:{}", 名前空間, 名前);
mut sighash = [0u8; 8]; ため息.copy_from_slice( &anchor_client::anchor_lang::solana_program::hash::hash(preimage.as_bytes()).to_bytes() [..8]、 ); ため息 }
println!("{:?}", sighash("グローバル", "初期化"));
typescript でのディスクリミネーター命令のフェッチ 関数 sighash(nameSpace: 文字列, ixName: 文字列): バッファ { 名前 = snakeCase(ixName); にします。 let preimage = `${nameSpace}:${name}`; return Buffer.from(sha256.digest(preimage)).slice(0, 8); }
名前空間はグローバルである必要があります これは Typescript の例です // 命令バッファを作成します const ixBuffer = sighash('global','initialize');
const命令Buffer = Buffer.concat([ ixBuffer, // 名前空間+メソッド名 OtherBuffer, // 命令に渡すその他のデータ。 ])
// 命令を作成する const トランザクション命令 = new トランザクション命令({ プログラム ID: プログラムアドレス、 データ: 命令バッファ、 キー: [ ... 】 })