digdigdig3
Multi-exchange connector library — unified async Rust API for 140 connectors spanning crypto exchanges, stock brokers, forex providers, intelligence feeds, and on-chain blockchain providers.
Version: 0.1.6 Edition: Rust 2021 License: MIT OR Apache-2.0 Repository: https://github.com/ZENG3LD/digdigdig3
Overview
digdigdig3 is organized around capability levels. Each level describes what a connector can do and what it requires (credentials, chain infrastructure, etc.).
| Level | Description | Auth Required | Count |
|---|---|---|---|
| 1a | Market data feed — klines, orderbook, ticker, trades | No | 21 crypto + 6 other |
| 1b | Extended data feed — intelligence, aggregators, analytics | No or API key | 95 |
| 2 | Authenticated data feed — order history, account info, positions | Yes | ~50 |
| 3 | Execution — place/cancel orders, manage positions | Yes | ~30 |
| 4a | On-chain transport — signing and submitting transactions for DEX connectors | Yes (private key) | 5 |
| 4b | On-chain monitoring — direct blockchain data extraction | No | 8 chains |
Total connectors: 140 Total source files (.rs): 846 Lines of code (src/): ~258,000 Blockchain chains supported: 8 (EVM, Solana, Cosmos, Bitcoin, Aptos, StarkNet, Sui, TON)
Adding as a Dependency
[]
= { = "../digdigdig3" }
# or
= { = "https://github.com/ZENG3LD/digdigdig3", = "v0.1.6" }
With specific feature flags:
[]
= { = "0.1.6", = ["grpc", "k256-signing"] }
Level 1a: Market Data Feed (no auth required)
Public endpoints — price, orderbook, klines, ticker, trades. No credentials needed.
These connectors implement ExchangeIdentity + MarketData + WebSocketConnector. All public streams (ticker, orderbook, klines, trades) are available without an API key.
Crypto CEX — Tested on real data via live bridge
The following 21 connectors were validated against live exchange data in production use.
Legend:
- Tested — data flowed through the live bridge in production
- Untested — code exists and compiles, never validated on real data
- N/A — method not implemented (returns
UnsupportedOperation)
| Exchange | REST klines | REST ticker | REST orderbook | REST trades | WS trades | WS ticker | WS orderbook | WS klines |
|---|---|---|---|---|---|---|---|---|
| Binance | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Bybit | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| OKX | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| KuCoin | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Kraken | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Coinbase | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Gate.io | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Bitfinex | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Bitstamp | Tested | Tested (poll/30s) | Untested | N/A | Tested | Tested | Untested | Untested |
| Gemini | Tested | Tested (poll/15s) | Untested | N/A | Tested | Tested | Untested | Untested |
| MEXC | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| HTX | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Bitget | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| BingX | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Crypto.com | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Upbit | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Deribit | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| HyperLiquid | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| dYdX v4 | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
| Lighter | Tested | Untested | Untested | Untested | Tested | Tested | Untested | Untested |
| MOEX ISS | Tested | Untested | Untested | N/A | Tested | Tested | Untested | Untested |
Notes:
- Bitstamp and Gemini supplement WebSocket ticker with a REST poll fallback (30s and 15s intervals respectively). That REST
get_tickercall was exercised in production. get_recent_trades(REST trades column) is implemented only for Lighter. All other connectors returnUnsupportedOperationand are marked N/A.- WS orderbook and WS klines channels exist in code for most connectors but were never subscribed to in a live session.
Crypto CEX — Implemented, NOT tested on real data
| Exchange | REST | WebSocket | Status |
|---|---|---|---|
| Phemex | Yes | Yes (code exists) | HTTP 403 on WebSocket upgrade from some regions. REST may work |
| Bithumb | Yes | Yes | Disabled — SSL timeouts and geo-blocking. 26 test files exist but are disabled |
| Vertex | Yes | Yes | Permanently disabled — exchange shut down 2025-08-14. Code retained for reference |
Level 1b: Extended Data Feed
These connectors expose data that does not fit the standard klines/orderbook/ticker API. They implement ExchangeIdentity + MarketData for basic identity, but their real value is in domain-specific methods (e.g., get_series(), get_liquidations(), get_articles()).
None of this was tested against real APIs. All connectors compile and are structurally complete, but no live data validation has been done.
Crypto Intelligence
| Provider | Domain Methods | Auth |
|---|---|---|
| CoinGecko | Market cap, coin details, trending, global stats | API key optional |
| Coinglass | Liquidation data, open interest, long/short ratios, funding rates, fear and greed — ~50 endpoints | API key optional (rate limits differ) |
| CryptoCompare | Multi-exchange price aggregation, historical OHLCV, social stats | API key |
| DeFiLlama | TVL by protocol/chain, yield pools, stablecoin data | No auth (public) |
On-Chain Analytics
| Provider | Domain Methods | Transport | Auth |
|---|---|---|---|
| BitQuery | Multi-chain GraphQL queries — transfers, DEX trades, token holders | REST + GraphQL + WebSocket | OAuth2 |
| Whale Alert | Large transaction alerts (cross-chain), blockchain monitoring | REST + WebSocket | API key |
| Etherscan | Block explorer queries — transactions, tokens, contracts, gas | REST | API key |
Financial Data Aggregators
| Provider | Klines | Ticker | WebSocket | Notes |
|---|---|---|---|---|
| CryptoCompare | Yes | Yes | Yes | Multi-exchange aggregate |
| Yahoo Finance | Yes | Yes | Yes | No auth, scraping-based |
| Interactive Brokers Web API | Yes | Yes | Yes | Aggregator mode only — no brokerage execution wired |
| DeFiLlama | No | Yes | No | TVL/price only, no candles |
Stock Data Providers (data-only, no trading)
| Provider | Region | Klines | Ticker | WebSocket | Auth |
|---|---|---|---|---|---|
| Polygon | US | Yes | Yes | Yes | API key |
| Finnhub | US | Yes | Yes | Yes | API key |
| Tiingo | US | Yes | Yes | Yes | Bearer token |
| TwelveData | US | Yes | Yes | Yes | API key |
| J-Quants | Japan | Yes | Yes | No | Refresh/ID token |
| KRX | Korea | Yes | Yes | No | API key |
| Dukascopy | Forex | Yes | Yes | No | No auth (public) |
| Alpha Vantage | Forex/US | Yes | No | No | API key |
Polygon, Finnhub, Tiingo, TwelveData, J-Quants, and KRX implement the trading trait interface but all trading methods return UnsupportedOperation — they are data providers, not brokers.
Intelligence Feeds (85 connectors)
85 connectors organized across 21 domain categories. All are REST-only unless noted. All standard trading/market-data trait methods return UnsupportedOperation — domain-specific methods are the real surface area. No test files exist for any of these.
| Category | Connectors | Streaming | Sample Domain |
|---|---|---|---|
| Economic | fred, ecb, imf, worldbank, oecd, bis, boe, bundesbank, cbr, dbnomics, eurostat, ecos | No | Macro data, interest rates, GDP series |
| US Government | sec_edgar, bls, bea, census, eia, usaspending, congress, fbi_crime, sam_gov | No | SEC filings, employment, energy, federal contracts |
| Cyber Intelligence | shodan, virustotal, alienvault_otx, censys, nvd, abuseipdb, urlhaus, ripe_ncc, cloudflare_radar | No | CVEs, IP reputation, threat indicators |
| Environment | noaa, usgs_earthquake, nasa_firms, nasa_eonet, gdacs, openaq, open_weather_map, global_forest_watch, nws_alerts | No | Weather, earthquakes, fires, air quality |
| Space | nasa, space_track, launch_library, spacex, sentinel_hub | No | Orbital data, launches, satellite imagery |
| Conflict/Geopolitical | gdelt, acled, ucdp, reliefweb, unhcr | No | Conflict events, displacement, humanitarian |
| Maritime | ais, aisstream, imf_portwatch, nga_warnings | aisstream only | Vessel tracking, port data, safety warnings |
| Aviation | adsb_exchange, opensky, aviationstack, wingbits | No | Live aircraft tracking, flight status |
| Sanctions | ofac, opensanctions, interpol | No | Sanctions lists, wanted persons |
| Demographics | un_population, who, wikipedia, un_ocha | No | Population, health, statistical data |
| Corporate | gleif, opencorporates, uk_companies_house | No | Legal entity identifiers, company registry |
| Governance | eu_parliament, uk_parliament | No | Parliamentary voting, legislative data |
| Financial Intel | newsapi, openfigi, finnhub (news), alpha_vantage | No | News, fundamentals, ticker lookup |
| Academic | arxiv, semantic_scholar | No | Research papers, citations |
| Trade | comtrade, eu_ted | No | International trade flows, EU tenders |
| Prediction (intel) | predictit | No | Political prediction market prices |
| Standalone feeds | faa_status, feodo_tracker, hacker_news, c2intel_feeds, rss_proxy | No | NOTAM, botnet IPs, HN posts, RSS aggregation |
aisstream is the only intelligence feed with WebSocket streaming.
Level 2: Authenticated Data Feed
Same connector structs as Level 1a, but methods that require credentials. Includes: order history, account balances, positions, funding rate history, transfer history.
No connector in this category was tested against real credentials. All implementations are complete — they call the correct endpoints with signed requests — but have not been validated against live accounts.
Crypto CEX (auth-required read methods)
All 19 active CEX connectors listed in Level 1a also implement these authenticated read methods:
get_open_orders()— open orders for symbol or all symbolsget_order_history()— historical orders with filtersget_order()— single order by IDget_account_info()— account snapshotget_balance()— asset balances across account typesget_positions()— open derivatives positionsget_funding_rate()/get_funding_rate_history()get_open_interest()get_mark_price()get_closed_pnl()
Private WebSocket streams are also implemented for order updates, balance changes, and position updates.
Stock Brokers (auth-required)
| Broker | Region | Klines | Trading | WebSocket | Auth Method |
|---|---|---|---|---|---|
| Alpaca | US | Yes | Yes | Yes | API key header |
| Zerodha (Kite) | India | No* | Yes | No | OAuth2 token |
| Upstox | India | Yes | Yes | No | OAuth2 token |
| Angel One | India | Yes | Yes | No | JWT + TOTP |
| Dhan | India | Yes | Yes | Yes | Access token |
| Fyers | India | Yes | Yes | No | JWT OAuth2 |
| Tinkoff Invest | Russia | Yes | Yes | No | Bearer token + gRPC |
| Futu OpenD | China | Yes | Partial | No | OpenD proto (requires local daemon) |
*Zerodha get_klines requires a separate Historical API subscription — returns UnsupportedOperation without it.
Futu requires the OpenD binary running locally. All methods return UnsupportedOperation until OpenD is connected.
Forex (auth-required)
| Provider | Klines | Streaming | Trading | Auth |
|---|---|---|---|---|
| OANDA | Yes | Yes (server-sent) | Yes | Bearer token |
Test Coverage Summary
| Connector | Test Count | Type |
|---|---|---|
| Fyers | 31 tests | Unit tests in src/ |
| MOEX | 24 tests | Unit tests in src/ |
| Tinkoff | 28 tests | Unit tests in src/ |
| KRX | 32 tests | Unit tests in src/ |
| Futu | 6 tests | Unit tests in src/ |
| Alpha Vantage | 10 tests | Unit tests in src/ |
| Bithumb | 26 tests | Disabled (geo-block) |
| Vertex | 20 tests | Disabled (shut down) |
All 19 active CEX connectors have zero test files. This is the primary quality gap.
Level 3: Execution
Order placement, cancellation, amendment, and account management. Always requires credentials. None of this was tested against real accounts.
Core Trading Traits
All CEX connectors and most broker connectors implement:
| Trait | Methods |
|---|---|
Trading |
place_order, cancel_order, get_order, get_open_orders, get_order_history |
CancelAll |
cancel_all_orders (scope by symbol or all) |
AmendOrder |
amend_order (in-place modification without cancel/replace) |
BatchOrders |
place_orders_batch, cancel_orders_batch |
AccountTransfers |
transfer (between account types), get_transfer_history |
CustodialFunds |
get_deposit_address, withdraw, get_funds_history |
SubAccounts |
sub_account_operation (create, transfer, list) |
CEX Execution Coverage
| Connector | CancelAll | AmendOrder | BatchOrders | AccountTransfers | CustodialFunds | SubAccounts |
|---|---|---|---|---|---|---|
| Binance | Yes | Yes | Yes | Yes | Yes | Yes |
| Bybit | Yes | Yes | Yes | Yes | Yes | Yes |
| OKX | Yes | Yes | Yes | Yes | Yes | Yes |
| KuCoin | Yes | Yes | Yes | Yes | Yes | Yes |
| Gate.io | Yes | Yes | Yes | Yes | Yes | Yes |
| Bitget | Yes | Yes | Yes | Yes | Yes | Yes |
| BingX | Yes | Yes | Yes | Yes | Yes | Yes |
| HTX | Yes | No | Yes | Yes | Yes | Yes |
| Crypto.com | Yes | Yes | Yes | No | Yes | Yes |
| MEXC | Yes | No | Yes | Yes | Yes | Yes |
| HyperLiquid | Yes | Yes | Yes | Yes | No | No |
| Kraken | Yes | Yes | No | No | Yes | Yes |
| Bitfinex | Yes | Yes | Yes | Yes | Yes | No |
| Coinbase | Yes | No | No | No | Yes | No |
| Deribit | Yes | Yes | No | No | Yes | No |
| Gemini | Yes | No | No | No | Yes | No |
| Upbit | Yes | Yes | No | No | Yes | No |
| Bitstamp | Yes | Yes | No | No | Yes | No |
| Phemex | Yes | Yes | No | Yes | Yes | Yes |
DEX Execution
| Connector | Execution Notes |
|---|---|
| dYdX v4 | Order placement via Cosmos gRPC — full trading trait implemented |
| Lighter | Full trading trait — native ECgFp5+Poseidon2+Schnorr signing (2850 lines, zero third-party crates) |
| Paradex | Full trading trait implemented, StarkNet signing via onchain-starknet feature |
| GMX | Trading trait + positions/orders via Subsquid GraphQL, funding rates from REST, ERC-20 balances |
| Jupiter | Swap via Ultra API + Trigger API (limit orders) + Recurring API (DCA). Trading trait stubs by design (AMM) |
| Raydium | Swap quote + transaction builder. Trading trait stubs by design (AMM) |
| Uniswap | Swap via Trading API + on-chain exactInputSingle. Trading trait stubs by design (AMM) |
Stock Broker Execution
| Broker | place_order | cancel_order | amend_order | batch_orders |
|---|---|---|---|---|
| Alpaca | Yes | Yes | Yes | No |
| Zerodha | Yes | Yes | Yes | No |
| Upstox | Yes | Yes | Yes | No |
| Angel One | Yes | Yes | Yes | No |
| Dhan | Yes | Yes | Yes | No |
| Fyers | Yes | Yes | No | Yes |
| Tinkoff | Yes | Yes | Yes | No |
| Futu | Partial | No | No | No |
Optional Trading Traits (defined, not yet implemented in any connector)
These traits exist in src/core/traits/operations.rs with default UnsupportedOperation implementations. They are ready for connector-level override but no connector has explicit impl blocks for them yet:
MarginTrading— margin borrow/repay, margin account infoEarnStaking— earn products, subscribe/redeemConvertSwap— convert quotes, dust conversionCopyTrading— follow/unfollow traders, copy positionsLiquidityProvider— LP position management (Uniswap/Raydium/Jupiter)VaultManager— vault deposit/withdraw (GMX/Paradex/dYdX/HyperLiquid)StakingDelegation— delegate/undelegate, claim rewardsBlockTradeOtc— OTC block trade creation and executionMarketMakerProtection— MMP config, mass quotingTriggerOrders— conditional order placement
Level 4: On-Chain Providers
Direct blockchain connectivity layer. Two distinct purposes.
4a: Transport and Auth for DEX Connectors
Chain providers used by DEX/swap connectors for transaction signing and submission.
| Provider | Chain | Feature Flag | Used By | Status |
|---|---|---|---|---|
EvmProvider |
Ethereum/EVM | onchain-evm (default) |
GMX (not wired), Uniswap | Code exists; not attached to GMX connector |
SolanaProvider |
Solana | onchain-solana |
Jupiter, Raydium | Wired in both connectors |
CosmosProvider |
Cosmos | onchain-cosmos |
dYdX | Wired via gRPC channel |
StarkNetProvider |
StarkNet | onchain-starknet |
Paradex | Optional feature, wired |
None of these have been tested end-to-end with real transaction submission.
4b: On-Chain Monitoring
Direct chain data extraction — read blockchain state, subscribe to events, decode transactions without going through an exchange API.
8 chain providers implemented:
| Provider | Feature Flag | Lines | Capabilities |
|---|---|---|---|
EvmProvider |
onchain-evm |
467 | Log subscriptions, eth_call, pending tx mempool, block data |
SolanaProvider |
onchain-solana |
410 | Transaction subscriptions, account monitoring, program interactions |
CosmosProvider |
onchain-cosmos |
1,410 | Tendermint WebSocket, IBC transfers, governance events, staking |
BitcoinProvider |
onchain-bitcoin |
672 | Block scanning, mempool, UTXO analysis, coinbase tx detection |
AptosProvider |
onchain-aptos |
851 | Module events, resource queries, coin transfers |
StarkNetProvider |
onchain-starknet |
604 | Contract calls, event monitoring, transaction signing |
SuiProvider |
onchain-sui |
923 | Move event subscriptions, object ownership, DeepBook events |
TonProvider |
onchain-ton |
929 | Jetton transfers, message parsing, DEX op-code detection |
4 transaction decoders:
| Decoder | File | Decodes |
|---|---|---|
EvmDecoder |
src/core/chain/decoders/evm_decoder.rs |
ERC-20 transfers, Uniswap V2/V3 swaps, liquidity events |
SolanaDecoder |
src/core/chain/decoders/solana_decoder.rs |
SPL token transfers, Raydium/Jupiter swap logs |
CosmosDecoder |
src/core/chain/decoders/cosmos_decoder.rs |
IBC packets, governance events, staking operations |
BitcoinDecoder |
src/core/chain/decoders/bitcoin_decoder.rs |
UTXO analysis, coinbase tx identification, OP_RETURN parsing |
The OnChainEvent enum with 17 event types is defined in src/core/types/onchain.rs:
LargeTransfer, DexSwap, LiquidityChange, ExchangeFlow, MempoolAlert,
BridgeTransfer, NewTokenLaunch, GovernanceEvent, ValidatorAlert,
StakingEvent, NftTransfer, ContractCall, GasAlert, BlockProduced,
MempoolCongestion, ChainReorg, SlashingEvent
The EventProducer trait is defined in src/core/traits/event_stream.rs with get_events() and poll_events() methods. No connector currently implements this trait — the infrastructure is in place but nothing is wired to it.
Status: None of the on-chain providers have been tested. The provider and decoder layer compiles but has not been run against live nodes.
Architecture
Core Trait Hierarchy
ExchangeIdentity (name, id, account types)
|--- MarketData (price, orderbook, klines, ticker, ping)
|--- Trading (place_order, cancel_order, get_order, open_orders, order_history)
|--- Account (balance, account_info, fees)
|--- Positions (positions, funding_rate, open_interest, mark_price, closed_pnl)
CoreConnector = ExchangeIdentity + MarketData + Trading + Account + Positions
(blanket impl — use as generic bound for code working with any exchange)
Optional execution traits (each requires Trading or Account supertrait):
CancelAll, AmendOrder, BatchOrders, AccountTransfers, CustodialFunds, SubAccounts
Optional advanced traits (default UnsupportedOperation, override per-connector):
MarginTrading, EarnStaking, ConvertSwap, CopyTrading, LiquidityProvider,
VaultManager, StakingDelegation, BlockTradeOtc, MarketMakerProtection,
TriggerOrders, PredictionMarket
WebSocket:
WebSocketConnector (connect, subscribe, event_stream, active_subscriptions)
WebSocketExt (convenience blanket: subscribe_ticker, subscribe_klines, etc.)
On-chain:
EventProducer (chain_id, get_events, poll_events) — defined, 0 implementations
ChainProvider (abstract provider trait)
Precision Guard (f64 → Decimal at Execution Boundary)
All DataFeed paths use f64 for maximum performance (indicators, UI, research). At the Trading trait boundary, prices and quantities are converted to exchange-safe strings via rust_decimal:
DataFeed: get_klines() → Vec<Kline{f64}> → indicators/UI (fast, no overhead)
Execution: place_order(price: f64, qty: f64)
↓
PrecisionCache.price(&symbol, price) → "67543.25"
PrecisionCache.qty(&symbol, qty) → "0.12345"
↓
Exchange API receives exact string
How it works:
safe_price(f64, tick)— converts viaDecimal::from_str(price.to_string()), rounds to nearest tick (like CCXT)safe_qty(f64, step)— same conversion, floors to step_size (never exceeds available quantity)PrecisionCache— per-symbol HashMap loaded fromget_exchange_info(), stores tick/step per symbol- Fallback: raw
f64::to_string()if symbol not in cache (backwards compatible)
Why not just f64::to_string()? — 100.05_f64 is stored as 100.04999... in IEEE-754. With floor rounding, this loses a full tick. The string-path via Ryu shortest-round-trip eliminates this drift.
tick_size sources: 23 parsers extract real tick_size from exchange APIs (Binance PRICE_FILTER, Bybit priceFilter, OKX tickSz, etc.). Remaining connectors fall back to price_precision integer digits.
Connector Manager
The connector manager (src/connector_manager/) provides a runtime pool for managing multiple connectors simultaneously:
| Component | Lines | Purpose |
|---|---|---|
ConnectorHandle |
1,101 | Unified dynamic dispatch wrapper for any connector |
ConnectorRegistry |
1,946 | Maps ExchangeId to connector instances |
ConnectorFactory |
1,002 | Builds connectors from ConnectorConfig |
ConnectorConfig |
1,039 | Per-exchange config structs |
ConnectorPool |
685 | DashMap-based concurrent pool |
ConnectorAggregator |
844 | Multi-exchange data fan-out |
Module Structure (per connector)
Every connector follows this layout:
src/{category}/{name}/
mod.rs — pub re-exports
endpoints.rs — URL constants, endpoint enum, symbol formatting
auth.rs — signing implementation (HMAC, JWT, EIP-712, etc.)
parser.rs — JSON response parsing, type mapping
connector.rs — trait implementations
websocket.rs — WebSocket connector implementation
Reference implementation: src/crypto/cex/kucoin/ — most complete example with all optional traits.
Transport Methods
| Transport | Feature Flag | Used By |
|---|---|---|
| REST (reqwest) | default | All 140 connectors |
| WebSocket | websocket |
All 21 CEX + DEX + major stock brokers |
| gRPC (tonic) | grpc |
dYdX (Cosmos gRPC), Tinkoff Invest |
| GraphQL | default | BitQuery |
| On-chain EVM RPC | onchain-evm |
GMX, Uniswap |
| On-chain Solana RPC | onchain-solana |
Jupiter, Raydium |
| On-chain Cosmos gRPC | onchain-cosmos |
dYdX |
| On-chain StarkNet | onchain-starknet |
Paradex |
HTTP client: src/core/http/client.rs — async reqwest wrapper with auth injection, retry logic, and rate limiting (SimpleRateLimiter token bucket and WeightRateLimiter).
WebSocket base: src/core/websocket/base_websocket.rs — handles reconnect, ping/pong, and subscription replay on reconnect.
Auth Methods
| Method | Connectors |
|---|---|
| HMAC-SHA256 | Binance, Bybit, OKX, KuCoin, Gate.io, Bitget, BingX, MEXC, HTX, Bitstamp, Deribit, Crypto.com, Phemex |
| HMAC-SHA384 | Bitfinex, Gemini |
| HMAC-SHA512 | Kraken |
| HMAC + passphrase | OKX, KuCoin, Bitget (additional passphrase layer on top of HMAC) |
| JWT ES256 (EC P-256) | Coinbase, Upbit, Tinkoff, Dhan, J-Quants |
| JWT + TOTP | Angel One |
| OAuth2 / Bearer token | Upstox, Fyers, Zerodha, BitQuery, Whale Alert, OANDA, IB |
| EIP-712 (Ethereum typed data) | HyperLiquid, Uniswap, GMX |
| Ed25519 / Solana keypair | Raydium, Lighter |
| Cosmos SDK wallet | dYdX |
| StarkNet ECDSA (STARK key) | Paradex |
| API key in header | Polygon, Finnhub, Tiingo, most intelligence feeds |
| No auth | MOEX ISS, Dukascopy, DeFiLlama, most public intelligence feeds |
Feature Flags
| Feature | Dependencies Enabled | Notes |
|---|---|---|
default |
onchain-evm |
EVM provider is included by default |
onchain-evm |
alloy (provider-ws, rpc-types) |
Ethereum/EVM chain providers |
onchain-ethereum |
onchain-evm |
Backward-compat alias |
onchain-solana |
solana-sdk, solana-client, solana-account-decoder |
Solana chain |
onchain-cosmos |
cosmrs (bip32) |
Cosmos ecosystem (dYdX, Osmosis) |
onchain-starknet |
starknet-crypto |
StarkNet chain |
onchain-bitcoin |
bitcoin v0.32 (serde, std) |
Bitcoin JSON-RPC |
onchain-sui |
none (pure reqwest REST) | Sui JSON-RPC |
onchain-ton |
none (pure reqwest REST) | TON REST — no C++ FFI |
onchain-aptos |
none (pure reqwest REST) | Aptos REST — avoids tokio_unstable |
starknet |
onchain-starknet |
Legacy alias |
websocket |
— | WebSocket enablement flag |
grpc |
tonic (tls, tls-native-roots), prost |
gRPC transport |
k256-signing |
k256 (ecdsa-core, ecdsa) |
k256 ECDSA signing |
Statistics
| Category | Count |
|---|---|
| CEX connectors | 21 (19 active, 2 disabled) |
| DEX connectors | 5 (3 active, 2 WS-disabled) |
| Swap protocols | 2 |
| Stock brokers/providers | 15 |
| Forex providers | 3 |
| Aggregators | 4 |
| Intelligence feed connectors | 85 |
| On-chain analytics connectors | 3 |
| Prediction markets | 1 |
| Total | 139 |
| Total .rs source files | 846 |
| Lines of code (src/) | ~258,000 |
| Blockchain chains | 8 |
| Core traits | 13 |
| Connectors with zero test coverage | ~120 |
Known Issues and Disabled Connectors
| Connector | Issue | Status |
|---|---|---|
| Vertex | Exchange shut down 2025-08-14, acquired by Ink Foundation | Permanently disabled. Code retained as reference. 20 test files exist but are disabled |
| Bithumb | SSL handshake timeouts and HTTP 403 geo-blocking | Temporarily disabled. Code complete. 26 test files disabled. Re-enable when access resolves |
| Phemex | HTTP 403 on WebSocket upgrade from restricted regions | REST may still work. WebSocket removed from live watchlist. Code retained |
| GMX | No real-time WebSocket API — websocket.rs does REST polling internally | Removed from live watchlist. REST data works |
| Paradex | Per-symbol WebSocket attribution is unreliable (exchange uses a global channel) | WebSocket removed from live watchlist. REST works |
| Jupiter | Klines and orderbook impossible by design (aggregator, no historical data) | Swap APIs (Ultra, Trigger, Recurring) fully wired. Trading trait stubs are correct |
| GMX | EvmProvider not wired — trading requires EVM wallet but provider not attached |
Positions/orders via Subsquid work. On-chain trading needs EvmProvider attachment |
| Futu | Requires OpenD local daemon | All methods return UnsupportedOperation until OpenD binary is running |
Roadmap and Known Gaps
Testing is the main gap. 19 active CEX connectors and 85 intelligence feed connectors have zero test files.
| Priority | Item |
|---|---|
| High | Add unit tests for the 19 active CEX connectors (Binance first, then Bybit/OKX) |
| High | Wire EvmProvider to GMX connector for actual transaction submission |
| High | Implement get_recent_trades for the 18 CEX connectors missing it |
| Medium | Add WebSocket implementations for India stock brokers (Zerodha, Upstox, Angel One, Fyers) |
| Medium | Implement EventProducer for at least EVM and Solana providers |
| Medium | Complete Jupiter — klines, orderbook, and trading need real implementation |
| Low | Add missing CEX connectors: AscendEX, BigONE, ProBit, BitMart, CoinEx, DigiFinex, WOO X, XT.com, LBank, HashKey, WhiteBIT, BTSE |
| Low | Interactive Brokers proper brokerage integration (currently only aggregator/Web API mode) |
| Low | Override optional operation traits (MarginTrading, EarnStaking, ConvertSwap, etc.) for exchanges that support them |
| Low | Test on-chain providers against live nodes |
Audit date: 2026-03-14. When adding a connector, update src/LIBRARY_INVENTORY.md and src/MATURITY_MATRIX.md accordingly.