Tenzro
Ledger and execution

Networking.

libp2p stack with gossipsub topics, Kademlia DHT, NAT traversal (Circuit-Relay v2, AutoNAT v2, DCUtR).
STATUS
Testnet
CRATE
tenzro-network
STABILITY
Stable
REFERENCE
libp2p
01

Gossipsub topics

tenzro/blocks           block propagation
tenzro/transactions     tx propagation
tenzro/consensus        consensus messages
tenzro/attestations     TEE attestations
tenzro/models           model registrations
tenzro/inference        inference requests
tenzro/status           status, discovery
tenzro/agents           A2A messages
tenzro/providers        provider announcements
tenzro/sla              SLA / heartbeat reports
tenzro/training         training events
tenzro/training/syncer  cross-syncer round-state sync
tenzro/seed-agents      SeedAgent lifecycle envelopes
tenzro/cortex           Cortex reasoning fan-out
tenzro/wallet/frost     FROST-Ed25519 DKG/sign rounds
tenzro/wallet/mldsa     ML-DSA-65 sign rounds
02

Peer discovery

Kademlia DHT for peer discovery; PeerManager tracks connections and metrics. mDNS discovers peers on the node's own LAN segment and maintains a LocalPeerSet — the peer IDs currently seen locally. Surfaced as tenzro_localPeers ({ local_peers, count, available }).

06

Reachability tiers

A ReachabilityTracker folds AutoNAT outcomes, relay use, and local-direct dials into a sustained tier — direct, relay_only, or unreachable — published as tenzro_nodeReachability. The cluster planner's gate uses it to exclude members that cannot hold a data-plane link.

07

Local-first routing

With local peers and reachability known, a request prefers a provider on the same LAN before reaching over the WAN (prefer-local-with-fallback). Same-segment hops cut latency and keep traffic off the wide-area path when a local provider can serve it.

03

NAT traversal

Validators with a public address run Circuit-Relay v2 server plus AutoNAT v2 server. Joiners run the client halves plus DCUtR hole-punching; /p2p-circuit fallback when direct fails.

The stack adapts at runtime rather than from static config. A node starts its Kademlia in client mode and promotes itself to server once its reachability tier holds at direct — so a node only advertises itself as a routable DHT server after it has confirmed it is actually dialable, and a node behind a NAT never pollutes the routing table. A joiner that discovers a relay-capable peer during the Identify handshake books a Circuit-Relay v2 reservation on it, so a relayed address is ready before the first hole-punch attempt.

08

Bootstrap fallback

The testnet bootstrap set carries both DNS multiaddrs and raw fleet-IP multiaddrs for the same peers. A node whose resolver cannot answer the DNS names still reaches the fleet over the pinned IP addresses, so a first dial does not depend on DNS being reachable from the joiner's network.

04

Validator authentication

NodeValidatorRegistry authorizes peers for validator-only topics (consensus, blocks, attestations). Non-validators cannot publish on those topics.

05

Connection resilience

Nodes and clients join over residential WiFi, mobile, and datacenter links, so a dropped connection is expected, not exceptional. Reconnects use exponential backoff with jitter rather than a tight retry loop that would hammer a recovering peer. A streaming inference or training session that loses its transport mid-flight resumes from its last acknowledged position rather than restarting from scratch — the cursor survives the reconnect. This is the client-side complement to relay and hole-punching: NAT traversal establishes the link, backoff-and-resume keeps work moving across the link's normal instability.

Related
← All docs