1
1
{-# LANGUAGE DataKinds #-}
2
2
{-# LANGUAGE GADTs #-}
3
+ {-# LANGUAGE LambdaCase #-}
3
4
{-# LANGUAGE NamedFieldPuns #-}
4
5
{-# LANGUAGE NumericUnderscores #-}
5
6
{-# LANGUAGE OverloadedStrings #-}
@@ -31,8 +32,8 @@ module Testnet.Defaults
31
32
, plutusV3Script
32
33
) where
33
34
34
- import Cardano.Api (AnyCardanoEra (.. ), CardanoEra (.. ), File (.. ), pshow ,
35
- unsafeBoundedRational )
35
+ import Cardano.Api (CardanoEra (.. ), File (.. ), pshow , ShelleyBasedEra (.. ),
36
+ toCardanoEra , unsafeBoundedRational , AnyShelleyBasedEra ( .. ) )
36
37
import qualified Cardano.Api.Shelley as Api
37
38
38
39
import Cardano.Ledger.Alonzo.Core (PParams (.. ))
@@ -86,9 +87,9 @@ newtype AlonzoGenesisError
86
87
= AlonzoGenErrTooMuchPrecision Rational
87
88
deriving Show
88
89
89
- defaultAlonzoGenesis :: CardanoEra era -> Either AlonzoGenesisError AlonzoGenesis
90
- defaultAlonzoGenesis era = do
91
- let genesis = Api. alonzoGenesisDefaults era
90
+ defaultAlonzoGenesis :: ShelleyBasedEra era -> Either AlonzoGenesisError AlonzoGenesis
91
+ defaultAlonzoGenesis sbe = do
92
+ let genesis = Api. alonzoGenesisDefaults (toCardanoEra sbe)
92
93
prices = Ledger. agPrices genesis
93
94
94
95
-- double check that prices have correct values - they're set using unsafeBoundedRational in cardano-api
@@ -150,61 +151,54 @@ defaultConwayGenesis =
150
151
151
152
-- | Configuration value that allows you to hardfork to any Cardano era
152
153
-- at epoch 0.
153
- defaultYamlHardforkViaConfig :: AnyCardanoEra -> KeyMapAeson. KeyMap Aeson. Value
154
- defaultYamlHardforkViaConfig era =
154
+ defaultYamlHardforkViaConfig :: ShelleyBasedEra era -> KeyMapAeson. KeyMap Aeson. Value
155
+ defaultYamlHardforkViaConfig sbe =
155
156
mconcat $ concat
156
157
[ defaultYamlConfig
157
158
, tracers
158
- , protocolVersions era
159
- , hardforkViaConfig era
159
+ , protocolVersions sbe
160
+ , hardforkViaConfig sbe
160
161
]
161
162
162
163
where
163
164
-- The protocol version number gets used by block producing nodes as part
164
165
-- of the system for agreeing on and synchronising protocol updates.
165
166
-- NB: We follow the mainnet protocol versions and assume the latest
166
167
-- protocol version for a given era that has had an intraera hardfork.
167
- protocolVersions :: AnyCardanoEra -> [KeyMapAeson. KeyMap Aeson. Value ]
168
- protocolVersions (AnyCardanoEra era') =
169
- case era' of
170
- ByronEra ->
171
- map (uncurry KeyMapAeson. singleton)
172
- -- We assume Byron with Ouroboros permissive BFT
173
- [ (" LastKnownBlockVersion-Major" , Aeson. Number 1 )
174
- , (" LastKnownBlockVersion-Minor" , Aeson. Number 0 )
175
- , (" LastKnownBlockVersion-Alt" , Aeson. Number 0 )
176
- ]
177
- ShelleyEra ->
168
+ protocolVersions :: ShelleyBasedEra era -> [KeyMapAeson. KeyMap Aeson. Value ]
169
+ protocolVersions sbe' =
170
+ case sbe' of
171
+ ShelleyBasedEraShelley ->
178
172
map (uncurry KeyMapAeson. singleton)
179
173
[ (" LastKnownBlockVersion-Major" , Aeson. Number 2 )
180
174
, (" LastKnownBlockVersion-Minor" , Aeson. Number 0 )
181
175
, (" LastKnownBlockVersion-Alt" , Aeson. Number 0 )
182
176
]
183
- AllegraEra ->
177
+ ShelleyBasedEraAllegra ->
184
178
map (uncurry KeyMapAeson. singleton)
185
179
[ (" LastKnownBlockVersion-Major" , Aeson. Number 3 )
186
180
, (" LastKnownBlockVersion-Minor" , Aeson. Number 0 )
187
181
, (" LastKnownBlockVersion-Alt" , Aeson. Number 0 )
188
182
]
189
- MaryEra ->
183
+ ShelleyBasedEraMary ->
190
184
map (uncurry KeyMapAeson. singleton)
191
185
[ (" LastKnownBlockVersion-Major" , Aeson. Number 4 )
192
186
, (" LastKnownBlockVersion-Minor" , Aeson. Number 0 )
193
187
, (" LastKnownBlockVersion-Alt" , Aeson. Number 0 )
194
188
]
195
- AlonzoEra ->
189
+ ShelleyBasedEraAlonzo ->
196
190
map (uncurry KeyMapAeson. singleton)
197
191
[ (" LastKnownBlockVersion-Major" , Aeson. Number 5 )
198
192
, (" LastKnownBlockVersion-Minor" , Aeson. Number 0 )
199
193
, (" LastKnownBlockVersion-Alt" , Aeson. Number 0 )
200
194
]
201
- BabbageEra ->
195
+ ShelleyBasedEraBabbage ->
202
196
map (uncurry KeyMapAeson. singleton)
203
197
[ (" LastKnownBlockVersion-Major" , Aeson. Number 8 )
204
198
, (" LastKnownBlockVersion-Minor" , Aeson. Number 0 )
205
199
, (" LastKnownBlockVersion-Alt" , Aeson. Number 0 )
206
200
]
207
- ConwayEra ->
201
+ ShelleyBasedEraConway ->
208
202
map (uncurry KeyMapAeson. singleton)
209
203
[ (" LastKnownBlockVersion-Major" , Aeson. Number 9 )
210
204
, (" LastKnownBlockVersion-Minor" , Aeson. Number 0 )
@@ -214,32 +208,31 @@ defaultYamlHardforkViaConfig era =
214
208
-- Allows a direct hardfork to an era of your choice via the configuration.
215
209
-- This removes the usual requirement for submitting an update proposal,
216
210
-- waiting for the protocol to change and then restarting the nodes.
217
- hardforkViaConfig :: AnyCardanoEra -> [KeyMapAeson. KeyMap Aeson. Value ]
218
- hardforkViaConfig (AnyCardanoEra era') =
219
- case era' of
220
- ByronEra -> []
221
- ShelleyEra ->
211
+ hardforkViaConfig :: ShelleyBasedEra era -> [KeyMapAeson. KeyMap Aeson. Value ]
212
+ hardforkViaConfig sbe' =
213
+ case sbe' of
214
+ ShelleyBasedEraShelley ->
222
215
map (uncurry KeyMapAeson. singleton)
223
216
[ (" ExperimentalHardForksEnabled" , Aeson. Bool True )
224
217
, (" ExperimentalProtocolsEnabled" , Aeson. Bool True )
225
218
, (" TestShelleyHardForkAtEpoch" , Aeson. Number 0 )
226
219
]
227
- AllegraEra ->
220
+ ShelleyBasedEraAllegra ->
228
221
map (uncurry KeyMapAeson. singleton)
229
222
[ (" ExperimentalHardForksEnabled" , Aeson. Bool True )
230
223
, (" ExperimentalProtocolsEnabled" , Aeson. Bool True )
231
224
, (" TestShelleyHardForkAtEpoch" , Aeson. Number 0 )
232
225
, (" TestAllegraHardForkAtEpoch" , Aeson. Number 0 )
233
226
]
234
- MaryEra ->
227
+ ShelleyBasedEraMary ->
235
228
map (uncurry KeyMapAeson. singleton)
236
229
[ (" ExperimentalHardForksEnabled" , Aeson. Bool True )
237
230
, (" ExperimentalProtocolsEnabled" , Aeson. Bool True )
238
231
, (" TestShelleyHardForkAtEpoch" , Aeson. Number 0 )
239
232
, (" TestAllegraHardForkAtEpoch" , Aeson. Number 0 )
240
233
, (" TestMaryHardForkAtEpoch" , Aeson. Number 0 )
241
234
]
242
- AlonzoEra ->
235
+ ShelleyBasedEraAlonzo ->
243
236
map (uncurry KeyMapAeson. singleton)
244
237
[ (" ExperimentalHardForksEnabled" , Aeson. Bool True )
245
238
, (" ExperimentalProtocolsEnabled" , Aeson. Bool True )
@@ -248,7 +241,7 @@ defaultYamlHardforkViaConfig era =
248
241
, (" TestMaryHardForkAtEpoch" , Aeson. Number 0 )
249
242
, (" TestAlonzoHardForkAtEpoch" , Aeson. Number 0 )
250
243
]
251
- BabbageEra ->
244
+ ShelleyBasedEraBabbage ->
252
245
map (uncurry KeyMapAeson. singleton)
253
246
[ (" ExperimentalHardForksEnabled" , Aeson. Bool True )
254
247
, (" ExperimentalProtocolsEnabled" , Aeson. Bool True )
@@ -258,7 +251,7 @@ defaultYamlHardforkViaConfig era =
258
251
, (" TestAlonzoHardForkAtEpoch" , Aeson. Number 0 )
259
252
, (" TestBabbageHardForkAtEpoch" , Aeson. Number 0 )
260
253
]
261
- ConwayEra ->
254
+ ShelleyBasedEraConway ->
262
255
map (uncurry KeyMapAeson. singleton)
263
256
[ (" ExperimentalHardForksEnabled" , Aeson. Bool True )
264
257
, (" ExperimentalProtocolsEnabled" , Aeson. Bool True )
@@ -456,19 +449,18 @@ defaultShelleyGenesis startTime testnetOptions = do
456
449
}
457
450
458
451
459
- eraToProtocolVersion :: AnyCardanoEra -> ProtVer
460
- eraToProtocolVersion (AnyCardanoEra era) =
461
- case era of
462
- ByronEra -> error " eraToProtocolVersion: Byron not supported"
463
- ShelleyEra -> mkProtVer (2 , 0 )
464
- AllegraEra -> mkProtVer (3 , 0 )
465
- MaryEra -> mkProtVer (4 , 0 )
452
+ eraToProtocolVersion :: AnyShelleyBasedEra -> ProtVer
453
+ eraToProtocolVersion =
454
+ \ case
455
+ AnyShelleyBasedEra ShelleyBasedEraShelley -> mkProtVer (2 , 0 )
456
+ AnyShelleyBasedEra ShelleyBasedEraAllegra -> mkProtVer (3 , 0 )
457
+ AnyShelleyBasedEra ShelleyBasedEraMary -> mkProtVer (4 , 0 )
466
458
-- Alonzo had an intra-era hardfork
467
- AlonzoEra -> mkProtVer (6 , 0 )
459
+ AnyShelleyBasedEra ShelleyBasedEraAlonzo -> mkProtVer (6 , 0 )
468
460
-- Babbage had an intra-era hardfork
469
- BabbageEra -> mkProtVer (8 , 0 )
461
+ AnyShelleyBasedEra ShelleyBasedEraBabbage -> mkProtVer (8 , 0 )
470
462
-- By default start after bootstrap (which is PV9)
471
- ConwayEra -> mkProtVer (10 , 0 )
463
+ AnyShelleyBasedEra ShelleyBasedEraConway -> mkProtVer (10 , 0 )
472
464
473
465
-- TODO: Expose from cardano-api
474
466
mkProtVer :: (Natural , Natural ) -> ProtVer
0 commit comments