Войти
Главная / 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 минут

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

Подтвердите согласие
⛓️‍💥 Всё, что нужно знать об ордерах стоп-лосс и тейк-профит
Стоп-лосс и тейк-профит — два важных инструмента управления рисками, которые используют трейдеры для защиты капитала и фиксации прибыли. Эти инструменты...
Читать далее
Аналитика ETHUSDT на новую неделю (#17)
На фоне плавного тренда на продажу Эфир не спешит делать резких движений, оставаясь в рамках предыдущей недели. Ждем новых уровней...
Читать далее
Аналитика BTCUSDT на новую неделю (#5)
На пятой неделе цена отдает предпочтение покупателям и продолжает тренд торговли наверх – BUY. Для Биткоина нашли много уровней и...
Читать далее