Bybit Easy Earn Pipeline
Bybit Easy Earn ingestion использует тот же net/http паттерн, что и существующий Bybit Launchpool, но с другим endpoint и пагинацией overview-списка.
Компоненты
SyncBybitEasyEarnWorkflow— вызывает Bybit Easy Earn list API, нормализует coin groups и пишет snapshots в Timescale через SQL ingest.internal/worker/models/bybit_easy_earn.gointernal/worker/activities/sync_bybit_easy_earn.gointernal/worker/workflows/sync_bybit_easy_earn.gointernal/db/migrations/00018_bybit_easy_earn_snapshot_schema.sqlinternal/db/migrations/00019_bybit_easy_earn_aggregates_policies.sql
API Endpoint
GET https://www.bybit.com/x-api/s1/byfi/get-coinsPOST https://www.bybit.com/x-api/s1/byfi/get-easy-earn-product-list
Confirmed request body для overview:
Notes:
- discovery показал
403 Access Deniedдля обычногоcurlиз текущего окружения; - pipeline повторяет Bybit Launchpool pattern и поддерживает browser-like headers plus optional env overrides;
- если endpoint требует session gate, можно передать
BYBIT_EASY_EARN_COOKIEиBYBIT_EASY_EARN_TRACEPARENT.
Mapping
- project = coin group (
BTC,USDT,USDC, ...) - subpool = конкретный Easy Earn product (
product_id:product_type) project_coin<=coinresolved viaget-coinsreward_coin<=return_coinresolved viaget-coinsproject_statusагрегируется по subpool statusessubpool_status:- future
subscribe_start_at=>Upcoming - past
subscribe_end_at=>Ended display_status in (1,2)without ended timing =>Activedisplay_status_text:1=>Invest Now2=>Sold Out
Это status mapping частично основан на confirmed page text и partially inferred from the page bundle/status behavior.
Persistence
ingest_bybit_easy_earn_snapshot($1::jsonb)- internal path
/x-api/s1/byfi/get-easy-earn-product-list - source marker
api
Tables:
fct_bybit_easy_earn_snapshotfct_bybit_easy_earn_subpool_snapshotfct_bybit_easy_earn_response_snapshotfct_bybit_easy_earn_quarantinefct_bybit_easy_earn_5minfct_bybit_easy_earn_daily
Manual Run
docker compose exec -T temporal-admin-tools temporal workflow start \
--address temporal:7233 --namespace default --task-queue default \
--type SyncBybitEasyEarnWorkflow \
--workflow-id sync-bybit-easy-earn-manual-$(date +%s) \
--input '{}'
Verification
- Workflow result counters:
projects_seen,projects_upserted,subpools_seen,subpools_upserted,quarantine_rows - SQL:
SELECT COUNT(*) FROM fct_bybit_easy_earn_snapshot;SELECT COUNT(*) FROM fct_bybit_easy_earn_subpool_snapshot;SELECT reason, COUNT(*) FROM fct_bybit_easy_earn_quarantine GROUP BY reason ORDER BY COUNT(*) DESC;