Home / Input Output / ouroboros-leios
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 (1)
Mar 30, 2-3 PM (1)
Mar 30, 3-4 PM (1)
Mar 30, 4-5 PM (0)
Mar 30, 5-6 PM (0)
Mar 30, 6-7 PM (0)
Mar 30, 7-8 PM (0)
Mar 30, 8-9 PM (0)
Mar 30, 9-10 PM (0)
Mar 30, 10-11 PM (0)
Mar 30, 11-12 AM (0)
Mar 31, 12-1 AM (0)
Mar 31, 1-2 AM (0)
Mar 31, 2-3 AM (0)
Mar 31, 3-4 AM (0)
Mar 31, 4-5 AM (0)
Mar 31, 5-6 AM (0)
Mar 31, 6-7 AM (0)
Mar 31, 7-8 AM (1)
Mar 31, 8-9 AM (3)
Mar 31, 9-10 AM (1)
Mar 31, 10-11 AM (5)
Mar 31, 11-12 PM (1)
Mar 31, 12-1 PM (6)
Mar 31, 1-2 PM (0)
Mar 31, 2-3 PM (0)
Mar 31, 3-4 PM (0)
Mar 31, 4-5 PM (0)
Mar 31, 5-6 PM (0)
Mar 31, 6-7 PM (0)
Mar 31, 7-8 PM (0)
Mar 31, 8-9 PM (0)
Mar 31, 9-10 PM (0)
Mar 31, 10-11 PM (0)
Mar 31, 11-12 AM (0)
Apr 01, 12-1 AM (0)
Apr 01, 1-2 AM (0)
Apr 01, 2-3 AM (0)
Apr 01, 3-4 AM (0)
Apr 01, 4-5 AM (0)
Apr 01, 5-6 AM (0)
Apr 01, 6-7 AM (0)
Apr 01, 7-8 AM (0)
Apr 01, 8-9 AM (0)
Apr 01, 9-10 AM (0)
Apr 01, 10-11 AM (0)
56 commits this week Mar 25, 2026 - Apr 01, 2026
net-rs: fix RTT measurement to include simulated link latency
Two issues fixed:
- KeepAlive RTT now includes the configured inbound_delay so reported
  latency reflects the simulated link delay (real localhost RTT is ~0)
- Accepted (inbound) peers skip RTT storage since they can't match a
  configured delay; the outbound side of each connection tracks RTT
- LatencyMeasured events are exempt from the delay buffer (they're
  measurements, not data)

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: real-time event delivery to UI
- HttpEventSink sends each event immediately (no batching) — reqwest
  uses persistent connections so overhead is minimal
- Server pushes events to EventWindow on ingestion, bypassing the
  aggregator watermark delay (aggregator still writes ordered JSONL)
- Increase server→aggregator channel capacity 256→4096
- Reduce ordering_window_secs 5→1s, stats_interval_secs 5→1s
- Bump UI MAX_SERIES 60→300 to keep 5 min history at 1s stats interval

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: fix ChainStore block_no divergence across nodes
ChainStore block_no was a running append counter used as Tip.block_no in
ChainSync. Different nodes diverged because they saw blocks in different
orders (especially fork blocks from same-slot producers), causing block
propagation to stall when two nodes had the same counter for different
chains.

Fix: consensus passes the actual chain height via InjectBlock instead of
ChainStore maintaining its own counter. Self-produced blocks update
local_tip immediately in register_self_produced rather than waiting for
peer re-announcement.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: fix cluster connection and block propagation issues
- Fix duplex peer reconnection: outbound peers now reconnect on failure
  (was only reconnecting InitiatorOnly, missing Duplex mode)
- Accept loop creates duplex peers instead of responder-only, so accepted
  connections run both client and server protocols (ChainSync client etc.)
- Make topology edges directional (from→to only) since duplex handles both
  directions — halves connection count per node pair
- Remove coordinator-side append_block on BlockFetched — blocks only enter
  ChainStore after app validation via InjectBlock (was double-counting)
- Add dedup to ChainStore::append_block as safety net
- Fix ResponderOnly address format to include port (SocketAddr not IpAddr)
- Remove responder_task module (replaced by accepted duplex task)
- Move server_protocol_configs to peer_task module

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: net-ui node flashes, peer IDs, and visual tweaks
- Nodes flash green on block production, amber on block receipt (600ms fade)
- Dark blue-grey default node background, thick border on selection
- Show full node ID and tip in topology nodes
- Show resolved node ID in peer list (mapped from topology addresses)
- Larger event log font

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: net-ui layout and polish
- Full-height right sidebar with inspector (3:2) and event log
- Edge handles centered on nodes (no more dangling connection points)
- Node/edge click always selects (no toggle deselect), pane click deselects
- Fix infinite update loop on node selection (filter onNodesChange to dragging only)
- Inspector charts padded to fixed 60-point window like aggregate charts
- Larger title, graph labels, and event log font
- Lighter borders between chart panels

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: net-ui graph improvements
- Charts show per-second bandwidth rate and delta counts for messages/blocks
- Rate calculation uses time since last actual change, not last poll
- Only emit data points when cumulative values change (no zero-spike pattern)
- Fixed-width 60-point chart window with null padding during fill-in
- Bandwidth formatted as KB/MB with units on axes and tooltips
- Disable animation on inspector panel charts

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: net-ui baseline — cluster dashboard SPA
Vite + React 19 + TypeScript + Zustand + MUI + ReactFlow + d3-force + recharts.
Connects to net-cluster REST API (topology, stats, events) with 1s polling.

Features:
- Force-directed topology graph with latency-labelled edges
- Rolling aggregate charts (bandwidth, messages, blocks produced)
- Per-node inspector panel with details, peers, and per-node charts
- Streaming event log with color-coded event types

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: net-cluster Stage 1 — cluster orchestrator with telemetry aggregation
New net-cluster crate that orchestrates local multi-node test networks:
- Random topology generation with configurable degree and latency
- Per-node TOML overlay generation with HTTP telemetry sinks
- Child process spawning with log capture
- Axum HTTP server receives event batches and stats from nodes
- Watermark-based time-ordered event merge to JSONL output
- 27 unit tests covering topology, overlay, aggregator, server, config

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: fix header hash and block-extracted header format for real relay compat
block-extracted headers were missing #6.24 wrapping, header_hash was
hashing the era-tagged wrapper instead of just the inner header_cbor,
and consensus was injecting entire block bodies as "headers". These
combined to break block fetch routing (point mismatch) after the first
block when following a real Cardano relay.

- try_extract_header: wrap in #6.24 to match ChainSync wire format
- header_hash: hash inner header_cbor bytes (skip era tag + #6.24 framing)
- consensus: use body.header() instead of WrappedHeader::opaque(body.raw)
- production: use header.point() instead of manual hash, store raw header
  in block body (no #6.24 wrapping, matching real Cardano blocks)
- test fixtures: match real block structure (no #6.24 on in-block headers)
- add follow-real-relay.toml config for passive mainnet relay testing

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
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]>