@@ -11,6 +11,7 @@ module Cardano.Api.UTxO where
11
11
import Cardano.Api hiding (UTxO , toLedgerUTxO )
12
12
import Cardano.Api qualified
13
13
import Cardano.Api.Shelley (ReferenceScript (.. ))
14
+ import Cardano.Ledger.Babbage ()
14
15
import Data.Bifunctor (second )
15
16
import Data.Coerce (coerce )
16
17
import Data.List qualified as List
@@ -87,35 +88,38 @@ min = UTxO . uncurry Map.singleton . Map.findMin . toMap
87
88
-- * Type Conversions
88
89
89
90
-- | Transforms a UTxO containing tx outs from any era into Babbage era.
90
- fromApi :: forall era . ShelleyBasedEra era -> Cardano.Api. UTxO era -> UTxO
91
- fromApi sbe (Cardano.Api. UTxO eraUTxO) =
92
- let eraPairs = Map. toList eraUTxO
93
- babbagePairs = second (coerceOutputToEra sbe) <$> eraPairs
94
- in fromPairs babbagePairs
95
-
96
- coerceOutputToEra :: forall era . ShelleyBasedEra era -> TxOut CtxUTxO era -> TxOut CtxUTxO Era
97
- coerceOutputToEra sbe (TxOut eraAddress eraValue eraDatum eraRefScript) =
98
- TxOut
99
- (coerceAddressToEra eraAddress)
100
- (coerceValueToEra sbe eraValue)
101
- (coerceDatumToEra eraDatum)
102
- (coerceRefScriptToEra eraRefScript)
103
-
104
- coerceAddressToEra :: AddressInEra era -> AddressInEra Era
105
- coerceAddressToEra (AddressInEra _ eraAddress) = anyAddressInShelleyBasedEra ShelleyBasedEraBabbage (toAddressAny eraAddress)
106
-
107
- coerceValueToEra :: forall era . ShelleyBasedEra era -> TxOutValue era -> TxOutValue Era
108
- coerceValueToEra _ (TxOutValueByron eraLovelace) = lovelaceToTxOutValue shelleyBasedEra eraLovelace
109
- coerceValueToEra sbe (TxOutValueShelleyBased _ value) = TxOutValueShelleyBased ShelleyBasedEraBabbage (toLedgerValue MaryEraOnwardsBabbage $ fromLedgerValue sbe value)
110
-
111
- coerceDatumToEra :: TxOutDatum CtxUTxO era -> TxOutDatum CtxUTxO Era
112
- coerceDatumToEra TxOutDatumNone = TxOutDatumNone
113
- coerceDatumToEra (TxOutDatumHash _ hashScriptData) = TxOutDatumHash AlonzoEraOnwardsBabbage hashScriptData
114
- coerceDatumToEra (TxOutDatumInline _ hashableScriptData) = TxOutDatumInline BabbageEraOnwardsBabbage hashableScriptData
115
-
116
- coerceRefScriptToEra :: ReferenceScript era -> ReferenceScript Era
117
- coerceRefScriptToEra ReferenceScriptNone = ReferenceScriptNone
118
- coerceRefScriptToEra (ReferenceScript _ scriptInAnyLang) = ReferenceScript BabbageEraOnwardsBabbage scriptInAnyLang
91
+ fromApi :: Cardano.Api. UTxO era -> UTxO
92
+ fromApi (Cardano.Api. UTxO eraUTxO) =
93
+ fromPairs $ second convertOutputToEra <$> Map. toList eraUTxO
94
+ where
95
+ -- NOTE: At latest the TxOutValue is an existential where we need to case on
96
+ -- the 'sbe' witness to get constraints on the contained 'value', but the
97
+ -- 'cardano-api' does that already when allowing conversion of their
98
+ -- (complicated) constrained types to the cardano-ledger types - so we just
99
+ -- convert forth and back.
100
+ convertOutputToEra :: TxOut CtxUTxO era -> TxOut CtxUTxO Era
101
+ convertOutputToEra (TxOut eraAddress eraValue eraDatum eraRefScript) =
102
+ TxOut
103
+ (convertAddressToEra eraAddress)
104
+ (convertValueToEra eraValue)
105
+ (convertDatumToEra eraDatum)
106
+ (convertRefScriptToEra eraRefScript)
107
+
108
+ convertAddressToEra :: AddressInEra era -> AddressInEra Era
109
+ convertAddressToEra (AddressInEra _ eraAddress) = anyAddressInShelleyBasedEra ShelleyBasedEraBabbage (toAddressAny eraAddress)
110
+
111
+ convertValueToEra :: TxOutValue era -> TxOutValue Era
112
+ convertValueToEra (TxOutValueByron lovelace) = lovelaceToTxOutValue shelleyBasedEra lovelace
113
+ convertValueToEra (TxOutValueShelleyBased sbe value) = TxOutValueShelleyBased shelleyBasedEra (toLedgerValue MaryEraOnwardsBabbage $ fromLedgerValue sbe value)
114
+
115
+ convertDatumToEra :: TxOutDatum CtxUTxO era -> TxOutDatum CtxUTxO Era
116
+ convertDatumToEra TxOutDatumNone = TxOutDatumNone
117
+ convertDatumToEra (TxOutDatumHash _ hashScriptData) = TxOutDatumHash AlonzoEraOnwardsBabbage hashScriptData
118
+ convertDatumToEra (TxOutDatumInline _ hashableScriptData) = TxOutDatumInline BabbageEraOnwardsBabbage hashableScriptData
119
+
120
+ convertRefScriptToEra :: ReferenceScript era -> ReferenceScript Era
121
+ convertRefScriptToEra ReferenceScriptNone = ReferenceScriptNone
122
+ convertRefScriptToEra (ReferenceScript _ scriptInAnyLang) = ReferenceScript BabbageEraOnwardsBabbage scriptInAnyLang
119
123
120
124
toApi :: UTxO -> Cardano.Api. UTxO Era
121
125
toApi = coerce
0 commit comments