Utxo
{-# OPTIONS --safe #-} open import Algebra using (CommutativeMonoid) open import Data.Nat.Properties using (+-0-monoid) import Data.Maybe as M import Data.Sum.Relation.Unary.All as Sum import Data.Integer as ℤ import Data.Rational as ℚ open import Ledger.Prelude open import Ledger.Conway.Specification.Abstract open import Ledger.Conway.Specification.Transaction module Ledger.Conway.Conformance.Utxo (txs : _) (open TransactionStructure txs) (abs : AbstractFunctions txs) (open AbstractFunctions abs) where open import Ledger.Conway.Specification.Script.Validation txs abs open import Ledger.Conway.Specification.Fees using (scriptsCost) open import Ledger.Conway.Conformance.Certs govStructure private module L where open import Ledger.Conway.Specification.Utxo txs abs public open PParams instance _ = +-0-monoid open L public using (UTxOEnv; UTxOState; ⟦_,_,_,_⟧ᵘ; HasCast-UTxOState; updateDeposits ; cbalance; balance; depositRefunds; consumed ; produced; outs; newDeposits; refScriptsSize ) private variable Γ : UTxOEnv s s' : UTxOState tx : Tx open PParams data _⊢_⇀⦇_,UTXOS⦈_ : UTxOEnv → UTxOState → Tx → UTxOState → Type where Scripts-Yes : ∀ {Γ} {s} {tx} → let open Tx tx renaming (body to txb); open TxBody txb open UTxOEnv Γ renaming (pparams to pp) open UTxOState s p2Scripts = collectP2ScriptsWithContext pp tx utxo in ∙ evalP2Scripts p2Scripts ≡ isValid ∙ isValid ≡ true ──────────────────────────────── Γ ⊢ s ⇀⦇ tx ,UTXOS⦈ $\begin{pmatrix} \,\htmlId{1705}{\htmlClass{Symbol}{\text{(}}}\,\,\href{Ledger.Conway.Specification.Utxo.html#3084}{\htmlId{1706}{\htmlClass{Function}{\text{utxo}}}}\, \,\href{Axiom.Set.Map.html#13606}{\htmlId{1711}{\htmlClass{Function Operator}{\text{∣}}}}\, \,\href{Ledger.Conway.Specification.Transaction.html#4816}{\htmlId{1713}{\htmlClass{Function}{\text{txIns}}}}\, \,\href{Axiom.Set.Map.html#13606}{\htmlId{1719}{\htmlClass{Function Operator}{\text{ᶜ}}}}\,\,\htmlId{1720}{\htmlClass{Symbol}{\text{)}}}\, \,\href{Axiom.Set.Map.html#7640}{\htmlId{1722}{\htmlClass{Function Operator}{\text{∪ˡ}}}}\, \,\htmlId{1725}{\htmlClass{Symbol}{\text{(}}}\,\,\href{Ledger.Conway.Specification.Utxo.html#4858}{\htmlId{1726}{\htmlClass{Function}{\text{L.outs}}}}\, \,\href{Ledger.Conway.Conformance.Utxo.html#1391}{\htmlId{1733}{\htmlClass{Field}{\text{txb}}}}\,\,\htmlId{1736}{\htmlClass{Symbol}{\text{)}}}\, \\ \,\href{Ledger.Conway.Specification.Utxo.html#3106}{\htmlId{1770}{\htmlClass{Function}{\text{fees}}}}\, \,\href{Class.HasAdd.Core.html#162}{\htmlId{1775}{\htmlClass{Field Operator}{\text{+}}}}\, \,\href{Ledger.Conway.Specification.Transaction.html#5038}{\htmlId{1777}{\htmlClass{Function}{\text{txFee}}}}\, \\ \,\href{Ledger.Conway.Specification.Utxo.html#3128}{\htmlId{1815}{\htmlClass{Function}{\text{deposits}}}}\, \\ \,\href{Ledger.Conway.Specification.Utxo.html#3154}{\htmlId{1856}{\htmlClass{Function}{\text{donations}}}}\, \,\href{Class.HasAdd.Core.html#162}{\htmlId{1866}{\htmlClass{Field Operator}{\text{+}}}}\, \,\href{Ledger.Conway.Specification.Transaction.html#5208}{\htmlId{1868}{\htmlClass{Function}{\text{txDonation}}}}\, \end{pmatrix}$ Scripts-No : ∀ {Γ} {s} {tx} → let open Tx tx renaming (body to txb); open TxBody txb open UTxOEnv Γ renaming (pparams to pp) open UTxOState s p2Scripts = collectP2ScriptsWithContext pp tx utxo in ∙ evalP2Scripts p2Scripts ≡ isValid ∙ isValid ≡ false ──────────────────────────────── Γ ⊢ s ⇀⦇ tx ,UTXOS⦈ $\begin{pmatrix} \,\href{Ledger.Conway.Specification.Utxo.html#3084}{\htmlId{2300}{\htmlClass{Function}{\text{utxo}}}}\, \,\href{Axiom.Set.Map.html#13606}{\htmlId{2305}{\htmlClass{Function Operator}{\text{∣}}}}\, \,\href{Ledger.Conway.Specification.Transaction.html#4888}{\htmlId{2307}{\htmlClass{Function}{\text{collateralInputs}}}}\, \,\href{Axiom.Set.Map.html#13606}{\htmlId{2324}{\htmlClass{Function Operator}{\text{ᶜ}}}}\, \\ \,\href{Ledger.Conway.Specification.Utxo.html#3106}{\htmlId{2358}{\htmlClass{Function}{\text{fees}}}}\, \,\href{Class.HasAdd.Core.html#162}{\htmlId{2363}{\htmlClass{Field Operator}{\text{+}}}}\, \,\href{Ledger.Conway.Specification.Utxo.html#5018}{\htmlId{2365}{\htmlClass{Function}{\text{L.cbalance}}}}\, \,\htmlId{2376}{\htmlClass{Symbol}{\text{(}}}\,\,\href{Ledger.Conway.Specification.Utxo.html#3084}{\htmlId{2377}{\htmlClass{Function}{\text{utxo}}}}\, \,\href{Axiom.Set.Map.html#13536}{\htmlId{2382}{\htmlClass{Function Operator}{\text{∣}}}}\, \,\href{Ledger.Conway.Specification.Transaction.html#4888}{\htmlId{2384}{\htmlClass{Function}{\text{collateralInputs}}}}\,\,\htmlId{2400}{\htmlClass{Symbol}{\text{)}}}\, \\ \,\href{Ledger.Conway.Specification.Utxo.html#3128}{\htmlId{2434}{\htmlClass{Function}{\text{deposits}}}}\, \\ \,\href{Ledger.Conway.Specification.Utxo.html#3154}{\htmlId{2475}{\htmlClass{Function}{\text{donations}}}}\, \end{pmatrix}$ unquoteDecl Scripts-Yes-premises = genPremises Scripts-Yes-premises (quote Scripts-Yes) unquoteDecl Scripts-No-premises = genPremises Scripts-No-premises (quote Scripts-No) data _⊢_⇀⦇_,UTXO⦈_ : UTxOEnv → UTxOState → Tx → UTxOState → Type where UTXO-inductive : let open Tx tx renaming (body to txb); open TxBody txb; open TxWitnesses wits open UTxOEnv Γ renaming (pparams to pp) open UTxOState s txOutsʰ = (mapValues txOutHash txOuts) overhead = 160 in ∙ txIns ≢ ∅ ∙ txIns ∪ refInputs ⊆ dom utxo ∙ txIns ∩ refInputs ≡ ∅ ∙ L.inInterval slot txVldt ∙ L.minfee pp utxo tx ≤ txFee ∙ (txrdmrs ˢ ≢ ∅ → L.collateralCheck pp tx utxo) ∙ consumed pp s txb ≡ produced pp s txb ∙ coin mint ≡ 0 ∙ (∅ᵐ ≢ᵐ txrdmrs × nothing ≢ proj₂ txVldt → map epochInfoSlotToUTCTime (proj₂ txVldt) ≢ nothing ) ∙ txsize ≤ maxTxSize pp ∙ L.refScriptsSize utxo tx ≤ pp .maxRefScriptSizePerTx ∙ ∀[ (_ , txout) ∈ ∣ txOutsʰ ∣ ] inject ((overhead + L.utxoEntrySize txout) * coinsPerUTxOByte pp) ≤ᵗ getValueʰ txout ∙ ∀[ (_ , txout) ∈ ∣ txOutsʰ ∣ ] serSize (getValueʰ txout) ≤ maxValSize pp ∙ ∀[ (a , _) ∈ range txOutsʰ ] Sum.All (const ⊤) (λ a → a .BootstrapAddr.attrsSize ≤ 64) a ∙ ∀[ (a , _) ∈ range txOutsʰ ] netId a ≡ NetworkId ∙ ∀[ a ∈ dom txWithdrawals ] NetworkIdOf a ≡ NetworkId ∙ txNetworkId ~ just NetworkId ∙ currentTreasury ~ just treasury ∙ Γ ⊢ s ⇀⦇ tx ,UTXOS⦈ s' ──────────────────────────────── Γ ⊢ s ⇀⦇ tx ,UTXO⦈ s' pattern UTXO-inductive⋯ tx Γ s x y z w k l m c d v j n o p q r t u h = UTXO-inductive {tx}{Γ}{s} (x , y , z , w , k , l , m , c , d , v , j , n , o , p , q , r , t , u , h) unquoteDecl UTXO-premises = genPremises UTXO-premises (quote UTXO-inductive)