1919import Cardano.Api.Address
2020import Cardano.Api.Certificate.Internal
2121import Cardano.Api.Era.Internal.Eon.Convert
22+ import Cardano.Api.Experimental.AnyScriptWitness
23+ import Cardano.Api.Experimental.AnyScriptWitness qualified as Exp
2224import Cardano.Api.Experimental.Era
2325import Cardano.Api.Experimental.Plutus.Internal.ScriptWitness
2426import Cardano.Api.Experimental.Tx.Internal.AnyWitness
@@ -28,7 +30,12 @@ import Cardano.Api.Experimental.Tx.Internal.Type
2830import Cardano.Api.Key.Internal qualified as Api
2931import Cardano.Api.Ledger.Internal.Reexport qualified as L
3032import Cardano.Api.ProtocolParameters
31- import Cardano.Api.Tx.Internal.Body (CtxTx , ScriptWitnessIndex (.. ), toScriptIndex )
33+ import Cardano.Api.Tx.Internal.Body
34+ ( AnyScriptWitness (AnyScriptWitness )
35+ , CtxTx
36+ , ScriptWitnessIndex (.. )
37+ , toScriptIndex
38+ )
3239import Cardano.Api.Tx.Internal.TxIn
3340import Cardano.Api.Value.Internal
3441
@@ -756,6 +763,89 @@ substituteExecutionUnits
756763 pure $
757764 mkTxProposalProcedures substitutedExecutionUnits
758765
766+ collectTxBodyScriptWitnesses
767+ :: forall era
768+ . IsEra era
769+ => TxBodyContent (LedgerEra era )
770+ -> [(ScriptWitnessIndex , Exp. AnyScriptWitness (LedgerEra era ))]
771+ collectTxBodyScriptWitnesses
772+ TxBodyContent
773+ { txIns
774+ , txWithdrawals
775+ , txCertificates
776+ , txMintValue
777+ , txVotingProcedures
778+ , txProposalProcedures
779+ } =
780+ concat
781+ [ scriptWitnessesTxIns txIns
782+ , scriptWitnessesWithdrawals txWithdrawals
783+ , scriptWitnessesCertificates txCertificates
784+ , scriptWitnessesMinting txMintValue
785+ , maybe [] scriptWitnessesVoting txVotingProcedures
786+ -- , maybe [] scriptWitnessesProposing txProposalProcedures
787+ ]
788+ where
789+ scriptWitnessesTxIns
790+ :: [(TxIn , AnyWitness (LedgerEra era ))]
791+ -> [(ScriptWitnessIndex , Exp. AnyScriptWitness (LedgerEra era ))]
792+ scriptWitnessesTxIns txIns' =
793+ List. nub
794+ [ (ix, anyScriptWitness)
795+ | (ix, _, Just anyScriptWitness) <- fmap toAnyScriptWitness <$> indexTxIns txIns'
796+ ]
797+
798+ scriptWitnessesWithdrawals
799+ :: TxWithdrawals (LedgerEra era )
800+ -> [(ScriptWitnessIndex , Exp. AnyScriptWitness (LedgerEra era ))]
801+ scriptWitnessesWithdrawals txw =
802+ List. nub
803+ [ (ix, anyScriptWitness)
804+ | (ix, _, _, Just anyScriptWitness) <- fmap toAnyScriptWitness <$> indexTxWithdrawals txw
805+ ]
806+
807+ scriptWitnessesCertificates
808+ :: TxCertificates (LedgerEra era )
809+ -> [(ScriptWitnessIndex , Exp. AnyScriptWitness (LedgerEra era ))]
810+ scriptWitnessesCertificates txc =
811+ List. nub
812+ [ (ix, anyScriptWitness)
813+ | (ix, _, _, Just anyScriptWitness) <- fmap toAnyScriptWitness <$> indexTxCertificates txc
814+ ]
815+
816+ scriptWitnessesMinting
817+ :: TxMintValue (LedgerEra era )
818+ -> [(ScriptWitnessIndex , Exp. AnyScriptWitness (LedgerEra era ))]
819+ scriptWitnessesMinting txMintValue' =
820+ List. nub
821+ [ (ix, anyScriptWitness)
822+ | (ix, _, _, Just anyScriptWitness) <- fmap toAnyScriptWitness <$> indexTxMintValue txMintValue'
823+ ]
824+
825+ scriptWitnessesVoting
826+ :: TxVotingProcedures (LedgerEra era )
827+ -> [(ScriptWitnessIndex , Exp. AnyScriptWitness (LedgerEra era ))]
828+ scriptWitnessesVoting txv =
829+ List. nub
830+ [ (ix, anyScriptWitness)
831+ | (ix, _, Just anyScriptWitness) <- fmap toAnyScriptWitness <$> indexTxVotingProcedures txv
832+ ]
833+
834+ scriptWitnessesProposing
835+ :: TxProposalProcedures (LedgerEra era )
836+ -> [(ScriptWitnessIndex , Exp. AnyScriptWitness (LedgerEra era ))]
837+ scriptWitnessesProposing txp =
838+ List. nub
839+ [ (ix, anyScriptWitness)
840+ | (_, (ix, Just anyScriptWitness)) <-
841+ (fmap . fmap ) toAnyScriptWitness <$> indexWitnessedTxProposalProcedures txp
842+ ]
843+
844+ toAnyScriptWitness :: AnyWitness era -> Maybe (Exp. AnyScriptWitness era )
845+ toAnyScriptWitness AnyKeyWitnessPlaceholder = Nothing
846+ toAnyScriptWitness (AnySimpleScriptWitness ssw) = Just $ AnyScriptWitnessSimple ssw
847+ toAnyScriptWitness (AnyPlutusScriptWitness psw) = Just $ AnyScriptWitnessPlutus psw
848+
759849traverseScriptWitnesses
760850 :: [(a , Either (TxBodyErrorAutoBalance era ) b )]
761851 -> Either (TxBodyErrorAutoBalance era ) [(a , b )]
0 commit comments