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