From 2ec46189159e6087b68aa989fdd45b146d6f1da5 Mon Sep 17 00:00:00 2001 From: Carlos LopezDeLara <64222734+CarlosLopezDeLara@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:27:29 -0600 Subject: [PATCH] Add new flags to disable metadata checks on proposals and votes to build cmd. The build cmd automatically runs checks on the metadata hashes on proposals and votes included in the transaction. The new flags allow the user to disable such checks. Useful for testing purposes and for users that may want to avoid CLI reaching out to the internet. --disable-metadata-checks-on-proposals --disable-metadata-checks-on-votes --- .../CLI/EraBased/Commands/Transaction.hs | 2 ++ .../CLI/EraBased/Options/Transaction.hs | 19 +++++++++++++++++++ .../Cardano/CLI/EraBased/Run/Transaction.hs | 12 ++++++++++-- .../src/Cardano/CLI/Types/Governance.hs | 3 +++ .../cardano-cli-golden/files/golden/help.cli | 6 ++++++ .../golden/help/babbage_transaction_build.cli | 8 ++++++++ .../golden/help/conway_transaction_build.cli | 8 ++++++++ .../golden/help/latest_transaction_build.cli | 8 ++++++++ 8 files changed, 64 insertions(+), 2 deletions(-) diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Commands/Transaction.hs b/cardano-cli/src/Cardano/CLI/EraBased/Commands/Transaction.hs index 4d9ebedb5c..a0ca870172 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Commands/Transaction.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Commands/Transaction.hs @@ -133,6 +133,8 @@ data TransactionBuildCmdArgs era = TransactionBuildCmdArgs , mUpdateProposalFile :: !(Maybe (Featured ShelleyToBabbageEra era (Maybe UpdateProposalFile))) , voteFiles :: ![(VoteFile In, Maybe CliVoteScriptRequirements)] , proposalFiles :: ![(ProposalFile In, Maybe CliProposalScriptRequirements)] + , metadataChecksOnProposals :: !MetadataCheck + , metadataChecksOnVotes :: !MetadataCheck , treasuryDonation :: !(Maybe TxTreasuryDonation) , buildOutputOptions :: !TxBuildOutputOptions } diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Options/Transaction.hs b/cardano-cli/src/Cardano/CLI/EraBased/Options/Transaction.hs index 89a2333bda..372c62e540 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Options/Transaction.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Options/Transaction.hs @@ -17,6 +17,7 @@ import Cardano.CLI.EraBased.Commands.Transaction import Cardano.CLI.EraBased.Options.Common import Cardano.CLI.Parser import Cardano.CLI.Types.Common +import Cardano.CLI.Types.Governance import Data.Foldable import Options.Applicative hiding (help, str) @@ -200,6 +201,8 @@ pTransactionBuildCmd sbe envCli = do <*> pFeatured (toCardanoEra sbe) (optional pUpdateProposalFile) <*> pVoteFiles sbe AutoBalance <*> pProposalFiles sbe AutoBalance + <*> pMetadataChecksOnProposals + <*> pMetadataChecksOnVotes <*> pTreasuryDonation sbe <*> pTxBuildOutputOptions @@ -384,3 +387,19 @@ pTransactionId = TransactionTxIdCmdArgs <$> pInputTxOrTxBodyFile <*> pTxIdOutputFormatJsonOrText + +pMetadataChecksOnProposals :: Parser MetadataCheck +pMetadataChecksOnProposals = + Opt.flag EnableMetadataCheck DisableMetadataCheck $ + mconcat + [ Opt.long "disable-metadata-checks-on-proposals" + , Opt.help "Disable automatic metadata-hash checks on proposals included in the transaction." + ] + +pMetadataChecksOnVotes :: Parser MetadataCheck +pMetadataChecksOnVotes = + Opt.flag EnableMetadataCheck DisableMetadataCheck $ + mconcat + [ Opt.long "disable-metadata-checks-on-votes" + , Opt.help "Disable automatic metadata-hash checks on votes included in the transaction." + ] diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs b/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs index ec83650764..d6e63fceca 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs @@ -67,6 +67,7 @@ import Cardano.CLI.Types.Errors.BootstrapWitnessError import Cardano.CLI.Types.Errors.NodeEraMismatchError import Cardano.CLI.Types.Errors.TxCmdError import Cardano.CLI.Types.Errors.TxValidationError +import Cardano.CLI.Types.Governance import Cardano.CLI.Types.Output (renderScriptCosts) import Cardano.CLI.Types.TxFeature @@ -147,6 +148,8 @@ runTransactionBuildCmd , mUpdateProposalFile , voteFiles , proposalFiles + , metadataChecksOnProposals + , metadataChecksOnVotes , treasuryDonation -- Maybe TxTreasuryDonation , buildOutputOptions } = do @@ -209,14 +212,19 @@ runTransactionBuildCmd (\w -> firstExceptT TxCmdVoteError $ ExceptT (readVotingProceduresFiles w voteFiles)) era' - forM_ votingProceduresAndMaybeScriptWits (checkVotingProcedureHashes eon . fst) + unless (metadataChecksOnVotes == DisableMetadataCheck) $ + forM_ votingProceduresAndMaybeScriptWits (checkVotingProcedureHashes eon . fst) + + -- unless disableMetadataChecksOnVotes $ + -- forM_ votingProceduresAndMaybeScriptWits (checkVotingProcedureHashes eon . fst) proposals <- newExceptT $ first TxCmdProposalError <$> readTxGovernanceActions eon proposalFiles - forM_ proposals (checkProposalHashes eon . fst) + unless (metadataChecksOnProposals == DisableMetadataCheck) $ + forM_ proposals (checkProposalHashes eon . fst) -- Extract return addresses from proposals and check that the return address in each proposal is registered diff --git a/cardano-cli/src/Cardano/CLI/Types/Governance.hs b/cardano-cli/src/Cardano/CLI/Types/Governance.hs index 7173121ac1..347e1f449c 100644 --- a/cardano-cli/src/Cardano/CLI/Types/Governance.hs +++ b/cardano-cli/src/Cardano/CLI/Types/Governance.hs @@ -32,3 +32,6 @@ data VoteDelegationTarget | VoteDelegationTargetOfAbstain | VoteDelegationTargetOfNoConfidence deriving (Eq, Show) + +data MetadataCheck = EnableMetadataCheck | DisableMetadataCheck + deriving (Eq, Show) 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 100da336ae..254b14e22e 100644 --- a/cardano-cli/test/cardano-cli-golden/files/golden/help.cli +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help.cli @@ -6435,6 +6435,8 @@ Usage: cardano-cli babbage transaction build | --metadata-cbor-file FILEPATH ] [--update-proposal-file FILEPATH] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH ) @@ -8489,6 +8491,8 @@ Usage: cardano-cli conway transaction build | --proposal-reference-tx-in-redeemer-value JSON_VALUE ) ]] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] [--treasury-donation LOVELACE] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH @@ -10577,6 +10581,8 @@ Usage: cardano-cli latest transaction build | --proposal-reference-tx-in-redeemer-value JSON_VALUE ) ]] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] [--treasury-donation LOVELACE] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help/babbage_transaction_build.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help/babbage_transaction_build.cli index 79108404cf..a9c40b6f4b 100644 --- a/cardano-cli/test/cardano-cli-golden/files/golden/help/babbage_transaction_build.cli +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help/babbage_transaction_build.cli @@ -115,6 +115,8 @@ Usage: cardano-cli babbage transaction build | --metadata-cbor-file FILEPATH ] [--update-proposal-file FILEPATH] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH ) @@ -391,6 +393,12 @@ Available options: Filepath of the metadata, in raw CBOR format. --update-proposal-file FILEPATH Filepath of the update proposal. + --disable-metadata-checks-on-proposals + Disable automatic metadata-hash checks on proposals + included in the transaction. + --disable-metadata-checks-on-votes + Disable automatic metadata-hash checks on votes + included in the transaction. --out-file FILEPATH Output filepath of the JSON TxBody. --calculate-plutus-script-cost FILEPATH Where to write the script cost information. diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help/conway_transaction_build.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help/conway_transaction_build.cli index cbeddef3af..56b495a946 100644 --- a/cardano-cli/test/cardano-cli-golden/files/golden/help/conway_transaction_build.cli +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help/conway_transaction_build.cli @@ -140,6 +140,8 @@ Usage: cardano-cli conway transaction build | --proposal-reference-tx-in-redeemer-value JSON_VALUE ) ]] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] [--treasury-donation LOVELACE] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH @@ -470,6 +472,12 @@ Available options: The script redeemer value. There is no schema: (almost) any JSON value is supported, including top-level strings and numbers. + --disable-metadata-checks-on-proposals + Disable automatic metadata-hash checks on proposals + included in the transaction. + --disable-metadata-checks-on-votes + Disable automatic metadata-hash checks on votes + included in the transaction. --treasury-donation LOVELACE The donation to the treasury to perform. --out-file FILEPATH Output filepath of the JSON TxBody. diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help/latest_transaction_build.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help/latest_transaction_build.cli index 68447db20e..d59cbe1f18 100644 --- a/cardano-cli/test/cardano-cli-golden/files/golden/help/latest_transaction_build.cli +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help/latest_transaction_build.cli @@ -140,6 +140,8 @@ Usage: cardano-cli latest transaction build | --proposal-reference-tx-in-redeemer-value JSON_VALUE ) ]] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] [--treasury-donation LOVELACE] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH @@ -470,6 +472,12 @@ Available options: The script redeemer value. There is no schema: (almost) any JSON value is supported, including top-level strings and numbers. + --disable-metadata-checks-on-proposals + Disable automatic metadata-hash checks on proposals + included in the transaction. + --disable-metadata-checks-on-votes + Disable automatic metadata-hash checks on votes + included in the transaction. --treasury-donation LOVELACE The donation to the treasury to perform. --out-file FILEPATH Output filepath of the JSON TxBody.