May 14, 12-1 PM (54)
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 (38)
May 14, 6-7 PM (12)
May 14, 7-8 PM (22)
May 14, 8-9 PM (37)
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 (10)
May 15, 7-8 AM (31)
May 15, 8-9 AM (23)
May 15, 9-10 AM (52)
May 15, 10-11 AM (71)
May 15, 11-12 PM (70)
May 15, 12-1 PM (73)
May 15, 1-2 PM (73)
May 15, 2-3 PM (66)
May 15, 3-4 PM (26)
May 15, 4-5 PM (13)
May 15, 5-6 PM (30)
May 15, 6-7 PM (29)
May 15, 7-8 PM (25)
May 15, 8-9 PM (8)
May 15, 9-10 PM (34)
May 15, 10-11 PM (34)
May 15, 11-12 AM (25)
May 16, 12-1 AM (2)
May 16, 1-2 AM (2)
May 16, 2-3 AM (3)
May 16, 3-4 AM (3)
May 16, 4-5 AM (0)
May 16, 5-6 AM (6)
May 16, 6-7 AM (2)
May 16, 7-8 AM (10)
May 16, 8-9 AM (1)
May 16, 9-10 AM (2)
May 16, 10-11 AM (1)
May 16, 11-12 PM (13)
May 16, 12-1 PM (11)
May 16, 1-2 PM (8)
May 16, 2-3 PM (15)
May 16, 3-4 PM (10)
May 16, 4-5 PM (2)
May 16, 5-6 PM (2)
May 16, 6-7 PM (2)
May 16, 7-8 PM (10)
May 16, 8-9 PM (6)
May 16, 9-10 PM (9)
May 16, 10-11 PM (29)
May 16, 11-12 AM (42)
May 17, 12-1 AM (9)
May 17, 1-2 AM (1)
May 17, 2-3 AM (0)
May 17, 3-4 AM (1)
May 17, 4-5 AM (0)
May 17, 5-6 AM (3)
May 17, 6-7 AM (2)
May 17, 7-8 AM (1)
May 17, 8-9 AM (1)
May 17, 9-10 AM (1)
May 17, 10-11 AM (6)
May 17, 11-12 PM (6)
May 17, 12-1 PM (4)
May 17, 1-2 PM (5)
May 17, 2-3 PM (9)
May 17, 3-4 PM (4)
May 17, 4-5 PM (8)
May 17, 5-6 PM (14)
May 17, 6-7 PM (10)
May 17, 7-8 PM (2)
May 17, 8-9 PM (4)
May 17, 9-10 PM (2)
May 17, 10-11 PM (20)
May 17, 11-12 AM (13)
May 18, 12-1 AM (10)
May 18, 1-2 AM (4)
May 18, 2-3 AM (5)
May 18, 3-4 AM (9)
May 18, 4-5 AM (14)
May 18, 5-6 AM (2)
May 18, 6-7 AM (37)
May 18, 7-8 AM (28)
May 18, 8-9 AM (35)
May 18, 9-10 AM (41)
May 18, 10-11 AM (43)
May 18, 11-12 PM (29)
May 18, 12-1 PM (136)
May 18, 1-2 PM (34)
May 18, 2-3 PM (89)
May 18, 3-4 PM (33)
May 18, 4-5 PM (45)
May 18, 5-6 PM (21)
May 18, 6-7 PM (16)
May 18, 7-8 PM (13)
May 18, 8-9 PM (23)
May 18, 9-10 PM (4)
May 18, 10-11 PM (25)
May 18, 11-12 AM (12)
May 19, 12-1 AM (7)
May 19, 1-2 AM (2)
May 19, 2-3 AM (9)
May 19, 3-4 AM (5)
May 19, 4-5 AM (10)
May 19, 5-6 AM (3)
May 19, 6-7 AM (53)
May 19, 7-8 AM (23)
May 19, 8-9 AM (46)
May 19, 9-10 AM (66)
May 19, 10-11 AM (30)
May 19, 11-12 PM (48)
May 19, 12-1 PM (81)
May 19, 1-2 PM (71)
May 19, 2-3 PM (41)
May 19, 3-4 PM (51)
May 19, 4-5 PM (15)
May 19, 5-6 PM (20)
May 19, 6-7 PM (18)
May 19, 7-8 PM (9)
May 19, 8-9 PM (21)
May 19, 9-10 PM (10)
May 19, 10-11 PM (28)
May 19, 11-12 AM (13)
May 20, 12-1 AM (21)
May 20, 1-2 AM (9)
May 20, 2-3 AM (4)
May 20, 3-4 AM (5)
May 20, 4-5 AM (9)
May 20, 5-6 AM (37)
May 20, 6-7 AM (47)
May 20, 7-8 AM (53)
May 20, 8-9 AM (50)
May 20, 9-10 AM (16)
May 20, 10-11 AM (41)
May 20, 11-12 PM (28)
May 20, 12-1 PM (50)
May 20, 1-2 PM (92)
May 20, 2-3 PM (20)
May 20, 3-4 PM (326)
May 20, 4-5 PM (23)
May 20, 5-6 PM (23)
May 20, 6-7 PM (17)
May 20, 7-8 PM (23)
May 20, 8-9 PM (15)
May 20, 9-10 PM (5)
May 20, 10-11 PM (34)
May 20, 11-12 AM (16)
May 21, 12-1 AM (14)
May 21, 1-2 AM (8)
May 21, 2-3 AM (10)
May 21, 3-4 AM (7)
May 21, 4-5 AM (4)
May 21, 5-6 AM (26)
May 21, 6-7 AM (14)
May 21, 7-8 AM (22)
May 21, 8-9 AM (31)
May 21, 9-10 AM (42)
May 21, 10-11 AM (32)
May 21, 11-12 PM (22)
May 21, 12-1 PM (12)
4,099 commits this week
May 14, 2026
-
May 21, 2026
api: PrettyShow instances for NodeToNodeVersion & NodeToClientVersion
keep-alive: export KeepAlive.Registry module from KeepAlive
Added changelog fragments
network-mux: delta-q code formatting
network-mux: fail on mini-protocol startup if the state is `Failed`
Use contra-tracer-0.2.1.0 from CHaP
LedgerPeerConsensusInterface: export PraosFetchMode
framework-test-lib: added a label, formatting
orphaned-isntances: added instances
Also added: * `JSONField NoExtraFlags` * `ToJSON NoExtraFlags` * `ToJSON NoExtraDebugState` instances to `ouroboros-network:orphaned-instances`.
ouroboros-network: NoExtraConfig, NoExtraAPI and NoExtraChurnArgs
Moved `NoExtraConfig`, `NoExtraAPI`, `NoExtraChurnArgs` from `dmq-node` to `ourouboros-network`.
net-core: stop dispatch-loop stall from disconnecting healthy peers
A 25-node smoke cluster at p=0.1 RB generation accumulated 62
"peer command channel full" disconnects over ~16 minutes, with
lagging nodes ~100s behind the leaders. Tip distribution fragmented
into 8 chains spanning 9 blocks even though all nodes shared
ancestry — not a partition, just receive-side starvation.
Root cause: each peer task has small sub-channels feeding the
client protocol sub-tasks (fetch=16, peer_share=4, tx_submit=16,
cs_reintersect=4, leios_fetch=16). The shared command-dispatch
loop uses `.send().await` on each, so when any sub-channel fills,
the dispatch loop blocks. While blocked, no commands move from
the per-peer `commands` channel (cap 4096) — which then fills under
high `ProvideTxs` traffic and trips the coordinator's "command
channel full" disconnect via try_send. Healthy peers were being
torn down for downstream slowness.
The `ProvideTxs { txs: Vec<…> }` path unspools one tx per
`.send().await`, so a single 30-tx batch already consumed nearly
twice tx_submit's capacity.
Fix:
- Bump sub-channel caps to match expected burst sizes: fetch and
leios_fetch to 256, tx_submit to 1024, the small signal channels
(peer_share, cs_reintersect) to 16. Applied symmetrically in
peer_task.rs and duplex_task.rs.
- Switch `tx_submit` from `.send().await` to `try_send` with a
drop-and-warn on Full. Tx propagation is best-effort gossip —
another peer will re-broadcast — so dropping is preferable to
stalling the dispatch loop and tearing down the connection.
Fetches (FetchBlocks, FetchLeios*) keep `.send().await` since
those are correctness-critical.
Verified live: rebuilt cluster at p=0.1 holds a single tip across
all 25 nodes with zero "command channel full" disconnects through
block 30 of the new run.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Add ToJSON/FromJSON instances for EraTxOut
* Add FromJSON (TxOut era) as EraTxOut superclass constraint * Add FromJSON t as Val t superclass constraint * Add ToJSON/FromJSON for Datum era * Add FromJSON for ShelleyTxOut, AlonzoTxOut, BabbageTxOut * Add FromJSON for MaryValue; fix FromJSON/FromJSONKey for AssetName to hex-decode * Add round-trip JSON property test for TxOut era
shared-consensus: cert targets parent RB's EB only, drop sticky-cert API
CIP-0164 Linear Leios specifies that the cert in an RB endorses the EB announced by the immediately preceding RB. sim-rs's `linear_leios.rs` implements it that way: `latest_rb_id()` → `ebs_by_rb.get(rb_id)` → quorum + pipeline-timing check → `Some(Endorsement)` or `None`. shared-consensus instead exposed `has_certified_eb()` / `certified_eb_slot()` — global queries across the elections map that returned whichever quorum-reached EB happened to be in CertEligible right now. Under high RB generation rates this produced ~100% endorsement: every RB found *some* older EB in the 10-slot CertEligible window and attached its cert, regardless of whether that EB belonged to the parent RB. Fix: - New `ChainTree::announced_eb_hash_by(rb_hash)`. Already stored on every `ChainNode`; just needed an accessor. - New `Elections::eb_certifiable_slot(eb_hash) -> Option<u64>` — returns the announced slot iff *that specific* election is at quorum and in CertEligible. Replaces both `has_certified_eb()` and `certified_eb_slot()`, which are gone. - New `LeiosState::eb_certifiable_slot(eb_hash)` delegate. - New `Consensus::cert_for_parent()` on the net-node facade: composes `praos.adopted_tip_announced_eb()` and `leios.eb_certifiable_slot()` so the producer can ask, "is the parent RB's EB certifiable?" in one call. - `main.rs` producer uses `cert_for_parent()` instead of the two retired methods. Verified live: at rb_generation_probability=0.25 (mean gap ≈4 slots, well below the 13-slot CertEligible floor), the rebuilt cluster produces zero certs — correct under this rule, parent's EB never matures in time. At p=0.1 (mean gap ≈10 slots), certs appear when the inter-RB gap exceeds 13 and not otherwise — observed live as gaps 1→2 and 3→4 (long) producing certs, gap 2→3 (short) not. Tests updated: `eb_certifiable_slot_targets_specific_hash` in net-node's leios facade exercises a per-hash lookup with two elections at different stages; the elections.rs unit test asserts the new accessor on a single hash and that unrelated hashes return None. Old `certified_eb_slot_returns_latest_quorum_election` deleted (it asserted the wrong protocol semantics). Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
deploy: 45b42dba1d62f6325913a584367a165a5413a176
Address review comments from @palas
- Restore datum field in friendly TxOut output (was inadvertently dropped in the Exp.TxOut migration); render via ledger datumTxOutL. - Drop redundant shelleyBasedEraConstraints wraps where pattern-matching on IncompleteTxBody already brings the constraint into scope. - Hoist liftIO out of the do-block in runTransactionSubmitCmd's success branch. - Use mapAndUnzipM in runCompatibleTransactionCmd for clarity. - Add blank lines between typed let-binding pairs in the min-fee calculator for readability. The IsShelleyBasedEra -> ShelleyBasedEra constraint simplification on IncompleteTxBody is intentionally not applied; removing the typeclass forces shelleyBasedEraConstraints wrapping at every call site, which is the convenience trade-off palas himself flagged.
Consensus team fortnightly update 2026-05-06 to 2026-05-19 (#787)
Add ToJSON/FromJSON instances for EraTxWits
* Add ToJSON, FromJSON and NFData as EraTxWits superclass constraints * Add ToJSON/FromJSON for WitVKey, BootstrapWitness * Add ToJSONKey/FromJSONKey for AccountId * Add ToJSON/FromJSON for Inclusive and Exclusive * Add FromJSON for TxIn; fix txInToText to use unTxIx * Add FromJSON for PoolCert * Add ToJSON/FromJSON for ShelleyTxWits era * Add FromJSON for AsIx, AlonzoPlutusPurpose AsIx, TxDats, Redeemers, AlonzoTxWits * Add FromJSON for ConwayDelegCert, ConwayGovCert, ConwayTxCert era, ConwayPlutusPurpose * Add FromJSON for GovActionId, Voter, Vote, VotingProcedure, ProposalProcedure, GovAction, GovPurposeId * Add ToJSON/FromJSON for AccountBalanceInterval, DijkstraScript * Add FromJSON for DijkstraDelegCert, DijkstraTxCert era * Add round-trip JSON property test for TxWits era
feat: enhance proxy transaction handling with blocked UTxO management
- Integrated functions to extract and filter blocked UTxOs from pending transactions, improving the robustness of proxy transaction processing. - Updated `MeshProxyContract` to utilize blocked UTxO references when selecting UTxOs for spending, ensuring only available UTxOs are used. - Enhanced `ProxyControl` component to manage blocked UTxOs and ensure proper handling of available UTxOs for transactions. - Refactored UTxO selection logic to improve clarity and maintainability in the proxy transaction workflow.
fix(stm): copilot suggestions
Merge pull request #629 from IntersectMBO/perturbing/leios-ietf-pop-fix
remove `mu2` from PoP, following IETF draft
Add herald changelog fragment for cardano-api 11.2.0.0 bump
fix(event): blocking delivery for ordering-critical ledger.chainsync
Signed-off-by: Chris Gianelloni <[email protected]>
Silence stale partial fanout errors in multi-node race