Jun 02, 11-12 PM (15)
Jun 02, 12-1 PM (47)
Jun 02, 1-2 PM (66)
Jun 02, 2-3 PM (102)
Jun 02, 3-4 PM (23)
Jun 02, 4-5 PM (17)
Jun 02, 5-6 PM (27)
Jun 02, 6-7 PM (29)
Jun 02, 7-8 PM (18)
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 (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 (18)
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 (48)
Jun 09, 11-12 PM (5)
2,777 commits this week Jun 02, 2026 - Jun 09, 2026
cardano-api removal: migrate unsigned Shelley tx builder (#5292)
## Scope

PR for #5285 under parent #5237 / tracker #5243. This PR migrates
`mkUnsignedTransaction` / `mkUnsignedTx` to ledger-native unsigned body
construction, switches the remaining certificate call sites to
ledger-native certificates, and deletes the obsolete
`Cardano.Wallet.Transaction.Delegation` and
`Cardano.Wallet.Transaction.Voting` helper modules after the migrated
path is proved.

The PR was reopened after Copilot review feedback to remove builder
duplication, clean up the coin conversion alias, and add burn-direction
parity coverage. Those follow-up tasks are tracked as T014-T016 in
`tasks.md` and implemented in
`2826a82dab62abe2c515b4d8179e93b3aecdbae5`.

## Artifacts

- Spec:
https://github.com/cardano-foundation/cardano-wallet/blob/5285-unsigned-ledger/specs/009-unsigned-ledger-builder/spec.md
- Plan:
https://github.com/cardano-foundation/cardano-wallet/blob/5285-unsigned-ledger/specs/009-unsigned-ledger-builder/plan.md
- Tasks:
https://github.com/cardano-foundation/cardano-wallet/blob/5285-unsigned-ledger/specs/009-unsigned-ledger-builder/tasks.md
- Worker brief:
https://github.com/cardano-foundation/cardano-wallet/blob/5285-unsigned-ledger/specs/009-unsigned-ledger-builder/briefs/T010-T013.md

## Integration-test policy

No files under `lib/integration/**` may be modified in this PR. Existing
integration tests may run unchanged only as verification signal.

## Verification

- Baseline: `./gate.sh` passed on branch bootstrap at `59b3bcd110`:
format check, fast-dev cabal build for
`cardano-wallet:lib:cardano-wallet` + `cardano-wallet-unit:unit`,
focused Shelley transaction specs (`44 examples, 0 failures`), and
`hlint` (`No hints`).
- Implementation: `./gate.sh` passed at
`16e308998640e780aae209e2f55c4e88072bc9df`: fourmolu, cabal-fmt, nixfmt,
library + unit build, focused Shelley transaction specs (`44 examples, 0
failures`), and `hlint` (`No hints`).
- CI warning repair: `nix build --quiet .#unit-cardano-wallet-unit`
passed at `3eacd6b5c4deaa874d12a6758bfab7a3f7b929ff` after removing
redundant test imports that failed full-unit CI with
`-Werror=unused-imports`.
- Pre-review finalization: final-head CI was green at
`82ab728b9617ee1d961505cacc2d8a768794a57a` before the PR was reopened
for Copilot review refinements.
- Copilot review response: focused `ledger script-witness parity` passed
at `2826a82dab62abe2c515b4d8179e93b3aecdbae5` with `8 examples, 0
failures`; `./gate.sh` passed with `45 examples, 0 failures`; HLint
reported `No hints`.
- Finalization: `./gate.sh` passed again before the final drop-gate
commit, with Shelley transaction specs `45 examples, 0 failures` and
HLint `No hints`.
- Removal guard: `rg -n "Cardano.Wallet.Transaction.(Delegation|Voting)"
lib/wallet lib/unit` prints nothing.
- Integration guard: `git diff --name-only origin/master...HEAD | rg
'^lib/integration/'` prints nothing.
- Unsigned-builder guard: `rg -n "createTransactionBody|TxBodyContent"
lib/wallet/src/Cardano/Wallet/Shelley/Transaction.hs` prints one
remaining `Cardano.getTxBodyContent` reference in `signTransaction`
(`Transaction.hs:375`), which is outside the migrated unsigned builder
path and remains scoped to #5289.
- Final branch audit at `2d33771ca258b9945902fcb7a776a522b4f038ba`:
every branch commit passes the message gate;
`specs/009-unsigned-ledger-builder/tasks.md` has no open tasks;
`gate.sh` is absent at final HEAD.

## Current phase

Ready for review at `2d33771ca258b9945902fcb7a776a522b4f038ba`.
Final-head CI was triggered by the push and is pending.

Closes #5285.
config.default.yaml: restore vote-threshold for Haskell sim parity
The CIP-164 commit (09b6545) renamed the YAML knob from
`vote-threshold: u64` to `quorum-weight-fraction: f64`, which broke the
Haskell `test_defaultConfigOnDiskMatchesDef` test: `LeiosConfig.hs`
still serializes `voteThreshold` as `vote-threshold` and the test
asserts every key emitted by `toJSON def` is present on disk.

The Haskell sim has no committee-mode concept, so we can't drop
`vote-threshold` from its config without a parallel Haskell port.
Reintroduce `vote-threshold: 300` in the existing "Grandfathered ...
for Haskell sim compatibility" block, with a comment noting it must
stay in sync with `quorum-weight-fraction × vote-generation-probability
= 0.6 × 500 = 300`.

sim-rs ignores the extra key (`RawParameters` has no
`deny_unknown_fields`) and the JSON-schema validator passes because the
top-level config schema does not set `additionalProperties: false`.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Fix worst-case ClosedDatum pre-funding: use N not N-1 contesters
  The init tx pre-funds the head output with enough ADA to cover the
  largest possible ClosedDatum (all parties having contested). The
  previous calculation used N-1 contesters, but the datum can grow
  to N entries when every party contests. For a single-party head,
  N-1=0 so the pre-funded amount was computed with an empty contesters
  list, leaving 103,440 lovelace short; the wallet's ensureMinUTxO
  then topped up the contest output, which the strict
  mustPreserveHeadValue (H4) check on-chain correctly rejected.

Signed-off-by: Sasha Bogicevic <[email protected]>
fix(ci): run CI scripts as esbuild bundles via node, not tsx
tsx's esbuild-based ESM loader can't defer whisky-evaluator's .wasm imports to
node's native --experimental-wasm-modules handling, so `tsx bootstrap.ts` fails
to load @meshsdk/core-csl ("does not provide an export named
'js_evaluate_tx_scripts'"). Pre-bundle the CI CLI scripts with esbuild in the
base image (resolving @/ aliases, externalizing node_modules) and run the
bundles with plain `node` — which loads the WASM natively (flag set on the base
stage). Validated locally: all three scripts now load @meshsdk/core-csl and
fail only on missing runtime env/context, past the previous WASM error.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Cache BLS12-381 accumulator hash as lazy field in HydraAccumulator
  getAccumulatorHash (which runs a BLS12-381 multi-scalar multiplication)
  was called three times per snapshot: once in `sign`, once in
  `mkSeenSnapshot`, and once in `toJSON`. All three operate on the same
  HydraAccumulator value.

  Change HydraAccumulator from a newtype to a data type with a lazy
  _cachedHash field. The thunk is computed at most once per value via
  normal Haskell sharing — subsequent callers return the already-evaluated
  ByteString immediately.

Signed-off-by: Sasha Bogicevic <[email protected]>