Skip to content

Commit 4e5a34d

Browse files
committed
Refactor gov/proposals/v0 namespace definition to include the proposal order
1 parent 0cfbf86 commit 4e5a34d

5 files changed

Lines changed: 44 additions & 24 deletions

File tree

  • libs/cardano-ledger-canonical-state
    • conway/Cardano/Ledger/CanonicalState
    • src/Cardano/Ledger/CanonicalState/Namespace/GovProposals
    • testlib/Test/Cardano/Ledger/Conway/CanonicalState
    • test/Test/Cardano/Ledger/CanonicalState

cabal.project

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ source-repository-package
104104
type: git
105105
location: https://github.com/tweag/cardano-cls.git
106106
subdir: merkle-tree-incremental mempack-scls scls-cbor scls-cardano scls-format scls-core
107-
--sha256: sha256-BoAotLgxMipOIMcZrmlr6EtQzqC5HyEA0ZpK8nvCmJs=
108-
tag: 5161deb34247a51160f2e8d58b6cc2d48044ea2c
107+
--sha256: sha256-fasMDDKpCU9P0PALMOpX4Vutt9EZfmPdMRldEEPiTII=
108+
tag: b607576e149318518c8de7136bcd908551d4bc27
109109

110110
constraints:
111111
-- Happy version 2.2.1 fails to compile haskell-src-exts

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

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ import qualified Codec.CBOR.Decoding as D
5757
import qualified Codec.CBOR.Encoding as E
5858
import Data.Map (Map)
5959
import Data.Text (Text)
60-
import Data.Word (Word8)
60+
import Data.Word (Word64, Word8)
6161
import Lens.Micro
6262

6363
type instance NamespaceEra "blocks/v0" = ConwayEra
@@ -245,24 +245,28 @@ instance KnownNamespace "gov/proposals/v0" where
245245
type NamespaceEntry "gov/proposals/v0" = GovProposalOut CanonicalGovActionState
246246

247247
fromGovActionState ::
248-
GovActionState ConwayEra -> (GovProposalIn, GovProposalOut CanonicalGovActionState)
249-
fromGovActionState GovActionState {..} =
248+
Word64 -> GovActionState ConwayEra -> (GovProposalIn, GovProposalOut CanonicalGovActionState)
249+
fromGovActionState n GovActionState {..} =
250250
( mkGovProposalIn gasId
251-
, GovProposalOut $
252-
CanonicalGovActionState
253-
{ gasProposalProcedure = mkOnChain @ConwayEra gasProposalProcedure
254-
, ..
255-
}
251+
, GovProposalOut
252+
( n
253+
, CanonicalGovActionState
254+
{ gasProposalProcedure = mkOnChain @ConwayEra gasProposalProcedure
255+
, ..
256+
}
257+
)
256258
)
257259

258260
toGovActionState ::
259-
(GovProposalIn, GovProposalOut CanonicalGovActionState) -> GovActionState ConwayEra
260-
toGovActionState (govIn, GovProposalOut CanonicalGovActionState {..}) =
261-
GovActionState
262-
{ gasProposalProcedure = getValue gasProposalProcedure
263-
, gasId = fromGovProposalIn govIn
264-
, ..
265-
}
261+
(GovProposalIn, GovProposalOut CanonicalGovActionState) -> (Word64, GovActionState ConwayEra)
262+
toGovActionState (govIn, GovProposalOut (n, CanonicalGovActionState {..})) =
263+
( n
264+
, GovActionState
265+
{ gasProposalProcedure = getValue gasProposalProcedure
266+
, gasId = fromGovProposalIn govIn
267+
, ..
268+
}
269+
)
266270

267271
mkGovProposalIn :: GovActionId -> GovProposalIn
268272
mkGovProposalIn GovActionId {gaidGovActionIx = GovActionIx idx, gaidTxId} =

libs/cardano-ledger-canonical-state/src/Cardano/Ledger/CanonicalState/Namespace/GovProposals/V0.hs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import Cardano.SCLS.Versioned (Versioned (..))
4141
import Data.MemPack
4242
import Data.MemPack.ByteOrdered
4343
import Data.Proxy (Proxy (..))
44-
import Data.Word (Word16)
44+
import Data.Word (Word16, Word64)
4545
import GHC.Generics (Generic)
4646

4747
newtype CanonicalGovActionIx = CanonicalGovActionIx Word16
@@ -76,9 +76,7 @@ instance IsKey GovProposalIn where
7676
gaidGovActionIx <- unpackM
7777
return $ GovProposalIn CanonicalGovActionId {..}
7878

79-
-- | Canonical wrapper over gov action state. Because this is on-chain data
80-
-- we create a wrapper for that.
81-
newtype GovProposalOut v = GovProposalOut v
79+
newtype GovProposalOut v = GovProposalOut (Word64, v)
8280
deriving (Eq, Show, Generic)
8381
deriving newtype (ToCanonicalCBOR "gov/proposals/v0")
8482
deriving newtype (FromCanonicalCBOR "gov/proposals/v0")

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@ module Test.Cardano.Ledger.CanonicalState.Spec (spec) where
1515

1616
import Cardano.Ledger.BaseTypes (EpochInterval, NonNegativeInterval, UnitInterval)
1717
import Cardano.Ledger.CanonicalState.BasicTypes (CanonicalExUnits (..))
18-
import Cardano.Ledger.CanonicalState.Conway ()
18+
import Cardano.Ledger.CanonicalState.Conway (CanonicalGovActionState)
1919
import qualified Cardano.Ledger.CanonicalState.Namespace.Blocks.V0 as Blocks.V0
2020
import qualified Cardano.Ledger.CanonicalState.Namespace.EntitiesCommittee.V0 as Committee.V0
2121
import qualified Cardano.Ledger.CanonicalState.Namespace.GovCommittee.V0 as GovCommittee.V0
2222
import qualified Cardano.Ledger.CanonicalState.Namespace.GovConstitution.V0 as GovConstitution.V0
2323
import qualified Cardano.Ledger.CanonicalState.Namespace.GovPParams.V0 as GovPParams.V0
24+
import qualified Cardano.Ledger.CanonicalState.Namespace.GovProposals.V0 as GovProposals.V0
2425
import qualified Cardano.Ledger.CanonicalState.Namespace.UTxO.V0 as UTxO.V0
2526
import Cardano.Ledger.Conway (ConwayEra)
2627
import Cardano.Ledger.Core (PParams)
@@ -66,6 +67,12 @@ spec = do
6667
validateType @"gov/pparams/v0" @CanonicalExUnits "ex_units"
6768
isCanonical @"gov/pparams/v0" @(PParams ConwayEra)
6869
validateType @"gov/pparams/v0" @(GovPParams.V0.GovPParamsOut ConwayEra) "gov_pparams_out"
70+
describe "gov/proposals/v0" $ do
71+
isCanonical @"gov/proposals/v0" @CanonicalGovActionState
72+
validateType @"gov/proposals/v0" @CanonicalGovActionState "proposal"
73+
isCanonical @"gov/proposals/v0" @(GovProposals.V0.GovProposalOut CanonicalGovActionState)
74+
validateType @"gov/proposals/v0" @(GovProposals.V0.GovProposalOut CanonicalGovActionState)
75+
"record_entry"
6976
describe "namespaces" $ do
7077
testNS @"blocks/v0"
7178
testNS @"utxo/v0"

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import qualified Cardano.Ledger.CanonicalState.Namespace.GovConstitution.V0 as G
1616
import qualified Cardano.Ledger.CanonicalState.Namespace.GovPParams.V0 as GovPParams.V0
1717
import qualified Cardano.Ledger.CanonicalState.Namespace.GovProposals.V0 as GovProposals.V0
1818
import Cardano.Ledger.Conway (ConwayEra)
19-
import Cardano.Ledger.Conway.Governance (Constitution, GovActionState)
19+
import Cardano.Ledger.Conway.Governance (Constitution)
2020
import Generic.Random (genericArbitraryU)
2121
import Test.Cardano.Ledger.Conway.Arbitrary ()
2222
import Test.QuickCheck (Arbitrary (..))
@@ -30,5 +30,16 @@ instance Arbitrary GovConstitution.V0.GovConstitutionOut where
3030
instance Arbitrary (GovPParams.V0.GovPParamsOut ConwayEra) where
3131
arbitrary = genericArbitraryU
3232

33+
instance Arbitrary GovProposals.V0.CanonicalGovActionIx where
34+
arbitrary = genericArbitraryU
35+
36+
instance Arbitrary GovProposals.V0.CanonicalGovActionId where
37+
arbitrary = genericArbitraryU
38+
39+
instance Arbitrary CanonicalGovActionState where
40+
arbitrary = do
41+
GovProposals.V0.GovProposalOut (_, canonicalGovActionState) <- arbitrary
42+
pure canonicalGovActionState
43+
3344
instance Arbitrary (GovProposals.V0.GovProposalOut CanonicalGovActionState) where
34-
arbitrary = snd . fromGovActionState <$> arbitrary @(GovActionState ConwayEra)
45+
arbitrary = snd . fromGovActionState 0 <$> arbitrary

0 commit comments

Comments
 (0)