Home / Input Output / ouroboros-leios
Mar 23, 3-4 PM (1)
Mar 23, 4-5 PM (2)
Mar 23, 5-6 PM (1)
Mar 23, 6-7 PM (0)
Mar 23, 7-8 PM (0)
Mar 23, 8-9 PM (0)
Mar 23, 9-10 PM (0)
Mar 23, 10-11 PM (0)
Mar 23, 11-12 AM (0)
Mar 24, 12-1 AM (0)
Mar 24, 1-2 AM (0)
Mar 24, 2-3 AM (0)
Mar 24, 3-4 AM (0)
Mar 24, 4-5 AM (0)
Mar 24, 5-6 AM (0)
Mar 24, 6-7 AM (0)
Mar 24, 7-8 AM (0)
Mar 24, 8-9 AM (1)
Mar 24, 9-10 AM (4)
Mar 24, 10-11 AM (1)
Mar 24, 11-12 PM (2)
Mar 24, 12-1 PM (2)
Mar 24, 1-2 PM (3)
Mar 24, 2-3 PM (1)
Mar 24, 3-4 PM (1)
Mar 24, 4-5 PM (5)
Mar 24, 5-6 PM (0)
Mar 24, 6-7 PM (0)
Mar 24, 7-8 PM (0)
Mar 24, 8-9 PM (0)
Mar 24, 9-10 PM (0)
Mar 24, 10-11 PM (0)
Mar 24, 11-12 AM (0)
Mar 25, 12-1 AM (0)
Mar 25, 1-2 AM (0)
Mar 25, 2-3 AM (0)
Mar 25, 3-4 AM (0)
Mar 25, 4-5 AM (0)
Mar 25, 5-6 AM (0)
Mar 25, 6-7 AM (0)
Mar 25, 7-8 AM (1)
Mar 25, 8-9 AM (0)
Mar 25, 9-10 AM (1)
Mar 25, 10-11 AM (1)
Mar 25, 11-12 PM (3)
Mar 25, 12-1 PM (16)
Mar 25, 1-2 PM (0)
Mar 25, 2-3 PM (1)
Mar 25, 3-4 PM (0)
Mar 25, 4-5 PM (0)
Mar 25, 5-6 PM (0)
Mar 25, 6-7 PM (0)
Mar 25, 7-8 PM (0)
Mar 25, 8-9 PM (0)
Mar 25, 9-10 PM (0)
Mar 25, 10-11 PM (0)
Mar 25, 11-12 AM (0)
Mar 26, 12-1 AM (0)
Mar 26, 1-2 AM (0)
Mar 26, 2-3 AM (0)
Mar 26, 3-4 AM (0)
Mar 26, 4-5 AM (0)
Mar 26, 5-6 AM (0)
Mar 26, 6-7 AM (0)
Mar 26, 7-8 AM (0)
Mar 26, 8-9 AM (1)
Mar 26, 9-10 AM (0)
Mar 26, 10-11 AM (1)
Mar 26, 11-12 PM (3)
Mar 26, 12-1 PM (0)
Mar 26, 1-2 PM (0)
Mar 26, 2-3 PM (2)
Mar 26, 3-4 PM (0)
Mar 26, 4-5 PM (1)
Mar 26, 5-6 PM (1)
Mar 26, 6-7 PM (0)
Mar 26, 7-8 PM (0)
Mar 26, 8-9 PM (0)
Mar 26, 9-10 PM (0)
Mar 26, 10-11 PM (0)
Mar 26, 11-12 AM (0)
Mar 27, 12-1 AM (0)
Mar 27, 1-2 AM (0)
Mar 27, 2-3 AM (0)
Mar 27, 3-4 AM (0)
Mar 27, 4-5 AM (0)
Mar 27, 5-6 AM (0)
Mar 27, 6-7 AM (0)
Mar 27, 7-8 AM (0)
Mar 27, 8-9 AM (0)
Mar 27, 9-10 AM (1)
Mar 27, 10-11 AM (0)
Mar 27, 11-12 PM (0)
Mar 27, 12-1 PM (0)
Mar 27, 1-2 PM (0)
Mar 27, 2-3 PM (0)
Mar 27, 3-4 PM (1)
Mar 27, 4-5 PM (0)
Mar 27, 5-6 PM (0)
Mar 27, 6-7 PM (0)
Mar 27, 7-8 PM (0)
Mar 27, 8-9 PM (0)
Mar 27, 9-10 PM (0)
Mar 27, 10-11 PM (0)
Mar 27, 11-12 AM (0)
Mar 28, 12-1 AM (0)
Mar 28, 1-2 AM (0)
Mar 28, 2-3 AM (0)
Mar 28, 3-4 AM (0)
Mar 28, 4-5 AM (0)
Mar 28, 5-6 AM (0)
Mar 28, 6-7 AM (0)
Mar 28, 7-8 AM (0)
Mar 28, 8-9 AM (0)
Mar 28, 9-10 AM (0)
Mar 28, 10-11 AM (0)
Mar 28, 11-12 PM (0)
Mar 28, 12-1 PM (0)
Mar 28, 1-2 PM (0)
Mar 28, 2-3 PM (0)
Mar 28, 3-4 PM (0)
Mar 28, 4-5 PM (0)
Mar 28, 5-6 PM (0)
Mar 28, 6-7 PM (0)
Mar 28, 7-8 PM (0)
Mar 28, 8-9 PM (0)
Mar 28, 9-10 PM (0)
Mar 28, 10-11 PM (0)
Mar 28, 11-12 AM (0)
Mar 29, 12-1 AM (0)
Mar 29, 1-2 AM (0)
Mar 29, 2-3 AM (0)
Mar 29, 3-4 AM (0)
Mar 29, 4-5 AM (0)
Mar 29, 5-6 AM (0)
Mar 29, 6-7 AM (0)
Mar 29, 7-8 AM (0)
Mar 29, 8-9 AM (0)
Mar 29, 9-10 AM (0)
Mar 29, 10-11 AM (0)
Mar 29, 11-12 PM (0)
Mar 29, 12-1 PM (0)
Mar 29, 1-2 PM (0)
Mar 29, 2-3 PM (0)
Mar 29, 3-4 PM (0)
Mar 29, 4-5 PM (0)
Mar 29, 5-6 PM (0)
Mar 29, 6-7 PM (0)
Mar 29, 7-8 PM (0)
Mar 29, 8-9 PM (0)
Mar 29, 9-10 PM (0)
Mar 29, 10-11 PM (0)
Mar 29, 11-12 AM (0)
Mar 30, 12-1 AM (0)
Mar 30, 1-2 AM (0)
Mar 30, 2-3 AM (0)
Mar 30, 3-4 AM (0)
Mar 30, 4-5 AM (0)
Mar 30, 5-6 AM (0)
Mar 30, 6-7 AM (0)
Mar 30, 7-8 AM (0)
Mar 30, 8-9 AM (2)
Mar 30, 9-10 AM (1)
Mar 30, 10-11 AM (1)
Mar 30, 11-12 PM (0)
Mar 30, 12-1 PM (0)
Mar 30, 1-2 PM (0)
Mar 30, 2-3 PM (0)
Mar 30, 3-4 PM (0)
62 commits this week Mar 23, 2026 - Mar 30, 2026
net-rs: add sample configs, document net-node in CLAUDE.md and README
Sample configs in net-node/configs/:
- mainnet.toml: base config (mainnet magic, Leios enabled, production
  params, validation timing)
- node0.toml: producer with 500/1000 stake, tx generation, file+log
  telemetry, peers to node1
- node1.toml: producer with 500/1000 stake, 50ms simulated delay on
  peer, file+log telemetry

CLAUDE.md: add net-node testing section with usage examples, add
net-node to workspace structure with module descriptions.

README.md: add test node feature summary, add net-node to workspace
structure, add test node usage section with two-node example, config
layering explanation, and telemetry output format.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: net-node Stage 3 — consensus and validation
Add longest-chain consensus and configurable fake validation:

- consensus.rs: tracks local_tip, fetches blocks for longer chains,
  skips self-produced blocks, deduplicates in-flight fetches, handles
  rollbacks. 4 unit tests.
- validation.rs: spawns background sleep tasks (constant + per_byte ms),
  sends completion on mpsc channel. 2 unit tests.
- config.rs: ValidationConfig (rb_head_ms, rb_body_ms_constant/per_byte,
  tx_validation_ms/per_byte)
- main.rs: consensus handles TipAdvanced/BlockReceived/RolledBack events,
  validation_rx arm in select loop

Fix coordinator bug: PeerEvent::BlockFetched now carries the original
fetch range (from, to) so the coordinator uses the authoritative point
instead of falling back to Point::Origin when body.point() fails on
opaque/fake blocks. This fixes pending_fetches cleanup, fragment
pruning, and NetworkEvent::BlockReceived point accuracy.

317 tests (293 net-core + 24 net-node), 0 clippy warnings.

Marks Stage 3 complete in test-node-plan.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: net-node Stage 2 — block production and tx injection
Add VRF-based block production (lottery ported from sim-rs) and Poisson
transaction generation to the test node:

- production.rs: stake-weighted VRF lottery, fake block building, deterministic seeding
- mempool.rs: background Poisson tx generator, random body sizes
- config.rs: ProductionConfig (stake, total_stake, rb_probability) and TxConfig (tx_rate, size range)
- main.rs: slot tick triggers try_produce_block, spawns tx generator

18 tests, 0 clippy warnings. Live-tested: producer (full stake, 200ms
slots) generates blocks seen by follower via ChainSync; txs broadcast
at configured rate.

Marks Stages 1 and 2 complete in test-node-plan.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: add net-node crate (Stage 1) and test-node-plan
New net-node binary crate implementing Stage 1 of the test node plan:
- TOML config with figment layering (repeatable --config, --set overrides)
- Slot clock aligned to wall-clock with configurable slot duration
- Coordinator wrapper (duplex mode, auto peer addition)
- Main event loop: slot ticks + network events + graceful shutdown
- 10 unit tests, 0 clippy warnings

Also adds the full test-node-plan.md with 5-stage implementation plan
covering production, consensus, validation, Leios, and telemetry.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: extract LeiosTracker from coordinator for habitability
Move Leios dedup, offer tracking, and fetch routing (500 lines, 11 fields)
into a self-contained leios_tracker module. Coordinator delegates via a
narrow interface, dropping from 2288 to 1788 lines. Tracker has its own
synchronous unit tests; 293 total tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: concurrent accept loop with admission control (risk register #9)
Decouple TCP accept from handshake so one slow peer no longer blocks
all inbound connections.  Each handshake now runs as an independent
tokio task, gated by a semaphore (--max-handshaking, default 64) and
a per-IP connection cap (--max-connections-per-ip, default 3).

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: move codec.rs to mux/ and protocol.rs to protocols/
codec.rs wraps mux channels with CBOR framing — belongs in mux/.
protocol.rs defines the protocol state machine framework — belongs
in protocols/. Re-export from parent modules so imports become
crate::mux::{CodecSend,CodecRecv} and crate::protocols::{Protocol,
Runner,Agency,Role,ProtocolError}. Update all ~40 import sites.
238 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: add Leios per-peer task integration (Phase 4d)
Wire LeiosNotify (ID 18) and LeiosFetch (ID 19) into the per-peer task
architecture behind a `leios_enabled` config flag (default false).

- LeiosStore: content-addressed blob store for EBs/votes (separate from
  ChainStore since Leios data is keyed by (slot, hash), not a linear chain)
- Client tasks: spawn_leios_notify (continuous request_next loop),
  spawn_leios_fetch (command-driven, like BlockFetch)
- Server handlers: serve_leios_notify (from LeiosStore + subscribe),
  serve_leios_fetch (block/txs/vote lookups)
- Types: 6 PeerEvent, 2 PeerCommand, 5 NetworkEvent, 3 NetworkCommand variants
- Coordinator: stub-forwards Leios events, populates LeiosStore on fetch
- Wiring: peer_task, responder_task, duplex_task all conditionally register
  and spawn Leios protocol sub-tasks
- CLI: --leios flag on serve (synthetic EB/vote generation) and multi-follow
  (logs Leios notifications) for local end-to-end testing

247 total tests (9 new). Locally tested: serve --leios -> multi-follow --leios.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: add TxSubmission protocol (Phase 3, step 1)
Implement the TxSubmission mini-protocol (protocol ID 4, version 2) —
pull-based transaction dissemination with blocking/non-blocking modes,
flow control, and full CBOR codec with indefinite-length inner lists.

Includes client-side run_client helper, server handler in fake server,
and CLI 'submit' command with single-tx and Poisson stream modes.
20 new tests (129 total), live-tested against fake server.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: document multi-peer coordinator design decision
Choose thread-per-peer with shared coordinator over Pallas v2
event-driven (single-threaded bottleneck) and Haskell actor model
(over-engineered for ~20 peers). Document PeerHandle sketch,
peer-agnostic consensus interface, and ordering rationale
(multi-peer before Leios protocols).

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: document Phase 4 Leios protocol implementation plan
Sub-phases 4a-4f: LeiosNotify/LeiosFetch protocols, Praos header/body
extensions, per-peer task integration, coordinator/ChainStore extensions,
and priority scheduling. Working assumptions: protocol IDs 18/19, opaque
types, two protocols initially, freshest-first deferred.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>