{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-} module Test.Cardano.Ledger.CanonicalState.Spec (spec) where import Cardano.Ledger.BaseTypes (EpochInterval, NonNegativeInterval, NonZero, UnitInterval) import Cardano.Ledger.CanonicalState.BasicTypes (CanonicalExUnits (..)) import Cardano.Ledger.CanonicalState.Conway (CanonicalGovActionState) import qualified Cardano.Ledger.CanonicalState.Namespace.Blocks.V0 as Blocks.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.EntitiesAccounts.V0 as EntitiesAccounts.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.EntitiesCommittee.V0 as Committee.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.EntitiesDReps.V0 as EntitiesDReps.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.EntitiesStakePools.V0 as EntitiesStakePools.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.EntitiesStakePools.VRFKeyHashes.V0 as EntitiesStakePoolsVRFKeyHashes.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.GovCommittee.V0 as GovCommittee.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.GovConstitution.V0 as GovConstitution.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.GovPParams.V0 as GovPParams.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.GovProposals.Roots.V0 as GovProposals.Roots.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.GovProposals.V0 as GovProposals.V0 import qualified Cardano.Ledger.CanonicalState.Namespace.UTxO.V0 as UTxO.V0 import Cardano.Ledger.Conway (ConwayEra) import Cardano.Ledger.Core ( AccountAddress, AccountId, KeyHash, PParams, StakePool, StakePoolVRF, Staking, VRFVerKeyHash, ) import Cardano.Ledger.Credential (Credential) import Cardano.Ledger.DRep (DRep) import Cardano.Ledger.State (PoolMetadata, StakePoolRelay) import Cardano.Ledger.TxIn (TxId) import Cardano.SCLS.CBOR.Canonical.Encoder (ToCanonicalCBOR (..)) import Cardano.SCLS.Testlib import Data.Typeable import Data.Word (Word64) import GHC.TypeLits import Test.Cardano.Ledger.CanonicalState.Arbitrary () import Test.Cardano.Ledger.Common import Test.Cardano.Ledger.Conway.CanonicalState.Arbitrary () spec :: Spec spec :: Spec spec = do String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "types" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "blocks/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"blocks/v0" @Blocks.V0.BlockOut forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"blocks/v0" @Blocks.V0.BlockOut Text "record_entry" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "utxo/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"utxo/v0" @(UTxO.V0.UtxoOut ConwayEra) forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"utxo/v0" @(UTxO.V0.UtxoOut ConwayEra) Text "record_entry" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "entities/committee/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/committee/v0" @Committee.V0.CanonicalCommitteeState forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/committee/v0" @Committee.V0.CanonicalCommitteeState Text "committee_state" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/committee/v0" @Committee.V0.CanonicalCommitteeAuthorization forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/committee/v0" @Committee.V0.CanonicalCommitteeAuthorization Text "committee_authorization" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "entities/stake_pools/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @(VRFVerKeyHash StakePoolVRF) forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @(VRFVerKeyHash StakePoolVRF) Text "vrf_keyhash" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @UnitInterval forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @UnitInterval Text "unit_interval" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @(KeyHash Staking) forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @(KeyHash Staking) Text "staking_keyhash" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @StakePoolRelay forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @StakePoolRelay Text "relay" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @PoolMetadata forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @PoolMetadata Text "pool_metadata" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @AccountId forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @AccountId Text "account_id" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @(Credential Staking) forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @(Credential Staking) Text "credential" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @(KeyHash StakePool) forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @(KeyHash StakePool) Text "pool_keyhash" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @(VRFVerKeyHash StakePoolVRF) forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @(VRFVerKeyHash StakePoolVRF) Text "vrf_keyhash" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @UnitInterval forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @UnitInterval Text "unit_interval" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @(KeyHash Staking) forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @(KeyHash Staking) Text "staking_keyhash" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @StakePoolRelay forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @StakePoolRelay Text "relay" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @PoolMetadata forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @PoolMetadata Text "pool_metadata" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @AccountAddress forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @AccountAddress Text "address" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @EntitiesStakePools.V0.CanonicalStakePoolParams forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @EntitiesStakePools.V0.CanonicalStakePoolParams Text "stake_pool_params" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @EntitiesStakePools.V0.CanonicalStakePoolState forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @EntitiesStakePools.V0.CanonicalStakePoolState Text "stake_pool_state" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/v0" @EntitiesStakePools.V0.CanonicalStakePool forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/v0" @EntitiesStakePools.V0.CanonicalStakePool Text "stake_pool" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "entities/dreps/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/dreps/v0" @EntitiesDReps.V0.CanonicalDRepState forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/dreps/v0" @EntitiesDReps.V0.CanonicalDRepState Text "drep_state" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "entities/stake_pools/vrf_key_hashes/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/vrf_key_hashes/v0" @(NonZero Word64) forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/vrf_key_hashes/v0" @(NonZero Word64) Text "positive_int" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/stake_pools/vrf_key_hashes/v0" @EntitiesStakePoolsVRFKeyHashes.V0.EntitiesStakePoolsVRFKeyHashesOut forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/stake_pools/vrf_key_hashes/v0" @EntitiesStakePoolsVRFKeyHashes.V0.EntitiesStakePoolsVRFKeyHashesOut Text "record_entry" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "entities/accounts/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/accounts/v0" @DRep forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/accounts/v0" @DRep Text "drep" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/accounts/v0" @EntitiesAccounts.V0.CanonicalAccountState forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/accounts/v0" @EntitiesAccounts.V0.CanonicalAccountState Text "account_state" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"entities/accounts/v0" @EntitiesAccounts.V0.EntitiesAccountsOut forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"entities/accounts/v0" @EntitiesAccounts.V0.EntitiesAccountsOut Text "record_entry" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "gov/committee/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/committee/v0" @GovCommittee.V0.CanonicalCommittee forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/committee/v0" @GovCommittee.V0.CanonicalCommittee Text "committee" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/committee/v0" @GovCommittee.V0.GovCommitteeOut forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/committee/v0" @GovCommittee.V0.GovCommitteeOut Text "record_entry" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "gov/constitution/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/constitution/v0" @GovConstitution.V0.CanonicalConstitution forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/constitution/v0" @GovConstitution.V0.CanonicalConstitution Text "record_entry" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "gov/pparams/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/pparams/v0" @EpochInterval forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/pparams/v0" @EpochInterval Text "epoch_interval" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/pparams/v0" @NonNegativeInterval forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/pparams/v0" @NonNegativeInterval Text "nonnegative_interval" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/pparams/v0" @UnitInterval forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/pparams/v0" @UnitInterval Text "unit_interval" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/pparams/v0" @CanonicalExUnits forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/pparams/v0" @CanonicalExUnits Text "ex_units" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/pparams/v0" @(PParams ConwayEra) forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/pparams/v0" @(GovPParams.V0.GovPParamsOut ConwayEra) Text "gov_pparams_out" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "gov/proposals/roots/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/proposals/roots/v0" @TxId forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/proposals/roots/v0" @GovProposals.V0.CanonicalGovActionIx forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/proposals/roots/v0" @GovProposals.V0.CanonicalGovActionId forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/proposals/roots/v0" @GovProposals.V0.CanonicalGovActionId Text "gov_action_id" forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/proposals/roots/v0" @GovProposals.Roots.V0.GovProposalsRootsOut forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/proposals/roots/v0" @GovProposals.Roots.V0.GovProposalsRootsOut Text "record_entry" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "gov/proposals/v0" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical @"gov/proposals/v0" @(GovProposals.V0.GovProposalOut CanonicalGovActionState) forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Arbitrary a, Show a, Typeable a) => Text -> Spec validateType @"gov/proposals/v0" @(GovProposals.V0.GovProposalOut CanonicalGovActionState) Text "record_entry" String -> Spec -> Spec forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "namespaces" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"blocks/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"utxo/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"entities/committee/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"entities/stake_pools/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"entities/dreps/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"entities/stake_pools/vrf_key_hashes/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"entities/accounts/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"gov/constitution/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"gov/committee/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"gov/pparams/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"gov/proposals/v0" forall (ns :: Symbol). (KnownSymbol ns, KnownNamespace ns, Arbitrary (NamespaceEntry ns), Eq (NamespaceEntry ns), Show (NamespaceEntry ns)) => Spec testNS @"gov/proposals/roots/v0" isCanonical :: forall ns a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical :: forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a, Typeable a, Arbitrary a, Show a) => Spec isCanonical = String -> (a -> IO ()) -> Spec forall prop. (HasCallStack, Testable prop) => String -> prop -> Spec prop String propName ((a -> IO ()) -> Spec) -> (a -> IO ()) -> Spec forall a b. (a -> b) -> a -> b $ forall (ns :: Symbol) a. (KnownSymbol ns, ToCanonicalCBOR ns a) => a -> IO () propTypeIsCanonical @ns @a where propName :: String propName = TypeRep -> ShowS showsTypeRep (Proxy a -> TypeRep forall {k} (proxy :: k -> *) (a :: k). Typeable a => proxy a -> TypeRep typeRep (forall t. Proxy t forall {k} (t :: k). Proxy t Proxy @a)) String " is canonical"