{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} module Test.Cardano.Ledger.Conway.Imp (spec) where import Cardano.Ledger.Alonzo.Plutus.Context (EraPlutusContext (..)) import Cardano.Ledger.Alonzo.Rules ( AlonzoUtxoPredFailure, AlonzoUtxosPredFailure, AlonzoUtxowPredFailure, ) import Cardano.Ledger.Babbage.Rules (BabbageUtxoPredFailure, BabbageUtxowPredFailure) import Cardano.Ledger.Babbage.TxInfo (BabbageContextError) import Cardano.Ledger.BaseTypes (Inject, ShelleyBase, natVersion) import Cardano.Ledger.Conway.Core import Cardano.Ledger.Conway.Rules ( ConwayBbodyPredFailure, ConwayCertsPredFailure, ConwayDelegPredFailure, ConwayEpochEvent, ConwayGovCertPredFailure, ConwayGovPredFailure, ConwayHardForkEvent, ConwayLedgerEvent, ConwayLedgerPredFailure, ConwayMempoolEvent, ConwayNewEpochEvent, ) import Cardano.Ledger.Conway.TxInfo (ConwayContextError) import Cardano.Ledger.Shelley.API.Mempool (ApplyTx (..)) import Cardano.Ledger.Shelley.Rules ( ShelleyLedgersEnv, ShelleyLedgersEvent, ShelleyUtxoPredFailure, ShelleyUtxowPredFailure, ) import Control.State.Transition.Extended import Data.Sequence (Seq) import Data.Typeable (Typeable) import qualified Test.Cardano.Ledger.Babbage.Imp as BabbageImp import Test.Cardano.Ledger.Common import qualified Test.Cardano.Ledger.Conway.Imp.BbodySpec as Bbody import qualified Test.Cardano.Ledger.Conway.Imp.CertsSpec as Certs import qualified Test.Cardano.Ledger.Conway.Imp.DelegSpec as Deleg import qualified Test.Cardano.Ledger.Conway.Imp.EnactSpec as Enact import qualified Test.Cardano.Ledger.Conway.Imp.EpochSpec as Epoch import qualified Test.Cardano.Ledger.Conway.Imp.GovCertSpec as GovCert import qualified Test.Cardano.Ledger.Conway.Imp.GovSpec as Gov import qualified Test.Cardano.Ledger.Conway.Imp.LedgerSpec as Ledger import qualified Test.Cardano.Ledger.Conway.Imp.RatifySpec as Ratify import qualified Test.Cardano.Ledger.Conway.Imp.UtxoSpec as Utxo import qualified Test.Cardano.Ledger.Conway.Imp.UtxosSpec as Utxos import Test.Cardano.Ledger.Conway.ImpTest (ConwayEraImp, withImpState, withImpStateWithProtVer) spec :: forall era. ( Arbitrary (TxAuxData era) , ConwayEraImp era , EraSegWits era , InjectRuleFailure "LEDGER" ConwayGovPredFailure era , InjectRuleFailure "LEDGER" ConwayCertsPredFailure era , Inject (BabbageContextError era) (ContextError era) , Inject (ConwayContextError era) (ContextError era) , InjectRuleFailure "LEDGER" BabbageUtxoPredFailure era , InjectRuleFailure "LEDGER" BabbageUtxowPredFailure era , InjectRuleFailure "LEDGER" AlonzoUtxoPredFailure era , InjectRuleFailure "LEDGER" AlonzoUtxosPredFailure era , InjectRuleFailure "LEDGER" AlonzoUtxowPredFailure era , InjectRuleFailure "LEDGER" ShelleyUtxoPredFailure era , InjectRuleFailure "LEDGER" ShelleyUtxowPredFailure era , InjectRuleFailure "LEDGER" ConwayDelegPredFailure era , InjectRuleFailure "LEDGER" ConwayGovCertPredFailure era , InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era , InjectRuleFailure "BBODY" ConwayBbodyPredFailure era , NFData (Event (EraRule "ENACT" era)) , ToExpr (Event (EraRule "ENACT" era)) , Eq (Event (EraRule "ENACT" era)) , Typeable (Event (EraRule "ENACT" era)) , InjectRuleEvent "TICK" ConwayEpochEvent era , Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era , Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era , Event (EraRule "MEMPOOL" era) ~ ConwayMempoolEvent era , Event (EraRule "LEDGERS" era) ~ ShelleyLedgersEvent era , Event (EraRule "LEDGER" era) ~ ConwayLedgerEvent era , BaseM (EraRule "LEDGERS" era) ~ ShelleyBase , Environment (EraRule "LEDGERS" era) ~ ShelleyLedgersEnv era , Signal (EraRule "LEDGERS" era) ~ Seq (Tx era) , STS (EraRule "LEDGERS" era) , ApplyTx era , Event (EraRule "HARDFORK" era) ~ ConwayHardForkEvent era ) => Spec spec :: forall era. (Arbitrary (TxAuxData era), ConwayEraImp era, EraSegWits era, InjectRuleFailure "LEDGER" ConwayGovPredFailure era, InjectRuleFailure "LEDGER" ConwayCertsPredFailure era, Inject (BabbageContextError era) (ContextError era), Inject (ConwayContextError era) (ContextError era), InjectRuleFailure "LEDGER" BabbageUtxoPredFailure era, InjectRuleFailure "LEDGER" BabbageUtxowPredFailure era, InjectRuleFailure "LEDGER" AlonzoUtxoPredFailure era, InjectRuleFailure "LEDGER" AlonzoUtxosPredFailure era, InjectRuleFailure "LEDGER" AlonzoUtxowPredFailure era, InjectRuleFailure "LEDGER" ShelleyUtxoPredFailure era, InjectRuleFailure "LEDGER" ShelleyUtxowPredFailure era, InjectRuleFailure "LEDGER" ConwayDelegPredFailure era, InjectRuleFailure "LEDGER" ConwayGovCertPredFailure era, InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era, InjectRuleFailure "BBODY" ConwayBbodyPredFailure era, NFData (Event (EraRule "ENACT" era)), ToExpr (Event (EraRule "ENACT" era)), Eq (Event (EraRule "ENACT" era)), Typeable (Event (EraRule "ENACT" era)), InjectRuleEvent "TICK" ConwayEpochEvent era, Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era, Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era, Event (EraRule "MEMPOOL" era) ~ ConwayMempoolEvent era, Event (EraRule "LEDGERS" era) ~ ShelleyLedgersEvent era, Event (EraRule "LEDGER" era) ~ ConwayLedgerEvent era, BaseM (EraRule "LEDGERS" era) ~ ShelleyBase, Environment (EraRule "LEDGERS" era) ~ ShelleyLedgersEnv era, Signal (EraRule "LEDGERS" era) ~ Seq (Tx era), STS (EraRule "LEDGERS" era), ApplyTx era, Event (EraRule "HARDFORK" era) ~ ConwayHardForkEvent era) => Spec spec = do forall era. (Arbitrary (TxAuxData era), AlonzoEraImp era, BabbageEraTxOut era, InjectRuleFailure "LEDGER" ShelleyUtxoPredFailure era, InjectRuleFailure "LEDGER" AlonzoUtxoPredFailure era, InjectRuleFailure "LEDGER" AlonzoUtxosPredFailure era, InjectRuleFailure "LEDGER" AlonzoUtxowPredFailure era, InjectRuleFailure "LEDGER" ShelleyUtxowPredFailure era, InjectRuleFailure "LEDGER" BabbageUtxowPredFailure era, Inject (BabbageContextError era) (ContextError era)) => Spec BabbageImp.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "ConwayImpSpec - post bootstrap (protocol version 10)" forall a b. (a -> b) -> a -> b $ forall era. ConwayEraImp era => Version -> SpecWith (ImpTestState era) -> Spec withImpStateWithProtVer @era (forall (v :: Natural). (KnownNat v, MinVersion <= v, v <= MaxVersion) => Version natVersion @10) forall a b. (a -> b) -> a -> b $ do forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "BBODY" forall a b. (a -> b) -> a -> b $ forall era. (AlonzoEraImp era, BabbageEraTxBody era, EraSegWits era, InjectRuleFailure "BBODY" ConwayBbodyPredFailure era) => SpecWith (ImpTestState era) Bbody.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "DELEG" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleFailure "LEDGER" ConwayDelegPredFailure era) => SpecWith (ImpTestState era) Deleg.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "ENACT" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, NFData (Event (EraRule "ENACT" era)), ToExpr (Event (EraRule "ENACT" era)), Eq (Event (EraRule "ENACT" era)), Typeable (Event (EraRule "ENACT" era)), Event (EraRule "HARDFORK" era) ~ ConwayHardForkEvent era, Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era, Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era, InjectRuleEvent "TICK" ConwayEpochEvent era) => SpecWith (ImpTestState era) Enact.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "EPOCH" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleEvent "TICK" ConwayEpochEvent era, Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era, Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era) => SpecWith (ImpTestState era) Epoch.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "GOV" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleFailure "LEDGER" ConwayGovPredFailure era) => SpecWith (ImpTestState era) Gov.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "GOVCERT" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleFailure "LEDGER" ConwayGovCertPredFailure era) => SpecWith (ImpTestState era) GovCert.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "UTXO" forall a b. (a -> b) -> a -> b $ forall era. ConwayEraImp era => SpecWith (ImpTestState era) Utxo.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "UTXOS" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, Inject (BabbageContextError era) (ContextError era), Inject (ConwayContextError era) (ContextError era), InjectRuleFailure "LEDGER" BabbageUtxoPredFailure era, InjectRuleFailure "LEDGER" AlonzoUtxosPredFailure era, InjectRuleFailure "LEDGER" AlonzoUtxowPredFailure era, InjectRuleFailure "LEDGER" ShelleyUtxowPredFailure era) => SpecWith (ImpTestState era) Utxos.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "RATIFY" forall a b. (a -> b) -> a -> b $ forall era. ConwayEraImp era => SpecWith (ImpTestState era) Ratify.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "LEDGER" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era, Event (EraRule "MEMPOOL" era) ~ ConwayMempoolEvent era, BaseM (EraRule "LEDGERS" era) ~ ShelleyBase, Environment (EraRule "LEDGERS" era) ~ ShelleyLedgersEnv era, Signal (EraRule "LEDGERS" era) ~ Seq (Tx era), Event (EraRule "LEDGERS" era) ~ ShelleyLedgersEvent era, Event (EraRule "LEDGER" era) ~ ConwayLedgerEvent era, STS (EraRule "LEDGERS" era), ApplyTx era) => SpecWith (ImpTestState era) Ledger.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "ConwayImpSpec - bootstrap phase (protocol version 9)" forall a b. (a -> b) -> a -> b $ forall era. ShelleyEraImp era => SpecWith (ImpTestState era) -> Spec withImpState @era forall a b. (a -> b) -> a -> b $ do forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "BBODY" forall a b. (a -> b) -> a -> b $ forall era. (AlonzoEraImp era, BabbageEraTxBody era, EraSegWits era, InjectRuleFailure "BBODY" ConwayBbodyPredFailure era) => SpecWith (ImpTestState era) Bbody.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "CERTS" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleFailure "LEDGER" ConwayCertsPredFailure era) => SpecWith (ImpTestState era) Certs.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "DELEG" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleFailure "LEDGER" ConwayDelegPredFailure era) => SpecWith (ImpTestState era) Deleg.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "ENACT" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, Event (EraRule "HARDFORK" era) ~ ConwayHardForkEvent era, Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era, Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era, InjectRuleEvent "TICK" ConwayEpochEvent era) => SpecWith (ImpTestState era) Enact.relevantDuringBootstrapSpec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "EPOCH" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleEvent "TICK" ConwayEpochEvent era, Event (EraRule "EPOCH" era) ~ ConwayEpochEvent era, Event (EraRule "NEWEPOCH" era) ~ ConwayNewEpochEvent era) => SpecWith (ImpTestState era) Epoch.relevantDuringBootstrapSpec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "GOV" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleFailure "LEDGER" ConwayGovPredFailure era) => SpecWith (ImpTestState era) Gov.relevantDuringBootstrapSpec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "GOVCERT" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleFailure "LEDGER" ConwayGovCertPredFailure era) => SpecWith (ImpTestState era) GovCert.relevantDuringBootstrapSpec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "UTXO" forall a b. (a -> b) -> a -> b $ forall era. ConwayEraImp era => SpecWith (ImpTestState era) Utxo.spec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "UTXOS" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, Inject (BabbageContextError era) (ContextError era), Inject (ConwayContextError era) (ContextError era), InjectRuleFailure "LEDGER" BabbageUtxoPredFailure era, InjectRuleFailure "LEDGER" AlonzoUtxosPredFailure era, InjectRuleFailure "LEDGER" AlonzoUtxowPredFailure era) => SpecWith (ImpTestState era) Utxos.relevantDuringBootstrapSpec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "RATIFY" forall a b. (a -> b) -> a -> b $ forall era. ConwayEraImp era => SpecWith (ImpTestState era) Ratify.relevantDuringBootstrapSpec @era forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "LEDGER" forall a b. (a -> b) -> a -> b $ forall era. (ConwayEraImp era, InjectRuleFailure "LEDGER" ConwayLedgerPredFailure era, Event (EraRule "MEMPOOL" era) ~ ConwayMempoolEvent era, BaseM (EraRule "LEDGERS" era) ~ ShelleyBase, Environment (EraRule "LEDGERS" era) ~ ShelleyLedgersEnv era, Signal (EraRule "LEDGERS" era) ~ Seq (Tx era), Event (EraRule "LEDGERS" era) ~ ShelleyLedgersEvent era, Event (EraRule "LEDGER" era) ~ ConwayLedgerEvent era, STS (EraRule "LEDGERS" era), ApplyTx era) => SpecWith (ImpTestState era) Ledger.spec @era