В API-интерфейсах web3 я не видел возможности указать закрытый ключ для отправки транзакции в doc . Как это делается тогда? Насколько я понимаю, нам нужен закрытый ключ конкретной учетной записи для отправки транзакции.
web3 отправляет транзакции с использованием разблокированных кошельков, что требует, чтобы вы разблокировали свою учетную запись с помощью файла ключа и пароля перед отправкой транзакции. Затем web3 может получить доступ к закрытому ключу из разблокированного кошелька и подписать транзакцию.
Если вы хотите избежать разблокировки кошелька, вам необходимо самостоятельно подписать транзакцию и отправить необработанную транзакцию с помощью eth.sendRawTransaction.
К сожалению, web3 не поддерживает подписание транзакций. Однако вы можете подписать транзакцию с помощью ethereumjs-tx . Чтобы получить шестнадцатеричную строку serializedTx
, содержащую подписанную транзакцию, используйте
const tx = new EthereumTx(txParams);
tx.sign(privateKey);
let serializedTx = "0x" + tx.serialize().toString('hex');
serializedTx
можно использовать с eth.sendRawTransaction.
Для подписания транзакций необходим закрытый ключ privateKey
. Если у вас нет закрытого ключа, вы можете использовать myetherwallet.com , чтобы получить его из файла ключа и парольной фразы, или вы можете программно получить закрытый ключ из файла ключа и пароля, используя
let privateKey = keythereum.recover(password, keyObject);
от кейтерума . keyObject
— это содержимое ключевого файла, представляющего собой строку JSON.
Подписание транзакции обрабатывается Provider , установленным в объекте web3.
Например, если пользователь взаимодействует с Dapp через браузер, то вполне вероятно, что провайдером является MetaMask, и это будет обрабатывать пользователя, авторизующего транзакции.
Медведев1088