Necesito llamar a una función (de cambio de estado) en mi contrato.
Así es como estoy ejecutando esta transacción actualmente:
let transaction = contract.methods.myFunc();
await web3.eth.personal.unlockAccount(ACCOUNT_ADDRESS, ACCOUNT_PASSWORD);
let gas = await transaction.estimateGas({from: ACCOUNT_ADDRESS, gasPrice: GAS_PRICE});
await transaction.send({from: ACCOUNT_ADDRESS, gasPrice: GAS_PRICE, gas: gas});
Sin embargo, según tengo entendido, desbloquear la cuenta en mi cliente Ethereum deja muchos agujeros de seguridad con los que lidiar.
¿Hay alguna forma de pasar mis credenciales (dirección de cuenta y contraseña) cuando ejecuto la transacción, en lugar de desbloquear la cuenta de antemano?
La documentación para unlockAccount
está aquí .
La documentación para send
está aquí .
¡Muchas gracias!
Simplemente puede firmar la transacción de su lado y enviar una transacción sin procesar, lo hará en python o java u otro entorno, pero no en su cliente Ethereum directamente. Por lo que el riesgo se minimiza.
Ejemplo:
var Tx = require('ethereumjs-tx');
dataTx = myContract.methods.myFunc(params).encodeABI(); //The encoded ABI of the method
var rawTx = {
to: 'yourcantract address',
data:dataTx
}
var tx = new Tx(rawTx);
tx.sign('yourprivateKey');
var serializedTx = tx.serialize();
web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'))
.on('receipt', console.log);
Espero que esto ayude.
buena vibración
sign
ysignTransaction
aquí . Pero ninguno de ellos toma la clave privada/frase de contraseña/contraseña como entrada. Entonces, ¿cómo exactamente puede reemplazarunlockAccount
?buena vibración
web3.eth.personal.signTransaction
(no la funciónweb3.eth.signTransaction
).Jaime
buena vibración
contract.methods.myFunc()
es completamente diferente (y sí, ambos se denominan objeto de transacción en los documentos).Jaime
buena vibración
Returned error: Insufficient funds. The account you tried to send transaction from does not have enough funds
(un error que no obtuve cuando uséunlockAccount
).Jaime
buena vibración
Jaime
buena vibración
web3
, sinethereumjs-tx
). No pude hacer que funcionara, así que publiqué una pregunta más detallada aquí .