Skip to content

Commit dd9a2bb

Browse files
committed
cardano-testnet | Fix cost models in genesis generation
1 parent e34f5da commit dd9a2bb

File tree

3 files changed

+40
-25
lines changed

3 files changed

+40
-25
lines changed

cabal.project

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ source-repository-package
9191
source-repository-package
9292
type: git
9393
location: https://github.com/IntersectMBO/cardano-api
94-
tag: cee9b20505a407b55f3b7b335e857d61d71ae196
94+
tag: 02a2274c7b1fd1c4d4d380328b87b3e81fa537de
9595
--sha256: sha256-ijMOji6MNupx6eewRJcWpuoxitp4rw8nnccr/Ay+tTo=
9696
subdir:
9797
cardano-api

cardano-testnet/src/Testnet/Blockfrost.hs

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,31 +10,31 @@ module Testnet.Blockfrost
1010
, blockfrostToGenesis
1111
) where
1212

13-
import Cardano.Ledger.BaseTypes (EpochInterval, Nonce, NonNegativeInterval,
14-
UnitInterval, ProtVer(..), Version)
13+
import Cardano.Ledger.Alonzo.Genesis (AlonzoGenesis (..))
14+
import Cardano.Ledger.Alonzo.PParams (CoinPerWord)
15+
import Cardano.Ledger.BaseTypes (EpochInterval, NonNegativeInterval, Nonce, ProtVer (..),
16+
UnitInterval, Version)
1517
import Cardano.Ledger.Coin (Coin)
16-
import Cardano.Ledger.Core (PParams(..))
1718
import Cardano.Ledger.Compactible (toCompactPartial)
18-
import Cardano.Ledger.Shelley.Genesis (ShelleyGenesis(..))
19-
import Cardano.Ledger.Shelley.PParams (ShelleyPParams(..))
20-
import Cardano.Ledger.Alonzo.Genesis (AlonzoGenesis(..))
21-
import Cardano.Ledger.Alonzo.PParams (CoinPerWord)
22-
import Cardano.Ledger.Conway.Genesis (ConwayGenesis(..))
23-
import Cardano.Ledger.Conway.PParams (UpgradeConwayPParams(..),
24-
PoolVotingThresholds(..), DRepVotingThresholds(..))
25-
import Cardano.Ledger.Plutus (CostModel, CostModels, ExUnits(..),
26-
Language(..), Prices(..))
19+
import Cardano.Ledger.Conway.Genesis (ConwayGenesis (..))
20+
import Cardano.Ledger.Conway.PParams (DRepVotingThresholds (..),
21+
PoolVotingThresholds (..), UpgradeConwayPParams (..))
22+
import Cardano.Ledger.Core (PParams (..))
23+
import Cardano.Ledger.Plutus (CostModel, CostModels, ExUnits (..), Language (..),
24+
Prices (..))
2725
import qualified Cardano.Ledger.Plutus.CostModels as CostModels
26+
import Cardano.Ledger.Shelley.Genesis (ShelleyGenesis (..))
27+
import Cardano.Ledger.Shelley.PParams (ShelleyPParams (..))
2828

2929
import Control.Applicative ((<|>))
30+
import Data.Aeson (FromJSON (..), withObject, (.:))
3031
import qualified Data.Aeson as Aeson
31-
import Data.Aeson (FromJSON(..), (.:), withObject)
3232
import qualified Data.Aeson.Types as Aeson
3333
import qualified Data.Map.Strict as Map
34-
import Text.Read (readMaybe)
3534
import Data.Scientific (Scientific)
3635
import Data.Word (Word16, Word32)
3736
import Numeric.Natural (Natural)
37+
import Text.Read (readMaybe)
3838

3939
data BlockfrostParams = BlockfrostParams
4040
{ -- Alonzo parameters
@@ -206,7 +206,7 @@ blockfrostToGenesis (alonzoGenesis', conwayGenesis', shelleyGenesis') Blockfrost
206206
{ prMem = bfgPriceMem
207207
, prSteps = bfgPriceSteps
208208
}
209-
, agCostModels = bfgAlonzoCostModels
209+
, agCostModels = {- TODO trimCostModelToInitial PlutusV2 -} bfgAlonzoCostModels
210210
}
211211

212212
-- Conway Params
@@ -237,7 +237,7 @@ blockfrostToGenesis (alonzoGenesis', conwayGenesis', shelleyGenesis') Blockfrost
237237
, ucppDRepDeposit = bfgDRepDeposit
238238
, ucppDRepActivity = bfgDRepActivity
239239
, ucppMinFeeRefScriptCostPerByte = bfgMinFeeRevScriptCostPerByte
240-
, ucppPlutusV3CostModel = bfgConwayCostModel
240+
, ucppPlutusV3CostModel = trimCostModelToInitial PlutusV3 bfgConwayCostModel
241241
}
242242
conwayGenesis = conwayGenesis'{cgUpgradePParams=conwayParams}
243243

@@ -265,3 +265,14 @@ blockfrostToGenesis (alonzoGenesis', conwayGenesis', shelleyGenesis') Blockfrost
265265
, sppMinPoolCost = bfgMinPoolCost
266266
}
267267
shelleyGenesis = shelleyGenesis'{sgProtocolParams=shelleyParams}
268+
269+
-- | Trims cost model to the initial number of parameters. The cost models in geneses can't
270+
-- have more parameters than the initial number.
271+
trimCostModelToInitial :: Language -> CostModel -> CostModel
272+
trimCostModelToInitial lang cm = do
273+
let paramsCount = CostModels.costModelInitParamCount lang
274+
either (error . ("Testnet.Blockfrost: Cost model trimming failure: " <>) . show) id
275+
. CostModels.mkCostModel lang
276+
. take paramsCount
277+
$ CostModels.getCostModelParams cm
278+

cardano-testnet/src/Testnet/Defaults.hs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,22 @@ import qualified Cardano.Ledger.BaseTypes as Ledger
5353
import Cardano.Ledger.Binary.Version ()
5454
import Cardano.Ledger.Coin
5555
import Cardano.Ledger.Conway.Genesis
56+
import qualified Cardano.Ledger.Conway.Genesis as Ledger
5657
import Cardano.Ledger.Conway.PParams
58+
import qualified Cardano.Ledger.Conway.PParams as Ledger
5759
import qualified Cardano.Ledger.Core as Ledger
5860
import qualified Cardano.Ledger.Plutus as Ledger
61+
import qualified Cardano.Ledger.Plutus.CostModels as Ledger
5962
import qualified Cardano.Ledger.Shelley as Ledger
6063
import Cardano.Ledger.Shelley.Genesis
6164
import Cardano.Network.PeerSelection.Bootstrap (UseBootstrapPeers (..))
6265
import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable (..))
66+
import Cardano.Node.Configuration.Topology (RemoteAddress (..))
6367
import qualified Cardano.Node.Configuration.Topology as Topology
64-
import Cardano.Node.Configuration.Topology (RemoteAddress(..))
65-
import qualified Cardano.Node.Configuration.TopologyP2P as P2P
66-
import Cardano.Node.Configuration.TopologyP2P (LocalRootPeersGroups (..),
67-
LocalRootPeersGroup (..), NetworkTopology(..), PublicRootPeers (..),
68+
import Cardano.Node.Configuration.TopologyP2P (LocalRootPeersGroup (..),
69+
LocalRootPeersGroups (..), NetworkTopology (..), PublicRootPeers (..),
6870
RootConfig (..))
71+
import qualified Cardano.Node.Configuration.TopologyP2P as P2P
6972
import Cardano.Tracing.Config
7073
import Ouroboros.Network.NodeToNode (DiffusionMode (..), PeerAdvertise (..))
7174
import Ouroboros.Network.PeerSelection.LedgerPeers.Type (UseLedgerPeers (..))
@@ -95,7 +98,6 @@ import Numeric.Natural
9598
import System.FilePath ((</>))
9699

97100
import Test.Cardano.Ledger.Core.Rational
98-
import Test.Cardano.Ledger.Plutus (testingCostModelV3)
99101
import Testnet.Start.Types
100102
import Testnet.Types
101103

@@ -126,7 +128,9 @@ defaultAlonzoGenesis = do
126128
Just s -> return s
127129

128130
defaultConwayGenesis :: ConwayGenesis
129-
defaultConwayGenesis =
131+
defaultConwayGenesis = do
132+
-- use the cost model from cardano-api, which is trimmed to the correct number of parameters
133+
let ucppPlutusV3CostModel = Ledger.ucppPlutusV3CostModel $ Ledger.cgUpgradePParams Api.conwayGenesisDefaults
130134
let upPParams :: UpgradeConwayPParams Identity
131135
upPParams = UpgradeConwayPParams
132136
{ ucppPoolVotingThresholds = poolVotingThresholds
@@ -138,7 +142,7 @@ defaultConwayGenesis =
138142
, ucppDRepDeposit = Coin 1_000_000
139143
, ucppDRepActivity = EpochInterval 100
140144
, ucppMinFeeRefScriptCostPerByte = 0 %! 1 -- FIXME GARBAGE VALUE
141-
, ucppPlutusV3CostModel = testingCostModelV3
145+
, ucppPlutusV3CostModel
142146
}
143147
drepVotingThresholds = DRepVotingThresholds
144148
{ dvtMotionNoConfidence = 0 %! 1
@@ -159,7 +163,7 @@ defaultConwayGenesis =
159163
, pvtHardForkInitiation = 1 %! 2
160164
, pvtPPSecurityGroup = 1 %! 2
161165
}
162-
in ConwayGenesis
166+
ConwayGenesis
163167
{ cgUpgradePParams = upPParams
164168
, cgConstitution = DefaultClass.def
165169
, cgCommittee = DefaultClass.def

0 commit comments

Comments
 (0)