{-# LANGUAGE DataKinds #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-} module Test.Cardano.Ledger.Conformance.ExecSpecRule.Conway.Gov () where import Cardano.Ledger.Conway (ConwayEra) import Cardano.Ledger.Conway.Core (EraPParams (..)) import Cardano.Ledger.Conway.Governance import qualified Cardano.Ledger.Conway.Rules as Conway import Control.State.Transition.Extended (TRC (..)) import Lens.Micro ((&), (.~), (^.)) import qualified MAlonzo.Code.Ledger.Conway.Foreign.API as Agda import Test.Cardano.Ledger.Conformance.ExecSpecRule.Conway.Base () import Test.Cardano.Ledger.Conformance.ExecSpecRule.Core ( ExecSpecRule (ExecContext, runAgdaRule, translateInputs), SpecTRC (SpecTRC), ) import Test.Cardano.Ledger.Conformance.SpecTranslate.Base ( SpecTranslate (toSpecRep), askSpecTransM, unComputationResult, withCtxSpecTransM, ) import Test.Cardano.Ledger.Conway.Arbitrary () instance ExecSpecRule "GOV" ConwayEra where type ExecContext "GOV" ConwayEra = EnactState ConwayEra runAgdaRule :: HasCallStack => SpecTRC "GOV" ConwayEra -> Either Text (SpecState "GOV" ConwayEra) runAgdaRule (SpecTRC SpecEnvironment "GOV" ConwayEra env SpecState "GOV" ConwayEra st SpecSignal "GOV" ConwayEra sig) = ComputationResult Text GovState -> Either Text GovState forall a. ComputationResult Text a -> Either Text a unComputationResult (ComputationResult Text GovState -> Either Text GovState) -> ComputationResult Text GovState -> Either Text GovState forall a b. (a -> b) -> a -> b $ GovEnv -> GovState -> [Either GovVote GovProposal] -> ComputationResult Text GovState Agda.govStep GovEnv SpecEnvironment "GOV" ConwayEra env GovState SpecState "GOV" ConwayEra st [Either GovVote GovProposal] SpecSignal "GOV" ConwayEra sig translateInputs :: HasCallStack => TRC (EraRule "GOV" ConwayEra) -> SpecTransM ConwayEra (ExecContext "GOV" ConwayEra) (SpecTRC "GOV" ConwayEra) translateInputs (TRC (env :: Environment (EraRule "GOV" ConwayEra) env@Conway.GovEnv {PParams ConwayEra gePParams :: PParams ConwayEra gePParams :: forall era. GovEnv era -> PParams era Conway.gePParams}, State (EraRule "GOV" ConwayEra) st, Signal (EraRule "GOV" ConwayEra) sig)) = do enactState <- SpecTransM ConwayEra (EnactState ConwayEra) (EnactState ConwayEra) forall era ctx. SpecTransM era ctx ctx askSpecTransM let ctx = EnactState ConwayEra enactState EnactState ConwayEra -> (EnactState ConwayEra -> EnactState ConwayEra) -> EnactState ConwayEra forall a b. a -> (a -> b) -> b & (GovRelation StrictMaybe -> Identity (GovRelation StrictMaybe)) -> EnactState ConwayEra -> Identity (EnactState ConwayEra) forall era (f :: * -> *). Functor f => (GovRelation StrictMaybe -> f (GovRelation StrictMaybe)) -> EnactState era -> f (EnactState era) ensPrevGovActionIdsL ((GovRelation StrictMaybe -> Identity (GovRelation StrictMaybe)) -> EnactState ConwayEra -> Identity (EnactState ConwayEra)) -> GovRelation StrictMaybe -> EnactState ConwayEra -> EnactState ConwayEra forall s t a b. ASetter s t a b -> b -> s -> t .~ GovRelation PRoot -> GovRelation StrictMaybe toPrevGovActionIds (Proposals ConwayEra State (EraRule "GOV" ConwayEra) st Proposals ConwayEra -> Getting (GovRelation PRoot) (Proposals ConwayEra) (GovRelation PRoot) -> GovRelation PRoot forall s a. s -> Getting a s a -> a ^. Getting (GovRelation PRoot) (Proposals ConwayEra) (GovRelation PRoot) forall era (f :: * -> *). Functor f => (GovRelation PRoot -> f (GovRelation PRoot)) -> Proposals era -> f (Proposals era) pRootsL) EnactState ConwayEra -> (EnactState ConwayEra -> EnactState ConwayEra) -> EnactState ConwayEra forall a b. a -> (a -> b) -> b & (ProtVer -> Identity ProtVer) -> EnactState ConwayEra -> Identity (EnactState ConwayEra) forall era. EraPParams era => Lens' (EnactState era) ProtVer Lens' (EnactState ConwayEra) ProtVer ensProtVerL ((ProtVer -> Identity ProtVer) -> EnactState ConwayEra -> Identity (EnactState ConwayEra)) -> ProtVer -> EnactState ConwayEra -> EnactState ConwayEra forall s t a b. ASetter s t a b -> b -> s -> t .~ (PParams ConwayEra gePParams PParams ConwayEra -> Getting ProtVer (PParams ConwayEra) ProtVer -> ProtVer forall s a. s -> Getting a s a -> a ^. Getting ProtVer (PParams ConwayEra) ProtVer forall era. EraPParams era => Lens' (PParams era) ProtVer Lens' (PParams ConwayEra) ProtVer ppProtocolVersionL) agdaEnv <- withCtxSpecTransM ctx $ toSpecRep env agdaSt <- withCtxSpecTransM () $ toSpecRep st agdaSig <- withCtxSpecTransM () $ toSpecRep sig pure $ SpecTRC agdaEnv agdaSt agdaSig