Skip to content

Commit f2d425f

Browse files
committed
TODO: Write EQ instance for AnyScriptWitness
1 parent 2e87bfd commit f2d425f

File tree

3 files changed

+110
-1
lines changed

3 files changed

+110
-1
lines changed

cardano-api/cardano-api.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ library
7272
Cardano.Api.Era
7373
Cardano.Api.Error
7474
Cardano.Api.Experimental
75+
Cardano.Api.Experimental.AnyScriptWitness
7576
Cardano.Api.Experimental.Certificate
7677
Cardano.Api.Experimental.Era
7778
Cardano.Api.Experimental.Plutus
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{-# LANGUAGE GADTs #-}
2+
{-# LANGUAGE StandaloneDeriving #-}
3+
4+
module Cardano.Api.Experimental.AnyScriptWitness
5+
( AnyScriptWitness(..)
6+
) where
7+
8+
import Cardano.Api.Experimental.Simple.Script
9+
import Cardano.Api.Experimental.Plutus.Internal.ScriptWitness
10+
11+
data AnyScriptWitness era where
12+
AnyScriptWitnessSimple :: SimpleScriptOrReferenceInput era -> AnyScriptWitness era
13+
AnyScriptWitnessPlutus :: PlutusScriptWitness lang purpose era -> AnyScriptWitness era
14+
15+
16+
deriving instance Show (AnyScriptWitness era)
17+
instance Eq (AnyScriptWitness era) where
18+
-- TODO LEFT OFF HERE!

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

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ where
1919
import Cardano.Api.Address
2020
import Cardano.Api.Certificate.Internal
2121
import Cardano.Api.Era.Internal.Eon.Convert
22+
import Cardano.Api.Experimental.AnyScriptWitness
23+
import Cardano.Api.Experimental.AnyScriptWitness qualified as Exp
2224
import Cardano.Api.Experimental.Era
2325
import Cardano.Api.Experimental.Plutus.Internal.ScriptWitness
2426
import Cardano.Api.Experimental.Tx.Internal.AnyWitness
@@ -28,7 +30,12 @@ import Cardano.Api.Experimental.Tx.Internal.Type
2830
import Cardano.Api.Key.Internal qualified as Api
2931
import Cardano.Api.Ledger.Internal.Reexport qualified as L
3032
import 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+
)
3239
import Cardano.Api.Tx.Internal.TxIn
3340
import 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+
759849
traverseScriptWitnesses
760850
:: [(a, Either (TxBodyErrorAutoBalance era) b)]
761851
-> Either (TxBodyErrorAutoBalance era) [(a, b)]

0 commit comments

Comments
 (0)