diff --git a/cardano-cli/cardano-cli.cabal b/cardano-cli/cardano-cli.cabal index 606a5551d3..d06334de34 100644 --- a/cardano-cli/cardano-cli.cabal +++ b/cardano-cli/cardano-cli.cabal @@ -121,9 +121,11 @@ library Cardano.CLI.EraBased.Script.Certificate.Types Cardano.CLI.EraBased.Script.Mint.Read Cardano.CLI.EraBased.Script.Mint.Types + Cardano.CLI.EraBased.Script.Read.Common Cardano.CLI.EraBased.Script.Spend.Read Cardano.CLI.EraBased.Script.Spend.Types Cardano.CLI.EraBased.Script.Types + Cardano.CLI.EraBased.Script.Vote.Read Cardano.CLI.EraBased.Script.Vote.Types Cardano.CLI.EraBased.Transaction.HashCheck Cardano.CLI.Helpers diff --git a/cardano-cli/src/Cardano/CLI/Compatible/Transaction.hs b/cardano-cli/src/Cardano/CLI/Compatible/Transaction.hs index 4d776163ec..c396ff9828 100644 --- a/cardano-cli/src/Cardano/CLI/Compatible/Transaction.hs +++ b/cardano-cli/src/Cardano/CLI/Compatible/Transaction.hs @@ -25,6 +25,8 @@ import Cardano.CLI.EraBased.Run.Transaction import Cardano.CLI.EraBased.Script.Certificate.Read import Cardano.CLI.EraBased.Script.Certificate.Types import Cardano.CLI.EraBased.Script.Types +import Cardano.CLI.EraBased.Script.Vote.Types (CliVoteScriptRequirements, + VoteScriptWitness (..)) import Cardano.CLI.Parser import Cardano.CLI.Read import Cardano.CLI.Types.Common @@ -182,7 +184,7 @@ data CompatibleTransactionCmds era [TxOutAnyEra] !(Maybe (Featured ShelleyToBabbageEra era (Maybe UpdateProposalFile))) !(Maybe (Featured ConwayEraOnwards era [(ProposalFile In, Maybe (ScriptWitnessFiles WitCtxStake))])) - ![(VoteFile In, Maybe (ScriptWitnessFiles WitCtxStake))] + ![(VoteFile In, Maybe CliVoteScriptRequirements)] [WitnessSigningData] -- ^ Signing keys (Maybe NetworkId) @@ -272,7 +274,7 @@ runCompatibleTransactionCmd readVotingProceduresFiles w mVotes votingProcedures <- firstExceptT CompatibleVoteMergeError . hoistEither $ - mkTxVotingProcedures votesAndWits + mkTxVotingProcedures [(v, vswScriptWitness <$> mSwit) | (v, mSwit) <- votesAndWits] return (prop, VotingProcedures w votingProcedures) ) sbe diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Run/Governance/Vote.hs b/cardano-cli/src/Cardano/CLI/EraBased/Run/Governance/Vote.hs index cff860d6c5..2b4e6b7007 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Run/Governance/Vote.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Run/Governance/Vote.hs @@ -16,7 +16,7 @@ import qualified Cardano.Api.Ledger as L import Cardano.Api.Shelley import qualified Cardano.CLI.EraBased.Commands.Governance.Vote as Cmd -import Cardano.CLI.Read (readSingleVote) +import Cardano.CLI.EraBased.Script.Vote.Read import Cardano.CLI.Run.Hash (carryHashChecks) import Cardano.CLI.Types.Common import Cardano.CLI.Types.Errors.CmdError @@ -108,8 +108,9 @@ runGovernanceVoteViewCmd shelleyBasedEraConstraints sbe $ do voteProcedures <- - fmap fst . firstExceptT GovernanceVoteCmdReadVoteFileError . newExceptT $ - readSingleVote eon (voteFile, Nothing) + fmap fst $ + firstExceptT GovernanceVoteCmdReadVoteFileError $ + readVoteScriptWitness eon (voteFile, Nothing) firstExceptT GovernanceVoteCmdWriteError . newExceptT . ( case outFormat of diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs index 01c5d8860b..c314a2550c 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs @@ -13,9 +13,9 @@ import Cardano.Api import Cardano.Api.Shelley import Cardano.CLI.EraBased.Script.Certificate.Types +import Cardano.CLI.EraBased.Script.Read.Common import Cardano.CLI.EraBased.Script.Types -import Cardano.CLI.Read -import Cardano.CLI.Types.Common +import Cardano.CLI.Types.Common (CertificateFile) import Control.Monad diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs index 67044d6f77..0bd00f6e15 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs @@ -11,8 +11,8 @@ import Cardano.Api import Cardano.Api.Shelley import Cardano.CLI.EraBased.Script.Mint.Types +import Cardano.CLI.EraBased.Script.Read.Common import Cardano.CLI.EraBased.Script.Types -import Cardano.CLI.Read readMintScriptWitness :: MonadIOTransError (FileError CliScriptWitnessError) t m diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs index f3540d7132..40756e5cd3 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs @@ -14,6 +14,7 @@ where import Cardano.Api import Cardano.Api.Shelley +import Cardano.CLI.EraBased.Script.Read.Common import Cardano.CLI.EraBased.Script.Spend.Types import Cardano.CLI.EraBased.Script.Types import Cardano.CLI.Read diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Types.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Types.hs index 39f6f5e736..979dd9381a 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Types.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Types.hs @@ -1,8 +1,11 @@ +{-# LANGUAGE GADTs #-} {-# LANGUAGE LambdaCase #-} module Cardano.CLI.EraBased.Script.Types - ( -- * Errors - CliScriptWitnessError (..) + ( AnyPlutusScript (..) + + -- * Errors + , CliScriptWitnessError (..) ) where @@ -12,17 +15,25 @@ import Cardano.CLI.Types.Errors.PlutusScriptDecodeError import Cardano.CLI.Types.Errors.ScriptDataError import Cardano.CLI.Types.Errors.ScriptDecodeError +-- TODO: Move to cardano-api +data AnyPlutusScript where + AnyPlutusScript + :: IsPlutusScriptLanguage lang => PlutusScriptVersion lang -> PlutusScript lang -> AnyPlutusScript + data CliScriptWitnessError = SimpleScriptWitnessDecodeError ScriptDecodeError + | TextEnvelopeError TextEnvelopeError | PlutusScriptWitnessDecodeError PlutusScriptDecodeError | PlutusScriptWitnessLanguageNotSupportedInEra AnyPlutusScriptVersion AnyShelleyBasedEra | PlutusScriptWitnessRedeemerError ScriptDataError + deriving Show instance Error CliScriptWitnessError where prettyError = \case SimpleScriptWitnessDecodeError err -> prettyError err + TextEnvelopeError err -> prettyError err PlutusScriptWitnessDecodeError err -> prettyError err PlutusScriptWitnessLanguageNotSupportedInEra version era -> "Plutus script version " <> pshow version <> " is not supported in era " <> pshow era diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs new file mode 100644 index 0000000000..b1cf6cce3b --- /dev/null +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs @@ -0,0 +1,120 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE GADTs #-} + +module Cardano.CLI.EraBased.Script.Vote.Read + ( readVoteScriptWitness + ) +where + +import Cardano.Api +import Cardano.Api.Shelley + +import Cardano.CLI.EraBased.Script.Read.Common +import Cardano.CLI.EraBased.Script.Types +import Cardano.CLI.EraBased.Script.Vote.Types +import Cardano.CLI.Types.Governance + +readVoteScriptWitness + :: MonadIOTransError (FileError CliScriptWitnessError) t m + => ConwayEraOnwards era + -> (VoteFile In, Maybe CliVoteScriptRequirements) + -> t m (VotingProcedures era, Maybe (VoteScriptWitness era)) +readVoteScriptWitness w (voteFp, Nothing) = do + votProceds <- + conwayEraOnwardsConstraints w $ + modifyError (fmap TextEnvelopeError) $ + hoistIOEither $ + readFileTextEnvelope AsVotingProcedures voteFp + return (votProceds, Nothing) +readVoteScriptWitness w (voteFp, Just certScriptReq) = do + let sbe = convert w + votProceds <- + conwayEraOnwardsConstraints w $ + modifyError (fmap TextEnvelopeError) $ + hoistIOEither $ + readFileTextEnvelope AsVotingProcedures voteFp + case certScriptReq of + OnDiskSimpleScript scriptFp -> do + let sFp = unFile scriptFp + s <- + modifyError (fmap SimpleScriptWitnessDecodeError) $ + readFileSimpleScript sFp + case s of + SimpleScript ss -> do + return + ( votProceds + , Just $ + VoteScriptWitness + ( SimpleScriptWitness (sbeToSimpleScriptLanguageInEra sbe) $ + SScript ss + ) + ) + OnDiskPlutusScript (OnDiskPlutusScriptCliArgs scriptFp redeemerFile execUnits) -> do + let plutusScriptFp = unFile scriptFp + plutusScript <- + modifyError (fmap PlutusScriptWitnessDecodeError) $ + readFilePlutusScript plutusScriptFp + redeemer <- + modifyError (FileError plutusScriptFp . PlutusScriptWitnessRedeemerError) $ + readScriptDataOrFile redeemerFile + case plutusScript of + AnyPlutusScript lang script -> do + let pScript = PScript script + sLangSupported <- + modifyError (FileError plutusScriptFp) + $ hoistMaybe + ( PlutusScriptWitnessLanguageNotSupportedInEra + (AnyPlutusScriptVersion lang) + (shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe) + ) + $ scriptLanguageSupportedInEra sbe + $ PlutusScriptLanguage lang + return + ( votProceds + , Just $ + VoteScriptWitness $ + PlutusScriptWitness + sLangSupported + lang + pScript + NoScriptDatumForStake + redeemer + execUnits + ) + OnDiskPlutusRefScript (PlutusRefScriptCliArgs refTxIn anyPlutusScriptVersion redeemerFile execUnits) -> do + case anyPlutusScriptVersion of + AnyPlutusScriptVersion lang -> do + let pScript = PReferenceScript refTxIn + redeemer <- + -- TODO: Implement a new error type to capture this. FileError is not representative of cases + -- where we do not have access to the script. + modifyError + ( FileError "Reference script filepath not available" + . PlutusScriptWitnessRedeemerError + ) + $ readScriptDataOrFile redeemerFile + sLangSupported <- + -- TODO: Implement a new error type to capture this. FileError is not representative of cases + -- where we do not have access to the script. + modifyError (FileError "Reference script filepath not available") + $ hoistMaybe + ( PlutusScriptWitnessLanguageNotSupportedInEra + (AnyPlutusScriptVersion lang) + (shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe) + ) + $ scriptLanguageSupportedInEra sbe + $ PlutusScriptLanguage lang + + return + ( votProceds + , Just $ + VoteScriptWitness $ + PlutusScriptWitness + sLangSupported + lang + pScript + NoScriptDatumForStake + redeemer + execUnits + ) diff --git a/cardano-cli/src/Cardano/CLI/Read.hs b/cardano-cli/src/Cardano/CLI/Read.hs index a31096f5ba..90e3662f45 100644 --- a/cardano-cli/src/Cardano/CLI/Read.hs +++ b/cardano-cli/src/Cardano/CLI/Read.hs @@ -18,22 +18,16 @@ module Cardano.CLI.Read -- * Script , ScriptWitnessError (..) , renderScriptWitnessError - , readScriptDataOrFile , readScriptWitness , readScriptWitnessFiles , readScriptWitnessFilesTuple , ScriptDecodeError (..) , deserialiseScriptInAnyLang , readFileScriptInAnyLang - , readFileSimpleScript - , AnyPlutusScript (..) , PlutusScriptDecodeError (..) - , readFilePlutusScript -- * Script data (datums and redeemers) , ScriptDataError (..) - , readScriptDatumOrFile - , readScriptRedeemerOrFile , renderScriptDataError -- * Tx @@ -83,7 +77,6 @@ module Cardano.CLI.Read , getStakeCredentialFromIdentifier , getStakeAddressFromVerifier , readVotingProceduresFiles - , readSingleVote -- * DRep credentials , getDRepCredentialFromVerKeyHashOrFile @@ -110,6 +103,10 @@ import qualified Cardano.Api.Ledger as L import Cardano.Api.Shelley as Api import qualified Cardano.Binary as CBOR +import Cardano.CLI.EraBased.Script.Read.Common +import Cardano.CLI.EraBased.Script.Types +import Cardano.CLI.EraBased.Script.Vote.Read +import Cardano.CLI.EraBased.Script.Vote.Types import Cardano.CLI.Types.Common import Cardano.CLI.Types.Errors.DelegationError import Cardano.CLI.Types.Errors.PlutusScriptDecodeError @@ -122,7 +119,7 @@ import qualified Cardano.Crypto.Hash as Crypto import Prelude -import Control.Exception (bracket, displayException) +import Control.Exception (bracket) import Control.Monad (forM, unless, when) import qualified Data.Aeson as Aeson import Data.Bifunctor @@ -294,6 +291,7 @@ readScriptWitnessFilesTuple era = mapM readSwitFile return (tIn, b, Just sWit) readSwitFile (tIn, b, Nothing) = return (tIn, b, Nothing) +-- TODO: Left off here. Move this to Cardano.CLI.EraBased.Script.Read.Common readScriptWitness :: ShelleyBasedEra era -> ScriptWitnessFiles witctx @@ -433,45 +431,6 @@ validateScriptSupportedInEra era script@(ScriptInAnyLang lang _) = (anyCardanoEra $ toCardanoEra era) Just script' -> pure script' -readScriptDatumOrFile - :: ScriptDatumOrFile witctx - -> ExceptT ScriptDataError IO (ScriptDatum witctx) -readScriptDatumOrFile (ScriptDatumOrFileForTxIn Nothing) = pure $ ScriptDatumForTxIn Nothing -readScriptDatumOrFile (ScriptDatumOrFileForTxIn (Just df)) = - ScriptDatumForTxIn . Just - <$> readScriptDataOrFile df -readScriptDatumOrFile InlineDatumPresentAtTxIn = pure InlineScriptDatum -readScriptDatumOrFile NoScriptDatumOrFileForMint = pure NoScriptDatumForMint -readScriptDatumOrFile NoScriptDatumOrFileForStake = pure NoScriptDatumForStake - -readScriptRedeemerOrFile - :: ScriptRedeemerOrFile - -> ExceptT ScriptDataError IO ScriptRedeemer -readScriptRedeemerOrFile = readScriptDataOrFile - -readScriptDataOrFile - :: MonadIO m - => ScriptDataOrFile - -> ExceptT ScriptDataError m HashableScriptData -readScriptDataOrFile (ScriptDataValue d) = return d -readScriptDataOrFile (ScriptDataJsonFile fp) = do - sDataBs <- handleIOExceptT (ScriptDataErrorFile . FileIOError fp) $ LBS.readFile fp - sDataValue <- hoistEither . first (ScriptDataErrorJsonParse fp) $ Aeson.eitherDecode sDataBs - hoistEither - . first ScriptDataErrorJsonBytes - $ scriptDataJsonToHashable ScriptDataJsonDetailedSchema sDataValue -readScriptDataOrFile (ScriptDataCborFile fp) = do - origBs <- handleIOExceptT (ScriptDataErrorFile . FileIOError fp) (BS.readFile fp) - hSd <- - firstExceptT (ScriptDataErrorMetadataDecode fp) $ - hoistEither $ - deserialiseFromCBOR AsHashableScriptData origBs - firstExceptT (ScriptDataErrorValidation fp) $ - hoistEither $ - validateScriptData $ - getScriptData hSd - return hSd - readVerificationKeyOrHashOrFileOrScript :: MonadIOTransError (Either (FileError ScriptDecodeError) (FileError InputDecodeError)) t m => Key keyrole @@ -565,87 +524,6 @@ fromSomeTypePlutusScripts = (AsScript $ proxyToAsType (Proxy :: Proxy lang)) (ScriptInAnyLang $ PlutusScriptLanguage v) -readFileSimpleScript - :: MonadIOTransError (FileError ScriptDecodeError) t m - => FilePath - -> t m (Script SimpleScript') -readFileSimpleScript file = do - scriptBytes <- handleIOExceptionsLiftWith (FileIOError file) . liftIO $ BS.readFile file - modifyError (FileError file) $ - hoistEither $ - deserialiseSimpleScript scriptBytes - -deserialiseSimpleScript - :: BS.ByteString - -> Either ScriptDecodeError (Script SimpleScript') -deserialiseSimpleScript bs = - case deserialiseFromJSON AsTextEnvelope bs of - Left _ -> - -- In addition to the TextEnvelope format, we also try to - -- deserialize the JSON representation of SimpleScripts. - case Aeson.eitherDecodeStrict' bs of - Left err -> Left (ScriptDecodeSimpleScriptError $ JsonDecodeError err) - Right script -> Right $ SimpleScript script - Right te -> - case deserialiseFromTextEnvelopeAnyOf [teType'] te of - Left err -> Left (ScriptDecodeTextEnvelopeError err) - Right script -> Right script - where - teType' :: FromSomeType HasTextEnvelope (Script SimpleScript') - teType' = FromSomeType (AsScript AsSimpleScript) id - -readFilePlutusScript - :: MonadIOTransError (FileError PlutusScriptDecodeError) t m - => FilePath - -> t m AnyPlutusScript -readFilePlutusScript plutusScriptFp = do - bs <- - handleIOExceptionsLiftWith (FileIOError plutusScriptFp) . liftIO $ - BS.readFile plutusScriptFp - modifyError (FileError plutusScriptFp) $ - hoistEither $ - deserialisePlutusScript bs - -deserialisePlutusScript - :: BS.ByteString - -> Either PlutusScriptDecodeError AnyPlutusScript -deserialisePlutusScript bs = do - te <- first PlutusScriptJsonDecodeError $ deserialiseFromJSON AsTextEnvelope bs - case teType te of - TextEnvelopeType s -> case s of - sVer@"PlutusScriptV1" -> deserialiseAnyPlutusScriptVersion sVer PlutusScriptV1 te - sVer@"PlutusScriptV2" -> deserialiseAnyPlutusScriptVersion sVer PlutusScriptV2 te - sVer@"PlutusScriptV3" -> deserialiseAnyPlutusScriptVersion sVer PlutusScriptV3 te - unknownScriptVersion -> - Left . PlutusScriptDecodeErrorUnknownVersion $ Text.pack unknownScriptVersion - where - deserialiseAnyPlutusScriptVersion - :: IsPlutusScriptLanguage lang - => String - -> PlutusScriptVersion lang - -> TextEnvelope - -> Either PlutusScriptDecodeError AnyPlutusScript - deserialiseAnyPlutusScriptVersion v lang tEnv = - if v == show lang - then - first PlutusScriptDecodeTextEnvelopeError $ - deserialiseFromTextEnvelopeAnyOf [teTypes (AnyPlutusScriptVersion lang)] tEnv - else Left $ PlutusScriptDecodeErrorVersionMismatch (Text.pack v) (AnyPlutusScriptVersion lang) - - teTypes :: AnyPlutusScriptVersion -> FromSomeType HasTextEnvelope AnyPlutusScript - teTypes = - \case - AnyPlutusScriptVersion PlutusScriptV1 -> - FromSomeType (AsPlutusScript AsPlutusScriptV1) (AnyPlutusScript PlutusScriptV1) - AnyPlutusScriptVersion PlutusScriptV2 -> - FromSomeType (AsPlutusScript AsPlutusScriptV2) (AnyPlutusScript PlutusScriptV2) - AnyPlutusScriptVersion PlutusScriptV3 -> - FromSomeType (AsPlutusScript AsPlutusScriptV3) (AnyPlutusScript PlutusScriptV3) - -data AnyPlutusScript where - AnyPlutusScript - :: IsPlutusScriptLanguage lang => PlutusScriptVersion lang -> PlutusScript lang -> AnyPlutusScript - -- Tx & TxBody newtype CddlTx = CddlTx {unCddlTx :: InAnyShelleyBasedEra Tx} deriving (Show, Eq) @@ -937,28 +815,30 @@ readRequiredSigner (RequiredSignerSkeyFile skFile) = do getHash (ShelleyNormalSigningKey sk) = verificationKeyHash . getVerificationKey $ PaymentSigningKey sk -data VoteError - = VoteErrorFile (FileError TextEnvelopeError) - | VoteErrorTextNotUnicode Text.UnicodeException - | VoteErrorScriptWitness ScriptWitnessError - deriving Show +newtype VoteError + = VoteErrorFile (FileError CliScriptWitnessError) + +instance Show VoteError where + show = show . prettyError instance Error VoteError where prettyError = \case VoteErrorFile e -> prettyError e - VoteErrorTextNotUnicode e -> - "Vote text file not UTF8-encoded: " <> pretty (displayException e) - VoteErrorScriptWitness e -> - renderScriptWitnessError e +-- Because the 'Voter' type is contained only in the 'VotingProcedures' +-- type, we must read a single vote as 'VotingProcedures'. The cli will +-- not read vote files with multiple votes in them because this will +-- complicate the code further in terms of contructing the redeemer map +-- when it comes to script witnessed votes. readVotingProceduresFiles :: ConwayEraOnwards era - -> [(VoteFile In, Maybe (ScriptWitnessFiles WitCtxStake))] - -> IO (Either VoteError [(VotingProcedures era, Maybe (ScriptWitness WitCtxStake era))]) + -> [(VoteFile In, Maybe CliVoteScriptRequirements)] + -> IO (Either VoteError [(VotingProcedures era, Maybe (VoteScriptWitness era))]) readVotingProceduresFiles w = \case [] -> return $ return [] - files -> runExceptT $ forM files (ExceptT . readSingleVote w) + files -> + runExceptT $ firstExceptT VoteErrorFile $ forM files (readVoteScriptWitness w) readTxUpdateProposal :: () @@ -968,30 +848,6 @@ readTxUpdateProposal readTxUpdateProposal w (UpdateProposalFile upFp) = do TxUpdateProposal w <$> newExceptT (readFileTextEnvelope AsUpdateProposal (File upFp)) --- Because the 'Voter' type is contained only in the 'VotingProcedures' --- type, we must read a single vote as 'VotingProcedures'. The cli will --- not read vote files with multiple votes in them because this will --- complicate the code further in terms of contructing the redeemer map --- when it comes to script witnessed votes. -readSingleVote - :: () - => ConwayEraOnwards era - -> (VoteFile In, Maybe (ScriptWitnessFiles WitCtxStake)) - -> IO (Either VoteError (VotingProcedures era, Maybe (ScriptWitness WitCtxStake era))) -readSingleVote w (voteFp, mScriptWitFiles) = do - votProceds <- - conwayEraOnwardsConstraints w $ - first VoteErrorFile <$> readFileTextEnvelope AsVotingProcedures voteFp - case mScriptWitFiles of - Nothing -> pure $ (,Nothing) <$> votProceds - sWitFile -> do - let sbe = convert w - runExceptT $ do - sWits <- - firstExceptT VoteErrorScriptWitness $ - mapM (readScriptWitness sbe) sWitFile - hoistEither $ (,sWits) <$> votProceds - data ConstitutionError = ConstitutionErrorFile (FileError TextEnvelopeError) | ConstitutionNotSupportedInEra AnyCardanoEra diff --git a/cardano-cli/src/Cardano/CLI/Types/Errors/GovernanceVoteCmdError.hs b/cardano-cli/src/Cardano/CLI/Types/Errors/GovernanceVoteCmdError.hs index 38c0bb114b..df91fc9721 100644 --- a/cardano-cli/src/Cardano/CLI/Types/Errors/GovernanceVoteCmdError.hs +++ b/cardano-cli/src/Cardano/CLI/Types/Errors/GovernanceVoteCmdError.hs @@ -7,6 +7,7 @@ module Cardano.CLI.Types.Errors.GovernanceVoteCmdError where import Cardano.Api.Shelley import Cardano.Binary (DecoderError) +import Cardano.CLI.EraBased.Script.Types import Cardano.CLI.Read (VoteError) import Cardano.CLI.Types.Errors.HashCmdError (HashCheckError) @@ -16,7 +17,7 @@ import qualified Formatting.Buildable as B data GovernanceVoteCmdError = GovernanceVoteCmdReadVerificationKeyError !(FileError InputDecodeError) - | GovernanceVoteCmdReadVoteFileError !VoteError + | GovernanceVoteCmdReadVoteFileError !(FileError CliScriptWitnessError) | GovernanceVoteCmdCredentialDecodeError !DecoderError | GovernanceVoteCmdWriteError !(FileError ()) | GovernanceVoteCmdReadVoteTextError !VoteError diff --git a/cardano-cli/src/Cardano/CLI/Types/Errors/PlutusScriptDecodeError.hs b/cardano-cli/src/Cardano/CLI/Types/Errors/PlutusScriptDecodeError.hs index 22dc7efad8..8f010128b9 100644 --- a/cardano-cli/src/Cardano/CLI/Types/Errors/PlutusScriptDecodeError.hs +++ b/cardano-cli/src/Cardano/CLI/Types/Errors/PlutusScriptDecodeError.hs @@ -18,6 +18,7 @@ data PlutusScriptDecodeError -- ^ Script version !AnyPlutusScriptVersion -- ^ Attempted to decode with version + deriving Show instance Error PlutusScriptDecodeError where prettyError = \case diff --git a/cardano-cli/test/cardano-cli-golden/Test/Golden/ErrorsSpec.hs b/cardano-cli/test/cardano-cli-golden/Test/Golden/ErrorsSpec.hs index e5349a6694..01e1a05de3 100644 --- a/cardano-cli/test/cardano-cli-golden/Test/Golden/ErrorsSpec.hs +++ b/cardano-cli/test/cardano-cli-golden/Test/Golden/ErrorsSpec.hs @@ -17,6 +17,7 @@ import Cardano.Api.Shelley import Cardano.Binary import Cardano.CLI.EraBased.Run.Governance.Actions import Cardano.CLI.EraBased.Run.Governance.Committee +import Cardano.CLI.EraBased.Script.Types import Cardano.CLI.Read import Cardano.CLI.Types.Errors.DelegationError import Cardano.CLI.Types.Errors.GovernanceCmdError @@ -233,8 +234,8 @@ test_VoteReadError = , ( "GovernanceVoteCmdReadVoteFileError" , GovernanceVoteCmdReadVoteFileError $ - VoteErrorFile $ - FileError "path/file.txt" $ + FileError "path/file.txt" $ + TextEnvelopeError $ TextEnvelopeAesonDecodeError "some error description" ) ,