@@ -60,6 +60,7 @@ import Cardano.Api.Era.Internal.Core
6060import Cardano.Api.Era.Internal.Eon.AlonzoEraOnwards
6161import Cardano.Api.Era.Internal.Eon.BabbageEraOnwards
6262import Cardano.Api.Era.Internal.Eon.Convert
63+ import Cardano.Api.Era.Internal.Eon.ConwayEraOnwards
6364import Cardano.Api.Era.Internal.Eon.ShelleyBasedEra
6465import Cardano.Api.Error (Error (.. ), displayError )
6566import Cardano.Api.Hash
@@ -209,6 +210,14 @@ fromLedgerTxOuts sbe body scriptdata =
209210 | let txdatums = selectTxDatums scriptdata
210211 , txouts <- toList (body ^. L. outputsTxBodyL)
211212 ]
213+ ShelleyBasedEraDijkstra ->
214+ [ fromBabbageTxOut
215+ BabbageEraOnwardsDijkstra
216+ txdatums
217+ txouts
218+ | let txdatums = selectTxDatums scriptdata
219+ , txouts <- toList (body ^. L. outputsTxBodyL)
220+ ]
212221
213222validateTxOuts :: ShelleyBasedEra era -> [TxOut CtxTx era ] -> Either TxOutputError ()
214223validateTxOuts sbe txOuts = do
@@ -349,6 +358,16 @@ txOutToJsonValue era (TxOut addr val dat refScript) =
349358 , " inlineDatumRaw" .= inlineDatumRawJsonCbor dat
350359 , " referenceScript" .= refScriptJsonVal refScript
351360 ]
361+ DijkstraEra ->
362+ object
363+ [ " address" .= addr
364+ , " value" .= val
365+ , datHashJsonVal dat
366+ , " datum" .= datJsonVal dat
367+ , " inlineDatum" .= inlineDatumJsonVal dat
368+ , " inlineDatumRaw" .= inlineDatumRawJsonCbor dat
369+ , " referenceScript" .= refScriptJsonVal refScript
370+ ]
352371 where
353372 datHashJsonVal :: TxOutDatum ctx era -> Aeson. Pair
354373 datHashJsonVal d =
@@ -466,7 +485,31 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxTx era) where
466485
467486 mReferenceScript <- o .:? " referenceScript"
468487
469- reconcileConway alonzoTxOutInConway mInlineDatum mReferenceScript
488+ reconcileConway ConwayEraOnwardsConway alonzoTxOutInConway mInlineDatum mReferenceScript
489+ ShelleyBasedEraDijkstra -> do
490+ alonzoTxOutInConway <- alonzoTxOutParser AlonzoEraOnwardsDijkstra o
491+
492+ -- We check for the existence of inline datums
493+ inlineDatumHash <- o .:? " inlineDatumhash"
494+ inlineDatum <- o .:? " inlineDatum"
495+ mInlineDatum <-
496+ case (inlineDatum, inlineDatumHash) of
497+ (Just dVal, Just h) ->
498+ case scriptDataFromJson ScriptDataJsonDetailedSchema dVal of
499+ Left err ->
500+ fail $ " Error parsing TxOut JSON: " <> displayError err
501+ Right sData ->
502+ if hashScriptDataBytes sData /= h
503+ then fail " Inline datum not equivalent to inline datum hash"
504+ else return $ TxOutDatumInline BabbageEraOnwardsDijkstra sData
505+ (Nothing , Nothing ) -> return TxOutDatumNone
506+ (_, _) ->
507+ fail
508+ " Should not be possible to create a tx output with either an inline datum hash or an inline datum"
509+
510+ mReferenceScript <- o .:? " referenceScript"
511+
512+ reconcileConway ConwayEraOnwardsDijkstra alonzoTxOutInConway mInlineDatum mReferenceScript
470513 where
471514 reconcileBabbage
472515 :: TxOut CtxTx BabbageEra
@@ -496,13 +539,14 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxTx era) where
496539 return $ TxOut addr v finalDat finalRefScript
497540
498541 reconcileConway
499- :: TxOut CtxTx ConwayEra
542+ :: ConwayEraOnwards era
543+ -> TxOut CtxTx era
500544 -- \^ Alonzo era datum in Conway era
501- -> TxOutDatum CtxTx ConwayEra
545+ -> TxOutDatum CtxTx era
502546 -- \^ Babbage inline datum
503547 -> Maybe ScriptInAnyLang
504- -> Aeson. Parser (TxOut CtxTx ConwayEra )
505- reconcileConway top@ (TxOut addr v dat r) babbageDatum mBabRefScript = do
548+ -> Aeson. Parser (TxOut CtxTx era )
549+ reconcileConway w top@ (TxOut addr v dat r) babbageDatum mBabRefScript = do
506550 -- We check for conflicting datums
507551 finalDat <- case (dat, babbageDatum) of
508552 (TxOutDatumNone , bDatum) -> return bDatum
@@ -519,7 +563,7 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxTx era) where
519563 finalRefScript <- case mBabRefScript of
520564 Nothing -> return r
521565 Just anyScript ->
522- return $ ReferenceScript BabbageEraOnwardsConway anyScript
566+ return $ ReferenceScript (convert w) anyScript
523567 return $ TxOut addr v finalDat finalRefScript
524568
525569 alonzoTxOutParser
@@ -622,7 +666,32 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxUTxO era) where
622666 -- We check for a reference script
623667 mReferenceScript <- o .:? " referenceScript"
624668
625- reconcileConway alonzoTxOutInConway mInlineDatum mReferenceScript
669+ reconcileConway ConwayEraOnwardsConway alonzoTxOutInConway mInlineDatum mReferenceScript
670+ ShelleyBasedEraDijkstra -> do
671+ alonzoTxOutInConway <- alonzoTxOutParser AlonzoEraOnwardsDijkstra o
672+
673+ -- We check for the existence of inline datums
674+ inlineDatumHash <- o .:? " inlineDatumhash"
675+ inlineDatum <- o .:? " inlineDatum"
676+ mInlineDatum <-
677+ case (inlineDatum, inlineDatumHash) of
678+ (Just dVal, Just h) ->
679+ case scriptDataFromJson ScriptDataJsonDetailedSchema dVal of
680+ Left err ->
681+ fail $ " Error parsing TxOut JSON: " <> displayError err
682+ Right sData ->
683+ if hashScriptDataBytes sData /= h
684+ then fail " Inline datum not equivalent to inline datum hash"
685+ else return $ TxOutDatumInline BabbageEraOnwardsDijkstra sData
686+ (Nothing , Nothing ) -> return TxOutDatumNone
687+ (_, _) ->
688+ fail
689+ " Should not be possible to create a tx output with either an inline datum hash or an inline datum"
690+
691+ -- We check for a reference script
692+ mReferenceScript <- o .:? " referenceScript"
693+
694+ reconcileConway ConwayEraOnwardsDijkstra alonzoTxOutInConway mInlineDatum mReferenceScript
626695 where
627696 reconcileBabbage
628697 :: TxOut CtxUTxO BabbageEra
@@ -645,13 +714,14 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxUTxO era) where
645714 return $ TxOut addr v finalDat finalRefScript
646715
647716 reconcileConway
648- :: TxOut CtxUTxO ConwayEra
717+ :: ConwayEraOnwards era
718+ -> TxOut CtxUTxO era
649719 -- \^ Alonzo era datum in Conway era
650- -> TxOutDatum CtxUTxO ConwayEra
720+ -> TxOutDatum CtxUTxO era
651721 -- \^ Babbage inline datum
652722 -> Maybe ScriptInAnyLang
653- -> Aeson. Parser (TxOut CtxUTxO ConwayEra )
654- reconcileConway (TxOut addr v dat r) babbageDatum mBabRefScript = do
723+ -> Aeson. Parser (TxOut CtxUTxO era )
724+ reconcileConway w (TxOut addr v dat r) babbageDatum mBabRefScript = do
655725 -- We check for conflicting datums
656726 finalDat <- case (dat, babbageDatum) of
657727 (TxOutDatumNone , bDatum) -> return bDatum
@@ -660,7 +730,7 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxUTxO era) where
660730 finalRefScript <- case mBabRefScript of
661731 Nothing -> return r
662732 Just anyScript ->
663- return $ ReferenceScript BabbageEraOnwardsConway anyScript
733+ return $ ReferenceScript (convert w) anyScript
664734
665735 return $ TxOut addr v finalDat finalRefScript
666736
@@ -723,6 +793,12 @@ toShelleyTxOut sbe = shelleyBasedEraConstraints sbe $ \case
723793 .~ toBabbageTxOutDatumUTxO txoutdata
724794 & L. referenceScriptTxOutL
725795 .~ refScriptToShelleyScript sbe refScript
796+ AlonzoEraOnwardsDijkstra ->
797+ L. mkBasicTxOut (toShelleyAddr addr) value
798+ & L. datumTxOutL
799+ .~ toBabbageTxOutDatumUTxO txoutdata
800+ & L. referenceScriptTxOutL
801+ .~ refScriptToShelleyScript sbe refScript
726802 )
727803 sbe
728804
@@ -757,6 +833,12 @@ toShelleyTxOutAny sbe = shelleyBasedEraConstraints sbe $ \case
757833 .~ toBabbageTxOutDatum txoutdata
758834 & L. referenceScriptTxOutL
759835 .~ refScriptToShelleyScript sbe refScript
836+ AlonzoEraOnwardsDijkstra ->
837+ L. mkBasicTxOut (toShelleyAddr addr) value
838+ & L. datumTxOutL
839+ .~ toBabbageTxOutDatum txoutdata
840+ & L. referenceScriptTxOutL
841+ .~ refScriptToShelleyScript sbe refScript
760842 )
761843 sbe
762844
@@ -819,6 +901,23 @@ fromShelleyTxOut sbe ledgerTxOut = shelleyBasedEraConstraints sbe $ do
819901 where
820902 datum = ledgerTxOut ^. L. datumTxOutL
821903 mRefScript = ledgerTxOut ^. L. referenceScriptTxOutL
904+ ShelleyBasedEraDijkstra ->
905+ TxOut
906+ addressInEra
907+ txOutValue
908+ ( fromBabbageTxOutDatum
909+ AlonzoEraOnwardsDijkstra
910+ BabbageEraOnwardsDijkstra
911+ datum
912+ )
913+ ( case mRefScript of
914+ SNothing -> ReferenceScriptNone
915+ SJust refScript ->
916+ fromShelleyScriptToReferenceScript ShelleyBasedEraDijkstra refScript
917+ )
918+ where
919+ datum = ledgerTxOut ^. L. datumTxOutL
920+ mRefScript = ledgerTxOut ^. L. referenceScriptTxOutL
822921
823922-- ----------------------------------------------------------------------------
824923-- Transaction output values (era-dependent)
@@ -1026,6 +1125,8 @@ binaryDataToScriptData BabbageEraOnwardsBabbage d =
10261125 fromAlonzoData $ L. binaryDataToData d
10271126binaryDataToScriptData BabbageEraOnwardsConway d =
10281127 fromAlonzoData $ L. binaryDataToData d
1128+ binaryDataToScriptData BabbageEraOnwardsDijkstra d =
1129+ fromAlonzoData $ L. binaryDataToData d
10291130
10301131data TxOutputError
10311132 = TxOutputNegative ! Quantity ! TxOutInAnyEra
0 commit comments