Architecture Deep Dive
4.1 Key Design Principles
Permissionless Entry
Any operator can register by paying the dynamic TAO burn. No approval process, no guardian whitelist, no DVN gatekeeping. Competition is open.
Objective Scoring
Every score dimension uses on-chain or cryptographically verifiable data. Validator receipt timestamps prevent self-reporting manipulation entirely.
Sealed-Bid Auctions
Relay miners compete on latency and gas estimates before execution. Bid accuracy is scored. The market finds optimal pricing automatically.
ChainAdapter Interface
New chains can be added without deploying new contracts. Same-ecosystem chains are zero-config additions. New ecosystems need one Python class implementing five methods.
One Contract Per Chain
A single Entangle contract handles both source (sendMessage) and destination (verifyMessage) roles on every supported blockchain.
3-of-5 Multisig Governance
All protocol governance through a 3-of-5 Gnosis Safe. 48h timelocks on validator set and threshold changes. All transactions publicly verifiable on-chain.
4.2 Protocol Data Structures
MessageEnvelope
The chain-agnostic, canonical description of a pending cross-chain message:
| Field | Description |
|---|---|
message_id |
sha256 of (src_chain + protocol_addr + seq + src_tx). Globally unique. |
src_chain |
Source chain name (e.g. "ethereum", "solana") |
src_ecosystem |
Ecosystem family: evm, solana, sui, stellar, cosmos |
src_protocol |
Entangle ProtocolHub contract address on the source chain |
src_tx |
Transaction hash / signature of the MessageDispatched event |
src_seq |
Monotonically increasing sequence number from the source hub |
src_height |
Block / slot / ledger number on the source chain |
src_timestamp |
Unix timestamp of source transaction confirmation |
dst_chain |
Target chain name |
dst_ecosystem |
Target ecosystem family |
dst_protocol |
Entangle ProtocolHub address on destination chain |
dst_recipient |
Application contract/account receiving the message |
payload_hex |
Hex-encoded raw message payload (max 8 KiB) |
requires_ack |
If true, source dApp expects an acknowledgement reply |
ProofBundle
Returned by the miner as evidence of delivery:
| Field | Description |
|---|---|
proof_type |
One of: evm_tx_receipt, solana_signature, sui_digest, stellar_hash, cosmos_tx_hash |
relay_tx |
Primary on-chain identifier of the relay transaction |
dst_height |
Block / slot / ledger number on the destination chain |
dst_timestamp |
Unix timestamp of the relay confirmation |
raw |
Ecosystem-specific data (EVM receipt/logs, Solana signature/slot, SUI digest/effects, etc.) |
RelayStatus Codes
| Code | Name | Meaning |
|---|---|---|
| 200 | SUCCESS |
Relay confirmed on destination chain |
| 208 | ALREADY_RELAYED |
Another miner relayed first. Partial score. |
| 202 | PENDING |
Transaction submitted but not yet confirmed |
| 402 | INSUFFICIENT_FUNDS |
Miner wallet has insufficient gas |
| 500 | REVERT |
Destination contract reverted |
| 408 | TIMEOUT |
Message not confirmed before deadline |
| 501 | UNSUPPORTED_CHAIN |
Miner doesn't support this chain pair |
| 422 | INVALID_PROOF |
Miner couldn't build a valid proof |
| 429 | RATE_LIMITED |
Miner is at capacity — task shed |
4.3 Deterministic Task IDs
Task IDs are computed deterministically so all validators assign the same ID to the same message — critical for cross-validator score consistency:
task_id = sha256(
sha256(src_chain + ":" + protocol_addr + ":" + seq + ":" + src_tx)
+ ":" + validator_hotkey[:8]
)
4.4 Deployment Architecture
Per Validator Node:
┌────────────────────────────────────────────────────────────┐
│ validator-process (Python) │
│ ├─ BittensorClient (metagraph, axon, dendrite) │
│ ├─ ChainAdapterRegistry (one adapter per chain) │
│ ├─ SynapseHandlers (ChainScan, HealthCheck, Attest) │
│ ├─ AuctionEngine (BidRequest, winner selection) │
│ ├─ ExecutionMonitor (proof verification, scoring) │
│ ├─ OracleSubmitter (gas price updates) │
│ └─ WeightCommitter (set_weights every epoch) │
│ │
│ HSM / Secrets Manager (external) │
│ └─ Attestation keys per dst_chain ecosystem │
└────────────────────────────────────────────────────────────┘
Per Scanner Miner Node:
┌────────────────────────────────────────────────────────────┐
│ scanner-process (Python) │
│ ├─ BittensorClient (axon — serves ChainScanSynapse) │
│ ├─ ChainAdapterRegistry (source chain adapters only) │
│ └─ SynapseHandlers (ChainScan, HealthCheck) │
│ │
│ RPC Infrastructure: │
│ ├─ Private dedicated RPC (primary) — per chain │
│ └─ Public backup RPC — per chain │
└────────────────────────────────────────────────────────────┘
Per Relay Miner Node:
┌────────────────────────────────────────────────────────────┐
│ relay-process (Python) │
│ ├─ BittensorClient (axon — serves BidRequest, Execute) │
│ ├─ ChainAdapterRegistry (destination chain adapters) │
│ ├─ WalletManager (keys + balances per dst_chain) │
│ └─ SynapseHandlers (BidRequest, Execute, Standby) │
│ │
│ Hot Wallets: │
│ └─ Funded address per supported destination chain │
└────────────────────────────────────────────────────────────┘