Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
16bc9cc
Add `DijkstraEra era` to `CardanoEra era`
Jimbo4350 Jul 30, 2025
001d246
Add `ShelleyBasedEraDijkstra` to `ShelleyBasedEra era`
Jimbo4350 Jul 30, 2025
a28a2b1
Add Dijkstra era to eons
Jimbo4350 Jul 30, 2025
780947b
Add `DijkstraEra` to `Era era`
Jimbo4350 Jul 30, 2025
87a01f4
COMBINE ME: cabal file updates
Jimbo4350 Jul 30, 2025
47f4e7a
Update `QueryInShelleyBasedEra era result`
Jimbo4350 Jul 30, 2025
176954c
Update `makeShelleyTransactionBody` with Dijkstra era
Jimbo4350 Jul 30, 2025
64ee3aa
Update ledger types `PParamUpdatePurpose`, `CommitteePurpose` and
Jimbo4350 Jul 30, 2025
120135d
Propagate `ChainAccountState`
Jimbo4350 Jul 30, 2025
02ead07
Consensus related Dijkstra changes
Jimbo4350 Jul 30, 2025
94c001f
Temporary Cardano.Api.LedgerState Dijkstra update
Jimbo4350 Jul 30, 2025
1fd5b79
Update TxOut rendering to handle Dijkstra era
Jimbo4350 Jul 30, 2025
ed3d1f1
Update `eraSpecificLedgerTxBody` with Dijkstra era
Jimbo4350 Jul 30, 2025
2856fbb
Update `decodeBigLedgerPeerSnapshot` to support snapshot SRV names
Jimbo4350 Jul 30, 2025
20e73b5
Update generators with PlutusScriptV4
Jimbo4350 Jul 30, 2025
473d9a9
Introduce PlutusScriptV4
Jimbo4350 Jul 30, 2025
199a835
Propagate Dijkstra era
Jimbo4350 Jul 30, 2025
9d5b92f
Merge with PlutusV4 intro
Jimbo4350 Jul 30, 2025
5c09074
Merge with propagate Dikstra
Jimbo4350 Jul 30, 2025
7f037d5
REMOVE ME: Add ledger and consensus SRPs
Jimbo4350 Jul 30, 2025
0b0273f
Update nix flake
Jimbo4350 Jul 30, 2025
fcc5093
Update cardano-rpc with PlutusV4
Jimbo4350 Jul 31, 2025
c00071c
Implement `executeLocalStateQueryExprWithVersion`
Jimbo4350 Jul 31, 2025
04218dc
Fix parseHardForkTriggers
Jimbo4350 Jul 31, 2025
3943aa9
Fix cardano-rpc-test for protocol parameters roundtrip
carbolymer Aug 1, 2025
3c1a7c7
Update flake lock and ouroboros-network and plutus patches
palas Aug 1, 2025
115af33
Update wasm cache
palas Aug 1, 2025
7715043
Merge with: Consensus related Dijkstra change
Aug 7, 2025
459b232
Use exampleDijkstraGenesis value
Aug 7, 2025
11fbf44
Run formolu
Aug 7, 2025
391aeac
Fix HLS CI job
carbolymer Aug 11, 2025
ba0f883
Address lints
palas Aug 12, 2025
8f13ef3
Update `ouroboros-consensus` stanza
palas Aug 12, 2025
17470b5
wip: cardano-api with kes-agent support
fraser-iohk Jun 25, 2025
2662df0
WIP: update ledger and index-state
ana-pantilie Aug 21, 2025
6fc4dbf
Fix most compilation errors
ana-pantilie Aug 25, 2025
8bebd3a
Upgrade plutus to 1.52
ana-pantilie Aug 25, 2025
73553c8
Add bounds to quickcheck
ana-pantilie Aug 26, 2025
5c7d1c5
Add another quickcheck bound
ana-pantilie Aug 26, 2025
a0e354b
Fill in undefineds
Jimbo4350 Aug 26, 2025
5627c2e
Bump CHaP in nix flake
Jimbo4350 Sep 9, 2025
0afeea3
Rebase changes
Jimbo4350 Sep 10, 2025
d355965
WIP
Jimbo4350 Sep 10, 2025
f484f43
bump CHaP and hackage, remove ledger srp
carbolymer Sep 11, 2025
2415873
WIP: update dependencies accordingly, remove allow-newer
ana-pantilie Sep 11, 2025
00f064a
Fix type errors
Jimbo4350 Sep 11, 2025
fa66fee
WIP: add kes-agent, cardano-base SRPs; add constraints
ana-pantilie Sep 12, 2025
14e600e
Dependencies resolve in nix shell, but there are build failures
Jimbo4350 Sep 12, 2025
5cd0497
Comment out cardano-rpc from the project temporarily.
carbolymer Sep 15, 2025
ae5f2f0
Add Dijkstra era support to experimental eras
carbolymer Sep 19, 2025
c062448
Disable Alonzo Genesis cost models validation, since it is done by le…
carbolymer Sep 19, 2025
71ad99c
Update CHaP index state
ana-pantilie Sep 22, 2025
a9a3d49
Use newer process library, otherwise mingw32 build is broken
carbolymer Sep 22, 2025
2dcbe65
Change quasiquoter used in tests to raw-strings-qq - gets rid of proc…
carbolymer Sep 23, 2025
7388805
GHA: Bump HLS cache version
carbolymer Sep 23, 2025
6a71053
Fix wasm32 build
palas Sep 23, 2025
aa2acde
Update cache for wasm32
palas Sep 24, 2025
cee9b20
Bump ouroboros-consensus versions
jasagredo Oct 2, 2025
02a2274
Add L.Era* constraints to ShelleyBasedEra
carbolymer Oct 3, 2025
bcb16bf
Add Dijkstra Genesis defaults
carbolymer Oct 7, 2025
845b761
Export AsDijkstraEra
ana-pantilie Oct 10, 2025
02a27d0
Fix script hash calculation for transactions without redeemers, datum…
carbolymer Oct 14, 2025
ef9796d
Add SRP for plutus
ana-pantilie Oct 16, 2025
7b990ba
Fix wrong CBOR deserialisation in pool distribution query
carbolymer Oct 16, 2025
9060669
Update plutus srp
ana-pantilie Oct 16, 2025
1c46afa
Fix tests compilation issues
carbolymer Oct 16, 2025
6ff6731
Fix transaction autobalancing tests
carbolymer Oct 17, 2025
79163b1
Remove Plutus SRP, update CHaP index
ana-pantilie Oct 20, 2025
a6be460
Update CHaP index
ana-pantilie Oct 21, 2025
26ff608
Merge remote-tracking branch 'origin/master' into jordan/10.6-node-re…
ana-pantilie Oct 22, 2025
84078d2
Formatting
ana-pantilie Oct 22, 2025
e28dd6f
Fix pattern match on consensus era
carbolymer Oct 22, 2025
a73f17f
Address remarks
carbolymer Oct 22, 2025
ef9d4d5
Merge remote-tracking branch 'origin/master' into jordan/10.6-node-re…
ana-pantilie Oct 23, 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 ana-pantilie committed Sep 22, 2025
commit 176954ccd1f2d5bd3d22979298b49327f30eaa24
212 changes: 199 additions & 13 deletions cardano-api/src/Cardano/Api/Tx/Internal/Body.hs
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,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 @@ -1424,6 +1423,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 @@ -1588,6 +1594,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 @@ -1694,6 +1701,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 @@ -2031,7 +2043,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 @@ -2591,6 +2606,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 @@ -2695,6 +2863,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 @@ -2727,6 +2896,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 @@ -2736,6 +2916,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 @@ -3006,18 +3187,21 @@ extractWitnessableVotes
:: ConwayEraOnwards era
-> Maybe (Featured eon era (TxVotingProcedures BuildTx era))
-> [(Witnessable VoterItem (ShelleyLedgerEra era), BuildTxWith BuildTx (Witness WitCtxStake era))]
<<<<<<< HEAD
extractWitnessableVotes e@ConwayEraOnwardsConway txVotingProcedures =
=======
extractWitnessableVotes e TxBodyContent{txVotingProcedures} =
>>>>>>> e41bf72f9 (Update `makeShelleyTransactionBody` with Dijkstra era)
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 @@ -3030,9 +3214,9 @@ extractWitnessableProposals
-> Maybe
(Featured eon era (TxProposalProcedures BuildTx era))
-> [(Witnessable ProposalItem (ShelleyLedgerEra era), BuildTxWith BuildTx (Witness WitCtxStake era))]
extractWitnessableProposals e@ConwayEraOnwardsConway 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 @@ -3041,9 +3225,9 @@ extractWitnessableProposals e@ConwayEraOnwardsConway txProposalProcedures =
:: 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 @@ -3094,6 +3278,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