Как отправить транзакцию в блокчейн с помощью библиотеки Web3.py

27 июля 2023

Существует два метода отправки транзакций с помощью web3.py: send_transaction() и send_raw_transaction().

Краткое руководство:

  1. Если вы хотите подписать транзакцию в автономном режиме или отправить предварительно подписанную транзакцию:
  • использовать sign_transaction() + send_raw_transaction()
  1. Если вы в основном используете одну и ту же учетную запись для всех транзакций и хотите сократить несколько строк кода:
  • настроить construct_sign_and_send_raw_middleware(), затем
  • использовать send_transaction()
  1. Во всех остальных случаях вам придется:
  • загрузить учетную запись через 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(), а затем подпись и отправка необработанной транзакции.