Транзакции | Python Оптимизация
Сегодня разбрем как отпралять транзакции с помощью скриптов на Python
1. Настройка Окружения
Подробная Инструкция t.me/code_vartcall/566
2. Что Необходимо Для Отправки Транзакции?
Web3-Кошелек - Metamask | TrustWallet | Zerion | etc
Адрес отправителя и получателя: два Ethereum-адреса в формате checksum.
Приватный Ключ - Для подписания транзакции и доступа к кошелька отправителя
Сумма перевода: для эфира указывается в wei, для токенов (в их минимальных единицах)
Nonce: количество отправленных транзакций с адреса отправителя (для предотвращения повторных транзакций)
Gas: максимальное количество газа, которое транзакция может использовать.
Gas Price: цена за единицу газа; определяет приоритет транзакции.
upd: как получить приватный ключ - youtube.com/watch?v=iLCl15n_MII
3. Код
from web3 import Web3 from web3.exceptions import TransactionNotFound, TimeExhausted infuraUrl = "https://sepolia.infura.io/v3/вашInfuraКлюч" web3 = Web3(Web3.HTTPProvider(infuraUrl)) if web3.is_connected(): print("Connected to Ethereum network") sender_address = "0xАдресОтправителя" final_sender_address = web3.to_checksum_address(sender_address) print(f"Sender address: {final_sender_address}") receiver_address = "0xАдресПолучателя" print(f"Receiver address: {receiver_address}") final_receiver_address = web3.to_checksum_address(receiver_address) private_key = "приватныйКлючВашегоКошелька" nonce = web3.eth.get_transaction_count(final_sender_address) # создаем транзакцию tx = { 'nonce': nonce, 'to': final_receiver_address, 'value': web3.to_wei(0.01, 'ether'), 'gas': 21000, 'gasPrice': web3.to_wei('50', 'gwei'), } # подписать транзацию signed_tx = web3.eth.account.sign_transaction(tx, private_key) try: tx_hash = web3.eth.send_raw_transaction(signed_tx.raw_transaction) # get the transaction hash print(f"Transaction hash: 0x{tx_hash.hex()}") receipt = web3.eth.wait_for_transaction_receipt(tx_hash, timeout=120) if receipt.status == 1: print("Transaction successful ✅") else: print("Transaction failed") except (TransactionNotFound, TimeExhausted) as e: print(f"Transaction failed: {str(e)}") else: print("Failed to connect to Ethereum network")
4. Анализ
python файл.py
после проведения транзакции вы получите хеш-транзакции в формате 0xВашХеш
Проверить Транзакцию далее можно на sepolia.etherscan.io указав ваш хеш транзации
Про скрипт (как выполнялась транзакция):
- Подключились с блокчейну через Infura
- Определили адреса отправителя и получателя (+ преобразовали их в checksum формат)
- Определили приватный ключ отправителя
- Получили nonce для отправителя (получается количество транзакций, отправленных с адреса отправителя, для предотвращения повторных транзакций)
- Создание Транзакции через хеш-таблицу tx с ее транзакции: адрес получателя, сумма перевода, лимит газа и цена газа.
- Подписание Транзакции signed_tx через приватный ключ отправителя
- Отправка транзакции и обработка ошибок в try: except блоке
Подписанная транзакция отправляется в сеть. Скрипт ожидает получения квитанции о транзакции и проверяет её статус. В случае ошибок (например, транзакция не найдена или истекло время ожидания) выводится сообщение.
Время ожидания прописано в receipt (timeout = 120) - ждем 120 секунд
Также в скрипте я использовал "raw transaction" (сырая транзакция) - это транзакция, которая была подготовлена, но ещё не подписана.
Она содержит все необходимые данные включая: адреса отправителя и получателя, сумму перевода, количество газа, цену газа и другие параметры
После подписания приватным ключом отправителя такая транзакция становится подписанной и готовой к отправке в сеть Ethereum.
Теперь мы научились отправлять транзакции между кошельками. Все обновления и следующие уроки в моем телеграм-канале - t.me/code_vartcall