Skip to content

Commit b4980a4

Browse files
Soupstrawlehins
andcommitted
Added DijkstraPParams, made Conway GoldenSpec era-specific
Co-authored-by: Alexey Kuleshevich <alexey.kuleshevich@iohk.io>
1 parent 19923f2 commit b4980a4

File tree

34 files changed

+1524
-215
lines changed

34 files changed

+1524
-215
lines changed

eras/alonzo/impl/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## 1.14.0.0
44

5+
* Add `emptyUpgradePParamsUpdate` method to `AlonzoEraPParams`
56
* Add `mkBasicBlockBodyAlonzo` and `txSeqBlockBodyAlonzoL` to use in Babbage, Conway and Dijkstra.
67
* Added `eraUnsupportedLanguage`
78
* Changed return type of `mkPlutusScript` and `mkBinaryPlutusScript` from `Maybe` to `MonadFail`

eras/alonzo/impl/src/Cardano/Ledger/Alonzo/PParams.hs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{-# LANGUAGE AllowAmbiguousTypes #-}
22
{-# LANGUAGE DataKinds #-}
3+
{-# LANGUAGE DefaultSignatures #-}
34
{-# LANGUAGE DeriveAnyClass #-}
45
{-# LANGUAGE DeriveGeneric #-}
56
{-# LANGUAGE DerivingStrategies #-}
@@ -17,6 +18,7 @@
1718
{-# LANGUAGE StandaloneDeriving #-}
1819
{-# LANGUAGE TypeApplications #-}
1920
{-# LANGUAGE TypeFamilies #-}
21+
{-# LANGUAGE TypeOperators #-}
2022
{-# LANGUAGE UndecidableInstances #-}
2123
{-# LANGUAGE UndecidableSuperClasses #-}
2224
{-# OPTIONS_GHC -Wno-orphans #-}
@@ -312,6 +314,7 @@ instance EraPParams AlonzoEra where
312314

313315
upgradePParamsHKD = upgradeAlonzoPParams
314316
downgradePParamsHKD = downgradeAlonzoPParams
317+
emptyUpgradePParamsUpdate = emptyAlonzoUpgradePParamsUpdate
315318

316319
hkdMinFeeAL = lens appMinFeeA $ \pp x -> pp {appMinFeeA = x}
317320
hkdMinFeeBL = lens appMinFeeB $ \pp x -> pp {appMinFeeB = x}
@@ -420,6 +423,10 @@ data UpgradeAlonzoPParams f = UpgradeAlonzoPParams
420423
}
421424
deriving (Generic)
422425

426+
emptyAlonzoUpgradePParamsUpdate :: UpgradeAlonzoPParams StrictMaybe
427+
emptyAlonzoUpgradePParamsUpdate =
428+
UpgradeAlonzoPParams SNothing SNothing SNothing SNothing SNothing SNothing SNothing SNothing
429+
423430
deriving instance Eq (UpgradeAlonzoPParams Identity)
424431

425432
deriving instance Show (UpgradeAlonzoPParams Identity)

eras/conway/impl/CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
## 1.20.0.0
44

5+
* Removed:
6+
* `maxRefScriptSizePerTx`
7+
* `maxRefScriptSizePerBlock`
8+
* `refScriptCostMultiplier`
9+
* `refScriptCostStride`
10+
* Added:
11+
* `ppMaxRefScriptSizePerTxG`
12+
* `ppMaxRefScriptSizePerBlockG`
13+
* `ppRefScriptCostMultiplierG`
14+
* `ppRefScriptCostStrideG`
515
* Add `mkDelegatee` and `getDRepDelegatee`
616
* Depercated `getVoteDelegatee` in favor of `getDRepDelegatee`
717
* Add `conwayRegisterInitialFundsThenStaking`

eras/conway/impl/cardano-ledger-conway.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ library testlib
137137
Test.Cardano.Ledger.Conway.Era
138138
Test.Cardano.Ledger.Conway.Genesis
139139
Test.Cardano.Ledger.Conway.GenesisSpec
140-
Test.Cardano.Ledger.Conway.GoldenSpec
141140
Test.Cardano.Ledger.Conway.GovActionReorderSpec
142141
Test.Cardano.Ledger.Conway.Imp
143142
Test.Cardano.Ledger.Conway.Imp.BbodySpec
@@ -251,6 +250,7 @@ test-suite tests
251250
other-modules:
252251
Paths_cardano_ledger_conway
253252
Test.Cardano.Ledger.Conway.Binary.CddlSpec
253+
Test.Cardano.Ledger.Conway.GoldenSpec
254254
Test.Cardano.Ledger.Conway.GoldenTranslation
255255

256256
default-language: Haskell2010

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

Lines changed: 68 additions & 74 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 #-}
@@ -9,13 +10,15 @@
910
{-# LANGUAGE LambdaCase #-}
1011
{-# LANGUAGE MultiParamTypeClasses #-}
1112
{-# LANGUAGE NamedFieldPuns #-}
13+
{-# LANGUAGE NumericUnderscores #-}
1214
{-# LANGUAGE OverloadedStrings #-}
1315
{-# LANGUAGE RankNTypes #-}
1416
{-# LANGUAGE RecordWildCards #-}
1517
{-# LANGUAGE ScopedTypeVariables #-}
1618
{-# LANGUAGE StandaloneDeriving #-}
1719
{-# LANGUAGE TypeApplications #-}
1820
{-# LANGUAGE TypeFamilies #-}
21+
{-# LANGUAGE TypeOperators #-}
1922
{-# LANGUAGE UndecidableInstances #-}
2023
{-# LANGUAGE UndecidableSuperClasses #-}
2124
{-# OPTIONS_GHC -Wno-orphans #-}
@@ -77,14 +80,13 @@ module Cardano.Ledger.Conway.PParams (
7780
DRepGroup (..),
7881
PPGroups (..),
7982
StakePoolGroup (..),
80-
conwayModifiedPPGroups,
8183
pvtHardForkInitiationL,
8284
pvtMotionNoConfidenceL,
83-
conwayApplyPPUpdates,
8485
emptyConwayPParams,
8586
emptyConwayPParamsUpdate,
8687
asNaturalHKD,
8788
asBoundedIntegralHKD,
89+
ppGroup,
8890
) where
8991

9092
import Cardano.Ledger.Alonzo.PParams
@@ -99,12 +101,16 @@ import Cardano.Ledger.Babbage (BabbageEra)
99101
import Cardano.Ledger.Babbage.Core
100102
import Cardano.Ledger.Babbage.PParams
101103
import Cardano.Ledger.BaseTypes (
104+
BoundedRational (..),
102105
EpochInterval (..),
103106
NonNegativeInterval,
107+
NonZero,
108+
PositiveInterval,
104109
ProtVer (ProtVer),
105110
ToKeyValuePairs (..),
106111
UnitInterval,
107112
integralToBounded,
113+
knownNonZeroBounded,
108114
strictMaybeToMaybe,
109115
)
110116
import Cardano.Ledger.Binary (
@@ -141,22 +147,31 @@ import Data.Foldable (foldlM)
141147
import Data.Functor.Identity (Identity)
142148
import qualified Data.IntMap as IntMap
143149
import qualified Data.Map.Strict as Map
144-
import Data.Maybe (mapMaybe)
150+
import Data.Maybe (fromJust, mapMaybe)
145151
import Data.Maybe.Strict (StrictMaybe (..))
146152
import Data.Proxy
147153
import Data.Set (Set)
148154
import qualified Data.Set as Set
149155
import Data.Typeable
150156
import Data.Word (Word16, Word32)
151-
import GHC.Generics (Generic)
157+
import GHC.Generics (Generic (..), K1 (..), M1 (..), (:*:) (..))
152158
import GHC.Stack (HasCallStack)
153-
import Lens.Micro
159+
import Lens.Micro (Lens', SimpleGetter, lens, set, (^.))
160+
import qualified Lens.Micro as L
154161
import NoThunks.Class (NoThunks (..))
155162
import Numeric.Natural (Natural)
156163
import qualified PlutusLedgerApi.Common as P (Data (..))
157164

158165
class BabbageEraPParams era => ConwayEraPParams era where
159166
modifiedPPGroups :: PParamsUpdate era -> Set PPGroups
167+
default modifiedPPGroups ::
168+
forall a.
169+
( Generic (PParamsHKD StrictMaybe era)
170+
, CollectModifiedPPGroups (Rep (PParamsHKD StrictMaybe era) a)
171+
) =>
172+
PParamsUpdate era ->
173+
Set PPGroups
174+
modifiedPPGroups (PParamsUpdate ppu) = collectModifiedPPGroups $ from @_ @a ppu
160175
ppuWellFormed :: ProtVer -> PParamsUpdate era -> Bool
161176

162177
hkdPoolVotingThresholdsL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f PoolVotingThresholds)
@@ -169,6 +184,10 @@ class BabbageEraPParams era => ConwayEraPParams era where
169184
hkdDRepActivityL :: HKDFunctor f => Lens' (PParamsHKD f era) (HKD f EpochInterval)
170185
hkdMinFeeRefScriptCostPerByteL ::
171186
HKDFunctor f => Lens' (PParamsHKD f era) (HKD f NonNegativeInterval)
187+
ppMaxRefScriptSizePerTxG :: SimpleGetter (PParams era) Word32
188+
ppMaxRefScriptSizePerBlockG :: SimpleGetter (PParams era) Word32
189+
ppRefScriptCostMultiplierG :: SimpleGetter (PParams era) PositiveInterval
190+
ppRefScriptCostStrideG :: SimpleGetter (PParams era) (NonZero Word32)
172191

173192
instance ConwayEraPParams era => ToPlutusData (PParamsUpdate era) where
174193
toPlutusData ppu = P.Map $ mapMaybe ppToData (eraPParams @era)
@@ -779,6 +798,7 @@ instance EraPParams ConwayEra where
779798
emptyPParamsIdentity = emptyConwayPParams
780799
emptyPParamsStrictMaybe = emptyConwayPParamsUpdate
781800

801+
emptyUpgradePParamsUpdate = emptyConwayUpgradePParamsUpdate
782802
upgradePParamsHKD = upgradeConwayPParams
783803
downgradePParamsHKD () = downgradeConwayPParams
784804

@@ -798,7 +818,7 @@ instance EraPParams ConwayEra where
798818
hkdMinPoolCostL = lens (unTHKD . cppMinPoolCost) $ \pp x -> pp {cppMinPoolCost = THKD x}
799819
ppProtocolVersionL = ppLensHKD . lens cppProtocolVersion (\pp x -> pp {cppProtocolVersion = x})
800820

801-
ppDG = to (const minBound)
821+
ppDG = L.to (const minBound)
802822
ppuProtocolVersionL = notSupportedInThisEraL
803823
hkdDL = notSupportedInThisEraL
804824
hkdExtraEntropyL = notSupportedInThisEraL
@@ -838,6 +858,20 @@ instance EraPParams ConwayEra where
838858
, ppMinFeeRefScriptCostPerByte
839859
]
840860

861+
emptyConwayUpgradePParamsUpdate :: UpgradePParams StrictMaybe ConwayEra
862+
emptyConwayUpgradePParamsUpdate =
863+
UpgradeConwayPParams
864+
SNothing
865+
SNothing
866+
SNothing
867+
SNothing
868+
SNothing
869+
SNothing
870+
SNothing
871+
SNothing
872+
SNothing
873+
SNothing
874+
841875
instance AlonzoEraPParams ConwayEra where
842876
hkdCoinsPerUTxOWordL = notSupportedInThisEraL
843877
hkdCostModelsL = lens (unTHKD . cppCostModels) $ \pp x -> pp {cppCostModels = THKD x}
@@ -871,7 +905,6 @@ instance BabbageEraPParams ConwayEra where
871905
lens (unTHKD . cppCoinsPerUTxOByte) $ \pp x -> pp {cppCoinsPerUTxOByte = THKD x}
872906

873907
instance ConwayEraPParams ConwayEra where
874-
modifiedPPGroups (PParamsUpdate ppu) = conwayModifiedPPGroups ppu
875908
ppuWellFormed pv ppu =
876909
and
877910
[ -- Numbers
@@ -918,6 +951,10 @@ instance ConwayEraPParams ConwayEra where
918951
lens (unTHKD . cppDRepActivity) $ \pp x -> pp {cppDRepActivity = THKD x}
919952
hkdMinFeeRefScriptCostPerByteL =
920953
lens (unTHKD . cppMinFeeRefScriptCostPerByte) $ \pp x -> pp {cppMinFeeRefScriptCostPerByte = THKD x}
954+
ppMaxRefScriptSizePerTxG = L.to . const $ 200 * 1024
955+
ppMaxRefScriptSizePerBlockG = L.to . const $ 1024 * 1024
956+
ppRefScriptCostMultiplierG = L.to . const . fromJust $ boundRational 1.2
957+
ppRefScriptCostStrideG = L.to . const $ knownNonZeroBounded @25_600
921958

922959
-- | Returns a basic "empty" `PParams` structure with all zero values.
923960
emptyConwayPParams :: forall era. Era era => ConwayPParams Identity era
@@ -1173,73 +1210,30 @@ conwayApplyPPUpdates pp ppu =
11731210
THKD SNothing -> cppGet pp
11741211
THKD (SJust ppNewValue) -> THKD ppNewValue
11751212

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-
]
1213+
class CollectModifiedPPGroups x where
1214+
collectModifiedPPGroups :: x -> Set PPGroups
1215+
1216+
instance
1217+
( CollectModifiedPPGroups (x u)
1218+
, CollectModifiedPPGroups (y u)
1219+
) =>
1220+
CollectModifiedPPGroups ((x :*: y) u)
1221+
where
1222+
collectModifiedPPGroups (x :*: y) = collectModifiedPPGroups x <> collectModifiedPPGroups y
1223+
1224+
instance
1225+
( ToDRepGroup g
1226+
, ToStakePoolGroup h
1227+
) =>
1228+
CollectModifiedPPGroups (K1 i (THKD ('PPGroups g h) StrictMaybe a) p)
1229+
where
1230+
collectModifiedPPGroups (K1 x) = ppGroup x
1231+
1232+
instance CollectModifiedPPGroups (K1 i (NoUpdate a) p) where
1233+
collectModifiedPPGroups _ = mempty
1234+
1235+
instance CollectModifiedPPGroups (a u) => CollectModifiedPPGroups (M1 i c a u) where
1236+
collectModifiedPPGroups (M1 x) = collectModifiedPPGroups x
12431237

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

eras/conway/impl/src/Cardano/Ledger/Conway/Rules/Bbody.hs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
module Cardano.Ledger.Conway.Rules.Bbody (
2020
ConwayBBODY,
2121
ConwayBbodyPredFailure (..),
22-
maxRefScriptSizePerBlock,
2322
alonzoToConwayBbodyPredFailure,
2423
shelleyToConwayBbodyPredFailure,
2524
totalRefScriptSizeInBlock,
@@ -56,6 +55,7 @@ import Cardano.Ledger.Binary (DecCBOR (..), EncCBOR (..))
5655
import Cardano.Ledger.Binary.Coders (Decode (..), Encode (..), decode, encode, (!>), (<!))
5756
import Cardano.Ledger.Block (Block (..))
5857
import Cardano.Ledger.Conway.Era (ConwayBBODY, ConwayEra)
58+
import Cardano.Ledger.Conway.PParams (ConwayEraPParams (..))
5959
import Cardano.Ledger.Conway.Rules.Cert (ConwayCertPredFailure)
6060
import Cardano.Ledger.Conway.Rules.Certs (ConwayCertsPredFailure)
6161
import Cardano.Ledger.Conway.Rules.Deleg (ConwayDelegPredFailure)
@@ -97,16 +97,11 @@ import Data.Monoid (Sum (getSum))
9797
import qualified Data.Monoid as Monoid (Sum (..))
9898
import Data.Sequence (Seq)
9999
import Data.Sequence.Strict (StrictSeq (..))
100+
import Data.Word (Word32)
100101
import GHC.Generics (Generic)
101102
import Lens.Micro
102103
import NoThunks.Class (NoThunks (..))
103104

104-
-- | In the next era this will become a proper protocol parameter.
105-
-- For now this is a hard coded limit on the total number of bytes of all reference scripts
106-
-- combined from all transactions within a block.
107-
maxRefScriptSizePerBlock :: Int
108-
maxRefScriptSizePerBlock = 1024 * 1024 -- 1MiB
109-
110105
data ConwayBbodyPredFailure era
111106
= WrongBlockBodySizeBBODY (Mismatch 'RelEQ Int)
112107
| InvalidBodyHashBBODY (Mismatch 'RelEQ (Hash HASH EraIndependentBlockBody))
@@ -258,6 +253,7 @@ instance
258253
, EraRule "BBODY" era ~ ConwayBBODY era
259254
, AlonzoEraTx era
260255
, BabbageEraTxBody era
256+
, ConwayEraPParams era
261257
) =>
262258
STS (ConwayBBODY era)
263259
where
@@ -288,6 +284,7 @@ conwayBbodyTransition ::
288284
, AlonzoEraTx era
289285
, EraBlockBody era
290286
, BabbageEraTxBody era
287+
, ConwayEraPParams era
291288
) =>
292289
TransitionRule (EraRule "BBODY" era)
293290
conwayBbodyTransition = do
@@ -301,6 +298,7 @@ conwayBbodyTransition = do
301298
let utxo = utxosUtxo (lsUTxOState ls)
302299
txs = txsSeq ^. txSeqBlockBodyL
303300
totalRefScriptSize = totalRefScriptSizeInBlock (pp ^. ppProtocolVersionL) txs utxo
301+
maxRefScriptSizePerBlock = fromIntegral @Word32 @Int $ pp ^. ppMaxRefScriptSizePerBlockG
304302
totalRefScriptSize
305303
<= maxRefScriptSizePerBlock
306304
?! injectFailure

0 commit comments

Comments
 (0)