Парсинг даних whale-транзакцій
"Кит" у контексті on-chain аналізу — адреса з обсягом активів або транзакцій, значимим відносно загальної ринкової ліквідності. Переведення 50,000 ETH з біржевого гаманця на cold wallet створює цінове тиск та інформаційний сигнал. Моніторинг таких перемищень — практична задача для трейдинг-систем, risk management та on-chain аналітики.
Що саме відслідковувати
Не всі крупні транзакції одинаково інформативні. Ключові паттерни:
Exchange inflow/outflow: крупний переведення на біржу (inflow) — потенціальна продаж. Переведення з біржи (outflow) — аккумуляція або перехід до self-custody. Для коректної інтерпретації необхідна база біржевих адрес.
Cross-chain bridges: крупні рухи через мости (Arbitrum bridge, Stargate, LayerZero) сигналізують про перемищення ліквідності між мережами.
DeFi-подій: крупний вивід ліквідності з Uniswap пула, крупне погашення займу в Aave, відкриття/закриття крупної позиції на GMX.
Stablecoin mint/burn: Tether та Circle друкують/спалюють USDT/USDC на основі фіатних депозитів. Крупний mint — потенціальний приток капіталу на ринок.
Ethereum: моніторинг через eth_getLogs та WebSocket
Моніторинг крупних ERC-20 переводів в реальному часі — через WebSocket підписку на Transfer подій з фільтрацією по розміру вже в додатку (блокчейн-рівень не підтримує фільтрацію по value):
import asyncio
from web3 import AsyncWeb3, WebSocketProvider
from web3.middleware import ExtraDataToPOAMiddleware
WHALE_THRESHOLD_USDT = 500_000 * 10**6 # 500k USDT
USDT_ADDRESS = "0xdAC17F958D2ee523a2206206994597C13D831ec7"
async def monitor_usdt_whales():
w3 = AsyncWeb3(WebSocketProvider("wss://eth-mainnet.g.alchemy.com/v2/YOUR_KEY"))
transfer_filter = await w3.eth.filter({
'address': USDT_ADDRESS,
'topics': [w3.keccak(text="Transfer(address,address,uint256)").hex()]
})
async for event in transfer_filter.get_new_entries():
amount = int(event['data'], 16)
if amount >= WHALE_THRESHOLD_USDT:
from_addr = '0x' + event['topics'][1].hex()[26:]
to_addr = '0x' + event['topics'][2].hex()[26:]
await process_whale_transfer({
'from': from_addr,
'to': to_addr,
'amount_usdt': amount / 10**6,
'tx_hash': event['transactionHash'].hex(),
'block': event['blockNumber'],
})
Для нативного ETH — окремою логіка через eth_getBlockByNumber з full_transactions=True та фільтрація по value:
async def scan_block_for_whale_eth(block_number: int, threshold_eth: float):
block = await w3.eth.get_block(block_number, full_transactions=True)
threshold_wei = w3.to_wei(threshold_eth, 'ether')
whale_txns = [
tx for tx in block.transactions
if tx['value'] >= threshold_wei
]
return whale_txns
Bitcoin: UTXO модель
Bitcoin не має Transfer подій. Відстеження крупних транзакцій — через моніторинг mempool та блоків. Bitcoin Core RPC:
import bitcoinrpc
rpc = bitcoinrpc.connect_to_local()
def find_whale_transactions(block_hash: str, threshold_btc: float):
block = rpc.getblock(block_hash, verbosity=2)
whale_txns = []
for tx in block['tx']:
# Сума всіх outputs
total_output = sum(
vout['value']
for vout in tx['vout']
if vout.get('scriptPubKey', {}).get('type') != 'OP_RETURN'
)
if total_output >= threshold_btc:
whale_txns.append({
'txid': tx['txid'],
'total_btc': total_output,
'outputs': tx['vout'],
'input_count': len(tx['vin']),
})
return whale_txns
Labeling: кто есть кто
Сирою адреса 0x28C6c06298d514Db089934071355E5743bf21d60 не несе сенсу. Цінність з'являється при наявності labels — бази знаність про те, якому суб'єкту належит адреса.
Джерела labels:
- Arkham Intelligence — комерціальна база з entity labels
- Etherscan tags — community-submitted labels, доступні через API
- Dune Analytics — community datasets (відомі біржові адреси, протоколи)
- Власна база — поповнюється при аналізі on-chain активності
Типова структура label бази:
CREATE TABLE address_labels (
address TEXT NOT NULL,
chain TEXT NOT NULL,
entity_name TEXT, -- 'Binance', 'Coinbase', 'Jump Trading'
entity_type TEXT, -- 'exchange', 'market_maker', 'fund', 'whale'
confidence SMALLINT, -- 1-100
source TEXT,
verified BOOLEAN DEFAULT FALSE,
PRIMARY KEY (address, chain)
);
Агрегація та зберігання
Whale-подій мають бути збережені з контекстом для подальшого аналізу:
CREATE TABLE whale_events (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
chain TEXT NOT NULL,
tx_hash TEXT NOT NULL,
block_number BIGINT,
block_time TIMESTAMPTZ NOT NULL,
from_address TEXT NOT NULL,
to_address TEXT NOT NULL,
token_address TEXT, -- NULL для нативної монети
amount_raw NUMERIC,
amount_usd NUMERIC,
from_label TEXT,
to_label TEXT,
event_type TEXT, -- 'exchange_inflow', 'exchange_outflow', 'defi_exit', etc.
notified BOOLEAN DEFAULT FALSE
);
CREATE INDEX ON whale_events (block_time DESC);
CREATE INDEX ON whale_events (from_address, block_time DESC);
Нотифікації
Telegram-бот або Discord webhook для real-time сповіщень. Формат повідомлення з максимальною інформативністю:
🐋 WHALE ALERT — Ethereum
💰 50,000,000 USDT ($50.0M)
📤 Binance (0x28C6...21d60)
📥 Unknown Wallet (0xF9e...3a14)
🔗 tx: 0x7f8...b2c
⏱ 12 сек назад | Block 19,847,231
Кастомні пороги для різних активів та типів подій — конфігуруються через admin інтерфейс або env-файл.
Готові сервіси vs власний парсер
Whale Alert, Lookonchain, Arkham мають безплатні та платні ярусі з готовими сповіщеннями. Власний парсер оправдан коли: потрібна кастомна логіка (певні контракти, специфічні паттерни), дані використовуються в трейдинг-системі з вимогами до latency, або потрібна інтеграція з проприетарною label базою.
Розробка системи моніторингу whale-транзакцій для ETH + BTC з Telegram-сповіщеннями, label базою з 5000+ адрес та зберіганням історії — 2–3 тижні.







