Мне нужно вызвать функцию (изменения состояния) в моем контракте.
Вот как я сейчас выполняю эту транзакцию:
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});
Однако, насколько я понимаю, разблокировка учетной записи на моем клиенте Ethereum оставляет много дыр в безопасности, с которыми нужно справиться.
Есть ли способ передать свои учетные данные (адрес учетной записи и пароль) при выполнении транзакции вместо предварительной разблокировки учетной записи?
Документация для unlockAccount
находится здесь .
Документация для send
находится здесь .
Большое спасибо!
Вы можете просто подписать транзакцию на своей стороне и отправить необработанную транзакцию, вы будете делать это на python или java или в другой среде, но не на своем клиенте Ethereum напрямую. Так что риск сведен к минимуму.
Пример:
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);
Надеюсь это поможет.
хорошая вибрация
sign
иsignTransaction
здесь . Но ни один из них не принимает на вход приватный ключ/фразу-пароль/пароль. Так как именно он может заменитьunlockAccount
?хорошая вибрация
web3.eth.personal.signTransaction
(не функциюweb3.eth.signTransaction
).Хайме
хорошая вибрация
contract.methods.myFunc()
совершенно другой (и да, оба они упоминаются как объект транзакции в документации).Хайме
хорошая вибрация
Returned error: Insufficient funds. The account you tried to send transaction from does not have enough funds
(ошибка, которую я не получил, когда использовалunlockAccount
).Хайме
хорошая вибрация
Хайме
хорошая вибрация
web3
, безethereumjs-tx
). Не удалось заставить его работать, поэтому разместил более подробный вопрос здесь .