8
8
{-# LANGUAGE GADTs #-}
9
9
{-# LANGUAGE NamedFieldPuns #-}
10
10
{-# LANGUAGE NumericUnderscores #-}
11
+ {-# LANGUAGE RankNTypes #-}
11
12
{-# LANGUAGE ScopedTypeVariables #-}
12
13
{-# LANGUAGE TupleSections #-}
13
14
{-# LANGUAGE TypeApplications #-}
@@ -55,6 +56,7 @@ import Cardano.Api.Shelley
55
56
56
57
import Cardano.CLI.Byron.Genesis (NewDirectory (NewDirectory ))
57
58
import Cardano.CLI.Byron.Genesis qualified as Byron
59
+ import Cardano.CLI.Compatible.Exception
58
60
import Cardano.CLI.EraBased.Genesis.Command as Cmd
59
61
import Cardano.CLI.EraBased.Genesis.Internal.Byron as Byron
60
62
import Cardano.CLI.EraBased.Genesis.Internal.Common
@@ -230,7 +232,7 @@ data WriteFileGenesis where
230
232
231
233
runGenesisCreateTestNetDataCmd
232
234
:: GenesisCreateTestNetDataCmdArgs
233
- -> ExceptT GenesisCmdError IO ()
235
+ -> CIO e ()
234
236
runGenesisCreateTestNetDataCmd
235
237
Cmd. GenesisCreateTestNetDataCmdArgs
236
238
{ eon
@@ -262,10 +264,13 @@ runGenesisCreateTestNetDataCmd
262
264
liftIO $ createDirectoryIfMissing False outputDir
263
265
let era = convert eon
264
266
shelleyGenesisInit <-
265
- fromMaybe shelleyGenesisDefaults <$> traverse decodeShelleyGenesisFile specShelley
267
+ fromMaybe shelleyGenesisDefaults
268
+ <$> traverse (fromExceptTCli . decodeShelleyGenesisFile) specShelley
266
269
alonzoGenesis <-
267
- fromMaybe (alonzoGenesisDefaults era) <$> traverse (decodeAlonzoGenesisFile (Just era)) specAlonzo
268
- conwayGenesis <- fromMaybe conwayGenesisDefaults <$> traverse decodeConwayGenesisFile specConway
270
+ fromMaybe (alonzoGenesisDefaults era)
271
+ <$> traverse (fromExceptTCli . decodeAlonzoGenesisFile (Just era)) specAlonzo
272
+ conwayGenesis <-
273
+ fromMaybe conwayGenesisDefaults <$> traverse (fromExceptTCli . decodeConwayGenesisFile) specConway
269
274
270
275
-- Read NetworkId either from file or from the flag. Flag overrides template file.
271
276
let actualNetworkId =
@@ -284,28 +289,29 @@ runGenesisCreateTestNetDataCmd
284
289
stakeDelegatorsDirs = [stakeDelegatorsDir </> " delegator" <> show i | i <- [1 .. numOfStakeDelegators]]
285
290
286
291
forM_ [1 .. numGenesisKeys] $ \ index -> do
287
- createGenesisKeys (genesisDir </> (" genesis" <> show index))
288
- createDelegateKeys desiredKeyOutputFormat (delegateDir </> (" delegate" <> show index))
292
+ fromExceptTCli $ createGenesisKeys (genesisDir </> (" genesis" <> show index))
293
+ fromExceptTCli $
294
+ createDelegateKeys desiredKeyOutputFormat (delegateDir </> (" delegate" <> show index))
289
295
290
296
when (0 < numGenesisKeys) $ do
291
- writeREADME genesisDir genesisREADME
292
- writeREADME delegateDir delegatesREADME
297
+ fromExceptTCli $ writeREADME genesisDir genesisREADME
298
+ fromExceptTCli $ writeREADME delegateDir delegatesREADME
293
299
294
300
-- UTxO keys
295
301
let utxoKeyFileNames =
296
302
[ utxoKeysDir </> (" utxo" <> show index) </> " utxo.vkey"
297
303
| index <- [1 .. numUtxoKeys]
298
304
]
299
305
forM_ [1 .. numUtxoKeys] $ \ index ->
300
- createUtxoKeys (utxoKeysDir </> (" utxo" <> show index))
306
+ fromExceptTCli $ createUtxoKeys (utxoKeysDir </> (" utxo" <> show index))
301
307
302
- when (0 < numUtxoKeys) $ writeREADME utxoKeysDir utxoKeysREADME
308
+ fromExceptTCli $ when (0 < numUtxoKeys) $ writeREADME utxoKeysDir utxoKeysREADME
303
309
304
- mSPOsRelays <- forM relays readRelays
310
+ mSPOsRelays <- forM relays (fromExceptTCli . readRelays)
305
311
case (relays, mSPOsRelays) of
306
312
(Just fp, Just stakePoolRelays)
307
313
| Map. size stakePoolRelays > fromIntegral numPools ->
308
- throwError $ GenesisCmdTooManyRelaysError fp (fromIntegral numPools) (Map. size stakePoolRelays)
314
+ throwCliError $ GenesisCmdTooManyRelaysError fp (fromIntegral numPools) (Map. size stakePoolRelays)
309
315
_ -> pure ()
310
316
311
317
-- Pools
@@ -315,9 +321,9 @@ runGenesisCreateTestNetDataCmd
315
321
createPoolCredentials desiredKeyOutputFormat poolDir
316
322
-- Indexes of directories created on disk start at 1, but
317
323
-- indexes in terms of the relays' list start at 0. Hence 'index - 1' here:
318
- buildPoolParams actualNetworkId poolDir (index - 1 ) (fromMaybe mempty mSPOsRelays)
324
+ fromExceptTCli $ buildPoolParams actualNetworkId poolDir (index - 1 ) (fromMaybe mempty mSPOsRelays)
319
325
320
- when (0 < numPools) $ writeREADME poolsDir poolsREADME
326
+ fromExceptTCli $ when (0 < numPools) $ writeREADME poolsDir poolsREADME
321
327
322
328
-- CC members. We don't need to look at the eon, because the command's parser guarantees
323
329
-- that before Conway, the number of CC members at this point is 0.
@@ -331,20 +337,20 @@ runGenesisCreateTestNetDataCmd
331
337
coldArgs = CC. GovernanceCommitteeKeyGenColdCmdArgs ConwayEraOnwardsConway vkeyColdFile skeyColdFile
332
338
liftIO $ createDirectoryIfMissing True committeeDir
333
339
void $
334
- withExceptT GenesisCmdGovernanceCommitteeError $
340
+ fromExceptTCli $
335
341
CC. runGovernanceCommitteeKeyGenHot hotArgs
336
342
(vColdKey, _) <-
337
- withExceptT GenesisCmdGovernanceCommitteeError $
343
+ fromExceptTCli $
338
344
CC. runGovernanceCommitteeKeyGenCold coldArgs
339
345
return vColdKey
340
346
341
- when (0 < numCommitteeKeys) $ writeREADME committeesDir committeeREADME
347
+ fromExceptTCli $ when (0 < numCommitteeKeys) $ writeREADME committeesDir committeeREADME
342
348
343
349
-- DReps. We don't need to look at the eon, because the command's parser guarantees
344
350
-- that before Conway, the number of DReps at this point is 0.
345
351
g <- Random. getStdGen
346
352
347
- dRepKeys <- firstExceptT GenesisCmdFileError $
353
+ dRepKeys <- fromExceptTCli $
348
354
case dRepCredentialGenerationMode of
349
355
OnDisk -> forM [1 .. numOfDRepCredentials] $ \ index -> do
350
356
let drepDir = drepsDir </> " drep" <> show index
@@ -360,8 +366,9 @@ runGenesisCreateTestNetDataCmd
360
366
g
361
367
[1 .. numOfDRepCredentials]
362
368
363
- when (0 < numOfDRepCredentials && dRepCredentialGenerationMode == OnDisk ) $
364
- writeREADME drepsDir drepsREADME
369
+ fromExceptTCli $
370
+ when (0 < numOfDRepCredentials && dRepCredentialGenerationMode == OnDisk ) $
371
+ writeREADME drepsDir drepsREADME
365
372
366
373
-- Stake delegators
367
374
g2 <- Random. getStdGen
@@ -382,8 +389,8 @@ runGenesisCreateTestNetDataCmd
382
389
-- Distribute M delegates across N pools:
383
390
let delegations = zipWithDeepSeq (computeDelegation actualNetworkId) delegatorKeys distribution
384
391
385
- genDlgs <- readGenDelegsMap genesisVKeysPaths delegateKeys delegateVrfKeys
386
- nonDelegAddrs <- readInitialFundAddresses utxoKeyFileNames actualNetworkId
392
+ genDlgs <- fromExceptTCli $ readGenDelegsMap genesisVKeysPaths delegateKeys delegateVrfKeys
393
+ nonDelegAddrs <- fromExceptTCli $ readInitialFundAddresses utxoKeyFileNames actualNetworkId
387
394
start <- maybe (SystemStart <$> getCurrentTimePlus30) pure systemStart
388
395
389
396
let network = toShelleyNetwork actualNetworkId
@@ -398,28 +405,32 @@ runGenesisCreateTestNetDataCmd
398
405
stakePools = [(L. ppId poolParams', poolParams') | poolParams' <- snd . mkDelegationMapEntry <$> delegations]
399
406
delegAddrs = dInitialUtxoAddr <$> delegations
400
407
! shelleyGenesis' <-
401
- updateOutputTemplate
402
- start
403
- genDlgs
404
- totalSupply
405
- nonDelegAddrs
406
- stakePools
407
- stake
408
- delegatedSupply
409
- (length delegations)
410
- delegAddrs
411
- stuffedUtxoAddrs
412
- shelleyGenesis
408
+ fromExceptTCli $
409
+ updateOutputTemplate
410
+ start
411
+ genDlgs
412
+ totalSupply
413
+ nonDelegAddrs
414
+ stakePools
415
+ stake
416
+ delegatedSupply
417
+ (length delegations)
418
+ delegAddrs
419
+ stuffedUtxoAddrs
420
+ shelleyGenesis
413
421
414
422
let byronGenesisFp = outputDir </> " byron.genesis.spec.json" -- This file is used by the performance testing team.
415
- void $ writeFileGenesis byronGenesisFp $ WritePretty Byron. defaultProtocolParamsJsonValue
423
+ void $
424
+ fromExceptTCli $
425
+ writeFileGenesis byronGenesisFp $
426
+ WritePretty Byron. defaultProtocolParamsJsonValue
416
427
417
428
let byronGenesisParameters = Byron. mkGenesisParameters numPools actualNetworkWord32 byronGenesisFp shelleyGenesis'
418
429
byronOutputDir = outputDir </> " byron-gen-command"
419
430
(byronGenesis, byronSecrets) <-
420
- firstExceptT GenesisCmdByronError $ Byron. mkGenesis byronGenesisParameters
431
+ fromExceptTCli $ Byron. mkGenesis byronGenesisParameters
421
432
422
- firstExceptT GenesisCmdByronError $
433
+ fromExceptTCli $
423
434
Byron. dumpGenesis (NewDirectory byronOutputDir) byronGenesis byronSecrets
424
435
425
436
-- Move things from byron-gen-command to the nodes' directories
@@ -442,7 +453,7 @@ runGenesisCreateTestNetDataCmd
442
453
, (" shelley-genesis.json" , WritePretty shelleyGenesis')
443
454
, (" alonzo-genesis.json" , WritePretty alonzoGenesis)
444
455
]
445
- $ \ (filename, genesis) -> writeFileGenesis (outputDir </> filename) genesis
456
+ $ \ (filename, genesis) -> fromExceptTCli $ writeFileGenesis (outputDir </> filename) genesis
446
457
where
447
458
genesisDir = outputDir </> " genesis-keys"
448
459
delegateDir = outputDir </> " delegate-keys"
@@ -673,20 +684,18 @@ createGenesisKeys dir = do
673
684
674
685
createStakeDelegatorCredentials
675
686
:: FilePath
676
- -> ExceptT
677
- GenesisCmdError
678
- IO
687
+ -> CIO
688
+ e
679
689
( VerificationKey PaymentKey
680
690
, VerificationKey StakeKey
681
691
)
682
692
createStakeDelegatorCredentials dir = do
683
693
liftIO $ createDirectoryIfMissing True dir
684
694
(pvk, _psk) <-
685
- firstExceptT GenesisCmdAddressCmdError $
695
+ fromExceptTCli $
686
696
generateAndWriteKeyFiles desiredKeyOutputFormat AsPaymentKey paymentVK paymentSK
687
697
(svk, _ssk) <-
688
- firstExceptT GenesisCmdStakeAddressCmdError $
689
- runStakeAddressKeyGenCmd desiredKeyOutputFormat stakingVK stakingSK
698
+ runStakeAddressKeyGenCmd desiredKeyOutputFormat stakingVK stakingSK
690
699
return (pvk, svk)
691
700
where
692
701
paymentVK = File @ (VerificationKey () ) $ dir </> " payment.vkey"
@@ -706,39 +715,42 @@ createUtxoKeys dir = do
706
715
createPoolCredentials
707
716
:: Vary [FormatBech32 , FormatTextEnvelope ]
708
717
-> FilePath
709
- -> ExceptT GenesisCmdError IO ()
718
+ -> CIO e ()
710
719
createPoolCredentials fmt dir = do
711
720
liftIO $ createDirectoryIfMissing True dir
712
- firstExceptT GenesisCmdNodeCmdError $ do
721
+ fromExceptTCli $ do
713
722
runNodeKeyGenKesCmd $
714
723
Cmd. NodeKeyGenKESCmdArgs
715
724
fmt
716
725
(onlyOut kesVK)
717
726
(File @ (SigningKey () ) $ dir </> " kes.skey" )
727
+
718
728
runNodeKeyGenVrfCmd $
719
729
Cmd. NodeKeyGenVRFCmdArgs
720
730
fmt
721
731
(File @ (VerificationKey () ) $ dir </> " vrf.vkey" )
722
732
(File @ (SigningKey () ) $ dir </> " vrf.skey" )
733
+
723
734
runNodeKeyGenColdCmd $
724
735
Cmd. NodeKeyGenColdCmdArgs
725
736
fmt
726
737
(File @ (VerificationKey () ) $ dir </> " cold.vkey" )
727
738
(onlyOut coldSK)
728
739
(onlyOut opCertCtr)
740
+
729
741
runNodeIssueOpCertCmd $
730
742
Cmd. NodeIssueOpCertCmdArgs
731
743
(VerificationKeyFilePath (onlyIn kesVK))
732
744
(onlyIn coldSK)
733
745
opCertCtr
734
746
(KESPeriod 0 )
735
747
(File $ dir </> " opcert.cert" )
736
- firstExceptT GenesisCmdStakeAddressCmdError $
737
- void $
738
- runStakeAddressKeyGenCmd
739
- fmt
740
- (File @ (VerificationKey () ) $ dir </> " staking-reward.vkey" )
741
- (File @ (SigningKey () ) $ dir </> " staking-reward.skey" )
748
+
749
+ void $
750
+ runStakeAddressKeyGenCmd
751
+ fmt
752
+ (File @ (VerificationKey () ) $ dir </> " staking-reward.vkey" )
753
+ (File @ (SigningKey () ) $ dir </> " staking-reward.skey" )
742
754
where
743
755
kesVK = File @ (VerificationKey () ) $ dir </> " kes.vkey"
744
756
coldSK = File @ (SigningKey () ) $ dir </> " cold.skey"
0 commit comments