module Ledger.Conway.Foreign.HSLedger.Certs where
open import Ledger.Conway.Foreign.HSLedger.Address
open import Ledger.Conway.Foreign.HSLedger.BaseTypes renaming (⟦_,_,_⟧ᵈ to ⟦_,_,_⟧ᵈ'; DState to DState'
; ⟦_,_⟧ᵛ to ⟦_,_⟧ᵛ'; GState to GState') hiding (CertEnv)
open import Ledger.Conway.Foreign.HSLedger.Gov.Core
open import Ledger.Conway.Foreign.HSLedger.PParams
open import Ledger.Conway.Conformance.Certs govStructure using (⟦_,_,_,_⟧ᵈ; ⟦_,_,_⟧ᵛ; DState; GState; CertEnv)
open import Ledger.Conway.Specification.Certs.Properties.Computational govStructure
using (Computational-POOL)
open import Ledger.Conway.Conformance.Certs.Properties govStructure
using ( Computational-DELEG
; Computational-GOVCERT
)
instance
HsTy-StakePoolParams = autoHsType StakePoolParams
Conv-StakePoolParams = autoConvert StakePoolParams
HsTy-DepositPurpose = autoHsType DepositPurpose
Conv-DepositPurpose = autoConvert DepositPurpose
HsTy-DelegEnv = autoHsType DelegEnv
⊣ withConstructor "MkDelegEnv"
• fieldPrefix "de"
• withName "DelegEnv"
Conv-DelegEnv = autoConvert DelegEnv
HsTy-PState = autoHsType PState
⊣ withConstructor "MkPState"
• fieldPrefix "ps"
Conv-PState = autoConvert PState
record CertEnv' : Type where
field
epoch : Epoch
pp : PParams
votes : List GovVote'
wdrls : RewardAddress ⇀ Coin
coldCreds : ℙ Credential
instance
HsTy-CertEnv' = autoHsType CertEnv'
⊣ withConstructor "MkCertEnv"
• withName "CertEnv"
• fieldPrefix "ce"
Conv-CertEnv' = autoConvert CertEnv'
mkCertEnv' : Convertible CertEnv CertEnv'
mkCertEnv' = λ where
.to ce → let module ce = CertEnv ce in record { epoch = ce.epoch ; pp = ce.pp ; votes = to ce.votes ; wdrls = ce.wdrls ; coldCreds = ce.coldCreds }
.from ce → let module ce = CertEnv' ce in record { epoch = ce.epoch ; pp = ce.pp ; votes = from ce.votes ; wdrls = ce.wdrls ; coldCreds = ce.coldCreds }
HsTy-CertEnv = MkHsType CertEnv (HsType CertEnv')
Conv-CertEnv = mkCertEnv' ⨾ Conv-CertEnv'
instance
HsTy-DState = autoHsType DState
⊣ withConstructor "MkDState"
• withName "DState"
• fieldPrefix "ds"
Conv-DState = autoConvert DState
HsTy-DCert = autoHsType DCert
Conv-DCert = autoConvert DCert
HsTy-GState = autoHsType GState
⊣ withConstructor "MkGState"
• fieldPrefix "gs"
Conv-GState = autoConvert GState
Conv-DState-DState' : Convertible DState DState'
Conv-DState-DState' .to $\begin{pmatrix} \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2556}{\htmlId{2556}{\htmlClass{Bound}{\text{voteDelegs}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2569}{\htmlId{2569}{\htmlClass{Bound}{\text{stakeDelegs}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2583}{\htmlId{2583}{\htmlClass{Bound}{\text{rewards}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2593}{\htmlId{2593}{\htmlClass{Bound}{\text{deposits}}}}\, \end{pmatrix}$ = $\begin{pmatrix} \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2556}{\htmlId{2609}{\htmlClass{Bound}{\text{voteDelegs}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2569}{\htmlId{2622}{\htmlClass{Bound}{\text{stakeDelegs}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2569}{\htmlId{2636}{\htmlClass{Bound}{\text{stakeDelegs}}}}\, \end{pmatrix}$
Conv-DState-DState' .from $\begin{pmatrix} \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2682}{\htmlId{2682}{\htmlClass{Bound}{\text{voteDelegs}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2695}{\htmlId{2695}{\htmlClass{Bound}{\text{stakeDelegs}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2709}{\htmlId{2709}{\htmlClass{Bound}{\text{rewards}}}}\, \end{pmatrix}$ = $\begin{pmatrix} \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2682}{\htmlId{2733}{\htmlClass{Bound}{\text{voteDelegs}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2695}{\htmlId{2746}{\htmlClass{Bound}{\text{stakeDelegs}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2695}{\htmlId{2760}{\htmlClass{Bound}{\text{stakeDelegs}}}}\, \\ \,\href{Class.HasEmptySet.html#287}{\htmlId{2774}{\htmlClass{Field}{\text{∅}}}}\, \end{pmatrix}$
Conv-GState-GState' : Convertible GState GState'
Conv-GState-GState' .to $\begin{pmatrix} \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2859}{\htmlId{2859}{\htmlClass{Bound}{\text{dreps}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2867}{\htmlId{2867}{\htmlClass{Bound}{\text{ccHotKeys}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2879}{\htmlId{2879}{\htmlClass{Bound}{\text{deposits}}}}\, \end{pmatrix}$ = $\begin{pmatrix} \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2859}{\htmlId{2895}{\htmlClass{Bound}{\text{dreps}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2867}{\htmlId{2903}{\htmlClass{Bound}{\text{ccHotKeys}}}}\, \end{pmatrix}$
Conv-GState-GState' .from $\begin{pmatrix} \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2947}{\htmlId{2947}{\htmlClass{Bound}{\text{dreps}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2955}{\htmlId{2955}{\htmlClass{Bound}{\text{ccHotKeys}}}}\, \end{pmatrix}$ = $\begin{pmatrix} \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2947}{\htmlId{2981}{\htmlClass{Bound}{\text{dreps}}}}\, \\ \,\href{Ledger.Conway.Foreign.HSLedger.Certs.html#2955}{\htmlId{2989}{\htmlClass{Bound}{\text{ccHotKeys}}}}\, \\ \,\href{Class.HasEmptySet.html#287}{\htmlId{3001}{\htmlClass{Field}{\text{∅}}}}\, \end{pmatrix}$
deleg-step : HsType (DelegEnv → DState → DCert → ComputationResult String DState)
deleg-step = to (compute Computational-DELEG)
{-# COMPILE GHC deleg-step as delegStep #-}
pool-step : HsType (PParams → PState → DCert → ComputationResult String PState)
pool-step = to (compute Computational-POOL)
{-# COMPILE GHC pool-step as poolStep #-}
govcert-step : HsType (CertEnv → GState → DCert → ComputationResult String GState)
govcert-step = to (compute Computational-GOVCERT)
{-# COMPILE GHC govcert-step as govCertStep #-}