@@ -8,22 +8,26 @@ module Test.Cardano.Api.Transaction.Body.Plutus.Scripts
88 )
99where
1010
11- import Cardano.Api (AlonzoEraOnwards (.. ))
11+ import Cardano.Api (AlonzoEraOnwards (.. ), proxyToAsType )
1212import Cardano.Api qualified as Api
1313import Cardano.Api.Experimental
1414import Cardano.Api.Experimental.AnyScriptWitness
1515import Cardano.Api.Experimental.Plutus hiding (AnyPlutusScript (.. ))
16+ import Cardano.Api.Experimental.Plutus qualified as Plutus
1617import Cardano.Api.Experimental.Tx qualified as Exp
1718import Cardano.Api.Ledger qualified as L
19+ import Cardano.Api.Serialise.Cbor (SerialiseAsCBOR (.. ))
1820
1921import Cardano.Ledger.Conway qualified as L
2022import Cardano.Ledger.Core qualified as L
23+ import Cardano.Ledger.Plutus.Language qualified as L
2124
2225import Prelude
2326
2427import Data.Function
2528import Data.List qualified as List
2629import Data.Map.Strict qualified as Map
30+ import Data.Proxy (Proxy (.. ))
2731
2832import Test.Gen.Cardano.Api.Experimental qualified as Exp
2933import Test.Gen.Cardano.Api.Typed
@@ -55,6 +59,30 @@ prop_compare_plutus_script_hashes = property $ do
5559
5660 hash === anyScriptHash
5761
62+ prop_roundtrip_plutus_script_in_era_cbor :: Property
63+ prop_roundtrip_plutus_script_in_era_cbor = property $ do
64+ scriptInEra <- forAll genPlutusScriptInEra
65+ let cbor = serialiseToCBOR scriptInEra
66+ scriptInEra' <-
67+ evalEither $
68+ deserialiseFromCBOR
69+ (proxyToAsType (Proxy @ (PlutusScriptInEra L. PlutusV3 (LedgerEra ConwayEra ))))
70+ cbor
71+ serialiseToCBOR scriptInEra' === cbor
72+
73+ -- | Serialise an 'AnyPlutusScript' to a 'TextEnvelope' and deserialise it back.
74+ -- We compare the resulting 'TextEnvelope' values because 'AnyPlutusScript' is
75+ -- existentially quantified and does not have an 'Eq' instance.
76+ prop_roundtrip_any_plutus_script_text_envelope :: Property
77+ prop_roundtrip_any_plutus_script_text_envelope = property $ do
78+ scriptInEra <- forAll genPlutusScriptInEra
79+ let anyScript = Plutus. AnyPlutusScript scriptInEra
80+ envelope = serialiseAnyPlutusScriptToTextEnvelope Nothing anyScript
81+ anyScript' <-
82+ evalEither $ deserialiseAnyPlutusScriptFromTextEnvelope @ (LedgerEra ConwayEra ) envelope
83+ let envelope' = serialiseAnyPlutusScriptToTextEnvelope Nothing anyScript'
84+ envelope === envelope'
85+
5886-- | This property checks that the redeemer pointer map is constructed correctly.
5987-- Previously identical script purposes were being created and overwriting each other
6088-- in the redeemer pointer map.
@@ -214,6 +242,12 @@ tests =
214242 testGroup
215243 " Test.Cardano.Api.Transaction.Body.Plutus.Scripts"
216244 [ testProperty " prop_compare_plutus_script_hashes" prop_compare_plutus_script_hashes
245+ , testProperty
246+ " prop_roundtrip_plutus_script_in_era_cbor"
247+ prop_roundtrip_plutus_script_in_era_cbor
248+ , testProperty
249+ " prop_roundtrip_any_plutus_script_text_envelope"
250+ prop_roundtrip_any_plutus_script_text_envelope
217251 , testProperty
218252 " prop_extractAllIndexedPlutusScriptWitnesses"
219253 prop_extractAllIndexedPlutusScriptWitnesses
0 commit comments