diff --git a/cardano-api/ChangeLog.md b/cardano-api/ChangeLog.md index 8341e8b8f19..f4313b0bc8c 100644 --- a/cardano-api/ChangeLog.md +++ b/cardano-api/ChangeLog.md @@ -16,6 +16,8 @@ - **Breaking change** - `deserialiseFromRawBytes` method of the `SerialiseAsRawBytes` type class to return `Either` instead of `Maybe`. Deprecate `eitherDeserialiseFromRawBytes`. Use `deserialiseFromRawBytes` instead. +- The `cardano-cli governance create-update-proposal` command to reject empty cost model. + ### Bugs - Allow reading text envelopes from pipes ([PR 4384](https://github.com/input-output-hk/cardano-node/pull/4384)) diff --git a/cardano-cli/src/Cardano/CLI/Shelley/Run/Governance.hs b/cardano-cli/src/Cardano/CLI/Shelley/Run/Governance.hs index d25e2ee903b..4d54e3e734d 100644 --- a/cardano-cli/src/Cardano/CLI/Shelley/Run/Governance.hs +++ b/cardano-cli/src/Cardano/CLI/Shelley/Run/Governance.hs @@ -10,6 +10,8 @@ import Control.Monad.Trans.Except.Extra (firstExceptT, handleIOExceptT onLeft) import Data.Aeson (eitherDecode) import qualified Data.ByteString.Lazy as LB +import Data.Function ((&)) +import qualified Data.List as List import Data.Text (Text) import qualified Data.Text as Text @@ -21,9 +23,8 @@ import Cardano.CLI.Shelley.Key (VerificationKeyOrHashOrFile, import Cardano.CLI.Shelley.Parsers import Cardano.CLI.Types +import Cardano.Ledger.Alonzo.Scripts (CostModels (..)) import qualified Cardano.Ledger.Shelley.TxBody as Shelley -import Control.Monad.IO.Unlift (MonadIO (..)) -import Data.Function ((&)) data ShelleyGovernanceCmdError @@ -39,6 +40,7 @@ data ShelleyGovernanceCmdError !Int -- ^ Number of reward amounts | ShelleyGovernanceCmdCostModelsJsonDecodeErr !FilePath !Text + | ShelleyGovernanceCmdEmptyCostModel !FilePath deriving Show renderShelleyGovernanceError :: ShelleyGovernanceCmdError -> Text @@ -55,8 +57,10 @@ renderShelleyGovernanceError err = <> " The number of staking keys: " <> textShow numVKeys <> " and the number of reward amounts: " <> textShow numRwdAmts <> " are not equivalent." - ShelleyGovernanceCmdCostModelsJsonDecodeErr err' fp -> - "Error decoding cost model: " <> Text.pack err' <> " at: " <> fp + ShelleyGovernanceCmdCostModelsJsonDecodeErr fp err' -> + "Error decoding cost model: " <> err' <> " at: " <> Text.pack fp + ShelleyGovernanceCmdEmptyCostModel fp -> + "The decoded cost model was empty at: " <> Text.pack fp ShelleyGovernanceCmdCostModelReadError err' -> "Error reading the cost model: " <> Text.pack (displayError err') @@ -163,6 +167,8 @@ runGovernanceUpdateProposal (OutputFile upFile) eNo genVerKeyFiles upPprams mCos cModels <- pure (eitherDecode costModelsBs) & onLeft (left . ShelleyGovernanceCmdCostModelsJsonDecodeErr fp . Text.pack) + when (List.null (unCostModels cModels)) $ left (ShelleyGovernanceCmdEmptyCostModel fp) + return $ upPprams {protocolUpdateCostModels = fromAlonzoCostModels cModels} when (finalUpPprams == mempty) $ left ShelleyGovernanceCmdEmptyUpdateProposalError diff --git a/update.proposal b/update.proposal deleted file mode 100644 index 4fa8aa8319a..00000000000 --- a/update.proposal +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "UpdateProposalShelley", - "description": "", - "cborHex": "82a1581c5c5dbf04f506922566f737301c824847df1e2ceadb979e8ccb29070b981a818208008080808080808080808080808080808080a0808081821b00000004a817c8001a03b20b80808080801832" -}