May 08, 7-8 AM (53)
May 08, 8-9 AM (34)
May 08, 9-10 AM (12)
May 08, 10-11 AM (32)
May 08, 11-12 PM (40)
May 08, 12-1 PM (30)
May 08, 1-2 PM (46)
May 08, 2-3 PM (46)
May 08, 3-4 PM (26)
May 08, 4-5 PM (23)
May 08, 5-6 PM (29)
May 08, 6-7 PM (15)
May 08, 7-8 PM (10)
May 08, 8-9 PM (15)
May 08, 9-10 PM (16)
May 08, 10-11 PM (23)
May 08, 11-12 AM (12)
May 09, 12-1 AM (4)
May 09, 1-2 AM (1)
May 09, 2-3 AM (0)
May 09, 3-4 AM (6)
May 09, 4-5 AM (6)
May 09, 5-6 AM (2)
May 09, 6-7 AM (6)
May 09, 7-8 AM (4)
May 09, 8-9 AM (4)
May 09, 9-10 AM (3)
May 09, 10-11 AM (9)
May 09, 11-12 PM (6)
May 09, 12-1 PM (21)
May 09, 1-2 PM (24)
May 09, 2-3 PM (12)
May 09, 3-4 PM (14)
May 09, 4-5 PM (7)
May 09, 5-6 PM (0)
May 09, 6-7 PM (2)
May 09, 7-8 PM (3)
May 09, 8-9 PM (1)
May 09, 9-10 PM (8)
May 09, 10-11 PM (33)
May 09, 11-12 AM (16)
May 10, 12-1 AM (15)
May 10, 1-2 AM (0)
May 10, 2-3 AM (0)
May 10, 3-4 AM (5)
May 10, 4-5 AM (0)
May 10, 5-6 AM (4)
May 10, 6-7 AM (0)
May 10, 7-8 AM (17)
May 10, 8-9 AM (8)
May 10, 9-10 AM (1)
May 10, 10-11 AM (26)
May 10, 11-12 PM (4)
May 10, 12-1 PM (49)
May 10, 1-2 PM (18)
May 10, 2-3 PM (8)
May 10, 3-4 PM (15)
May 10, 4-5 PM (26)
May 10, 5-6 PM (11)
May 10, 6-7 PM (7)
May 10, 7-8 PM (23)
May 10, 8-9 PM (12)
May 10, 9-10 PM (10)
May 10, 10-11 PM (29)
May 10, 11-12 AM (19)
May 11, 12-1 AM (12)
May 11, 1-2 AM (5)
May 11, 2-3 AM (5)
May 11, 3-4 AM (7)
May 11, 4-5 AM (3)
May 11, 5-6 AM (12)
May 11, 6-7 AM (28)
May 11, 7-8 AM (60)
May 11, 8-9 AM (34)
May 11, 9-10 AM (77)
May 11, 10-11 AM (58)
May 11, 11-12 PM (78)
May 11, 12-1 PM (84)
May 11, 1-2 PM (102)
May 11, 2-3 PM (41)
May 11, 3-4 PM (27)
May 11, 4-5 PM (24)
May 11, 5-6 PM (26)
May 11, 6-7 PM (42)
May 11, 7-8 PM (53)
May 11, 8-9 PM (57)
May 11, 9-10 PM (22)
May 11, 10-11 PM (49)
May 11, 11-12 AM (19)
May 12, 12-1 AM (2)
May 12, 1-2 AM (2)
May 12, 2-3 AM (3)
May 12, 3-4 AM (4)
May 12, 4-5 AM (8)
May 12, 5-6 AM (11)
May 12, 6-7 AM (17)
May 12, 7-8 AM (25)
May 12, 8-9 AM (26)
May 12, 9-10 AM (35)
May 12, 10-11 AM (82)
May 12, 11-12 PM (98)
May 12, 12-1 PM (38)
May 12, 1-2 PM (69)
May 12, 2-3 PM (54)
May 12, 3-4 PM (41)
May 12, 4-5 PM (57)
May 12, 5-6 PM (40)
May 12, 6-7 PM (24)
May 12, 7-8 PM (24)
May 12, 8-9 PM (18)
May 12, 9-10 PM (8)
May 12, 10-11 PM (40)
May 12, 11-12 AM (19)
May 13, 12-1 AM (10)
May 13, 1-2 AM (2)
May 13, 2-3 AM (4)
May 13, 3-4 AM (2)
May 13, 4-5 AM (5)
May 13, 5-6 AM (29)
May 13, 6-7 AM (52)
May 13, 7-8 AM (43)
May 13, 8-9 AM (44)
May 13, 9-10 AM (21)
May 13, 10-11 AM (22)
May 13, 11-12 PM (47)
May 13, 12-1 PM (25)
May 13, 1-2 PM (44)
May 13, 2-3 PM (45)
May 13, 3-4 PM (42)
May 13, 4-5 PM (33)
May 13, 5-6 PM (30)
May 13, 6-7 PM (51)
May 13, 7-8 PM (31)
May 13, 8-9 PM (9)
May 13, 9-10 PM (24)
May 13, 10-11 PM (29)
May 13, 11-12 AM (11)
May 14, 12-1 AM (18)
May 14, 1-2 AM (3)
May 14, 2-3 AM (4)
May 14, 3-4 AM (21)
May 14, 4-5 AM (11)
May 14, 5-6 AM (18)
May 14, 6-7 AM (18)
May 14, 7-8 AM (47)
May 14, 8-9 AM (52)
May 14, 9-10 AM (31)
May 14, 10-11 AM (20)
May 14, 11-12 PM (114)
May 14, 12-1 PM (53)
May 14, 1-2 PM (151)
May 14, 2-3 PM (32)
May 14, 3-4 PM (17)
May 14, 4-5 PM (14)
May 14, 5-6 PM (37)
May 14, 6-7 PM (12)
May 14, 7-8 PM (22)
May 14, 8-9 PM (36)
May 14, 9-10 PM (35)
May 14, 10-11 PM (27)
May 14, 11-12 AM (14)
May 15, 12-1 AM (18)
May 15, 1-2 AM (15)
May 15, 2-3 AM (5)
May 15, 3-4 AM (3)
May 15, 4-5 AM (13)
May 15, 5-6 AM (14)
May 15, 6-7 AM (7)
May 15, 7-8 AM (6)
4,138 commits this week May 08, 2026 - May 15, 2026
fix: get the tx_id from the transaction body (#823)
* fix: get the tx_id from the transaction body 

Signed-off-by: Eric Torreborre <[email protected]>

* refactor: rename TxId to TransactionId

and drop TransactionId as an alias to the hash

Signed-off-by: Eric Torreborre <[email protected]>

feat: just print the first 12 chars for a transaction id

Signed-off-by: Eric Torreborre <[email protected]>

---------

Signed-off-by: Eric Torreborre <[email protected]>
Overhaul SPO and operator docs — restructure, rewrite, and consolidate (#1780)
* Overhaul SPO and operator docs — restructure, rewrite, and consolidate

- Move all cardano-cli reference docs from get-started/infrastructure/cardano-cli/ to learn/cardano-cli/ with redirects
- Add secure transaction workflow page covering build/sign/submit pattern, mnemonic key derivation (cardano-signer, cardano-addresses), CIP-8 signing, CIP-100 governance metadata, and Calidus registration
- Rewrite security hardening page: nftables (replacing UFW), WireGuard for cross-datacenter relay/BP, fail2ban, systemd unit hardening
- Add SPO governance page: voting on hard forks and no-confidence actions, alwaysAbstain DRep delegation via reward account stake key, Calidus key identity
- Consolidate air-gap docs (cardano-airgap ISO + manual Ubuntu) into single page under learn/educational-resources/
- Move frankenwallet to learn/educational-resources/; add security tag to builder-tools
- Add monitoring section with overview (gLiveView) and Prometheus/Grafana pages moved out of relay-configuration/
- Add Docker security warning and nix build command to installing-cardano-node
- Fix broken redirects for deleted grafana-dashboard-tutorial and monitoring-gLiveView pages
- Fix relative links in monitoring-prometheus-grafana and stake-address-delegation

* Fix redirect targets to match actual doc id slugs

Redirect to paths must match the URL slug derived from frontmatter id,
not the filename. Also point deleted dynamic-block-forging and
rts-options-node redirects at running-cardano.

* Overhaul SPO and operator docs — restructure, rewrite, and consolidate

- Move all cardano-cli reference docs from get-started/infrastructure/cardano-cli/ to learn/cardano-cli/ with redirects
- Add secure transaction workflow page covering build/sign/submit pattern, mnemonic key derivation (cardano-signer, cardano-addresses), CIP-8 signing, CIP-100 governance metadata, and Calidus registration
- Rewrite security hardening page: nftables (replacing UFW), WireGuard for cross-datacenter relay/BP, fail2ban, systemd unit hardening
- Add SPO governance page: voting on hard forks and no-confidence actions, alwaysAbstain DRep delegation via reward account stake key, Calidus key identity
- Consolidate air-gap docs (cardano-airgap ISO + manual Ubuntu) into single page under learn/educational-resources/
- Move frankenwallet to learn/educational-resources/; add security tag to builder-tools
- Add monitoring section with overview (gLiveView) and Prometheus/Grafana pages moved out of relay-configuration/
- Add Docker security warning and nix build command to installing-cardano-node
- Fix broken redirects for deleted grafana-dashboard-tutorial and monitoring-gLiveView pages
- Fix relative links in monitoring-prometheus-grafana and stake-address-delegation

* additions

- replace all "current" mentions by a reference to a date and node version
- add openBlockPerf to monitoring section
- minor text additions

* more minor additions

* back out navbar changes

* update docs per TSC recommendations

---------

Co-authored-by: gufmar <[email protected]>
Co-authored-by: Tommy 🐙 <[email protected]>
Reset leios-prototype to upstream main (chunked recreation follows)
Snapshot-merge: parents are (old leios-prototype tip, origin/main tip)
but tree equals origin/main byte-for-byte. The leios-prototype branch
ref moves forward without losing the historic prototype commits — they
remain reachable as ancestors via the merge's first parent.

The chunks of the recreation land as ordinary commits on top of this
one.
Leios C4: minimal forging — default Praos header EB-announcement to SNothing
Minimal-shape C4 per resolved design: the forge loop is *unchanged*.
No new arg to ForgeBlockArgs, no LeiosDb threading, no signature
change to forgeBlock. The new fields just need a default value at the
header/body construction sites:

- Praos.mkHeader::mkBhBodyBytes (the per-forge HeaderBody site):
  hbLeiosEbAnnouncement = SNothing. Dijkstra-era forging that wants
  to populate it will do so out-of-band by post-processing the
  forged block (TODO; not part of this chunk).
- Test generators that construct HeaderBody directly: same default.
- DijkstraBody side needs nothing here — mkBasicBlockBody already
  initialises dbbrLeiosCert = SNothing via the L1 changes.

Adds cardano-strict-containers to the unstable-protocol-testlib
build-depends so the generator can use SNothing.

Storage of forged EBs themselves lives in the concrete Shelley
implementation (planned, not in this chunk) — keeping the era-abstract
forge loop free of Leios.

Refs: #1832, #1888 (originals threaded LeiosDb through forging;
that shape is intentionally not adopted here).

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios C6: re-add cardano-blueprint submodule at prototype branch tip
The original leios-prototype kept Leios CDDLs in the cardano-blueprint
submodule rather than under ouroboros-consensus-cardano/cddl/. The
snapshot-merge to upstream main dropped the submodule pointer (main
has CDDLs in-repo). This commit re-adds the submodule pointer at
ebabbf18 (the prototype's pinned tip; current contents reachable via
git's `submodule.cardano-blueprint.url` config).

Upstream main's in-repo CDDLs at ouroboros-consensus-cardano/cddl/
are left intact for now; Leios CDDLs (LeiosNotify, LeiosFetch) live
in the submodule per the resolved design.

Voting wiring is mostly already in place from C1 (LeiosVoteState type
and LeiosNotify mini-protocol carry the vote payloads). Further
voting integration into the consensus voting flow is bundled into
later chunks where the voter logic actually runs.

Refs: #1963 (Leios: Prototype voting); leiosdemo202510 direct-commit
series for the CDDL drafts (reachable via the snapshot-merge ancestry).

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios C2: EB-announcement on Praos HeaderBody
Adds one optional field to the shared Praos HeaderBody for early-
diffusion of EB references:

    hbLeiosEbAnnouncement :: !(StrictMaybe EbAnnouncement)

Only Dijkstra-era forging populates it (SNothing on earlier eras),
per the governing "Leios is Dijkstra-only" decision. The cert itself
lives on DijkstraBody (Maybe LeiosCert from L1), so this header field
is announcement-only — no certify flag.

EncCBOR / DecCBOR each gain one trailing `!> To` / `<! From`. Adds
`cardano-strict-containers` to the protocol sublibrary's build-depends.
The EbAnnouncement type is imported from `LeiosDemoTypes` (the
protocol lib already depends on the ouroboros-consensus lib).

Refs: #1978 (Migrate EB announcement to Praos header), #1921 (EB
inclusion). The original prototype walked back a separate "certify"
flag in its bladyjoker/leios-prototype-backwards-compat-fix series;
this version skips that step since the cert lives on the body.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios C5: era-abstract cumulative tx-bytes on ShelleyLedgerState
Adds `shelleyCumulativeTxBytes :: !Word64` to `ShelleyLedgerState` (and
its ticked variant `tickedShelleyCumulativeTxBytes`), parallel to the
existing `shelleyLedgerLatestPerasCertRound`. Era-abstract — applies
to every Shelley-onwards ledger state. This is orthogonal to Leios
itself; Leios EB-sizing on Dijkstra is one user, but the accumulator
is generic.

Update protocol:
- Tick: preserve through, `tickedShelleyCumulativeTxBytes = shelleyCumulativeTxBytes`.
- Apply: `shelleyCumulativeTxBytes = tickedShelleyCumulativeTxBytes stBefore
    + sum (fromIntegral . (^. sizeTxF) <$> txs of block body)`, monotonically
    increasing across all blocks.
- Initial state and Byron→Shelley translation: 0.
- Era translation (Shelley→Allegra→...→Dijkstra): preserved.
- CBOR codec: encodeListLen 4→5, append `toCBOR shelleyCumulativeTxBytes`.
- Many record-construct/destructure sites (HasLedgerTables / CanStowLedgerTables /
  HFC era translations / SupportsProtocol forecast) updated in lock-step.

Tx-byte extraction uses the era-generic `Core.bbody (shelleyBlockRaw blk)
^. Core.txSeqBlockBodyL` + `^. Core.sizeTxF` — works uniformly across
all Shelley-onwards eras including Dijkstra's `Maybe LeiosCert` body.

Refs: #1988 (Add cumulative tx bytes to ledger state); the original
prototype put it on a `ShelleyLedgerLeiosState` extension type — this
version lifts it onto the existing `ShelleyLedgerState` directly since
the field is era-abstract and not Leios-specific.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios C7 (part 2 checkpoint): testlib record-construct fixes + Leios test wiring
Carries C5's shelleyCumulativeTxBytes addition through to the
remaining record-construct sites that build the cardano-test target:

- ShelleyLedgerState construction in Test/Consensus/Shelley/Examples.hs
  (two example ledger states for the Praos vs TPraos protocol).
- The `Arbitrary (LedgerState (ShelleyBlock proto era) EmptyMK/ValuesMK)`
  generators in Test/Consensus/Shelley/Generators.hs.

Wires `Test.ThreadNet.Leios` into the cardano-test driver:
- Cabal: add to `other-modules` of `test-suite cardano-test`.
- Main.hs: import + `tests` reference.
- Add `bytestring`, `vector`, `directory`, `temporary` to
  `test-suite consensus-test` build-depends (needed by the new
  Test.LeiosDemo* test modules from C1).

The Leios test file itself is a placeholder for now; the full
threadnet adaptation is the next sub-chunk, which needs to bring
back the prototype's TraceThreadNet/TraceThreadNetNode/LeiosState
additions to unstable-diffusion-testlib first.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios C7 (part 1): restore leios-demo scripts
Brings the leios-demo scripts back from pre-rebase-orig — pure
shell/Python/notebook content, no Haskell compile path:

- scripts/leios-demo/leios-november-demo.sh — end-to-end smoke run
- scripts/leios-demo/log_parser.py — analysis of node logs
- scripts/leios-demo/demo_analysis.ipynb, jupyter_utils.py — Jupyter
  notebook analysis flow
- scripts/leios-demo/build.nix, .envrc — local nix environment
- scripts/leios-demo/BUFFERBLOAT.md — TBF/netem tuning notes
- scripts/leios-demo/data/*.log* — recorded reference runs

The Haskell-side Test.ThreadNet.Leios bring-up (the other part of
chunk C7) is a separate commit; that file references many testlib
APIs that have evolved upstream and will need adaptation.

Refs: #1718 (NixOS setup), #1724 (Nixify demo), #1883, #1906
(ThreadNet); leiosdemo202510 / leiosdemo202511 direct-commit series.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios C7 part 2: stub the threadnet test (full adapt is a redesign)
Initial attempt at the full adapt revealed that the original 670-line
@Test.ThreadNet.Leios@ test is tightly coupled to design choices that
were retired in the new prototype:

- @blockTxSizeSum@ pattern-matches on @SL.BodyInline@ and
  @SL.BodyCertificate@ — types replaced by the single
  @Maybe LeiosCert@ on @DijkstraBlockBody@ (L1 decision).
- It threads @resolveLeiosBlock@ before block application, relying
  on @ResolveLeiosBlock@ — the user's memory note flags this as
  "a hint, not a model"; the new design has no pre-application
  resolution step.
- It depends on @TraceThreadNet@ / @TraceThreadNetNode@ / @LeiosState@
  in @Test.ThreadNet.Network@ plus runtime tracer plumbing through
  the threadnet driver, mempool, and Leios kernel that were
  prototype-only additions.

Adapting the test isn't a compile-fix exercise — it's writing a new
test against the post-rebase design surface (header
@hbLeiosEbAnnouncement@ + body @Maybe LeiosCert@ + existing
@AddedToCurrentChain@ / @SwitchedToAFork@ trace events). That work
belongs in a follow-up chunk on its own. The stub keeps the
@cardano-test@ target compiling; the original is reachable through
@pre-rebase-orig@.

Refs: #1883 (Leios ThreadNet), #1906 (Leios: ThreadNet test suite),
#1971 (Test EB inclusion).

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Reset leios-prototype to upstream main (chunked recreation follows)
Snapshot-merge: parents are (old leios-prototype tip, origin/main tip)
but tree equals origin/main byte-for-byte. The leios-prototype branch
ref moves forward without losing the historic prototype commits — they
remain reachable as ancestors via the merge's first parent.

The chunks of the recreation land as ordinary commits on top of this
one.
Leios C1: foundations + mini-protocols in consensus
Brings the Leios prototype's flat-named foundation modules onto current
upstream main as additive new files (no other behavior changed):

- LeiosDemo{Types,Db,Logic,Exception}
- LeiosDemoDb.{Common,InMemory,SQLite}
- LeiosDemoOnlyTest{Fetch,Notify} — mini-protocol types/codecs/clients/
  servers; the Leios mini-protocols live in consensus, not in
  ouroboros-network (resolved design decision for easier iteration)
- LeiosVoteState

Plus the consensus-test driver wiring:
- Test.LeiosDemo{Db,Types}, Test.LeiosVoteState added to the
  ouroboros-consensus-test other-modules and Main.hs tests tree.

Adaptation to upstream main:
- Tx era → Tx TopTx era (cardano-ledger added the TxLevel kind).
- byteLimitsLeios{Fetch,Notify} now take the bytes->Word dataSize
  argument (typed-protocols' ProtocolSizeLimits API gained that field).

build-depends added to the ouroboros-consensus library to match the
foundation modules' imports: network-mux, typed-protocols:cborg,
direct-sqlite, directory, dlist, pretty-simple. Only the Dijkstra era
is Leios-enabled; everything else in this chunk is purely additive.

Refs: #1832 (initial drop), #1837 (in-memory DB), #1979 (per-thread
connections), and the leiosdemo202510 direct-commit series — all
reachable as ancestors of the snapshot-merge.

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Reset leios-prototype to upstream master (chunked recreation follows)
Snapshot-merge: parents are (old leios-prototype tip, origin/master tip)
but tree equals origin/master byte-for-byte. The leios-prototype branch
ref moves forward without losing the historic prototype commits — they
remain reachable as ancestors via the merge's first parent.

The chunks of the recreation land as ordinary commits on top of this
one.