交易最近需要Blockhash-幻影钱包Solana


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);

相关内容

  • 没有找到相关文章

最新更新