Skip to content
This repository was archived by the owner on Oct 1, 2026. It is now read-only.

Switch to pure Rabby API: fix auth headers and key rotation, drop DeBank - #5

Merged
privatekey7 merged 2 commits into
masterfrom
rabby-pure-rework
Aug 16, 2026
Merged

privatekey7 merged 2 commits into
masterfrom
rabby-pure-rework

Conversation

@privatekey7

Copy link
Copy Markdown
Owner

Что сделано

Причина массовых ERROR (228/245): анти-бот Rabby отвечает фейковым 429 с пустым телом на любое отклонение в заголовках идентификации — душил /v1/user/token_list даже при корректной подписи.

Заголовки — байт-в-байт как клиент Rabby (по HAR расширения)

  • lowercase x-api-key / x-api-time
  • x-api-time = время выдачи ключа, а не время запроса
  • x-api-ver: v2 возвращён, x-version → 0.94.2
  • добавлены браузерные accept-language, dnt, priority, sec-fetch-*

Ключ

  • x-set-api-key читается до raise_for_status() (раньше терялся на 429/403)
  • ротированный ключ хранится в общем магазине на процесс — клиенты на каждую попытку продолжают с последнего выданного

Оптимизация запросов

  • токены всех сетей берутся одним запросом /v1/user/cache_token_list (~44× меньше вызовов), фолбэк на по-сетевой token_list
  • пустой chain_list → запросы токенов пропускаются (как делает расширение)

DeBank выпилен

  • удалён api/client.py, диспетчер BALANCE_SOURCE, API_KEY_INIT

Валидация

  • полный прогон: 245/245 OK за ~10с (было 17/245), фантомов нет
  • пустые кошельки: OK за 3 запроса; жирный кошелёк ($191K, 210 токенов): OK
  • тесты: 19 (добавлены фолбэк и одно-запросный путь)

⚠️ CI на этом PR покраснеет: workflow ещё импортирует удалённый debank_checker.api.client. Правка .github/workflows/ci.yml (импорт-чек без api.client + шаг pytest) готова локально, но push требует токен со scope workflow — добавлю отдельным коммитом после обновления авторизации.

…ank branch

Root cause of mass ERRORs (228/245): anti-bot returns fake empty-body 429
on any deviation in identity headers, throttling /v1/user/token_list even
with a valid signature.

- Headers now byte-faithful to the Rabby extension HAR: lowercase
  x-api-key/x-api-time, x-api-time = API key issuance time (not request
  time), x-api-ver restored, x-version bumped to 0.94.2, browser headers
  (accept-language, dnt, priority, sec-fetch-*) added
- Key rotation: x-set-api-key is read before raise_for_status (was lost
  on 429/403) and stored in a process-wide key store, so per-attempt
  clients continue with the latest rotated key
- Tokens now fetched via /v1/user/cache_token_list (all chains in one
  request, ~44x fewer calls) with per-chain token_list fallback; empty
  chain_list short-circuits token requests entirely
- DeBank branch removed: api/client.py deleted, BALANCE_SOURCE dispatch
  and API_KEY_INIT dropped, README updated
- Tests extended to 19 (fallback + single-request paths)

Validation: full run 245/245 OK in ~10s (was 17/245), no phantom
balances, empty and large wallets verified live.

Note: CI workflow update (import check without api.client + pytest step)
follows separately - the stored OAuth token lacks workflow scope.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant