Skip to content

Exchange Coins Pipeline

SyncExchangeCoinsWorkflow синхронизирует монеты и сети с 8 бирж и выполняет conservative global mapping.

Источники

  • Bybit: GET /v5/asset/coin/query-info (private, signed)
  • Binance: GET /sapi/v1/capital/config/getall (private, signed)
  • Gate: GET /spot/currencies (public)
  • Bitget: GET /api/v2/spot/public/coins (public)
  • BingX: GET /openApi/wallets/v1/capital/config/getall (private, signed)
  • KuCoin: GET /api/v3/currencies (public)
  • OKX: GET /api/v5/asset/currencies (private, signed)
  • MEXC: GET /api/v3/capital/config/getall (private, signed)

Gate, Bitget и KuCoin работают как public providers (без *_API_KEY/*_API_SECRET).

Политика нормализации

  • local_coin и local_network нормализуются в upper-case ключи.
  • contract_address нормализуется в lower-case.
  • network_key определяется детерминированным alias-map + проверкой существования в networks_catalog.
  • Авто-маппинг в global_assets допускается только при наличии (network_key, contract_address).
  • Активы без контракта не склеиваются между биржами автоматически и идут в quarantine.

Partial success

Workflow работает в partial mode: - ошибки отдельных бирж не валят весь run; - для private бирж без ключей создается quarantine запись missing_credentials; - агрегированный результат содержит exchanges_succeeded/failed/skipped и счетчики upsert/mapping.

Таблицы

  • global_assets
  • global_asset_identifiers
  • global_asset_networks
  • exchange_assets
  • exchange_asset_networks
  • exchange_symbol_assets
  • exchange_asset_mappings
  • asset_mapping_quarantine

Manual запуск workflow

docker compose exec -T temporal temporal workflow start \
  --address temporal:7233 --namespace default --task-queue default \
  --type SyncExchangeCoinsWorkflow \
  --workflow-id sync-exchange-coins-manual-$(date +%s) \
  --input '{"force_full_refresh":false,"soft_delete_grace_days":30}'

Проверка quarantine

SELECT reason, count(*)
FROM asset_mapping_quarantine
GROUP BY reason
ORDER BY count(*) DESC;