Networking.
- STATUS
- Testnet
- CRATE
- tenzro-network
- STABILITY
- Stable
- REFERENCE
- libp2p
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 roundsPeer 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 }).
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.
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.
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.
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.
Validator authentication
NodeValidatorRegistry authorizes peers for validator-only topics (consensus, blocks, attestations). Non-validators cannot publish on those topics.
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.