Skip to content

Commit bde8f65

Browse files
authored
Merge pull request #5125 from IntersectMBO/aniketd/better-upgrade-txout
Faster upgradeTxOut for alonzo, babbage and conway
2 parents e425345 + 10be690 commit bde8f65

File tree

5 files changed

+41
-16
lines changed

5 files changed

+41
-16
lines changed

eras/alonzo/impl/src/Cardano/Ledger/Alonzo/TxOut.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ instance EraTxOut AlonzoEra where
340340

341341
mkBasicTxOut addr vl = AlonzoTxOut addr vl SNothing
342342

343-
upgradeTxOut (Shelley.TxOutCompact addr value) = TxOutCompact addr value
343+
upgradeTxOut (Shelley.TxOutCompact addr value) = TxOutCompact' addr value
344344

345345
addrEitherTxOutL =
346346
lens

eras/babbage/impl/src/Cardano/Ledger/Babbage/TxOut.hs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,13 @@ module Cardano.Ledger.Babbage.TxOut (
2020
BabbageTxOut (
2121
BabbageTxOut,
2222
TxOutCompact,
23+
TxOutCompact',
2324
TxOutCompactDH,
25+
TxOutCompactDH',
2426
TxOutCompactDatum,
25-
TxOutCompactRefScript
27+
TxOutCompactRefScript,
28+
TxOut_AddrHash28_AdaOnly,
29+
TxOut_AddrHash28_AdaOnly_DataHash32
2630
),
2731
BabbageEraTxOut (..),
2832
TxOut,
@@ -48,10 +52,10 @@ import Cardano.Ledger.Address (
4852
decompactAddr,
4953
fromCborBothAddr,
5054
)
55+
import Cardano.Ledger.Alonzo (AlonzoEra)
5156
import Cardano.Ledger.Alonzo.Core
5257
import Cardano.Ledger.Alonzo.TxBody (
5358
Addr28Extra,
54-
AlonzoTxOut (AlonzoTxOut),
5559
DataHash32,
5660
decodeAddress28,
5761
decodeDataHash32,
@@ -218,11 +222,7 @@ instance EraTxOut BabbageEra where
218222

219223
mkBasicTxOut addr vl = BabbageTxOut addr vl NoDatum SNothing
220224

221-
upgradeTxOut (AlonzoTxOut addr value mDatumHash) = BabbageTxOut addr value datum SNothing
222-
where
223-
datum = case mDatumHash of
224-
SNothing -> NoDatum
225-
SJust datumHash -> DatumHash datumHash
225+
upgradeTxOut = upgradeAlonzoTxOut
226226

227227
addrEitherTxOutL = addrEitherBabbageTxOutL
228228
{-# INLINE addrEitherTxOutL #-}
@@ -232,6 +232,13 @@ instance EraTxOut BabbageEra where
232232

233233
getMinCoinSizedTxOut = babbageMinUTxOValue
234234

235+
upgradeAlonzoTxOut :: Alonzo.AlonzoTxOut AlonzoEra -> BabbageTxOut BabbageEra
236+
upgradeAlonzoTxOut = \case
237+
Alonzo.TxOutCompact' ca cv -> TxOutCompact' ca cv
238+
Alonzo.TxOutCompactDH' ca cv dh -> TxOutCompactDH' ca cv dh
239+
Alonzo.TxOut_AddrHash28_AdaOnly c a28e cc -> TxOut_AddrHash28_AdaOnly c a28e cc
240+
Alonzo.TxOut_AddrHash28_AdaOnly_DataHash32 c a28e cc dh32 -> TxOut_AddrHash28_AdaOnly_DataHash32 c a28e cc dh32
241+
235242
dataHashBabbageTxOutL ::
236243
EraTxOut era => Lens' (BabbageTxOut era) (StrictMaybe DataHash)
237244
dataHashBabbageTxOutL =

eras/conway/impl/src/Cardano/Ledger/Conway/TxBody.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ module Cardano.Ledger.Conway.TxBody (
4949
conwayProposalsDeposits,
5050
conwayRedeemerPointer,
5151
conwayRedeemerPointerInverse,
52+
upgradeBabbageTxOut,
5253
) where
5354

5455
import Cardano.Ledger.Alonzo.TxBody (Indexable (..))
@@ -90,7 +91,7 @@ import Cardano.Ledger.Conway.Scripts (ConwayEraScript, ConwayPlutusPurpose (..))
9091
import Cardano.Ledger.Conway.TxCert (
9192
ConwayEraTxCert,
9293
)
93-
import Cardano.Ledger.Conway.TxOut ()
94+
import Cardano.Ledger.Conway.TxOut (upgradeBabbageTxOut)
9495
import Cardano.Ledger.Mary.Value (MultiAsset (..), policies)
9596
import Cardano.Ledger.MemoBytes (
9697
EqRaw,

eras/conway/impl/src/Cardano/Ledger/Conway/TxOut.hs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22
{-# LANGUAGE DerivingVia #-}
33
{-# LANGUAGE FlexibleContexts #-}
44
{-# LANGUAGE FlexibleInstances #-}
5+
{-# LANGUAGE LambdaCase #-}
56
{-# LANGUAGE MultiParamTypeClasses #-}
67
{-# LANGUAGE RankNTypes #-}
78
{-# LANGUAGE ScopedTypeVariables #-}
89
{-# LANGUAGE TypeFamilies #-}
10+
{-# LANGUAGE TypeOperators #-}
911
{-# LANGUAGE UndecidableInstances #-}
1012
{-# OPTIONS_GHC -Wno-orphans #-}
1113

12-
module Cardano.Ledger.Conway.TxOut () where
14+
module Cardano.Ledger.Conway.TxOut (upgradeBabbageTxOut) where
1315

1416
import Cardano.Ledger.Babbage.Core
1517
import Cardano.Ledger.Babbage.TxOut (
@@ -27,6 +29,7 @@ import Cardano.Ledger.Conway.Era (ConwayEra)
2729
import Cardano.Ledger.Conway.PParams ()
2830
import Cardano.Ledger.Conway.Scripts ()
2931
import Cardano.Ledger.Plutus.Data (Datum (..), translateDatum)
32+
import Data.Coerce (coerce)
3033
import Data.Maybe.Strict (StrictMaybe (..))
3134
import Lens.Micro
3235

@@ -35,8 +38,7 @@ instance EraTxOut ConwayEra where
3538

3639
mkBasicTxOut addr vl = BabbageTxOut addr vl NoDatum SNothing
3740

38-
upgradeTxOut (BabbageTxOut addr value d s) =
39-
BabbageTxOut addr value (translateDatum d) (upgradeScript <$> s)
41+
upgradeTxOut = upgradeBabbageTxOut
4042

4143
addrEitherTxOutL = addrEitherBabbageTxOutL
4244
{-# INLINE addrEitherTxOutL #-}
@@ -62,3 +64,18 @@ instance BabbageEraTxOut ConwayEra where
6264

6365
referenceScriptTxOutL = referenceScriptBabbageTxOutL
6466
{-# INLINE referenceScriptTxOutL #-}
67+
68+
upgradeBabbageTxOut ::
69+
( Value era ~ Value (PreviousEra era)
70+
, EraScript (PreviousEra era)
71+
, EraScript era
72+
) =>
73+
BabbageTxOut (PreviousEra era) ->
74+
BabbageTxOut era
75+
upgradeBabbageTxOut = \case
76+
TxOutCompact' ca cv -> TxOutCompact' ca cv
77+
TxOutCompactDH' ca cv dh -> TxOutCompactDH' ca cv dh
78+
TxOutCompactDatum ca cv bd -> TxOutCompactDatum ca cv (coerce bd)
79+
TxOutCompactRefScript ca cv d s -> TxOutCompactRefScript ca cv (translateDatum d) (upgradeScript s)
80+
TxOut_AddrHash28_AdaOnly c a28e cc -> TxOut_AddrHash28_AdaOnly c a28e cc
81+
TxOut_AddrHash28_AdaOnly_DataHash32 c a28e cc dh32 -> TxOut_AddrHash28_AdaOnly_DataHash32 c a28e cc dh32

eras/dijkstra/src/Cardano/Ledger/Dijkstra/TxOut.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ import Cardano.Ledger.Babbage.TxOut (
1717
referenceScriptBabbageTxOutL,
1818
valueEitherBabbageTxOutL,
1919
)
20-
import Cardano.Ledger.Core (EraScript (..), EraTxOut (..))
20+
import Cardano.Ledger.Conway.TxBody (upgradeBabbageTxOut)
21+
import Cardano.Ledger.Core (EraTxOut (..))
2122
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
2223
import Cardano.Ledger.Dijkstra.Scripts ()
23-
import Cardano.Ledger.Plutus (Datum (..), translateDatum)
24+
import Cardano.Ledger.Plutus (Datum (..))
2425
import Data.Maybe.Strict (StrictMaybe (..))
2526
import Lens.Micro (to)
2627

@@ -29,8 +30,7 @@ instance EraTxOut DijkstraEra where
2930

3031
mkBasicTxOut addr vl = BabbageTxOut addr vl NoDatum SNothing
3132

32-
upgradeTxOut (BabbageTxOut addr value d s) =
33-
BabbageTxOut addr value (translateDatum d) (upgradeScript <$> s)
33+
upgradeTxOut = upgradeBabbageTxOut
3434

3535
addrEitherTxOutL = addrEitherBabbageTxOutL
3636
{-# INLINE addrEitherTxOutL #-}

0 commit comments

Comments
 (0)