add Haskell Benchmark (customSmallerIsBetter) benchmark result for 3e53b2d925add42009467eec04c0f3562bbd3a71
May 27, 11-12 PM (30)
May 27, 12-1 PM (50)
May 27, 1-2 PM (39)
May 27, 2-3 PM (53)
May 27, 3-4 PM (37)
May 27, 4-5 PM (11)
May 27, 5-6 PM (18)
May 27, 6-7 PM (21)
May 27, 7-8 PM (25)
May 27, 8-9 PM (19)
May 27, 9-10 PM (15)
May 27, 10-11 PM (29)
May 27, 11-12 AM (27)
May 28, 12-1 AM (9)
May 28, 1-2 AM (3)
May 28, 2-3 AM (5)
May 28, 3-4 AM (2)
May 28, 4-5 AM (9)
May 28, 5-6 AM (34)
May 28, 6-7 AM (31)
May 28, 7-8 AM (84)
May 28, 8-9 AM (33)
May 28, 9-10 AM (54)
May 28, 10-11 AM (50)
May 28, 11-12 PM (21)
May 28, 12-1 PM (47)
May 28, 1-2 PM (50)
May 28, 2-3 PM (23)
May 28, 3-4 PM (43)
May 28, 4-5 PM (86)
May 28, 5-6 PM (13)
May 28, 6-7 PM (31)
May 28, 7-8 PM (43)
May 28, 8-9 PM (34)
May 28, 9-10 PM (17)
May 28, 10-11 PM (36)
May 28, 11-12 AM (32)
May 29, 12-1 AM (12)
May 29, 1-2 AM (13)
May 29, 2-3 AM (4)
May 29, 3-4 AM (3)
May 29, 4-5 AM (0)
May 29, 5-6 AM (2)
May 29, 6-7 AM (5)
May 29, 7-8 AM (16)
May 29, 8-9 AM (37)
May 29, 9-10 AM (34)
May 29, 10-11 AM (69)
May 29, 11-12 PM (25)
May 29, 12-1 PM (44)
May 29, 1-2 PM (66)
May 29, 2-3 PM (61)
May 29, 3-4 PM (26)
May 29, 4-5 PM (26)
May 29, 5-6 PM (83)
May 29, 6-7 PM (11)
May 29, 7-8 PM (19)
May 29, 8-9 PM (15)
May 29, 9-10 PM (9)
May 29, 10-11 PM (27)
May 29, 11-12 AM (7)
May 30, 12-1 AM (9)
May 30, 1-2 AM (2)
May 30, 2-3 AM (1)
May 30, 3-4 AM (7)
May 30, 4-5 AM (2)
May 30, 5-6 AM (11)
May 30, 6-7 AM (0)
May 30, 7-8 AM (2)
May 30, 8-9 AM (11)
May 30, 9-10 AM (13)
May 30, 10-11 AM (10)
May 30, 11-12 PM (5)
May 30, 12-1 PM (8)
May 30, 1-2 PM (5)
May 30, 2-3 PM (18)
May 30, 3-4 PM (5)
May 30, 4-5 PM (1)
May 30, 5-6 PM (9)
May 30, 6-7 PM (9)
May 30, 7-8 PM (1)
May 30, 8-9 PM (5)
May 30, 9-10 PM (4)
May 30, 10-11 PM (27)
May 30, 11-12 AM (12)
May 31, 12-1 AM (17)
May 31, 1-2 AM (0)
May 31, 2-3 AM (1)
May 31, 3-4 AM (1)
May 31, 4-5 AM (0)
May 31, 5-6 AM (0)
May 31, 6-7 AM (7)
May 31, 7-8 AM (4)
May 31, 8-9 AM (10)
May 31, 9-10 AM (3)
May 31, 10-11 AM (4)
May 31, 11-12 PM (4)
May 31, 12-1 PM (1)
May 31, 1-2 PM (2)
May 31, 2-3 PM (24)
May 31, 3-4 PM (16)
May 31, 4-5 PM (2)
May 31, 5-6 PM (1)
May 31, 6-7 PM (2)
May 31, 7-8 PM (2)
May 31, 8-9 PM (2)
May 31, 9-10 PM (7)
May 31, 10-11 PM (25)
May 31, 11-12 AM (11)
Jun 01, 12-1 AM (14)
Jun 01, 1-2 AM (7)
Jun 01, 2-3 AM (3)
Jun 01, 3-4 AM (10)
Jun 01, 4-5 AM (13)
Jun 01, 5-6 AM (16)
Jun 01, 6-7 AM (10)
Jun 01, 7-8 AM (14)
Jun 01, 8-9 AM (46)
Jun 01, 9-10 AM (50)
Jun 01, 10-11 AM (19)
Jun 01, 11-12 PM (27)
Jun 01, 12-1 PM (49)
Jun 01, 1-2 PM (40)
Jun 01, 2-3 PM (44)
Jun 01, 3-4 PM (34)
Jun 01, 4-5 PM (54)
Jun 01, 5-6 PM (5)
Jun 01, 6-7 PM (32)
Jun 01, 7-8 PM (37)
Jun 01, 8-9 PM (9)
Jun 01, 9-10 PM (12)
Jun 01, 10-11 PM (30)
Jun 01, 11-12 AM (22)
Jun 02, 12-1 AM (13)
Jun 02, 1-2 AM (8)
Jun 02, 2-3 AM (5)
Jun 02, 3-4 AM (14)
Jun 02, 4-5 AM (10)
Jun 02, 5-6 AM (43)
Jun 02, 6-7 AM (32)
Jun 02, 7-8 AM (58)
Jun 02, 8-9 AM (65)
Jun 02, 9-10 AM (28)
Jun 02, 10-11 AM (19)
Jun 02, 11-12 PM (15)
Jun 02, 12-1 PM (47)
Jun 02, 1-2 PM (66)
Jun 02, 2-3 PM (97)
Jun 02, 3-4 PM (23)
Jun 02, 4-5 PM (15)
Jun 02, 5-6 PM (27)
Jun 02, 6-7 PM (29)
Jun 02, 7-8 PM (17)
Jun 02, 8-9 PM (9)
Jun 02, 9-10 PM (19)
Jun 02, 10-11 PM (33)
Jun 02, 11-12 AM (22)
Jun 03, 12-1 AM (13)
Jun 03, 1-2 AM (31)
Jun 03, 2-3 AM (16)
Jun 03, 3-4 AM (0)
Jun 03, 4-5 AM (7)
Jun 03, 5-6 AM (12)
Jun 03, 6-7 AM (79)
Jun 03, 7-8 AM (10)
Jun 03, 8-9 AM (19)
Jun 03, 9-10 AM (16)
Jun 03, 10-11 AM (25)
Jun 03, 11-12 PM (0)
3,636 commits this week
May 27, 2026
-
Jun 03, 2026
Prepare conformance for Dijkstra 3 (#5844)
* Update fls * Add Dijkstra SpecTranslate modules * Add ExecSpecRule and Orphan instances * Add ExecSpecTopLevelRule class * Refactor Imp.Core * Add Imp.Dijkstra module * Pass networkId to PState translation (Dijkstra)
Merge pull request #130 from IntersectMBO/rm_illegal_tracers
fix(tracing): remove illegal tracer namespaces from configs
fix(tracing): remove illegal tracer namespaces from configs
The node rejected nine tracer namespaces with TracerConsistencyWarnings "Illegal namespace" errors. Remove them from conway_fast, conway_slow, and mainnet_fast template configs: - ChainDB.LedgerEvent.Flavor.V1.OnDisk.BackingStoreEvent - Mempool.LedgerFound, Mempool.LedgerNotFound - Net.ErrorPolicy (+ .Local, .Remote) - Net.Peers.List - Net.Subscription.DNS, Net.Subscription.IP
Merge branch 'main' into jeluard/improved-basic
Signed-off-by: jeluard <[email protected]>
Harden checkPartialFanout: prevent lock attack and zero-output degenerate case
Two security fixes to the partial fanout validator:
1. Add mustNotBeLastBatch guard (H64): rejects a PartialFanout tx whose
output accumulator commitment equals the G1 generator, which means all
remaining UTxOs were distributed without burning head tokens. Without
this check an adversary could permanently lock head tokens and min-ADA
in an unspendable FanoutProgress UTxO.
2. Add mustHaveOutputs guard (H63): rejects a PartialFanout redeemer with
numberOfPartialOutputs = 0, closing a degenerate KZG case where the
pairing check trivially passes.
Also fix four stale mutation test expectations that were asserting the
wrong error codes after earlier validator changes, and add an off-chain
guard in partialFanout (State.hs) that fails fast with CannotCreateProof
when the UTxO chunk to distribute is empty.
Signed-off-by: Sasha Bogicevic <[email protected]>
Clean up mutation tests and remove stale hash references after accumulator refactor
Replace no-op UTxO hash mutations with accumulator commitment mutations, remove dead hash helper functions and values, fix a zip bug in fanout decommit output selection, and scrub all ηA/η𝛼/ηω notation from comments now that the BLS accumulator supersedes separate alpha/omega hashes. Signed-off-by: Sasha Bogicevic <[email protected]>
Restore numberOfFanoutOutputs to Fanout redeemer
The accumulator-based headIsFinalizedWith used txInfoOutputs directly, which includes the wallet's change output appended by coverFee. Since that output is not in the accumulator, the KZG membership proof failed for every real on-chain fanout. Restore numberOfFanoutOutputs :: Integer to the Fanout redeemer (as in the original hash-based validator) so the validator slices txInfoOutputs to only the distributed UTxOs before running the pairing check and value conservation. Also update the FanOut.hs head output to carry the UTxO value so mustConserveValue passes, and add a unit test that appends a trailing wallet change output and asserts the transaction still evaluates — this would have caught the regression at the contract test level rather than requiring a devnet E2E run. Signed-off-by: Sasha Bogicevic <[email protected]>
Small cleanups: nullary IncrementalAction constructors and isG1Generator helper
Remove UTxO fields from ToCommit and ToDecommit constructors of IncrementalAction — the UTxO was already ignored at every callsite. Update setIncrementalActionMaybe and pattern matches in Close.hs and Contest.hs accordingly. Extract repeated BLS12-381 generator check into isG1Generator helper in Head.hs, and add a comment explaining why mustConserveValue uses geq rather than == (min-UTxO overhead on the head output). Signed-off-by: Sasha Bogicevic <[email protected]>
Fix healthyFanoutTx head output value for mustConserveValue check
The new accumulator-based headIsFinalizedWith validator checks that the head input value covers all distributed outputs. The test head output was missing UTxO.totalValue, causing H4 (HeadValueIsNotPreserved) failures. Signed-off-by: Sasha Bogicevic <[email protected]>
Fix stale mutation test error code expectations in hydra-tx
Four mutation tests expected error codes that no longer match the
validator's check ordering or error code assignments:
- IncrementDifferentClaimRedeemer: H44 (DepositInputNotFound) is not
referenced anywhere in the on-chain validator; H43 (DepositNotSpent)
is the actual check that fires when the increment TxOutRef is absent
from tx inputs.
- DropDecommitOutput and ChangeDecrementedValue: signatures cover
(headId, version, snapshotNumber, accumulatorHash), not output values,
so removing or changing a decommit output fails mustDecreaseValue
(H4) before any signature check (H12) can run.
- ContestFromDifferentHead: replacePolicyIdWith mutates token values
but not the datum's headId field, so mustBeSignedByParticipant fires
H5 before the signature check reaches H37.
Signed-off-by: Sasha Bogicevic <[email protected]>
Regenerate golden files
Signed-off-by: Sasha Bogicevic <[email protected]>
Rebase fix
Signed-off-by: Sasha Bogicevic <[email protected]>
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]>
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]>
Changelog
Also reduce a diff in the test code Signed-off-by: Sasha Bogicevic <[email protected]>
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.
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.
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]>
WIP: workflow to build binaries and docker images
v2: scope constraints to the depends closure, not the whole store
The build-time cabal.project pulled version pins from too many places: a slice's whole `transitive-deps` closure (an over-broad bare `==<ver>` pin added to cover test/bench components) plus build-tool `exe-depends` lib closures. When a boot library is reinstalled at the *same* version (e.g. `text-2.1.4` boot `-inplace` vs a reinstalled `txt-2.1.4-<hash>`), a bare `text ==2.1.4` pin can't disambiguate the two units, so cabal splits lib deps between them and every dependent UnitId drifts (`checkAgainstPlan` fails for js-template-haskell on ghcjs / wasm / the profiled native variants). Treat each dependency kind distinctly at build time: * depends -> source (repo) + `<dep> ==<ver>, <dep> source` * setup-depends-> source (repo) + `<pkg>:setup.<dep> ==<ver>` * exe-depends -> source only (no constraints) Constraints now come only from the *complete* library-`depends` closure (`dependsSlices` = directDepSlices ++ home library deps ++ the package's own library for non-lib components) and per-package setup-constraints. The `source` qualifier on every reinstalled lib forces cabal off the GHC-bundled `-inplace` unit even when versions match. Source + the six per-package block groups keep riding the existing `transitive-deps` closure (already free of pkgsBuildBuild tool slices after the previous commit). Removed: the blkFrags whole-closure version pin and the exe-depends contribution to the constraints scope. Skip the self pkg-name when emitting extra-packages/constraints (its own library can now enter the depends walk via `ownLibSlice`; also listing the local target as a repo package triggers cabal's target-matcher ambiguity, Cabal-7130). Verified green: native + ghcjs js-template-haskell.check and the aarch64-android iserv-proxy-interpreter.
fix: /pools/:pool_id owners
Update blog/2026-06-03-mithril.md
Co-authored-by: olgahryniuk <[email protected]>