|
1 | 1 | {-# LANGUAGE AllowAmbiguousTypes #-} |
2 | 2 | {-# LANGUAGE DataKinds #-} |
| 3 | +{-# LANGUAGE DefaultSignatures #-} |
3 | 4 | {-# LANGUAGE DeriveGeneric #-} |
4 | 5 | {-# LANGUAGE DerivingVia #-} |
5 | 6 | {-# LANGUAGE FlexibleContexts #-} |
|
16 | 17 | {-# LANGUAGE StandaloneDeriving #-} |
17 | 18 | {-# LANGUAGE TypeApplications #-} |
18 | 19 | {-# LANGUAGE TypeFamilies #-} |
| 20 | +{-# LANGUAGE TypeOperators #-} |
19 | 21 | {-# LANGUAGE UndecidableInstances #-} |
20 | 22 | {-# LANGUAGE UndecidableSuperClasses #-} |
21 | 23 | {-# OPTIONS_GHC -Wno-orphans #-} |
@@ -77,14 +79,13 @@ module Cardano.Ledger.Conway.PParams ( |
77 | 79 | DRepGroup (..), |
78 | 80 | PPGroups (..), |
79 | 81 | StakePoolGroup (..), |
80 | | - conwayModifiedPPGroups, |
81 | 82 | pvtHardForkInitiationL, |
82 | 83 | pvtMotionNoConfidenceL, |
83 | | - conwayApplyPPUpdates, |
84 | 84 | emptyConwayPParams, |
85 | 85 | emptyConwayPParamsUpdate, |
86 | 86 | asNaturalHKD, |
87 | 87 | asBoundedIntegralHKD, |
| 88 | + ppGroup, |
88 | 89 | ) where |
89 | 90 |
|
90 | 91 | import Cardano.Ledger.Alonzo.PParams |
@@ -148,15 +149,24 @@ import Data.Set (Set) |
148 | 149 | import qualified Data.Set as Set |
149 | 150 | import Data.Typeable |
150 | 151 | import Data.Word (Word16, Word32) |
151 | | -import GHC.Generics (Generic) |
| 152 | +import GHC.Generics (Generic (..), K1 (..), M1 (..), (:*:) (..)) |
152 | 153 | import GHC.Stack (HasCallStack) |
153 | | -import Lens.Micro |
| 154 | +import Lens.Micro (Lens', lens, set, (^.)) |
| 155 | +import qualified Lens.Micro as L |
154 | 156 | import NoThunks.Class (NoThunks (..)) |
155 | 157 | import Numeric.Natural (Natural) |
156 | 158 | import qualified PlutusLedgerApi.Common as P (Data (..)) |
157 | 159 |
|
158 | 160 | class BabbageEraPParams era => ConwayEraPParams era where |
159 | 161 | 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 |
160 | 170 | ppuWellFormed :: ProtVer -> PParamsUpdate era -> Bool |
161 | 171 |
|
162 | 172 | hkdPoolVotingThresholdsL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f PoolVotingThresholds) |
@@ -798,7 +808,7 @@ instance EraPParams ConwayEra where |
798 | 808 | hkdMinPoolCostL = lens (unTHKD . cppMinPoolCost) $ \pp x -> pp {cppMinPoolCost = THKD x} |
799 | 809 | ppProtocolVersionL = ppLensHKD . lens cppProtocolVersion (\pp x -> pp {cppProtocolVersion = x}) |
800 | 810 |
|
801 | | - ppDG = to (const minBound) |
| 811 | + ppDG = L.to (const minBound) |
802 | 812 | ppuProtocolVersionL = notSupportedInThisEraL |
803 | 813 | hkdDL = notSupportedInThisEraL |
804 | 814 | hkdExtraEntropyL = notSupportedInThisEraL |
@@ -871,7 +881,6 @@ instance BabbageEraPParams ConwayEra where |
871 | 881 | lens (unTHKD . cppCoinsPerUTxOByte) $ \pp x -> pp {cppCoinsPerUTxOByte = THKD x} |
872 | 882 |
|
873 | 883 | instance ConwayEraPParams ConwayEra where |
874 | | - modifiedPPGroups (PParamsUpdate ppu) = conwayModifiedPPGroups ppu |
875 | 884 | ppuWellFormed pv ppu = |
876 | 885 | and |
877 | 886 | [ -- Numbers |
@@ -1173,73 +1182,30 @@ conwayApplyPPUpdates pp ppu = |
1173 | 1182 | THKD SNothing -> cppGet pp |
1174 | 1183 | THKD (SJust ppNewValue) -> THKD ppNewValue |
1175 | 1184 |
|
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 |
1243 | 1209 |
|
1244 | 1210 | -- | Care should be taken to not apply this function to signed values, otherwise it will result in |
1245 | 1211 | -- an `ArithmeticUnderflow` exception for negative numbers. |
|
0 commit comments