Войти
Главная / Data science в трейдинге / Ищем крупные криптотранзакции и богатые кошельки на Solana с помощью Python
Хотите зарабатывать на трейдинге?

Подписывайтесь на наш телеграм-канал для трейдеров — с глубокой аналитикой и рабочими стратегиями

Подписаться

Как собрать свой журнал для тестирования стратегии? Заберите бесплатный гайд

Гайд от нашей команды поможет вам систематизировать торговлю и принимать взвешенные решения

Подтвердите согласие

Ищем крупные криптотранзакции и богатые кошельки на Solana с помощью Python

Отслеживание крупных транзакций в криптовалютах помогает видеть, как движутся средства по сети, куда уходят токены и кто их накапливает. В этой статье мы напишем простой скрипт на Python, который будет находить большие переводы в блокчейне Solana через публичный RPC-интерфейс.

python
Copy code
def get_recent_blocks(seconds=None):
    current_slot = requests.post(SOLANA_RPC_URL, json={
        "jsonrpc": "2.0", "id": 1, "method": "getSlot"
    }).json()['result']

    block_time = requests.post(SOLANA_RPC_URL, json={
        "jsonrpc": "2.0", "id": 1, "method": "getBlockTime", "params": [current_slot]
    }).json()['result']

    start_time = int(datetime.datetime.utcnow().timestamp()) - seconds
    past_slot = current_slot

    while block_time and block_time > start_time:
        past_slot -= 1
        block_time = requests.post(SOLANA_RPC_URL, json={
            "jsonrpc": "2.0", "id": 1, "method": "getBlockTime", "params": [past_slot]
        }).json().get('result', None)
        if block_time is None:
            break

    return list(range(past_slot, current_slot))

Что происходит:

  • Узнаём текущий слот (его можно представить как номер блока).
  • Смотрим, когда он был создан.
  • Двигаемся назад по слотам, пока не дойдём до нужного времени (например, N секунд назад).
  • Собираем список этих слотов, чтобы потом их проверить.

2. Извлекаем транзакции из блоков

2. Извлекаем транзакции из блоков

Теперь из полученных слотов достаём все транзакции и фильтруем их по объёму в USD.

python
Copy code
def get_transactions_from_blocks(blocks):
    transactions_list = []
    solusd_price = requests.get("https://api.coingecko.com/api/v3/simple/price?ids=solana&vs_currencies=usd").json()['solana']['usd']

    for block in blocks:
        response = requests.post(SOLANA_RPC_URL, json={
            "jsonrpc": "2.0",
            "id": 1,
            "method": "getBlock",
            "params": [block, {"encoding": "json", "transactionDetails": "full"}]
        }).json()

        if "result" in response:
            for tx in response["result"]["transactions"]:
                meta = tx.get("meta", {})
                message = tx["transaction"]["message"]
                account_keys = message["accountKeys"]
                pre_balances = meta.get("preBalances", [])
                post_balances = meta.get("postBalances", [])
                block_time = response["result"]["blockTime"]

                if len(account_keys) >= 2:
                    from_address = account_keys[0]
                    to_address = account_keys[1]
                    amount = round((post_balances[1] - pre_balances[1])/10**9*solusd_price, 4)

                    transactions_list.append({
                        "block_id": block,
                        "trans_id": tx["transaction"]["signatures"][0],
                        "time": datetime.datetime.utcfromtimestamp(block_time).isoformat() + "Z",
                        "from_address": from_address,
                        "to_address": to_address,
                        "amount": amount
                    })

    return {"success": True, "data": transactions_list}

Объяснение:

  • Сначала узнаём текущую цену SOL в долларах через CoinGecko.
  • Потом для каждого блока вытаскиваем все транзакции.
  • Смотрим, сколько SOL было до и после — и считаем разницу в USD.
  • Сохраняем главное: кто отправил, кто получил, сколько и в какое время.

3. Фильтруем крупные транзакции

Теперь выбираем только те переводы, которые превышают заданный лимит (например, $100):

python
Copy code
blocks = get_recent_blocks(1000)  # блоки за последние 1000 секунд
transactions = get_transactions_from_blocks(blocks)

transactions_list = []
for tx in transactions['data']:
    if tx['amount'] > 100:
        print('Найдена крупная транзакция: $', round(tx['amount'], 2), tx['trans_id'])
        transactions_list.append(tx['trans_id'])

4. Получаем подробности по кошелькам

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

python
Copy code
def get_transaction_wallets(transaction_signature, solusd_price):
    payload = {
        "jsonrpc": "2.0",
        "id": 1,
        "method": "getTransaction",
        "params": [transaction_signature, {"encoding": "jsonParsed"}]
    }

    response = requests.post(SOLANA_RPC_URL, json=payload)
    data = response.json()
    transaction_data = data["result"]
    meta = transaction_data.get("meta", {})
    tx_info = transaction_data.get("transaction", {})

    account_keys = tx_info.get("message", {}).get("accountKeys", [])
    pre_balances = meta["preBalances"]
    post_balances = meta["postBalances"]

    rows = []
    alerts = []

    for i in range(len(account_keys)):
        pubkey = account_keys[i]
        change = (post_balances[i] - pre_balances[i]) / 1e9
        percent_change = (change / pre_balances[i] * 100) if pre_balances[i] > 0 else 0
        usd_change = round(change * solusd_price, 4)

        row = {
            "address": pubkey,
            "pre_balance": pre_balances[i] / 1e9,
            "post_balance": post_balances[i] / 1e9,
            "change_amount": change,
            "change_in_%": round(percent_change, 2),
            "change_in_USD": usd_change
        }
        rows.append(row)

        if percent_change > 100 and usd_change > 1000:
            alert = f"⚠️ Кошелек {pubkey} увеличил баланс на {percent_change:.2f}% (${usd_change})"
            print(alert)
            alerts.append(alert)

    return rows, alerts

5. Обрабатываем все найденные транзакции

Финальный шаг — пройтись по всем найденным крупным транзакциям и собрать информацию в таблицу:

python
Copy code
def get_multiple_transactions(transaction_signatures):
    all_rows = []
    all_alerts = []

    for signature in transaction_signatures:
        rows, alerts = get_transaction_wallets(signature, solusd_price)
        all_rows.extend(rows)
        all_alerts.extend(alerts)
        time.sleep(3)  # пауза для API

    return pd.DataFrame(all_rows), all_alerts

Пример вывода

plaintext
Copy code
Найдена крупная транзакция: $ 1583.32 4VbfK3hzK...
⚠️ Кошелек GTe8... увеличил баланс на 350% ($1583.32)

Вывод

Этот скрипт помогает следить за крупными перемещениями в блокчейне Solana и находить необычные транзакции, которые могут указывать на действия китов или подозрительную активность. Все это мы делаем на Python, используя публичные RPC.

Что умеет скрипт:

  • Отслеживать движения крупных сумм в блокчейне Solana.
  • Замечать аномальные приросты баланса.
  • Выделять адреса, за которыми стоит понаблюдать.

Как можно расширить:

  • Добавить автоматические уведомления в Telegram.
  • Искать взаимосвязи между кошельками.
  • Сделать визуализацию в Plotly или Dash.

Код лежит в GitHub — не забудьте поставить звездочку и подписаться на профиль.

Хотите разбираться в рынках и зарабатывать на них при любых условиях?

Подписывайтесь на наш Telegram-канал о финансах и Data Science в трейдинге:
– Делаем глубокую аналитику
– Тестируем и разрабатываем торговые стратегии
– Кодим индикаторы и алгоритмы
– Собираем базу знаний для трейдеров

Подписаться
Хотите разбираться в рынках и зарабатывать на них при любых условиях?

Подписывайтесь на наш Telegram-канал о финансах и Data Science в трейдинге:
– Делаем глубокую аналитику
– Тестируем и разрабатываем торговые стратегии
– Кодим индикаторы и алгоритмы
– Собираем базу знаний для трейдеров

Подписаться

Научитесь читать графики всего за 15 минут

Заберите простой мини-гайд для быстрого старта в трейдинге. Идеально для новичков

Подтвердите согласие
Рынок переработки мусора: почему отходы могут стать одной из самых недооцененных инвестиций ближайших десятилетий
Когда инвесторы ищут перспективные рынки, они обычно смотрят на искусственный интеллект, робототехнику, энергетику или биотехнологии. Рынок переработки отходов редко оказывается...
Читать далее
Аналитика XRPUSDT на новую неделю (#35)
Тренд цены изменил свое направление с роста на падение, продавцы вновь одерживают победу, а мы ориентируемся на сигналы рынка и...
Читать далее
Аналитика XRPUSDT на новую неделю (#21)
XRPUSDT находится во флэте со слабым намеком на рост. Победа вторую неделю остается за покупателями, мы торгуем аналогично прошлой неделе...
Читать далее