From fa7044c7777795ffe53d0f49f3590645505c5976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Hurlin?= Date: Mon, 13 May 2024 10:50:45 +0200 Subject: [PATCH 1/2] query protocol parameters: use ledger JSON encoding, not API one --- cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs b/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs index 4a744e1821..2722963161 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Run/Query.hs @@ -177,7 +177,6 @@ runQueryProtocolParametersCmd . newExceptT $ executeQueryAnyMode localNodeConnInfo qInMode writeProtocolParameters sbe mOutFile pp where - -- TODO: Conway era - use ledger PParams JSON writeProtocolParameters :: ShelleyBasedEra era -> Maybe (File () Out) @@ -185,7 +184,9 @@ runQueryProtocolParametersCmd -> ExceptT QueryCmdError IO () writeProtocolParameters sbe mOutFile' pparams = firstExceptT QueryCmdWriteFileError . newExceptT - $ writeLazyByteStringOutput mOutFile' $ encodePretty $ fromLedgerPParams sbe pparams + $ writeLazyByteStringOutput mOutFile' + $ shelleyBasedEraConstraints sbe + $ encodePretty pparams -- | Calculate the percentage sync rendered as text. percentage From 87134c3fdcc0631a2928c7e0805fad47fd313a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Hurlin?= Date: Wed, 15 May 2024 18:10:54 +0200 Subject: [PATCH 2/2] readProtocolParameters: return Ledger PParams instead of API ones --- cardano-cli/cardano-cli.cabal | 1 + .../src/Cardano/CLI/EraBased/Run/Genesis.hs | 10 +++-- .../Cardano/CLI/EraBased/Run/Transaction.hs | 43 ++++++------------- 3 files changed, 20 insertions(+), 34 deletions(-) diff --git a/cardano-cli/cardano-cli.cabal b/cardano-cli/cardano-cli.cabal index 487dd75fd4..8a6c6cb32c 100644 --- a/cardano-cli/cardano-cli.cabal +++ b/cardano-cli/cardano-cli.cabal @@ -203,6 +203,7 @@ library , cardano-crypto-wrapper ^>= 1.5.1 , cardano-data >= 1.1 , cardano-git-rev ^>= 0.2.2 + , cardano-ledger-api , cardano-ledger-byron >= 1.0.1.0 , cardano-ping ^>= 0.2.0.13 , cardano-prelude diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Run/Genesis.hs b/cardano-cli/src/Cardano/CLI/EraBased/Run/Genesis.hs index 379a82f661..b367cd00cc 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Run/Genesis.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Run/Genesis.hs @@ -1176,9 +1176,11 @@ readConwayGenesis fpath = do --TODO: eliminate this and get only the necessary params, and get them in a more -- helpful way rather than requiring them as a local file. -readProtocolParameters :: ProtocolParamsFile - -> ExceptT ProtocolParamsError IO ProtocolParameters -readProtocolParameters (ProtocolParamsFile fpath) = do +readProtocolParameters :: () + => ShelleyBasedEra era + -> ProtocolParamsFile + -> ExceptT ProtocolParamsError IO (L.PParams (ShelleyLedgerEra era)) +readProtocolParameters sbe (ProtocolParamsFile fpath) = do pparams <- handleIOExceptT (ProtocolParamsErrorFile . FileIOError fpath) $ LBS.readFile fpath firstExceptT (ProtocolParamsErrorJSON fpath . Text.pack) . hoistEither $ - Aeson.eitherDecode' pparams + shelleyBasedEraConstraints sbe $ Aeson.eitherDecode' pparams diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs b/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs index fc6da2b3f4..2d55cd2bd6 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs @@ -52,6 +52,7 @@ import Cardano.CLI.Types.Errors.TxCmdError import Cardano.CLI.Types.Errors.TxValidationError import Cardano.CLI.Types.Output (renderScriptCosts) import Cardano.CLI.Types.TxFeature +import qualified Cardano.Ledger.Api.PParams as L import qualified Ouroboros.Network.Protocol.LocalStateQuery.Type as Consensus import qualified Ouroboros.Network.Protocol.LocalTxSubmission.Client as Net.Tx @@ -283,9 +284,7 @@ runTransactionBuildEstimateCmd , txBodyOutFile } = do let sbe = maryEraOnwardsToShelleyBasedEra eon - legacyPParams <- firstExceptT TxCmdProtocolParamsError $ readProtocolParameters protocolParamsFile - ledgerPParams <- hoistEither . first TxCmdProtocolParamsConverstionError - $ convertToLedgerProtocolParameters sbe legacyPParams + ledgerPParams <- firstExceptT TxCmdProtocolParamsError $ readProtocolParameters sbe protocolParamsFile inputsAndMaybeScriptWits <- firstExceptT TxCmdScriptWitnessError $ readScriptWitnessFiles sbe txins certFilesAndMaybeScriptWits <- firstExceptT TxCmdScriptWitnessError @@ -336,7 +335,7 @@ runTransactionBuildEstimateCmd txBodyContent <- hoistEither $ constructTxBodyContent sbe mScriptValidity - (Just $ unLedgerProtocolParameters ledgerPParams) + (Just ledgerPParams) inputsAndMaybeScriptWits readOnlyRefIns filteredTxinsc @@ -365,7 +364,7 @@ runTransactionBuildEstimateCmd BalancedTxBody _ balancedTxBody _ _ <- hoistEither $ first TxCmdFeeEstimationError $ - estimateBalancedTxBody eon txBodyContent (unLedgerProtocolParameters ledgerPParams) poolsToDeregister + estimateBalancedTxBody eon txBodyContent ledgerPParams poolsToDeregister stakeCredentialsToDeregisterMap drepsToDeregisterMap pScriptExecUnits totCol shelleyWitnesses (fromMaybe 0 mByronWitnesses) (maybe 0 unReferenceScriptSize totalReferenceScriptSize) (anyAddressInShelleyBasedEra sbe changeAddr) @@ -503,15 +502,10 @@ runTransactionBuildRawCmd mapM (readFileScriptInAnyLang . unFile) scriptFiles txAuxScripts <- hoistEither $ first TxCmdAuxScriptsValidationError $ validateTxAuxScripts eon scripts - -- TODO: Conway era - update readProtocolParameters to rely on L.PParams JSON instances pparams <- forM mProtocolParamsFile $ \ppf -> - firstExceptT TxCmdProtocolParamsError (readProtocolParameters ppf) + firstExceptT TxCmdProtocolParamsError (readProtocolParameters eon ppf) - mLedgerPParams <- case pparams of - Nothing -> return Nothing - Just pp -> do - ledgerpp <- firstExceptT TxCmdProtocolParamsConverstionError . hoistEither $ convertToLedgerProtocolParameters eon pp - return $ Just ledgerpp + let mLedgerPParams = LedgerProtocolParameters <$> pparams txUpdateProposal <- case mUpdateProprosalFile of Just (Featured w (Just updateProposalFile)) -> @@ -1239,32 +1233,23 @@ runTransactionCalculateMinFeeCmd unwitnessed <- firstExceptT TxCmdTextEnvCddlError . newExceptT $ readFileTxBody txbodyFile - pparams <- - firstExceptT TxCmdProtocolParamsError - $ readProtocolParameters protocolParamsFile let nShelleyKeyWitW32 = fromIntegral nShelleyKeyWitnesses InAnyShelleyBasedEra sbe txbody <- pure $ unIncompleteCddlTxBody unwitnessed - lpparams <- getLedgerPParams sbe pparams + lpparams <- + firstExceptT TxCmdProtocolParamsError + $ readProtocolParameters sbe protocolParamsFile let shelleyfee = evaluateTransactionFee sbe lpparams txbody nShelleyKeyWitW32 0 sReferenceScript - let byronfee = calculateByronWitnessFees (protocolParamTxFeePerByte pparams) nByronKeyWitnesses + let byronfee = shelleyBasedEraConstraints sbe $ calculateByronWitnessFees (lpparams ^. L.ppMinFeeAL) nByronKeyWitnesses let L.Coin fee = shelleyfee + byronfee liftIO $ putStrLn $ (show fee :: String) <> " Lovelace" -getLedgerPParams :: forall era. () - => ShelleyBasedEra era - -> ProtocolParameters - -> ExceptT TxCmdError IO (L.PParams (ShelleyLedgerEra era)) -getLedgerPParams sbe pparams = - firstExceptT TxCmdProtocolParamsConverstionError $ - hoistEither $ toLedgerPParams sbe pparams - -- Extra logic to handle byron witnesses. -- TODO: move this to Cardano.API.Fee.evaluateTransactionFee. calculateByronWitnessFees :: () @@ -1317,14 +1302,12 @@ runTransactionCalculateMinValueCmd , protocolParamsFile , txOut } = do - pp <- firstExceptT TxCmdProtocolParamsError (readProtocolParameters protocolParamsFile) + pp <- firstExceptT TxCmdProtocolParamsError (readProtocolParameters eon protocolParamsFile) out <- toTxOutInShelleyBasedEra eon txOut - -- TODO: shouldn't we just require shelley based era here instead of error-ing for byron? firstExceptT TxCmdPParamsErr . hoistEither - $ checkProtocolParameters eon pp - pp' <- hoistEither . first TxCmdProtocolParamsConverstionError $ toLedgerPParams eon pp - let minValue = calculateMinimumUTxO eon out pp' + $ checkProtocolParameters eon (fromLedgerPParams eon pp) + let minValue = calculateMinimumUTxO eon out pp liftIO . IO.print $ minValue runTransactionPolicyIdCmd :: ()