Skip to content

Commit 2ba7089

Browse files
committed
genesis creation: share code
1 parent 7d3dd76 commit 2ba7089

File tree

2 files changed

+43
-36
lines changed

2 files changed

+43
-36
lines changed

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

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import qualified Cardano.CLI.Byron.Key as Byron
4040
import qualified Cardano.CLI.Commands.Node as Cmd
4141
import Cardano.CLI.EraBased.Commands.Genesis as Cmd
4242
import Cardano.CLI.EraBased.Run.Genesis.Common
43+
import Cardano.CLI.EraBased.Run.Genesis.CreateTestnetData (WriteFileGenesis (..))
4344
import qualified Cardano.CLI.EraBased.Run.Genesis.CreateTestnetData as TN
4445
import Cardano.CLI.EraBased.Run.StakeAddress (runStakeAddressKeyGenCmd)
4546
import qualified Cardano.CLI.IO.Lazy as Lazy
@@ -53,7 +54,6 @@ import Cardano.CLI.Types.Key
5354
import qualified Cardano.Crypto as CC
5455
import qualified Cardano.Crypto.Hash as Crypto
5556
import qualified Cardano.Crypto.Signing as Byron
56-
import Cardano.Prelude (canonicalEncodePretty)
5757
import Cardano.Slotting.Slot (EpochSize (EpochSize))
5858
import Ouroboros.Consensus.Shelley.Node (ShelleyGenesisStaking (..))
5959

@@ -72,7 +72,6 @@ import Data.Char (isDigit)
7272
import Data.Fixed (Fixed (MkFixed))
7373
import Data.Function (on)
7474
import Data.Functor (void)
75-
import Data.Functor.Identity (Identity)
7675
import qualified Data.List as List
7776
import qualified Data.List.Split as List
7877
import Data.ListMap (ListMap (..))
@@ -95,8 +94,6 @@ import qualified System.IO as IO
9594
import System.IO.Error (isDoesNotExistError)
9695
import qualified System.Random as Random
9796
import System.Random (StdGen)
98-
import qualified Text.JSON.Canonical (ToJSON)
99-
import Text.JSON.Canonical (parseCanonicalJSON, renderCanonicalJSON)
10097
import Text.Read (readMaybe)
10198

10299
runGenesisCmds :: GenesisCmds era -> ExceptT GenesisCmdError IO ()
@@ -278,9 +275,9 @@ runGenesisCreateCmd
278275
[]
279276
template
280277

281-
void $ writeFileGenesis (rootdir </> "genesis.json") $ WritePretty shelleyGenesis
282-
void $ writeFileGenesis (rootdir </> "genesis.alonzo.json") $ WritePretty alonzoGenesis
283-
void $ writeFileGenesis (rootdir </> "genesis.conway.json") $ WritePretty conwayGenesis
278+
void $ TN.writeFileGenesis (rootdir </> "genesis.json") $ WritePretty shelleyGenesis
279+
void $ TN.writeFileGenesis (rootdir </> "genesis.alonzo.json") $ WritePretty alonzoGenesis
280+
void $ TN.writeFileGenesis (rootdir </> "genesis.conway.json") $ WritePretty conwayGenesis
284281
where
285282
-- TODO: rationalise the naming convention on these genesis json files.
286283

@@ -478,13 +475,13 @@ runGenesisCreateCardanoCmd
478475
writeSecrets deldir "shelley" "counter.json" toCounter opCerts
479476

480477
byronGenesisHash <-
481-
writeFileGenesis (rootdir </> "byron-genesis.json") $ WriteCanonical byronGenesis
478+
TN.writeFileGenesis (rootdir </> "byron-genesis.json") $ WriteCanonical byronGenesis
482479
shelleyGenesisHash <-
483-
writeFileGenesis (rootdir </> "shelley-genesis.json") $ WritePretty shelleyGenesis
480+
TN.writeFileGenesis (rootdir </> "shelley-genesis.json") $ WritePretty shelleyGenesis
484481
alonzoGenesisHash <-
485-
writeFileGenesis (rootdir </> "alonzo-genesis.json") $ WritePretty alonzoGenesis
482+
TN.writeFileGenesis (rootdir </> "alonzo-genesis.json") $ WritePretty alonzoGenesis
486483
conwayGenesisHash <-
487-
writeFileGenesis (rootdir </> "conway-genesis.json") $ WritePretty conwayGenesis
484+
TN.writeFileGenesis (rootdir </> "conway-genesis.json") $ WritePretty conwayGenesis
488485

489486
liftIO $ do
490487
case mNodeConfigTemplate of
@@ -690,8 +687,8 @@ runGenesisCreateStakedCmd
690687

691688
liftIO $ LBS.writeFile (rootdir </> "genesis.json") $ encodePretty shelleyGenesis
692689

693-
void $ writeFileGenesis (rootdir </> "genesis.alonzo.json") $ WritePretty alonzoGenesis
694-
void $ writeFileGenesis (rootdir </> "genesis.conway.json") $ WritePretty conwayGenesis
690+
void $ TN.writeFileGenesis (rootdir </> "genesis.alonzo.json") $ WritePretty alonzoGenesis
691+
void $ TN.writeFileGenesis (rootdir </> "genesis.conway.json") $ WritePretty conwayGenesis
695692
-- TODO: rationalise the naming convention on these genesis json files.
696693

697694
liftIO $
@@ -1151,29 +1148,6 @@ updateTemplate
11511148
unLovelace :: Integral a => Lovelace -> a
11521149
unLovelace (L.Coin coin) = fromIntegral coin
11531150

1154-
writeFileGenesis
1155-
:: FilePath
1156-
-> WriteFileGenesis
1157-
-> ExceptT GenesisCmdError IO (Crypto.Hash Crypto.Blake2b_256 ByteString)
1158-
writeFileGenesis fpath genesis = do
1159-
handleIOExceptT (GenesisCmdGenesisFileError . FileIOError fpath) $
1160-
BS.writeFile fpath content
1161-
return $ Crypto.hashWith id content
1162-
where
1163-
content = case genesis of
1164-
WritePretty a -> LBS.toStrict $ encodePretty a
1165-
WriteCanonical a ->
1166-
LBS.toStrict
1167-
. renderCanonicalJSON
1168-
. either (error . ("error parsing json that was just encoded!? " ++) . show) id
1169-
. parseCanonicalJSON
1170-
. canonicalEncodePretty
1171-
$ a
1172-
1173-
data WriteFileGenesis where
1174-
WriteCanonical :: Text.JSON.Canonical.ToJSON Identity genesis => genesis -> WriteFileGenesis
1175-
WritePretty :: ToJSON genesis => genesis -> WriteFileGenesis
1176-
11771151
-- ----------------------------------------------------------------------------
11781152

11791153
readGenDelegsMap

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ module Cardano.CLI.EraBased.Run.Genesis.CreateTestnetData
1818
, runGenesisKeyGenDelegateCmd
1919
, runGenesisCreateTestNetDataCmd
2020
, runGenesisKeyGenDelegateVRF
21+
, writeFileGenesis
22+
, WriteFileGenesis (..)
2123
)
2224
where
2325

@@ -49,13 +51,19 @@ import Cardano.CLI.Types.Errors.GenesisCmdError
4951
import Cardano.CLI.Types.Errors.NodeCmdError
5052
import Cardano.CLI.Types.Errors.StakePoolCmdError
5153
import Cardano.CLI.Types.Key
54+
import qualified Cardano.Crypto.Hash as Crypto
55+
import Cardano.Prelude (canonicalEncodePretty)
5256
import Ouroboros.Consensus.Shelley.Node (ShelleyGenesisStaking (..))
5357

5458
import Control.DeepSeq (NFData, deepseq)
5559
import Control.Monad (forM, forM_, unless, void, when)
5660
import qualified Data.Aeson as Aeson
61+
import qualified Data.Aeson.Encode.Pretty as Aeson
5762
import Data.Bifunctor (Bifunctor (..))
63+
import Data.ByteString (ByteString)
64+
import qualified Data.ByteString.Char8 as BS
5865
import qualified Data.ByteString.Lazy.Char8 as LBS
66+
import Data.Functor.Identity (Identity)
5967
import Data.ListMap (ListMap (..))
6068
import Data.Map.Strict (Map)
6169
import qualified Data.Map.Strict as Map
@@ -74,6 +82,8 @@ import System.Directory (createDirectoryIfMissing)
7482
import System.FilePath ((</>))
7583
import qualified System.Random as Random
7684
import System.Random (StdGen)
85+
import qualified Text.JSON.Canonical (ToJSON)
86+
import Text.JSON.Canonical (parseCanonicalJSON, renderCanonicalJSON)
7787

7888
runGenesisKeyGenGenesisCmd
7989
:: GenesisKeyGenGenesisCmdArgs
@@ -164,6 +174,29 @@ runGenesisKeyGenUTxOCmd
164174
skeyDesc = "Genesis Initial UTxO Signing Key"
165175
vkeyDesc = "Genesis Initial UTxO Verification Key"
166176

177+
writeFileGenesis
178+
:: FilePath
179+
-> WriteFileGenesis
180+
-> ExceptT GenesisCmdError IO (Crypto.Hash Crypto.Blake2b_256 ByteString)
181+
writeFileGenesis fpath genesis = do
182+
handleIOExceptT (GenesisCmdGenesisFileError . FileIOError fpath) $
183+
BS.writeFile fpath content
184+
return $ Crypto.hashWith id content
185+
where
186+
content = case genesis of
187+
WritePretty a -> LBS.toStrict $ Aeson.encodePretty a
188+
WriteCanonical a ->
189+
LBS.toStrict
190+
. renderCanonicalJSON
191+
. either (error . ("error parsing json that was just encoded!? " ++) . show) id
192+
. parseCanonicalJSON
193+
. canonicalEncodePretty
194+
$ a
195+
196+
data WriteFileGenesis where
197+
WriteCanonical :: Text.JSON.Canonical.ToJSON Identity genesis => genesis -> WriteFileGenesis
198+
WritePretty :: ToJSON genesis => genesis -> WriteFileGenesis
199+
167200
runGenesisCreateTestNetDataCmd
168201
:: GenesisCreateTestNetDataCmdArgs era
169202
-> ExceptT GenesisCmdError IO ()

0 commit comments

Comments
 (0)