Repository navigation
Conversation
5ac4a12 to
10b6474
Compare
| concat | ||
| [ ["dijkstra", "sub-transaction", "sign"] | ||
| , ["--sub-tx-file", body, "--signing-key-file", key, "--out-file", out] | ||
| ] |
| concat | ||
| [ ["--account-balance-interval", account ++ ">=100,<200"] | ||
| , ["--account-balance-interval", otherAccount ++ "=42"] | ||
| ] |
| concat | ||
| [ ["dijkstra", "transaction", "sign"] | ||
| , ["--tx-body-file", bodyFile, "--signing-key-file", key, "--out-file", signedFile] | ||
| ] |
81c3596 to
7c42061
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
Ledger-facing changes across balancing, signing, and embedding warrant human confirmation of the reported runtime validation.
No open issues 🎉
What changed in this PR
Adds CIP-159 account balance assertions to Dijkstra transaction builders and exposes them in debug views, using existing ledger types and API setters.
Changes:
- Adds comparison-based interval options, era gating, and duplicate-account validation.
- Displays ordinary and starting intervals, plus ordered sub-transaction summaries, in JSON/YAML views.
- Adds round-trip, rejection, estimation, and golden coverage; simplifies existing direct-deposit tests.
| File | Description |
|---|---|
cardano-cli/test/cardano-cli-test/Test/Cli/Transaction/DirectDeposit.hs |
Simplifies existing tests without changing their assertions. |
cardano-cli/test/cardano-cli-test/Test/Cli/Transaction/AccountBalanceInterval.hs |
Tests interval preservation, validation, gating, and estimation. |
cardano-cli/test/cardano-cli-golden/Test/Golden/Debug/TransactionView.hs |
Tests signed and unsigned interval views. |
cardano-cli/test/cardano-cli-golden/files/golden/help/dijkstra_transaction_build.cli |
Records interval options and help for online builds. |
cardano-cli/test/cardano-cli-golden/files/golden/help/dijkstra_transaction_build-raw.cli |
Records interval options and help for raw builds. |
cardano-cli/test/cardano-cli-golden/files/golden/help/dijkstra_transaction_build-estimate.cli |
Records interval options and help for estimated builds. |
cardano-cli/test/cardano-cli-golden/files/golden/help/dijkstra_sub-transaction_build-raw.cli |
Records ordinary interval support for sub-transactions. |
cardano-cli/test/cardano-cli-golden/files/golden/help.cli |
Updates combined help output. |
cardano-cli/test/cardano-cli-golden/files/golden/dijkstra/transaction/build-raw-plutus-v4-script-witnesses.out |
Adds empty interval and sub-transaction fields. |
cardano-cli/test/cardano-cli-golden/files/golden/dijkstra/transaction-view-intervals.yaml |
Adds unsigned YAML interval output. |
cardano-cli/test/cardano-cli-golden/files/golden/dijkstra/transaction-view-intervals.json |
Adds unsigned JSON interval output. |
cardano-cli/test/cardano-cli-golden/files/golden/dijkstra/transaction-view-intervals-signed.yaml |
Adds signed YAML interval output. |
cardano-cli/test/cardano-cli-golden/files/golden/dijkstra/transaction-view-intervals-signed.json |
Adds signed JSON interval output. |
cardano-cli/test/cardano-cli-golden/files/golden/dijkstra/transaction-view-direct-deposits.yaml |
Updates deposit views with empty interval fields. |
cardano-cli/test/cardano-cli-golden/files/golden/dijkstra/transaction-view-direct-deposits.json |
Updates deposit views with empty interval fields. |
cardano-cli/src/Cardano/CLI/Type/Error/TxCmdError.hs |
Adds duplicate-interval account errors. |
cardano-cli/src/Cardano/CLI/EraBased/Transaction/SubTransaction/Run.hs |
Validates and applies sub-transaction intervals. |
cardano-cli/src/Cardano/CLI/EraBased/Transaction/SubTransaction/Option.hs |
Wires ordinary interval parsing into sub-transactions. |
cardano-cli/src/Cardano/CLI/EraBased/Transaction/SubTransaction/Command.hs |
Adds interval arguments to sub-transaction commands. |
cardano-cli/src/Cardano/CLI/EraBased/Transaction/Run.hs |
Propagates both interval fields through transaction builders. |
cardano-cli/src/Cardano/CLI/EraBased/Transaction/Option.hs |
Wires both interval options into all three builders. |
cardano-cli/src/Cardano/CLI/EraBased/Transaction/Internal/Common.hs |
Adds interval conversion and shared duplicate detection. |
cardano-cli/src/Cardano/CLI/EraBased/Transaction/Command.hs |
Adds both interval fields to builder arguments. |
cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs |
Defines comparison parsing, era gating, and help text. |
cardano-cli/src/Cardano/CLI/Compatible/Json/Friendly.hs |
Renders interval fields and ordered sub-transaction summaries. |
cardano-cli/cardano-cli.cabal |
Registers the interval test module. |
.changes/20261023_account_balance_intervals.yml |
Documents the new feature. |
Review effort: Balanced
| assertInvalidOption flag [era, "transaction", command] | ||
| assertInvalidOption "--starting-account-balance-interval" subTransactionArgs | ||
|
|
||
| hprop_account_balance_intervals_validate_before_node_query :: Property |
There was a problem hiding this comment.
This test runs the online transaction build path only up to the duplicate-account rejection, which fires before the node is queried, and hprop_account_balance_intervals_build_estimate builds without a script. Nothing here covers balancing or script evaluation with intervals set. Is a cardano-testnet test planned for a successful online build with intervals?
palas
left a comment
There was a problem hiding this comment.
Looks solid. I wrote a couple of small potential improvements
5fc8a3c to
4a1d814
Compare
4a1d814 to
9003c63
Compare
Context
Expose CIP-159 account balance assertions in Dijkstra transaction builders and debug views. Transactions can specify exact, lower-bound, upper-bound, or two-bound assertions using quoted comparison syntax:
Amounts are in lovelace. Both options are supported by
transaction build,build-raw, andbuild-estimate;sub-transaction build-rawsupports ordinary intervals only. Starting assertions refer to the balance before the whole transaction; ordinary assertions refer to the balance before that level’s own changes, after earlier sub-transactions.JSON/YAML transaction views now show both top-level fields and an ordered summary of embedded sub-transaction IDs and ordinary intervals.
How to trust this PR
Validation completed locally:
git diff --checkpassed.Checklist
.changes/