Skip to content

Commit 3cc0d02

Browse files
committed
Fix witness deser
1 parent da3c8f6 commit 3cc0d02

File tree

2 files changed

+9
-59
lines changed

2 files changed

+9
-59
lines changed

pycardano/witness.py

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -94,62 +94,3 @@ class TransactionWitnessSet(MapCBORSerializable):
9494
plutus_v3_script: Optional[List[PlutusV3Script]] = field(
9595
default=None, metadata={"optional": True, "key": 7}
9696
)
97-
98-
@classmethod
99-
@limit_primitive_type(dict, list)
100-
def from_primitive(
101-
cls: Type[TransactionWitnessSet], values: Union[dict, list, tuple]
102-
) -> TransactionWitnessSet | None:
103-
def _get_vkey_witnesses(data: Any):
104-
return (
105-
[VerificationKeyWitness.from_primitive(witness) for witness in data]
106-
if data
107-
else None
108-
)
109-
110-
def _get_native_scripts(data: Any):
111-
return (
112-
[NativeScript.from_primitive(script) for script in data]
113-
if data
114-
else None
115-
)
116-
117-
def _get_plutus_v1_scripts(data: Any):
118-
return [PlutusV1Script(script) for script in data] if data else None
119-
120-
def _get_plutus_v2_scripts(data: Any):
121-
return [PlutusV2Script(script) for script in data] if data else None
122-
123-
def _get_redeemers(data: Any):
124-
if not data:
125-
return None
126-
if isinstance(data, dict):
127-
redeemer_map = RedeemerMap()
128-
for (tag, index), value in data.items():
129-
key = RedeemerKey(RedeemerTag(tag), index)
130-
redeemer_value = RedeemerValue(value[0], ExecutionUnits(*value[1]))
131-
redeemer_map[key] = redeemer_value
132-
return redeemer_map
133-
elif isinstance(data, list):
134-
return [Redeemer.from_primitive(redeemer) for redeemer in data]
135-
else:
136-
raise ValueError(f"Unexpected redeemer data format: {type(data)}")
137-
138-
def _get_cls(data: Any):
139-
return cls(
140-
vkey_witnesses=_get_vkey_witnesses(data.get(0)),
141-
native_scripts=_get_native_scripts(data.get(1)),
142-
bootstrap_witness=data.get(2),
143-
plutus_v1_script=_get_plutus_v1_scripts(data.get(3)),
144-
plutus_data=data.get(4),
145-
redeemer=_get_redeemers(data.get(5)),
146-
plutus_v2_script=_get_plutus_v2_scripts(data.get(6)),
147-
)
148-
149-
if isinstance(values, dict):
150-
return _get_cls(values)
151-
elif isinstance(values, list):
152-
# TODO: May need to handle this differently
153-
values = dict(values)
154-
return _get_cls(values)
155-
return None

test/pycardano/test_plutus.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import pytest
1010
from cbor2 import CBORTag
1111

12+
from pycardano import TransactionWitnessSet
1213
from pycardano.exception import DeserializeException
1314
from pycardano.plutus import (
1415
COST_MODELS,
@@ -584,3 +585,11 @@ def test_redeemer_map():
584585
assert deserialized[key1].ex_units == value1.ex_units
585586
assert deserialized[key2].data == value2.data
586587
assert deserialized[key2].ex_units == value2.ex_units
588+
589+
590+
def test_empty_map_deser():
591+
empty_map = RedeemerMap()
592+
witness = TransactionWitnessSet(redeemer=empty_map)
593+
serialized = witness.to_primitive()
594+
deserialized = TransactionWitnessSet.from_primitive(serialized)
595+
assert deserialized.redeemer == empty_map

0 commit comments

Comments
 (0)