From b0de7e7e76a53d8cdb8767960695e5f626c5e5e3 Mon Sep 17 00:00:00 2001 From: Pablo Lamela Date: Thu, 28 Nov 2024 14:15:47 +0100 Subject: [PATCH] Move `genesis hash` to `hash genesis-file` --- cardano-cli/src/Cardano/CLI/Commands/Hash.hs | 3 +++ cardano-cli/src/Cardano/CLI/Options/Hash.hs | 12 +++++++++++- cardano-cli/src/Cardano/CLI/Run/Hash.hs | 15 +++++++++++++-- .../src/Cardano/CLI/Types/Errors/HashCmdError.hs | 3 +++ .../test/cardano-cli-golden/files/golden/help.cli | 6 +++++- .../cardano-cli-golden/files/golden/help/hash.cli | 3 ++- .../files/golden/help/hash_genesis-file.cli | 7 +++++++ .../files/golden/help/hash_hash.cli | 7 +++++++ 8 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 cardano-cli/test/cardano-cli-golden/files/golden/help/hash_genesis-file.cli create mode 100644 cardano-cli/test/cardano-cli-golden/files/golden/help/hash_hash.cli diff --git a/cardano-cli/src/Cardano/CLI/Commands/Hash.hs b/cardano-cli/src/Cardano/CLI/Commands/Hash.hs index a457b7e113..0bd964d98b 100644 --- a/cardano-cli/src/Cardano/CLI/Commands/Hash.hs +++ b/cardano-cli/src/Cardano/CLI/Commands/Hash.hs @@ -1,4 +1,5 @@ {-# LANGUAGE DataKinds #-} +{-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE LambdaCase #-} @@ -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 @@ -58,3 +60,4 @@ renderHashCmds :: HashCmds -> Text renderHashCmds = \case HashAnchorDataCmd{} -> "hash anchor-data" HashScriptCmd{} -> "hash script" + HashGenesisFile{} -> "hash genesis-file" diff --git a/cardano-cli/src/Cardano/CLI/Options/Hash.hs b/cardano-cli/src/Cardano/CLI/Options/Hash.hs index 2603baeda3..46507f9040 100644 --- a/cardano-cli/src/Cardano/CLI/Options/Hash.hs +++ b/cardano-cli/src/Cardano/CLI/Options/Hash.hs @@ -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." @@ -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." diff --git a/cardano-cli/src/Cardano/CLI/Run/Hash.hs b/cardano-cli/src/Cardano/CLI/Run/Hash.hs index deff090ded..9844e1a87d 100644 --- a/cardano-cli/src/Cardano/CLI/Run/Hash.hs +++ b/cardano-cli/src/Cardano/CLI/Run/Hash.hs @@ -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) @@ -55,6 +56,7 @@ runHashCmds runHashCmds = \case Cmd.HashAnchorDataCmd args -> runHashAnchorDataCmd args Cmd.HashScriptCmd args -> runHashScriptCmd args + Cmd.HashGenesisFile args -> runHashGenesisFile args runHashAnchorDataCmd :: () @@ -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) diff --git a/cardano-cli/src/Cardano/CLI/Types/Errors/HashCmdError.hs b/cardano-cli/src/Cardano/CLI/Types/Errors/HashCmdError.hs index e896961c97..d4da8a105f 100644 --- a/cardano-cli/src/Cardano/CLI/Types/Errors/HashCmdError.hs +++ b/cardano-cli/src/Cardano/CLI/Types/Errors/HashCmdError.hs @@ -27,6 +27,7 @@ data HashCmdError | HashWriteFileError !(FileError ()) | HashReadScriptError !FilePath !(FileError ScriptDecodeError) | HashFetchURLError !FetchURLError + | HashGenesisCmdGenesisFileError !(FileError ()) deriving Show instance Error HashCmdError where @@ -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 diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help.cli index 14e47f6556..8fdcf536fc 100644 --- a/cardano-cli/test/cardano-cli-golden/files/golden/help.cli +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help.cli @@ -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. @@ -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] diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help/hash.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help/hash.cli index 60e539e30f..44cbfc30e4 100644 --- a/cardano-cli/test/cardano-cli-golden/files/golden/help/hash.cli +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help/hash.cli @@ -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. @@ -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. diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help/hash_genesis-file.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help/hash_genesis-file.cli new file mode 100644 index 0000000000..f767ce89a6 --- /dev/null +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help/hash_genesis-file.cli @@ -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 diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help/hash_hash.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help/hash_hash.cli new file mode 100644 index 0000000000..2de426006c --- /dev/null +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help/hash_hash.cli @@ -0,0 +1,7 @@ +Usage: cardano-cli hash hash --genesis FILEPATH + + Compute the hash of a genesis file + +Available options: + --genesis FILEPATH The genesis file. + -h,--help Show this help text