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
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)
[dependencies]
digdigdig3 = { path = "../digdigdig3" }
# or
digdigdig3 = { git = "https://github.com/ZENG3LD/digdigdig3", tag = "v0.1.6" }With specific feature flags:
[dependencies]
digdigdig3 = { version = "0.1.6", features = ["grpc", "k256-signing"] }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.
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.
| 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 |
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.
| 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) |
| 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 |
| 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 |
| 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.
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.
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.
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.
| 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.
| Provider | Klines | Streaming | Trading | Auth |
|---|---|---|---|---|
| OANDA | Yes | Yes (server-sent) | Yes | Bearer token |
| 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.
Order placement, cancellation, amendment, and account management. Always requires credentials. None of this was tested against real accounts.
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) |
| 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 |
| 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) |
| 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 |
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
Direct blockchain connectivity layer. Two distinct purposes.
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.
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.
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)
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.
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 |
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 | 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.
| 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 | 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 |
| 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 |
| 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 |
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.