@@ -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,27 @@ 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+ tripping
66+ scriptInEra
67+ serialiseToCBOR
68+ (deserialiseFromCBOR (proxyToAsType (Proxy @ (PlutusScriptInEra L. PlutusV3 (LedgerEra ConwayEra )))))
69+
70+ -- | Serialise an 'AnyPlutusScript' to a 'TextEnvelope' and deserialise it back.
71+ -- We compare the resulting 'TextEnvelope' values because 'AnyPlutusScript' is
72+ -- existentially quantified and does not have an 'Eq' instance.
73+ prop_roundtrip_any_plutus_script_text_envelope :: Property
74+ prop_roundtrip_any_plutus_script_text_envelope = property $ do
75+ scriptInEra <- forAll genPlutusScriptInEra
76+ let anyScript = Plutus. AnyPlutusScript scriptInEra
77+ envelope = serialiseAnyPlutusScriptToTextEnvelope Nothing anyScript
78+ anyScript' <-
79+ evalEither $ deserialiseAnyPlutusScriptFromTextEnvelope @ (LedgerEra ConwayEra ) envelope
80+ let envelope' = serialiseAnyPlutusScriptToTextEnvelope Nothing anyScript'
81+ envelope === envelope'
82+
5883-- | This property checks that the redeemer pointer map is constructed correctly.
5984-- Previously identical script purposes were being created and overwriting each other
6085-- in the redeemer pointer map.
@@ -214,6 +239,12 @@ tests =
214239 testGroup
215240 " Test.Cardano.Api.Transaction.Body.Plutus.Scripts"
216241 [ testProperty " prop_compare_plutus_script_hashes" prop_compare_plutus_script_hashes
242+ , testProperty
243+ " prop_roundtrip_plutus_script_in_era_cbor"
244+ prop_roundtrip_plutus_script_in_era_cbor
245+ , testProperty
246+ " prop_roundtrip_any_plutus_script_text_envelope"
247+ prop_roundtrip_any_plutus_script_text_envelope
217248 , testProperty
218249 " prop_extractAllIndexedPlutusScriptWitnesses"
219250 prop_extractAllIndexedPlutusScriptWitnesses
0 commit comments