@@ -48,6 +48,7 @@ import Cardano.Api.Experimental.Tx.Internal.AnyWitness
4848 )
4949import Cardano.Api.Experimental.Tx.Internal.TxScriptWitnessRequirements
5050 ( TxScriptWitnessRequirements (.. )
51+ , getTxScriptWitnessesRequirements
5152 )
5253import Cardano.Api.Experimental.Tx.Internal.Type
5354import Cardano.Api.Key.Internal
@@ -540,12 +541,24 @@ collectTxBodyScriptWitnessRequirements
540541 (getDatums txInsReference txOuts)
541542 mempty
542543
543- let txInWits = getTxScriptWitnessRequirements $ extractWitnessableTxIns txIns
544- txWithdrawalWits = getTxScriptWitnessRequirements $ extractWitnessableWithdrawals txWithdrawals
545- txCertWits = getTxScriptWitnessRequirements $ extractWitnessableCertificates txCertificates
546- txMintWits = getTxScriptWitnessRequirements $ extractWitnessableMints txMintValue
547- txVotingWits = getTxScriptWitnessRequirements $ extractWitnessableVotes txVotingProcedures
548- txProposalWits = getTxScriptWitnessRequirements $ extractWitnessableProposals txProposalProcedures
544+ let txInWits =
545+ obtainMonoidConstraint (useEra @ era ) getTxScriptWitnessesRequirements $
546+ extractWitnessableTxIns txIns
547+ txWithdrawalWits =
548+ obtainMonoidConstraint (useEra @ era ) getTxScriptWitnessesRequirements $
549+ extractWitnessableWithdrawals txWithdrawals
550+ txCertWits =
551+ obtainMonoidConstraint (useEra @ era ) getTxScriptWitnessesRequirements $
552+ extractWitnessableCertificates txCertificates
553+ txMintWits =
554+ obtainMonoidConstraint (useEra @ era ) getTxScriptWitnessesRequirements $
555+ extractWitnessableMints txMintValue
556+ txVotingWits =
557+ obtainMonoidConstraint (useEra @ era ) getTxScriptWitnessesRequirements $
558+ extractWitnessableVotes txVotingProcedures
559+ txProposalWits =
560+ obtainMonoidConstraint (useEra @ era ) getTxScriptWitnessesRequirements $
561+ extractWitnessableProposals txProposalProcedures
549562
550563 return $
551564 obtainMonoidConstraint (useEra @ era ) $
@@ -559,57 +572,6 @@ collectTxBodyScriptWitnessRequirements
559572 , txProposalWits
560573 ]
561574
562- getTxScriptWitnessRequirements
563- :: forall era witnessable
564- . IsEra era
565- => [(Witnessable witnessable (LedgerEra era ), AnyWitness (LedgerEra era ))]
566- -> TxScriptWitnessRequirements (LedgerEra era )
567- getTxScriptWitnessRequirements wits =
568- let era = useEra @ era
569- TxScriptWitnessRequirements l s d _ =
570- obtainMonoidConstraint era $
571- mconcat
572- [ TxScriptWitnessRequirements
573- (maybe mempty Set. singleton $ getAnyWitnessPlutusLanguage anyWit)
574- (maybe mempty return $ getAnyWitnessScript anyWit)
575- (getAnyWitnessScriptData anyWit)
576- (obtainCommonConstraints era mempty )
577- | (_, anyWit) <- wits
578- ]
579- in TxScriptWitnessRequirements l s d (getAnyWitnessRedeemerPointerMap wits)
580-
581- -- | The transaction's redeemer pointer map allows the ledger to connect a redeemer and execution unit pairing to the relevant
582- -- script. The ledger basically reconstructs the indicies (redeemer pointers) of this map can then look up the relevant
583- -- execution units/redeemer pairing. NB: the redeemer pointer has been renamed to 'PlutusPurpose AsIndex' in the ledger.
584- getAnyWitnessRedeemerPointerMap
585- :: forall era witnessable
586- . IsEra era
587- => [(Witnessable witnessable (LedgerEra era ), AnyWitness (LedgerEra era ))]
588- -> L. Redeemers (LedgerEra era )
589- getAnyWitnessRedeemerPointerMap anyWit =
590- constructRedeeemerPointerMap $
591- obtainCommonConstraints (useEra @ era ) $
592- createIndexedPlutusScriptWitnesses anyWit
593-
594- constructRedeeemerPointerMap
595- :: forall era
596- . IsEra era
597- => [AnyIndexedPlutusScriptWitness (LedgerEra era )]
598- -> L. Redeemers (LedgerEra era )
599- constructRedeeemerPointerMap scriptWits =
600- let redeemerPointers = map constructRedeemerPointer scriptWits
601- in obtainCommonConstraints (useEra @ era ) $ mconcat redeemerPointers
602-
603- -- | An 'IndexedPlutusScriptWitness' contains everything we need to construct a single
604- -- entry in the redeemer pointer map.
605- constructRedeemerPointer
606- :: AnyIndexedPlutusScriptWitness (LedgerEra era )
607- -> L. Redeemers (LedgerEra era )
608- constructRedeemerPointer (AnyIndexedPlutusScriptWitness (IndexedPlutusScriptWitness _ purpose scriptWit)) =
609- let PlutusScriptWitness _ _ _ redeemer execUnits = scriptWit
610- in L. Redeemers $
611- fromList [(purpose, (toAlonzoData redeemer, toAlonzoExUnits execUnits))]
612-
613575obtainMonoidConstraint
614576 :: Era era
615577 -> (Monoid (TxScriptWitnessRequirements (LedgerEra era )) => a )
@@ -618,99 +580,6 @@ obtainMonoidConstraint eon = case eon of
618580 ConwayEra -> id
619581 DijkstraEra -> id
620582
621- getAnyWitnessScript
622- :: forall era
623- . IsEra era
624- => AnyWitness (LedgerEra era )
625- -> Maybe (L. Script (LedgerEra era ))
626- getAnyWitnessScript AnyKeyWitnessPlaceholder = Nothing
627- getAnyWitnessScript ss@ (AnySimpleScriptWitness {}) =
628- case useEra @ era of
629- ConwayEra -> obtainCommonConstraints (useEra @ era ) (getAnyWitnessSimpleScript ss)
630- DijkstraEra -> obtainCommonConstraints (useEra @ era ) (getAnyWitnessSimpleScript ss)
631- getAnyWitnessScript ps@ (AnyPlutusScriptWitness {}) =
632- case useEra @ era of
633- ConwayEra -> L. PlutusScript <$> getAnyWitnessPlutusScript ps
634- DijkstraEra -> L. PlutusScript <$> getAnyWitnessPlutusScript ps
635-
636- getAnyWitnessPlutusScript
637- :: forall era
638- . IsEra era
639- => AnyWitness (LedgerEra era )
640- -> Maybe (L. PlutusScript (LedgerEra era ))
641- getAnyWitnessPlutusScript AnyKeyWitnessPlaceholder = Nothing
642- getAnyWitnessPlutusScript (AnySimpleScriptWitness _) = Nothing
643- getAnyWitnessPlutusScript
644- ( AnyPlutusScriptWitness
645- (PlutusScriptWitness l (PScript (PlutusScriptInEra plutusScriptRunnable)) _ _ _)
646- ) = return $ fromPlutusRunnable l plutusScriptRunnable
647- getAnyWitnessPlutusScript (AnyPlutusScriptWitness (PlutusScriptWitness _ (PReferenceScript {}) _ _ _)) =
648- Nothing
649-
650- -- It should be noted that 'PlutusRunnable' is constructed via deserialization. The deserialization
651- -- instance lives in ledger and will fail for an invalid script language/era pairing.
652- fromPlutusRunnable
653- :: forall era lang
654- . IsEra era
655- => L. SLanguage lang
656- -> L. PlutusRunnable lang
657- -> L. PlutusScript (LedgerEra era )
658- fromPlutusRunnable L. SPlutusV1 runnable =
659- case useEra @ era of
660- ConwayEra ->
661- let plutusScript = L. plutusFromRunnable runnable
662- in L. ConwayPlutusV1 plutusScript
663- DijkstraEra ->
664- let plutusScript = L. plutusFromRunnable runnable
665- in Dijkstra. DijkstraPlutusV1 plutusScript
666- fromPlutusRunnable L. SPlutusV2 runnable =
667- case useEra @ era of
668- ConwayEra ->
669- let plutusScript = L. plutusFromRunnable runnable
670- in L. ConwayPlutusV2 plutusScript
671- DijkstraEra ->
672- let plutusScript = L. plutusFromRunnable runnable
673- in Dijkstra. DijkstraPlutusV2 plutusScript
674- fromPlutusRunnable L. SPlutusV3 runnable =
675- case useEra @ era of
676- ConwayEra ->
677- let plutusScript = L. plutusFromRunnable runnable
678- in L. ConwayPlutusV3 plutusScript
679- DijkstraEra ->
680- let plutusScript = L. plutusFromRunnable runnable
681- in Dijkstra. DijkstraPlutusV3 plutusScript
682- fromPlutusRunnable L. SPlutusV4 runnable =
683- case useEra @ era of
684- ConwayEra ->
685- let plutusScript = L. plutusFromRunnable runnable
686- in error " fromPlutusRunnable: ConwayPlutusV4" plutusScript
687- DijkstraEra ->
688- let plutusScript = L. plutusFromRunnable runnable
689- in Dijkstra. DijkstraPlutusV4 plutusScript
690-
691- -- | NB this does not include datums from inline datums existing at tx outputs!
692- getAnyWitnessScriptData
693- :: forall era . IsEra era => AnyWitness (LedgerEra era ) -> L. TxDats (LedgerEra era )
694- getAnyWitnessScriptData AnyKeyWitnessPlaceholder = obtainCommonConstraints (useEra @ era ) mempty
695- getAnyWitnessScriptData AnySimpleScriptWitness {} = obtainCommonConstraints (useEra @ era ) mempty
696- getAnyWitnessScriptData (AnyPlutusScriptWitness (PlutusScriptWitness l _ scriptDatum _ _)) =
697- let alonzoSdat = toAlonzoDatum l scriptDatum
698- in case alonzoSdat of
699- Nothing -> obtainCommonConstraints (useEra @ era ) mempty
700- Just (d :: L. Data (LedgerEra era )) -> obtainCommonConstraints (useEra @ era ) $ L. TxDats $ fromList [(L. hashData d, d)]
701-
702- toAlonzoDatum
703- :: forall era lang purpose
704- . IsEra era
705- => L. SLanguage lang
706- -> PlutusScriptDatum lang purpose
707- -> Maybe (L. Data (LedgerEra era ))
708- toAlonzoDatum l d =
709- let mHashableData = getPlutusDatum l d
710- in case mHashableData of
711- Just h -> Just $ obtainCommonConstraints (useEra @ era ) $ toAlonzoData h
712- Nothing -> Nothing
713-
714583-- | Extract datum:
715584-- 1. supplemental datums from transaction outputs
716585-- 2. datums from reference inputs
0 commit comments