Home / Input Output / ouroboros-leios
Feb 07, 10-11 PM (0)
Feb 07, 11-12 AM (0)
Feb 08, 12-1 AM (0)
Feb 08, 1-2 AM (0)
Feb 08, 2-3 AM (0)
Feb 08, 3-4 AM (0)
Feb 08, 4-5 AM (0)
Feb 08, 5-6 AM (0)
Feb 08, 6-7 AM (0)
Feb 08, 7-8 AM (0)
Feb 08, 8-9 AM (0)
Feb 08, 9-10 AM (0)
Feb 08, 10-11 AM (0)
Feb 08, 11-12 PM (0)
Feb 08, 12-1 PM (0)
Feb 08, 1-2 PM (0)
Feb 08, 2-3 PM (0)
Feb 08, 3-4 PM (0)
Feb 08, 4-5 PM (0)
Feb 08, 5-6 PM (0)
Feb 08, 6-7 PM (0)
Feb 08, 7-8 PM (0)
Feb 08, 8-9 PM (1)
Feb 08, 9-10 PM (0)
Feb 08, 10-11 PM (0)
Feb 08, 11-12 AM (0)
Feb 09, 12-1 AM (0)
Feb 09, 1-2 AM (0)
Feb 09, 2-3 AM (0)
Feb 09, 3-4 AM (0)
Feb 09, 4-5 AM (0)
Feb 09, 5-6 AM (0)
Feb 09, 6-7 AM (0)
Feb 09, 7-8 AM (0)
Feb 09, 8-9 AM (0)
Feb 09, 9-10 AM (0)
Feb 09, 10-11 AM (0)
Feb 09, 11-12 PM (0)
Feb 09, 12-1 PM (2)
Feb 09, 1-2 PM (0)
Feb 09, 2-3 PM (3)
Feb 09, 3-4 PM (3)
Feb 09, 4-5 PM (2)
Feb 09, 5-6 PM (0)
Feb 09, 6-7 PM (1)
Feb 09, 7-8 PM (2)
Feb 09, 8-9 PM (0)
Feb 09, 9-10 PM (0)
Feb 09, 10-11 PM (0)
Feb 09, 11-12 AM (0)
Feb 10, 12-1 AM (0)
Feb 10, 1-2 AM (0)
Feb 10, 2-3 AM (0)
Feb 10, 3-4 AM (0)
Feb 10, 4-5 AM (0)
Feb 10, 5-6 AM (0)
Feb 10, 6-7 AM (0)
Feb 10, 7-8 AM (1)
Feb 10, 8-9 AM (0)
Feb 10, 9-10 AM (0)
Feb 10, 10-11 AM (0)
Feb 10, 11-12 PM (1)
Feb 10, 12-1 PM (1)
Feb 10, 1-2 PM (0)
Feb 10, 2-3 PM (2)
Feb 10, 3-4 PM (0)
Feb 10, 4-5 PM (3)
Feb 10, 5-6 PM (0)
Feb 10, 6-7 PM (1)
Feb 10, 7-8 PM (0)
Feb 10, 8-9 PM (0)
Feb 10, 9-10 PM (0)
Feb 10, 10-11 PM (4)
Feb 10, 11-12 AM (0)
Feb 11, 12-1 AM (0)
Feb 11, 1-2 AM (0)
Feb 11, 2-3 AM (0)
Feb 11, 3-4 AM (0)
Feb 11, 4-5 AM (1)
Feb 11, 5-6 AM (0)
Feb 11, 6-7 AM (0)
Feb 11, 7-8 AM (0)
Feb 11, 8-9 AM (0)
Feb 11, 9-10 AM (0)
Feb 11, 10-11 AM (1)
Feb 11, 11-12 PM (0)
Feb 11, 12-1 PM (0)
Feb 11, 1-2 PM (3)
Feb 11, 2-3 PM (1)
Feb 11, 3-4 PM (3)
Feb 11, 4-5 PM (0)
Feb 11, 5-6 PM (0)
Feb 11, 6-7 PM (0)
Feb 11, 7-8 PM (0)
Feb 11, 8-9 PM (0)
Feb 11, 9-10 PM (0)
Feb 11, 10-11 PM (0)
Feb 11, 11-12 AM (0)
Feb 12, 12-1 AM (0)
Feb 12, 1-2 AM (0)
Feb 12, 2-3 AM (0)
Feb 12, 3-4 AM (0)
Feb 12, 4-5 AM (0)
Feb 12, 5-6 AM (0)
Feb 12, 6-7 AM (3)
Feb 12, 7-8 AM (2)
Feb 12, 8-9 AM (1)
Feb 12, 9-10 AM (0)
Feb 12, 10-11 AM (0)
Feb 12, 11-12 PM (0)
Feb 12, 12-1 PM (0)
Feb 12, 1-2 PM (0)
Feb 12, 2-3 PM (2)
Feb 12, 3-4 PM (3)
Feb 12, 4-5 PM (0)
Feb 12, 5-6 PM (0)
Feb 12, 6-7 PM (0)
Feb 12, 7-8 PM (12)
Feb 12, 8-9 PM (0)
Feb 12, 9-10 PM (0)
Feb 12, 10-11 PM (0)
Feb 12, 11-12 AM (0)
Feb 13, 12-1 AM (0)
Feb 13, 1-2 AM (1)
Feb 13, 2-3 AM (0)
Feb 13, 3-4 AM (0)
Feb 13, 4-5 AM (0)
Feb 13, 5-6 AM (0)
Feb 13, 6-7 AM (0)
Feb 13, 7-8 AM (0)
Feb 13, 8-9 AM (0)
Feb 13, 9-10 AM (0)
Feb 13, 10-11 AM (0)
Feb 13, 11-12 PM (3)
Feb 13, 12-1 PM (0)
Feb 13, 1-2 PM (6)
Feb 13, 2-3 PM (0)
Feb 13, 3-4 PM (2)
Feb 13, 4-5 PM (0)
Feb 13, 5-6 PM (0)
Feb 13, 6-7 PM (0)
Feb 13, 7-8 PM (0)
Feb 13, 8-9 PM (0)
Feb 13, 9-10 PM (0)
Feb 13, 10-11 PM (0)
Feb 13, 11-12 AM (0)
Feb 14, 12-1 AM (0)
Feb 14, 1-2 AM (0)
Feb 14, 2-3 AM (0)
Feb 14, 3-4 AM (0)
Feb 14, 4-5 AM (1)
Feb 14, 5-6 AM (0)
Feb 14, 6-7 AM (0)
Feb 14, 7-8 AM (0)
Feb 14, 8-9 AM (0)
Feb 14, 9-10 AM (0)
Feb 14, 10-11 AM (0)
Feb 14, 11-12 PM (0)
Feb 14, 12-1 PM (0)
Feb 14, 1-2 PM (0)
Feb 14, 2-3 PM (0)
Feb 14, 3-4 PM (0)
Feb 14, 4-5 PM (0)
Feb 14, 5-6 PM (0)
Feb 14, 6-7 PM (0)
Feb 14, 7-8 PM (0)
Feb 14, 8-9 PM (0)
Feb 14, 9-10 PM (0)
Feb 14, 10-11 PM (0)
72 commits this week Feb 07, 2026 - Feb 14, 2026
Make proto-devnet and immdb mutually exclusive profiles
- Add `profiles: ["devnet"]` to all proto-devnet services
- Proto-devnet now requires `--profile devnet` to start
- ImmDB remains `--profile immdb`
- Update README with new usage instructions
- Update IP addresses in README for immdb profile

Usage:
  docker compose --profile devnet up      # Proto-devnet
  docker compose --profile immdb up       # ImmDB mock

Signed-off-by: Chris Gianelloni <[email protected]>
Default to proto-devnet for Antithesis configuration
Add proto-devnet with 3 block-producing pools as the default setup:
- pool1, pool2, pool3 in mesh topology with real block production
- tx-generator for transaction load testing
- Shared genesis volume for synchronized startup
- Fast 0.1s slots for rapid iteration

Keep existing immdb-server setup under --profile immdb:
- upstream/node0/downstream services moved to immdb profile
- analysis-immdb container for immdb-specific metrics

Signed-off-by: Chris Gianelloni <[email protected]>
Fix IP conflicts and genesis file paths
- Separate immdb profile IPs to avoid conflicts with proto-devnet:
  - upstream: 172.28.0.10 -> 172.28.0.110
  - node0: 172.28.0.20 -> 172.28.0.120
  - downstream: 172.28.0.30 -> 172.28.0.130
- Fix genesis file paths: use /data directly instead of /data/genesis
  to match config.json relative path expectations
- Both profiles now work correctly together or separately

Signed-off-by: Chris Gianelloni <[email protected]>
Dockerfile: build cardano-node and tx-generator separately
- cardano-node from leios-prototype branch
- tx-generator from stable cardano-node 10.5.4 (leios-prototype has API incompatibility)
- cardano-cli from blink labs pre-built image

The tx-generator on leios-prototype fails to compile due to
ouroboros-network API drift, but has no Leios-specific changes.

Signed-off-by: Chris Gianelloni <[email protected]>
Fix analysis log parser and Leios timing
- Fix timestamp parsing to handle nanosecond precision (truncate to microseconds)
- Fix log format detection: use 'ns' field for namespace detection (cardano-node format)
- Add type safety checks for msg/data fields that may be strings
- Parse block hash and slot from 'data.newtip' field (format: "hash@slot")
- Detect BlockFetch.CompletedBlockFetch and immdb-server MsgBlock events
- Fix schedule cleanup: remove stale base-schedule.json and schedule.json on init
- Reduce default LEIOS_RELEASE_TIME from 128.9s to 10s for faster testing

Signed-off-by: Chris Gianelloni <[email protected]>
Antithesis docker-compose orchestration and CI
Antithesis docker-compose stack and CI workflow for testing:

- docker-compose.yaml: Full stack orchestration with init containers,
  main services (upstream, node0, downstream), analysis container,
  and optional observability stack. Uses 172.28.0.0/24 subnet with
  static IPs, healthchecks, and WAN emulation support via NET_ADMIN
- scripts/test-local.sh: Local testing script that builds images,
  starts stack, waits for health, runs for configurable duration,
  and checks analysis assertions
- .github/workflows/antithesis-leios.yaml: CI workflow to build and
  push images to GHCR, with optional local stack testing on PRs

Signed-off-by: Chris Gianelloni <[email protected]>
Antithesis analysis container
Python-based analysis container that monitors node logs and
reports assertions to Antithesis SDK:

- Dockerfile.analysis: Python 3.11 slim image with pandas, matplotlib,
  and antithesis SDK
- analyse.py: Log parsing and metrics computation module, extracts
  Praos and Leios block events, computes latency statistics
- entrypoint-analysis.py: Main loop that periodically analyzes logs
  and reports assertions (p95 latency thresholds, block propagation)

Signed-off-by: Chris Gianelloni <[email protected]>
Antithesis observability stack configuration
Observability infrastructure for local testing
(enabled via --profile observability):

- prometheus.yml: Metrics scraping configuration for cardano-nodes
- loki.yml: Log aggregation configuration with TSDB storage
- alloy.river: Grafana Alloy config to ship logs from /logs to Loki
- grafana/provisioning/datasources: Prometheus and Loki datasources
- grafana/provisioning/dashboards: Leios overview dashboard with
  log panels for each node and error/warning filtering

Signed-off-by: Chris Gianelloni <[email protected]>
Antithesis immdb-server container infrastructure
Dockerfile and scripts for building immdb-server container
for Antithesis testing:

- Dockerfile.immdb-server: Multi-stage build using Blink Labs base image,
  builds immdb-server and leiosdemo202510 from ouroboros-consensus
  leios-prototype branch
- init-upstream.sh: Generates leios.db and schedule.json using
  leiosdemo202510, extracts immutable chain data, patches genesis paths
- run-upstream.sh: Runtime script with optional WAN emulation

Signed-off-by: Chris Gianelloni <[email protected]>
Antithesis cardano-node container infrastructure
Dockerfile and scripts for building cardano-node-leios container
for Antithesis testing:

- Dockerfile.cardano-node: Multi-stage build using Blink Labs base image,
  builds cardano-node from leios-prototype branch with patched
  ouroboros-consensus reference for LeiosDemoDb support
- init-node0.sh: Initializes node0 data directory with leios.db,
  topology.json, and patched genesis paths
- init-downstream.sh: Initializes downstream node connecting to node0
- run-cardano-node.sh: Runtime script with optional WAN emulation
- setup-wan-emulation.sh: tc-based network shaping for local testing

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