From e512b3a69fe4a74f49b9394d52d24824c05415c3 Mon Sep 17 00:00:00 2001 From: Daniel Firth Date: Fri, 11 Jul 2025 06:43:00 +0000 Subject: [PATCH] Add toLedgerValidityInterval and fromLedgerValidityInterval --- .../src/Cardano/Api/Tx/Internal/Body.hs | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/cardano-api/src/Cardano/Api/Tx/Internal/Body.hs b/cardano-api/src/Cardano/Api/Tx/Internal/Body.hs index 0b38b17a92..9ff274c1e6 100644 --- a/cardano-api/src/Cardano/Api/Tx/Internal/Body.hs +++ b/cardano-api/src/Cardano/Api/Tx/Internal/Body.hs @@ -207,6 +207,8 @@ module Cardano.Api.Tx.Internal.Body , fromByronTxIn , fromLedgerTxOuts , renderTxIn + , toLedgerValidityInterval + , fromLedgerValidityInterval -- ** Misc helpers , calculateExecutionUnitsLovelace @@ -276,7 +278,7 @@ import Cardano.Ledger.Alonzo.Tx qualified as Alonzo (hashScriptIntegrity) import Cardano.Ledger.Alonzo.TxWits qualified as Alonzo import Cardano.Ledger.Api qualified as L import Cardano.Ledger.Babbage.UTxO qualified as L -import Cardano.Ledger.BaseTypes (StrictMaybe (..)) +import Cardano.Ledger.BaseTypes (StrictMaybe (..), maybeToStrictMaybe) import Cardano.Ledger.Binary (Annotated (..)) import Cardano.Ledger.Binary qualified as CBOR import Cardano.Ledger.Coin qualified as L @@ -3129,3 +3131,31 @@ getReferenceInputsSizeForTxIds beo utxo txIds = babbageEraOnwardsConstraints beo calculateExecutionUnitsLovelace :: Ledger.Prices -> ExecutionUnits -> Maybe L.Coin calculateExecutionUnitsLovelace prices eUnits = return $ Alonzo.txscriptfee prices (toAlonzoExUnits eUnits) + +toLedgerValidityInterval + :: (TxValidityLowerBound era, TxValidityUpperBound era) + -> L.ValidityInterval +toLedgerValidityInterval (lowerBound, upperBound) = + L.ValidityInterval + { L.invalidBefore = + case lowerBound of + TxValidityNoLowerBound -> SNothing + TxValidityLowerBound _ s -> SJust s + , L.invalidHereafter = + case upperBound of + TxValidityUpperBound _ s -> maybeToStrictMaybe s + } + +fromLedgerValidityInterval + :: AllegraEraOnwards era + -> L.ValidityInterval + -> (TxValidityLowerBound era, TxValidityUpperBound era) +fromLedgerValidityInterval aeo validityInterval = + let L.ValidityInterval{L.invalidBefore = invalidBefore, L.invalidHereafter = invalidHereAfter} = validityInterval + lowerBound = case invalidBefore of + SNothing -> TxValidityNoLowerBound + SJust s -> TxValidityLowerBound aeo s + upperBound = case invalidHereAfter of + SNothing -> TxValidityUpperBound (convert aeo) Nothing + SJust s -> TxValidityUpperBound (convert aeo) (Just s) + in (lowerBound, upperBound)