Jan 02, 2-3 AM (5)
Jan 02, 3-4 AM (3)
Jan 02, 4-5 AM (1)
Jan 02, 5-6 AM (1)
Jan 02, 6-7 AM (1)
Jan 02, 7-8 AM (13)
Jan 02, 8-9 AM (20)
Jan 02, 9-10 AM (20)
Jan 02, 10-11 AM (12)
Jan 02, 11-12 PM (6)
Jan 02, 12-1 PM (14)
Jan 02, 1-2 PM (3)
Jan 02, 2-3 PM (16)
Jan 02, 3-4 PM (30)
Jan 02, 4-5 PM (54)
Jan 02, 5-6 PM (10)
Jan 02, 6-7 PM (15)
Jan 02, 7-8 PM (7)
Jan 02, 8-9 PM (10)
Jan 02, 9-10 PM (1)
Jan 02, 10-11 PM (19)
Jan 02, 11-12 AM (12)
Jan 03, 12-1 AM (1)
Jan 03, 1-2 AM (2)
Jan 03, 2-3 AM (1)
Jan 03, 3-4 AM (1)
Jan 03, 4-5 AM (1)
Jan 03, 5-6 AM (1)
Jan 03, 6-7 AM (1)
Jan 03, 7-8 AM (5)
Jan 03, 8-9 AM (1)
Jan 03, 9-10 AM (7)
Jan 03, 10-11 AM (1)
Jan 03, 11-12 PM (1)
Jan 03, 12-1 PM (2)
Jan 03, 1-2 PM (4)
Jan 03, 2-3 PM (7)
Jan 03, 3-4 PM (10)
Jan 03, 4-5 PM (10)
Jan 03, 5-6 PM (2)
Jan 03, 6-7 PM (0)
Jan 03, 7-8 PM (2)
Jan 03, 8-9 PM (1)
Jan 03, 9-10 PM (1)
Jan 03, 10-11 PM (31)
Jan 03, 11-12 AM (25)
Jan 04, 12-1 AM (10)
Jan 04, 1-2 AM (1)
Jan 04, 2-3 AM (0)
Jan 04, 3-4 AM (4)
Jan 04, 4-5 AM (3)
Jan 04, 5-6 AM (0)
Jan 04, 6-7 AM (0)
Jan 04, 7-8 AM (0)
Jan 04, 8-9 AM (1)
Jan 04, 9-10 AM (1)
Jan 04, 10-11 AM (0)
Jan 04, 11-12 PM (4)
Jan 04, 12-1 PM (6)
Jan 04, 1-2 PM (0)
Jan 04, 2-3 PM (0)
Jan 04, 3-4 PM (2)
Jan 04, 4-5 PM (0)
Jan 04, 5-6 PM (0)
Jan 04, 6-7 PM (0)
Jan 04, 7-8 PM (1)
Jan 04, 8-9 PM (0)
Jan 04, 9-10 PM (2)
Jan 04, 10-11 PM (22)
Jan 04, 11-12 AM (16)
Jan 05, 12-1 AM (0)
Jan 05, 1-2 AM (3)
Jan 05, 2-3 AM (6)
Jan 05, 3-4 AM (4)
Jan 05, 4-5 AM (8)
Jan 05, 5-6 AM (7)
Jan 05, 6-7 AM (4)
Jan 05, 7-8 AM (11)
Jan 05, 8-9 AM (15)
Jan 05, 9-10 AM (25)
Jan 05, 10-11 AM (32)
Jan 05, 11-12 PM (15)
Jan 05, 12-1 PM (21)
Jan 05, 1-2 PM (16)
Jan 05, 2-3 PM (28)
Jan 05, 3-4 PM (19)
Jan 05, 4-5 PM (16)
Jan 05, 5-6 PM (6)
Jan 05, 6-7 PM (5)
Jan 05, 7-8 PM (10)
Jan 05, 8-9 PM (12)
Jan 05, 9-10 PM (16)
Jan 05, 10-11 PM (39)
Jan 05, 11-12 AM (54)
Jan 06, 12-1 AM (10)
Jan 06, 1-2 AM (7)
Jan 06, 2-3 AM (16)
Jan 06, 3-4 AM (10)
Jan 06, 4-5 AM (20)
Jan 06, 5-6 AM (5)
Jan 06, 6-7 AM (8)
Jan 06, 7-8 AM (10)
Jan 06, 8-9 AM (37)
Jan 06, 9-10 AM (10)
Jan 06, 10-11 AM (17)
Jan 06, 11-12 PM (9)
Jan 06, 12-1 PM (10)
Jan 06, 1-2 PM (13)
Jan 06, 2-3 PM (16)
Jan 06, 3-4 PM (14)
Jan 06, 4-5 PM (26)
Jan 06, 5-6 PM (23)
Jan 06, 6-7 PM (40)
Jan 06, 7-8 PM (16)
Jan 06, 8-9 PM (21)
Jan 06, 9-10 PM (12)
Jan 06, 10-11 PM (74)
Jan 06, 11-12 AM (29)
Jan 07, 12-1 AM (17)
Jan 07, 1-2 AM (10)
Jan 07, 2-3 AM (11)
Jan 07, 3-4 AM (33)
Jan 07, 4-5 AM (6)
Jan 07, 5-6 AM (0)
Jan 07, 6-7 AM (1)
Jan 07, 7-8 AM (15)
Jan 07, 8-9 AM (26)
Jan 07, 9-10 AM (33)
Jan 07, 10-11 AM (21)
Jan 07, 11-12 PM (28)
Jan 07, 12-1 PM (52)
Jan 07, 1-2 PM (67)
Jan 07, 2-3 PM (30)
Jan 07, 3-4 PM (44)
Jan 07, 4-5 PM (45)
Jan 07, 5-6 PM (23)
Jan 07, 6-7 PM (16)
Jan 07, 7-8 PM (28)
Jan 07, 8-9 PM (11)
Jan 07, 9-10 PM (11)
Jan 07, 10-11 PM (33)
Jan 07, 11-12 AM (20)
Jan 08, 12-1 AM (3)
Jan 08, 1-2 AM (18)
Jan 08, 2-3 AM (2)
Jan 08, 3-4 AM (12)
Jan 08, 4-5 AM (7)
Jan 08, 5-6 AM (4)
Jan 08, 6-7 AM (7)
Jan 08, 7-8 AM (9)
Jan 08, 8-9 AM (22)
Jan 08, 9-10 AM (18)
Jan 08, 10-11 AM (23)
Jan 08, 11-12 PM (32)
Jan 08, 12-1 PM (22)
Jan 08, 1-2 PM (27)
Jan 08, 2-3 PM (42)
Jan 08, 3-4 PM (26)
Jan 08, 4-5 PM (49)
Jan 08, 5-6 PM (25)
Jan 08, 6-7 PM (31)
Jan 08, 7-8 PM (11)
Jan 08, 8-9 PM (27)
Jan 08, 9-10 PM (17)
Jan 08, 10-11 PM (52)
Jan 08, 11-12 AM (19)
Jan 09, 12-1 AM (7)
Jan 09, 1-2 AM (19)
Jan 09, 2-3 AM (4)
2,402 commits this week Jan 02, 2026 - Jan 09, 2026
Switch to decoing `ByteString` first for `PackedBytes`
As it turns out `cborg` library whenever decoing `ByteString` it will
take a slice in constant time of the original large buffer that is
being fed to the decoder, while it can't do the same when decoding
`ByteArray#`. Concidering that for `PackedBytes` this intermediate
buffer is short lived, because it is only needed for packing operation,
it totally makes sense to not make a redundant copy of this buffer.
add `TxInfo.txInfoSubTxs` field
1. Introduce subTx info type (using an alias for `TxInfo` for now).
2. Extend `TxInfo` with field `txInfoSubTxs : Maybe (List SubTxInfo)`.
3. 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)
Fix prose explaining CIP 118.
+  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.
[Dijkstra] Make `ScriptPurpose.Guard` and `IndexOfGuard` carry a `Credential` (#1011)
* Add helpers for grouping top-level guard requests

* Fix prose explaining CIP 118.

+  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.

* update CHANGELOG

* Update src/Ledger/Dijkstra/Specification/Transaction.lagda.md

Co-authored-by: Copilot <[email protected]>

* change txRequiredTopLevelGuards type from list to set

   agreeing with Carlos' observation/suggestion

* changed nomenclature

   Agreeing with Carlos' suggestion to avoid "request."

* convert code comments to (literate) documentation

* Add `requiredTopLevelGuardsSatisfied` predicate.

* Add initial versions of Utxo and Utxow modules

   + a minimal `UTXOS` rule as a stub/hook (so `UTXO` can call something),
   + a minimal `UTXO` rule with just the new phase-1 premise (plus an explicit "calls UTXOS"),
   + a minimal `UTXOW`; just a wrapper over `UTXO` for now.

* Make `ScriptPurpose.Guard` carry a `Credential`

   Key idea:

   +  Keep `txGuards` as a set **for now**.
   +  Define an ordered view `guardsList : List Credential` via `setToList`.
   +  Make `indexOfGuard` operate on that list.
   +  Let `rdptr` compute the `Ix` using `indexOfGuard`.

   For the "required top-level guards requested by subTxs" (i.e., `txRequiredTopLevelGuards` requests), we don't need a new ScriptPurpose constructor yet, because:

   +  phase-1 ensures those requested credentials are contained in top-level `txGuards`
   +  the later work (#1004 / #1006) will decide how to construct TxInfo / datum arguments for running those guard scripts batch-wide

---------

Co-authored-by: Copilot <[email protected]>