Skip to content

Commit aa48590

Browse files
committed
Add text envelope serialisation for AnyPlutusScript
Use nonNativeLanguages and withSLanguage to derive textEnvTypes so new Plutus versions are picked up automatically and GHC enforces handling in constraint witness functions.
1 parent e917f12 commit aa48590

3 files changed

Lines changed: 30 additions & 0 deletions

File tree

cardano-api/src/Cardano/Api/Experimental.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ module Cardano.Api.Experimental
6767
-- ** Plutus related
6868
, PlutusScriptInEra (..)
6969
, PlutusScriptOrReferenceInput (..)
70+
, serialiseAnyPlutusScriptToTextEnvelope
71+
, deserialiseAnyPlutusScriptFromTextEnvelope
7072
, IndexedPlutusScriptWitness (..)
7173
, PlutusScriptPurpose (..)
7274
, PlutusScriptDatum (..)

cardano-api/src/Cardano/Api/Experimental/Plutus.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ module Cardano.Api.Experimental.Plutus
22
( -- * Plutus Script
33
AnyPlutusScript (..)
44
, decodeAnyPlutusScript
5+
, serialiseAnyPlutusScriptToTextEnvelope
6+
, deserialiseAnyPlutusScriptFromTextEnvelope
57
, PlutusScriptInEra (..)
68
, AnyPlutusScriptLanguage (..)
79
, deserialisePlutusScriptInEra

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
module Cardano.Api.Experimental.Plutus.Internal.Script
1212
( AnyPlutusScript (..)
1313
, decodeAnyPlutusScript
14+
, serialiseAnyPlutusScriptToTextEnvelope
15+
, deserialiseAnyPlutusScriptFromTextEnvelope
1416
, AnyPlutusScriptLanguage (..)
1517
, PlutusScriptInEra (..)
1618
, PlutusScriptOrReferenceInput (..)
@@ -201,3 +203,27 @@ data AnyPlutusScriptLanguage where
201203
AnyPlutusScriptLanguage
202204
:: L.PlutusLanguage lang
203205
=> L.SLanguage lang -> AnyPlutusScriptLanguage
206+
207+
serialiseAnyPlutusScriptToTextEnvelope
208+
:: Maybe TextEnvelopeDescr -> AnyPlutusScript era -> TextEnvelope
209+
serialiseAnyPlutusScriptToTextEnvelope mbDescr (AnyPlutusScript script) =
210+
obtainLangConstraints (plutusScriptInEraSLanguage script) $
211+
serialiseToTextEnvelope mbDescr script
212+
213+
deserialiseAnyPlutusScriptFromTextEnvelope
214+
:: forall era
215+
. L.Era era
216+
=> TextEnvelope
217+
-> Either TextEnvelopeError (AnyPlutusScript era)
218+
deserialiseAnyPlutusScriptFromTextEnvelope =
219+
deserialiseFromTextEnvelopeAnyOf textEnvTypes
220+
where
221+
textEnvTypes :: [FromSomeType HasTextEnvelope (AnyPlutusScript era)]
222+
textEnvTypes =
223+
map
224+
( \l ->
225+
Plutus.withSLanguage l $ \(slang :: Plutus.SLanguage l) ->
226+
obtainLangConstraints slang $
227+
FromSomeType (asType @(PlutusScriptInEra l era)) AnyPlutusScript
228+
)
229+
Plutus.nonNativeLanguages

0 commit comments

Comments
 (0)