JSONRPC-Fehler bei sendSignedTransaction

Ich verwende Ganache, Trüffel und Metmask. Wenn ich den folgenden Code ausführe, erhalte ich einen Fehler in der Funktion this.web3.eth.sendSignedTransaction():

BEARBEITEN: Mein Code wurde wie folgt geändert. Der Fehler blieb jedoch gleich.

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

Der Fehler ist folgender:

index.js:2178 Error: Returned error: {"id":6,"jsonrpc":"2.0","error":{"code":-32603}}
at Object.ErrorResponse (errors.js:29)

Ich habe absolut keine Ahnung mehr, wo ich suchen soll und habe das Gefühl, alles versucht zu haben, könnte es etwas damit zu tun haben, dass ich mit Metamask verbunden bin? Wenn ich versuche, diese Transaktion mit eth.method.send() über die Metamaske zu senden, gibt die Transaktion keinen Fehler aus und verhält sich wie erwartet.

Eine Möglichkeit, dies zu untersuchen, besteht darin, den Quellcode von Ganache Core zu öffnen und nach -32603(oder genauer gesagt der hexadezimalen Darstellung von 2^32 - 32603) zu suchen.
Vielen Dank für Ihre schnelle Antwort, aber dies scheint keine Treffer zu erhalten: github.com/trufflesuite/ganache-core/…
Nach einigen Recherchen fand ich heraus, dass der Fehlercode nur bedeutet, dass es sich um einen internen json-rpc-Fehler handelt, was überhaupt nicht hilfreich ist.
Es ist. Ich verwende keine Ganache, aber ich nehme an, Sie müssen bestimmte Bibliotheken öffnen, oder? Überprüfen Sie, ob RPC der Verbindung erlaubt, die von Ihnen verwendeten Bibliotheken zu verwenden (web3, web3.eth usw.)
Ich denke, Ganache unterstützt sendSignedTransaction möglicherweise noch nicht.. Ich habe ein Problem erstellt

Antworten (1)

Um die Nonce zu bekommen, müssen Sie anrufen web3.eth.getTransactionCount, und nicht getBlockTransactionCount.

  • getTransactionCount

    Rufen Sie die Anzahl der Transaktionen ab, die von dieser Adresse gesendet wurden.

  • getBlockTransactionCount

    Gibt die Anzahl der Transaktionen in einem bestimmten Block zurück.

Um Interaktionen mit Ganache zu debuggen, können Sie damit beginnen ganache-cli --verbose, die Interaktionen zwischen dem Client und Ganache anzuzeigen und weitere Details zu Transaktionen anzuzeigen.

Wow, ich kann nicht glauben, dass es das war. Vielen Dank!