open import Ledger.Core.Foreign.ExternalFunctions
module Ledger.Conway.Foreign.Script.Structure
(externalFunctions : ExternalFunctions)
where
open import Algebra.Construct.DirectProduct using (commutativeMonoid)
open import Algebra.Morphism using (module MonoidMorphisms)
open import Data.Nat.Properties using (+-0-commutativeMonoid)
open import Foreign.HaskellTypes.Deriving
open import Foreign.Convertible.Deriving
open import Tactic.Derive.Show
open import Ledger.Prelude
open import Ledger.Core.Foreign.Crypto as Crypto
open import Ledger.Core.Foreign.Crypto
open import Ledger.Core.Foreign.Epoch
open import Ledger.Conway.Foreign.Script.Base
instance
_ = HSCryptoStructure externalFunctions
_ = HSEpochStructure
_ = HSGlobalConstants
open import Ledger.Conway.Specification.Script.Base it it
open import Ledger.Conway.Specification.Script.Timelock it it public
record HSTimelock : Type where
field
timelock : Timelock
tlScriptHash : ℕ
tlScriptSize : ℕ
instance
Hashable-HSTimelock : Hashable HSTimelock ℕ
Hashable-HSTimelock .hash = HSTimelock.tlScriptHash
unquoteDecl DecEq-HSTimelock = derive-DecEq ((quote HSTimelock , DecEq-HSTimelock) ∷ [])
HSP1ScriptStructure : P1ScriptStructure
HSP1ScriptStructure = record
{ P1Script = HSTimelock
; validP1Script = λ x y → evalTimelock x y ∘ HSTimelock.timelock }
record HSPlutusScript : Type where
constructor MkHSPlutusScript
field psScriptHash : ℕ
psScriptSize : ℕ
psScriptLanguage : HSLanguage
HSP2ScriptStructure : PlutusStructure
HSP2ScriptStructure = record {
Dataʰ = HashableSet-ℕ
; CostModel = ⊤
; Prices = ⊤
; LangDepView = ⊤
; ExUnits = ℕ × ℕ
; Language = HSLanguage
; PlutusV1 = PV1
; PlutusV2 = PV2
; PlutusV3 = PV3
; language = λ z → HSPlutusScript.psScriptLanguage z
; validPlutusScript = λ _ _ _ _ → extValidPlutusScript ≡ true
; PlutusScript = HSPlutusScript
; _≥ᵉ_ = _≡_
}
where
open ExternalFunctions externalFunctions
instance
Hashable-HSPlutusScript : Hashable HSPlutusScript ℕ
Hashable-HSPlutusScript .hash = HSPlutusScript.psScriptHash
_ = Conversion.fromBundle (commutativeMonoid +-0-commutativeMonoid +-0-commutativeMonoid)
_ = Show-×
HSScriptStructure : ScriptStructure
HSScriptStructure = record
{ p1s = HSP1ScriptStructure
; hashRespectsUnion = hashRespectsUnion
; ps = HSP2ScriptStructure
}
where
hashRespectsUnion : ∀ {A B ℍ}
→ Hashable A ℍ → Hashable B ℍ
→ Hashable (A ⊎ B) ℍ
hashRespectsUnion a _ .hash (inj₁ x) = hash ⦃ a ⦄ x
hashRespectsUnion _ b .hash (inj₂ y) = hash ⦃ b ⦄ y