Нужен или нет закрытый ключ для отправки транзакции в ethereum

В API-интерфейсах web3 я не видел возможности указать закрытый ключ для отправки транзакции в doc . Как это делается тогда? Насколько я понимаю, нам нужен закрытый ключ конкретной учетной записи для отправки транзакции.

Вы пробовали personal.unlockAccount()? web3py.readthedocs.io/en/latest/… Вы можете разблокировать учетную запись, которую вы указали в поле from, тогда клиент будет использовать соответствующий закрытый ключ для подписи.

Ответы (2)

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.

Спасибо @gisdev_p за ответ. Теперь я получил концепцию. Один вопрос заключается в том, как я могу подписать транзакции смарт-контракта? Если я использую ethereumjs-tx, отличный от пути фразы web3.
На самом деле нет никакой разницы, совершаете ли вы транзакцию на обычный счет или на контракт. Обработка транзакции и подписание одинаковы. То, что у вас обычно будет часть данных с транзакцией в контракт, но, скорее всего, не с транзакцией в обычную учетную запись, не имеет никакого влияния на подписание. Вы просто добавляете часть данных в транзакцию и подписываете ее.

Подписание транзакции обрабатывается Provider , установленным в объекте web3.

Например, если пользователь взаимодействует с Dapp через браузер, то вполне вероятно, что провайдером является MetaMask, и это будет обрабатывать пользователя, авторизующего транзакции.

Я на самом деле пытаюсь с сервера. Из моего приложения Python Django. Как я могу это сделать с помощью web3.py?
Мне любопытно, основываясь на том, что вы только что сказали, если я использую встроенного провайдера, например, web3.providers.HttpProvider, подписывает ли он транзакцию?
@c.sokun, если у вас работает локальный узел Ethereum и открыт API RPC, то этот узел будет обрабатывать подпись TX