Supported Chains
11.1 Launch Chain Support
| Chain | Ecosystem | Finality Model | Confirmation Blocks | Signature Scheme |
|---|---|---|---|---|
| Ethereum mainnet | EVM | Probabilistic (PoS) | 2 (safe head); 32 for epoch finality | secp256k1 |
| Arbitrum One | EVM L2 | Sequencer + L1 finality | 1 (optimistic) | secp256k1 |
| Base | EVM L2 | Sequencer + L1 finality | 1 (optimistic) | secp256k1 |
| Optimism | EVM L2 | Sequencer + L1 finality | 1 (optimistic) | secp256k1 |
| Polygon | EVM PoA | Checkpoint | 64 | secp256k1 |
| BNB Chain | EVM PoA | Checkpoint | 64 | secp256k1 |
| Avalanche | EVM (Snowman) | Instant after acceptance | 1 | secp256k1 |
| Solana mainnet | Solana | Tower BFT | 32 slots (~13s) | ed25519 |
| SUI mainnet | SUI | Narwhal/Bullshark | 1 checkpoint | ed25519 |
| Cosmos Hub | Cosmos/IBC | Tendermint BFT | 1 block (instant) | secp256k1 |
| Osmosis | Cosmos/IBC | Tendermint BFT | 1 block (instant) | secp256k1 |
| Neutron | Cosmos/IBC | Tendermint BFT | 1 block (instant) | secp256k1 |
| Stellar mainnet | Stellar | SCP (federated) | 1 ledger close | ed25519 |
Phase 2 additions: SUI (additional), Cosmos Hub, Osmosis, Neutron
Phase 3 additions: Stellar, additional Cosmos chains
11.2 Finality Confirmation Depths (constants.py)
FINALITY_BLOCKS: dict[str, int] = {
'ethereum': 12, # ~2.5 min; PoS single-slot final at 2 epochs
'arbitrum': 1, 'optimism': 1, 'base': 1,
'polygon': 64, 'bsc': 64,
'avalanche': 1, # Snowman: instant after acceptance
'solana': 1, # Confirmed commitment level
'sui': 1, 'stellar': 1,
'cosmoshub': 1, 'osmosis': 1, 'neutron': 1,
}
11.3 ChainAdapter Interface
All adapters implement the same abstract interface — the only component containing ecosystem-specific code:
class ChainAdapter(ABC):
@abstractmethod
def get_pending_messages(self, from_height, to_height) -> list[PendingMessage]: ...
@abstractmethod
def is_message_delivered(self, seq_no, src_chain) -> bool: ...
@abstractmethod
def relay_message(self, msg, private_key, max_fee_usd) -> RelayResult: ...
@abstractmethod
def verify_relay(self, relay_tx, expected_seq) -> tuple[bool, raw_proof_dict]: ...
@abstractmethod
def get_rpc_latency_ms(self) -> float: ...
@abstractmethod
def get_wallet_info(self, private_key) -> WalletInfo: ...
@abstractmethod
def get_current_height(self) -> int: ...
Ecosystem-specific implementations:
- EVMAdapter — handles all 7 EVM chains via web3.py. PoA chains (Polygon, BNB) get
ExtraDataToPOAMiddlewareinjected automatically. - SolanaAdapter — uses solana-py and the Anchor IDL. Parses base64-encoded Anchor events using discriminators.
- SUIAdapter — uses SUI JSON-RPC API via aiohttp. Object-centric execution via programmable transaction blocks.
- StellarAdapter — split architecture: base ledger via Horizon REST API, smart contracts via Soroban RPC.
- CosmosAdapter — uses Cosmos REST API (Stargate) and CosmWasm execution. Handles per-chain denom differences.