Существует два метода отправки транзакций с помощью web3.py: send_transaction() и send_raw_transaction().
Краткое руководство:
- Если вы хотите подписать транзакцию в автономном режиме или отправить предварительно подписанную транзакцию:
- использовать sign_transaction() + send_raw_transaction()
- Если вы в основном используете одну и ту же учетную запись для всех транзакций и хотите сократить несколько строк кода:
- настроить construct_sign_and_send_raw_middleware(), затем
- использовать send_transaction()
- Во всех остальных случаях вам придется:
- загрузить учетную запись через eth-account (w3.eth.account.from_key(pk)), затем
- использовать send_transaction()
Взаимодействие с контрактом или его развертывание?
- Вариант 1: transact() использование send_transaction() под капотом
- Вариант 2: build_transaction() + sign_transaction + send_raw_transaction()
Примеры кода
Создание объекта
w3.eth.send_transaction вместе с eth-tester
Многие руководства используют eth-tester (через EthereumTesterProvider) для удобства и скорости передачи идей/создания доказательства концепции. Транзакции, отправленные тестовыми аккаунтами, автоматически подписываются.
w3.eth.send_transaction + промежуточное ПО подписи транзакции
Метод send_transaction() удобен и актуален. Если вы хотите продолжить использовать этот шаблон за пределами eth-tester, вы можете использовать промежуточное ПО web3.py для подписи транзакций из определенной учетной записи:
Примечание. В примере используется сохраненный в коде скрипта приватный ключ. Никогда не делайте этого! Вместо этого извлеките его из переменной среды.
w3.eth.send_raw_transaction
Если вы не выберете промежуточное программное обеспечение, вам необходимо:
- построить каждую транзакцию,
- sign_transaction, и
- затем используйте send_raw_transaction().
Транзакции с контрактами
Те же самые концепции применимы к взаимодействиям с контрактами, по крайней мере, внутренне.
Выполнение функции смарт-контракта требует отправки транзакции, которая обычно выполняется одним из двух способов:
- выполнение transact() функции или
- build_transaction(), а затем подпись и отправка необработанной транзакции.