Uncaught (in promise) WalletSignTransactionError: Transaction recentBlockhash required
at PhantomWalletAdapter.signTransaction (adapter.ts:215:1)
at async WalletProvider.tsx:247:1
at async mintNFT (luckoo.tsx:100:1)
当我试图使用solana钱包发送交易时,我得到了这个,我该怎么办?
您需要在事务中提供recentBlockhash
才能对其进行签名。最有可能的情况是,在使用getLatestBlockhash
签署事务之前,您需要获取一个块哈希并添加它,即:
let blockhash = (await connection.getLatestBlockhash('finalized')).blockhash;
transaction.recentBlockhash = blockhash;
以前,您会使用类似的不推荐使用的函数getRecentBlockhash
:
let blockhash = await connection.getRecentBlockhash('finalized').blockhash;
transaction.recentBlockhash = blockhash;
您最好直接使用sendTransaction
,它可以为您完成所有这些工作。正如您在源代码中看到的,如果最近的blockhash还不存在,sendTransaction
将填充它:https://github.com/solana-labs/wallet-adapter/blob/a5b1ebd70ae9753d188fec60e95e252402f3f371/packages/core/base/src/signer.ts#L13
- 关于区块哈希的更多信息:https://docs.solana.com/developing/programming-model/transactions#recent-块散列
- 有关获取区块哈希的更多信息:https://docs.solana.com/developing/clients/jsonrpc-api#getlatestblockhash
- 有关使用
sendTransaction
的更多信息:https://github.com/solana-labs/wallet-adapter#usage
使用此
let blockhash = (await connection.getLatestBlockhash("finalized")).blockhash;
console.log("recentBlockhash: ", blockhash);