@@ -21,7 +21,7 @@ module Cardano.Ledger.Alonzo.Genesis (
2121 extraConfig ,
2222 AlonzoGenesis ,
2323 agCoinsPerUTxOWord ,
24- agCostModels ,
24+ agPlutusV1CostModel ,
2525 agPrices ,
2626 agMaxTxExUnits ,
2727 agMaxBlockExUnits ,
@@ -38,25 +38,29 @@ import Cardano.Ledger.Alonzo.PParams (
3838 CoinPerWord ,
3939 UpgradeAlonzoPParams (.. ),
4040 )
41- import Cardano.Ledger.Alonzo.Scripts (CostModels , ExUnits (.. ), Prices (.. ))
41+ import Cardano.Ledger.Alonzo.Scripts (
42+ CostModel ,
43+ CostModels ,
44+ ExUnits (.. ),
45+ Prices (.. ),
46+ decodeCostModel ,
47+ decodeCostModelsLenient ,
48+ encodeCostModel ,
49+ )
4250import Cardano.Ledger.BaseTypes (KeyValuePairs (.. ), ToKeyValuePairs (.. ))
4351import Cardano.Ledger.Binary (
44- DecCBOR ,
45- EncCBOR ,
52+ DecCBOR ( .. ) ,
53+ EncCBOR ( .. ) ,
4654 FromCBOR (.. ),
4755 ToCBOR (.. ),
56+ decodeNullMaybe ,
57+ encodeNullMaybe ,
4858 )
49- import Cardano.Ledger.Binary.Coders (
50- Decode (From , RecD ),
51- Encode (Rec , To ),
52- decode ,
53- encode ,
54- (!>) ,
55- (<!) ,
56- )
59+ import Cardano.Ledger.Binary.Coders
5760import Cardano.Ledger.Core
5861import Cardano.Ledger.Genesis (EraGenesis (.. ))
59- import Cardano.Ledger.Plutus.CostModels (parseCostModels )
62+ import Cardano.Ledger.Plutus.CostModels (parseCostModelAsArray , parseCostModels )
63+ import Cardano.Ledger.Plutus.Language (Language (.. ))
6064import Control.DeepSeq (NFData )
6165import Data.Aeson (FromJSON (.. ), ToJSON (.. ), (.:) , (.:?) , (.=) )
6266import qualified Data.Aeson as Aeson
@@ -81,20 +85,38 @@ newtype AlonzoExtraConfig = AlonzoExtraConfig
8185 { aecCostModels :: Maybe CostModels
8286 }
8387 deriving (Eq )
84- deriving newtype (EncCBOR , DecCBOR , NFData , NoThunks , Show )
88+ deriving newtype (NFData , NoThunks , Show )
89+
90+ instance DecCBOR AlonzoExtraConfig
91+
92+ instance EncCBOR AlonzoExtraConfig
93+
94+ instance FromCBOR AlonzoExtraConfig where
95+ fromCBOR =
96+ eraDecoder @ AlonzoEra $
97+ decode $
98+ RecD AlonzoExtraConfig
99+ <! D (decodeNullMaybe decodeCostModelsLenient)
100+
101+ instance ToCBOR AlonzoExtraConfig where
102+ toCBOR x@ (AlonzoExtraConfig _) =
103+ let AlonzoExtraConfig {.. } = x
104+ in toEraCBOR @ AlonzoEra . encode $
105+ Rec AlonzoExtraConfig
106+ !> E (encodeNullMaybe encCBOR) aecCostModels
85107
86108instance FromJSON AlonzoExtraConfig where
87109 parseJSON = Aeson. withObject " Extra Config" $ \ o ->
88110 o .:? " costModels" >>= \ case
89111 Nothing -> pure $ AlonzoExtraConfig Nothing
90- Just val -> AlonzoExtraConfig . Just <$> parseCostModels True [] val
112+ Just val -> AlonzoExtraConfig . Just <$> parseCostModels True val
91113
92114instance ToJSON AlonzoExtraConfig where
93115 toJSON (AlonzoExtraConfig cms) = Aeson. object [" costModels" .= cms]
94116
95117pattern AlonzoGenesis ::
96118 CoinPerWord ->
97- CostModels ->
119+ CostModel ->
98120 Prices ->
99121 ExUnits ->
100122 ExUnits ->
@@ -105,7 +127,7 @@ pattern AlonzoGenesis ::
105127 AlonzoGenesis
106128pattern AlonzoGenesis
107129 { agCoinsPerUTxOWord
108- , agCostModels
130+ , agPlutusV1CostModel
109131 , agPrices
110132 , agMaxTxExUnits
111133 , agMaxBlockExUnits
@@ -118,7 +140,7 @@ pattern AlonzoGenesis
118140 { unAlonzoGenesisWrapper =
119141 UpgradeAlonzoPParams
120142 { uappCoinsPerUTxOWord = agCoinsPerUTxOWord
121- , uappCostModels = agCostModels
143+ , uappPlutusV1CostModel = agPlutusV1CostModel
122144 , uappPrices = agPrices
123145 , uappMaxTxExUnits = agMaxTxExUnits
124146 , uappMaxBlockExUnits = agMaxBlockExUnits
@@ -142,7 +164,7 @@ pattern AlonzoGenesis
142164 AlonzoGenesisWrapper
143165 ( UpgradeAlonzoPParams
144166 { uappCoinsPerUTxOWord = coinsPerUTxOWord_
145- , uappCostModels = costModels_
167+ , uappPlutusV1CostModel = costModels_
146168 , uappPrices = prices_
147169 , uappMaxTxExUnits = maxTxExUnits_
148170 , uappMaxBlockExUnits = maxBlockExUnits_
@@ -169,7 +191,7 @@ instance FromCBOR AlonzoGenesis where
169191 decode $
170192 RecD AlonzoGenesis
171193 <! From
172- <! From
194+ <! D (decodeCostModel PlutusV1 )
173195 <! From
174196 <! From
175197 <! From
@@ -179,33 +201,24 @@ instance FromCBOR AlonzoGenesis where
179201 <! From
180202
181203instance ToCBOR AlonzoGenesis where
182- toCBOR
183- AlonzoGenesis
184- { agCoinsPerUTxOWord
185- , agCostModels
186- , agPrices
187- , agMaxTxExUnits
188- , agMaxBlockExUnits
189- , agMaxValSize
190- , agCollateralPercentage
191- , agMaxCollateralInputs
192- } =
193- toEraCBOR @ AlonzoEra
194- . encode
195- $ Rec AlonzoGenesis
196- !> To agCoinsPerUTxOWord
197- !> To agCostModels
198- !> To agPrices
199- !> To agMaxTxExUnits
200- !> To agMaxBlockExUnits
201- !> To agMaxValSize
202- !> To agCollateralPercentage
203- !> To agMaxCollateralInputs
204+ toCBOR x@ (AlonzoGenesis _ _ _ _ _ _ _ _ _) =
205+ let AlonzoGenesis {.. } = x
206+ in toEraCBOR @ AlonzoEra . encode $
207+ Rec AlonzoGenesis
208+ !> To agCoinsPerUTxOWord
209+ !> E encodeCostModel agPlutusV1CostModel
210+ !> To agPrices
211+ !> To agMaxTxExUnits
212+ !> To agMaxBlockExUnits
213+ !> To agMaxValSize
214+ !> To agCollateralPercentage
215+ !> To agMaxCollateralInputs
216+ !> To agExtraConfig
204217
205218instance FromJSON AlonzoGenesis where
206219 parseJSON = Aeson. withObject " Alonzo Genesis" $ \ o -> do
207220 agCoinsPerUTxOWord <- o .: " lovelacePerUTxOWord"
208- agCostModels <- parseCostModels False =<< o .: " costModels "
221+ agPlutusV1CostModel <- parseCostModelAsArray False PlutusV1 =<< o .: " plutusV1CostModel "
209222 agPrices <- o .: " executionPrices"
210223 agMaxTxExUnits <- o .: " maxTxExUnits"
211224 agMaxBlockExUnits <- o .: " maxBlockExUnits"
@@ -218,7 +231,7 @@ instance FromJSON AlonzoGenesis where
218231instance ToKeyValuePairs AlonzoGenesis where
219232 toKeyValuePairs ag =
220233 [ " lovelacePerUTxOWord" .= agCoinsPerUTxOWord ag
221- , " costModels " .= agCostModels ag
234+ , " plutusV1CostModel " .= agPlutusV1CostModel ag
222235 , " executionPrices" .= agPrices ag
223236 , " maxTxExUnits" .= agMaxTxExUnits ag
224237 , " maxBlockExUnits" .= agMaxBlockExUnits ag
0 commit comments