Skip to content

Commit 7f90092

Browse files
committed
More progress
1 parent c24fb9c commit 7f90092

File tree

1 file changed

+90
-10
lines changed

1 file changed

+90
-10
lines changed

cardano-api/src/Cardano/Api/Experimental/Plutus/Internal/Shim/LegacyScripts.hs

Lines changed: 90 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,11 @@ import Cardano.Ledger.Alonzo.Scripts qualified as L
4444
import Cardano.Ledger.BaseTypes (Version)
4545
import Cardano.Ledger.Core qualified as L
4646
import Cardano.Ledger.Plutus.Language qualified as L
47+
import PlutusLedgerApi.V1.Data.Tx (ScriptTag (Cert))
4748

49+
import Data.Kind (Type)
4850
import 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)
113116
createPlutusScriptDatum 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
143146
toPlutusScriptDatum WitTxIn{} Old.PlutusScriptV2 (Old.ScriptDatumForTxIn Nothing) = NoScriptDatum
144147

145148
toNewPlutusScriptWitness
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+
183193
mkPlutusScriptWitness
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

194274
mkReferencePlutusScriptWitness
195275
:: L.SLanguage plutuslang

0 commit comments

Comments
 (0)