Web3js

sendSignedTransaction 上的 JSONRPC 錯誤

  • May 18, 2018

我經營 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 之間的互動,並顯示有關事務的更多詳細資訊。

引用自:https://ethereum.stackexchange.com/questions/48807