跳到主要內容
未找到指令後備。錯誤號:101。錯誤消息:不支持後備功能
您必須像 Ademola 提到的那樣為您的交易數據提供指令鑒別器。
您可以做的是獲取指令鑒別器,然後將其附加到前 8 個字節中的數據中。
Rust 中的獲取指令鑒別器
pub fnighash(命名空間: &str, 名稱: &str) -> [u8; 8]{
let 原像 = format!("{}:{}", 命名空間, 名稱);
讓 mutighash = [0u8; 8];
ighash.copy_from_slice(
&anchor_client::anchor_lang::solana_program::hash::hash(preimage.as_bytes()).to_bytes()
[..8],
);
嘆氣
}
println!("{:?}",ighash("全局", "初始化"));
在打字稿中獲取鑒別器指令
函數ighash(nameSpace: string, ixName: string): Buffer {
讓名稱 = SnakeCase(ixName);
讓原像 = `${nameSpace}:${name}`;
return Buffer.from(sha256.digest(原像)).slice(0, 8);
}
命名空間應該是全局的
這是 Typescript 中的示例
// 製作指令緩衝區
const ixBuffer =ighash('全局','初始化');
const 指令Buffer = Buffer.concat([
ixBuffer, // 命名空間+方法名
OtherBuffer, // 要傳遞給指令的其他數據。
])
// 編寫指令
const transactionInstruction = new TransactionInstruction({
節目 ID:節目地址,
數據:指令緩衝區,
鍵:[
...
]
})