Error de JSONRPC en sendSignedTransaction

Corro ganache, trufa y metmask. Si ejecuto el siguiente código, aparece un error en la función this.web3.eth.sendSignedTransaction():

EDITAR: cambié mi código a lo siguiente. Sin embargo, el error siguió siendo el mismo.

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

El error es el siguiente:

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

Ya no tengo idea de dónde buscar y siento que lo he intentado todo, ¿podría tener algo que ver con el hecho de que estoy conectado a metamask? Cuando trato de enviar esta transacción a través de metamask con eth.method.send(), la transacción no da un error y se comporta como se esperaba.

Una forma de investigar esto es abrir el código fuente de Ganache Core y buscar -32603(o más precisamente, la representación hexadecimal de 2^32 - 32603).
Gracias por su rápida respuesta, pero esto no parece tener éxito: github.com/trufflesuite/ganache-core/…
Después de investigar un poco, descubrí que el código de error solo significa que es un error interno de json-rpc, lo que no es útil en absoluto.
Es. No uso ganache, pero supongo que tienes que abrir bibliotecas específicas, ¿no? Compruebe si RPC permite la conexión para usar las bibliotecas que usa (web3, web3.eth, etc.)
Creo que Ganache podría no ser compatible con sendSignedTransaction todavía... He creado un problema

Respuestas (1)

Para obtener el nonce, debe llamar web3.eth.getTransactionCounty no getBlockTransactionCount.

  • getTransactionCount

    Obtenga los números de transacciones enviadas desde esta dirección.

  • getBlockTransactionCount

    Devuelve el número de transacción en un bloque dado.

Para depurar las interacciones con ganache, puede comenzar ganache-cli --verbosemostrando las interacciones entre el cliente y ganache y mostrará más detalles sobre las transacciones.

wow, no puedo creer que fuera eso. ¡Muchas gracias!