{-# OPTIONS --safe #-} open import Ledger.Prelude open import Ledger.Conway.Crypto open import Ledger.Conway.Abstract open import Ledger.Conway.Transaction module Ledger.Conway.Conformance.Utxow (txs : _) (open TransactionStructure txs) (abs : AbstractFunctions txs) (open AbstractFunctions abs) where open import Ledger.Conway.Conformance.Utxo txs abs open import Ledger.Conway.Script.Validation txs abs open import Ledger.Conway.Certs govStructure private module L where open import Ledger.Conway.Utxow txs abs public open import Ledger.Conway.Utxo txs abs public data _⊢_⇀⦇_,UTXOW⦈_ : UTxOEnv → UTxOState → Tx → UTxOState → Type private variable Γ : UTxOEnv s s' : UTxOState tx : Tx data _⊢_⇀⦇_,UTXOW⦈_ where UTXOW-inductive : let open Tx tx renaming (body to txb); open TxBody txb; open TxWitnesses wits open UTxOState s witsKeyHashes = mapˢ hash (dom vkSigs) witsScriptHashes = mapˢ hash scripts refScriptHashes = mapˢ hash (refScripts tx utxo) neededScriptHashes = mapPartial (isScriptObj ∘ proj₂) (credsNeeded utxo txb) neededVKeyHashes = mapPartial (isKeyHashObj ∘ proj₂) (credsNeeded utxo txb) txdatsHashes = mapˢ hash txdats inputsDataHashes = mapPartial (λ txout → if txOutToP2Script utxo tx txout then txOutToDataHash txout else nothing) (range (utxo ∣ txins)) refInputsDataHashes = mapPartial txOutToDataHash (range (utxo ∣ refInputs)) outputsDataHashes = mapPartial txOutToDataHash (range txouts) nativeScripts = mapPartial toP1Script (txscripts tx utxo) in ∙ ∀[ (vk , σ) ∈ vkSigs ] isSigned vk (txidBytes txid) σ ∙ ∀[ s ∈ nativeScripts ] (hash s ∈ neededScriptHashes → validP1Script witsKeyHashes txvldt s) ∙ neededVKeyHashes ⊆ witsKeyHashes ∙ neededScriptHashes - refScriptHashes ≡ᵉ witsScriptHashes ∙ inputsDataHashes ⊆ txdatsHashes ∙ txdatsHashes ⊆ inputsDataHashes ∪ outputsDataHashes ∪ refInputsDataHashes ∙ L.languages tx utxo ⊆ L.allowedLanguages tx utxo ∙ txADhash ≡ map hash txAD ∙ Γ ⊢ s ⇀⦇ tx ,UTXO⦈ s' ──────────────────────────────── Γ ⊢ s ⇀⦇ tx ,UTXOW⦈ s' pattern UTXOW-inductive⋯ p₁ p₂ p₃ p₄ p₅ p₆ p₇ p₈ h = UTXOW-inductive (p₁ , p₂ , p₃ , p₄ , p₅ , p₆ , p₇ , p₈ , h) pattern UTXOW⇒UTXO x = UTXOW-inductive⋯ _ _ _ _ _ _ _ _ x unquoteDecl UTXOW-inductive-premises = genPremises UTXOW-inductive-premises (quote UTXOW-inductive)