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
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
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
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
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₀.
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).