Ошибка при вызове web3.sendRawTransaction(signature.serialize())

Я хочу подписать транзакцию пользователя из фантомного кошелька, а затем отправить транзакцию через web3.js, но после успешной подписи транзакции библиотечная функция web3js sendRawTransaction() выдает сообщение об ошибке в консоли

      const signedTransaction = await window.solana.signTransaction(transaction);
const signature = await connection.sendRawTransaction(signedTransaction.serialize());
await connection.confirmTransaction(signature);

1 ответ

Если вы посмотрите на реализацию , вы увидите, что она добавляет блок-хеш к транзакции перед подписанием, сериализацией и отправкой. Без блок-хэша вы получите эту ошибкуBlockhash not found. Поэтому вместо этого вам нужно сделать что-то вроде:

      const latestBlockhash = await connection.getLatestBlockhash();
transaction.lastValidBlockHeight = latestBlockhash.lastValidBlockHeight;
transaction.recentBlockhash = latestBlockhash.blockhash;
const signedTransaction = await window.solana.signTransaction(transaction);
const signature = await connection.sendRawTransaction(signedTransaction.serialize());
await connection.confirmTransaction(signature);

Полная реализацияsendTransactionна https://github.com/solana-labs/solana/blob/3fcdc45092b969baeb7273de6596399d98277366/web3.js/src/connection.ts#L4389

Другие вопросы по тегам