diff --git a/pycardano/serialization.py b/pycardano/serialization.py index 0063d944..e268cac5 100644 --- a/pycardano/serialization.py +++ b/pycardano/serialization.py @@ -536,6 +536,11 @@ def _restore_typed_primitive( if not isinstance(v, bytes): raise DeserializeException(f"Expected type bytes but got {type(v)}") return ByteString(v) + elif isclass(t) and t.__name__ in ["PlutusV1Script", "PlutusV2Script"]: + if not isinstance(v, bytes): + raise DeserializeException(f"Expected type bytes but got {type(v)}") + return t(v) + elif isclass(t) and issubclass(t, IndefiniteList): try: return IndefiniteList(v) diff --git a/test/pycardano/test_plutus.py b/test/pycardano/test_plutus.py index f16df8fe..78d43cef 100644 --- a/test/pycardano/test_plutus.py +++ b/test/pycardano/test_plutus.py @@ -12,17 +12,17 @@ from pycardano.exception import DeserializeException from pycardano.plutus import ( COST_MODELS, + Datum, ExecutionUnits, PlutusData, RawPlutusData, Redeemer, RedeemerTag, - plutus_script_hash, - id_map, - Datum, Unit, + id_map, + plutus_script_hash, ) -from pycardano.serialization import IndefiniteList, RawCBOR, ByteString +from pycardano.serialization import ByteString, IndefiniteList, RawCBOR @dataclass diff --git a/test/pycardano/test_serialization.py b/test/pycardano/test_serialization.py index 8da4fa6b..d9f24370 100644 --- a/test/pycardano/test_serialization.py +++ b/test/pycardano/test_serialization.py @@ -7,6 +7,7 @@ from pycardano import Datum, RawPlutusData from pycardano.exception import DeserializeException +from pycardano.plutus import PlutusV1Script, PlutusV2Script from pycardano.serialization import ( ArrayCBORSerializable, CBORSerializable, @@ -286,3 +287,17 @@ class Test2(MapCBORSerializable): with pytest.raises(TypeError): Test2(a=Test1(a=1)).to_cbor_hex() + + +def test_script_deserialize(): + @dataclass + class Test(MapCBORSerializable): + script_1: PlutusV1Script + script_2: PlutusV2Script + + datum = Test( + script_1=PlutusV1Script(b"dummy test script"), + script_2=PlutusV2Script(b"dummy test script"), + ) + + assert datum == datum.from_cbor(datum.to_cbor())