Skip to content

Commit b50ed65

Browse files
committed
Added DijkstraPParams
1 parent b07ea85 commit b50ed65

File tree

13 files changed

+582
-157
lines changed

13 files changed

+582
-157
lines changed

eras/conway/impl/src/Cardano/Ledger/Conway/PParams.hs

Lines changed: 39 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{-# LANGUAGE AllowAmbiguousTypes #-}
22
{-# LANGUAGE DataKinds #-}
3+
{-# LANGUAGE DefaultSignatures #-}
34
{-# LANGUAGE DeriveGeneric #-}
45
{-# LANGUAGE DerivingVia #-}
56
{-# LANGUAGE FlexibleContexts #-}
@@ -16,6 +17,7 @@
1617
{-# LANGUAGE StandaloneDeriving #-}
1718
{-# LANGUAGE TypeApplications #-}
1819
{-# LANGUAGE TypeFamilies #-}
20+
{-# LANGUAGE TypeOperators #-}
1921
{-# LANGUAGE UndecidableInstances #-}
2022
{-# LANGUAGE UndecidableSuperClasses #-}
2123
{-# OPTIONS_GHC -Wno-orphans #-}
@@ -77,14 +79,13 @@ module Cardano.Ledger.Conway.PParams (
7779
DRepGroup (..),
7880
PPGroups (..),
7981
StakePoolGroup (..),
80-
conwayModifiedPPGroups,
8182
pvtHardForkInitiationL,
8283
pvtMotionNoConfidenceL,
83-
conwayApplyPPUpdates,
8484
emptyConwayPParams,
8585
emptyConwayPParamsUpdate,
8686
asNaturalHKD,
8787
asBoundedIntegralHKD,
88+
ppGroup,
8889
) where
8990

9091
import Cardano.Ledger.Alonzo.PParams
@@ -148,15 +149,24 @@ import Data.Set (Set)
148149
import qualified Data.Set as Set
149150
import Data.Typeable
150151
import Data.Word (Word16, Word32)
151-
import GHC.Generics (Generic)
152+
import GHC.Generics (Generic (..), K1 (..), M1 (..), (:*:) (..))
152153
import GHC.Stack (HasCallStack)
153-
import Lens.Micro
154+
import Lens.Micro (Lens', lens, set, (^.))
155+
import qualified Lens.Micro as L
154156
import NoThunks.Class (NoThunks (..))
155157
import Numeric.Natural (Natural)
156158
import qualified PlutusLedgerApi.Common as P (Data (..))
157159

158160
class BabbageEraPParams era => ConwayEraPParams era where
159161
modifiedPPGroups :: PParamsUpdate era -> Set PPGroups
162+
default modifiedPPGroups ::
163+
forall a.
164+
( Generic (PParamsHKD StrictMaybe era)
165+
, CollectModifiedPPGroups (Rep (PParamsHKD StrictMaybe era) a)
166+
) =>
167+
PParamsUpdate era ->
168+
Set PPGroups
169+
modifiedPPGroups (PParamsUpdate ppu) = collectModifiedPPGroups $ from @_ @a ppu
160170
ppuWellFormed :: ProtVer -> PParamsUpdate era -> Bool
161171

162172
hkdPoolVotingThresholdsL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f PoolVotingThresholds)
@@ -798,7 +808,7 @@ instance EraPParams ConwayEra where
798808
hkdMinPoolCostL = lens (unTHKD . cppMinPoolCost) $ \pp x -> pp {cppMinPoolCost = THKD x}
799809
ppProtocolVersionL = ppLensHKD . lens cppProtocolVersion (\pp x -> pp {cppProtocolVersion = x})
800810

801-
ppDG = to (const minBound)
811+
ppDG = L.to (const minBound)
802812
ppuProtocolVersionL = notSupportedInThisEraL
803813
hkdDL = notSupportedInThisEraL
804814
hkdExtraEntropyL = notSupportedInThisEraL
@@ -871,7 +881,6 @@ instance BabbageEraPParams ConwayEra where
871881
lens (unTHKD . cppCoinsPerUTxOByte) $ \pp x -> pp {cppCoinsPerUTxOByte = THKD x}
872882

873883
instance ConwayEraPParams ConwayEra where
874-
modifiedPPGroups (PParamsUpdate ppu) = conwayModifiedPPGroups ppu
875884
ppuWellFormed pv ppu =
876885
and
877886
[ -- Numbers
@@ -1173,73 +1182,30 @@ conwayApplyPPUpdates pp ppu =
11731182
THKD SNothing -> cppGet pp
11741183
THKD (SJust ppNewValue) -> THKD ppNewValue
11751184

1176-
conwayModifiedPPGroups :: ConwayPParams StrictMaybe era -> Set PPGroups
1177-
conwayModifiedPPGroups
1178-
( ConwayPParams
1179-
p01
1180-
p02
1181-
p03
1182-
p04
1183-
p05
1184-
p06
1185-
p07
1186-
p08
1187-
p09
1188-
p10
1189-
p11
1190-
p12
1191-
_protocolVersion
1192-
p14
1193-
p15
1194-
p16
1195-
p17
1196-
p18
1197-
p19
1198-
p20
1199-
p21
1200-
p22
1201-
p23
1202-
p24
1203-
p25
1204-
p26
1205-
p27
1206-
p28
1207-
p29
1208-
p30
1209-
p31
1210-
) =
1211-
mconcat
1212-
[ ppGroup p01
1213-
, ppGroup p02
1214-
, ppGroup p03
1215-
, ppGroup p04
1216-
, ppGroup p05
1217-
, ppGroup p06
1218-
, ppGroup p07
1219-
, ppGroup p08
1220-
, ppGroup p09
1221-
, ppGroup p10
1222-
, ppGroup p11
1223-
, ppGroup p12
1224-
, ppGroup p14
1225-
, ppGroup p15
1226-
, ppGroup p16
1227-
, ppGroup p17
1228-
, ppGroup p18
1229-
, ppGroup p19
1230-
, ppGroup p20
1231-
, ppGroup p21
1232-
, ppGroup p22
1233-
, ppGroup p23
1234-
, ppGroup p24
1235-
, ppGroup p25
1236-
, ppGroup p26
1237-
, ppGroup p27
1238-
, ppGroup p28
1239-
, ppGroup p29
1240-
, ppGroup p30
1241-
, ppGroup p31
1242-
]
1185+
class CollectModifiedPPGroups x where
1186+
collectModifiedPPGroups :: x -> Set PPGroups
1187+
1188+
instance
1189+
( CollectModifiedPPGroups (x u)
1190+
, CollectModifiedPPGroups (y u)
1191+
) =>
1192+
CollectModifiedPPGroups ((x :*: y) u)
1193+
where
1194+
collectModifiedPPGroups (x :*: y) = collectModifiedPPGroups x <> collectModifiedPPGroups y
1195+
1196+
instance
1197+
( ToDRepGroup g
1198+
, ToStakePoolGroup h
1199+
) =>
1200+
CollectModifiedPPGroups (K1 i (THKD ('PPGroups g h) StrictMaybe a) p)
1201+
where
1202+
collectModifiedPPGroups (K1 x) = ppGroup x
1203+
1204+
instance CollectModifiedPPGroups (K1 i (NoUpdate a) p) where
1205+
collectModifiedPPGroups _ = mempty
1206+
1207+
instance CollectModifiedPPGroups (a u) => CollectModifiedPPGroups (M1 i c a u) where
1208+
collectModifiedPPGroups (M1 x) = collectModifiedPPGroups x
12431209

12441210
-- | Care should be taken to not apply this function to signed values, otherwise it will result in
12451211
-- an `ArithmeticUnderflow` exception for negative numbers.

eras/dijkstra/cardano-ledger-dijkstra.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ library testlib
125125
cardano-ledger-core:{cardano-ledger-core, testlib},
126126
cardano-ledger-dijkstra,
127127
cardano-ledger-shelley,
128+
generic-random,
128129
microlens,
129130

130131
test-suite tests

eras/dijkstra/src/Cardano/Ledger/Dijkstra/Genesis.hs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{-# LANGUAGE DeriveGeneric #-}
22
{-# LANGUAGE DerivingVia #-}
3+
{-# LANGUAGE RecordWildCards #-}
34
{-# LANGUAGE TypeApplications #-}
45
{-# LANGUAGE TypeFamilies #-}
56
{-# OPTIONS_GHC -Wno-orphans #-}
@@ -18,19 +19,25 @@ import Cardano.Ledger.Binary (
1819
import Cardano.Ledger.Binary.Coders
1920
import Cardano.Ledger.Core
2021
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
22+
import Cardano.Ledger.Dijkstra.PParams (UpgradeDijkstraPParams)
2123
import Cardano.Ledger.Genesis (EraGenesis (..))
22-
import Data.Aeson (FromJSON (..), ToJSON, withObject)
24+
import Data.Aeson (FromJSON (..), ToJSON, Value (..), withObject)
25+
import Data.Functor.Identity (Identity)
2326
import GHC.Generics
2427
import NoThunks.Class (NoThunks)
2528

2629
-- TODO: Currently it is just a placeholder for all the new protocol parameters that will be added
2730
-- in the Dijkstra era
2831
data DijkstraGenesis = DijkstraGenesis
32+
{ dgUpgradePParams :: !(UpgradeDijkstraPParams Identity DijkstraEra)
33+
}
2934
deriving (Eq, Show, Generic)
3035
deriving (ToJSON) via KeyValuePairs DijkstraGenesis
3136

3237
instance FromJSON DijkstraGenesis where
33-
parseJSON = withObject "DijkstraGenesis" $ \_ -> pure DijkstraGenesis
38+
parseJSON = withObject "DijkstraGenesis" $ \obj -> do
39+
dgUpgradePParams <- parseJSON (Object obj)
40+
pure DijkstraGenesis {..}
3441

3542
instance NoThunks DijkstraGenesis
3643

@@ -39,18 +46,23 @@ instance EraGenesis DijkstraEra where
3946

4047
-- TODO: Implement this and use for ToJSON instance
4148
instance ToKeyValuePairs DijkstraGenesis where
42-
toKeyValuePairs DijkstraGenesis = []
49+
toKeyValuePairs dg@(DijkstraGenesis _) =
50+
let DijkstraGenesis {..} = dg
51+
in toKeyValuePairs dgUpgradePParams
4352

4453
instance FromCBOR DijkstraGenesis where
4554
fromCBOR =
4655
eraDecoder @DijkstraEra $
4756
decode $
4857
RecD DijkstraGenesis
58+
<! From
4959

5060
instance ToCBOR DijkstraGenesis where
51-
toCBOR DijkstraGenesis =
52-
toEraCBOR @DijkstraEra . encode $
53-
Rec DijkstraGenesis
61+
toCBOR dg@(DijkstraGenesis _) =
62+
let DijkstraGenesis {..} = dg
63+
in toEraCBOR @DijkstraEra . encode $
64+
Rec DijkstraGenesis
65+
!> To dgUpgradePParams
5466

5567
instance DecCBOR DijkstraGenesis
5668

0 commit comments

Comments
 (0)