Networking
Fully peer-to-peer using libp2p. No central servers.
Components
| Component | Purpose | Protocol |
|---|---|---|
| Host | TCP transport, connection management | libp2p core |
| GossipSub | Broadcast blocks, votes, marketplace, statechain, directory | libp2p GossipSub |
| Sync | Frontier-based block synchronization | /xe/sync/1.0.0 |
| Messaging | Request-response over streams | /xe/msg/1.0.0 |
| DHT | Kademlia peer discovery | /xe prefix |
Discovery Mechanisms
- mDNS — automatic local network discovery
- Bootstrap peers — explicit via
-dialflag, retry every 10s - Kademlia DHT — distributed hash table with
/xeprefix
GossipSub Topics
| Topic | Data Type | Buffer |
|---|---|---|
xe/blocks | Block | 256 |
xe/votes | Vote | 256 |
xe/marketplace | MarketplaceMsg | 256 |
xe/statechain | StateChainBlock | 16 |
xe/directory | Registration | 256 |
xe/certificates | Certificate | 64 |
Max gossip message size: 256 KB.
Sync Protocol
- Frontier-based: exchange
account → latest block hash - Paginated responses (default 64 blocks/page, max 256)
- Max 10,000 blocks per sync session
- 5-second per-peer cooldown
- Periodic re-sync every 10 seconds (with dirty flag optimization)
- Cross-account dependency retry (up to 3 passes)
- Block quarantine for permanently invalid blocks
Messaging Protocol
- Request-response semantics
- 30-second stream deadline
- 64 KB max request/response
- Message types:
vm_credentials,vm_status,account_chat,attest_timestamp - DHT-based peer discovery fallback
Security
- Transport encryption (Noise or TLS 1.3)
- Persistent Ed25519 identity
- GossipSub pre-validates field lengths
- Sync rate limiting (5s per peer)
- Max message sizes enforced
Host Configuration
- TCP on all interfaces, configurable port
- Connection manager: low=100, high=400, grace=1min
- Persistent identity at
{dataDir}/host.key - Optional relay + hole-punching support