Skip to content

Commit 636f91f

Browse files
committed
Nice simplification
1 parent 5037be9 commit 636f91f

File tree

1 file changed

+19
-150
lines changed
  • cardano-api/src/Cardano/Api/Experimental/Tx/Internal/BodyContent

1 file changed

+19
-150
lines changed

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

Lines changed: 19 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import Cardano.Api.Experimental.Tx.Internal.AnyWitness
4848
)
4949
import Cardano.Api.Experimental.Tx.Internal.TxScriptWitnessRequirements
5050
( TxScriptWitnessRequirements (..)
51+
, getTxScriptWitnessesRequirements
5152
)
5253
import Cardano.Api.Experimental.Tx.Internal.Type
5354
import 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-
613575
obtainMonoidConstraint
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

Comments
 (0)