Skip to content
This repository was archived by the owner on Oct 1, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ jobs:

- name: Import smoke check
run: |
python -c "import debank_checker.api.rabby_client, debank_checker.checker, debank_checker.export.csv_exporter, debank_checker.export.excel, debank_checker.export.json_exporter, debank_checker.proxy.manager, debank_checker.ui.menu"
python -c "import debank_checker.api.rabby_client, debank_checker.api.hyperliquid_client, debank_checker.api.lighter_client, debank_checker.api.polymarket_client, debank_checker.api.onchain, debank_checker.api.http, debank_checker.parallel, debank_checker.diskcache, debank_checker.checker, debank_checker.export.csv_exporter, debank_checker.export.excel, debank_checker.export.json_exporter, debank_checker.proxy.manager, debank_checker.ui.menu"

- name: Run tests
run: |
python -m pytest tests/ -q

- name: Bytecode compile
run: |
python -m compileall -q debank_checker main.py
python -m compileall -q debank_checker main.py audit_passes.py

5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,16 @@ venv/
env/

# Output
.cache/
Results/
debug_log.txt
logs.txt
*.log
.pytest_cache/

# Local inputs (do not commit)
wallets.txt
proxy.txt
rpc.txt

# IDE
.cursor/
Expand Down
64 changes: 64 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Changelog

## 2.0.0 — 23.09.2026

Проверка в 2–3 раза быстрее при тех же правилах защиты от фантомных балансов.

### Защита от фантомных балансов (с 11.09.2026 Rabby отдаёт чужие данные)

Подробности — `docs/PHANTOM_BALANCES.md`.

- Итог собирается только из проверенных компонентов: токены из
`cache_token_list` с обязательным on-chain подтверждением (≥ $0.5), EVM
DeFi-позиции с пересчётом по `asset_token_list`, app-chain позиции только из
нативных API Hyperliquid / Lighter / Polymarket. Агрегат Rabby — только
контроль.
- Баланс принимается, когда сошлись 2 независимые выборки, иначе `UNVERIFIED`.
- Защита от подмены списка токенов: Rabby иногда отдаёт для кошелька чужой
список целиком, где наших токенов нет. On-chain проверка снимала чужие токены,
но пропажу наших не видела, и две такие выборки могли «сойтись» на пыли
(кошелёк с ~$253 получил OK $1.44). Теперь в согласии не участвуют
«заражённые» выборки (on-chain сняла > $5 и > 10% стоимости) и «неполные»
(нет токена, подтверждённого на цепочке в другой выборке). Новое поле
результата `onchain_rejected_usd`.
- Встроенный реестр проверенных RPC для всех 73 сетей Rabby.
- `audit_passes.py` — N независимых проходов с отчётом стабильности.

### Скорость (62 с → 21–32 с на 245 кошельков через 100 прокси)

- Все независимые запросы выборки идут параллельно; on-chain проверка
токенов совмещена со спекулятивным перезапросом `token_list`.
- Две корроборирующие выборки кошелька идут одновременно через разные прокси;
зависшая выборка дублируется хеджем (`SNAPSHOT_HEDGE_SEC`) с отдельным кэшем.
- Нативные API и on-chain проверки — один раз на кошелёк (singleflight),
без процессных кэшей между проходами: проходы аудита независимы.
- Пул keep-alive HTTP-сессий на прокси; хедж медленных RPC-нод; cooldown
RPC-ноды ведётся на пару (нода, прокси).
- Через прокси 429/5xx не ждут на том же IP — повтор сразу через другой
прокси; прокси с 429/403 уходит в короткий cooldown.
- Предпроверка прокси при старте: мёртвые (407) исключаются; прокси, умерший
во время работы, исключается до конца запуска.
- NFT грузятся в фоне и не задерживают баланс; экспорт ждёт их только если
в нём есть NFT. Колонка `chains` — только сети с балансом (токены + DeFi). Таймаут `collection_list`
поднят до 25 с: для кошельков с сотнями коллекций сервер считает ответ
6–20 с, и прежний таймаут 8 с всегда оставлял их NFT пустыми.
- Дисковый кэш (`.cache/`) списка сетей Rabby, реестра chainid.network и
Polymarket proxy-адресов.

### Структура

- Новые модули: `debank_checker/parallel.py`, `debank_checker/diskcache.py`,
`debank_checker/api/http.py` (заменил `api/ratelimit.py`).
- `main.py`: общие `check_all()` / `worker_count()` используются и
`audit_passes.py`.
- Удалены отладочные скрипты и логи (`probe_live.py`, `audit_*.log`);
отчёт о фантомах перенесён в `docs/`.
- Удалены неиспользуемые параметры (`NFT_POLL_*`, `HL_CACHE_SEC`) и поле
`onchain_unverified_usd` (всегда было 0).
- Тесты: 54 офлайн-теста, включая хедж, фоновые NFT, бан мёртвого прокси и
примитивы параллельности.

## 1.0.3

- Чистый Rabby API: исправлены заголовки авторизации и ротация ключа, ветка
DeBank удалена.
Loading
Loading