{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedLists #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} module Test.Cardano.Ledger.Conway.Imp.GovCertSpec (spec) where import Cardano.Ledger.BaseTypes (EpochInterval (..), Mismatch (..)) import Cardano.Ledger.Coin (Coin (..)) import Cardano.Ledger.Conway.Core import Cardano.Ledger.Conway.Rules (ConwayGovCertPredFailure (..), ConwayGovPredFailure (..)) import Cardano.Ledger.Credential (Credential (..)) import Cardano.Ledger.Shelley.LedgerState (curPParamsEpochStateL, nesEsL) import Cardano.Ledger.Val (Val (..)) import Data.Maybe.Strict (StrictMaybe (..)) import qualified Data.Sequence.Strict as SSeq import Lens.Micro ((&), (.~)) import Test.Cardano.Ledger.Conway.Arbitrary () import Test.Cardano.Ledger.Conway.ImpTest import Test.Cardano.Ledger.Core.Rational (IsRatio (..)) import Test.Cardano.Ledger.Imp.Common spec :: forall era. ( ConwayEraImp era , InjectRuleFailure "LEDGER" ConwayGovCertPredFailure era , InjectRuleFailure "LEDGER" ConwayGovPredFailure era ) => SpecWith (ImpInit (LedgerSpec era)) spec :: forall era. (ConwayEraImp era, InjectRuleFailure "LEDGER" ConwayGovCertPredFailure era, InjectRuleFailure "LEDGER" ConwayGovPredFailure era) => SpecWith (ImpInit (LedgerSpec era)) spec = do String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "Resigning proposed CC key" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do Credential 'ColdCommitteeRole ccColdCred <- KeyHash 'ColdCommitteeRole -> Credential 'ColdCommitteeRole forall (kr :: KeyRole). KeyHash kr -> Credential kr KeyHashObj (KeyHash 'ColdCommitteeRole -> Credential 'ColdCommitteeRole) -> ImpM (LedgerSpec era) (KeyHash 'ColdCommitteeRole) -> ImpM (LedgerSpec era) (Credential 'ColdCommitteeRole) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ImpM (LedgerSpec era) (KeyHash 'ColdCommitteeRole) forall (r :: KeyRole) s g (m :: * -> *). (HasKeyPairs s, MonadState s m, HasStatefulGen g m) => m (KeyHash r) freshKeyHash ProposalProcedure era proposal <- Maybe (StrictMaybe (GovPurposeId 'CommitteePurpose era)) -> Set (Credential 'ColdCommitteeRole) -> [(Credential 'ColdCommitteeRole, EpochInterval)] -> UnitInterval -> ImpTestM era (ProposalProcedure era) forall era. ConwayEraImp era => Maybe (StrictMaybe (GovPurposeId 'CommitteePurpose era)) -> Set (Credential 'ColdCommitteeRole) -> [(Credential 'ColdCommitteeRole, EpochInterval)] -> UnitInterval -> ImpTestM era (ProposalProcedure era) mkUpdateCommitteeProposal Maybe (StrictMaybe (GovPurposeId 'CommitteePurpose era)) forall a. Maybe a Nothing Set (Credential 'ColdCommitteeRole) forall a. Monoid a => a mempty [(Credential 'ColdCommitteeRole ccColdCred, Word32 -> EpochInterval EpochInterval Word32 1234)] (Integer 1 Integer -> Integer -> UnitInterval forall r. (IsRatio r, HasCallStack) => Integer -> Integer -> r %! Integer 2) Maybe GovActionId mbGovId <- ProposalProcedure era -> SubmitFailureExpectation era -> ImpTestM era (Maybe GovActionId) forall era. ConwayEraImp era => ProposalProcedure era -> SubmitFailureExpectation era -> ImpTestM era (Maybe GovActionId) submitBootstrapAwareFailingProposal ProposalProcedure era proposal (SubmitFailureExpectation era -> ImpTestM era (Maybe GovActionId)) -> SubmitFailureExpectation era -> ImpTestM era (Maybe GovActionId) forall a b. (a -> b) -> a -> b $ NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> SubmitFailureExpectation era forall era. NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> SubmitFailureExpectation era FailBootstrap [ConwayGovPredFailure era -> EraRuleFailure "LEDGER" era forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure (ConwayGovPredFailure era -> EraRuleFailure "LEDGER" era) -> ConwayGovPredFailure era -> EraRuleFailure "LEDGER" era forall a b. (a -> b) -> a -> b $ ProposalProcedure era -> ConwayGovPredFailure era forall era. ProposalProcedure era -> ConwayGovPredFailure era DisallowedProposalDuringBootstrap ProposalProcedure era proposal] Maybe GovActionId -> (GovActionId -> ImpM (LedgerSpec era) ()) -> ImpM (LedgerSpec era) () forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => t a -> (a -> m b) -> m () forM_ Maybe GovActionId mbGovId ((GovActionId -> ImpM (LedgerSpec era) ()) -> ImpM (LedgerSpec era) ()) -> (GovActionId -> ImpM (LedgerSpec era) ()) -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ \GovActionId _ -> Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> ImpTestM era () submitTx_ ( TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'ColdCommitteeRole -> StrictMaybe Anchor -> TxCert era forall era. ConwayEraTxCert era => Credential 'ColdCommitteeRole -> StrictMaybe Anchor -> TxCert era ResignCommitteeColdTxCert Credential 'ColdCommitteeRole ccColdCred StrictMaybe Anchor forall a. StrictMaybe a SNothing) ) String -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "succeeds for" (SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ do String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "registering and unregistering a DRep" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall era. ShelleyEraImp era => (PParams era -> PParams era) -> ImpTestM era () modifyPParams ((PParams era -> PParams era) -> ImpM (LedgerSpec era) ()) -> (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ (Coin -> Identity Coin) -> PParams era -> Identity (PParams era) forall era. ConwayEraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppDRepDepositL ((Coin -> Identity Coin) -> PParams era -> Identity (PParams era)) -> Coin -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Integer -> Coin Coin Integer 100 Credential 'DRepRole drepCred <- KeyHash 'DRepRole -> Credential 'DRepRole forall (kr :: KeyRole). KeyHash kr -> Credential kr KeyHashObj (KeyHash 'DRepRole -> Credential 'DRepRole) -> ImpM (LedgerSpec era) (KeyHash 'DRepRole) -> ImpM (LedgerSpec era) (Credential 'DRepRole) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ImpM (LedgerSpec era) (KeyHash 'DRepRole) forall (r :: KeyRole) s g (m :: * -> *). (HasKeyPairs s, MonadState s m, HasStatefulGen g m) => m (KeyHash r) freshKeyHash Coin drepDeposit <- SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES (SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin) -> SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall a b. (a -> b) -> a -> b $ (EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era) forall era (f :: * -> *). Functor f => (EpochState era -> f (EpochState era)) -> NewEpochState era -> f (NewEpochState era) nesEsL ((EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era)) -> ((Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era)) -> (Coin -> Const r Coin) -> NewEpochState era -> Const r (NewEpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era) forall era. EraGov era => Lens' (EpochState era) (PParams era) Lens' (EpochState era) (PParams era) curPParamsEpochStateL ((PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era)) -> ((Coin -> Const r Coin) -> PParams era -> Const r (PParams era)) -> (Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Coin -> Const r Coin) -> PParams era -> Const r (PParams era) forall era. ConwayEraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppDRepDepositL Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> ImpTestM era () submitTx_ (Tx era -> ImpM (LedgerSpec era) ()) -> Tx era -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'DRepRole -> Coin -> StrictMaybe Anchor -> TxCert era forall era. ConwayEraTxCert era => Credential 'DRepRole -> Coin -> StrictMaybe Anchor -> TxCert era RegDRepTxCert Credential 'DRepRole drepCred Coin drepDeposit StrictMaybe Anchor forall a. StrictMaybe a SNothing) Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> ImpTestM era () submitTx_ (Tx era -> ImpM (LedgerSpec era) ()) -> Tx era -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'DRepRole -> Coin -> TxCert era forall era. ConwayEraTxCert era => Credential 'DRepRole -> Coin -> TxCert era UnRegDRepTxCert Credential 'DRepRole drepCred Coin drepDeposit) String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "resigning a non-CC key" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do Credential 'ColdCommitteeRole someCred <- KeyHash 'ColdCommitteeRole -> Credential 'ColdCommitteeRole forall (kr :: KeyRole). KeyHash kr -> Credential kr KeyHashObj (KeyHash 'ColdCommitteeRole -> Credential 'ColdCommitteeRole) -> ImpM (LedgerSpec era) (KeyHash 'ColdCommitteeRole) -> ImpM (LedgerSpec era) (Credential 'ColdCommitteeRole) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ImpM (LedgerSpec era) (KeyHash 'ColdCommitteeRole) forall (r :: KeyRole) s g (m :: * -> *). (HasKeyPairs s, MonadState s m, HasStatefulGen g m) => m (KeyHash r) freshKeyHash Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpTestM era () submitFailingTx ( TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'ColdCommitteeRole -> StrictMaybe Anchor -> TxCert era forall era. ConwayEraTxCert era => Credential 'ColdCommitteeRole -> StrictMaybe Anchor -> TxCert era ResignCommitteeColdTxCert Credential 'ColdCommitteeRole someCred StrictMaybe Anchor forall a. StrictMaybe a SNothing) ) (PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a. a -> NonEmpty a forall (f :: * -> *) a. Applicative f => a -> f a pure (ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure (ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era) -> ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era forall a b. (a -> b) -> a -> b $ Credential 'ColdCommitteeRole -> ConwayGovCertPredFailure era forall era. Credential 'ColdCommitteeRole -> ConwayGovCertPredFailure era ConwayCommitteeIsUnknown Credential 'ColdCommitteeRole someCred)) String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "re-registering a CC hot key" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do ImpM (LedgerSpec era) (NonEmpty (Credential 'HotCommitteeRole)) -> ImpM (LedgerSpec era) () forall (f :: * -> *) a. Functor f => f a -> f () void ImpM (LedgerSpec era) (NonEmpty (Credential 'HotCommitteeRole)) forall era. (HasCallStack, ConwayEraImp era) => ImpTestM era (NonEmpty (Credential 'HotCommitteeRole)) registerInitialCommittee Set (Credential 'ColdCommitteeRole) initialCommittee <- ImpTestM era (Set (Credential 'ColdCommitteeRole)) forall era. ConwayEraImp era => ImpTestM era (Set (Credential 'ColdCommitteeRole)) getCommitteeMembers Set (Credential 'ColdCommitteeRole) -> (Credential 'ColdCommitteeRole -> ImpM (LedgerSpec era) ()) -> ImpM (LedgerSpec era) () forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => t a -> (a -> m b) -> m () forM_ Set (Credential 'ColdCommitteeRole) initialCommittee ((Credential 'ColdCommitteeRole -> ImpM (LedgerSpec era) ()) -> ImpM (LedgerSpec era) ()) -> (Credential 'ColdCommitteeRole -> ImpM (LedgerSpec era) ()) -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ \Credential 'ColdCommitteeRole kh -> Int -> ImpM (LedgerSpec era) () -> ImpM (LedgerSpec era) () forall (m :: * -> *) a. Applicative m => Int -> m a -> m () replicateM_ Int 10 (ImpM (LedgerSpec era) () -> ImpM (LedgerSpec era) ()) -> ImpM (LedgerSpec era) () -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ do Credential 'HotCommitteeRole ccHotCred <- KeyHash 'HotCommitteeRole -> Credential 'HotCommitteeRole forall (kr :: KeyRole). KeyHash kr -> Credential kr KeyHashObj (KeyHash 'HotCommitteeRole -> Credential 'HotCommitteeRole) -> ImpM (LedgerSpec era) (KeyHash 'HotCommitteeRole) -> ImpM (LedgerSpec era) (Credential 'HotCommitteeRole) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ImpM (LedgerSpec era) (KeyHash 'HotCommitteeRole) forall (r :: KeyRole) s g (m :: * -> *). (HasKeyPairs s, MonadState s m, HasStatefulGen g m) => m (KeyHash r) freshKeyHash Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> ImpTestM era () submitTx_ (Tx era -> ImpM (LedgerSpec era) ()) -> Tx era -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'ColdCommitteeRole -> Credential 'HotCommitteeRole -> TxCert era forall era. ConwayEraTxCert era => Credential 'ColdCommitteeRole -> Credential 'HotCommitteeRole -> TxCert era AuthCommitteeHotKeyTxCert Credential 'ColdCommitteeRole kh Credential 'HotCommitteeRole ccHotCred) String -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "fails for" (SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ do String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "invalid deposit provided with DRep registration cert" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall era. ShelleyEraImp era => (PParams era -> PParams era) -> ImpTestM era () modifyPParams ((PParams era -> PParams era) -> ImpM (LedgerSpec era) ()) -> (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ (Coin -> Identity Coin) -> PParams era -> Identity (PParams era) forall era. ConwayEraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppDRepDepositL ((Coin -> Identity Coin) -> PParams era -> Identity (PParams era)) -> Coin -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Integer -> Coin Coin Integer 100 Coin expectedDRepDeposit <- SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES (SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin) -> SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall a b. (a -> b) -> a -> b $ (EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era) forall era (f :: * -> *). Functor f => (EpochState era -> f (EpochState era)) -> NewEpochState era -> f (NewEpochState era) nesEsL ((EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era)) -> ((Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era)) -> (Coin -> Const r Coin) -> NewEpochState era -> Const r (NewEpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era) forall era. EraGov era => Lens' (EpochState era) (PParams era) Lens' (EpochState era) (PParams era) curPParamsEpochStateL ((PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era)) -> ((Coin -> Const r Coin) -> PParams era -> Const r (PParams era)) -> (Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Coin -> Const r Coin) -> PParams era -> Const r (PParams era) forall era. ConwayEraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppDRepDepositL let providedDRepDeposit :: Coin providedDRepDeposit = Coin expectedDRepDeposit Coin -> Coin -> Coin forall t. Val t => t -> t -> t <+> Integer -> Coin Coin Integer 10 KeyHash 'DRepRole khDRep <- ImpM (LedgerSpec era) (KeyHash 'DRepRole) forall (r :: KeyRole) s g (m :: * -> *). (HasKeyPairs s, MonadState s m, HasStatefulGen g m) => m (KeyHash r) freshKeyHash Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpTestM era () submitFailingTx ( TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'DRepRole -> Coin -> StrictMaybe Anchor -> TxCert era forall era. ConwayEraTxCert era => Credential 'DRepRole -> Coin -> StrictMaybe Anchor -> TxCert era RegDRepTxCert (KeyHash 'DRepRole -> Credential 'DRepRole forall (kr :: KeyRole). KeyHash kr -> Credential kr KeyHashObj KeyHash 'DRepRole khDRep) Coin providedDRepDeposit StrictMaybe Anchor forall a. StrictMaybe a SNothing) ) ( PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a. a -> NonEmpty a forall (f :: * -> *) a. Applicative f => a -> f a pure (PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era))) -> (ConwayGovCertPredFailure era -> PredicateFailure (EraRule "LEDGER" era)) -> ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall b c a. (b -> c) -> (a -> b) -> a -> c . ConwayGovCertPredFailure era -> PredicateFailure (EraRule "LEDGER" era) ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure (ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era))) -> ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a b. (a -> b) -> a -> b $ Mismatch 'RelEQ Coin -> ConwayGovCertPredFailure era forall era. Mismatch 'RelEQ Coin -> ConwayGovCertPredFailure era ConwayDRepIncorrectDeposit (Mismatch 'RelEQ Coin -> ConwayGovCertPredFailure era) -> Mismatch 'RelEQ Coin -> ConwayGovCertPredFailure era forall a b. (a -> b) -> a -> b $ Mismatch { mismatchSupplied :: Coin mismatchSupplied = Coin providedDRepDeposit , mismatchExpected :: Coin mismatchExpected = Coin expectedDRepDeposit } ) String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "invalid refund provided with DRep deregistration cert" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall era. ShelleyEraImp era => (PParams era -> PParams era) -> ImpTestM era () modifyPParams ((PParams era -> PParams era) -> ImpM (LedgerSpec era) ()) -> (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ (Coin -> Identity Coin) -> PParams era -> Identity (PParams era) forall era. ConwayEraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppDRepDepositL ((Coin -> Identity Coin) -> PParams era -> Identity (PParams era)) -> Coin -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Integer -> Coin Coin Integer 100 Coin drepDeposit <- SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES (SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin) -> SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall a b. (a -> b) -> a -> b $ (EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era) forall era (f :: * -> *). Functor f => (EpochState era -> f (EpochState era)) -> NewEpochState era -> f (NewEpochState era) nesEsL ((EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era)) -> ((Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era)) -> (Coin -> Const r Coin) -> NewEpochState era -> Const r (NewEpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era) forall era. EraGov era => Lens' (EpochState era) (PParams era) Lens' (EpochState era) (PParams era) curPParamsEpochStateL ((PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era)) -> ((Coin -> Const r Coin) -> PParams era -> Const r (PParams era)) -> (Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Coin -> Const r Coin) -> PParams era -> Const r (PParams era) forall era. ConwayEraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppDRepDepositL let refund :: Coin refund = Coin drepDeposit Coin -> Coin -> Coin forall t. Val t => t -> t -> t <+> Integer -> Coin Coin Integer 10 Credential 'DRepRole drepCred <- KeyHash 'DRepRole -> Credential 'DRepRole forall (kr :: KeyRole). KeyHash kr -> Credential kr KeyHashObj (KeyHash 'DRepRole -> Credential 'DRepRole) -> ImpM (LedgerSpec era) (KeyHash 'DRepRole) -> ImpM (LedgerSpec era) (Credential 'DRepRole) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ImpM (LedgerSpec era) (KeyHash 'DRepRole) forall (r :: KeyRole) s g (m :: * -> *). (HasKeyPairs s, MonadState s m, HasStatefulGen g m) => m (KeyHash r) freshKeyHash Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> ImpTestM era () submitTx_ (Tx era -> ImpM (LedgerSpec era) ()) -> Tx era -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'DRepRole -> Coin -> StrictMaybe Anchor -> TxCert era forall era. ConwayEraTxCert era => Credential 'DRepRole -> Coin -> StrictMaybe Anchor -> TxCert era RegDRepTxCert Credential 'DRepRole drepCred Coin drepDeposit StrictMaybe Anchor forall a. StrictMaybe a SNothing) Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpTestM era () submitFailingTx ( TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'DRepRole -> Coin -> TxCert era forall era. ConwayEraTxCert era => Credential 'DRepRole -> Coin -> TxCert era UnRegDRepTxCert Credential 'DRepRole drepCred Coin refund) ) ( PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a. a -> NonEmpty a forall (f :: * -> *) a. Applicative f => a -> f a pure (PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era))) -> (ConwayGovCertPredFailure era -> PredicateFailure (EraRule "LEDGER" era)) -> ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall b c a. (b -> c) -> (a -> b) -> a -> c . ConwayGovCertPredFailure era -> PredicateFailure (EraRule "LEDGER" era) ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure (ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era))) -> ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a b. (a -> b) -> a -> b $ Mismatch 'RelEQ Coin -> ConwayGovCertPredFailure era forall era. Mismatch 'RelEQ Coin -> ConwayGovCertPredFailure era ConwayDRepIncorrectRefund (Mismatch 'RelEQ Coin -> ConwayGovCertPredFailure era) -> Mismatch 'RelEQ Coin -> ConwayGovCertPredFailure era forall a b. (a -> b) -> a -> b $ Mismatch { mismatchSupplied :: Coin mismatchSupplied = Coin refund , mismatchExpected :: Coin mismatchExpected = Coin drepDeposit } ) String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "DRep already registered" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall era. ShelleyEraImp era => (PParams era -> PParams era) -> ImpTestM era () modifyPParams ((PParams era -> PParams era) -> ImpM (LedgerSpec era) ()) -> (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ (Coin -> Identity Coin) -> PParams era -> Identity (PParams era) forall era. ConwayEraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppDRepDepositL ((Coin -> Identity Coin) -> PParams era -> Identity (PParams era)) -> Coin -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Integer -> Coin Coin Integer 100 Coin drepDeposit <- SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES (SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin) -> SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall a b. (a -> b) -> a -> b $ (EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era) forall era (f :: * -> *). Functor f => (EpochState era -> f (EpochState era)) -> NewEpochState era -> f (NewEpochState era) nesEsL ((EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era)) -> ((Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era)) -> (Coin -> Const r Coin) -> NewEpochState era -> Const r (NewEpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era) forall era. EraGov era => Lens' (EpochState era) (PParams era) Lens' (EpochState era) (PParams era) curPParamsEpochStateL ((PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era)) -> ((Coin -> Const r Coin) -> PParams era -> Const r (PParams era)) -> (Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Coin -> Const r Coin) -> PParams era -> Const r (PParams era) forall era. ConwayEraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppDRepDepositL Credential 'DRepRole drepCred <- KeyHash 'DRepRole -> Credential 'DRepRole forall (kr :: KeyRole). KeyHash kr -> Credential kr KeyHashObj (KeyHash 'DRepRole -> Credential 'DRepRole) -> ImpM (LedgerSpec era) (KeyHash 'DRepRole) -> ImpM (LedgerSpec era) (Credential 'DRepRole) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ImpM (LedgerSpec era) (KeyHash 'DRepRole) forall (r :: KeyRole) s g (m :: * -> *). (HasKeyPairs s, MonadState s m, HasStatefulGen g m) => m (KeyHash r) freshKeyHash let regTx :: Tx era regTx = TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'DRepRole -> Coin -> StrictMaybe Anchor -> TxCert era forall era. ConwayEraTxCert era => Credential 'DRepRole -> Coin -> StrictMaybe Anchor -> TxCert era RegDRepTxCert Credential 'DRepRole drepCred Coin drepDeposit StrictMaybe Anchor forall a. StrictMaybe a SNothing) Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> ImpTestM era () submitTx_ Tx era regTx Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpTestM era () submitFailingTx Tx era regTx (PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a. a -> NonEmpty a forall (f :: * -> *) a. Applicative f => a -> f a pure (PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era))) -> (ConwayGovCertPredFailure era -> PredicateFailure (EraRule "LEDGER" era)) -> ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall b c a. (b -> c) -> (a -> b) -> a -> c . ConwayGovCertPredFailure era -> PredicateFailure (EraRule "LEDGER" era) ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure (ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era))) -> ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a b. (a -> b) -> a -> b $ Credential 'DRepRole -> ConwayGovCertPredFailure era forall era. Credential 'DRepRole -> ConwayGovCertPredFailure era ConwayDRepAlreadyRegistered Credential 'DRepRole drepCred) String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "unregistering a nonexistent DRep" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall era. ShelleyEraImp era => (PParams era -> PParams era) -> ImpTestM era () modifyPParams ((PParams era -> PParams era) -> ImpM (LedgerSpec era) ()) -> (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ (Coin -> Identity Coin) -> PParams era -> Identity (PParams era) forall era. ConwayEraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppDRepDepositL ((Coin -> Identity Coin) -> PParams era -> Identity (PParams era)) -> Coin -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Integer -> Coin Coin Integer 100 Coin drepDeposit <- SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES (SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin) -> SimpleGetter (NewEpochState era) Coin -> ImpTestM era Coin forall a b. (a -> b) -> a -> b $ (EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era) forall era (f :: * -> *). Functor f => (EpochState era -> f (EpochState era)) -> NewEpochState era -> f (NewEpochState era) nesEsL ((EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era)) -> ((Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era)) -> (Coin -> Const r Coin) -> NewEpochState era -> Const r (NewEpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era) forall era. EraGov era => Lens' (EpochState era) (PParams era) Lens' (EpochState era) (PParams era) curPParamsEpochStateL ((PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era)) -> ((Coin -> Const r Coin) -> PParams era -> Const r (PParams era)) -> (Coin -> Const r Coin) -> EpochState era -> Const r (EpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Coin -> Const r Coin) -> PParams era -> Const r (PParams era) forall era. ConwayEraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppDRepDepositL Credential 'DRepRole drepCred <- KeyHash 'DRepRole -> Credential 'DRepRole forall (kr :: KeyRole). KeyHash kr -> Credential kr KeyHashObj (KeyHash 'DRepRole -> Credential 'DRepRole) -> ImpM (LedgerSpec era) (KeyHash 'DRepRole) -> ImpM (LedgerSpec era) (Credential 'DRepRole) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ImpM (LedgerSpec era) (KeyHash 'DRepRole) forall (r :: KeyRole) s g (m :: * -> *). (HasKeyPairs s, MonadState s m, HasStatefulGen g m) => m (KeyHash r) freshKeyHash Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpTestM era () submitFailingTx ( TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'DRepRole -> Coin -> TxCert era forall era. ConwayEraTxCert era => Credential 'DRepRole -> Coin -> TxCert era UnRegDRepTxCert Credential 'DRepRole drepCred Coin drepDeposit) ) (PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a. a -> NonEmpty a forall (f :: * -> *) a. Applicative f => a -> f a pure (PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era))) -> (ConwayGovCertPredFailure era -> PredicateFailure (EraRule "LEDGER" era)) -> ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall b c a. (b -> c) -> (a -> b) -> a -> c . ConwayGovCertPredFailure era -> PredicateFailure (EraRule "LEDGER" era) ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure (ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era))) -> ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a b. (a -> b) -> a -> b $ Credential 'DRepRole -> ConwayGovCertPredFailure era forall era. Credential 'DRepRole -> ConwayGovCertPredFailure era ConwayDRepNotRegistered Credential 'DRepRole drepCred) String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "registering a resigned CC member hotkey" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do ImpM (LedgerSpec era) (NonEmpty (Credential 'HotCommitteeRole)) -> ImpM (LedgerSpec era) () forall (f :: * -> *) a. Functor f => f a -> f () void ImpM (LedgerSpec era) (NonEmpty (Credential 'HotCommitteeRole)) forall era. (HasCallStack, ConwayEraImp era) => ImpTestM era (NonEmpty (Credential 'HotCommitteeRole)) registerInitialCommittee Set (Credential 'ColdCommitteeRole) initialCommittee <- ImpTestM era (Set (Credential 'ColdCommitteeRole)) forall era. ConwayEraImp era => ImpTestM era (Set (Credential 'ColdCommitteeRole)) getCommitteeMembers Set (Credential 'ColdCommitteeRole) -> (Credential 'ColdCommitteeRole -> ImpM (LedgerSpec era) ()) -> ImpM (LedgerSpec era) () forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => t a -> (a -> m b) -> m () forM_ Set (Credential 'ColdCommitteeRole) initialCommittee ((Credential 'ColdCommitteeRole -> ImpM (LedgerSpec era) ()) -> ImpM (LedgerSpec era) ()) -> (Credential 'ColdCommitteeRole -> ImpM (LedgerSpec era) ()) -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ \Credential 'ColdCommitteeRole ccCred -> do Credential 'HotCommitteeRole ccHotCred <- KeyHash 'HotCommitteeRole -> Credential 'HotCommitteeRole forall (kr :: KeyRole). KeyHash kr -> Credential kr KeyHashObj (KeyHash 'HotCommitteeRole -> Credential 'HotCommitteeRole) -> ImpM (LedgerSpec era) (KeyHash 'HotCommitteeRole) -> ImpM (LedgerSpec era) (Credential 'HotCommitteeRole) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ImpM (LedgerSpec era) (KeyHash 'HotCommitteeRole) forall (r :: KeyRole) s g (m :: * -> *). (HasKeyPairs s, MonadState s m, HasStatefulGen g m) => m (KeyHash r) freshKeyHash let registerHotKeyTx :: Tx era registerHotKeyTx = TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'ColdCommitteeRole -> Credential 'HotCommitteeRole -> TxCert era forall era. ConwayEraTxCert era => Credential 'ColdCommitteeRole -> Credential 'HotCommitteeRole -> TxCert era AuthCommitteeHotKeyTxCert Credential 'ColdCommitteeRole ccCred Credential 'HotCommitteeRole ccHotCred) Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> ImpTestM era () submitTx_ Tx era registerHotKeyTx Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> ImpTestM era () submitTx_ (Tx era -> ImpM (LedgerSpec era) ()) -> Tx era -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'ColdCommitteeRole -> StrictMaybe Anchor -> TxCert era forall era. ConwayEraTxCert era => Credential 'ColdCommitteeRole -> StrictMaybe Anchor -> TxCert era ResignCommitteeColdTxCert Credential 'ColdCommitteeRole ccCred StrictMaybe Anchor forall a. StrictMaybe a SNothing) Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpTestM era () submitFailingTx Tx era registerHotKeyTx (PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a. a -> NonEmpty a forall (f :: * -> *) a. Applicative f => a -> f a pure (PredicateFailure (EraRule "LEDGER" era) -> NonEmpty (PredicateFailure (EraRule "LEDGER" era))) -> (ConwayGovCertPredFailure era -> PredicateFailure (EraRule "LEDGER" era)) -> ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall b c a. (b -> c) -> (a -> b) -> a -> c . ConwayGovCertPredFailure era -> PredicateFailure (EraRule "LEDGER" era) ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure (ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era))) -> ConwayGovCertPredFailure era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) forall a b. (a -> b) -> a -> b $ Credential 'ColdCommitteeRole -> ConwayGovCertPredFailure era forall era. Credential 'ColdCommitteeRole -> ConwayGovCertPredFailure era ConwayCommitteeHasPreviouslyResigned Credential 'ColdCommitteeRole ccCred) String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "resigning a nonexistent CC member hotkey" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do ImpM (LedgerSpec era) (NonEmpty (Credential 'HotCommitteeRole)) -> ImpM (LedgerSpec era) () forall (f :: * -> *) a. Functor f => f a -> f () void ImpM (LedgerSpec era) (NonEmpty (Credential 'HotCommitteeRole)) forall era. (HasCallStack, ConwayEraImp era) => ImpTestM era (NonEmpty (Credential 'HotCommitteeRole)) registerInitialCommittee Credential 'ColdCommitteeRole nonExistentColdKey <- KeyHash 'ColdCommitteeRole -> Credential 'ColdCommitteeRole forall (kr :: KeyRole). KeyHash kr -> Credential kr KeyHashObj (KeyHash 'ColdCommitteeRole -> Credential 'ColdCommitteeRole) -> ImpM (LedgerSpec era) (KeyHash 'ColdCommitteeRole) -> ImpM (LedgerSpec era) (Credential 'ColdCommitteeRole) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ImpM (LedgerSpec era) (KeyHash 'ColdCommitteeRole) forall (r :: KeyRole) s g (m :: * -> *). (HasKeyPairs s, MonadState s m, HasStatefulGen g m) => m (KeyHash r) freshKeyHash let failingTx :: Tx era failingTx = TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era)) -> (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxCert era)) Lens' (TxBody era) (StrictSeq (TxCert era)) certsTxBodyL ((StrictSeq (TxCert era) -> Identity (StrictSeq (TxCert era))) -> Tx era -> Identity (Tx era)) -> StrictSeq (TxCert era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxCert era -> StrictSeq (TxCert era) forall a. a -> StrictSeq a SSeq.singleton (Credential 'ColdCommitteeRole -> StrictMaybe Anchor -> TxCert era forall era. ConwayEraTxCert era => Credential 'ColdCommitteeRole -> StrictMaybe Anchor -> TxCert era ResignCommitteeColdTxCert Credential 'ColdCommitteeRole nonExistentColdKey StrictMaybe Anchor forall a. StrictMaybe a SNothing) Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpTestM era () submitFailingTx Tx era failingTx [ ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure (ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era) -> ConwayGovCertPredFailure era -> EraRuleFailure "LEDGER" era forall a b. (a -> b) -> a -> b $ Credential 'ColdCommitteeRole -> ConwayGovCertPredFailure era forall era. Credential 'ColdCommitteeRole -> ConwayGovCertPredFailure era ConwayCommitteeIsUnknown Credential 'ColdCommitteeRole nonExistentColdKey ]