命令フォールバックが見つかりません。エラー番号: 101。エラー メッセージ: フォールバック関数はサポートされていません。
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: プログラムアドレス、
データ: 命令バッファ、
キー: [
...
】
})
solana原文を見るCC BY-SA 4.0