Как можно отследить транзакции по нескольким кошелькам с использованием web3.py?

Как подписать и получать уведомления о новых транзакциях для нескольких кошельков с использованием библиотеки web3 в Python? Хочу создать фильтр для отслеживания транзакций на нескольких кошельках и получать уведомления при появлении новых транзакций. Код запускается, но не получаю уведомлений о транзакциях. Может быть, проблема в том, что транзакции ещё не подписаны, но это только гипотеза.
  • 6 февраля 2024 г. 18:48
Ответы на вопрос 1
В web3.py есть несколько способов отследить транзакции для кошельков. Сперва вам нужно настроить подключение к провайдеру Ethereum, например к Infura или к локальному узлу. Ниже приведен пример кода, который можно использовать для отслеживания входящих транзакций на адреса кошельков.

```python
from web3 import Web3
import time

# Подключение к провайдеру
web3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY'))

# Список адресов кошельков, которые нужно отследить
wallet_addresses = ['0xYourWalletAddress1', '0xYourWalletAddress2']

def handle_transaction(transaction):
    print(f"Transaction: {transaction}")

def log_loop(event_filter, poll_interval):
    while True:
        for event in event_filter.get_new_entries():
            handle_transaction(event)
        time.sleep(poll_interval)

def main():
    # Создаем фильтр для всех входящих транзакций на перечисленные адреса
    event_filter = web3.eth.filter({'address': wallet_addresses})
    
    # Читаем события с заданным интервалом
    log_loop(event_filter, 2)
    
if __name__ == "__main__":
    main()
```

В этом примере `log_loop` функция будет опрашивать события в блокчейне и вызывать `handle_transaction` для каждой обнаруженной транзакции для адресов из списка `wallet_addresses`. Можно расширить `handle_transaction` функцию, чтобы реагировать на обнаруженные транзакции так, как вам необходимо.

Очень важно понимать, что использовать фильтры для реального времени может быть неэффективно, так как это требует постоянного опроса узла. Более эффективный способ – использовать подписки WebSockets API, но для этого вам нужен провайдер, который поддерживает WebSockets (например, Infura).

Если вы хотите, чтобы скрипт работал 24/7, нужно задуматься о более устойчивом и надежном методе опроса, возможно, с использованием асинхронного программирования или с задействованием внешних сервисов, специализирующихся на мониторинге блокчейн-событий.

Обратите внимание, что в приведенном коде нет части, отвечающей за "подписание" транзакций. Данный код лишь отслеживает транзакции в блокчейне, он не управляет их отправкой или подписью. Подпись транзакций – это отдельный процесс, который требуется, когда вы хотите инициировать транзакцию. Для подписания транзакций используется метод `web3.eth.account.signTransaction(transaction, privateKey)`, где `transaction` – это словарь с информацией о транзакции, а `privateKey` – это приватный ключ, подтверждающий ваше право инициировать транзакцию от имени кошелька.
Похожие вопросы