CLI‑утилита на Python для массовой проверки кошельков через Rabby API с независимой on-chain проверкой (Tokens + DeFi + NFT) с экспортом результатов (Excel / CSV / JSON).
TG: https://t.me/privatekey_ai
- Массовая проверка списка адресов из
wallets.txt - Защита от фантомных балансов: итог собирается только из проверенных компонентов (on-chain, нативные API), каждый кошелёк подтверждается двумя независимыми выборками
- Скорость: 20–30 с на 245 кошельков через 100 прокси (см. «Скорость»)
- Прокси‑ротация + rate limiting / cooldown, мёртвые прокси отсеиваются при старте
- Экспорт:
- Excel (
.xlsx) - CSV
- JSON
- Excel (
- Фильтры экспорта по сетям/токенам/NFT/протоколам (в меню после проверки)
- Python 3.9+ (рекомендуется 3.11)
- Windows / macOS / Linux
Зависимости перечислены в requirements.txt (ключевые: curl_cffi, openpyxl, questionary, colorama).
В папке проекта:
python -m venv .venvWindows PowerShell:
.venv\Scripts\Activate.ps1Дальше:
pip install -r requirements.txt- Один адрес на строку
- Пустые строки игнорируются
- Строки, начинающиеся с
#, считаются комментариями
Пример:
# my wallets
0x0000000000000000000000000000000000000000
0x1111111111111111111111111111111111111111
Прокси обязательны: при пустом proxy.txt программа завершится с ошибкой.
Поддерживаемые форматы строк:
ip:portip:port:login:password
Пример:
127.0.0.1:8080
10.10.10.10:3128:user:pass
python main.pyПоток работы:
- Прокси проходят быструю предпроверку (мёртвые — 407 — исключаются)
- Запускается проверка всех кошельков, печатается прогресс‑бар
- После завершения печатается итог и открывается интерактивное меню экспорта
- Вы выбираете формат (Excel / CSV / JSON)
- Файлы сохраняются в папку
Results/
NFT в сумму не входят и догружаются в фоне, пока вы работаете с меню.
Ждать их программа будет только для экспорта с NFT (пункты 5, 6, 7 и 11) —
обычно к этому моменту они уже готовы. Остальные экспорты идут сразу. Колонка
chains содержит сети с балансом (токены и DeFi); сети NFT — на листе NFT.
Вывод сохраняется в:
Results/
Файлы именуются с учётом выбранного экспорта и времени запуска.
Данные получаются через Rabby API (api.rabby.io), но итог никогда не
берётся из агрегата total_usd_value. С 11.09.2026 бэкенд Rabby для части
адресов возвращает чужие данные (расследование — docs/PHANTOM_BALANCES.md):
/v1/user/total_balance— агрегат с суммами другого кошелька (одни и те же значения у разных адресов, «липнут» минуты-часы);/v1/user/complex_app_list— случайные app-chain позиции (Hyperliquid, Lighter, Polymarket…) с нашимuser_addr, но чужими суммами;/v1/user/token_listи иногда/v1/user/cache_token_list— отдельные чужие токены.
Поэтому баланс собирается из компонентов, каждый из которых проверяется:
| Компонент | Источник | Проверка |
|---|---|---|
| Токены кошелька | cache_token_list (core, не скам) |
on-chain: eth_getBalance / balanceOf через публичные RPC (api/onchain.py); фантом (0 на цепочке) отбрасывается, количество исправляется по сети. Токен ≥ $0.5 без on-chain подтверждения → выборка не засчитывается |
| EVM DeFi-позиции | complex_app_list (позиции с chain) |
пересчёт по asset_token_list, min(api, recalc) |
| App-chain позиции | нативные API Hyperliquid / Lighter / Polymarket (proxy-кошелёк через Safe-фабрику на Polygon + data-api) | значения Rabby для этих приложений игнорируются; прочие app-chain (Opinion и т.п.) в итог не входят и помечаются |
| Агрегат Rabby | total_balance |
только контроль: расхождение с проверенными компонентами пишется в «Примечание» |
Баланс принимается (статус OK), когда две независимые выборки сошлись
(CORROBORATION_MIN_AGREE=2). В согласии не участвуют выборки, где Rabby
подменил список токенов: если on-chain проверка сняла заметную часть токенов
(TAINT_ABS_USD/TAINT_REL) или если в выборке нет токена, подтверждённого
на цепочке в другой выборке. Иначе — UNVERIFIED с консервативным
значением; такие кошельки в сумму не входят.
Анти-бот Rabby на любое отклонение в заголовках идентификации отвечает
фейковым 429 с пустым телом. Требования (сверены с HAR веб-клиента,
tests/fixtures/): заголовки в нижнем регистре; x-api-time — время выдачи
текущего API-ключа (RABBY_API_KEY_INIT_TIME); ротированный ключ
(x-set-api-key) сохраняется в общем магазине на процесс.
python audit_passes.py --passes 5 # через прокси из proxy.txt
python audit_passes.py --passes 5 --direct # без проксиВыполняет N полных проходов по всем кошелькам; кошелёк считается
STABLE, если ≥ N результатов OK сошлись в пределах допуска. Для
остальных делаются дополнительные точечные проходы (--max-extra).
Результаты — в Results/audit_<дата>/: audit_report.xlsx/csv (значения по
проходам, разброс, вердикт, отклонённые агрегаты Rabby), pass_k.jsonl,
final_results.json и стандартный Excel-экспорт. Для каждого прохода
печатается время баланса и время с догрузкой NFT. Код возврата 0 — все
кошельки стабильны.
Проверка оптимизирована по времени без ослабления проверок (все правила защиты от фантомов, on-chain подтверждение и корроборация двумя выборками сохранены):
- внутри выборки все независимые запросы идут параллельно (Rabby ×3,
Hyperliquid/Lighter/Polymarket, on-chain проверка токенов, перезапрос
token_listпо подозрительным сетям); - две корроборирующие выборки кошелька идут одновременно через разные
прокси; выборка, не ответившая за
SNAPSHOT_HEDGE_SEC, дублируется новой; - нативные API и on-chain проверки выполняются один раз на кошелёк, а не в каждой выборке;
- keep-alive пул HTTP-сессий на каждый прокси, хедж медленных RPC-нод, дисковый кэш списка сетей Rabby и Polymarket proxy-адресов;
- через прокси 429/5xx не «пересыпаются» на том же IP — повтор сразу идёт через другой прокси; мёртвые прокси исключаются;
- NFT (для кошельков с сотнями коллекций сервер считает их до 20 с) грузятся в фоне и не задерживают баланс.
Замер (245 кошельков, 95 живых прокси): v1.x — 62 с на проход, v2.0 — 21–32 с (5 проходов подряд, 245/245 STABLE).
Настраивать ничего не нужно: положите адреса в wallets.txt, прокси в
proxy.txt и запустите python main.py. Число воркеров выбирается
автоматически — min(500, кошельков, прокси × 5); все лимиты внешних сервисов
(Rabby, Hyperliquid, Polymarket, Lighter, публичные RPC) ведутся на каждый
прокси отдельно, поэтому скорость растёт с числом прокси. Все параметры с
комментариями — в debank_checker/config.py.
Встроенный реестр debank_checker/data/rpc_registry.json содержит живьём
проверенные публичные RPC для всех 73 сетей Rabby (от 1 до 17 нод на сеть);
при проверке перебираются все ноды сети в 3 раунда (медленная нода
дублируется следующей через ONCHAIN_RPC_HEDGE_SEC). Если хотите добавить
свои (Alchemy, Infura, dRPC…), создайте rpc.txt в корне — они пойдут первыми:
# chain_id url
1 https://eth-mainnet.g.alchemy.com/v2/КЛЮЧ
42161 https://arb-mainnet.g.alchemy.com/v2/КЛЮЧ
Обновить встроенный реестр: python tools/build_rpc_registry.py.
По умолчанию прокси обязательны. Для запуска без прокси: DBC_DIRECT=1 python main.py или python audit_passes.py --direct. С одного IP всё
медленнее: 8 воркеров, 4 запроса/с к Rabby, повторы после 429 с паузой.
main.py — интерактивный запуск: проверка → меню → экспорт
audit_passes.py — N независимых проходов и отчёт стабильности
debank_checker/
checker.py — выборка баланса, защита от фантомов, корроборация
config.py — все настройки (с комментариями)
parallel.py — параллельный запуск, singleflight-кэш, хедж
diskcache.py — кэш в .cache/ между запусками
api/
http.py — пул keep-alive сессий на прокси, лимитеры
rabby_client.py — Rabby API (подпись запросов, ротация ключа)
onchain.py — on-chain проверка через публичные RPC
hyperliquid_client.py — нативный API Hyperliquid
lighter_client.py — нативный API Lighter
polymarket_client.py — Polymarket (proxy-кошелёк + data-api)
data/rpc_registry.json — проверенные RPC для всех сетей Rabby
proxy/manager.py — загрузка, предпроверка и ротация прокси
export/ — Excel / CSV / JSON
ui/ — баннер, логгер, меню
tools/build_rpc_registry.py — пересборка реестра RPC
tests/ — офлайн-тесты (pytest)
docs/PHANTOM_BALANCES.md — расследование фантомных балансов (09.2026)
CHANGELOG.md — история версий
python -m pytest tests -qlogs.txt — по каждой выборке: итог, токены, протоколы, агрегат Rabby,
примечания; при отклонённом агрегате или фантомных app-chain позициях —
сырые данные (ограничено RAW_LOG_MAX_BYTES).