Home /
IntersectMBO /
formal-ledger-specifications
Jan 22, 4-5 AM (0)
Jan 22, 5-6 AM (0)
Jan 22, 6-7 AM (0)
Jan 22, 7-8 AM (0)
Jan 22, 8-9 AM (0)
Jan 22, 9-10 AM (0)
Jan 22, 10-11 AM (1)
Jan 22, 11-12 PM (0)
Jan 22, 12-1 PM (0)
Jan 22, 1-2 PM (0)
Jan 22, 2-3 PM (0)
Jan 22, 3-4 PM (0)
Jan 22, 4-5 PM (0)
Jan 22, 5-6 PM (0)
Jan 22, 6-7 PM (0)
Jan 22, 7-8 PM (0)
Jan 22, 8-9 PM (0)
Jan 22, 9-10 PM (0)
Jan 22, 10-11 PM (0)
Jan 22, 11-12 AM (0)
Jan 23, 12-1 AM (0)
Jan 23, 1-2 AM (0)
Jan 23, 2-3 AM (0)
Jan 23, 3-4 AM (1)
Jan 23, 4-5 AM (1)
Jan 23, 5-6 AM (0)
Jan 23, 6-7 AM (0)
Jan 23, 7-8 AM (0)
Jan 23, 8-9 AM (0)
Jan 23, 9-10 AM (2)
Jan 23, 10-11 AM (0)
Jan 23, 11-12 PM (0)
Jan 23, 12-1 PM (0)
Jan 23, 1-2 PM (0)
Jan 23, 2-3 PM (1)
Jan 23, 3-4 PM (0)
Jan 23, 4-5 PM (1)
Jan 23, 5-6 PM (0)
Jan 23, 6-7 PM (3)
Jan 23, 7-8 PM (0)
Jan 23, 8-9 PM (0)
Jan 23, 9-10 PM (0)
Jan 23, 10-11 PM (0)
Jan 23, 11-12 AM (0)
Jan 24, 12-1 AM (0)
Jan 24, 1-2 AM (0)
Jan 24, 2-3 AM (0)
Jan 24, 3-4 AM (1)
Jan 24, 4-5 AM (0)
Jan 24, 5-6 AM (0)
Jan 24, 6-7 AM (0)
Jan 24, 7-8 AM (0)
Jan 24, 8-9 AM (0)
Jan 24, 9-10 AM (0)
Jan 24, 10-11 AM (0)
Jan 24, 11-12 PM (0)
Jan 24, 12-1 PM (0)
Jan 24, 1-2 PM (0)
Jan 24, 2-3 PM (0)
Jan 24, 3-4 PM (0)
Jan 24, 4-5 PM (0)
Jan 24, 5-6 PM (0)
Jan 24, 6-7 PM (0)
Jan 24, 7-8 PM (0)
Jan 24, 8-9 PM (0)
Jan 24, 9-10 PM (0)
Jan 24, 10-11 PM (0)
Jan 24, 11-12 AM (0)
Jan 25, 12-1 AM (0)
Jan 25, 1-2 AM (0)
Jan 25, 2-3 AM (0)
Jan 25, 3-4 AM (0)
Jan 25, 4-5 AM (0)
Jan 25, 5-6 AM (0)
Jan 25, 6-7 AM (0)
Jan 25, 7-8 AM (0)
Jan 25, 8-9 AM (0)
Jan 25, 9-10 AM (0)
Jan 25, 10-11 AM (0)
Jan 25, 11-12 PM (0)
Jan 25, 12-1 PM (0)
Jan 25, 1-2 PM (0)
Jan 25, 2-3 PM (0)
Jan 25, 3-4 PM (0)
Jan 25, 4-5 PM (0)
Jan 25, 5-6 PM (0)
Jan 25, 6-7 PM (0)
Jan 25, 7-8 PM (0)
Jan 25, 8-9 PM (0)
Jan 25, 9-10 PM (0)
Jan 25, 10-11 PM (0)
Jan 25, 11-12 AM (0)
Jan 26, 12-1 AM (0)
Jan 26, 1-2 AM (0)
Jan 26, 2-3 AM (0)
Jan 26, 3-4 AM (0)
Jan 26, 4-5 AM (0)
Jan 26, 5-6 AM (0)
Jan 26, 6-7 AM (0)
Jan 26, 7-8 AM (0)
Jan 26, 8-9 AM (0)
Jan 26, 9-10 AM (0)
Jan 26, 10-11 AM (0)
Jan 26, 11-12 PM (0)
Jan 26, 12-1 PM (0)
Jan 26, 1-2 PM (0)
Jan 26, 2-3 PM (1)
Jan 26, 3-4 PM (0)
Jan 26, 4-5 PM (0)
Jan 26, 5-6 PM (0)
Jan 26, 6-7 PM (0)
Jan 26, 7-8 PM (0)
Jan 26, 8-9 PM (0)
Jan 26, 9-10 PM (0)
Jan 26, 10-11 PM (0)
Jan 26, 11-12 AM (1)
Jan 27, 12-1 AM (1)
Jan 27, 1-2 AM (0)
Jan 27, 2-3 AM (0)
Jan 27, 3-4 AM (1)
Jan 27, 4-5 AM (1)
Jan 27, 5-6 AM (0)
Jan 27, 6-7 AM (0)
Jan 27, 7-8 AM (0)
Jan 27, 8-9 AM (0)
Jan 27, 9-10 AM (0)
Jan 27, 10-11 AM (0)
Jan 27, 11-12 PM (0)
Jan 27, 12-1 PM (0)
Jan 27, 1-2 PM (0)
Jan 27, 2-3 PM (0)
Jan 27, 3-4 PM (0)
Jan 27, 4-5 PM (6)
Jan 27, 5-6 PM (0)
Jan 27, 6-7 PM (0)
Jan 27, 7-8 PM (0)
Jan 27, 8-9 PM (0)
Jan 27, 9-10 PM (0)
Jan 27, 10-11 PM (0)
Jan 27, 11-12 AM (0)
Jan 28, 12-1 AM (0)
Jan 28, 1-2 AM (0)
Jan 28, 2-3 AM (0)
Jan 28, 3-4 AM (20)
Jan 28, 4-5 AM (4)
Jan 28, 5-6 AM (0)
Jan 28, 6-7 AM (0)
Jan 28, 7-8 AM (0)
Jan 28, 8-9 AM (0)
Jan 28, 9-10 AM (0)
Jan 28, 10-11 AM (0)
Jan 28, 11-12 PM (1)
Jan 28, 12-1 PM (0)
Jan 28, 1-2 PM (0)
Jan 28, 2-3 PM (0)
Jan 28, 3-4 PM (2)
Jan 28, 4-5 PM (0)
Jan 28, 5-6 PM (0)
Jan 28, 6-7 PM (0)
Jan 28, 7-8 PM (0)
Jan 28, 8-9 PM (0)
Jan 28, 9-10 PM (0)
Jan 28, 10-11 PM (0)
Jan 28, 11-12 AM (0)
Jan 29, 12-1 AM (0)
Jan 29, 1-2 AM (0)
Jan 29, 2-3 AM (0)
Jan 29, 3-4 AM (0)
Jan 29, 4-5 AM (0)
49 commits this week
Jan 22, 2026
-
Jan 29, 2026
Add deposits in CERT
Artifacts generated from 4b6502894de6326ec4747e4be5c86b12d1ec2585
Artifacts generated from b40e517729994cd121b2dab749c1fb3e89d8ae08
[Dijkstra] Add cost models
revise Transactions/Utxo docs and rebase on master
+ changed globalScripts type; fixed Transaction docs + revise doc prose in Utxo module + rebase fixes + rewrite premises of UTXO rule + **No overlapping spends across subtransactions and top-level tx**: add explicit pairwise-disjointness premise for batch spending inputs. + **Reference-script/self-usable-output concern**: move reference-input validation to batch output view so reference inputs may point to outputs from full batch (including its own outputs), while keeping spending inputs mempool-safe against utxo₀.
Fix prose explaining CIP 118; update CHANGELOG; add `TxInfo.txInfoSubTxs`
+ Remove contradiction between "ref inputs may refer to earlier tx outputs in the batch" vs "all inputs must exist before applying any tx in the batch." The new text punts the exact constraint to the UTxO rules (where it belongs). + Fix Plutus bullet (old "nor earlier versions" reads like "no Plutus at all"). + Align fees with current Agda (`txFee : InTopLevel …`), but leave room for later CIP-driven updates. + Introduce subTx info type (using an alias for `TxInfo` for now). + Extend `TxInfo` with field `txInfoSubTxs : Maybe (List SubTxInfo)`. + Define a purpose-built builder: + Top-level Guard scripts ⇒ `txInfoSubTxs = just (...)` + Everything else ⇒ `txInfoSubTxs = nothing` + SubTx scripts ⇒ always `nothing` (even for `Guard` at sub level) + Explain two utxo arguments + Clean up txInfoForPurpose
Artifacts generated from 650dc55e9c556fd565f015a56abe2e45ad52f942
major revisions plus cleanup before doc revisions
+ fix collectP2ScriptsWithContext
+ Fix some bugs in Dijkstra Transaction module.
+ `TxOut` is 4-tuple: `(Addr × Value × Maybe (Datum ⊎ DataHash) × Maybe Script)`
+ `UTxO.balance` uses `txOutHash`, so if that's malformed, `balance` and minfee-related code will silently go wrong or fail to typecheck.
+ The doc note "reference inputs may come from earlier outputs (prefix-applied)" is outdated; ∵ Carlos' CIP, we want an order-independent `utxoView`.
+ Fix bugs in Utxo module
+ `collectP2ScriptsWithContext` now sees batch-shared scripts (witness
inputs + ref inputs + outputs across all transactions in the batch).
+ datum-by-hash lookup (`getDatum ... (inj₂ h)`) now has an `extraData`
pool containing everything in the batch view, hashed into a map,
plus `Γ.globalData`.
+ no cyclic dependency: `Utxo` computes the batch wiring; `Script.Validation` remains generic.
+ Clean up Utxo module, removing redundancies
+ `Γ.globalScripts` is already batch-scoped via `getAllScripts tx utxo₀` (top + subs).
+ `Γ.globalData` is already batch-scoped via `getAllData tx utxo₀` (top + subs) and then hashed into a map.
+ `collectP2ScriptsWithContext` (still) unions `txDataMap tx` with `extraData` (so tx-local witness data take precedence).
Add UTXOS rule supporting batch-level checking
+ Add batch-level coin mint constraint to prevent Ada forgery (#1023) + Initial plan and improvements + Add batchMintedCoin constraint to prevent Ada forgery + Add documentation for batchMintedCoin security constraint + Use consistent aggregation syntax for batchMintedCoin Co-authored-by: williamdemeo <[email protected]> --------- Co-authored-by: William DeMeo <[email protected]> Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: williamdemeo <[email protected]> remove duplicate typeclass instance address PR change requests fix UTXOS and UTXO rules Update src/Ledger/Dijkstra/Specification/Utxo.lagda.md Co-authored-by: Carlos Tomé Cortiñas <[email protected]>
bugfix: credsNeededMinusCollateral now includes txGuards
+ Guard scripts should be collected and executed with `ScriptPurpose =
Guard...` and receive txInfoSubTxs as txInfoForPurpose intends.
+ Fix utxo (snapshot vs batch) view semantics
Previously allScripts` and `allData` could not "see" scripts/datums that
are only available via reference inputs that point into batch outputs,
because referenceOut utxo₀ tx would miss those outputs. At the same
time, we don't want to accidentally make spend-side lookups consult a
larger view than utxo₀.
To fix this, we now split the UTxO used for spend-side vs reference-side
extraction, and compute globalScripts/globalData using:
+ spend-side view = utxo₀ (mempool-safety)
+ reference-side view = utxoView = utxo₀ ∪ˡ batchOuts txTop to
resolve reference inputs to batch outputs (and to get order-agnostic
script sharing if we want it)
+ spendOut and thus spendScripts/spendData are forced to consult utxo₀.
So even if utxoₙ contains batch outputs, spend-side extraction doesn't
silently "prefer" batch outputs.
+ Reference scripts/datums that are only available on batch outputs can
now be resolved when reference inputs point to them because referenceOut sees utxoRefView.
+ improve ergonomics
+ clean up documentation
+ add more UTXO premises
Fix prose explaining CIP 118; update CHANGELOG; add `TxInfo.txInfoSubTxs`
+ Remove contradiction between "ref inputs may refer to earlier tx outputs in the batch" vs "all inputs must exist before applying any tx in the batch." The new text punts the exact constraint to the UTxO rules (where it belongs). + Fix Plutus bullet (old "nor earlier versions" reads like "no Plutus at all"). + Align fees with current Agda (`txFee : InTopLevel …`), but leave room for later CIP-driven updates. + Introduce subTx info type (using an alias for `TxInfo` for now). + Extend `TxInfo` with field `txInfoSubTxs : Maybe (List SubTxInfo)`. + Define a purpose-built builder: + Top-level Guard scripts ⇒ `txInfoSubTxs = just (...)` + Everything else ⇒ `txInfoSubTxs = nothing` + SubTx scripts ⇒ always `nothing` (even for `Guard` at sub level) + Explain two utxo arguments + Clean up txInfoForPurpose
Update src/Ledger/Dijkstra/Specification/Utxo.lagda.md
Co-authored-by: Carlos Tomé Cortiñas <[email protected]>
Add a premise about txrdmrs to the UTXOW rule (#1042)
* Refactor P2Scripts tests in Script.Validation * Add a premise about txrdmrs to the UTXOW rule
Fix prose explaining CIP 118; update CHANGELOG; add `TxInfo.txInfoSubTxs`
+ Remove contradiction between "ref inputs may refer to earlier tx outputs in the batch" vs "all inputs must exist before applying any tx in the batch." The new text punts the exact constraint to the UTxO rules (where it belongs). + Fix Plutus bullet (old "nor earlier versions" reads like "no Plutus at all"). + Align fees with current Agda (`txFee : InTopLevel …`), but leave room for later CIP-driven updates. + Introduce subTx info type (using an alias for `TxInfo` for now). + Extend `TxInfo` with field `txInfoSubTxs : Maybe (List SubTxInfo)`. + Define a purpose-built builder: + Top-level Guard scripts ⇒ `txInfoSubTxs = just (...)` + Everything else ⇒ `txInfoSubTxs = nothing` + SubTx scripts ⇒ always `nothing` (even for `Guard` at sub level) + Explain two utxo arguments + Clean up txInfoForPurpose
Address PR review comments.
clean up and correct consumed/produced accounting
Update src/Ledger/Dijkstra/Specification/Utxo.lagda.md
Co-authored-by: Carlos Tomé Cortiñas <[email protected]>
add remaining premises of Dijkstra UTXO rule
clean up documnetation prose in Utxo module
Add UTXOS rule supporting batch-level checking
+ Add batch-level coin mint constraint to prevent Ada forgery (#1023) + Initial plan and improvements + Add batchMintedCoin constraint to prevent Ada forgery + Add documentation for batchMintedCoin security constraint + Use consistent aggregation syntax for batchMintedCoin Co-authored-by: williamdemeo <[email protected]> --------- Co-authored-by: William DeMeo <[email protected]> Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: williamdemeo <[email protected]> remove duplicate typeclass instance address PR change requests fix UTXOS and UTXO rules Update src/Ledger/Dijkstra/Specification/Utxo.lagda.md Co-authored-by: Carlos Tomé Cortiñas <[email protected]>
revise Transactions/Utxo docs and rebase on master
+ changed globalScripts type; fixed Transaction docs + revise doc prose in Utxo module + rebase fixes + rewrite premises of UTXO rule + **No overlapping spends across subtransactions and top-level tx**: add explicit pairwise-disjointness premise for batch spending inputs. + **Reference-script/self-usable-output concern**: move reference-input validation to batch output view so reference inputs may point to outputs from full batch (including its own outputs), while keeping spending inputs mempool-safe against utxo₀.
Apply suggestions from code review
Co-authored-by: Carlos Tomé Cortiñas <[email protected]>
[Dijkstra] UTXOS and UTXO rules
(This is the final/cleanup commit.)
major revisions plus cleanup before doc revisions
+ fix collectP2ScriptsWithContext
+ Fix some bugs in Dijkstra Transaction module.
+ `TxOut` is 4-tuple: `(Addr × Value × Maybe (Datum ⊎ DataHash) × Maybe Script)`
+ `UTxO.balance` uses `txOutHash`, so if that's malformed, `balance` and minfee-related code will silently go wrong or fail to typecheck.
+ The doc note "reference inputs may come from earlier outputs (prefix-applied)" is outdated; ∵ Carlos' CIP, we want an order-independent `utxoView`.
+ Fix bugs in Utxo module
+ `collectP2ScriptsWithContext` now sees batch-shared scripts (witness
inputs + ref inputs + outputs across all transactions in the batch).
+ datum-by-hash lookup (`getDatum ... (inj₂ h)`) now has an `extraData`
pool containing everything in the batch view, hashed into a map,
plus `Γ.globalData`.
+ no cyclic dependency: `Utxo` computes the batch wiring; `Script.Validation` remains generic.
+ Clean up Utxo module, removing redundancies
+ `Γ.globalScripts` is already batch-scoped via `getAllScripts tx utxo₀` (top + subs).
+ `Γ.globalData` is already batch-scoped via `getAllData tx utxo₀` (top + subs) and then hashed into a map.
+ `collectP2ScriptsWithContext` (still) unions `txDataMap tx` with `extraData` (so tx-local witness data take precedence).
Update src/Ledger/Dijkstra/Specification/Utxo.lagda.md
Co-authored-by: Carlos Tomé Cortiñas <[email protected]>
fix accidental deletion during rebase