Skip to content

Commit d185ba2

Browse files
committed
Add entities/dormant_epochs/v0 namespace and related instances
1 parent 6c361e7 commit d185ba2

5 files changed

Lines changed: 108 additions & 1 deletion

File tree

libs/cardano-ledger-canonical-state/cardano-ledger-canonical-state.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ library
4545
Cardano.Ledger.CanonicalState.Namespace
4646
Cardano.Ledger.CanonicalState.Namespace.Blocks.V0
4747
Cardano.Ledger.CanonicalState.Namespace.EntitiesCommittee.V0
48+
Cardano.Ledger.CanonicalState.Namespace.EntitiesDormantEpochs.V0
4849
Cardano.Ledger.CanonicalState.Namespace.GovCommittee.V0
4950
Cardano.Ledger.CanonicalState.Namespace.GovConstitution.V0
5051
Cardano.Ledger.CanonicalState.Namespace.GovPParams.V0

libs/cardano-ledger-canonical-state/conway/Cardano/Ledger/CanonicalState/Conway.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ type instance NamespaceEra "blocks/v0" = ConwayEra
6464

6565
type instance NamespaceEra "entities/committee/v0" = ConwayEra
6666

67+
type instance NamespaceEra "entities/dormant_epochs/v0" = ConwayEra
68+
6769
type instance NamespaceEra "gov/committee/v0" = ConwayEra
6870

6971
type instance NamespaceEra "gov/constitution/v0" = ConwayEra
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
{-# LANGUAGE DataKinds #-}
2+
{-# LANGUAGE DeriveGeneric #-}
3+
{-# LANGUAGE DerivingVia #-}
4+
{-# LANGUAGE FlexibleContexts #-}
5+
{-# LANGUAGE FlexibleInstances #-}
6+
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
7+
{-# LANGUAGE MultiParamTypeClasses #-}
8+
{-# LANGUAGE OverloadedStrings #-}
9+
{-# LANGUAGE RecordWildCards #-}
10+
{-# LANGUAGE ScopedTypeVariables #-}
11+
{-# LANGUAGE StandaloneDeriving #-}
12+
{-# LANGUAGE TypeApplications #-}
13+
{-# LANGUAGE TypeFamilies #-}
14+
{-# LANGUAGE TypeOperators #-}
15+
{-# LANGUAGE UndecidableInstances #-}
16+
{-# OPTIONS_GHC -Wno-orphans #-}
17+
18+
module Cardano.Ledger.CanonicalState.Namespace.EntitiesDormantEpochs.V0 (
19+
EntitiesDormantEpochsIn (..),
20+
EntitiesDormantEpochsOut (..),
21+
) where
22+
23+
import Cardano.Ledger.BaseTypes (EpochNo)
24+
import Cardano.Ledger.CanonicalState.Namespace (Era, NamespaceEra)
25+
import Cardano.SCLS.CBOR.Canonical.Decoder (FromCanonicalCBOR (..))
26+
import Cardano.SCLS.CBOR.Canonical.Encoder (ToCanonicalCBOR (..))
27+
import Cardano.SCLS.Entry.IsKey (IsKey (..))
28+
import Cardano.SCLS.NamespaceCodec (
29+
CanonicalCBOREntryDecoder (..),
30+
CanonicalCBOREntryEncoder (..),
31+
KnownNamespace (..),
32+
NamespaceKeySize,
33+
namespaceKeySize,
34+
)
35+
import Cardano.SCLS.Versioned (Versioned (..))
36+
import Data.MemPack (MemPack (packM, unpackM))
37+
import Data.Proxy (Proxy (..))
38+
import Data.Word (Word8)
39+
import GHC.Generics (Generic)
40+
41+
instance
42+
( Era era
43+
, NamespaceEra "entities/dormant_epochs/v0" ~ era
44+
, ToCanonicalCBOR "entities/dormant_epochs/v0" EntitiesDormantEpochsOut
45+
, FromCanonicalCBOR "entities/dormant_epochs/v0" EntitiesDormantEpochsOut
46+
) =>
47+
KnownNamespace "entities/dormant_epochs/v0"
48+
where
49+
type NamespaceKey "entities/dormant_epochs/v0" = EntitiesDormantEpochsIn
50+
type NamespaceEntry "entities/dormant_epochs/v0" = EntitiesDormantEpochsOut
51+
52+
instance
53+
( Era era
54+
, NamespaceEra "entities/dormant_epochs/v0" ~ era
55+
, ToCanonicalCBOR "entities/dormant_epochs/v0" EntitiesDormantEpochsOut
56+
) =>
57+
CanonicalCBOREntryEncoder "entities/dormant_epochs/v0" EntitiesDormantEpochsOut
58+
where
59+
encodeEntry = toCanonicalCBOR (Proxy @"entities/dormant_epochs/v0")
60+
61+
instance
62+
( Era era
63+
, NamespaceEra "entities/dormant_epochs/v0" ~ era
64+
, FromCanonicalCBOR "entities/dormant_epochs/v0" EntitiesDormantEpochsOut
65+
) =>
66+
CanonicalCBOREntryDecoder "entities/dormant_epochs/v0" EntitiesDormantEpochsOut
67+
where
68+
decodeEntry = fromCanonicalCBOR
69+
70+
data EntitiesDormantEpochsIn = EntitiesDormantEpochsIn
71+
deriving (Eq, Ord, Show, Enum, Generic)
72+
73+
type instance NamespaceKeySize "entities/dormant_epochs/v0" = 1
74+
75+
instance IsKey EntitiesDormantEpochsIn where
76+
keySize = namespaceKeySize @"entities/dormant_epochs/v0"
77+
packKeyM =
78+
packM . fromIntegral @_ @Word8 . fromEnum
79+
unpackKeyM =
80+
toEnum . fromIntegral @Word8 @Int <$> unpackM
81+
82+
newtype EntitiesDormantEpochsOut
83+
= EntitiesDormantEpochsOut EpochNo
84+
deriving (Eq, Show, Generic)
85+
86+
deriving newtype instance
87+
ToCanonicalCBOR "entities/dormant_epochs/v0" EpochNo =>
88+
ToCanonicalCBOR "entities/dormant_epochs/v0" EntitiesDormantEpochsOut
89+
90+
deriving newtype instance
91+
FromCanonicalCBOR "entities/dormant_epochs/v0" EpochNo =>
92+
FromCanonicalCBOR "entities/dormant_epochs/v0" EntitiesDormantEpochsOut

libs/cardano-ledger-canonical-state/test/Test/Cardano/Ledger/CanonicalState/Spec.hs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@
1313

1414
module Test.Cardano.Ledger.CanonicalState.Spec (spec) where
1515

16-
import Cardano.Ledger.BaseTypes (EpochInterval, NonNegativeInterval, UnitInterval)
16+
import Cardano.Ledger.BaseTypes (EpochInterval, EpochNo, NonNegativeInterval, UnitInterval)
1717
import Cardano.Ledger.CanonicalState.BasicTypes (CanonicalExUnits (..))
1818
import Cardano.Ledger.CanonicalState.Conway ()
1919
import qualified Cardano.Ledger.CanonicalState.Namespace.Blocks.V0 as Blocks.V0
2020
import qualified Cardano.Ledger.CanonicalState.Namespace.EntitiesCommittee.V0 as Committee.V0
21+
import qualified Cardano.Ledger.CanonicalState.Namespace.EntitiesDormantEpochs.V0 as EntitiesDormantEpochs.V0
2122
import qualified Cardano.Ledger.CanonicalState.Namespace.GovCommittee.V0 as GovCommittee.V0
2223
import qualified Cardano.Ledger.CanonicalState.Namespace.GovConstitution.V0 as GovConstitution.V0
2324
import qualified Cardano.Ledger.CanonicalState.Namespace.GovPParams.V0 as GovPParams.V0
@@ -47,6 +48,12 @@ spec = do
4748
isCanonical @"entities/committee/v0" @Committee.V0.CanonicalCommitteeAuthorization
4849
validateType @"entities/committee/v0" @Committee.V0.CanonicalCommitteeAuthorization
4950
"committee_authorization"
51+
describe "entities/dormant_epochs/v0" $ do
52+
isCanonical @"entities/dormant_epochs/v0" @EpochNo
53+
validateType @"entities/dormant_epochs/v0" @EpochNo "epoch_no"
54+
isCanonical @"entities/dormant_epochs/v0" @EntitiesDormantEpochs.V0.EntitiesDormantEpochsOut
55+
validateType @"entities/dormant_epochs/v0" @EntitiesDormantEpochs.V0.EntitiesDormantEpochsOut
56+
"record_entry"
5057
describe "gov/committee/v0" $ do
5158
isCanonical @"gov/committee/v0" @GovCommittee.V0.CanonicalCommittee
5259
validateType @"gov/committee/v0" @GovCommittee.V0.CanonicalCommittee "committee"
@@ -70,6 +77,7 @@ spec = do
7077
testNS @"blocks/v0"
7178
testNS @"utxo/v0"
7279
testNS @"entities/committee/v0"
80+
testNS @"entities/dormant_epochs/v0"
7381
testNS @"gov/constitution/v0"
7482
testNS @"gov/committee/v0"
7583
testNS @"gov/pparams/v0"

libs/cardano-ledger-canonical-state/testlib/Test/Cardano/Ledger/Conway/CanonicalState/Arbitrary.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Cardano.Ledger.CanonicalState.Conway (
1212
fromGovActionState,
1313
mkCanonicalConstitution,
1414
)
15+
import qualified Cardano.Ledger.CanonicalState.Namespace.EntitiesDormantEpochs.V0 as EntitiesDormantEpochs.V0
1516
import qualified Cardano.Ledger.CanonicalState.Namespace.GovConstitution.V0 as GovConstitution.V0
1617
import qualified Cardano.Ledger.CanonicalState.Namespace.GovPParams.V0 as GovPParams.V0
1718
import qualified Cardano.Ledger.CanonicalState.Namespace.GovProposals.V0 as GovProposals.V0
@@ -32,3 +33,6 @@ instance Arbitrary (GovPParams.V0.GovPParamsOut ConwayEra) where
3233

3334
instance Arbitrary (GovProposals.V0.GovProposalOut CanonicalGovActionState) where
3435
arbitrary = snd . fromGovActionState <$> arbitrary @(GovActionState ConwayEra)
36+
37+
instance Arbitrary EntitiesDormantEpochs.V0.EntitiesDormantEpochsOut where
38+
arbitrary = genericArbitraryU

0 commit comments

Comments
 (0)