¿Cómo firmar un método de envío en web3 1.0?

Tengo la siguiente función y no quiero firmar manualmente la transacción cada vez que se llama, ¿cómo puedo configurar una forma de firmar esta transacción con un objeto? He visto sendRawTransaction y account.signTransaction pero no puedo encontrar una manera de implementarlos en mi problema.

this.contractObject = this.contractObject = {from: this.account, gas:300000};

this.contract.methods.createCountry(arg1, 1rg2, arg3).send(this.contractObject, (err, res) => {
                if (err) {
                    throw err;
                } else {
                    console.log(res);
                }
            })

La siguiente función se agrega en un lote, no sé si esto importará.

Respuestas (1)

Primero, necesita generar su transacción, aquí hay un ejemplo:

   let tx_builder = contractInstance.methods.myMethod(arg1, arg2, ...);
let encoded_tx = tx_builder.encodeABI();
let transactionObject = {
    gas: amountOfGas,
    data: encoded_tx,
    from: from_address,
    to: contract_address
};

Luego puede firmar la transacción, utilizando la dirección y la clave privada de esta dirección específica. Cuando esté firmado, puede enviarlo al nodo:

        web3g.eth.accounts.signTransaction(transactionObject, private_key, function (error, signedTx) {
        if (error) {
        console.log(error);
        // handle error
    } else {
web3g.eth.sendSignedTransaction(signedTx.rawTransaction)
        .on('receipt', function (receipt) {
            //do something
     });
    }

Editar: después de firmarlo, no tiene que enviarlo. Puede agregarlo a la solicitud por lotes.

¡Esto es exactamente lo que estaba buscando! Probaré la solución y te responderé con el resultado.
Sigo recibiendo un error en la función web3.eth.sendSignedTransaction(), el problema es que el error es muy vago, así que no tengo idea de lo que está pasando... ¿Tienes alguna idea? errores.js:29 Error no detectado (en promesa): error devuelto: {"id":14,"jsonrpc":"2.0","error":{"código":-32603}}
¿Su nodo tiene un punto final RPC abierto?
Tengo ganache abierto y todas las demás funciones que hacen uso de Ganache funcionan.
Creé una nueva pregunta para este problema: ethereum.stackexchange.com/questions/48807/…