Skip to content

Commit 0bf3e93

Browse files
authored
Merge pull request #1177 from IntersectMBO/jordan/rio-propagation-20250506
CIO propagation 2025-05-06
2 parents 079b72c + 04aba23 commit 0bf3e93

File tree

22 files changed

+294
-364
lines changed

22 files changed

+294
-364
lines changed

cardano-cli/cardano-cli.cabal

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,6 @@ library
210210
Cardano.CLI.Type.Error.RegistrationError
211211
Cardano.CLI.Type.Error.ScriptDataError
212212
Cardano.CLI.Type.Error.ScriptDecodeError
213-
Cardano.CLI.Type.Error.StakeAddressCmdError
214213
Cardano.CLI.Type.Error.StakeAddressDelegationError
215214
Cardano.CLI.Type.Error.StakeAddressRegistrationError
216215
Cardano.CLI.Type.Error.StakeCredentialError

cardano-cli/src/Cardano/CLI/Byron/Genesis.hs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module Cardano.CLI.Byron.Genesis
1212
)
1313
where
1414

15-
import Cardano.Api (Doc, Key (..), NetworkId, pretty, pshow, writeSecrets)
15+
import Cardano.Api (Doc, Error (..), Key (..), NetworkId, pretty, pshow, writeSecrets)
1616
import Cardano.Api.Byron
1717
( ByronKey
1818
, SerialiseAsRawBytes (..)
@@ -57,6 +57,9 @@ data ByronGenesisError
5757
| PoorKeyFailure !ByronKeyFailure
5858
deriving Show
5959

60+
instance Error ByronGenesisError where
61+
prettyError = renderByronGenesisError
62+
6063
renderByronGenesisError :: ByronGenesisError -> Doc ann
6164
renderByronGenesisError = \case
6265
ProtocolParametersParseFailed pParamFp parseError ->

cardano-cli/src/Cardano/CLI/Compatible/StakeAddress/Run.hs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ runStakeAddressRegistrationCertificateCmd
4343
-> CIO e ()
4444
runStakeAddressRegistrationCertificateCmd sbe stakeIdentifier mDeposit oFp = do
4545
stakeCred <-
46-
fromExceptTCli $
47-
getStakeCredentialFromIdentifier stakeIdentifier
46+
getStakeCredentialFromIdentifier stakeIdentifier
4847

4948
req <- createRegistrationCertRequirements sbe stakeCred mDeposit
5049

@@ -93,8 +92,7 @@ runStakeAddressStakeDelegationCertificateCmd sbe stakeVerifier poolVKeyOrHashOrF
9392
shelleyBasedEraConstraints sbe $ do
9493
poolStakeVKeyHash <- getHashFromStakePoolKeyHashSource poolVKeyOrHashOrFile
9594

96-
stakeCred <-
97-
fromExceptTCli $ getStakeCredentialFromIdentifier stakeVerifier
95+
stakeCred <- getStakeCredentialFromIdentifier stakeVerifier
9896

9997
let certificate =
10098
createStakeDelegationCertificate sbe stakeCred poolStakeVKeyHash

cardano-cli/src/Cardano/CLI/EraBased/Genesis/CreateTestnetData/Run.hs

Lines changed: 64 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
{-# LANGUAGE GADTs #-}
99
{-# LANGUAGE NamedFieldPuns #-}
1010
{-# LANGUAGE NumericUnderscores #-}
11+
{-# LANGUAGE RankNTypes #-}
1112
{-# LANGUAGE ScopedTypeVariables #-}
1213
{-# LANGUAGE TupleSections #-}
1314
{-# LANGUAGE TypeApplications #-}
@@ -55,6 +56,7 @@ import Cardano.Api.Shelley
5556

5657
import Cardano.CLI.Byron.Genesis (NewDirectory (NewDirectory))
5758
import Cardano.CLI.Byron.Genesis qualified as Byron
59+
import Cardano.CLI.Compatible.Exception
5860
import Cardano.CLI.EraBased.Genesis.Command as Cmd
5961
import Cardano.CLI.EraBased.Genesis.Internal.Byron as Byron
6062
import Cardano.CLI.EraBased.Genesis.Internal.Common
@@ -230,7 +232,7 @@ data WriteFileGenesis where
230232

231233
runGenesisCreateTestNetDataCmd
232234
:: GenesisCreateTestNetDataCmdArgs
233-
-> ExceptT GenesisCmdError IO ()
235+
-> CIO e ()
234236
runGenesisCreateTestNetDataCmd
235237
Cmd.GenesisCreateTestNetDataCmdArgs
236238
{ eon
@@ -262,10 +264,13 @@ runGenesisCreateTestNetDataCmd
262264
liftIO $ createDirectoryIfMissing False outputDir
263265
let era = convert eon
264266
shelleyGenesisInit <-
265-
fromMaybe shelleyGenesisDefaults <$> traverse decodeShelleyGenesisFile specShelley
267+
fromMaybe shelleyGenesisDefaults
268+
<$> traverse (fromExceptTCli . decodeShelleyGenesisFile) specShelley
266269
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
269274

270275
-- Read NetworkId either from file or from the flag. Flag overrides template file.
271276
let actualNetworkId =
@@ -284,28 +289,29 @@ runGenesisCreateTestNetDataCmd
284289
stakeDelegatorsDirs = [stakeDelegatorsDir </> "delegator" <> show i | i <- [1 .. numOfStakeDelegators]]
285290

286291
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))
289295

290296
when (0 < numGenesisKeys) $ do
291-
writeREADME genesisDir genesisREADME
292-
writeREADME delegateDir delegatesREADME
297+
fromExceptTCli $ writeREADME genesisDir genesisREADME
298+
fromExceptTCli $ writeREADME delegateDir delegatesREADME
293299

294300
-- UTxO keys
295301
let utxoKeyFileNames =
296302
[ utxoKeysDir </> ("utxo" <> show index) </> "utxo.vkey"
297303
| index <- [1 .. numUtxoKeys]
298304
]
299305
forM_ [1 .. numUtxoKeys] $ \index ->
300-
createUtxoKeys (utxoKeysDir </> ("utxo" <> show index))
306+
fromExceptTCli $ createUtxoKeys (utxoKeysDir </> ("utxo" <> show index))
301307

302-
when (0 < numUtxoKeys) $ writeREADME utxoKeysDir utxoKeysREADME
308+
fromExceptTCli $ when (0 < numUtxoKeys) $ writeREADME utxoKeysDir utxoKeysREADME
303309

304-
mSPOsRelays <- forM relays readRelays
310+
mSPOsRelays <- forM relays (fromExceptTCli . readRelays)
305311
case (relays, mSPOsRelays) of
306312
(Just fp, Just stakePoolRelays)
307313
| Map.size stakePoolRelays > fromIntegral numPools ->
308-
throwError $ GenesisCmdTooManyRelaysError fp (fromIntegral numPools) (Map.size stakePoolRelays)
314+
throwCliError $ GenesisCmdTooManyRelaysError fp (fromIntegral numPools) (Map.size stakePoolRelays)
309315
_ -> pure ()
310316

311317
-- Pools
@@ -315,9 +321,9 @@ runGenesisCreateTestNetDataCmd
315321
createPoolCredentials desiredKeyOutputFormat poolDir
316322
-- Indexes of directories created on disk start at 1, but
317323
-- 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)
319325

320-
when (0 < numPools) $ writeREADME poolsDir poolsREADME
326+
fromExceptTCli $ when (0 < numPools) $ writeREADME poolsDir poolsREADME
321327

322328
-- CC members. We don't need to look at the eon, because the command's parser guarantees
323329
-- that before Conway, the number of CC members at this point is 0.
@@ -331,20 +337,20 @@ runGenesisCreateTestNetDataCmd
331337
coldArgs = CC.GovernanceCommitteeKeyGenColdCmdArgs ConwayEraOnwardsConway vkeyColdFile skeyColdFile
332338
liftIO $ createDirectoryIfMissing True committeeDir
333339
void $
334-
withExceptT GenesisCmdGovernanceCommitteeError $
340+
fromExceptTCli $
335341
CC.runGovernanceCommitteeKeyGenHot hotArgs
336342
(vColdKey, _) <-
337-
withExceptT GenesisCmdGovernanceCommitteeError $
343+
fromExceptTCli $
338344
CC.runGovernanceCommitteeKeyGenCold coldArgs
339345
return vColdKey
340346

341-
when (0 < numCommitteeKeys) $ writeREADME committeesDir committeeREADME
347+
fromExceptTCli $ when (0 < numCommitteeKeys) $ writeREADME committeesDir committeeREADME
342348

343349
-- DReps. We don't need to look at the eon, because the command's parser guarantees
344350
-- that before Conway, the number of DReps at this point is 0.
345351
g <- Random.getStdGen
346352

347-
dRepKeys <- firstExceptT GenesisCmdFileError $
353+
dRepKeys <- fromExceptTCli $
348354
case dRepCredentialGenerationMode of
349355
OnDisk -> forM [1 .. numOfDRepCredentials] $ \index -> do
350356
let drepDir = drepsDir </> "drep" <> show index
@@ -360,8 +366,9 @@ runGenesisCreateTestNetDataCmd
360366
g
361367
[1 .. numOfDRepCredentials]
362368

363-
when (0 < numOfDRepCredentials && dRepCredentialGenerationMode == OnDisk) $
364-
writeREADME drepsDir drepsREADME
369+
fromExceptTCli $
370+
when (0 < numOfDRepCredentials && dRepCredentialGenerationMode == OnDisk) $
371+
writeREADME drepsDir drepsREADME
365372

366373
-- Stake delegators
367374
g2 <- Random.getStdGen
@@ -382,8 +389,8 @@ runGenesisCreateTestNetDataCmd
382389
-- Distribute M delegates across N pools:
383390
let delegations = zipWithDeepSeq (computeDelegation actualNetworkId) delegatorKeys distribution
384391

385-
genDlgs <- readGenDelegsMap genesisVKeysPaths delegateKeys delegateVrfKeys
386-
nonDelegAddrs <- readInitialFundAddresses utxoKeyFileNames actualNetworkId
392+
genDlgs <- fromExceptTCli $ readGenDelegsMap genesisVKeysPaths delegateKeys delegateVrfKeys
393+
nonDelegAddrs <- fromExceptTCli $ readInitialFundAddresses utxoKeyFileNames actualNetworkId
387394
start <- maybe (SystemStart <$> getCurrentTimePlus30) pure systemStart
388395

389396
let network = toShelleyNetwork actualNetworkId
@@ -398,28 +405,32 @@ runGenesisCreateTestNetDataCmd
398405
stakePools = [(L.ppId poolParams', poolParams') | poolParams' <- snd . mkDelegationMapEntry <$> delegations]
399406
delegAddrs = dInitialUtxoAddr <$> delegations
400407
!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
413421

414422
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
416427

417428
let byronGenesisParameters = Byron.mkGenesisParameters numPools actualNetworkWord32 byronGenesisFp shelleyGenesis'
418429
byronOutputDir = outputDir </> "byron-gen-command"
419430
(byronGenesis, byronSecrets) <-
420-
firstExceptT GenesisCmdByronError $ Byron.mkGenesis byronGenesisParameters
431+
fromExceptTCli $ Byron.mkGenesis byronGenesisParameters
421432

422-
firstExceptT GenesisCmdByronError $
433+
fromExceptTCli $
423434
Byron.dumpGenesis (NewDirectory byronOutputDir) byronGenesis byronSecrets
424435

425436
-- Move things from byron-gen-command to the nodes' directories
@@ -442,7 +453,7 @@ runGenesisCreateTestNetDataCmd
442453
, ("shelley-genesis.json", WritePretty shelleyGenesis')
443454
, ("alonzo-genesis.json", WritePretty alonzoGenesis)
444455
]
445-
$ \(filename, genesis) -> writeFileGenesis (outputDir </> filename) genesis
456+
$ \(filename, genesis) -> fromExceptTCli $ writeFileGenesis (outputDir </> filename) genesis
446457
where
447458
genesisDir = outputDir </> "genesis-keys"
448459
delegateDir = outputDir </> "delegate-keys"
@@ -673,20 +684,18 @@ createGenesisKeys dir = do
673684

674685
createStakeDelegatorCredentials
675686
:: FilePath
676-
-> ExceptT
677-
GenesisCmdError
678-
IO
687+
-> CIO
688+
e
679689
( VerificationKey PaymentKey
680690
, VerificationKey StakeKey
681691
)
682692
createStakeDelegatorCredentials dir = do
683693
liftIO $ createDirectoryIfMissing True dir
684694
(pvk, _psk) <-
685-
firstExceptT GenesisCmdAddressCmdError $
695+
fromExceptTCli $
686696
generateAndWriteKeyFiles desiredKeyOutputFormat AsPaymentKey paymentVK paymentSK
687697
(svk, _ssk) <-
688-
firstExceptT GenesisCmdStakeAddressCmdError $
689-
runStakeAddressKeyGenCmd desiredKeyOutputFormat stakingVK stakingSK
698+
runStakeAddressKeyGenCmd desiredKeyOutputFormat stakingVK stakingSK
690699
return (pvk, svk)
691700
where
692701
paymentVK = File @(VerificationKey ()) $ dir </> "payment.vkey"
@@ -706,39 +715,42 @@ createUtxoKeys dir = do
706715
createPoolCredentials
707716
:: Vary [FormatBech32, FormatTextEnvelope]
708717
-> FilePath
709-
-> ExceptT GenesisCmdError IO ()
718+
-> CIO e ()
710719
createPoolCredentials fmt dir = do
711720
liftIO $ createDirectoryIfMissing True dir
712-
firstExceptT GenesisCmdNodeCmdError $ do
721+
fromExceptTCli $ do
713722
runNodeKeyGenKesCmd $
714723
Cmd.NodeKeyGenKESCmdArgs
715724
fmt
716725
(onlyOut kesVK)
717726
(File @(SigningKey ()) $ dir </> "kes.skey")
727+
718728
runNodeKeyGenVrfCmd $
719729
Cmd.NodeKeyGenVRFCmdArgs
720730
fmt
721731
(File @(VerificationKey ()) $ dir </> "vrf.vkey")
722732
(File @(SigningKey ()) $ dir </> "vrf.skey")
733+
723734
runNodeKeyGenColdCmd $
724735
Cmd.NodeKeyGenColdCmdArgs
725736
fmt
726737
(File @(VerificationKey ()) $ dir </> "cold.vkey")
727738
(onlyOut coldSK)
728739
(onlyOut opCertCtr)
740+
729741
runNodeIssueOpCertCmd $
730742
Cmd.NodeIssueOpCertCmdArgs
731743
(VerificationKeyFilePath (onlyIn kesVK))
732744
(onlyIn coldSK)
733745
opCertCtr
734746
(KESPeriod 0)
735747
(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")
742754
where
743755
kesVK = File @(VerificationKey ()) $ dir </> "kes.vkey"
744756
coldSK = File @(SigningKey ()) $ dir </> "cold.skey"

0 commit comments

Comments
 (0)