Web3js
sendSignedTransaction 上的 JSONRPC 錯誤
我經營 ganache、truffle 和 metmask。如果我執行下面的程式碼,我會在 this.web3.eth.sendSignedTransaction() 函式上得到一個錯誤:
編輯:將我的程式碼更改為以下內容。但錯誤仍然相同。
const encoded_tx = this.contract.methods.createCountry("NL", 100, 100, 100000000, this.account).encodeABI(); const nonce = await this.web3.eth.getBlockTransactionCount(this.account); const rawTx = { nonce: this.utils.toHex(nonce), gasLimit: this.utils.toHex(3000000), gasPrice: this.utils.toHex(this.utils.toWei('20', 'gwei')), data: encoded_tx, from: this.account, to: this.contractAddress }; let tx = new Tx(rawTx); tx.sign(this.pvtKey); let serializedTx = tx.serialize(); this.web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex')) .on('receipt', console.log);
錯誤如下:
index.js:2178 Error: Returned error: {"id":6,"jsonrpc":"2.0","error":{"code":-32603}} at Object.ErrorResponse (errors.js:29)
我完全不知道該往哪裡看,感覺我已經嘗試了一切,這可能與我連接到 metamask 的事實有關嗎?當我嘗試通過帶有 eth.method.send() 的元遮罩發送此事務時,事務不會給出錯誤並且按預期執行。
要獲得 nonce,您必須呼叫
web3.eth.getTransactionCount
,而不是getBlockTransactionCount
。
- 獲取交易計數
獲取從該地址發送的交易數量。
- getBlockTransactionCount
返回給定塊中的事務數。
要調試與 ganache 的互動,您可以從
ganache-cli --verbose
它開始顯示客戶端和 ganache 之間的互動,並顯示有關事務的更多詳細資訊。