Skip to content

Commit b44b5b9

Browse files
committed
Implement extractAllIndexedPlutusScriptWitnesses
1 parent eec5722 commit b44b5b9

6 files changed

Lines changed: 85 additions & 2 deletions

File tree

cardano-api/cardano-api.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ library
225225
Cardano.Api.Experimental.Plutus.Internal.ScriptWitness
226226
Cardano.Api.Experimental.Plutus.Internal.Shim.LegacyScripts
227227
Cardano.Api.Experimental.Tx.Internal.AnyWitness
228+
Cardano.Api.Experimental.Tx.Internal.Body
228229
Cardano.Api.Experimental.Tx.Internal.Certificate
229230
Cardano.Api.Experimental.Tx.Internal.Fee
230231
Cardano.Api.Experimental.Tx.Internal.TxScriptWitnessRequirements

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,12 @@ data PlutusScriptInEra (lang :: L.Language) era where
3636

3737
deriving instance Show (PlutusScriptInEra lang era)
3838

39+
deriving instance Eq (PlutusScriptInEra lang era)
40+
3941
-- | You can provide the plutus script directly in the transaction
4042
-- or a reference input that points to the script in the UTxO.
4143
-- Using a reference script saves space in your transaction.
4244
data PlutusScriptOrReferenceInput lang era
4345
= PScript (PlutusScriptInEra lang era)
4446
| PReferenceScript TxIn
45-
deriving Show
47+
deriving (Show, Eq)

cardano-api/src/Cardano/Api/Experimental/Simple/Script.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ data SimpleScript era where
1818

1919
deriving instance Show (SimpleScript era)
2020

21+
deriving instance Eq (SimpleScript era)
22+
2123
data SimpleScriptOrReferenceInput era
2224
= SScript (SimpleScript era)
2325
| SReferenceScript TxIn
24-
deriving Show
26+
deriving (Show, Eq)

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ module Cardano.Api.Experimental.Tx
136136
, TxScriptWitnessRequirements (..)
137137

138138
-- ** Collecting plutus script witness related transaction requirements.
139+
, extractAllIndexedPlutusScriptWitnesses
139140
, getTxScriptWitnessesRequirements
140141
, obtainMonoidConstraint
141142

@@ -151,6 +152,7 @@ import Cardano.Api.Era.Internal.Eon.ShelleyBasedEra
151152
import Cardano.Api.Era.Internal.Feature
152153
import Cardano.Api.Experimental.Era
153154
import Cardano.Api.Experimental.Tx.Internal.AnyWitness
155+
import Cardano.Api.Experimental.Tx.Internal.Body
154156
import Cardano.Api.Experimental.Tx.Internal.TxScriptWitnessRequirements
155157
import Cardano.Api.HasTypeProxy (HasTypeProxy (..), Proxy, asType)
156158
import Cardano.Api.Ledger.Internal.Reexport (StrictMaybe (..), maybeToStrictMaybe)
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{-# LANGUAGE DataKinds #-}
2+
{-# LANGUAGE GADTs #-}
3+
{-# LANGUAGE ScopedTypeVariables #-}
4+
5+
module Cardano.Api.Experimental.Tx.Internal.Body
6+
( extractAllIndexedPlutusScriptWitnesses
7+
)
8+
where
9+
10+
import Cardano.Api.Era
11+
import Cardano.Api.Experimental.Era
12+
import Cardano.Api.Experimental.Plutus
13+
import Cardano.Api.Plutus.Internal.Script
14+
import Cardano.Api.Tx.Internal.Body
15+
16+
import Cardano.Binary qualified as CBOR
17+
18+
extractAllIndexedPlutusScriptWitnesses
19+
:: forall era
20+
. Era era
21+
-> TxBodyContent BuildTx era
22+
-> Either
23+
CBOR.DecoderError
24+
[AnyIndexedPlutusScriptWitness (LedgerEra era)]
25+
extractAllIndexedPlutusScriptWitnesses era b = obtainCommonConstraints era $ do
26+
let sbe = convert era
27+
aeon = convert era
28+
legacyTxInWits = extractWitnessableTxIns aeon b
29+
legacyCertWits = extractWitnessableCertificates aeon b
30+
legacyMintWits = extractWitnessableMints aeon b
31+
proposalWits
32+
:: [(Witnessable ProposalItem (ShelleyLedgerEra era), BuildTxWith BuildTx (Witness WitCtxStake era))] =
33+
caseShelleyToBabbageOrConwayEraOnwards
34+
(const [])
35+
(`extractWitnessableProposals` b)
36+
sbe
37+
legacyWithdrawalWits = extractWitnessableWithdrawals aeon b
38+
legacyVoteWits
39+
:: [(Witnessable VoterItem (ShelleyLedgerEra era), BuildTxWith BuildTx (Witness WitCtxStake era))] =
40+
caseShelleyToBabbageOrConwayEraOnwards
41+
(const [])
42+
(`extractWitnessableVotes` b)
43+
sbe
44+
45+
txInWits <- legacyWitnessConversion aeon legacyTxInWits
46+
let indexedScriptTxInWits = alonzoEraOnwardsConstraints aeon $ createIndexedPlutusScriptWitnesses txInWits
47+
48+
certWits <- legacyWitnessConversion aeon legacyCertWits
49+
let indexedCertScriptWits = alonzoEraOnwardsConstraints aeon $ createIndexedPlutusScriptWitnesses certWits
50+
51+
mintWits <- legacyWitnessConversion aeon legacyMintWits
52+
let indexedMintScriptWits = alonzoEraOnwardsConstraints aeon $ createIndexedPlutusScriptWitnesses mintWits
53+
54+
withdrawalWits <- legacyWitnessConversion aeon legacyWithdrawalWits
55+
let indexedWithdrawalScriptWits = alonzoEraOnwardsConstraints aeon $ createIndexedPlutusScriptWitnesses withdrawalWits
56+
57+
proposalScriptWits <- legacyWitnessConversion aeon proposalWits
58+
let indexedProposalScriptWits = alonzoEraOnwardsConstraints aeon $ createIndexedPlutusScriptWitnesses proposalScriptWits
59+
60+
voteWits <- legacyWitnessConversion aeon legacyVoteWits
61+
let indexedVoteScriptWits = alonzoEraOnwardsConstraints aeon $ createIndexedPlutusScriptWitnesses voteWits
62+
return $
63+
mconcat
64+
[ indexedScriptTxInWits
65+
, indexedMintScriptWits
66+
, indexedCertScriptWits
67+
, indexedWithdrawalScriptWits
68+
, indexedProposalScriptWits
69+
, indexedVoteScriptWits
70+
]

cardano-api/src/Cardano/Api/Tx/Internal/Body.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,12 @@ module Cardano.Api.Tx.Internal.Body
193193
, convValidityUpperBound
194194
, convVotingProcedures
195195
, convWithdrawals
196+
, extractWitnessableCertificates
197+
, extractWitnessableTxIns
198+
, extractWitnessableMints
199+
, extractWitnessableProposals
200+
, extractWitnessableWithdrawals
201+
, extractWitnessableVotes
196202
, getScriptIntegrityHash
197203
, mkCommonTxBody
198204
, toAuxiliaryData

0 commit comments

Comments
 (0)