ข้ามไปยังเนื้อหาหลัก
ไม่พบคำแนะนำสำรอง หมายเลขข้อผิดพลาด: 101 ข้อความข้อผิดพลาด: ไม่รองรับฟังก์ชันสำรอง
คุณต้องระบุ instruction discriminator ให้กับ data ของ transaction ของคุณตามที่ Ademola ได้กล่าวไว้
สิ่งที่คุณสามารถทำได้คือดึง instruction discriminator แล้วต่อท้ายเข้ากับ data ของคุณใน 8 ไบต์แรก
ดึง Instruction Discriminator ใน Rust
pub fn sighash(namespace: &str, name: &str) -> [u8; 8] {
let preimage = format!("{}:{}", namespace, name);
let mut sighash = [0u8; 8];
sighash.copy_from_slice(
&anchor_client::anchor_lang::solana_program::hash::hash(preimage.as_bytes()).to_bytes()
[..8],
);
sighash
}
println!("{:?}", sighash("global", "initialize"));
ดึง Discriminator Instruction ใน typescript
function sighash(nameSpace: string, ixName: string): Buffer {
let name = snakeCase(ixName);
let preimage = `${nameSpace}:${name}`;
return Buffer.from(sha256.digest(preimage)).slice(0, 8);
}
namespace ควรเป็น global
นี่คือตัวอย่างใน Typescript
// สร้าง InstructionBuffer
const ixBuffer = sighash('global','initialize');
const instructionBuffer = Buffer.concat([
ixBuffer, // namespace+method_name
OtherBuffer, // ข้อมูลอื่น ๆ ที่คุณต้องการส่งไปยัง instruction
])
// สร้าง Instruction
const transactionInstruction = new TransactionInstruction({
programId: programAddress,
data: instructionBuffer,
keys : [
...
]
})