55{-# LANGUAGE RecordWildCards #-}
66{-# LANGUAGE TemplateHaskell #-}
77{-# OPTIONS_GHC -Wno-orphans #-}
8+ {-# LANGUAGE TupleSections #-}
89-- | The set of parameters, like protocol parameters and slot configuration.
910module Cardano.Node.Emulator.Internal.Node.Params (
1011 Params (.. ),
1112 paramsWithProtocolsParameters ,
1213 slotConfigL ,
1314 emulatorPParamsL ,
14- pParamsFromProtocolParams ,
1515 pProtocolParams ,
16+ pParamsFromProtocolParams ,
17+ bundledProtocolParameters ,
1618 protocolParamsL ,
1719 networkIdL ,
1820 increaseTransactionLimits ,
@@ -30,10 +32,12 @@ module Cardano.Node.Emulator.Internal.Node.Params (
3032
3133import Cardano.Api qualified as C
3234import Cardano.Api.Shelley qualified as C
35+ import Cardano.Ledger.Alonzo.PParams qualified as C
36+ import Cardano.Ledger.Alonzo.Scripts qualified as Alonzo
3337import Cardano.Ledger.Babbage (BabbageEra )
34- import Cardano.Ledger.Babbage.PParams (retractPP )
3538import Cardano.Ledger.Babbage.PParams qualified as C
3639import Cardano.Ledger.BaseTypes (boundRational )
40+ import Cardano.Ledger.Core qualified as C
3741import Cardano.Ledger.Crypto (StandardCrypto )
3842import Cardano.Ledger.Shelley.API (Coin (Coin ), Globals , ShelleyGenesis , mkShelleyGlobals )
3943import Cardano.Ledger.Shelley.API qualified as C.Ledger
@@ -47,17 +51,18 @@ import Data.Aeson (FromJSON (parseJSON), ToJSON (toJSON), Value (Object), (.:),
4751import Data.Aeson qualified as JSON
4852import Data.Aeson.Types (prependFailure , typeMismatch )
4953import Data.Default (Default (def ))
50- import Data.Map ( fromList )
51- import Data.Maybe (fromMaybe )
54+ import Data.Map qualified as Map
55+ import Data.Maybe (fromJust , fromMaybe )
5256import Data.Ratio ((%) )
57+ import Data.SOP.Counting qualified as Ouroboros
5358import Data.SOP.Strict (K (K ), NP (Nil , (:*) ))
5459import GHC.Generics (Generic )
5560import GHC.Natural (Natural )
5661import Ledger.Test (testnet )
5762import Ouroboros.Consensus.HardFork.History qualified as Ouroboros
58- import Ouroboros.Consensus.Util.Counting qualified as Ouroboros
59- import Plutus.V1.Ledger.Api ( POSIXTime ( POSIXTime ) )
60- import PlutusCore ( defaultCostModelParams )
63+ import Plutus.Script.Utils.Scripts ( Language ( PlutusV3 ))
64+ import PlutusCore.Evaluation.Machine.ExBudgetingDefaults ( defaultCostModelParams )
65+ import PlutusLedgerApi.V1 ( POSIXTime ( POSIXTime ) )
6166import Prettyprinter (Pretty (pretty ), viaShow , vsep , (<+>) )
6267
6368-- | The default era for the emulator
@@ -94,7 +99,13 @@ pProtocolParams :: Params -> C.ProtocolParameters
9499pProtocolParams p = C. fromLedgerPParams C. ShelleyBasedEraBabbage $ emulatorPParams p
95100
96101pParamsFromProtocolParams :: C. ProtocolParameters -> PParams
97- pParamsFromProtocolParams = C. toLedgerPParams C. ShelleyBasedEraBabbage
102+ pParamsFromProtocolParams = either (error . show ) id . C. toLedgerPParams C. ShelleyBasedEraBabbage
103+
104+ bundledProtocolParameters :: Params -> C. BundledProtocolParameters C. BabbageEra
105+ bundledProtocolParameters params = C. BundleAsShelleyBasedProtocolParameters
106+ C. ShelleyBasedEraBabbage
107+ (pProtocolParams params)
108+ (emulatorPParams params)
98109
99110paramsWithProtocolsParameters :: SlotConfig -> C. ProtocolParameters -> C. NetworkId -> Params
100111paramsWithProtocolsParameters sc p = Params sc (pParamsFromProtocolParams p)
@@ -114,7 +125,7 @@ instance ToJSON Params where
114125instance FromJSON Params where
115126 parseJSON (Object v) = Params
116127 <$> (v .: " pSlotConfig" >>= parseJSON)
117- <*> (C. toLedgerPParams C. ShelleyBasedEraBabbage <$> (v .: " pProtocolParams" >>= parseJSON))
128+ <*> (pParamsFromProtocolParams <$> (v .: " pProtocolParams" >>= parseJSON))
118129 <*> (v .: " pNetworkId" >>= parseJSON)
119130 parseJSON _ = fail " Can't parse a Param"
120131
@@ -163,9 +174,10 @@ instance Default C.ProtocolParameters where
163174 , protocolParamMonetaryExpansion = 3 % 1000
164175 , protocolParamTreasuryCut = 1 % 5
165176 , protocolParamUTxOCostPerWord = Nothing -- Obsolete from babbage onwards
166- , protocolParamCostModels = fromList
167- [ (C. AnyPlutusScriptVersion C. PlutusScriptV1 , C. CostModel $ fromMaybe (error " Ledger.Params: defaultCostModelParams is broken" ) defaultCostModelParams)
168- , (C. AnyPlutusScriptVersion C. PlutusScriptV2 , C. CostModel $ fromMaybe (error " Ledger.Params: defaultCostModelParams is broken" ) defaultCostModelParams) ]
177+ , protocolParamCostModels =
178+ let costModel = fromJust $ defaultCostModelParams >>= Alonzo. costModelFromMap PlutusV3
179+ costModels = Map. fromList $ map (, costModel) [minBound .. maxBound ]
180+ in C. fromAlonzoCostModels $ Alonzo. CostModels costModels mempty mempty
169181 , protocolParamPrices = Just (C. ExecutionUnitPrices {priceExecutionSteps = 721 % 10000000 , priceExecutionMemory = 577 % 10000 })
170182 , protocolParamMaxTxExUnits = Just (C. ExecutionUnits {executionSteps = 10000000000 , executionMemory = 14000000 })
171183 , protocolParamMaxBlockExUnits = Just (C. ExecutionUnits {executionSteps = 40000000000 , executionMemory = 62000000 })
@@ -192,14 +204,18 @@ emulatorGlobals :: Params -> Globals
192204emulatorGlobals params = mkShelleyGlobals
193205 (genesisDefaultsFromParams params)
194206 (fixedEpochInfo emulatorEpochSize (slotLength params))
195- (fst $ C. protocolParamProtocolVersion $ pProtocolParams params)
207+ (toEnum $ fromIntegral $ fst $ C. protocolParamProtocolVersion $ pProtocolParams params)
196208
197- genesisDefaultsFromParams :: Params -> ShelleyGenesis EmulatorEra
209+ genesisDefaultsFromParams :: Params -> ShelleyGenesis StandardCrypto
198210genesisDefaultsFromParams params@ Params { pSlotConfig, pNetworkId } = C. shelleyGenesisDefaults
199211 { C. sgSystemStart = posixTimeToUTCTime $ scSlotZeroTime pSlotConfig
200212 , C. sgNetworkMagic = case pNetworkId of C. Testnet (C. NetworkMagic nm) -> nm; _ -> 0
201213 , C. sgNetworkId = case pNetworkId of C. Testnet _ -> C.Ledger. Testnet ; C. Mainnet -> C.Ledger. Mainnet
202- , C. sgProtocolParams = retractPP (Coin 0 ) d C.Ledger. NeutralNonce $ emulatorPParams params
214+ , C. sgProtocolParams = emulatorPParams params
215+ & C. downgradePParams (C. DowngradeBabbagePParams d C.Ledger. NeutralNonce )
216+ & C. downgradePParams (C. DowngradeAlonzoPParams (Coin 0 ))
217+ & C. downgradePParams ()
218+ & C. downgradePParams ()
203219 }
204220 where
205221 d = fromMaybe (error " 3 % 5 should be valid UnitInterval" ) $ boundRational (3 % 5 )
@@ -209,4 +225,4 @@ emulatorEraHistory :: Params -> C.EraHistory C.CardanoMode
209225emulatorEraHistory params = C. EraHistory C. CardanoMode (Ouroboros. mkInterpreter $ Ouroboros. summaryWithExactly list)
210226 where
211227 one = Ouroboros. nonEmptyHead $ Ouroboros. getSummary $ Ouroboros. neverForksSummary emulatorEpochSize (slotLength params)
212- list = Ouroboros. Exactly $ K one :* K one :* K one :* K one :* K one :* K one :* Nil
228+ list = Ouroboros. Exactly $ K one :* K one :* K one :* K one :* K one :* K one :* K one :* Nil
0 commit comments