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 makeShelleyTransactionBody with Dijkstra era
  • Loading branch information
Jimbo4350 authored and Jordan Millar committed Aug 8, 2025
commit 3a8826d011bbb36a64cd18f717fcc4ecdd59f14f
210 changes: 196 additions & 14 deletions cardano-api/src/Cardano/Api/Tx/Internal/Body.hs
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,6 @@ import Cardano.Ledger.BaseTypes (StrictMaybe (..))
import Cardano.Ledger.Binary (Annotated (..))
import Cardano.Ledger.Binary qualified as CBOR
import Cardano.Ledger.Coin qualified as L
import Cardano.Ledger.Conway.Core qualified as L
import Cardano.Ledger.Core ()
import Cardano.Ledger.Core qualified as Ledger
import Cardano.Ledger.Credential qualified as Shelley
Expand Down Expand Up @@ -1426,6 +1425,13 @@ validateTxBodyContent
validateMetadata txMetadata
validateTxInsCollateral txInsCollateral languages
validateProtocolParameters txProtocolParams languages
ShelleyBasedEraDijkstra -> do
validateTxIns txIns
first TxBodyOutputError $
validateTxOuts sbe txOuts
validateMetadata txMetadata
validateTxInsCollateral txInsCollateral languages
validateProtocolParameters txProtocolParams languages

validateMetadata :: TxMetadataInEra era -> Either TxBodyError ()
validateMetadata txMetadata =
Expand Down Expand Up @@ -1590,6 +1596,7 @@ fromLedgerTxIns sbe body =
inputs_ ShelleyBasedEraAlonzo = view L.inputsTxBodyL
inputs_ ShelleyBasedEraBabbage = view L.inputsTxBodyL
inputs_ ShelleyBasedEraConway = view L.inputsTxBodyL
inputs_ ShelleyBasedEraDijkstra = view L.inputsTxBodyL

fromLedgerTxInsCollateral
:: forall era
Expand Down Expand Up @@ -1696,6 +1703,11 @@ fromLedgerAuxiliaryData ShelleyBasedEraConway txAuxData =
, fromShelleyBasedScript ShelleyBasedEraConway
<$> toList (L.getAlonzoTxAuxDataScripts txAuxData)
)
fromLedgerAuxiliaryData ShelleyBasedEraDijkstra txAuxData =
( fromShelleyMetadata (L.atadMetadata txAuxData)
, fromShelleyBasedScript ShelleyBasedEraDijkstra
<$> toList (L.getAlonzoTxAuxDataScripts txAuxData)
)

fromLedgerTxAuxiliaryData
:: ShelleyBasedEra era
Expand Down Expand Up @@ -2033,7 +2045,10 @@ mkCommonTxBody sbe txIns txOuts txFee txWithdrawals txAuxData =
& L.auxDataHashTxBodyL
.~ maybe SNothing (SJust . Ledger.hashTxAuxData) txAuxData

{-# DEPRECATED makeShelleyTransactionBody "Use 'createTransactionBody' instead." #-}
{-# DEPRECATED
makeShelleyTransactionBody
"Use 'createTransactionBody' instead. 'makeShelleyTransactionBody' will be removed after 11.0.0.0 release"
#-}
makeShelleyTransactionBody
:: forall era
. ()
Expand Down Expand Up @@ -2593,6 +2608,159 @@ makeShelleyTransactionBody

txAuxData :: Maybe (L.TxAuxData E.ConwayEra)
txAuxData = toAuxiliaryData sbe txMetadata txAuxScripts
makeShelleyTransactionBody
sbe@ShelleyBasedEraDijkstra
txbodycontent@TxBodyContent
{ txIns
, txInsCollateral
, txInsReference
, txReturnCollateral
, txTotalCollateral
, txOuts
, txFee
, txValidityLowerBound
, txValidityUpperBound
, txMetadata
, txAuxScripts
, txExtraKeyWits
, txProtocolParams
, txWithdrawals
, txCertificates
, txMintValue
, txScriptValidity
, txProposalProcedures
, txVotingProcedures
, txCurrentTreasuryValue
, txTreasuryDonation
} = do
let aOn = AllegraEraOnwardsDijkstra
let cOn = ConwayEraOnwardsDijkstra
let mOn = MaryEraOnwardsDijkstra
let bOn = BabbageEraOnwardsDijkstra
validateTxBodyContent sbe txbodycontent
let scriptIntegrityHash =
convPParamsToScriptIntegrityHash
AlonzoEraOnwardsDijkstra
txProtocolParams
redeemers
datums
languages
let txbody =
( mkCommonTxBody sbe txIns txOuts txFee txWithdrawals txAuxData
& A.collateralInputsTxBodyL azOn
.~ case txInsCollateral of
TxInsCollateralNone -> Set.empty
TxInsCollateral _ txins -> fromList (map toShelleyTxIn txins)
& A.referenceInputsTxBodyL bOn
.~ convReferenceInputs txInsReference
& A.collateralReturnTxBodyL bOn
.~ convReturnCollateral sbe txReturnCollateral
& A.totalCollateralTxBodyL bOn
.~ convTotalCollateral txTotalCollateral
& A.certsTxBodyL sbe
.~ convCertificates sbe txCertificates
& A.invalidBeforeTxBodyL aOn
.~ convValidityLowerBound txValidityLowerBound
& A.invalidHereAfterTxBodyL sbe
.~ convValidityUpperBound sbe txValidityUpperBound
& A.reqSignerHashesTxBodyL azOn
.~ convExtraKeyWitnesses txExtraKeyWits
& A.mintTxBodyL mOn
.~ convMintValue txMintValue
& A.scriptIntegrityHashTxBodyL azOn
.~ scriptIntegrityHash
& A.votingProceduresTxBodyL cOn
.~ convVotingProcedures (maybe TxVotingProceduresNone unFeatured txVotingProcedures)
& A.proposalProceduresTxBodyL cOn
.~ convProposalProcedures (maybe TxProposalProceduresNone unFeatured txProposalProcedures)
& A.currentTreasuryValueTxBodyL cOn
.~ Ledger.maybeToStrictMaybe (unFeatured =<< txCurrentTreasuryValue)
& A.treasuryDonationTxBodyL cOn
.~ maybe (L.Coin 0) unFeatured txTreasuryDonation
-- TODO Conway: support optional network id in TxBodyContent
-- & L.networkIdTxBodyL .~ SNothing
)
^. A.txBodyL
return $
ShelleyTxBody
sbe
txbody
scripts
( TxBodyScriptData
AlonzoEraOnwardsDijkstra
datums
redeemers
)
txAuxData
txScriptValidity
where
azOn = AlonzoEraOnwardsDijkstra

witnesses :: [(ScriptWitnessIndex, AnyScriptWitness DijkstraEra)]
witnesses = collectTxBodyScriptWitnesses sbe txbodycontent

scripts :: [Ledger.Script L.DijkstraEra]
scripts =
catMaybes
[ toShelleyScript <$> getScriptWitnessScript scriptwitness
| (_, AnyScriptWitness scriptwitness) <- witnesses
]

-- Note these do not include inline datums!
datums :: Alonzo.TxDats L.DijkstraEra
datums =
Alonzo.TxDats $
fromList
[ (L.hashData d, d)
| d <- toAlonzoData <$> scriptdata
]

scriptdata :: [HashableScriptData]
scriptdata =
[d | TxOut _ _ (TxOutSupplementalDatum _ d) _ <- txOuts]
<> [ d
| ( _
, AnyScriptWitness
( PlutusScriptWitness
_
_
_
(ScriptDatumForTxIn (Just d))
_
_
)
) <-
witnesses
]

redeemers :: Alonzo.Redeemers L.DijkstraEra
redeemers =
Alonzo.Redeemers $
fromList
[ (i, (toAlonzoData d, toAlonzoExUnits e))
| ( idx
, AnyScriptWitness
(PlutusScriptWitness _ _ _ _ d e)
) <-
witnesses
, Just i <- [fromScriptWitnessIndex azOn idx]
]

languages :: Set Plutus.Language
languages =
fromList $
catMaybes
[ getScriptLanguage sw
| (_, AnyScriptWitness sw) <- witnesses
]

getScriptLanguage :: ScriptWitness witctx era -> Maybe Plutus.Language
getScriptLanguage (PlutusScriptWitness _ v _ _ _ _) =
Just $ toAlonzoLanguage (AnyPlutusScriptVersion v)
getScriptLanguage SimpleScriptWitness{} = Nothing

txAuxData :: Maybe (L.TxAuxData L.DijkstraEra)
txAuxData = toAuxiliaryData sbe txMetadata txAuxScripts

-- ----------------------------------------------------------------------------
-- Script witnesses within the tx body
Expand Down Expand Up @@ -2697,6 +2865,7 @@ fromScriptWitnessIndex aOnwards widx =
AlonzoEraOnwardsAlonzo -> fromScriptWitnessIndexAlonzo widx
AlonzoEraOnwardsBabbage -> fromScriptWitnessIndexBabbage widx
AlonzoEraOnwardsConway -> fromScriptWitnessIndexConway widx
AlonzoEraOnwardsDijkstra -> fromScriptWitnessIndexDijkstra widx

fromScriptWitnessIndexAlonzo
:: ScriptWitnessIndex -> Maybe (L.PlutusPurpose L.AsIx (ShelleyLedgerEra AlonzoEra))
Expand Down Expand Up @@ -2729,6 +2898,17 @@ fromScriptWitnessIndexConway i =
ScriptWitnessIndexVoting n -> Just $ L.ConwayVoting (L.AsIx n)
ScriptWitnessIndexProposing n -> Just $ L.ConwayProposing (L.AsIx n)

fromScriptWitnessIndexDijkstra
:: ScriptWitnessIndex -> Maybe (L.PlutusPurpose L.AsIx (ShelleyLedgerEra DijkstraEra))
fromScriptWitnessIndexDijkstra i =
case i of
ScriptWitnessIndexTxIn n -> Just $ L.ConwaySpending (L.AsIx n)
ScriptWitnessIndexMint n -> Just $ L.ConwayMinting (L.AsIx n)
ScriptWitnessIndexCertificate n -> Just $ L.ConwayCertifying (L.AsIx n)
ScriptWitnessIndexWithdrawal n -> Just $ L.ConwayRewarding (L.AsIx n)
ScriptWitnessIndexVoting n -> Just $ L.ConwayVoting (L.AsIx n)
ScriptWitnessIndexProposing n -> Just $ L.ConwayProposing (L.AsIx n)

toScriptIndex
:: AlonzoEraOnwards era
-> L.PlutusPurpose L.AsIx (ShelleyLedgerEra era)
Expand All @@ -2738,6 +2918,7 @@ toScriptIndex sbe scriptPurposeIndex =
AlonzoEraOnwardsAlonzo -> toScriptIndexAlonzo scriptPurposeIndex
AlonzoEraOnwardsBabbage -> toScriptIndexAlonzo scriptPurposeIndex
AlonzoEraOnwardsConway -> toScriptIndexConway scriptPurposeIndex
AlonzoEraOnwardsDijkstra -> toScriptIndexConway scriptPurposeIndex

toScriptIndexAlonzo
:: L.AlonzoPlutusPurpose L.AsIx (ShelleyLedgerEra era)
Expand Down Expand Up @@ -3002,18 +3183,17 @@ extractWitnessableVotes
:: ConwayEraOnwards era
-> TxBodyContent BuildTx era
-> [(Witnessable VoterItem (ShelleyLedgerEra era), BuildTxWith BuildTx (Witness WitCtxStake era))]
extractWitnessableVotes e@ConwayEraOnwardsConway TxBodyContent{txVotingProcedures} =
extractWitnessableVotes e TxBodyContent{txVotingProcedures} =
List.nub
[ (WitVote vote, BuildTxWith wit)
| (vote, wit) <- getVotes e $ maybe TxVotingProceduresNone unFeatured txVotingProcedures
[ (conwayEraOnwardsConstraints e $ WitVote vote, BuildTxWith wit)
| (vote, wit) <- getVotes $ maybe TxVotingProceduresNone unFeatured txVotingProcedures
]
where
getVotes
:: ConwayEraOnwards era
-> TxVotingProcedures BuildTx era
:: TxVotingProcedures BuildTx era
-> [(L.Voter, Witness WitCtxStake era)]
getVotes ConwayEraOnwardsConway TxVotingProceduresNone = []
getVotes ConwayEraOnwardsConway (TxVotingProcedures allVotingProcedures (BuildTxWith scriptWitnessedVotes)) =
getVotes TxVotingProceduresNone = []
getVotes (TxVotingProcedures allVotingProcedures (BuildTxWith scriptWitnessedVotes)) =
[ (voter, wit)
| (voter, _) <- toList $ L.unVotingProcedures allVotingProcedures
, let wit = case Map.lookup voter scriptWitnessedVotes of
Expand All @@ -3025,9 +3205,9 @@ extractWitnessableProposals
:: ConwayEraOnwards era
-> TxBodyContent BuildTx era
-> [(Witnessable ProposalItem (ShelleyLedgerEra era), BuildTxWith BuildTx (Witness WitCtxStake era))]
extractWitnessableProposals e@ConwayEraOnwardsConway TxBodyContent{txProposalProcedures} =
extractWitnessableProposals e TxBodyContent{txProposalProcedures} =
List.nub
[ (WitProposal prop, BuildTxWith wit)
[ (conwayEraOnwardsConstraints e $ WitProposal prop, BuildTxWith wit)
| (Proposal prop, wit) <-
getProposals e $ maybe TxProposalProceduresNone unFeatured txProposalProcedures
]
Expand All @@ -3036,9 +3216,9 @@ extractWitnessableProposals e@ConwayEraOnwardsConway TxBodyContent{txProposalPro
:: ConwayEraOnwards era
-> TxProposalProcedures BuildTx era
-> [(Proposal era, Witness WitCtxStake era)]
getProposals ConwayEraOnwardsConway TxProposalProceduresNone = []
getProposals ConwayEraOnwardsConway (TxProposalProcedures txps) =
[ (Proposal p, wit)
getProposals _ TxProposalProceduresNone = []
getProposals w (TxProposalProcedures txps) =
[ (conwayEraOnwardsConstraints w $ Proposal p, wit)
| (p, BuildTxWith mScriptWit) <- toList txps
, let wit = case mScriptWit of
Just sWit -> ScriptWitness ScriptWitnessForStakeAddr sWit
Expand Down Expand Up @@ -3089,6 +3269,8 @@ toAuxiliaryData sbe txMetadata txAuxScripts =
guard (not (Map.null ms && null ss)) $> L.mkAlonzoTxAuxData ms ss
ShelleyBasedEraConway ->
guard (not (Map.null ms && null ss)) $> L.mkAlonzoTxAuxData ms ss
ShelleyBasedEraDijkstra ->
guard (not (Map.null ms && null ss)) $> L.mkAlonzoTxAuxData ms ss

-- ----------------------------------------------------------------------------
-- Other utilities helpful with making transaction bodies
Expand Down