|
| 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 | + ] |
0 commit comments