@@ -459,17 +459,17 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxTx era) where
459459 alonzoTxOutInBabbage <- alonzoTxOutParser AlonzoEraOnwardsBabbage o
460460 mInlineDatum <- parseInlineDatum BabbageEraOnwardsBabbage o
461461 mReferenceScript <- o .:? " referenceScript"
462- reconcileBabbage alonzoTxOutInBabbage mInlineDatum mReferenceScript
462+ reconcileDatums BabbageEraOnwardsBabbage alonzoTxOutInBabbage mInlineDatum mReferenceScript
463463 ShelleyBasedEraConway -> do
464464 alonzoTxOutInConway <- alonzoTxOutParser AlonzoEraOnwardsConway o
465465 mInlineDatum <- parseInlineDatum BabbageEraOnwardsConway o
466466 mReferenceScript <- o .:? " referenceScript"
467- reconcileConway ConwayEraOnwardsConway alonzoTxOutInConway mInlineDatum mReferenceScript
467+ reconcileDatums BabbageEraOnwardsConway alonzoTxOutInConway mInlineDatum mReferenceScript
468468 ShelleyBasedEraDijkstra -> do
469469 alonzoTxOutInConway <- alonzoTxOutParser AlonzoEraOnwardsDijkstra o
470470 mInlineDatum <- parseInlineDatum BabbageEraOnwardsDijkstra o
471471 mReferenceScript <- o .:? " referenceScript"
472- reconcileConway ConwayEraOnwardsDijkstra alonzoTxOutInConway mInlineDatum mReferenceScript
472+ reconcileDatums BabbageEraOnwardsDijkstra alonzoTxOutInConway mInlineDatum mReferenceScript
473473 where
474474 -- | Parse inline datum fields from JSON object
475475 -- Handles both inlineDatumhash and inlineDatum fields, validating they match
@@ -499,60 +499,45 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxTx era) where
499499 fail
500500 " Should not be possible to create a tx output with either an inline datum hash or an inline datum"
501501
502- reconcileBabbage
503- :: TxOut CtxTx BabbageEra
504- -- \^ Alonzo era datum in Babbage era
505- -> TxOutDatum CtxTx BabbageEra
506- -- \^ Babbage inline datum
507- -> Maybe ScriptInAnyLang
508- -> Aeson. Parser (TxOut CtxTx BabbageEra )
509- reconcileBabbage top@ (TxOut addr v dat r) babbageDatum mBabRefScript = do
510- -- We check for conflicting datums
511- finalDat <- case (dat, babbageDatum) of
512- (TxOutDatumNone , bDatum) -> return bDatum
513- (anyDat, TxOutDatumNone ) -> return anyDat
514- (alonzoDat, babbageDat) ->
515- fail $
516- " Parsed an Alonzo era datum and a Babbage era datum "
517- <> " TxOut: "
518- <> show top
519- <> " Alonzo datum: "
520- <> show alonzoDat
521- <> " Babbage dat: "
522- <> show babbageDat
523- finalRefScript <- case mBabRefScript of
524- Nothing -> return r
525- Just anyScript ->
526- return $ ReferenceScript BabbageEraOnwardsBabbage anyScript
527- return $ TxOut addr v finalDat finalRefScript
528-
529- reconcileConway
530- :: ConwayEraOnwards era
502+ -- | Reconcile Alonzo-style and Babbage-style datums and reference scripts
503+ -- This handles the two-phase parsing where both old and new style fields may be present
504+ reconcileDatums
505+ :: BabbageEraOnwards era
531506 -> TxOut CtxTx era
532- -- \^ Alonzo era datum in Conway era
507+ -- \^ TxOut with Alonzo-style datum
533508 -> TxOutDatum CtxTx era
534- -- \^ Babbage inline datum
509+ -- \^ Babbage-style inline datum
535510 -> Maybe ScriptInAnyLang
511+ -- \^ Optional reference script
536512 -> Aeson. Parser (TxOut CtxTx era )
537- reconcileConway w top@ (TxOut addr v dat r) babbageDatum mBabRefScript = do
538- -- We check for conflicting datums
539- finalDat <- case (dat, babbageDatum ) of
513+ reconcileDatums w top@ (TxOut addr v dat r) inlineDatum mRefScript = do
514+ -- Check for conflicting datums
515+ finalDat <- case (dat, inlineDatum ) of
540516 (TxOutDatumNone , bDatum) -> return bDatum
541517 (anyDat, TxOutDatumNone ) -> return anyDat
542518 (alonzoDat, babbageDat) ->
543519 fail $
544- " Parsed an Alonzo era datum and a Conway era datum "
520+ " Parsed an Alonzo era datum and a "
521+ <> eraName
522+ <> " era datum. "
545523 <> " TxOut: "
546524 <> show top
547- <> " Alonzo datum: "
525+ <> " Alonzo datum: "
548526 <> show alonzoDat
549- <> " Conway dat: "
527+ <> " "
528+ <> eraName
529+ <> " datum: "
550530 <> show babbageDat
551- finalRefScript <- case mBabRefScript of
531+ finalRefScript <- case mRefScript of
552532 Nothing -> return r
553- Just anyScript ->
554- return $ ReferenceScript (convert w) anyScript
533+ Just anyScript -> return $ ReferenceScript w anyScript
555534 return $ TxOut addr v finalDat finalRefScript
535+ where
536+ eraName = case (convert w :: ShelleyBasedEra era ) of
537+ ShelleyBasedEraBabbage -> " Babbage"
538+ ShelleyBasedEraConway -> " Conway"
539+ ShelleyBasedEraDijkstra -> " Dijkstra"
540+ _ -> " unknown" -- This case should never occur due to BabbageEraOnwards constraint
556541
557542 alonzoTxOutParser
558543 :: AlonzoEraOnwards era -> Aeson. Object -> Aeson. Parser (TxOut CtxTx era )
0 commit comments