Chain
module Ledger.Dijkstra.Foreign.Chain where import Data.String as S open import Foreign.Convertible open import Foreign.Convertible.Deriving open import Foreign.HaskellTypes open import Foreign.HaskellTypes.Deriving open import Ledger.Prelude open import Ledger.Prelude.Foreign.Util open import Ledger.Prelude.Foreign.HSTypes open import Ledger.Core.Foreign.Address open import Ledger.Core.Foreign.Crypto.Base open import Ledger.Dijkstra.Foreign.HSStructures open import Ledger.Dijkstra.Foreign.PParams open import Ledger.Dijkstra.Foreign.Cert open import Ledger.Dijkstra.Foreign.Enact open import Ledger.Dijkstra.Foreign.Gov open import Ledger.Dijkstra.Foreign.Ratify open import Ledger.Dijkstra.Foreign.Rewards open import Ledger.Dijkstra.Foreign.Utxo open import Ledger.Dijkstra.Foreign.Ledger open import Ledger.Dijkstra.Foreign.NewEpoch open import Ledger.Dijkstra.Foreign.Transaction open import Ledger.Dijkstra.Specification.Chain it DummyAbstractFunctions open import Ledger.Dijkstra.Specification.Chain.Properties.Computational it DummyAbstractFunctions open Computational instance HsTy-BHBody = autoHsType BHBody ⊣ withConstructor "MkBHBody" • fieldPrefix "bhb" Conv-BHBody = autoConvert BHBody HsTy-BHeader = autoHsType BHeader ⊣ withConstructor "MkBHeader" • fieldPrefix "bh" Conv-BHeader = autoConvert BHeader record HSBlock : Type where field bheader : BHeader ts : List TopLevelTx bBodySize : ℕ bBodyHash : KeyHash open HSBlock instance Conv-Block-HSBlock : Convertible Block HSBlock Conv-Block-HSBlock .to b = record { Block b } Conv-Block-HSBlock .from b with bBodySize b ≟ BHBody.hBbsize (BHeader.bhbody (bheader b)) ... | no _ = error $ "bBodySize check failed: " S.++ show (bBodySize b) S.++ " ≠ " S.++ show (BHBody.hBbsize (BHeader.bhbody (bheader b))) ... | yes p with bBodyHash b ≟ BHBody.bhash (BHeader.bhbody (bheader b)) ... | no _ = error $ "BBodyHash check failed: " S.++ show (bBodyHash b) S.++ " ≠ " S.++ show (BHBody.bhash (BHeader.bhbody (bheader b))) ... | yes q = record { bheader = bheader b ; ts = ts b ; bBodySize = bBodySize b ; ≡-bBodySize = p ; ≡-bBodyHash = q } HsTy-HSBlock = autoHsType HSBlock ⊣ withName "Block" • withConstructor "MkBlock" • fieldPrefix "b" Conv-HSBlock = autoConvert HSBlock HsTy-Block = MkHsType Block (HsType HSBlock) Conv-Block = Conv-Block-HSBlock ⨾ Conv-HSBlock HsTy-ChainState = autoHsType ChainState ⊣ withConstructor "MkChainState" • fieldPrefix "cs" Conv-ChainState = autoConvert ChainState chain-step : HsType (⊤ → ChainState → Block → ComputationResult String ChainState) chain-step = to (compute Computational-CHAIN) {-# COMPILE GHC chain-step as chainStep #-}