Вызов программы привязки (solana) через классический javascript? ошибка пользовательской программы: 0x64
я развернул программу в devnet, когда я запускаю якорный тест, все работает нормально. Программе нужно 3 ключа, и просто верните ok() (внутри я все прокомментировал).
Я пытаюсь вызвать эту программу в своем одностраничном приложении (с фантомной подписью), но получаю следующую ошибку: Ошибка пользовательской программы: 0x64
Я думаю, что проблема довольно проста, но я не могу понять причину.
const instructions: TransactionInstruction[] = [];
const exchangeInstruction = new TransactionInstruction({
programId: program_id,
data: Buffer.alloc(0),
keys: [
{ pubkey: publicKey1, isSigner: true, isWritable: true },
{ pubkey: publicKey2, isSigner: false, isWritable: true },
{ pubkey: system_program, isSigner: false, isWritable: false },
],
});
instructions.push(exchangeInstruction);
const transaction = new Transaction().add(...instructions);
transaction.feePayer = publicKey1;
transaction.recentBlockhash = (await connection.getRecentBlockhash()).blockhash;
var signedTransaction = await window.solana.signTransaction(transaction);
var signature = await connection.sendRawTransaction(signedTransaction.serialize());
Открытый ключ взят из нового PublicKey(...)
Program_id — это открытый ключ моей программы (PublicKey()).
В моей программе нет аргументов (я пытался удалить данные: {...}, но получил ту же ошибку).
Когда я вызываю программу с файлом .ts и тестом привязки, все работает нормально, вот код:
const tx = await program.rpc.initialize(
{
accounts: {
publicKey1: xxxx.publicKey,
publicKey2: yyyy.publicKey,
systemProgram: anchor.web3.SystemProgram.programId,
},
signers: [xxxx]
});
Я должен что-то упустить где-то, но не могу понять, где, если кто-то может помочь, был бы очень признателен
1 ответ
Согласно документации Anchor, код ошибки
0x64
, что соответствует 100 в десятичном виде, равно
InstructionMissing
, для номера вашей инструкции должен быть указан какой-нибудь 8-байтный идентификатор.
Чтобы исправить это, вам, вероятно, нужно объявить данные инструкции как:
data: Buffer.alloc(8),
Ссылка на https://docs.rs/anchor-lang/latest/src/anchor_lang/error.rs.html#19