Skip to content

Commit

Permalink
Copy genesis hash to hash genesis-file
Browse files Browse the repository at this point in the history
  • Loading branch information
palas committed Nov 28, 2024
1 parent 8216024 commit 7dc09c9
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 5 deletions.
3 changes: 3 additions & 0 deletions cardano-cli/src/Cardano/CLI/Commands/Hash.hs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE LambdaCase #-}

Expand All @@ -22,6 +23,7 @@ import Data.Text (Text)
data HashCmds
= HashAnchorDataCmd !HashAnchorDataCmdArgs
| HashScriptCmd !HashScriptCmdArgs
| HashGenesisFile !GenesisFile

data HashGoal hash
= -- | The hash is written to stdout
Expand Down Expand Up @@ -58,3 +60,4 @@ renderHashCmds :: HashCmds -> Text
renderHashCmds = \case
HashAnchorDataCmd{} -> "hash anchor-data"
HashScriptCmd{} -> "hash script"
HashGenesisFile{} -> "hash genesis-file"
12 changes: 11 additions & 1 deletion cardano-cli/src/Cardano/CLI/Options/Hash.hs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ pHashCmds :: Parser Cmd.HashCmds
pHashCmds =
subParser "hash" $
Opt.info
(asum [pHashAnchorDataCmd, pHashScriptCmd])
(asum [pHashAnchorDataCmd, pHashScriptCmd, pHashGenesisHashCmd])
( Opt.progDesc $
mconcat
[ "Compute the hash to pass to the various --*-hash arguments of commands."
Expand Down Expand Up @@ -79,3 +79,13 @@ pHashScriptCmd = do
)
)
$ Opt.progDesc "Compute the hash of a script (to then pass it to other commands)."

pHashGenesisHashCmd :: Parser Cmd.HashCmds
pHashGenesisHashCmd =
subParser "genesis-file" $
Opt.info pGenesisHash $
Opt.progDesc "Compute the hash of a genesis file."

pGenesisHash :: Parser Cmd.HashCmds
pGenesisHash =
Cmd.HashGenesisFile <$> pGenesisFile "The genesis file."
15 changes: 13 additions & 2 deletions cardano-cli/src/Cardano/CLI/Run/Hash.hs
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@ import qualified Cardano.Api.Ledger as L
import qualified Cardano.CLI.Commands.Hash as Cmd
import Cardano.CLI.Parser (stringToAnchorScheme)
import Cardano.CLI.Read
import Cardano.CLI.Types.Common (AnchorScheme (..), MustCheckHash (..),
import Cardano.CLI.Types.Common (AnchorScheme (..), GenesisFile (..), MustCheckHash (..),
PotentiallyCheckedAnchor (..), SupportedSchemes)
import Cardano.CLI.Types.Errors.HashCmdError
import Cardano.Crypto.Hash (hashToTextAsHex)
import Cardano.Prelude (first)
import qualified Cardano.Crypto.Hash as Crypto
import Cardano.Prelude (ByteString, first)

import Control.Exception (throw)
import Control.Monad (when)
Expand Down Expand Up @@ -55,6 +56,7 @@ runHashCmds
runHashCmds = \case
Cmd.HashAnchorDataCmd args -> runHashAnchorDataCmd args
Cmd.HashScriptCmd args -> runHashScriptCmd args
Cmd.HashGenesisFile args -> runHashGenesisFile args

runHashAnchorDataCmd
:: ()
Expand Down Expand Up @@ -217,3 +219,12 @@ carryHashChecks potentiallyCheckedAnchor =
TrustHash -> pure ()
where
anchor = pcaAnchor potentiallyCheckedAnchor

runHashGenesisFile :: GenesisFile -> ExceptT HashCmdError IO ()
runHashGenesisFile (GenesisFile fpath) = do
content <-
handleIOExceptT (HashGenesisCmdGenesisFileError . FileIOError fpath) $
BS.readFile fpath
let gh :: Crypto.Hash Crypto.Blake2b_256 ByteString
gh = Crypto.hashWith id content
liftIO $ Text.putStrLn (Crypto.hashToTextAsHex gh)
3 changes: 3 additions & 0 deletions cardano-cli/src/Cardano/CLI/Types/Errors/HashCmdError.hs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ data HashCmdError
| HashWriteFileError !(FileError ())
| HashReadScriptError !FilePath !(FileError ScriptDecodeError)
| HashFetchURLError !FetchURLError
| HashGenesisCmdGenesisFileError !(FileError ())
deriving Show

instance Error HashCmdError where
Expand All @@ -45,6 +46,8 @@ instance Error HashCmdError where
"Cannot read script at" <+> pretty filepath <> ":" <+> prettyError err
HashFetchURLError fetchErr ->
pretty (displayException fetchErr)
HashGenesisCmdGenesisFileError fe ->
prettyError fe

data FetchURLError
= FetchURLInvalidURLError !String
Expand Down
6 changes: 5 additions & 1 deletion cardano-cli/test/cardano-cli-golden/files/golden/help.cli
Original file line number Diff line number Diff line change
Expand Up @@ -10589,7 +10589,7 @@ Usage: cardano-cli latest transaction txid

Print a transaction identifier.

Usage: cardano-cli hash (anchor-data | script)
Usage: cardano-cli hash (anchor-data | script | genesis-file)

Compute the hash to pass to the various --*-hash arguments of commands.

Expand All @@ -10609,6 +10609,10 @@ Usage: cardano-cli hash script --script-file FILEPATH [--out-file FILEPATH]

Compute the hash of a script (to then pass it to other commands).

Usage: cardano-cli hash genesis-file --genesis FILEPATH

Compute the hash of a genesis file.

Usage: cardano-cli ping [-c|--count COUNT]
((-h|--host HOST) | (-u|--unixsock SOCKET))
[-p|--port PORT]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Usage: cardano-cli hash (anchor-data | script)
Usage: cardano-cli hash (anchor-data | script | genesis-file)

Compute the hash to pass to the various --*-hash arguments of commands.

Expand All @@ -10,3 +10,4 @@ Available commands:
to other commands).
script Compute the hash of a script (to then pass it to
other commands).
genesis-file Compute the hash of a genesis file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Usage: cardano-cli hash genesis-file --genesis FILEPATH

Compute the hash of a genesis file.

Available options:
--genesis FILEPATH The genesis file.
-h,--help Show this help text

0 comments on commit 7dc09c9

Please sign in to comment.