Home / Input Output / cardano-wallet
May 14, 2-3 AM (0)
May 14, 3-4 AM (0)
May 14, 4-5 AM (0)
May 14, 5-6 AM (0)
May 14, 6-7 AM (0)
May 14, 7-8 AM (0)
May 14, 8-9 AM (0)
May 14, 9-10 AM (0)
May 14, 10-11 AM (0)
May 14, 11-12 PM (0)
May 14, 12-1 PM (0)
May 14, 1-2 PM (0)
May 14, 2-3 PM (0)
May 14, 3-4 PM (0)
May 14, 4-5 PM (0)
May 14, 5-6 PM (0)
May 14, 6-7 PM (0)
May 14, 7-8 PM (0)
May 14, 8-9 PM (0)
May 14, 9-10 PM (0)
May 14, 10-11 PM (0)
May 14, 11-12 AM (0)
May 15, 12-1 AM (0)
May 15, 1-2 AM (0)
May 15, 2-3 AM (0)
May 15, 3-4 AM (0)
May 15, 4-5 AM (0)
May 15, 5-6 AM (0)
May 15, 6-7 AM (0)
May 15, 7-8 AM (0)
May 15, 8-9 AM (0)
May 15, 9-10 AM (0)
May 15, 10-11 AM (0)
May 15, 11-12 PM (0)
May 15, 12-1 PM (0)
May 15, 1-2 PM (0)
May 15, 2-3 PM (0)
May 15, 3-4 PM (0)
May 15, 4-5 PM (0)
May 15, 5-6 PM (0)
May 15, 6-7 PM (0)
May 15, 7-8 PM (0)
May 15, 8-9 PM (0)
May 15, 9-10 PM (0)
May 15, 10-11 PM (0)
May 15, 11-12 AM (0)
May 16, 12-1 AM (0)
May 16, 1-2 AM (0)
May 16, 2-3 AM (0)
May 16, 3-4 AM (0)
May 16, 4-5 AM (0)
May 16, 5-6 AM (0)
May 16, 6-7 AM (0)
May 16, 7-8 AM (0)
May 16, 8-9 AM (0)
May 16, 9-10 AM (0)
May 16, 10-11 AM (0)
May 16, 11-12 PM (0)
May 16, 12-1 PM (0)
May 16, 1-2 PM (0)
May 16, 2-3 PM (0)
May 16, 3-4 PM (0)
May 16, 4-5 PM (0)
May 16, 5-6 PM (0)
May 16, 6-7 PM (0)
May 16, 7-8 PM (0)
May 16, 8-9 PM (0)
May 16, 9-10 PM (0)
May 16, 10-11 PM (0)
May 16, 11-12 AM (0)
May 17, 12-1 AM (0)
May 17, 1-2 AM (0)
May 17, 2-3 AM (0)
May 17, 3-4 AM (0)
May 17, 4-5 AM (0)
May 17, 5-6 AM (0)
May 17, 6-7 AM (0)
May 17, 7-8 AM (0)
May 17, 8-9 AM (0)
May 17, 9-10 AM (0)
May 17, 10-11 AM (0)
May 17, 11-12 PM (0)
May 17, 12-1 PM (0)
May 17, 1-2 PM (0)
May 17, 2-3 PM (0)
May 17, 3-4 PM (0)
May 17, 4-5 PM (0)
May 17, 5-6 PM (0)
May 17, 6-7 PM (0)
May 17, 7-8 PM (0)
May 17, 8-9 PM (0)
May 17, 9-10 PM (0)
May 17, 10-11 PM (0)
May 17, 11-12 AM (0)
May 18, 12-1 AM (0)
May 18, 1-2 AM (0)
May 18, 2-3 AM (0)
May 18, 3-4 AM (0)
May 18, 4-5 AM (0)
May 18, 5-6 AM (0)
May 18, 6-7 AM (0)
May 18, 7-8 AM (0)
May 18, 8-9 AM (0)
May 18, 9-10 AM (0)
May 18, 10-11 AM (0)
May 18, 11-12 PM (0)
May 18, 12-1 PM (0)
May 18, 1-2 PM (0)
May 18, 2-3 PM (0)
May 18, 3-4 PM (1)
May 18, 4-5 PM (0)
May 18, 5-6 PM (0)
May 18, 6-7 PM (0)
May 18, 7-8 PM (0)
May 18, 8-9 PM (0)
May 18, 9-10 PM (0)
May 18, 10-11 PM (0)
May 18, 11-12 AM (0)
May 19, 12-1 AM (0)
May 19, 1-2 AM (0)
May 19, 2-3 AM (0)
May 19, 3-4 AM (0)
May 19, 4-5 AM (0)
May 19, 5-6 AM (0)
May 19, 6-7 AM (1)
May 19, 7-8 AM (0)
May 19, 8-9 AM (2)
May 19, 9-10 AM (0)
May 19, 10-11 AM (0)
May 19, 11-12 PM (0)
May 19, 12-1 PM (0)
May 19, 1-2 PM (1)
May 19, 2-3 PM (0)
May 19, 3-4 PM (0)
May 19, 4-5 PM (0)
May 19, 5-6 PM (0)
May 19, 6-7 PM (0)
May 19, 7-8 PM (0)
May 19, 8-9 PM (0)
May 19, 9-10 PM (0)
May 19, 10-11 PM (0)
May 19, 11-12 AM (0)
May 20, 12-1 AM (0)
May 20, 1-2 AM (0)
May 20, 2-3 AM (0)
May 20, 3-4 AM (0)
May 20, 4-5 AM (0)
May 20, 5-6 AM (0)
May 20, 6-7 AM (0)
May 20, 7-8 AM (1)
May 20, 8-9 AM (1)
May 20, 9-10 AM (0)
May 20, 10-11 AM (0)
May 20, 11-12 PM (0)
May 20, 12-1 PM (0)
May 20, 1-2 PM (0)
May 20, 2-3 PM (0)
May 20, 3-4 PM (0)
May 20, 4-5 PM (0)
May 20, 5-6 PM (0)
May 20, 6-7 PM (0)
May 20, 7-8 PM (0)
May 20, 8-9 PM (0)
May 20, 9-10 PM (0)
May 20, 10-11 PM (0)
May 20, 11-12 AM (0)
May 21, 12-1 AM (0)
May 21, 1-2 AM (0)
May 21, 2-3 AM (0)
7 commits this week May 14, 2026 - May 21, 2026
refactor(5285): address unsigned builder review feedback
T014: buildLedgerTx now delegates to buildLedgerTxRaw with (Right cs),
removing the duplicate ledger-body construction. The public signature
and output bytes are unchanged; the focused parity spec confirms
mkUnsignedTx and buildLedgerTx still agree byte-for-byte.

T015: drop the local toLedgerCoin alias in
Cardano.Wallet.Shelley.Transaction.Unsigned and import the primitive
Cardano.Wallet.Primitive.Ledger.Convert.toLedgerCoin. toCardanoLovelace
remains in use for ledger Coin conversions in the fee and withdrawal
paths.

T016: add a non-empty assetsToBurn scenario to the ledger
script-witness parity suite, asserting that legacy mkUnsignedTx and
new buildLedgerTx encode the burn into the same ledger MultiAsset
(bodyTxL . mintTxBodyL) and produce equal body CBOR plus script
witnesses. The shared mintBurnFromMintingSources helper now threads
the selection's burn TokenMap instead of dropping it.

Verification:
  nix develop --quiet -c cabal test cardano-wallet-unit:unit -O0 -v0 \
    --test-options '--match="ledger script-witness parity"'
  -> 8 examples, 0 failures (6 prior + new "7. local burn" + property)
  rg -n "Cardano.Wallet.Transaction.(Delegation|Voting)" lib/wallet lib/unit
  -> no matches
  git diff --name-only origin/master...HEAD | rg '^lib/integration/'
  -> no matches

Tasks: T014, T015, T016
feat(5288): script-witness parity in Transaction.Ledger
Extend the ledger-native transaction builder
(`Cardano.Wallet.Shelley.Transaction.Ledger`) so it accepts every
script-witness shape currently consumed by the legacy
`Cardano.Wallet.Shelley.Transaction.mkUnsignedTx`:

  * native-script spending witnesses (`Map TxIn (Script KeyHash)`),
  * an optional staking script for withdrawals / certificates,
  * mint/burn `ScriptSource` values (local script and reference
    input), and
  * an output-attached reference script.

A new record `ScriptWitnesses` carries the four fields through
`buildLedgerTx` and `buildLedgerTxRaw` with a defaultable
`noScriptWitnesses` value; the two production call sites in this
module (`mkTransaction`, `constructUnsignedTxLedger`) and the three
pre-existing test call sites in `ledgerMintPlumbingSpec'` pass
`noScriptWitnesses` and remain behaviourally unchanged. The new
helper `installScriptWitnesses` sets the matching ledger lenses:
`referenceInputsTxBodyL` from `Right (ReferenceInput …)` mint
sources, the first-output `referenceScriptTxOutL` from
`swReferenceScript`, and `witsTxL . scriptTxWitsL` from
`swNativeInputs` values, `swStakingScript`, and local mint scripts
deduplicated to one witness per token policy id to match the legacy
`TxMintValue` merge.

A new `describe "ledger script-witness parity"` block in
`TransactionLedgerSpec` proves byte-for-byte equality between the
legacy and new builders in the recent era (Conway) across six
enumerated scenarios (US1 acceptance criteria 1-6 from spec.md)
and one bounded QuickCheck property
(`prop_buildLedgerTx_matches_mkUnsignedTx_on_script_witnesses`,
`withMaxSuccess 100`) that mixes random selections, mint sources,
staking scripts, and output reference scripts. Each comparison
asserts both body-CBOR equality (`serialize (eraProtVerLow @Conway)
(tx ^. bodyTxL)`) and witness-set equality
(`tx ^. witsTxL . scriptTxWitsL`). The legacy body is lifted to a
ledger `Tx Conway` via `fromCardanoApiTx . Cardano.makeSignedTransaction []`.

Dijkstra remains `pendingWith "TODO: Dijkstra"` (per #5209).
Plutus scripts remain out of scope. `mkUnsignedTx` and
`mkUnsignedTransaction` are unchanged.

Spec: specs/008-script-witness-parity/{spec,plan,data-model,research,quickstart}.md

Tasks: T010, T011, T012, T013
docs(5288): tasks for script-witness parity slice
One bisect-safe implementation slice folds T010 (RED: six failing
parity scenarios in TransactionLedgerSpec), T011 (GREEN:
ScriptWitnesses extension + plumbing in Transaction/Ledger.hs +
default updates at all five call sites), and T012 (regression
re-run of the broader TransactionLedger pattern) into a single
subagent commit. The brief in tasks.md is self-contained — the
subagent loads no process skill.

T000-T002 (bootstrap + spec + plan stops) are already done.
T020-T023 are orchestrator-owned finalisation chores (gate
re-run, PR body refresh, finalization audit, drop gate.sh +
mark ready) and do not require a subagent.
docs(5288): plan script-witness parity slice
One bisect-safe slice extends Transaction.Ledger with a
ScriptWitnesses carrier (native inputs, staking script, mint
sources, output reference script), plumbs it into the ledger
body and witness-set lenses listed in data-model.md, and proves
body+wits byte-equality against the legacy mkUnsignedTx route
on the six representative scenarios from spec.md. mkUnsignedTx
and mkUnsignedTransaction stay byte-identical to origin/master;
lib/integration/** is not touched; Dijkstra remains pendingWith.

research.md records the body-field map, the witness-set lens
choice (witsTxL . scriptTxWitsL at unsigned-build time), the
single-record API extension, and why the live-boundary
diagnostic returns "none" for this slice (pure-CBOR comparison
of two builders, no system boundary to cross).