@@ -44,8 +44,11 @@ import Cardano.Ledger.Alonzo.Scripts qualified as L
4444import Cardano.Ledger.BaseTypes (Version )
4545import Cardano.Ledger.Core qualified as L
4646import Cardano.Ledger.Plutus.Language qualified as L
47+ import PlutusLedgerApi.V1.Data.Tx (ScriptTag (Cert ))
4748
49+ import Data.Kind (Type )
4850import Data.Text qualified as Text
51+ import Data.Typeable
4952
5053-- | This module is concerned with converting legacy api scripts and by extension
5154-- script witnesses to the new api.
@@ -109,7 +112,7 @@ createPlutusScriptDatum
109112 :: Witnessable thing era
110113 -> Old. PlutusScriptVersion lang
111114 -> Old. ScriptDatum witctx
112- -> PlutusScriptDatum (Old. ToLedgerPlutusLanguage lang ) SpendingScript
115+ -> PlutusScriptDatum (Old. ToLedgerPlutusLanguage lang ) ( ThingToPurpose thing )
113116createPlutusScriptDatum missingContext plutusVersion oldDatum =
114117 case (missingContext, oldDatum) of
115118 (w@ WitTxIn {}, d@ Old. ScriptDatumForTxIn {}) -> toPlutusScriptDatum w plutusVersion d
@@ -143,15 +146,15 @@ toPlutusScriptDatum WitTxIn{} Old.PlutusScriptV1 (Old.ScriptDatumForTxIn Nothing
143146toPlutusScriptDatum WitTxIn {} Old. PlutusScriptV2 (Old. ScriptDatumForTxIn Nothing ) = NoScriptDatum
144147
145148toNewPlutusScriptWitness
146- :: forall era lang purpose thing
149+ :: forall era lang thing
147150 . L. PlutusLanguage (Old. ToLedgerPlutusLanguage lang )
148151 => AlonzoEraOnwards era
149152 -> Witnessable thing (ShelleyLedgerEra era )
150153 -> Old. PlutusScriptVersion lang
151154 -> Old. PlutusScriptOrReferenceInput lang
152155 -> ScriptRedeemer
153156 -> ExecutionUnits
154- -> PlutusScriptDatum (Old. ToLedgerPlutusLanguage lang ) purpose
157+ -> PlutusScriptDatum (Old. ToLedgerPlutusLanguage lang ) ( ThingToPurpose thing )
155158 -> Either
156159 CBOR. DecoderError
157160 ( AnyWitness
@@ -166,9 +169,8 @@ toNewPlutusScriptWitness eon w l (Old.PScript (Old.PlutusScriptSerialised script
166169 Left $
167170 CBOR. DecoderErrorCustom " PlutusLedgerApi.Common.ScriptDecodeError" (Text. pack . show $ pretty e)
168171 Right plutusScriptRunnable ->
169- return
170- . AnyPlutusScriptWitness
171- $ mkPlutusScriptWitness
172+ return $
173+ mkPlutusScriptWitness
172174 eon
173175 w
174176 (toPlutusSLanguage l)
@@ -180,16 +182,94 @@ toNewPlutusScriptWitness _ w l (Old.PReferenceScript refInput) scriptRedeemer ex
180182 return . AnyPlutusScriptWitness $
181183 mkReferencePlutusScriptWitness (toPlutusSLanguage l) refInput datum scriptRedeemer execUnits
182184
185+ type family ThingToPurpose thing where
186+ ThingToPurpose TxInItem = SpendingScript
187+ ThingToPurpose CertItem = CertifyingScript
188+ ThingToPurpose MintItem = MintingScript
189+ ThingToPurpose WithdrawalItem = WithdrawingScript
190+ ThingToPurpose VoterItem = VotingScript
191+ ThingToPurpose ProposalItem = ProposingScript
192+
183193mkPlutusScriptWitness
184- :: AlonzoEraOnwards era
194+ :: forall era thing plutuslang
195+ . Typeable plutuslang
196+ => AlonzoEraOnwards era
185197 -> Witnessable thing (ShelleyLedgerEra era )
186198 -> L. SLanguage plutuslang
187199 -> L. PlutusRunnable plutuslang
188- -> PlutusScriptDatum plutuslang purpose
200+ -> PlutusScriptDatum plutuslang ( ThingToPurpose thing )
189201 -> ScriptRedeemer
190202 -> ExecutionUnits
191- -> AnyPlutusScriptWitness plutuslang purpose (ShelleyLedgerEra era )
192- mkPlutusScriptWitness _ w l plutusScriptRunnable d r e = undefined
203+ -> AnyWitness (ShelleyLedgerEra era )
204+ mkPlutusScriptWitness eon w l plutusScriptRunnable d r e =
205+ case w of
206+ WitTxIn {} ->
207+ let s
208+ :: AlonzoEraOnwards era
209+ -> L. SLanguage plutuslang
210+ -> PlutusScriptWitness plutuslang SpendingScript (ShelleyLedgerEra era )
211+ s _eon lang = PlutusScriptWitness lang (PScript $ PlutusScriptInEra plutusScriptRunnable) d r e
212+ in AnyPlutusScriptWitness $
213+ AnyPlutusSpendingScriptWitness $
214+ case l of
215+ L. SPlutusV1 ->
216+ PlutusSpendingScriptWitnessV1 (s eon l)
217+ L. SPlutusV2 ->
218+ PlutusSpendingScriptWitnessV2 (s eon l)
219+ L. SPlutusV3 ->
220+ PlutusSpendingScriptWitnessV3 (s eon l)
221+ L. SPlutusV4 ->
222+ PlutusSpendingScriptWitnessV4 (s eon l)
223+ WitTxCert {} ->
224+ AnyPlutusScriptWitness $
225+ AnyPlutusCertifyingScriptWitness
226+ ( PlutusScriptWitness
227+ l
228+ (PScript $ PlutusScriptInEra plutusScriptRunnable)
229+ d
230+ r
231+ e
232+ )
233+ WitMint {} ->
234+ AnyPlutusScriptWitness $
235+ AnyPlutusMintingScriptWitness
236+ ( PlutusScriptWitness
237+ l
238+ (PScript $ PlutusScriptInEra plutusScriptRunnable)
239+ d
240+ r
241+ e
242+ )
243+ WitWithdrawal {} ->
244+ AnyPlutusScriptWitness $
245+ AnyPlutusWithdrawingScriptWitness
246+ ( PlutusScriptWitness
247+ l
248+ (PScript $ PlutusScriptInEra plutusScriptRunnable)
249+ d
250+ r
251+ e
252+ )
253+ WitVote {} ->
254+ AnyPlutusScriptWitness $
255+ AnyPlutusVotingScriptWitness
256+ ( PlutusScriptWitness
257+ l
258+ (PScript $ PlutusScriptInEra plutusScriptRunnable)
259+ d
260+ r
261+ e
262+ )
263+ WitProposal {} ->
264+ AnyPlutusScriptWitness $
265+ AnyPlutusProposingScriptWitness
266+ ( PlutusScriptWitness
267+ l
268+ (PScript $ PlutusScriptInEra plutusScriptRunnable)
269+ d
270+ r
271+ e
272+ )
193273
194274mkReferencePlutusScriptWitness
195275 :: L. SLanguage plutuslang
0 commit comments