Update huddle to only accept definite-length hashes
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 (33)
May 21, 11-12 PM (23)
May 21, 12-1 PM (60)
May 21, 1-2 PM (20)
May 21, 2-3 PM (0)
3,991 commits this week
May 14, 2026
-
May 21, 2026
Resolve TODO: move typeUsages to plutus-core (#7782)
Changelog
Also reduce a diff in the test code Signed-off-by: Sasha Bogicevic <[email protected]>
Use dynamic binary search to find largest fitting fanout chunk
Replace the hardcoded numToDistribute = totalUTxO - 1 in the partial fanout benchmarks with a binary search that finds the largest chunk actually fitting within both the tx size and execution budget, mirroring findFittingFanoutTx in the real node. The Remaining column in the output table now carries meaningful information instead of always showing 1. Also add ContestationDeadlineOutsideTimeHorizon to the PostTxError oneOf in api.yaml, which was defined in Chain.hs but missing from the schema, causing ServerOutputSpec to fail. Signed-off-by: Sasha Bogicevic <[email protected]>
Throw instead of erroring out
Signed-off-by: Sasha Bogicevic <[email protected]>
Fix tx-cost bench: drop fanoutChunkSize, widen FinalPartialFanout range
computeFinalPartialFanOutCost was capped at 7 (fanoutChunkSize), hiding the real tx-size limit for the terminal fanout step. Now it sweeps a wide range and searches for the actual maximum, using a single preceding output as minimal setup to reach FanoutProgress. computePartialFanOutMixedCost also dropped its fanoutChunkSize cap and now distributes all-but-one outputs, consistent with the nominal benchmark. The stale description mentioning fanoutChunkSize is corrected accordingly. Signed-off-by: Sasha Bogicevic <[email protected]>
Refactor
Signed-off-by: Sasha Bogicevic <[email protected]>
fix: wrong R2 public URLs
Signed-off-by: jeluard <[email protected]>
Consolidate fanout test constants and fix uncaught exception in postTx
fanoutChunkSize and fanoutOutputThreshold are now defined once in Test.Hydra.Tx.Fixture and imported wherever needed, removing the per-file duplicates. prepareTxToPost gains explicit FanoutTx/FinalPartialFanoutTx branches (error) so GHC's exhaustiveness checker catches any future unhandled constructor, instead of silently falling through a wildcard. The two deadline-slot conversions in mkChain.postTx now throw FailedToConstructFanoutTx (a PostTxError Tx) instead of userError, so the exception is caught by Node.hs's PostTxError handler rather than propagating uncaught and crashing the node.
Remove hardcoded fanout chunk/threshold constants; make fanout sizing fully dynamic
HeadLogic no longer uses fanoutChunkSize or fanoutOutputThreshold to decide which tx type to emit. For a fresh fanout it always emits FanoutTx; for an in-progress fanout it always emits FinalPartialFanoutTx. Handlers now owns the sizing decision: it tries the preferred tx first, then falls back to PartialFanoutTx with a decreasing chunk size (starting at N-1) until one fits within the execution budget, using a single shared findFittingFanoutTx helper. PartialFanoutTx is removed from PostChainTx — it is now an internal Handlers detail, never emitted by HeadLogic. fanoutChunkSize and fanoutOutputThreshold are removed from KZGTrustedSetup and all call sites.
fix: order the proposals
Signed-off-by: Eric Torreborre <[email protected]>
Deploying to gh-pages from @ IntersectMBO/plutus@59261563fd997a64f318cfb69305617f7892a7fa 🚀
WIP implementing PerasVotingCommittee opaque adapter
fix: update connection.validate.ts
Added changelog fragments
mux-test: mux close (IO)
network-mux: delta-q code formatting
framework-test-lib: added a label, formatting
network-mux: fail on mini-protocol startup if the state is `Failed`
Replace UTxO hash verification with BLS accumulator commitment
Remove utxoHash/alphaUTxOHash/omegaUTxOHash from ClosedDatum, all Close/Contest redeemers, and the snapshot signing tuple. The BLS accumulator already commits to the full UTxO set (utxo ∪ alpha ∪ omega), making the three separate SHA256 hashes redundant. Full fanout now verifies outputs via a KZG membership proof (same as partial fanout) rather than hash comparison. The Fanout redeemer gains proof and crsRef fields; the three output-count fields are dropped. Snapshot signing shrinks from a 7-tuple to a 4-tuple (headId, version, snapshotNumber, accumulatorHash). Signed-off-by: Sasha Bogicevic <[email protected]>
Make the haskell simulation buildable
net-rs: wire tcp-congestion-control param to TcpConnection
Previously use_tcp was hardcoded to false on every LinkConfiguration. Now RawParameters::tcp_congestion_control (default true) is propagated to all links during SimConfiguration::build, so users can disable the TCP congestion-window model via yaml with `tcp-congestion-control: false`. Update config.schema.json to reflect Rust support and add default: true. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
net-rs: implement TcpConnection (Chan.TCP port)
Port the Haskell `Chan/TCP.hs` channel abstraction to Rust. `TcpConnection<TMessage>` models one direction of a full-duplex TCP link using `forecast_tcp_msg_send` for timing. Key design decisions: - Backpressure via `send_cursor`: the effective send time is `max(now, send_cursor)`, so overlapping sends queue behind their predecessor — the same role the one-slot `TMVar` plays in Haskell. - Idle reset (RFC 6298 RTO): when the link has been quiet for longer than `max(1 s, RTT)` and all in-flight ACKs have returned, the congestion window is reset to the initial value. - Messages are queued with arrival time = `recv_trailing_edge` (the receiver needs the complete message, not just the leading edge). Integration: - `ConnectionKind<TP, TM>` enum wraps both `Connection` (bandwidth- sharing) and `TcpConnection` with a uniform interface so the rest of the network layer is unchanged. - `LinkConfiguration` and `EdgeConfig` gain a `use_tcp: bool` flag (default `false`); both the actor and sequential engines route through `ConnectionKind::from_config`. - `TcpState::all_acks_arrived` added to support the idle-reset check. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
net-rs: add TCP congestion-window model
Port the Haskell `ModelTCP` module to Rust as `sim-core/src/tcp.rs`.
The model forecasts send timing for a stream of messages over a single
TCP connection, accounting for serialisation delay, one-way propagation
latency, and the congestion window (slow-start through to steady state).
Key design points:
- `forecast_tcp_msg_send` is a pure function: takes props + state + now
+ message size, returns the overall forecast, per-fragment forecasts,
and the updated state. No IO, easy to test.
- ACKs are anchored to the *receive leading edge* ("strategic cheat"):
approximates per-segment ACK pipelining without modelling individual
segments, preventing the model from understating throughput.
- `merge_adjacent_fragments` collapses contiguous window-fill chunks so
the fragment count stays bounded across long sends.
- Six unit tests cover: small message timing, per-fragment invariants,
large-message fragmentation, fragment merging, and the trace helper.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
chore: upgrade crate versions
* mithril-aggregator from `0.8.52` to `0.8.53` * mithril-client-cli from `0.13.11` to `0.13.12` * mithril-client-wasm from `0.10.4` to `0.10.5` * mithril-client from `0.14.9` to `0.14.10` * mithril-signer from `1.0.2` to `1.0.3` * mithril-stm from `0.10.22` to `0.10.23` * mithril-end-to-end from `0.4.134` to `0.4.135` * [js] mithril-client-wasm from `0.10.4` to `0.10.5` * mithril-test-lab/mithril-devnet/VERSION from `0.4.33` to `0.4.34`