Skip to content

Commit 94202d1

Browse files
authored
Merge pull request #1313 from IntersectMBO/serialise-dijkstra-transactions
Serialise and witness Dijkstra-era transactions
2 parents 81db72a + cf197e7 commit 94202d1

9 files changed

Lines changed: 44 additions & 6 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
description: |
2+
Dijkstra transactions can now be serialised and witnessed: the `Tx DijkstraEra` text-envelope types work (witnessed and unwitnessed), Plutus V1-V3 scripts are supported in the era (the ledger's maximum for Dijkstra is V3 for now), and `createCompatibleTx` handles Dijkstra. By the era's design, transactions cannot be marked script-invalid in Dijkstra.
3+
kind:
4+
- feature
5+
pr: 1313
6+
project: cardano-api
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
description: |
2+
cardano-rpc now gets `DijkstraTxCert` through `cardano-api`'s reexport instead of importing it directly from the ledger; no user-facing changes.
3+
kind:
4+
- refactoring
5+
pr: 1313
6+
project: cardano-rpc

cardano-api/gen/Test/Gen/Cardano/Api/Typed.hs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1171,7 +1171,15 @@ genTxScriptValidity :: CardanoEra era -> Gen (TxScriptValidity era)
11711171
genTxScriptValidity =
11721172
inEonForEra
11731173
(pure TxScriptValidityNone)
1174-
(\w -> TxScriptValidity w <$> genScriptValidity)
1174+
( \w ->
1175+
TxScriptValidity w <$> case w of
1176+
AlonzoEraOnwardsAlonzo -> genScriptValidity
1177+
AlonzoEraOnwardsBabbage -> genScriptValidity
1178+
AlonzoEraOnwardsConway -> genScriptValidity
1179+
-- Dijkstra does not support IsValid False: the CBOR encoding omits the
1180+
-- isValid flag entirely and decoding always yields IsValid True.
1181+
AlonzoEraOnwardsDijkstra -> pure ScriptValid
1182+
)
11751183

11761184
genScriptValidity :: Gen ScriptValidity
11771185
genScriptValidity = Gen.element [ScriptInvalid, ScriptValid]

cardano-api/src/Cardano/Api/Compatible/Tx.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ where
1818
import Cardano.Api.Address (StakeCredential)
1919
import Cardano.Api.Era
2020
import Cardano.Api.Experimental.AnyScriptWitness
21+
import Cardano.Api.Experimental.Era (obtainCommonConstraints)
2122
import Cardano.Api.Experimental.Tx qualified as Exp
2223
import Cardano.Api.Experimental.Tx.Internal.AnyWitness
2324
import Cardano.Api.Experimental.Tx.Internal.AnyWitness qualified as Exp
@@ -114,7 +115,7 @@ createCompatibleTx sbe ins outs extraDatums txFee' anyProtocolUpdate anyVote txC
114115
]
115116
-- append proposal reference inputs & set proposal procedures
116117
updateTxBody :: Endo (L.TxBody L.TopTx (ShelleyLedgerEra era)) =
117-
conwayEraOnwardsConstraints conwayOnwards $
118+
obtainCommonConstraints (convert conwayOnwards) $
118119
Endo $
119120
(L.referenceInputsTxBodyL %~ (<> fromList referenceInputs))
120121
. (L.proposalProceduresTxBodyL .~ proposals)
@@ -171,7 +172,7 @@ createCompatibleTx sbe ins outs extraDatums txFee' anyProtocolUpdate anyVote txC
171172
-> L.Tx L.TopTx (ShelleyLedgerEra era)
172173
-> L.Tx L.TopTx (ShelleyLedgerEra era)
173174
overwriteVotingProcedures conwayOnwards votingProcedures =
174-
conwayEraOnwardsConstraints conwayOnwards $
175+
obtainCommonConstraints (convert conwayOnwards) $
175176
(L.bodyTxL . L.votingProceduresTxBodyL) .~ votingProcedures
176177

177178
indexedTxCerts
@@ -319,7 +320,7 @@ indexWitnessedTxProposalProcedures
319320
)
320321
]
321322
indexWitnessedTxProposalProcedures cOnwards (Exp.TxProposalProcedures proposals) = do
322-
let allProposalsList = zip [0 ..] $ conwayEraOnwardsConstraints cOnwards $ toList proposals
323+
let allProposalsList = zip [0 ..] $ obtainCommonConstraints (convert cOnwards) $ toList proposals
323324
[ (proposal, (ScriptWitnessIndexProposing ix, anyWitness))
324325
| (ix, (proposal, anyWitness)) <- allProposalsList
325326
]

cardano-api/src/Cardano/Api/Ledger/Internal/Reexport.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ module Cardano.Api.Ledger.Internal.Reexport
8585
, valueFromList
8686
-- Dijkstra
8787
, DijkstraPlutusPurpose (..)
88+
, DijkstraTxCert (..)
8889
-- Conway
8990
, Anchor (..)
9091
, Committee (..)
@@ -397,6 +398,7 @@ import Cardano.Ledger.Core
397398
import Cardano.Ledger.Credential (Credential (..), credToText)
398399
import Cardano.Ledger.DRep (DRep (..), drepAnchorL, drepDepositL, drepExpiryL)
399400
import Cardano.Ledger.Dijkstra.Scripts (DijkstraPlutusPurpose (..))
401+
import Cardano.Ledger.Dijkstra.TxCert (DijkstraTxCert (..))
400402
import Cardano.Ledger.Hashes
401403
( ADDRHASH
402404
, SafeHash

cardano-api/src/Cardano/Api/Plutus/Internal/Script.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,12 @@ scriptLanguageSupportedInEra era lang =
660660
Just PlutusScriptV2InConway
661661
(ShelleyBasedEraConway, PlutusScriptLanguage PlutusScriptV3) ->
662662
Just PlutusScriptV3InConway
663+
(ShelleyBasedEraDijkstra, PlutusScriptLanguage PlutusScriptV1) ->
664+
Just PlutusScriptV1InDijkstra
665+
(ShelleyBasedEraDijkstra, PlutusScriptLanguage PlutusScriptV2) ->
666+
Just PlutusScriptV2InDijkstra
667+
(ShelleyBasedEraDijkstra, PlutusScriptLanguage PlutusScriptV3) ->
668+
Just PlutusScriptV3InDijkstra
663669
_ -> Nothing
664670

665671
languageOfScriptLanguageInEra

cardano-api/src/Cardano/Api/Serialise/TextEnvelope/Internal.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,14 @@ legacyComparison (TextEnvelopeType expectedType) (TextEnvelopeType actualType) =
181181
("Tx AlonzoEra", "Witnessed Tx AlonzoEra") -> True
182182
("Tx BabbageEra", "Witnessed Tx BabbageEra") -> True
183183
("Tx ConwayEra", "Witnessed Tx ConwayEra") -> True
184+
("Tx DijkstraEra", "Witnessed Tx DijkstraEra") -> True
184185
("TxSignedShelley", "Unwitnessed Tx ShelleyEra") -> True
185186
("Tx AllegraEra", "Unwitnessed Tx AllegraEra") -> True
186187
("Tx MaryEra", "Unwitnessed Tx MaryEra") -> True
187188
("Tx AlonzoEra", "Unwitnessed Tx AlonzoEra") -> True
188189
("Tx BabbageEra", "Unwitnessed Tx BabbageEra") -> True
189190
("Tx ConwayEra", "Unwitnessed Tx ConwayEra") -> True
191+
("Tx DijkstraEra", "Unwitnessed Tx DijkstraEra") -> True
190192
("Certificate", "CertificateConway") -> True
191193
("Certificate", "CertificateShelley") -> True
192194
(expectedOther, expectedActual) -> expectedOther == expectedActual
@@ -394,22 +396,26 @@ textEnvelopeTypeToEra =
394396
"Tx AlonzoEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAlonzo
395397
"Tx BabbageEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraBabbage
396398
"Tx ConwayEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraConway
399+
"Tx DijkstraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraDijkstra
397400
"Witnessed Tx ShelleyEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraShelley
398401
"Witnessed Tx AllegraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAllegra
399402
"Witnessed Tx MaryEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraMary
400403
"Witnessed Tx AlonzoEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAlonzo
401404
"Witnessed Tx BabbageEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraBabbage
402405
"Witnessed Tx ConwayEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraConway
406+
"Witnessed Tx DijkstraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraDijkstra
403407
"Unwitnessed Tx ShelleyEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraShelley
404408
"Unwitnessed Tx AllegraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAllegra
405409
"Unwitnessed Tx MaryEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraMary
406410
"Unwitnessed Tx AlonzoEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAlonzo
407411
"Unwitnessed Tx BabbageEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraBabbage
408412
"Unwitnessed Tx ConwayEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraConway
413+
"Unwitnessed Tx DijkstraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraDijkstra
409414
"TxWitness ShelleyEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraShelley
410415
"TxWitness AllegraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAllegra
411416
"TxWitness MaryEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraMary
412417
"TxWitness AlonzoEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAlonzo
413418
"TxWitness BabbageEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraBabbage
414419
"TxWitness ConwayEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraConway
420+
"TxWitness DijkstraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraDijkstra
415421
unknownCddlType -> Left $ TextEnvelopeUnknownType unknownCddlType

cardano-api/src/Cardano/Api/Serialise/TextEnvelope/Internal/Cddl.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,24 +317,28 @@ cddlTypeToEra =
317317
"Tx AlonzoEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAlonzo
318318
"Tx BabbageEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraBabbage
319319
"Tx ConwayEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraConway
320+
"Tx DijkstraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraDijkstra
320321
"Witnessed Tx ShelleyEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraShelley
321322
"Witnessed Tx AllegraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAllegra
322323
"Witnessed Tx MaryEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraMary
323324
"Witnessed Tx AlonzoEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAlonzo
324325
"Witnessed Tx BabbageEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraBabbage
325326
"Witnessed Tx ConwayEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraConway
327+
"Witnessed Tx DijkstraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraDijkstra
326328
"Unwitnessed Tx ShelleyEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraShelley
327329
"Unwitnessed Tx AllegraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAllegra
328330
"Unwitnessed Tx MaryEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraMary
329331
"Unwitnessed Tx AlonzoEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAlonzo
330332
"Unwitnessed Tx BabbageEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraBabbage
331333
"Unwitnessed Tx ConwayEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraConway
334+
"Unwitnessed Tx DijkstraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraDijkstra
332335
"TxWitness ShelleyEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraShelley
333336
"TxWitness AllegraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAllegra
334337
"TxWitness MaryEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraMary
335338
"TxWitness AlonzoEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraAlonzo
336339
"TxWitness BabbageEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraBabbage
337340
"TxWitness ConwayEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraConway
341+
"TxWitness DijkstraEra" -> return $ AnyShelleyBasedEra ShelleyBasedEraDijkstra
338342
unknownCddlType -> Left $ TextEnvelopeCddlErrUnknownType unknownCddlType
339343

340344
{-# DEPRECATED readFileTextEnvelopeCddlAnyOf "Use readFileTextEnvelopeAnyOf instead." #-}

cardano-rpc/src/Cardano/Rpc/Server/Internal/UtxoRpc/Type/Certificate.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ import Cardano.Ledger.BaseTypes qualified as L
2424
import Cardano.Ledger.Binary qualified as L (ipv4ToBytes, ipv6ToBytes)
2525
import Cardano.Ledger.Coin qualified as L (DeltaCoin (..))
2626
import Cardano.Ledger.Dijkstra.TxCert qualified as L
27-
( DijkstraTxCert (..)
28-
, dijkstraToConwayDelegCert
27+
( dijkstraToConwayDelegCert
2928
)
3029
import Cardano.Ledger.Hashes qualified as L (ScriptHash (..), VRFVerKeyHash (..))
3130

0 commit comments

Comments
 (0)