Home / Input Output / ouroboros-leios
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)
Apr 12, 4-5 AM (0)
Apr 12, 5-6 AM (0)
Apr 12, 6-7 AM (0)
Apr 12, 7-8 AM (0)
Apr 12, 8-9 AM (0)
Apr 12, 9-10 AM (0)
Apr 12, 10-11 AM (0)
Apr 12, 11-12 PM (0)
Apr 12, 12-1 PM (0)
Apr 12, 1-2 PM (0)
Apr 12, 2-3 PM (0)
Apr 12, 3-4 PM (0)
Apr 12, 4-5 PM (0)
Apr 12, 5-6 PM (0)
Apr 12, 6-7 PM (0)
Apr 12, 7-8 PM (0)
Apr 12, 8-9 PM (0)
Apr 12, 9-10 PM (0)
Apr 12, 10-11 PM (0)
Apr 12, 11-12 AM (0)
Apr 13, 12-1 AM (0)
Apr 13, 1-2 AM (0)
Apr 13, 2-3 AM (0)
Apr 13, 3-4 AM (0)
Apr 13, 4-5 AM (0)
Apr 13, 5-6 AM (0)
Apr 13, 6-7 AM (0)
Apr 13, 7-8 AM (0)
Apr 13, 8-9 AM (0)
Apr 13, 9-10 AM (0)
Apr 13, 10-11 AM (9)
Apr 13, 11-12 PM (0)
Apr 13, 12-1 PM (0)
Apr 13, 1-2 PM (1)
Apr 13, 2-3 PM (0)
Apr 13, 3-4 PM (0)
Apr 13, 4-5 PM (0)
Apr 13, 5-6 PM (0)
Apr 13, 6-7 PM (0)
Apr 13, 7-8 PM (0)
Apr 13, 8-9 PM (0)
Apr 13, 9-10 PM (0)
Apr 13, 10-11 PM (0)
Apr 13, 11-12 AM (0)
Apr 14, 12-1 AM (0)
Apr 14, 1-2 AM (0)
Apr 14, 2-3 AM (0)
Apr 14, 3-4 AM (0)
Apr 14, 4-5 AM (0)
Apr 14, 5-6 AM (0)
Apr 14, 6-7 AM (0)
Apr 14, 7-8 AM (0)
Apr 14, 8-9 AM (0)
Apr 14, 9-10 AM (0)
Apr 14, 10-11 AM (1)
Apr 14, 11-12 PM (3)
Apr 14, 12-1 PM (0)
Apr 14, 1-2 PM (2)
Apr 14, 2-3 PM (2)
Apr 14, 3-4 PM (0)
Apr 14, 4-5 PM (0)
Apr 14, 5-6 PM (0)
Apr 14, 6-7 PM (0)
Apr 14, 7-8 PM (1)
Apr 14, 8-9 PM (0)
Apr 14, 9-10 PM (3)
Apr 14, 10-11 PM (0)
Apr 14, 11-12 AM (0)
Apr 15, 12-1 AM (0)
Apr 15, 1-2 AM (0)
Apr 15, 2-3 AM (0)
Apr 15, 3-4 AM (0)
Apr 15, 4-5 AM (0)
Apr 15, 5-6 AM (0)
Apr 15, 6-7 AM (0)
Apr 15, 7-8 AM (0)
Apr 15, 8-9 AM (1)
Apr 15, 9-10 AM (1)
Apr 15, 10-11 AM (2)
Apr 15, 11-12 PM (1)
Apr 15, 12-1 PM (2)
Apr 15, 1-2 PM (0)
Apr 15, 2-3 PM (0)
Apr 15, 3-4 PM (1)
Apr 15, 4-5 PM (0)
Apr 15, 5-6 PM (4)
Apr 15, 6-7 PM (0)
Apr 15, 7-8 PM (0)
Apr 15, 8-9 PM (0)
Apr 15, 9-10 PM (0)
Apr 15, 10-11 PM (0)
Apr 15, 11-12 AM (0)
Apr 16, 12-1 AM (0)
Apr 16, 1-2 AM (0)
Apr 16, 2-3 AM (0)
Apr 16, 3-4 AM (0)
Apr 16, 4-5 AM (0)
Apr 16, 5-6 AM (0)
60 commits this week Apr 09, 2026 - Apr 16, 2026
Set wfa-ls VRF trials to 600 (480 persistent + 120 non-persistent)
The experiment config's vote-generation-probability: 600 was being
ignored because the simulation uses persistent + non-persistent
probabilities directly (defaulting to 400 + 100 = 500). Override both
in the wfa-ls mode to get the intended 600 total with 80:20 split,
giving a 75% quorum at the existing threshold of 450.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Add process RSS to memory stats and simplify praos.blocks instrumentation
Read VmRSS from /proc/self/status and log it alongside estimated totals
so we can directly compare instrumented vs actual memory usage.

Simplify praos.blocks stats back to basic entry count and tx_refs — the
detailed unique/endorse breakdown showed praos.blocks is not a
significant memory consumer.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Enable TX pruning in benchmarks to bound txs HashMap memory
The txs HashMap grew to 120k entries (16 MB/node, ~12 GB total) because
linear-tx-max-age-slots defaulted to null in the benchmark parameter
chain. Set it to 24 in memory-limit.yaml (vote=4 + diffuse=7 +
ceil(1000/1000)*3 + buffer=10) to match the experiment config timing.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Replace per-block ledger state cache with single mutable state
ledger_states was a BTreeMap caching a cumulative HashSet<u64> of spent
inputs for every ranking block. At slot 1380 with 72 blocks this reached
3.4M entries per snapshot × 72 copies = 55 MB/node × 750 = 41 GB (~70%
of total memory).

Since resolve_ledger_state is only called for the current chain tip, and
rollbacks aren't handled correctly anyway (slot battle replacement blocks
are skipped by seen_blocks), replace the BTreeMap with a single
Option<(BlockId, LedgerState)> that is mutated in place. Removes Clone
derive from LedgerState.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Add per-minute memory usage instrumentation to linear leios
Log entry counts and estimated byte sizes for all significant per-node
data structures every 60 slots from node 0. Multiplied by node count
to estimate total simulation memory. Identified ledger_states as the
dominant consumer (~70% of 58 GB at 1380 slots).

Also tee simulation output in the benchmark script so tracing logs
(including memory stats) are visible during runs.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Fix pruning race that panics shard thread and deadlocks CMB
prune_old_leios_state() could remove EBs from self.leios.ebs while a
CpuTask::EBBlockValidated was still in-flight (body validation takes
50+ ms). When the task completed, finish_validating_eb() panicked,
killing one shard thread and freezing its shared_time. Other shards
then deadlocked in the CMB ceiling check waiting for the dead shard.

- Skip pruning EBs in Received { validated: false } state
- Replace panic with tracing::warn! + return as a safety net
- Track pruned EBs to prevent re-requests of already-processed EBs
- Wrap shard threads in catch_unwind to cancel the token on panic,
  preventing any future panic from deadlocking multi-shard runs

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Prune old leios state based on endorsed EB chain
Remove vote bundles, tallies, EB state, and relay announcements for
EBs older than the latest endorsed EB. Only prunes once a newer EB
has been endorsed on-chain, avoiding false positives from fixed
time-based cutoffs.

Also rename TMPDIR to WORK in benchmark script to avoid shadowing
the system TMPDIR variable.

Note: a reproducible hang has been observed at 0.250/wfa-ls throughput
with 6-shard sequential engine. Under investigation — may be related
to pruning timing or a pre-existing CMB synchronisation issue.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Prune old vote and EB state in linear leios to bound memory
Vote bundles, per-EB tallies, EB state, and relay announcements were
stored forever, causing 50GB+ memory with large voter committees.

Add slot-based pruning that removes all leios state for EBs older than
the full voting lifecycle (3*header_diffusion + vote_stage +
diffuse_stage + buffer). Also remove write-only certified_ebs field.

Reduces peak memory from 54GB to ~31GB for 750-voter/1500-slot runs.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Use persistent vote parameters for deterministic committee modes
Everyone and top-stake-fraction voters are all deterministically selected
and don't need per-vote eligibility proofs, so use persistent vote sizes
(90 bytes), generation time (0.135ms), and validation time (0.670ms)
instead of the weighted persistent/non-persistent average.

Also fix memory-limit peer backlog cap (raise to 1000 from typo fix).

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Allow filtering by throughput and committee mode in benchmark script
Accept optional second and third args for comma-separated throughput
and mode filters (use "-" for all). Append to existing results CSV
when filtering instead of overwriting.

Examples:
  ./scripts/cip-voting-options.sh - 0.250 everyone
  ./scripts/cip-voting-options.sh - 0.250,0.300 wfa-ls,everyone

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
fix: add bounded retry limits to all phases in wait-for-test.sh
- Phase 1 (acceptance): track consecutive errors, exit after 10
- Phase 2 (completion): track consecutive errors, exit after 5
- Final outcome: detect all-attempts-failed, handle jq parse errors
  per reviewer suggestion in PR#858 review thread

Agent-Logs-Url: https://github.com/input-output-hk/ouroboros-leios/sessions/6365c0a4-b8cc-4046-bb53-b41de3d2cd02

Co-authored-by: wolf31o2 <[email protected]>
fix: handle transient errors and reduce poll frequency in wait-for-test
The completion poll was crashing on transient DNS/connection failures
from moog because the error output couldn't be parsed by jq under
set -e. Now all phases catch query and parse failures and retry.
Completion poll interval increased from 60s to 300s since the test
runs for an hour.

Signed-off-by: Chris Gianelloni <[email protected]>