Jun 03, 4-5 AM (7)
Jun 03, 5-6 AM (12)
Jun 03, 6-7 AM (80)
Jun 03, 7-8 AM (16)
Jun 03, 8-9 AM (24)
Jun 03, 9-10 AM (22)
Jun 03, 10-11 AM (39)
Jun 03, 11-12 PM (76)
Jun 03, 12-1 PM (93)
Jun 03, 1-2 PM (28)
Jun 03, 2-3 PM (62)
Jun 03, 3-4 PM (26)
Jun 03, 4-5 PM (24)
Jun 03, 5-6 PM (23)
Jun 03, 6-7 PM (15)
Jun 03, 7-8 PM (17)
Jun 03, 8-9 PM (19)
Jun 03, 9-10 PM (9)
Jun 03, 10-11 PM (31)
Jun 03, 11-12 AM (14)
Jun 04, 12-1 AM (12)
Jun 04, 1-2 AM (4)
Jun 04, 2-3 AM (1)
Jun 04, 3-4 AM (5)
Jun 04, 4-5 AM (1)
Jun 04, 5-6 AM (0)
Jun 04, 6-7 AM (14)
Jun 04, 7-8 AM (10)
Jun 04, 8-9 AM (11)
Jun 04, 9-10 AM (19)
Jun 04, 10-11 AM (11)
Jun 04, 11-12 PM (14)
Jun 04, 12-1 PM (53)
Jun 04, 1-2 PM (39)
Jun 04, 2-3 PM (60)
Jun 04, 3-4 PM (12)
Jun 04, 4-5 PM (4)
Jun 04, 5-6 PM (7)
Jun 04, 6-7 PM (46)
Jun 04, 7-8 PM (27)
Jun 04, 8-9 PM (4)
Jun 04, 9-10 PM (2)
Jun 04, 10-11 PM (24)
Jun 04, 11-12 AM (7)
Jun 05, 12-1 AM (6)
Jun 05, 1-2 AM (8)
Jun 05, 2-3 AM (1)
Jun 05, 3-4 AM (1)
Jun 05, 4-5 AM (1)
Jun 05, 5-6 AM (5)
Jun 05, 6-7 AM (9)
Jun 05, 7-8 AM (12)
Jun 05, 8-9 AM (8)
Jun 05, 9-10 AM (11)
Jun 05, 10-11 AM (12)
Jun 05, 11-12 PM (8)
Jun 05, 12-1 PM (52)
Jun 05, 1-2 PM (61)
Jun 05, 2-3 PM (26)
Jun 05, 3-4 PM (24)
Jun 05, 4-5 PM (17)
Jun 05, 5-6 PM (7)
Jun 05, 6-7 PM (14)
Jun 05, 7-8 PM (12)
Jun 05, 8-9 PM (6)
Jun 05, 9-10 PM (2)
Jun 05, 10-11 PM (20)
Jun 05, 11-12 AM (9)
Jun 06, 12-1 AM (6)
Jun 06, 1-2 AM (0)
Jun 06, 2-3 AM (3)
Jun 06, 3-4 AM (4)
Jun 06, 4-5 AM (0)
Jun 06, 5-6 AM (24)
Jun 06, 6-7 AM (1)
Jun 06, 7-8 AM (2)
Jun 06, 8-9 AM (3)
Jun 06, 9-10 AM (0)
Jun 06, 10-11 AM (3)
Jun 06, 11-12 PM (6)
Jun 06, 12-1 PM (2)
Jun 06, 1-2 PM (2)
Jun 06, 2-3 PM (2)
Jun 06, 3-4 PM (18)
Jun 06, 4-5 PM (1)
Jun 06, 5-6 PM (6)
Jun 06, 6-7 PM (0)
Jun 06, 7-8 PM (6)
Jun 06, 8-9 PM (0)
Jun 06, 9-10 PM (1)
Jun 06, 10-11 PM (27)
Jun 06, 11-12 AM (9)
Jun 07, 12-1 AM (14)
Jun 07, 1-2 AM (2)
Jun 07, 2-3 AM (0)
Jun 07, 3-4 AM (0)
Jun 07, 4-5 AM (1)
Jun 07, 5-6 AM (1)
Jun 07, 6-7 AM (3)
Jun 07, 7-8 AM (0)
Jun 07, 8-9 AM (0)
Jun 07, 9-10 AM (1)
Jun 07, 10-11 AM (2)
Jun 07, 11-12 PM (2)
Jun 07, 12-1 PM (5)
Jun 07, 1-2 PM (35)
Jun 07, 2-3 PM (2)
Jun 07, 3-4 PM (4)
Jun 07, 4-5 PM (2)
Jun 07, 5-6 PM (4)
Jun 07, 6-7 PM (0)
Jun 07, 7-8 PM (0)
Jun 07, 8-9 PM (17)
Jun 07, 9-10 PM (1)
Jun 07, 10-11 PM (21)
Jun 07, 11-12 AM (9)
Jun 08, 12-1 AM (9)
Jun 08, 1-2 AM (5)
Jun 08, 2-3 AM (3)
Jun 08, 3-4 AM (4)
Jun 08, 4-5 AM (2)
Jun 08, 5-6 AM (9)
Jun 08, 6-7 AM (5)
Jun 08, 7-8 AM (25)
Jun 08, 8-9 AM (36)
Jun 08, 9-10 AM (40)
Jun 08, 10-11 AM (24)
Jun 08, 11-12 PM (22)
Jun 08, 12-1 PM (40)
Jun 08, 1-2 PM (48)
Jun 08, 2-3 PM (33)
Jun 08, 3-4 PM (27)
Jun 08, 4-5 PM (12)
Jun 08, 5-6 PM (23)
Jun 08, 6-7 PM (14)
Jun 08, 7-8 PM (3)
Jun 08, 8-9 PM (6)
Jun 08, 9-10 PM (19)
Jun 08, 10-11 PM (29)
Jun 08, 11-12 AM (8)
Jun 09, 12-1 AM (5)
Jun 09, 1-2 AM (3)
Jun 09, 2-3 AM (1)
Jun 09, 3-4 AM (3)
Jun 09, 4-5 AM (26)
Jun 09, 5-6 AM (5)
Jun 09, 6-7 AM (23)
Jun 09, 7-8 AM (50)
Jun 09, 8-9 AM (35)
Jun 09, 9-10 AM (45)
Jun 09, 10-11 AM (51)
Jun 09, 11-12 PM (44)
Jun 09, 12-1 PM (86)
Jun 09, 1-2 PM (67)
Jun 09, 2-3 PM (36)
Jun 09, 3-4 PM (38)
Jun 09, 4-5 PM (15)
Jun 09, 5-6 PM (17)
Jun 09, 6-7 PM (18)
Jun 09, 7-8 PM (19)
Jun 09, 8-9 PM (16)
Jun 09, 9-10 PM (16)
Jun 09, 10-11 PM (26)
Jun 09, 11-12 AM (10)
Jun 10, 12-1 AM (11)
Jun 10, 1-2 AM (16)
Jun 10, 2-3 AM (11)
Jun 10, 3-4 AM (7)
Jun 10, 4-5 AM (2)
2,750 commits this week Jun 03, 2026 - Jun 10, 2026
fix: detect in-memory GPG signing credentials for bip32-ed25519 publishing
The signing credential check only looked for signing.keyId property and
GPG_KEY_ID env var, missing the in-memory signing properties used by CI
(signingInMemoryKey / ORG_GRADLE_PROJECT_signingInMemoryKey). This caused
unsigned artifacts to be uploaded to Maven Central, which silently rejects
them during validation.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
Signed-off-by: Yurii Shynbuiev <[email protected]>
feat(leios): enforce pipeline timing windows and unify the vote window
The pipeline framework tracked stages but most of PipelineTiming drove no
behavior: stageFor ran only on the certified path, handleEbQuorum honored
any certificate regardless of timing, and the pipeline's VoteWindowSlots
had no relationship to VoteManager's vote-acceptance window.

- Enforce the certification deadline: a certificate arriving at or past
  CertifyByDeadlineSlots is rejected (counted under certs_rejected_total),
  leaving the EB tracked but never certified, so it cannot become eligible.
- Surface the uncertified stages: updateGaugesLocked now derives a per-EB
  stage gauge via stageFor with each EB's real certified flag (exercising
  the uncertified branch in production), plus a read-only StageOf seam.
- Unify the vote window: VoteManager's vote-acceptance past bound is now
  the pipeline's VoteWindowSlots, passed through VoteManagerConfig and
  sourced from the same leiosPipelineTiming() the pipeline uses, so the two
  components admit votes over the same window and cannot drift. Replaces the
  standalone slotWindowPastTolerance.
- Remove the inert StageLengthSlots field.

ARCHITECTURE.md updated; DATABASE.md unaffected (in-memory, metrics only).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>
fix(blockfrost): compute network locked supply and align network eras… (#2510)
* fix(blockfrost): compute network locked supply and align network eras schema

Signed-off-by: cryptodj413 <[email protected]>

* fix(blockfrost): address review

Signed-off-by: cryptodj413 <[email protected]>

* fix(blockfrost): populate PaymentScript in import path

Signed-off-by: cryptodj413 <[email protected]>

* fix(blockfrost): address test issue

Signed-off-by: cryptodj413 <[email protected]>

---------

Signed-off-by: cryptodj413 <[email protected]>
fix(leios): count EB equivocation per slot and couple observe window to vote tolerance
Two follow-ups from review of the pipeline timing change:

- markEquivocationLocked incremented ebEquivocationTotal (and logged)
  once per EB added beyond the first, so a slot with N distinct EBs
  counted N-1 times despite the metric documenting "number of slots with
  equivocating endorser blocks". Track a per-instance equivocated flag so
  the counter and warn log fire exactly once per equivocating slot; every
  EB is still flagged for inclusion exclusion. Adds a regression test.

- Define observeFutureToleranceSlots as the vote manager's
  slotWindowFutureTolerance instead of a duplicated literal 60, so the two
  Leios components admit endorser blocks over the same future window and
  cannot drift apart.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>
Wire TraceLeiosDb through to new tracing
Adapts cardano-node to the updated ouroboros-consensus
newLeiosDBSQLite signature (Tracer IO TraceLeiosDb -> FilePath -> ...)
introduced in IntersectMBO/ouroboros-consensus#2062, and surfaces the
SQLite UNIQUE/PRIMARY KEY collision events it emits.

* New tracing: adds a leiosDbTracer field on Cardano.Node.Tracing.Tracers,
  wires it via mkCardanoTracer at namespace Consensus.LeiosDb, and provides
  LogFormatting / MetaTrace instances (Warning severity).
* Legacy tracing: leiosDbTracer = nullTracer, matching how the other
  Leios consensus tracers are currently left.
* Run.hs: passes (leiosDbTracer tracers) to newLeiosDBSQLite.

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