Home / Input Output / ouroboros-leios
Apr 05, 3-4 AM (0)
Apr 05, 4-5 AM (0)
Apr 05, 5-6 AM (0)
Apr 05, 6-7 AM (0)
Apr 05, 7-8 AM (0)
Apr 05, 8-9 AM (0)
Apr 05, 9-10 AM (0)
Apr 05, 10-11 AM (0)
Apr 05, 11-12 PM (0)
Apr 05, 12-1 PM (0)
Apr 05, 1-2 PM (0)
Apr 05, 2-3 PM (0)
Apr 05, 3-4 PM (0)
Apr 05, 4-5 PM (0)
Apr 05, 5-6 PM (0)
Apr 05, 6-7 PM (0)
Apr 05, 7-8 PM (0)
Apr 05, 8-9 PM (0)
Apr 05, 9-10 PM (0)
Apr 05, 10-11 PM (0)
Apr 05, 11-12 AM (0)
Apr 06, 12-1 AM (0)
Apr 06, 1-2 AM (0)
Apr 06, 2-3 AM (0)
Apr 06, 3-4 AM (0)
Apr 06, 4-5 AM (0)
Apr 06, 5-6 AM (0)
Apr 06, 6-7 AM (0)
Apr 06, 7-8 AM (0)
Apr 06, 8-9 AM (0)
Apr 06, 9-10 AM (0)
Apr 06, 10-11 AM (0)
Apr 06, 11-12 PM (0)
Apr 06, 12-1 PM (0)
Apr 06, 1-2 PM (0)
Apr 06, 2-3 PM (0)
Apr 06, 3-4 PM (0)
Apr 06, 4-5 PM (0)
Apr 06, 5-6 PM (0)
Apr 06, 6-7 PM (0)
Apr 06, 7-8 PM (0)
Apr 06, 8-9 PM (0)
Apr 06, 9-10 PM (0)
Apr 06, 10-11 PM (0)
Apr 06, 11-12 AM (0)
Apr 07, 12-1 AM (0)
Apr 07, 1-2 AM (0)
Apr 07, 2-3 AM (0)
Apr 07, 3-4 AM (0)
Apr 07, 4-5 AM (0)
Apr 07, 5-6 AM (0)
Apr 07, 6-7 AM (0)
Apr 07, 7-8 AM (2)
Apr 07, 8-9 AM (4)
Apr 07, 9-10 AM (0)
Apr 07, 10-11 AM (1)
Apr 07, 11-12 PM (0)
Apr 07, 12-1 PM (1)
Apr 07, 1-2 PM (1)
Apr 07, 2-3 PM (1)
Apr 07, 3-4 PM (0)
Apr 07, 4-5 PM (4)
Apr 07, 5-6 PM (0)
Apr 07, 6-7 PM (0)
Apr 07, 7-8 PM (1)
Apr 07, 8-9 PM (1)
Apr 07, 9-10 PM (0)
Apr 07, 10-11 PM (0)
Apr 07, 11-12 AM (0)
Apr 08, 12-1 AM (0)
Apr 08, 1-2 AM (0)
Apr 08, 2-3 AM (0)
Apr 08, 3-4 AM (0)
Apr 08, 4-5 AM (0)
Apr 08, 5-6 AM (0)
Apr 08, 6-7 AM (0)
Apr 08, 7-8 AM (9)
Apr 08, 8-9 AM (0)
Apr 08, 9-10 AM (0)
Apr 08, 10-11 AM (1)
Apr 08, 11-12 PM (2)
Apr 08, 12-1 PM (4)
Apr 08, 1-2 PM (4)
Apr 08, 2-3 PM (1)
Apr 08, 3-4 PM (0)
Apr 08, 4-5 PM (0)
Apr 08, 5-6 PM (0)
Apr 08, 6-7 PM (1)
Apr 08, 7-8 PM (0)
Apr 08, 8-9 PM (0)
Apr 08, 9-10 PM (0)
Apr 08, 10-11 PM (0)
Apr 08, 11-12 AM (0)
Apr 09, 12-1 AM (0)
Apr 09, 1-2 AM (0)
Apr 09, 2-3 AM (0)
Apr 09, 3-4 AM (0)
Apr 09, 4-5 AM (0)
Apr 09, 5-6 AM (0)
Apr 09, 6-7 AM (0)
Apr 09, 7-8 AM (0)
Apr 09, 8-9 AM (1)
Apr 09, 9-10 AM (0)
Apr 09, 10-11 AM (0)
Apr 09, 11-12 PM (1)
Apr 09, 12-1 PM (0)
Apr 09, 1-2 PM (3)
Apr 09, 2-3 PM (0)
Apr 09, 3-4 PM (0)
Apr 09, 4-5 PM (0)
Apr 09, 5-6 PM (0)
Apr 09, 6-7 PM (0)
Apr 09, 7-8 PM (0)
Apr 09, 8-9 PM (0)
Apr 09, 9-10 PM (0)
Apr 09, 10-11 PM (0)
Apr 09, 11-12 AM (0)
Apr 10, 12-1 AM (0)
Apr 10, 1-2 AM (0)
Apr 10, 2-3 AM (0)
Apr 10, 3-4 AM (0)
Apr 10, 4-5 AM (0)
Apr 10, 5-6 AM (0)
Apr 10, 6-7 AM (0)
Apr 10, 7-8 AM (3)
Apr 10, 8-9 AM (0)
Apr 10, 9-10 AM (0)
Apr 10, 10-11 AM (12)
Apr 10, 11-12 PM (0)
Apr 10, 12-1 PM (1)
Apr 10, 1-2 PM (0)
Apr 10, 2-3 PM (0)
Apr 10, 3-4 PM (1)
Apr 10, 4-5 PM (1)
Apr 10, 5-6 PM (0)
Apr 10, 6-7 PM (0)
Apr 10, 7-8 PM (0)
Apr 10, 8-9 PM (0)
Apr 10, 9-10 PM (0)
Apr 10, 10-11 PM (2)
Apr 10, 11-12 AM (0)
Apr 11, 12-1 AM (0)
Apr 11, 1-2 AM (0)
Apr 11, 2-3 AM (0)
Apr 11, 3-4 AM (0)
Apr 11, 4-5 AM (0)
Apr 11, 5-6 AM (0)
Apr 11, 6-7 AM (0)
Apr 11, 7-8 AM (0)
Apr 11, 8-9 AM (0)
Apr 11, 9-10 AM (0)
Apr 11, 10-11 AM (0)
Apr 11, 11-12 PM (0)
Apr 11, 12-1 PM (1)
Apr 11, 1-2 PM (0)
Apr 11, 2-3 PM (0)
Apr 11, 3-4 PM (0)
Apr 11, 4-5 PM (0)
Apr 11, 5-6 PM (0)
Apr 11, 6-7 PM (0)
Apr 11, 7-8 PM (0)
Apr 11, 8-9 PM (0)
Apr 11, 9-10 PM (0)
Apr 11, 10-11 PM (0)
Apr 11, 11-12 AM (0)
Apr 12, 12-1 AM (0)
Apr 12, 1-2 AM (0)
Apr 12, 2-3 AM (0)
Apr 12, 3-4 AM (0)
64 commits this week Apr 05, 2026 - Apr 12, 2026
ci(antithesis): sync node refs from flake.lock
Extract cardano-node revisions from flake.lock and pass them as
Docker build args to the cardano-node and cardano-node-bp images,
so the two Haskell builds stay in lockstep with the Nix-pinned
versions without manual Dockerfile edits.

ouroboros-consensus is intentionally left on the Dockerfile default
because flake.lock currently trails the Dockerfile and syncing
would silently downgrade immdb-server.

Signed-off-by: Chris Gianelloni <[email protected]>
Use atomic decrement + Notify for finish_task instead of channel message
finish_task() previously sent a ClockEvent::FinishTask through the same
mpsc channel as Wait/CancelWait events, creating contention. Now it does
an atomic fetch_sub and signals a Notify, letting the coordinator wake
without channel round-trips. Also handles the resulting race where time
can advance before a Wait event arrives.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Add slot-based TX pruning to LinearLeiosNode to bound memory growth
Transactions in the per-node txs HashMap were never cleaned up, causing
unbounded memory growth proportional to node count * total transactions.
Prune transactions that are both older than a configurable max age and no
longer present in the mempool. The mempool check ensures TXs that could
still be included in future EBs (if previous voting failed) are retained.

New config option `linear-tx-max-age-slots` (default: null/disabled).

Co-Authored-By: Claude Opus 4.6 <[email protected]>
net-rs: revert from-endpoint check in FetchBlockRange routing
The fragment.contains(&from) check added in 8065d81cc causes a
fetch-fail-retry loop: after a block is fetched, its point is
removed from all peer fragments (coordinator line 326). If a
later FetchBlockRange uses that fetched block as `from`, no peer's
fragment contains it, so the fetch fails immediately and retries
forever.

Revert to checking only `to`. The server-side get_range already
handles unknown `from` by returning the prefix up to `to` — this
is intentional fork-aware behavior (chain_store.rs line 235-240).

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: periodic select_chain retry for convergence after production stops
When block production stops (p=0), the network previously froze
completely — select_chain only ran on incoming network events, so
with no new blocks there were no events to trigger retries of
stale fetches or pending_validation deadlocks.

Add retry_select_chain() to PraosConsensus: evicts stale in_flight
entries and re-runs select_chain when there is actionable state
(stale evictions, in-flight fetches, or pending_validation entries).
Called every 5 slots (~5s) from the main loop's slot tick.

Cluster testing confirms: after setting p=0, most nodes now converge
to the majority tip. Three nodes remain stuck due to a separate
pending_validation ordering issue (blocks arrive but parents are
missing — needs further investigation).

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: anchor-based PeerChain for chain selection with narrow windows
Aligns PeerChain with Haskell's AnchoredFragment pattern: the
ChainSync intersection point is stored as an explicit anchor on
each peer's candidate chain. When select_chain_once's walk through
PeerChain entries fails to find a common ancestor (narrow window
after reconnection), the anchor provides a guaranteed fallback.

Changes:
- Forward NetworkEvent::IntersectionFound from coordinator to
  consensus (previously swallowed at the coordinator level)
- Add PeerChainAnchor struct and anchor field to PeerChain, set
  from IntersectionFound, persists through rollbacks
- Add anchor fallback in select_chain_once after the walk and
  prev_hash fallback both fail
- Detect gap between anchor and oldest PeerChain entry; thread
  anchor_point through WaitingForBlocks to issue_fetch so the
  fetch range starts from the anchor, filling the gap via
  BlockFetch

Three new tests: anchor_set_on_intersection_found,
anchor_used_as_fallback_ancestor, anchor_ignored_when_walk_succeeds.

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