diff --git a/cabal.project b/cabal.project index 165f3d9363..b85779932b 100644 --- a/cabal.project +++ b/cabal.project @@ -14,7 +14,7 @@ repository cardano-haskell-packages -- you need to run if you change them index-state: , hackage.haskell.org 2025-04-16T18:30:40Z - , cardano-haskell-packages 2025-04-25T15:50:18Z + , cardano-haskell-packages 2025-05-12T17:34:03Z packages: diff --git a/cardano-cli/cardano-cli.cabal b/cardano-cli/cardano-cli.cabal index 47dbd7c0d8..b24d3d33f7 100644 --- a/cardano-cli/cardano-cli.cabal +++ b/cardano-cli/cardano-cli.cabal @@ -233,7 +233,7 @@ library binary, bytestring, canonical-json, - cardano-api ^>=10.15, + cardano-api ^>=10.16, cardano-binary, cardano-crypto, cardano-crypto-class ^>=2.2, diff --git a/cardano-cli/src/Cardano/CLI/Byron/Parser.hs b/cardano-cli/src/Cardano/CLI/Byron/Parser.hs index 809b21a9dd..458c59debc 100644 --- a/cardano-cli/src/Cardano/CLI/Byron/Parser.hs +++ b/cardano-cli/src/Cardano/CLI/Byron/Parser.hs @@ -277,7 +277,7 @@ parseTxInAtto = parseTxIdAtto :: Atto.Parser TxId parseTxIdAtto = ( "Transaction ID (hexadecimal)") $ do bstr <- Atto.takeWhile1 Char.isHexDigit - case deserialiseFromRawBytesHex AsTxId bstr of + case deserialiseFromRawBytesHex bstr of Right addr -> return addr Left e -> fail $ docToString $ "Incorrect transaction id format: " <> prettyError e diff --git a/cardano-cli/src/Cardano/CLI/Compatible/StakePool/Run.hs b/cardano-cli/src/Cardano/CLI/Compatible/StakePool/Run.hs index 74811d7bbf..f5a22e7337 100644 --- a/cardano-cli/src/Cardano/CLI/Compatible/StakePool/Run.hs +++ b/cardano-cli/src/Cardano/CLI/Compatible/StakePool/Run.hs @@ -58,14 +58,14 @@ runStakePoolRegistrationCertificateCmd vrfVerKey <- fromExceptTCli $ firstExceptT StakePoolCmdReadKeyFileError $ - readVerificationKeyOrFile AsVrfKey vrfVerificationKeyOrFile + readVerificationKeyOrFile vrfVerificationKeyOrFile let vrfKeyHash' = verificationKeyHash vrfVerKey -- Pool reward account rwdStakeVerKey <- fromExceptTCli $ firstExceptT StakePoolCmdReadKeyFileError $ - readVerificationKeyOrFile AsStakeKey rewardStakeVerificationKeyOrFile + readVerificationKeyOrFile rewardStakeVerificationKeyOrFile let stakeCred = StakeCredentialByKey (verificationKeyHash rwdStakeVerKey) rewardAccountAddr = makeStakeAddress network stakeCred @@ -74,7 +74,7 @@ runStakePoolRegistrationCertificateCmd forM ownerStakeVerificationKeyOrFiles $ fromExceptTCli . firstExceptT StakePoolCmdReadKeyFileError - . readVerificationKeyOrFile AsStakeKey + . readVerificationKeyOrFile let stakePoolOwners' = map verificationKeyHash sPoolOwnerVkeys let stakePoolParams = diff --git a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Option.hs b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Option.hs index 154e546ac9..4680b378c5 100644 --- a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Option.hs +++ b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Option.hs @@ -113,7 +113,7 @@ pTxOutDatum = pTxOutDatumByHashOnly = fmap TxOutDatumByHashOnly $ - Opt.option (readerFromParsecParser $ parseHash (AsHash AsScriptData)) $ + Opt.option (readerFromParsecParser parseHash) $ mconcat [ Opt.long "tx-out-datum-hash" , Opt.metavar "HASH" diff --git a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs index 65eb5abc87..6942900b89 100644 --- a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs +++ b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs @@ -74,7 +74,7 @@ runCompatibleTransactionCmd sequenceA [ fmap (,cswScriptWitness <$> mSwit) $ fromEitherIOCli $ - readFileTextEnvelope AsCertificate $ + readFileTextEnvelope $ File certFile | (CertificateFile certFile, mSwit) <- certFilesAndMaybeScriptWits ] diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs b/cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs index d0380de125..63ec70b5a9 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs @@ -16,6 +16,7 @@ module Cardano.CLI.EraBased.Common.Option where import Cardano.Api import Cardano.Api.Experimental +import Cardano.Api.Internal.Error import Cardano.Api.Ledger qualified as L import Cardano.Api.Network qualified as Consensus import Cardano.Api.Shelley @@ -275,7 +276,7 @@ parseTxIn = TxIn <$> parseTxId <*> (Parsec.char '#' *> parseTxIx) parseTxId :: Parsec.Parser TxId parseTxId = do str' <- some Parsec.hexDigit "transaction id (hexadecimal)" - case deserialiseFromRawBytesHex AsTxId (BSC.pack str') of + case deserialiseFromRawBytesHex (BSC.pack str') of Right addr -> return addr Left e -> fail $ docToString $ "Incorrect transaction id format: " <> prettyError e @@ -338,7 +339,7 @@ pScriptFor name (Just deprecated) help' = -- | The first argument is the optional prefix. pStakeVerificationKey :: Maybe String -> Parser (VerificationKey StakeKey) pStakeVerificationKey prefix = - Opt.option (readVerificationKey AsStakeKey) $ + Opt.option readVerificationKey $ mconcat [ Opt.long $ prefixFlag prefix "stake-verification-key" , Opt.metavar "STRING" @@ -349,9 +350,8 @@ pStakeVerificationKey prefix = readVerificationKey :: forall keyrole . SerialiseAsBech32 (VerificationKey keyrole) - => AsType keyrole - -> Opt.ReadM (VerificationKey keyrole) -readVerificationKey asType = + => Opt.ReadM (VerificationKey keyrole) +readVerificationKey = Opt.eitherReader deserialiseFromBech32OrHex where keyFormats :: NonEmpty (InputFormat (VerificationKey keyrole)) @@ -362,7 +362,7 @@ readVerificationKey asType = -> Either String (VerificationKey keyrole) deserialiseFromBech32OrHex str' = first (docToString . renderInputDecodeError) $ - deserialiseInput (AsVerificationKey asType) keyFormats (BSC.pack str') + deserialiseInput keyFormats (BSC.pack str') -- | The first argument is the optional prefix. pStakeVerificationKeyFile :: Maybe String -> Parser (VerificationKeyFile In) @@ -463,7 +463,7 @@ pStakePoolVerificationKeyOrFile prefix = pStakePoolVerificationNormalKey :: Maybe String -> Parser (VerificationKey StakePoolKey) pStakePoolVerificationNormalKey prefix = - Opt.option (readVerificationKey AsStakePoolKey) $ + Opt.option readVerificationKey $ mconcat [ Opt.long $ prefixFlag prefix "stake-pool-verification-key" , Opt.metavar "STRING" @@ -474,7 +474,7 @@ pStakePoolVerificationNormalKey prefix = pStakePoolVerificationExtendedKey :: Maybe String -> Parser (VerificationKey StakePoolExtendedKey) pStakePoolVerificationExtendedKey prefix = - Opt.option (readVerificationKey AsStakePoolExtendedKey) $ + Opt.option readVerificationKey $ mconcat [ Opt.long $ prefixFlag prefix "stake-pool-verification-extended-key" , Opt.metavar "STRING" @@ -547,23 +547,22 @@ pTreasuryWithdrawalAmt = rHexHash :: () => SerialiseAsRawBytes (Hash a) - => AsType a - -> Maybe String + => Maybe String -- ^ Optional prefix to the error message -> ReadM (Hash a) -rHexHash a mErrPrefix = +rHexHash mErrPrefix = Opt.eitherReader $ first (\e -> errPrefix <> (docToString $ prettyError e)) - . deserialiseFromRawBytesHex (AsHash a) + . deserialiseFromRawBytesHex . BSC.pack where errPrefix = maybe "" (": " <>) mErrPrefix -rBech32KeyHash :: SerialiseAsBech32 (Hash a) => AsType a -> ReadM (Hash a) -rBech32KeyHash a = +rBech32KeyHash :: SerialiseAsBech32 (Hash a) => ReadM (Hash a) +rBech32KeyHash = Opt.eitherReader $ first (docToString . prettyError) - . deserialiseFromBech32 (AsHash a) + . deserialiseFromBech32 . Text.pack pGenesisDelegateVerificationKey :: Parser (VerificationKey GenesisDelegateKey) @@ -576,22 +575,20 @@ pGenesisDelegateVerificationKey = ] where deserialiseFromHex = - rVerificationKey AsGenesisDelegateKey (Just "Invalid genesis delegate verification key") + rVerificationKey $ Just "Invalid genesis delegate verification key" -- | Reader for verification keys rVerificationKey :: () => SerialiseAsRawBytes (VerificationKey a) - => AsType a - -- ^ Singleton value identifying the kind of verification keys - -> Maybe String + => Maybe String -- ^ Optional prefix to the error message -> ReadM (VerificationKey a) -rVerificationKey a mErrPrefix = +rVerificationKey mErrPrefix = Opt.eitherReader $ first (\e -> errPrefix <> (docToString $ prettyError e)) - . deserialiseFromRawBytesHex (AsVerificationKey a) + . deserialiseFromRawBytesHex . BSC.pack where errPrefix = maybe "" (": " <>) mErrPrefix @@ -694,7 +691,7 @@ pAddCommitteeColdVerificationKey = ] where deserialiseFromHex = - rVerificationKey AsCommitteeColdKey (Just "Invalid Constitutional Committee cold key") + rVerificationKey $ Just "Invalid Constitutional Committee cold key" pAddCommitteeColdVerificationKeyFile :: Parser (File (VerificationKey keyrole) In) pAddCommitteeColdVerificationKeyFile = @@ -757,11 +754,11 @@ pRemoveCommitteeColdVerificationKey = deserialiseColdCCKeyFromHex :: ReadM (VerificationKey CommitteeColdKey) deserialiseColdCCKeyFromHex = - rVerificationKey AsCommitteeColdKey (Just "Invalid Constitutional Committee cold key") + rVerificationKey $ Just "Invalid Constitutional Committee cold key" deserialiseColdCCKeyHashFromHex :: ReadM (Hash CommitteeColdKey) deserialiseColdCCKeyHashFromHex = - rHexHash AsCommitteeColdKey (Just "Invalid Constitutional Committee cold key hash") + rHexHash $ Just "Invalid Constitutional Committee cold key hash" pRemoveCommitteeColdVerificationKeyFile :: Parser (File (VerificationKey keyrole) In) pRemoveCommitteeColdVerificationKeyFile = @@ -864,11 +861,11 @@ pCommitteeHotVerificationKey longFlag = deserialiseHotCCKeyFromHex :: ReadM (VerificationKey CommitteeHotKey) deserialiseHotCCKeyFromHex = - rVerificationKey AsCommitteeHotKey (Just "Invalid Constitutional Committee hot key") + rVerificationKey $ Just "Invalid Constitutional Committee hot key" deserialiseHotCCKeyHashFromHex :: ReadM (Hash CommitteeHotKey) deserialiseHotCCKeyHashFromHex = - rHexHash AsCommitteeHotKey (Just "Invalid Constitutional Committee hot key hash") + rHexHash $ Just "Invalid Constitutional Committee hot key hash" pCommitteeHotVerificationKeyFile :: String -> Parser (VerificationKeyFile In) pCommitteeHotVerificationKeyFile longFlag = @@ -974,7 +971,7 @@ pStakeVerificationKeyOrHashOrFile prefix = -- | First argument is the optional prefix pStakeVerificationKeyHash :: Maybe String -> Parser (Hash StakeKey) pStakeVerificationKeyHash prefix = - Opt.option (rHexHash AsStakeKey Nothing) $ + Opt.option (rHexHash Nothing) $ mconcat [ Opt.long $ prefixFlag prefix "stake-key-hash" , Opt.metavar "HASH" @@ -1661,7 +1658,7 @@ pRequiredSigner = "Input filepath of the signing key (zero or more) whose signature is required." sPayKeyHash :: Parser (Hash PaymentKey) sPayKeyHash = - Opt.option (readerFromParsecParser $ parseHash (AsHash AsPaymentKey)) $ + Opt.option (readerFromParsecParser parseHash) $ mconcat [ Opt.long "required-signer-hash" , Opt.metavar "HASH" @@ -1881,10 +1878,9 @@ pMaybeOutputFile = pVerificationKey :: forall keyrole . SerialiseAsBech32 (VerificationKey keyrole) - => AsType keyrole - -> Parser (VerificationKey keyrole) -pVerificationKey asType = - Opt.option (readVerificationKey asType) $ + => Parser (VerificationKey keyrole) +pVerificationKey = + Opt.option readVerificationKey $ mconcat [ Opt.long "verification-key" , Opt.metavar "STRING" @@ -1893,11 +1889,10 @@ pVerificationKey asType = pVerificationKeyOrFileIn :: SerialiseAsBech32 (VerificationKey keyrole) - => AsType keyrole - -> Parser (VerificationKeyOrFile keyrole) -pVerificationKeyOrFileIn asType = + => Parser (VerificationKeyOrFile keyrole) +pVerificationKeyOrFileIn = asum - [ VerificationKeyValue <$> pVerificationKey asType + [ VerificationKeyValue <$> pVerificationKey , VerificationKeyFilePath <$> pVerificationKeyFileIn ] @@ -1923,7 +1918,7 @@ pGenesisVerificationKeyHash = where deserialiseFromHex :: ReadM (Hash GenesisKey) deserialiseFromHex = - rHexHash AsGenesisKey (Just "Invalid genesis verification key hash") + rHexHash $ Just "Invalid genesis verification key hash" pGenesisVerificationKey :: Parser (VerificationKey GenesisKey) pGenesisVerificationKey = @@ -1935,7 +1930,7 @@ pGenesisVerificationKey = ] where deserialiseFromHex = - rVerificationKey AsGenesisKey (Just "Invalid genesis verification key") + rVerificationKey $ Just "Invalid genesis verification key" pGenesisVerificationKeyOrFile :: Parser (VerificationKeyOrFile GenesisKey) pGenesisVerificationKeyOrFile = @@ -1969,7 +1964,7 @@ pGenesisDelegateVerificationKeyHash = where deserialiseFromHex :: ReadM (Hash GenesisDelegateKey) deserialiseFromHex = - rHexHash AsGenesisDelegateKey (Just "Invalid genesis delegate verification key hash") + rHexHash $ Just "Invalid genesis delegate verification key hash" pGenesisDelegateVerificationKeyOrFile :: Parser (VerificationKeyOrFile GenesisDelegateKey) @@ -2003,23 +1998,21 @@ pKesVerificationKey = , Opt.help "A Bech32 or hex-encoded hot KES verification key." ] where - asType :: AsType (VerificationKey KesKey) - asType = AsVerificationKey AsKesKey - deserialiseVerKey :: String -> Either String (VerificationKey KesKey) deserialiseVerKey str = - case deserialiseFromBech32 asType (Text.pack str) of + case deserialiseFromBech32 (Text.pack str) of Right res -> Right res -- The input was valid Bech32, but some other error occurred. - Left err@(Bech32UnexpectedPrefix _ _) -> Left (docToString $ prettyError err) - Left err@(Bech32DataPartToBytesError _) -> Left (docToString $ prettyError err) - Left err@(Bech32DeserialiseFromBytesError _) -> Left (docToString $ prettyError err) - Left err@(Bech32WrongPrefix _ _) -> Left (docToString $ prettyError err) + Left err@(Bech32UnexpectedPrefix _ _) -> Left $ displayError err + Left err@(Bech32UnexpectedHeader _ _) -> Left $ displayError err + Left err@(Bech32DataPartToBytesError _) -> Left $ displayError err + Left err@(Bech32DeserialiseFromBytesError _) -> Left $ displayError err + Left err@(Bech32WrongPrefix _ _) -> Left $ displayError err -- The input was not valid Bech32. Attempt to deserialise it as hex. Left (Bech32DecodingError _) -> first (\e -> docToString $ "Invalid stake pool verification key: " <> prettyError e) - $ deserialiseFromRawBytesHex asType (BSC.pack str) + $ deserialiseFromRawBytesHex (BSC.pack str) pKesVerificationKeyFile :: Parser (VerificationKeyFile In) pKesVerificationKeyFile = @@ -2198,7 +2191,7 @@ pTxOutDatum = where pTxOutDatumByHashOnly = fmap TxOutDatumByHashOnly $ - Opt.option (readerFromParsecParser $ parseHash (AsHash AsScriptData)) $ + Opt.option (readerFromParsecParser parseHash) $ mconcat [ Opt.long "tx-out-datum-hash" , Opt.metavar "HASH" @@ -2556,7 +2549,7 @@ pAddress = -- | First argument is the prefix for the option's flag to use pStakePoolVerificationKeyHash :: Maybe String -> Parser (Hash StakePoolKey) pStakePoolVerificationKeyHash prefix = - Opt.option (rBech32KeyHash AsStakePoolKey <|> rHexHash AsStakePoolKey Nothing) $ + Opt.option (rBech32KeyHash <|> rHexHash Nothing) $ mconcat [ Opt.long $ prefixFlag prefix "stake-pool-id" , Opt.metavar "STAKE_POOL_ID" @@ -2579,11 +2572,11 @@ pVrfVerificationKeyHash = where deserialiseFromHex :: ReadM (Hash VrfKey) deserialiseFromHex = - rHexHash AsVrfKey (Just "Invalid VRF verification key hash") + rHexHash $ Just "Invalid VRF verification key hash" pVrfVerificationKey :: Parser (VerificationKey VrfKey) pVrfVerificationKey = - Opt.option (readVerificationKey AsVrfKey) $ + Opt.option readVerificationKey $ mconcat [ Opt.long "vrf-verification-key" , Opt.metavar "STRING" @@ -2620,7 +2613,7 @@ pRewardAcctVerificationKeyFile = pRewardAcctVerificationKey :: Parser (VerificationKey StakeKey) pRewardAcctVerificationKey = - Opt.option (readVerificationKey AsStakeKey) $ + Opt.option readVerificationKey $ mconcat [ Opt.long "pool-reward-account-verification-key" , Opt.metavar "STRING" @@ -2650,7 +2643,7 @@ pPoolOwnerVerificationKeyFile = pPoolOwnerVerificationKey :: Parser (VerificationKey StakeKey) pPoolOwnerVerificationKey = - Opt.option (readVerificationKey AsStakeKey) $ + Opt.option readVerificationKey $ mconcat [ Opt.long "pool-owner-verification-key" , Opt.metavar "STRING" @@ -2803,8 +2796,7 @@ pStakePoolMetadataHash = ] where deserializeFromHex :: ReadM (Hash StakePoolMetadata) - deserializeFromHex = - rHexHash AsStakePoolMetadata Nothing + deserializeFromHex = rHexHash Nothing pStakePoolRegistrationParserRequirements :: EnvCli -> Parser StakePoolRegistrationParserRequirements @@ -3607,7 +3599,7 @@ pAllOrOnlyGovActionIds = pAll <|> pOnly pDRepVerificationKeyHash :: Parser (Hash DRepKey) pDRepVerificationKeyHash = - Opt.option (rBech32KeyHash AsDRepKey <|> rHexHash AsDRepKey Nothing) $ + Opt.option (rBech32KeyHash <|> rHexHash Nothing) $ mconcat [ Opt.long "drep-key-hash" , Opt.metavar "HASH" @@ -3616,7 +3608,7 @@ pDRepVerificationKeyHash = pDRepVerificationKey :: Parser (VerificationKey DRepKey) pDRepVerificationKey = - Opt.option (readVerificationKey AsDRepKey) $ + Opt.option readVerificationKey $ mconcat [ Opt.long "drep-verification-key" , Opt.metavar "STRING" @@ -3636,7 +3628,7 @@ pDRepVerificationKeyFile = pSPOVerificationKeyHash :: Parser (Hash StakePoolKey) pSPOVerificationKeyHash = - Opt.option (rBech32KeyHash AsStakePoolKey <|> rHexHash AsStakePoolKey Nothing) $ + Opt.option (rBech32KeyHash <|> rHexHash Nothing) $ mconcat [ Opt.long "spo-key-hash" , Opt.metavar "HASH" @@ -3645,7 +3637,7 @@ pSPOVerificationKeyHash = pSPOVerificationKey :: Parser (VerificationKey StakePoolKey) pSPOVerificationKey = - Opt.option (readVerificationKey AsStakePoolKey) $ + Opt.option readVerificationKey $ mconcat [ Opt.long "spo-verification-key" , Opt.metavar "STRING" diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Genesis/CreateTestnetData/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/Genesis/CreateTestnetData/Run.hs index b1d4df4ada..20becd9928 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Genesis/CreateTestnetData/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Genesis/CreateTestnetData/Run.hs @@ -776,16 +776,16 @@ buildPoolParams nw dir index specifiedRelays = do StakePoolVerificationKey poolColdVK <- firstExceptT (GenesisCmdStakePoolCmdError . StakePoolCmdReadFileError) . newExceptT - $ readFileTextEnvelope (AsVerificationKey AsStakePoolKey) poolColdVKF + $ readFileTextEnvelope poolColdVKF VrfVerificationKey poolVrfVK <- firstExceptT (GenesisCmdNodeCmdError . NodeCmdReadFileError) . newExceptT - $ readFileTextEnvelope (AsVerificationKey AsVrfKey) poolVrfVKF + $ readFileTextEnvelope poolVrfVKF rewardsSVK <- firstExceptT GenesisCmdTextEnvReadFileError . newExceptT - $ readFileTextEnvelope (AsVerificationKey AsStakeKey) poolRewardVKF + $ readFileTextEnvelope poolRewardVKF pure L.PoolParams @@ -952,9 +952,9 @@ readGenDelegsMap (Hash GenesisDelegateKey, Hash VrfKey) ) readGenDelegsMap genesisKeys delegateKeys delegateVrfKeys = do - gkm <- readKeys (AsVerificationKey AsGenesisKey) genesisKeys - dkm <- readKeys (AsVerificationKey AsGenesisDelegateKey) delegateKeys - vkm <- readKeys (AsVerificationKey AsVrfKey) delegateVrfKeys + gkm <- readKeys genesisKeys + dkm <- readKeys delegateKeys + vkm <- readKeys delegateVrfKeys let combinedMap :: Map @@ -1002,10 +1002,9 @@ readKeys :: () => HasTextEnvelope a => Ord k - => AsType a - -> Map k FilePath + => Map k FilePath -> ExceptT GenesisCmdError IO (Map k a) -readKeys asType genesisVKeys = do +readKeys genesisVKeys = do firstExceptT GenesisCmdTextEnvReadFileError $ fromList <$> sequence @@ -1013,7 +1012,7 @@ readKeys asType genesisVKeys = do | (ix, file) <- toList genesisVKeys ] where - readKey = newExceptT . readFileTextEnvelope asType + readKey = newExceptT . readFileTextEnvelope readInitialFundAddresses :: [FilePath] @@ -1025,7 +1024,7 @@ readInitialFundAddresses utxoKeyFileNames nw = do sequence [ newExceptT $ readFileTextEnvelope - (AsVerificationKey AsGenesisUTxOKey) + @(VerificationKey GenesisUTxOKey) (File file) | file <- utxoKeyFileNames ] diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Genesis/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/Genesis/Run.hs index 62c6d510d9..f48b59d5e3 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Genesis/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Genesis/Run.hs @@ -211,7 +211,7 @@ runGenesisTxInCmd } = do vkey <- firstExceptT GenesisCmdTextEnvReadFileError . newExceptT $ - readFileTextEnvelope (AsVerificationKey AsGenesisUTxOKey) verificationKeyPath + readFileTextEnvelope verificationKeyPath let txin = genesisUTxOPseudoTxIn network (verificationKeyHash vkey) liftIO $ writeOutput mOutFile (renderTxIn txin) @@ -226,7 +226,7 @@ runGenesisAddrCmd } = do vkey <- firstExceptT GenesisCmdTextEnvReadFileError . newExceptT $ - readFileTextEnvelope (AsVerificationKey AsGenesisUTxOKey) verificationKeyPath + readFileTextEnvelope @(VerificationKey GenesisUTxOKey) verificationKeyPath let vkh = verificationKeyHash (castVerificationKey vkey) addr = makeShelleyAddress @@ -967,16 +967,16 @@ buildPoolParams nw dir index specifiedRelays = do StakePoolVerificationKey poolColdVK <- firstExceptT (GenesisCmdStakePoolCmdError . StakePoolCmdReadFileError) . newExceptT - $ readFileTextEnvelope (AsVerificationKey AsStakePoolKey) poolColdVKF + $ readFileTextEnvelope poolColdVKF VrfVerificationKey poolVrfVK <- firstExceptT (GenesisCmdNodeCmdError . NodeCmdReadFileError) . newExceptT - $ readFileTextEnvelope (AsVerificationKey AsVrfKey) poolVrfVKF + $ readFileTextEnvelope poolVrfVKF rewardsSVK <- firstExceptT GenesisCmdTextEnvReadFileError . newExceptT - $ readFileTextEnvelope (AsVerificationKey AsStakeKey) poolRewardVKF + $ readFileTextEnvelope @(VerificationKey StakeKey) poolRewardVKF pure L.PoolParams @@ -1252,24 +1252,7 @@ readGenesisKeys GenesisCmdError IO (Map Int (VerificationKey GenesisKey)) -readGenesisKeys gendir = do - files <- liftIO (listDirectory gendir) - fileIxs <- - extractFileNameIndexes - [ gendir file - | file <- files - , takeExtension file == ".vkey" - ] - firstExceptT GenesisCmdTextEnvReadFileError $ - fromList - <$> sequence - [ (,) ix <$> readKey (File file) - | (file, ix) <- fileIxs - ] - where - readKey = - newExceptT - . readFileTextEnvelope (AsVerificationKey AsGenesisKey) +readGenesisKeys = readKeys ".vkey" readDelegateKeys :: FilePath @@ -1277,24 +1260,7 @@ readDelegateKeys GenesisCmdError IO (Map Int (VerificationKey GenesisDelegateKey)) -readDelegateKeys deldir = do - files <- liftIO (listDirectory deldir) - fileIxs <- - extractFileNameIndexes - [ deldir file - | file <- files - , takeExtensions file == ".vkey" - ] - firstExceptT GenesisCmdTextEnvReadFileError $ - fromList - <$> sequence - [ (,) ix <$> readKey (File file) - | (file, ix) <- fileIxs - ] - where - readKey = - newExceptT - . readFileTextEnvelope (AsVerificationKey AsGenesisDelegateKey) +readDelegateKeys = readKeys ".vkey" readDelegateVrfKeys :: FilePath @@ -1302,13 +1268,25 @@ readDelegateVrfKeys GenesisCmdError IO (Map Int (VerificationKey VrfKey)) -readDelegateVrfKeys deldir = do - files <- liftIO (listDirectory deldir) +readDelegateVrfKeys = readKeys ".vrf.vkey" + +readKeys + :: HasTextEnvelope key + => String + -- ^ File extension of the key with the dot e.g. ".vkey" + -> FilePath + -> ExceptT + GenesisCmdError + IO + (Map Int key) + -- ^ Map of index to the key +readKeys keyExtension gendir = do + files <- liftIO (listDirectory gendir) fileIxs <- extractFileNameIndexes - [ deldir file + [ gendir file | file <- files - , takeExtensions file == ".vrf.vkey" + , takeExtension' file == keyExtension ] firstExceptT GenesisCmdTextEnvReadFileError $ fromList @@ -1317,9 +1295,10 @@ readDelegateVrfKeys deldir = do | (file, ix) <- fileIxs ] where - readKey = - newExceptT - . readFileTextEnvelope (AsVerificationKey AsVrfKey) + readKey = newExceptT . readFileTextEnvelope + takeExtension' + | length (filter (== '.') keyExtension) <= 1 = takeExtension + | otherwise = takeExtensions -- | The file path is of the form @"delegate-keys/delegate3.vkey"@. -- This function reads the file and extracts the index (in this case 3). @@ -1358,7 +1337,7 @@ readInitialFundAddresses utxodir nw = do sequence [ newExceptT $ readFileTextEnvelope - (AsVerificationKey AsGenesisUTxOKey) + @(VerificationKey GenesisUTxOKey) (File (utxodir file)) | file <- files , takeExtension file == ".vkey" diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Governance/Actions/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/Governance/Actions/Run.hs index e2f02a22f1..2aa29e01d8 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Governance/Actions/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Governance/Actions/Run.hs @@ -261,7 +261,6 @@ runGovernanceActionUpdateCommitteeCmd oldCommitteeKeyHashes <- forM oldCommitteeVkeySource $ \vkeyOrHashOrTextFile -> fromExceptTCli $ readVerificationKeyOrHashOrFileOrScriptHash - AsCommitteeColdKey unCommitteeColdKeyHash vkeyOrHashOrTextFile @@ -269,7 +268,6 @@ runGovernanceActionUpdateCommitteeCmd kh <- fromExceptTCli $ readVerificationKeyOrHashOrFileOrScriptHash - AsCommitteeColdKey unCommitteeColdKeyHash vkeyOrHashOrTextFile pure (kh, expEpoch) @@ -324,7 +322,7 @@ runGovernanceActionCreateProtocolParametersUpdateCmd eraBasedPParams' = do genVKeys <- sequence [ fromEitherIOCli $ - readFileTextEnvelope (AsVerificationKey AsGenesisKey) vkeyFile + readFileTextEnvelope vkeyFile | vkeyFile <- genesisVerKeys ] diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Governance/Committee/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/Governance/Committee/Run.hs index 69587a1a58..525a7f4245 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Governance/Committee/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Governance/Committee/Run.hs @@ -146,10 +146,10 @@ runGovernanceCommitteeCreateHotKeyAuthorizationCertificate let mapError' = modifyError $ either GovernanceCommitteeCmdScriptReadError GovernanceCommitteeCmdKeyReadError hotCred <- mapError' $ - readVerificationKeySource AsCommitteeHotKey unCommitteeHotKeyHash vkeyHotKeySource + readVerificationKeySource unCommitteeHotKeyHash vkeyHotKeySource coldCred <- mapError' $ - readVerificationKeySource AsCommitteeColdKey unCommitteeColdKeyHash vkeyColdKeySource + readVerificationKeySource unCommitteeColdKeyHash vkeyColdKeySource makeCommitteeHotKeyAuthorizationCertificate (CommitteeHotKeyAuthorizationRequirements eon coldCred hotCred) @@ -175,7 +175,7 @@ runGovernanceCommitteeColdKeyResignationCertificate let modifyError' = modifyError $ either GovernanceCommitteeCmdScriptReadError GovernanceCommitteeCmdKeyReadError coldVKeyCred <- modifyError' $ - readVerificationKeySource AsCommitteeColdKey unCommitteeColdKeyHash vkeyColdKeySource + readVerificationKeySource unCommitteeColdKeyHash vkeyColdKeySource mapM_ (withExceptT GovernanceCommitteeHashCheckError . carryHashChecks) diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Governance/DRep/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/Governance/DRep/Run.hs index d518091484..0b11d7114d 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Governance/DRep/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Governance/DRep/Run.hs @@ -74,7 +74,7 @@ runGovernanceDRepKeyGenCmd { vkeyFile , skeyFile } = do - (vkey, skey) <- liftIO $ generateKeyPair AsDRepKey + (vkey, skey) <- generateKeyPair AsDRepKey newExceptT $ writeLazyByteStringFile skeyFile (textEnvelopeToJSON (Just Key.drepSkeyDesc) skey) newExceptT $ writeLazyByteStringFile vkeyFile (textEnvelopeToJSON (Just Key.drepVkeyDesc) vkey) return (vkey, skey) @@ -91,7 +91,7 @@ runGovernanceDRepIdCmd } = do drepVerKeyHash <- modifyError ReadFileError $ - readVerificationKeyOrHashOrTextEnvFile AsDRepKey vkeySource + readVerificationKeyOrHashOrTextEnvFile vkeySource content <- pure $ diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Governance/GenesisKeyDelegationCertificate/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/Governance/GenesisKeyDelegationCertificate/Run.hs index 90dc36923a..4113aa3909 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Governance/GenesisKeyDelegationCertificate/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Governance/GenesisKeyDelegationCertificate/Run.hs @@ -33,13 +33,13 @@ runGovernanceGenesisKeyDelegationCertificate oFp = do genesisVkHash <- modifyError GovernanceCmdKeyReadError $ - readVerificationKeyOrHashOrTextEnvFile AsGenesisKey genVkOrHashOrFp + readVerificationKeyOrHashOrTextEnvFile genVkOrHashOrFp genesisDelVkHash <- modifyError GovernanceCmdKeyReadError $ - readVerificationKeyOrHashOrTextEnvFile AsGenesisDelegateKey genDelVkOrHashOrFp + readVerificationKeyOrHashOrTextEnvFile genDelVkOrHashOrFp vrfVkHash <- modifyError GovernanceCmdKeyReadError $ - readVerificationKeyOrHashOrFile AsVrfKey vrfVkOrHashOrFp + readVerificationKeyOrHashOrFile vrfVkOrHashOrFp let req = GenesisKeyDelegationRequirements stb genesisVkHash genesisDelVkHash vrfVkHash genKeyDelegCert = makeGenesisKeyDelegationCertificate req diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Governance/Vote/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/Governance/Vote/Run.hs index 51ae09e64a..c0c6ab21f3 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Governance/Vote/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Governance/Vote/Run.hs @@ -80,16 +80,14 @@ runGovernanceVoteCreateCmd shelleyBasedEraConstraints sbe $ do voter <- firstExceptT GovernanceVoteCmdReadVerificationKeyError $ case votingStakeCredentialSource of - AnyDRepVerificationKeyOrHashOrFileOrScriptHash stake -> do - drepCred <- readVerificationKeyOrHashOrFileOrScriptHash AsDRepKey unDRepKeyHash stake - pure $ L.DRepVoter drepCred + AnyDRepVerificationKeyOrHashOrFileOrScriptHash stake -> + L.DRepVoter <$> readVerificationKeyOrHashOrFileOrScriptHash unDRepKeyHash stake AnyStakePoolVerificationKeyOrHashOrFile stake -> do StakePoolKeyHash h <- liftIO $ getHashFromStakePoolKeyHashSource stake pure $ L.StakePoolVoter h - AnyCommitteeHotVerificationKeyOrHashOrFileOrScriptHash stake -> do - hotCred <- readVerificationKeyOrHashOrFileOrScriptHash AsCommitteeHotKey unCommitteeHotKeyHash stake - pure $ L.CommitteeVoter hotCred + AnyCommitteeHotVerificationKeyOrHashOrFileOrScriptHash stake -> + L.CommitteeVoter <$> readVerificationKeyOrHashOrFileOrScriptHash unCommitteeHotKeyHash stake let votingProcedures = singletonVotingProcedures eon voter governanceActionId (unVotingProcedure voteProcedure) firstExceptT GovernanceVoteCmdWriteError . newExceptT $ diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Query/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/Query/Run.hs index 41009e80d0..ffbbebb7ff 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Query/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Query/Run.hs @@ -342,7 +342,7 @@ runQueryKesPeriodInfoCmd , Cmd.mOutFile } = do opCert <- - lift (readFileTextEnvelope AsOperationalCertificate nodeOpCertFp) + lift (readFileTextEnvelope nodeOpCertFp) & onLeft (left . QueryCmdOpCertCounterReadError) join $ @@ -1460,7 +1460,7 @@ runQueryLeadershipScheduleCmd vrkSkey <- modifyError QueryCmdTextEnvelopeReadError . hoistIOEither $ - readFileTextEnvelope (AsSigningKey AsVrfKey) vrkSkeyFp + readFileTextEnvelope vrkSkeyFp shelleyGenesis <- modifyError QueryCmdGenesisReadError $ @@ -1835,12 +1835,12 @@ runQueryCommitteeMembersState } = conwayEraOnwardsConstraints eon $ do let coldKeysFromVerKeyHashOrFile = modifyError QueryCmdCommitteeColdKeyError - . readVerificationKeyOrHashOrFileOrScriptHash AsCommitteeColdKey unCommitteeColdKeyHash + . readVerificationKeyOrHashOrFileOrScriptHash unCommitteeColdKeyHash coldKeys <- fromList <$> mapM coldKeysFromVerKeyHashOrFile coldCredKeys let hotKeysFromVerKeyHashOrFile = modifyError QueryCmdCommitteeHotKeyError - . readVerificationKeyOrHashOrFileOrScriptHash AsCommitteeHotKey unCommitteeHotKeyHash + . readVerificationKeyOrHashOrFileOrScriptHash unCommitteeHotKeyHash hotKeys <- fromList <$> mapM hotKeysFromVerKeyHashOrFile hotCredKeys committeeState <- diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs index d5f20f04b9..0f14b122a0 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs @@ -25,7 +25,7 @@ readProposalScriptWitness w (propFp, Nothing) = do conwayEraOnwardsConstraints w $ modifyError (fmap TextEnvelopeError) $ hoistIOEither $ - readFileTextEnvelope AsProposal propFp + readFileTextEnvelope propFp return (proposal, Nothing) readProposalScriptWitness w (propFp, Just certScriptReq) = do let sbe = convert w @@ -33,7 +33,7 @@ readProposalScriptWitness w (propFp, Just certScriptReq) = do conwayEraOnwardsConstraints w $ modifyError (fmap TextEnvelopeError) $ hoistIOEither $ - readFileTextEnvelope AsProposal propFp + readFileTextEnvelope propFp case certScriptReq of OnDiskSimpleScript scriptFp -> do let sFp = unFile scriptFp diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Read/Common.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Read/Common.hs index 97ab28be6e..b2c06457db 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Read/Common.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Read/Common.hs @@ -33,7 +33,7 @@ deserialisePlutusScript :: BS.ByteString -> Either PlutusScriptDecodeError AnyPlutusScript deserialisePlutusScript bs = do - te <- first PlutusScriptJsonDecodeError $ deserialiseFromJSON AsTextEnvelope bs + te <- first PlutusScriptJsonDecodeError $ deserialiseFromJSON bs case teType te of TextEnvelopeType s -> case s of sVer@"PlutusScriptV1" -> deserialiseAnyPlutusScriptVersion sVer PlutusScriptV1 te @@ -69,7 +69,7 @@ deserialiseSimpleScript :: BS.ByteString -> Either ScriptDecodeError (Script SimpleScript') deserialiseSimpleScript bs = - case deserialiseFromJSON AsTextEnvelope bs of + case deserialiseFromJSON bs of Left _ -> -- In addition to the TextEnvelope format, we also try to -- deserialize the JSON representation of SimpleScripts. diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs index 8a387840c5..d21712b51c 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs @@ -25,7 +25,7 @@ readVoteScriptWitness w (voteFp, Nothing) = do conwayEraOnwardsConstraints w $ modifyError (fmap TextEnvelopeError) $ hoistIOEither $ - readFileTextEnvelope AsVotingProcedures voteFp + readFileTextEnvelope voteFp return (votProceds, Nothing) readVoteScriptWitness w (voteFp, Just certScriptReq) = do let sbe = convert w @@ -33,7 +33,7 @@ readVoteScriptWitness w (voteFp, Just certScriptReq) = do conwayEraOnwardsConstraints w $ modifyError (fmap TextEnvelopeError) $ hoistIOEither $ - readFileTextEnvelope AsVotingProcedures voteFp + readFileTextEnvelope voteFp case certScriptReq of OnDiskSimpleScript scriptFp -> do let sFp = unFile scriptFp diff --git a/cardano-cli/src/Cardano/CLI/EraBased/StakeAddress/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/StakeAddress/Run.hs index b88460f733..1501809606 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/StakeAddress/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/StakeAddress/Run.hs @@ -162,7 +162,7 @@ runStakeAddressKeyHashCmd runStakeAddressKeyHashCmd stakeVerKeyOrFile mOutputFp = do vkey <- fromExceptTCli $ - readVerificationKeyOrFile AsStakeKey stakeVerKeyOrFile + readVerificationKeyOrFile stakeVerKeyOrFile let hexKeyHash = serialiseToRawBytesHex (verificationKeyHash vkey) diff --git a/cardano-cli/src/Cardano/CLI/EraBased/StakePool/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/StakePool/Run.hs index 123ef85e2a..8174bf155e 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/StakePool/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/StakePool/Run.hs @@ -81,22 +81,20 @@ runStakePoolRegistrationCertificateCmd -- VRF verification key vrfVerKey <- firstExceptT StakePoolCmdReadKeyFileError $ - readVerificationKeyOrFile AsVrfKey vrfVerificationKeyOrFile + readVerificationKeyOrFile vrfVerificationKeyOrFile let vrfKeyHash' = verificationKeyHash vrfVerKey -- Pool reward account rwdStakeVerKey <- firstExceptT StakePoolCmdReadKeyFileError $ - readVerificationKeyOrFile AsStakeKey rewardStakeVerificationKeyOrFile + readVerificationKeyOrFile rewardStakeVerificationKeyOrFile let stakeCred = StakeCredentialByKey (verificationKeyHash rwdStakeVerKey) rewardAccountAddr = makeStakeAddress network stakeCred -- Pool owner(s) sPoolOwnerVkeys <- mapM - ( firstExceptT StakePoolCmdReadKeyFileError - . readVerificationKeyOrFile AsStakeKey - ) + (firstExceptT StakePoolCmdReadKeyFileError . readVerificationKeyOrFile) ownerStakeVerificationKeyOrFiles let stakePoolOwners' = map verificationKeyHash sPoolOwnerVkeys diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Transaction/Run.hs b/cardano-cli/src/Cardano/CLI/EraBased/Transaction/Run.hs index 03359154c7..10f724592e 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Transaction/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Transaction/Run.hs @@ -86,7 +86,7 @@ import Cardano.CLI.Type.Error.TxValidationError import Cardano.CLI.Type.Output (renderScriptCostsWithScriptHashesMap) import Cardano.CLI.Type.TxFeature import Cardano.Ledger.Api (allInputsTxBodyF, bodyTxL) -import Cardano.Prelude (Proxy (Proxy), putLByteString) +import Cardano.Prelude (putLByteString) import Control.Monad import Data.Aeson ((.=)) @@ -190,7 +190,7 @@ runTransactionBuildCmd (,cswScriptWitness <$> mSwit) ( firstExceptT TxCmdReadTextViewFileError . newExceptT $ shelleyBasedEraConstraints eon $ - readFileTextEnvelope AsCertificate (File certFile) + readFileTextEnvelope (File certFile) ) | (CertificateFile certFile, mSwit) <- certFilesAndMaybeScriptWits ] @@ -493,7 +493,7 @@ runTransactionBuildEstimateCmd -- TODO change type [ fmap (,cswScriptWitness <$> mSwit) ( firstExceptT TxCmdReadTextViewFileError . newExceptT $ - readFileTextEnvelope AsCertificate (File certFile) + readFileTextEnvelope (File certFile) ) | (CertificateFile certFile, mSwit) <- certFilesAndMaybeScriptWits ] @@ -737,7 +737,7 @@ runTransactionBuildRawCmd [ fmap (,cswScriptWitness <$> mSwit) ( firstExceptT TxCmdReadTextViewFileError . newExceptT $ - readFileTextEnvelope AsCertificate (File certFile) + readFileTextEnvelope (File certFile) ) | (CertificateFile certFile, mSwit) <- certFilesAndMaybeScriptWits ] @@ -937,7 +937,9 @@ constructTxBodyContent readOnlyRefIns validatedCollateralTxIns <- validateTxInsCollateral sbe txinsc - validatedRefInputs <- validateTxInsReference sbe allReferenceInputs + -- TODO The last argument of validateTxInsReference is a datum set from reference inputs + -- Should we allow providing of datum from CLI? + validatedRefInputs <- validateTxInsReference sbe allReferenceInputs mempty validatedTotCollateral <- first TxCmdNotSupportedInEraValidationError $ validateTxTotalCollateral sbe mTotCollateral validatedRetCol <- @@ -1207,12 +1209,14 @@ validateTxInsCollateral era txins = do & maybe (txFeatureMismatch era TxFeatureCollateral) Right validateTxInsReference - :: ShelleyBasedEra era + :: Applicative (BuildTxWith build) + => ShelleyBasedEra era -> [TxIn] - -> Either TxCmdError (TxInsReference era) -validateTxInsReference _ [] = return TxInsReferenceNone -validateTxInsReference sbe allRefIns = do - forShelleyBasedEraInEonMaybe sbe (\supported -> TxInsReference supported allRefIns) + -> Set HashableScriptData + -> Either TxCmdError (TxInsReference build era) +validateTxInsReference _ [] _ = return TxInsReferenceNone +validateTxInsReference sbe allRefIns datumSet = do + forShelleyBasedEraInEonMaybe sbe (\supported -> TxInsReference supported allRefIns (pure datumSet)) & maybe (txFeatureMismatch sbe TxFeatureReferenceInputs) Right getAllReferenceInputs @@ -1729,7 +1733,7 @@ buildTransactionContext sbe systemStartOrGenesisFileSource mustUnsafeExtendSafeZ EraHistory interpreter <- onLeft (left . TxCmdTextEnvError) $ liftIO $ - readFileTextEnvelope (proxyToAsType Proxy) eraHistoryFile + readFileTextEnvelope eraHistoryFile systemStart <- case systemStartOrGenesisFileSource of SystemStartLiteral systemStart -> return systemStart SystemStartFromGenesisFile (GenesisFile byronGenesisFile) -> do diff --git a/cardano-cli/src/Cardano/CLI/EraIndependent/Address/Run.hs b/cardano-cli/src/Cardano/CLI/EraIndependent/Address/Run.hs index dce4f73e9f..63a793c077 100644 --- a/cardano-cli/src/Cardano/CLI/EraIndependent/Address/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraIndependent/Address/Run.hs @@ -69,15 +69,14 @@ runAddressKeyGenCmd fmt kt vkf skf = case kt of AddressKeyByron -> generateAndWriteByronKeyFiles AsByronKey vkf skf generateAndWriteByronKeyFiles - :: () - => Key keyrole + :: Key keyrole => HasTypeProxy keyrole => AsType keyrole -> VerificationKeyFile Out -> SigningKeyFile Out -> ExceptT AddressCmdError IO () -generateAndWriteByronKeyFiles asType vkf skf = do - uncurry (writeByronPaymentKeyFiles vkf skf) =<< liftIO (generateKeyPair asType) +generateAndWriteByronKeyFiles asType' vkf skf = do + uncurry (writeByronPaymentKeyFiles vkf skf) =<< generateKeyPair asType' generateAndWriteKeyFiles :: () @@ -90,8 +89,8 @@ generateAndWriteKeyFiles -> VerificationKeyFile Out -> SigningKeyFile Out -> ExceptT AddressCmdError IO (VerificationKey keyrole, SigningKey keyrole) -generateAndWriteKeyFiles fmt asType vkf skf = do - (vk, sk) <- liftIO (generateKeyPair asType) +generateAndWriteKeyFiles fmt asType' vkf skf = do + (vk, sk) <- generateKeyPair asType' writePaymentKeyFiles fmt vkf skf vk sk return (vk, sk) @@ -230,7 +229,7 @@ makeStakeAddressRef stakeIdentifier = StakeVerifierKey stkVkeyOrFile -> do stakeVKeyHash <- modifyError AddressCmdReadKeyFileError $ - readVerificationKeyOrHashOrFile AsStakeKey stkVkeyOrFile + readVerificationKeyOrHashOrFile stkVkeyOrFile return . StakeAddressByValue $ StakeCredentialByKey stakeVKeyHash StakeVerifierScriptFile (File fp) -> do ScriptInAnyLang _lang script <- diff --git a/cardano-cli/src/Cardano/CLI/EraIndependent/Node/Option.hs b/cardano-cli/src/Cardano/CLI/EraIndependent/Node/Option.hs index 6163ea1c01..8f06015ac8 100644 --- a/cardano-cli/src/Cardano/CLI/EraIndependent/Node/Option.hs +++ b/cardano-cli/src/Cardano/CLI/EraIndependent/Node/Option.hs @@ -8,8 +8,6 @@ module Cardano.CLI.EraIndependent.Node.Option ) where -import Cardano.Api hiding (QueryInShelleyBasedEra (..)) - import Cardano.CLI.EraBased.Common.Option import Cardano.CLI.EraIndependent.Node.Command import Cardano.CLI.EraIndependent.Node.Command qualified as Cmd @@ -106,7 +104,7 @@ pKeyHashVRF :: Parser NodeCmds pKeyHashVRF = fmap Cmd.NodeKeyHashVRFCmd $ Cmd.NodeKeyHashVRFCmdArgs - <$> pVerificationKeyOrFileIn AsVrfKey + <$> pVerificationKeyOrFileIn <*> pMaybeOutputFile pNewCounter :: Parser NodeCmds diff --git a/cardano-cli/src/Cardano/CLI/EraIndependent/Node/Run.hs b/cardano-cli/src/Cardano/CLI/EraIndependent/Node/Run.hs index 0a19eac3f7..204196da68 100644 --- a/cardano-cli/src/Cardano/CLI/EraIndependent/Node/Run.hs +++ b/cardano-cli/src/Cardano/CLI/EraIndependent/Node/Run.hs @@ -244,7 +244,7 @@ runNodeKeyHashVrfCmd } = do vkey <- firstExceptT NodeCmdReadKeyFileError $ - readVerificationKeyOrFile AsVrfKey vkeySource + readVerificationKeyOrFile vkeySource let hexKeyHash = serialiseToRawBytesHex (verificationKeyHash vkey) @@ -294,11 +294,11 @@ runNodeIssueOpCertCmd ocertIssueCounter <- firstExceptT NodeCmdReadFileError . newExceptT - $ readFileTextEnvelope AsOperationalCertificateIssueCounter (onlyIn operationalCertificateCounterFile) + $ readFileTextEnvelope (onlyIn operationalCertificateCounterFile) verKeyKes <- firstExceptT NodeCmdReadKeyFileError $ - readVerificationKeyOrFile AsKesKey kesVkeySource + readVerificationKeyOrFile kesVkeySource signKey <- firstExceptT NodeCmdReadKeyFileError diff --git a/cardano-cli/src/Cardano/CLI/Json/Friendly.hs b/cardano-cli/src/Cardano/CLI/Json/Friendly.hs index bcb4b15101..cfffc533ce 100644 --- a/cardano-cli/src/Cardano/CLI/Json/Friendly.hs +++ b/cardano-cli/src/Cardano/CLI/Json/Friendly.hs @@ -901,9 +901,9 @@ friendlyAuxScripts = \case TxAuxScriptsNone -> Null TxAuxScripts _ scripts -> String $ textShow scripts -friendlyReferenceInputs :: TxInsReference era -> Aeson.Value +friendlyReferenceInputs :: TxInsReference era build -> Aeson.Value friendlyReferenceInputs TxInsReferenceNone = Null -friendlyReferenceInputs (TxInsReference _ txins) = toJSON txins +friendlyReferenceInputs (TxInsReference _ txins _) = toJSON txins friendlyInputs :: [(TxIn, build)] -> Aeson.Value friendlyInputs = toJSON . map fst diff --git a/cardano-cli/src/Cardano/CLI/Legacy/Governance/Run.hs b/cardano-cli/src/Cardano/CLI/Legacy/Governance/Run.hs index e648cd23bc..a59fa91670 100644 --- a/cardano-cli/src/Cardano/CLI/Legacy/Governance/Run.hs +++ b/cardano-cli/src/Cardano/CLI/Legacy/Governance/Run.hs @@ -99,7 +99,7 @@ runLegacyGovernanceUpdateProposal upFile eNo genVerKeyFiles upPprams mCostModelF genVKeys <- sequence [ firstExceptT GovernanceCmdTextEnvReadError . newExceptT $ - readFileTextEnvelope (AsVerificationKey AsGenesisKey) vkeyFile + readFileTextEnvelope vkeyFile | vkeyFile <- genVerKeyFiles ] let genKeyHashes = fmap verificationKeyHash genVKeys diff --git a/cardano-cli/src/Cardano/CLI/Read.hs b/cardano-cli/src/Cardano/CLI/Read.hs index 95db7f4803..ffcc84b11c 100644 --- a/cardano-cli/src/Cardano/CLI/Read.hs +++ b/cardano-cli/src/Cardano/CLI/Read.hs @@ -282,11 +282,10 @@ renderScriptWitnessError = \case readVerificationKeyOrHashOrFileOrScript :: MonadIOTransError (Either (FileError ScriptDecodeError) (FileError InputDecodeError)) t m => Key keyrole - => AsType keyrole - -> (Hash keyrole -> L.KeyHash kr) + => (Hash keyrole -> L.KeyHash kr) -> VerificationKeyOrHashOrFileOrScript keyrole -> t m (L.Credential kr) -readVerificationKeyOrHashOrFileOrScript asType extractHash = \case +readVerificationKeyOrHashOrFileOrScript extractHash = \case VkhfsScript (File fp) -> do ScriptInAnyLang _lang script <- modifyError Left $ @@ -294,16 +293,15 @@ readVerificationKeyOrHashOrFileOrScript asType extractHash = \case pure . L.ScriptHashObj . toShelleyScriptHash $ hashScript script VkhfsKeyHashFile vkOrHashOrFp -> fmap (L.KeyHashObj . extractHash) . modifyError Right $ - readVerificationKeyOrHashOrTextEnvFile asType vkOrHashOrFp + readVerificationKeyOrHashOrTextEnvFile vkOrHashOrFp readVerificationKeySource :: MonadIOTransError (Either (FileError ScriptDecodeError) (FileError InputDecodeError)) t m => Key keyrole - => AsType keyrole - -> (Hash keyrole -> L.KeyHash kr) + => (Hash keyrole -> L.KeyHash kr) -> VerificationKeySource keyrole -> t m (L.Credential kr) -readVerificationKeySource asType extractHash = \case +readVerificationKeySource extractHash = \case VksScriptHash (ScriptHash scriptHash) -> pure $ L.ScriptHashObj scriptHash VksScript (File fp) -> do @@ -313,7 +311,7 @@ readVerificationKeySource asType extractHash = \case pure . L.ScriptHashObj . toShelleyScriptHash $ hashScript script VksKeyHashFile vKeyOrHashOrFile -> fmap (L.KeyHashObj . extractHash) . modifyError Right $ - readVerificationKeyOrHashOrTextEnvFile asType vKeyOrHashOrFile + readVerificationKeyOrHashOrTextEnvFile vKeyOrHashOrFile -- | Read a script file. The file can either be in the text envelope format -- wrapping the binary representation of any of the supported script languages, @@ -336,7 +334,7 @@ deserialiseScriptInAnyLang bs = -- Accept either the text envelope format wrapping the binary serialisation, -- or accept the simple script language in its JSON format. -- - case deserialiseFromJSON AsTextEnvelope bs of + case deserialiseFromJSON bs of Left _ -> -- In addition to the TextEnvelope format, we also try to -- deserialize the JSON representation of SimpleScripts. @@ -724,7 +722,7 @@ readTxUpdateProposal -> UpdateProposalFile -> ExceptT (FileError TextEnvelopeError) IO (TxUpdateProposal era) readTxUpdateProposal w (UpdateProposalFile upFp) = do - TxUpdateProposal w <$> newExceptT (readFileTextEnvelope AsUpdateProposal (File upFp)) + TxUpdateProposal w <$> newExceptT (readFileTextEnvelope (File upFp)) data ConstitutionError = ConstitutionErrorFile (FileError TextEnvelopeError) @@ -948,7 +946,7 @@ getStakeCredentialFromVerifier = \case stakeVerKeyHash <- fromExceptTCli $ modifyError StakeCredentialInputDecodeError $ - readVerificationKeyOrHashOrFile AsStakeKey stakeVerKeyOrFile + readVerificationKeyOrHashOrFile stakeVerKeyOrFile pure $ StakeCredentialByKey stakeVerKeyHash getStakeCredentialFromIdentifier @@ -974,7 +972,7 @@ getDRepCredentialFromVerKeyHashOrFile -> t m (L.Credential L.DRepRole) getDRepCredentialFromVerKeyHashOrFile = \case VerificationKeyOrFile verKeyOrFile -> do - drepVerKey <- readVerificationKeyOrFile AsDRepKey verKeyOrFile + drepVerKey <- readVerificationKeyOrFile verKeyOrFile pure . L.KeyHashObj . unDRepKeyHash $ verificationKeyHash drepVerKey VerificationKeyHash kh -> pure . L.KeyHashObj $ unDRepKeyHash kh diff --git a/cardano-cli/src/Cardano/CLI/Type/Key.hs b/cardano-cli/src/Cardano/CLI/Type/Key.hs index 80ef1271ef..a0a79b76c7 100644 --- a/cardano-cli/src/Cardano/CLI/Type/Key.hs +++ b/cardano-cli/src/Cardano/CLI/Type/Key.hs @@ -88,16 +88,14 @@ readVerificationKeyOrFile :: MonadIOTransError (FileError InputDecodeError) t m => HasTextEnvelope (VerificationKey keyrole) => SerialiseAsBech32 (VerificationKey keyrole) - => AsType keyrole - -> VerificationKeyOrFile keyrole + => VerificationKeyOrFile keyrole -> t m (VerificationKey keyrole) -readVerificationKeyOrFile asType verKeyOrFile = +readVerificationKeyOrFile verKeyOrFile = case verKeyOrFile of VerificationKeyValue vk -> pure vk VerificationKeyFilePath (File fp) -> hoistIOEither $ readKeyFile - (AsVerificationKey asType) (fromList [InputFormatBech32, InputFormatHex, InputFormatTextEnvelope]) fp @@ -109,13 +107,12 @@ readVerificationKeyOrFile asType verKeyOrFile = readVerificationKeyOrTextEnvFile :: MonadIOTransError (FileError InputDecodeError) t m => HasTextEnvelope (VerificationKey keyrole) - => AsType keyrole - -> VerificationKeyOrFile keyrole + => VerificationKeyOrFile keyrole -> t m (VerificationKey keyrole) -readVerificationKeyOrTextEnvFile asType verKeyOrFile = +readVerificationKeyOrTextEnvFile verKeyOrFile = case verKeyOrFile of VerificationKeyValue vk -> pure vk - VerificationKeyFilePath fp -> hoistIOEither $ readKeyFileTextEnvelope (AsVerificationKey asType) fp + VerificationKeyFilePath fp -> hoistIOEither $ readKeyFileTextEnvelope fp data PaymentVerifier = PaymentVerifierKey VerificationKeyTextOrFile @@ -268,13 +265,12 @@ readVerificationKeyOrHashOrFile :: MonadIOTransError (FileError InputDecodeError) t m => Key keyrole => SerialiseAsBech32 (VerificationKey keyrole) - => AsType keyrole - -> VerificationKeyOrHashOrFile keyrole + => VerificationKeyOrHashOrFile keyrole -> t m (Hash keyrole) -readVerificationKeyOrHashOrFile asType = +readVerificationKeyOrHashOrFile = \case VerificationKeyOrFile vkOrFile -> - verificationKeyHash <$> readVerificationKeyOrFile asType vkOrFile + verificationKeyHash <$> readVerificationKeyOrFile vkOrFile VerificationKeyHash vkHash -> pure vkHash -- | Read a verification key or verification key hash or verification key file @@ -285,23 +281,23 @@ readVerificationKeyOrHashOrFile asType = readVerificationKeyOrHashOrTextEnvFile :: MonadIOTransError (FileError InputDecodeError) t m => Key keyrole - => AsType keyrole - -> VerificationKeyOrHashOrFile keyrole + => VerificationKeyOrHashOrFile keyrole -> t m (Hash keyrole) -readVerificationKeyOrHashOrTextEnvFile asType = +readVerificationKeyOrHashOrTextEnvFile = \case VerificationKeyOrFile vkOrFile -> - verificationKeyHash <$> readVerificationKeyOrTextEnvFile asType vkOrFile + verificationKeyHash <$> readVerificationKeyOrTextEnvFile vkOrFile VerificationKeyHash vkHash -> pure vkHash generateKeyPair - :: MonadIO m + :: forall keyrole m + . MonadIO m => Key keyrole => HasTypeProxy keyrole => AsType keyrole -> m (VerificationKey keyrole, SigningKey keyrole) -generateKeyPair asType = do - skey <- generateSigningKey asType +generateKeyPair asType' = do + skey <- generateSigningKey asType' return (getVerificationKey skey, skey) -- | Either a stake pool verification key, genesis delegate verification key, @@ -333,7 +329,7 @@ readDRepCredential = \case pure (L.ScriptHashObj scriptHash) DRepHashSourceVerificationKey drepVKeyOrHashOrFile -> L.KeyHashObj . unDRepKeyHash - <$> readVerificationKeyOrHashOrTextEnvFile AsDRepKey drepVKeyOrHashOrFile + <$> readVerificationKeyOrHashOrTextEnvFile drepVKeyOrHashOrFile newtype SPOHashSource = SPOHashSourceVerificationKey @@ -346,7 +342,7 @@ readSPOCredential -> t m (L.KeyHash L.StakePool) readSPOCredential = \case SPOHashSourceVerificationKey spoVKeyOrHashOrFile -> - unStakePoolKeyHash <$> readVerificationKeyOrHashOrTextEnvFile AsStakePoolKey spoVKeyOrHashOrFile + unStakePoolKeyHash <$> readVerificationKeyOrHashOrTextEnvFile spoVKeyOrHashOrFile data VerificationKeyOrHashOrFileOrScript keyrole = VkhfsKeyHashFile !(VerificationKeyOrHashOrFile keyrole) @@ -388,16 +384,15 @@ deriving instance readVerificationKeyOrHashOrFileOrScriptHash :: MonadIOTransError (FileError InputDecodeError) t m => Key keyrole - => AsType keyrole - -> (Hash keyrole -> L.KeyHash kr) + => (Hash keyrole -> L.KeyHash kr) -> VerificationKeyOrHashOrFileOrScriptHash keyrole -> t m (L.Credential kr) -readVerificationKeyOrHashOrFileOrScriptHash asType extractHash = \case +readVerificationKeyOrHashOrFileOrScriptHash extractHash = \case VkhfshScriptHash (ScriptHash scriptHash) -> pure (L.ScriptHashObj scriptHash) VkhfshKeyHashFile vKeyOrHashOrFile -> L.KeyHashObj . extractHash - <$> readVerificationKeyOrHashOrTextEnvFile asType vKeyOrHashOrFile + <$> readVerificationKeyOrHashOrTextEnvFile vKeyOrHashOrFile data SomeSigningKey = AByronSigningKey (SigningKey ByronKey) diff --git a/cardano-cli/test/cardano-cli-golden/Test/Golden/Shelley/StakePool/RegistrationCertificate.hs b/cardano-cli/test/cardano-cli-golden/Test/Golden/Shelley/StakePool/RegistrationCertificate.hs index 07c0d3b742..9603667a46 100644 --- a/cardano-cli/test/cardano-cli-golden/Test/Golden/Shelley/StakePool/RegistrationCertificate.hs +++ b/cardano-cli/test/cardano-cli-golden/Test/Golden/Shelley/StakePool/RegistrationCertificate.hs @@ -1,14 +1,16 @@ {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TypeApplications #-} module Test.Golden.Shelley.StakePool.RegistrationCertificate where import Cardano.Api - ( AsType (AsStakePoolExtendedKey, AsVerificationKey) - , File (File) + ( File (File) + , VerificationKey , liftIO , readFileTextEnvelope , serialiseToBech32 ) +import Cardano.Api.Shelley (StakePoolExtendedKey) import Control.Monad (void) import Data.Text qualified as Text @@ -113,7 +115,7 @@ hprop_golden_conway_stake_pool_registration_certificate_extended_literal_cold_ke stakePoolExtendedKey <- H.evalEitherM $ liftIO $ - readFileTextEnvelope (AsVerificationKey AsStakePoolExtendedKey) (File operatorVerificationKeyFile) + readFileTextEnvelope @(VerificationKey StakePoolExtendedKey) (File operatorVerificationKeyFile) void $ execCardanoCLI