当尝试调用编译的程序时@solana/solidity,我收到以下错误:
Transaction simulation failed: Error processing Instruction 0: Program failed to complete
Program jdN1wZjg5P4xi718DG2HraGuxVx1mM7ebjXpxbJ5R3N invoke [1]
Program log: pxKTQePwHC9MiR52J5AYaRtSLAtkVfcoGS3GaLD24YX
Program log: sender account missing from transaction
Program jdN1wZjg5P4xi718DG2HraGuxVx1mM7ebjXpxbJ5R3N consumed 200000 of 200000 compute units
Program failed to complete: BPF program Panicked in solana.c at 285:0
Program jdN1wZjg5P4xi718DG2HraGuxVx1mM7ebjXpxbJ5R3N failed: Program failed to complete
jdN1wZjg5P4xi718DG2HraGuxVx1mM7ebjXpxbJ5R3N
是程序的公钥并且pxKTQePwHC9MiR52J5AYaRtSLAtkVfcoGS3GaLD24YX
是发送者的公钥。
我在用着@solana/solidity 库的一个分支这暴露了Transaction
对象,以便可以对其进行签名和发送幻影钱包在前端。导致错误的代码如下:
// Generate the transaction
const transaction = contract.transactions.send(...args);
// Add recent blockhash and fee payer
const recentBlockhash = (await connection.getRecentBlockhash()).blockhash;
transaction.recentBlockhash = recentBlockhash;
transaction.feePayer = provider.publicKey;
// Sign and send the transaction (throws an error)
const res = await provider.signAndSendTransaction(transaction);
我会尝试自己进一步调试,但我不知道从哪里开始。查找错误消息没有产生任何结果,并且错误消息的描述性不强。我不确定此错误是否发生在程序执行本身中,或者是否是事务对象的组成存在问题。如果这是程序执行中的问题,有没有办法将日志添加到我的 Solidity 代码中?如果是交易对象的问题,可能会遗漏什么?如何更好地调试此类问题?
感谢您的任何帮助。
编辑:尽管我没有更改任何提供的代码,但我现在遇到了不同的错误。错误消息现在如下:
Phantom - RPC Error: Transaction creation failed. {code: -32003, message: 'Transaction creation failed.'}
不幸的是,这条错误消息的帮助甚至不如上一条。我不确定 Phantom Wallet 是否已更新,或者项目依赖项是否在某个时刻已更新,但考虑到这两个错误消息的模糊性质以及我的代码都没有更改的事实,我相信它们是由导致的由同一个问题。再次强调,任何帮助或调试提示都是值得赞赏的。