Skip to content
Open
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
156d119
Add `DijkstraEra era` to `CardanoEra era`
Jimbo4350 Jul 30, 2025
2872eda
Add `ShelleyBasedEraDijkstra` to `ShelleyBasedEra era`
Jimbo4350 Jul 30, 2025
dda8797
Add Dijkstra era to eons
Jimbo4350 Jul 30, 2025
704d11d
Add `DijkstraEra` to `Era era`
Jimbo4350 Jul 30, 2025
7a86381
COMBINE ME: cabal file updates
Jimbo4350 Jul 30, 2025
5be60e0
Update `QueryInShelleyBasedEra era result`
Jimbo4350 Jul 30, 2025
3a8826d
Update `makeShelleyTransactionBody` with Dijkstra era
Jimbo4350 Jul 30, 2025
e63bb2c
Update ledger types `PParamUpdatePurpose`, `CommitteePurpose` and
Jimbo4350 Jul 30, 2025
63ad603
Propagate `ChainAccountState`
Jimbo4350 Jul 30, 2025
b483de7
Consensus related Dijkstra changes
Jimbo4350 Jul 30, 2025
0d8ee49
Temporary Cardano.Api.LedgerState Dijkstra update
Jimbo4350 Jul 30, 2025
730ff11
Update TxOut rendering to handle Dijkstra era
Jimbo4350 Jul 30, 2025
ca28c36
Update `eraSpecificLedgerTxBody` with Dijkstra era
Jimbo4350 Jul 30, 2025
d91aedc
Update `decodeBigLedgerPeerSnapshot` to support snapshot SRV names
Jimbo4350 Jul 30, 2025
338a657
Update generators with PlutusScriptV4
Jimbo4350 Jul 30, 2025
acdff31
Introduce PlutusScriptV4
Jimbo4350 Jul 30, 2025
3437b94
Propagate Dijkstra era
Jimbo4350 Jul 30, 2025
0a737a6
Merge with PlutusV4 intro
Jimbo4350 Jul 30, 2025
5229ec3
Merge with propagate Dikstra
Jimbo4350 Jul 30, 2025
6e832cb
REMOVE ME: Add ledger and consensus SRPs
Jimbo4350 Jul 30, 2025
8330132
Update nix flake
Jimbo4350 Jul 30, 2025
f3ca538
Update cardano-rpc with PlutusV4
Jimbo4350 Jul 31, 2025
6d81484
Implement `executeLocalStateQueryExprWithVersion`
Jimbo4350 Jul 31, 2025
4904a0d
Fix parseHardForkTriggers
Jimbo4350 Jul 31, 2025
2da81eb
Fix cardano-rpc-test for protocol parameters roundtrip
carbolymer Aug 1, 2025
673e4a8
Update flake lock and ouroboros-network and plutus patches
palas Aug 1, 2025
65013af
Update wasm cache
palas Aug 1, 2025
1efbb74
Merge with: Consensus related Dijkstra change
Aug 7, 2025
faab1c2
Use exampleDijkstraGenesis value
Aug 7, 2025
7b8fa12
Fix cabal-gild CI failure
Aug 7, 2025
0eeff17
Run formolu
Aug 7, 2025
a93eab2
Fix HLS CI job
carbolymer Aug 11, 2025
79b9c02
Address lints
palas Aug 12, 2025
64e62e7
Update `ouroboros-consensus` stanza
palas Aug 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update TxOut rendering to handle Dijkstra era
  • Loading branch information
Jimbo4350 authored and Jordan Millar committed Aug 8, 2025
commit 730ff11156bc1fff80b0e123751b7e070e7f0911
125 changes: 113 additions & 12 deletions cardano-api/src/Cardano/Api/Tx/Internal/Output.hs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ import Cardano.Api.Era.Internal.Core
import Cardano.Api.Era.Internal.Eon.AlonzoEraOnwards
import Cardano.Api.Era.Internal.Eon.BabbageEraOnwards
import Cardano.Api.Era.Internal.Eon.Convert
import Cardano.Api.Era.Internal.Eon.ConwayEraOnwards
import Cardano.Api.Era.Internal.Eon.ShelleyBasedEra
import Cardano.Api.Error (Error (..), displayError)
import Cardano.Api.Hash
Expand Down Expand Up @@ -209,6 +210,14 @@ fromLedgerTxOuts sbe body scriptdata =
| let txdatums = selectTxDatums scriptdata
, txouts <- toList (body ^. L.outputsTxBodyL)
]
ShelleyBasedEraDijkstra ->
[ fromBabbageTxOut
BabbageEraOnwardsDijkstra
txdatums
txouts
| let txdatums = selectTxDatums scriptdata
, txouts <- toList (body ^. L.outputsTxBodyL)
]

validateTxOuts :: ShelleyBasedEra era -> [TxOut CtxTx era] -> Either TxOutputError ()
validateTxOuts sbe txOuts = do
Expand Down Expand Up @@ -349,6 +358,16 @@ txOutToJsonValue era (TxOut addr val dat refScript) =
, "inlineDatumRaw" .= inlineDatumRawJsonCbor dat
, "referenceScript" .= refScriptJsonVal refScript
]
DijkstraEra ->
object
[ "address" .= addr
, "value" .= val
, datHashJsonVal dat
, "datum" .= datJsonVal dat
, "inlineDatum" .= inlineDatumJsonVal dat
, "inlineDatumRaw" .= inlineDatumRawJsonCbor dat
, "referenceScript" .= refScriptJsonVal refScript
]
where
datHashJsonVal :: TxOutDatum ctx era -> Aeson.Pair
datHashJsonVal d =
Expand Down Expand Up @@ -466,7 +485,31 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxTx era) where

mReferenceScript <- o .:? "referenceScript"

reconcileConway alonzoTxOutInConway mInlineDatum mReferenceScript
reconcileConway ConwayEraOnwardsConway alonzoTxOutInConway mInlineDatum mReferenceScript
ShelleyBasedEraDijkstra -> do
alonzoTxOutInConway <- alonzoTxOutParser AlonzoEraOnwardsDijkstra o

-- We check for the existence of inline datums
inlineDatumHash <- o .:? "inlineDatumhash"
inlineDatum <- o .:? "inlineDatum"
mInlineDatum <-
case (inlineDatum, inlineDatumHash) of
(Just dVal, Just h) ->
case scriptDataFromJson ScriptDataJsonDetailedSchema dVal of
Left err ->
fail $ "Error parsing TxOut JSON: " <> displayError err
Right sData ->
if hashScriptDataBytes sData /= h
then fail "Inline datum not equivalent to inline datum hash"
else return $ TxOutDatumInline BabbageEraOnwardsDijkstra sData
(Nothing, Nothing) -> return TxOutDatumNone
(_, _) ->
fail
"Should not be possible to create a tx output with either an inline datum hash or an inline datum"

mReferenceScript <- o .:? "referenceScript"

reconcileConway ConwayEraOnwardsDijkstra alonzoTxOutInConway mInlineDatum mReferenceScript
where
reconcileBabbage
:: TxOut CtxTx BabbageEra
Expand Down Expand Up @@ -496,13 +539,14 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxTx era) where
return $ TxOut addr v finalDat finalRefScript

reconcileConway
:: TxOut CtxTx ConwayEra
:: ConwayEraOnwards era
-> TxOut CtxTx era
-- \^ Alonzo era datum in Conway era
-> TxOutDatum CtxTx ConwayEra
-> TxOutDatum CtxTx era
-- \^ Babbage inline datum
-> Maybe ScriptInAnyLang
-> Aeson.Parser (TxOut CtxTx ConwayEra)
reconcileConway top@(TxOut addr v dat r) babbageDatum mBabRefScript = do
-> Aeson.Parser (TxOut CtxTx era)
reconcileConway w top@(TxOut addr v dat r) babbageDatum mBabRefScript = do
-- We check for conflicting datums
finalDat <- case (dat, babbageDatum) of
(TxOutDatumNone, bDatum) -> return bDatum
Expand All @@ -519,7 +563,7 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxTx era) where
finalRefScript <- case mBabRefScript of
Nothing -> return r
Just anyScript ->
return $ ReferenceScript BabbageEraOnwardsConway anyScript
return $ ReferenceScript (convert w) anyScript
return $ TxOut addr v finalDat finalRefScript

alonzoTxOutParser
Expand Down Expand Up @@ -622,7 +666,32 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxUTxO era) where
-- We check for a reference script
mReferenceScript <- o .:? "referenceScript"

reconcileConway alonzoTxOutInConway mInlineDatum mReferenceScript
reconcileConway ConwayEraOnwardsConway alonzoTxOutInConway mInlineDatum mReferenceScript
ShelleyBasedEraDijkstra -> do
alonzoTxOutInConway <- alonzoTxOutParser AlonzoEraOnwardsDijkstra o

-- We check for the existence of inline datums
inlineDatumHash <- o .:? "inlineDatumhash"
inlineDatum <- o .:? "inlineDatum"
mInlineDatum <-
case (inlineDatum, inlineDatumHash) of
(Just dVal, Just h) ->
case scriptDataFromJson ScriptDataJsonDetailedSchema dVal of
Left err ->
fail $ "Error parsing TxOut JSON: " <> displayError err
Right sData ->
if hashScriptDataBytes sData /= h
then fail "Inline datum not equivalent to inline datum hash"
else return $ TxOutDatumInline BabbageEraOnwardsDijkstra sData
(Nothing, Nothing) -> return TxOutDatumNone
(_, _) ->
fail
"Should not be possible to create a tx output with either an inline datum hash or an inline datum"

-- We check for a reference script
mReferenceScript <- o .:? "referenceScript"

reconcileConway ConwayEraOnwardsDijkstra alonzoTxOutInConway mInlineDatum mReferenceScript
where
reconcileBabbage
:: TxOut CtxUTxO BabbageEra
Expand All @@ -645,13 +714,14 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxUTxO era) where
return $ TxOut addr v finalDat finalRefScript

reconcileConway
:: TxOut CtxUTxO ConwayEra
:: ConwayEraOnwards era
-> TxOut CtxUTxO era
-- \^ Alonzo era datum in Conway era
-> TxOutDatum CtxUTxO ConwayEra
-> TxOutDatum CtxUTxO era
-- \^ Babbage inline datum
-> Maybe ScriptInAnyLang
-> Aeson.Parser (TxOut CtxUTxO ConwayEra)
reconcileConway (TxOut addr v dat r) babbageDatum mBabRefScript = do
-> Aeson.Parser (TxOut CtxUTxO era)
reconcileConway w (TxOut addr v dat r) babbageDatum mBabRefScript = do
-- We check for conflicting datums
finalDat <- case (dat, babbageDatum) of
(TxOutDatumNone, bDatum) -> return bDatum
Expand All @@ -660,7 +730,7 @@ instance IsShelleyBasedEra era => FromJSON (TxOut CtxUTxO era) where
finalRefScript <- case mBabRefScript of
Nothing -> return r
Just anyScript ->
return $ ReferenceScript BabbageEraOnwardsConway anyScript
return $ ReferenceScript (convert w) anyScript

return $ TxOut addr v finalDat finalRefScript

Expand Down Expand Up @@ -723,6 +793,12 @@ toShelleyTxOut sbe = shelleyBasedEraConstraints sbe $ \case
.~ toBabbageTxOutDatumUTxO txoutdata
& L.referenceScriptTxOutL
.~ refScriptToShelleyScript sbe refScript
AlonzoEraOnwardsDijkstra ->
L.mkBasicTxOut (toShelleyAddr addr) value
& L.datumTxOutL
.~ toBabbageTxOutDatumUTxO txoutdata
& L.referenceScriptTxOutL
.~ refScriptToShelleyScript sbe refScript
)
sbe

Expand Down Expand Up @@ -757,6 +833,12 @@ toShelleyTxOutAny sbe = shelleyBasedEraConstraints sbe $ \case
.~ toBabbageTxOutDatum txoutdata
& L.referenceScriptTxOutL
.~ refScriptToShelleyScript sbe refScript
AlonzoEraOnwardsDijkstra ->
L.mkBasicTxOut (toShelleyAddr addr) value
& L.datumTxOutL
.~ toBabbageTxOutDatum txoutdata
& L.referenceScriptTxOutL
.~ refScriptToShelleyScript sbe refScript
)
sbe

Expand Down Expand Up @@ -819,6 +901,23 @@ fromShelleyTxOut sbe ledgerTxOut = shelleyBasedEraConstraints sbe $ do
where
datum = ledgerTxOut ^. L.datumTxOutL
mRefScript = ledgerTxOut ^. L.referenceScriptTxOutL
ShelleyBasedEraDijkstra ->
TxOut
addressInEra
txOutValue
( fromBabbageTxOutDatum
AlonzoEraOnwardsDijkstra
BabbageEraOnwardsDijkstra
datum
)
( case mRefScript of
SNothing -> ReferenceScriptNone
SJust refScript ->
fromShelleyScriptToReferenceScript ShelleyBasedEraDijkstra refScript
)
where
datum = ledgerTxOut ^. L.datumTxOutL
mRefScript = ledgerTxOut ^. L.referenceScriptTxOutL

-- ----------------------------------------------------------------------------
-- Transaction output values (era-dependent)
Expand Down Expand Up @@ -1026,6 +1125,8 @@ binaryDataToScriptData BabbageEraOnwardsBabbage d =
fromAlonzoData $ L.binaryDataToData d
binaryDataToScriptData BabbageEraOnwardsConway d =
fromAlonzoData $ L.binaryDataToData d
binaryDataToScriptData BabbageEraOnwardsDijkstra d =
fromAlonzoData $ L.binaryDataToData d

data TxOutputError
= TxOutputNegative !Quantity !TxOutInAnyEra
Expand Down