{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-} module Test.Cardano.Ledger.Conformance.SpecTranslate.Conway.Pool where import Cardano.Ledger.BaseTypes (Network (Testnet)) import Cardano.Ledger.Conway (ConwayEra) import Cardano.Ledger.Core import qualified Cardano.Ledger.Shelley.Rules as Shelley import Cardano.Ledger.State import qualified Data.Map.Strict as Map import qualified MAlonzo.Code.Ledger.Conway.Foreign.API as Agda import Test.Cardano.Ledger.Conformance.SpecTranslate.Base ( SpecTranslate (SpecRep, toSpecRep), toSpecRepMap, ) import Test.Cardano.Ledger.Conformance.SpecTranslate.Conway.Base () instance SpecTranslate ConwayEra (Shelley.PoolEnv ConwayEra) where type SpecRep ConwayEra (Shelley.PoolEnv ConwayEra) = Agda.PParams toSpecRep :: PoolEnv ConwayEra -> SpecTransM ConwayEra (SpecContext ConwayEra (PoolEnv ConwayEra)) (SpecRep ConwayEra (PoolEnv ConwayEra)) toSpecRep (Shelley.PoolEnv EpochNo _ PParams ConwayEra pp) = PParams ConwayEra -> SpecTransM ConwayEra (SpecContext ConwayEra (PParams ConwayEra)) (SpecRep ConwayEra (PParams ConwayEra)) forall era a. SpecTranslate era a => a -> SpecTransM era (SpecContext era a) (SpecRep era a) toSpecRep PParams ConwayEra pp instance SpecTranslate ConwayEra (PState ConwayEra) where type SpecRep ConwayEra (PState ConwayEra) = Agda.PState toSpecRep :: PState ConwayEra -> SpecTransM ConwayEra (SpecContext ConwayEra (PState ConwayEra)) (SpecRep ConwayEra (PState ConwayEra)) toSpecRep PState {Map (KeyHash StakePool) StakePoolParams Map (KeyHash StakePool) StakePoolState Map (KeyHash StakePool) EpochNo Map (VRFVerKeyHash StakePoolVRF) (NonZero Word64) psVRFKeyHashes :: Map (VRFVerKeyHash StakePoolVRF) (NonZero Word64) psStakePools :: Map (KeyHash StakePool) StakePoolState psFutureStakePoolParams :: Map (KeyHash StakePool) StakePoolParams psRetiring :: Map (KeyHash StakePool) EpochNo psFutureStakePoolParams :: forall era. PState era -> Map (KeyHash StakePool) StakePoolParams psRetiring :: forall era. PState era -> Map (KeyHash StakePool) EpochNo psStakePools :: forall era. PState era -> Map (KeyHash StakePool) StakePoolState psVRFKeyHashes :: forall era. PState era -> Map (VRFVerKeyHash StakePoolVRF) (NonZero Word64) ..} = HSMap Integer StakePoolParams -> HSMap Integer StakePoolParams -> HSMap Integer Integer -> PState Agda.MkPState (HSMap Integer StakePoolParams -> HSMap Integer StakePoolParams -> HSMap Integer Integer -> PState) -> SpecTransM ConwayEra () (HSMap Integer StakePoolParams) -> SpecTransM ConwayEra () (HSMap Integer StakePoolParams -> HSMap Integer Integer -> PState) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Map (KeyHash StakePool) StakePoolParams -> SpecTransM ConwayEra () (HSMap (SpecRep ConwayEra (KeyHash StakePool)) (SpecRep ConwayEra StakePoolParams)) forall era k v ctx. (SpecTranslate era k, SpecTranslate era v, SpecContext era k ~ ctx, SpecContext era v ~ ctx) => Map k v -> SpecTransM era ctx (HSMap (SpecRep era k) (SpecRep era v)) toSpecRepMap ((KeyHash StakePool -> StakePoolState -> StakePoolParams) -> Map (KeyHash StakePool) StakePoolState -> Map (KeyHash StakePool) StakePoolParams forall k a b. (k -> a -> b) -> Map k a -> Map k b Map.mapWithKey (Network -> KeyHash StakePool -> StakePoolState -> StakePoolParams stakePoolStateToStakePoolParams Network Testnet) Map (KeyHash StakePool) StakePoolState psStakePools) SpecTransM ConwayEra () (HSMap Integer StakePoolParams -> HSMap Integer Integer -> PState) -> SpecTransM ConwayEra () (HSMap Integer StakePoolParams) -> SpecTransM ConwayEra () (HSMap Integer Integer -> PState) forall a b. SpecTransM ConwayEra () (a -> b) -> SpecTransM ConwayEra () a -> SpecTransM ConwayEra () b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Map (KeyHash StakePool) StakePoolParams -> SpecTransM ConwayEra () (HSMap (SpecRep ConwayEra (KeyHash StakePool)) (SpecRep ConwayEra StakePoolParams)) forall era k v ctx. (SpecTranslate era k, SpecTranslate era v, SpecContext era k ~ ctx, SpecContext era v ~ ctx) => Map k v -> SpecTransM era ctx (HSMap (SpecRep era k) (SpecRep era v)) toSpecRepMap Map (KeyHash StakePool) StakePoolParams psFutureStakePoolParams SpecTransM ConwayEra () (HSMap Integer Integer -> PState) -> SpecTransM ConwayEra () (HSMap Integer Integer) -> SpecTransM ConwayEra () PState forall a b. SpecTransM ConwayEra () (a -> b) -> SpecTransM ConwayEra () a -> SpecTransM ConwayEra () b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Map (KeyHash StakePool) EpochNo -> SpecTransM ConwayEra () (HSMap (SpecRep ConwayEra (KeyHash StakePool)) (SpecRep ConwayEra EpochNo)) forall era k v ctx. (SpecTranslate era k, SpecTranslate era v, SpecContext era k ~ ctx, SpecContext era v ~ ctx) => Map k v -> SpecTransM era ctx (HSMap (SpecRep era k) (SpecRep era v)) toSpecRepMap Map (KeyHash StakePool) EpochNo psRetiring instance SpecTranslate ConwayEra PoolCert where type SpecRep ConwayEra PoolCert = Agda.DCert toSpecRep :: PoolCert -> SpecTransM ConwayEra (SpecContext ConwayEra PoolCert) (SpecRep ConwayEra PoolCert) toSpecRep (RegPool p :: StakePoolParams p@StakePoolParams {sppId :: StakePoolParams -> KeyHash StakePool sppId = KeyHash Hash ADDRHASH (VerKeyDSIGN DSIGN) ppHash}) = Integer -> StakePoolParams -> DCert Agda.Regpool (Integer -> StakePoolParams -> DCert) -> SpecTransM ConwayEra () Integer -> SpecTransM ConwayEra () (StakePoolParams -> DCert) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Hash ADDRHASH (VerKeyDSIGN DSIGN) -> SpecTransM ConwayEra (SpecContext ConwayEra (Hash ADDRHASH (VerKeyDSIGN DSIGN))) (SpecRep ConwayEra (Hash ADDRHASH (VerKeyDSIGN DSIGN))) forall era a. SpecTranslate era a => a -> SpecTransM era (SpecContext era a) (SpecRep era a) toSpecRep Hash ADDRHASH (VerKeyDSIGN DSIGN) ppHash SpecTransM ConwayEra () (StakePoolParams -> DCert) -> SpecTransM ConwayEra () StakePoolParams -> SpecTransM ConwayEra () DCert forall a b. SpecTransM ConwayEra () (a -> b) -> SpecTransM ConwayEra () a -> SpecTransM ConwayEra () b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> StakePoolParams -> SpecTransM ConwayEra (SpecContext ConwayEra StakePoolParams) (SpecRep ConwayEra StakePoolParams) forall era a. SpecTranslate era a => a -> SpecTransM era (SpecContext era a) (SpecRep era a) toSpecRep StakePoolParams p toSpecRep (RetirePool (KeyHash Hash ADDRHASH (VerKeyDSIGN DSIGN) ppHash) EpochNo e) = Integer -> Integer -> DCert Agda.Retirepool (Integer -> Integer -> DCert) -> SpecTransM ConwayEra () Integer -> SpecTransM ConwayEra () (Integer -> DCert) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Hash ADDRHASH (VerKeyDSIGN DSIGN) -> SpecTransM ConwayEra (SpecContext ConwayEra (Hash ADDRHASH (VerKeyDSIGN DSIGN))) (SpecRep ConwayEra (Hash ADDRHASH (VerKeyDSIGN DSIGN))) forall era a. SpecTranslate era a => a -> SpecTransM era (SpecContext era a) (SpecRep era a) toSpecRep Hash ADDRHASH (VerKeyDSIGN DSIGN) ppHash SpecTransM ConwayEra () (Integer -> DCert) -> SpecTransM ConwayEra () Integer -> SpecTransM ConwayEra () DCert forall a b. SpecTransM ConwayEra () (a -> b) -> SpecTransM ConwayEra () a -> SpecTransM ConwayEra () b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> EpochNo -> SpecTransM ConwayEra (SpecContext ConwayEra EpochNo) (SpecRep ConwayEra EpochNo) forall era a. SpecTranslate era a => a -> SpecTransM era (SpecContext era a) (SpecRep era a) toSpecRep EpochNo e