Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion pycardano/txbuilder.py
Original file line number Diff line number Diff line change
Expand Up @@ -1204,14 +1204,16 @@ def build_witness_set(
f"Unsupported script type: {type(script)}"
)

return TransactionWitnessSet(
witness_set = TransactionWitnessSet(
native_scripts=native_scripts if native_scripts else None,
plutus_v1_script=plutus_v1_scripts if plutus_v1_scripts else None,
plutus_v2_script=plutus_v2_scripts if plutus_v2_scripts else None,
plutus_v3_script=plutus_v3_scripts if plutus_v3_scripts else None,
redeemer=self.redeemers() if self._redeemer_list else None,
plutus_data=plutus_data if plutus_data else None,
)
witness_set.convert_to_latest_spec()
return witness_set

def _ensure_no_input_exclusion_conflict(self):
intersection = set(self.inputs).intersection(set(self.excluded_inputs))
Expand Down
4 changes: 2 additions & 2 deletions pycardano/witness.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class TransactionWitnessSet(MapCBORSerializable):
},
)

plutus_data: Optional[Union[IndefiniteList, List[Any], NonEmptyOrderedSet[Any]]] = (
plutus_data: Optional[Union[List[Any], IndefiniteList, NonEmptyOrderedSet[Any]]] = (
field(
default=None,
metadata={"optional": True, "key": 4},
Expand Down Expand Up @@ -140,7 +140,7 @@ class TransactionWitnessSet(MapCBORSerializable):
},
)

def __post_init__(self):
def convert_to_latest_spec(self):
# Convert lists to NonEmptyOrderedSet for fields that should use NonEmptyOrderedSet
if isinstance(self.vkey_witnesses, list):
self.vkey_witnesses = NonEmptyOrderedSet(self.vkey_witnesses)
Expand Down
3 changes: 3 additions & 0 deletions test/pycardano/test_serialization.py
Original file line number Diff line number Diff line change
Expand Up @@ -761,6 +761,7 @@ def test_transaction_witness_set_with_ordered_sets():

# Test conversion from list to NonEmptyOrderedSet
witness_set = TransactionWitnessSet(vkey_witnesses=[witness])
witness_set.convert_to_latest_spec()
assert isinstance(witness_set.vkey_witnesses, NonEmptyOrderedSet)
assert witness in witness_set.vkey_witnesses

Expand All @@ -772,11 +773,13 @@ def test_transaction_witness_set_with_ordered_sets():

# Test empty list conversion
witness_set = TransactionWitnessSet(vkey_witnesses=[])
witness_set.convert_to_latest_spec()
with pytest.raises(ValueError, match="NonEmptyOrderedSet cannot be empty"):
witness_set.to_validated_primitive()

# Test None value
witness_set = TransactionWitnessSet(vkey_witnesses=None)
witness_set.convert_to_latest_spec()
primitive = witness_set.to_primitive()
restored = TransactionWitnessSet.from_primitive(primitive)
assert restored.vkey_witnesses is None
Expand Down
17 changes: 16 additions & 1 deletion test/pycardano/test_witness.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
import json
import tempfile

from pycardano import PaymentSigningKey, PaymentVerificationKey, VerificationKeyWitness
from pycardano import (
PaymentSigningKey,
PaymentVerificationKey,
Transaction,
TransactionWitnessSet,
Unit,
VerificationKeyWitness,
)


def test_witness_save_load():
Expand All @@ -17,3 +25,10 @@ def test_witness_save_load():
assert witness == loaded_witness

assert witness != vk


def test_redeemer_decode():
witness = TransactionWitnessSet(plutus_data=[Unit()])
encoded = witness.to_cbor()
decoded = TransactionWitnessSet.from_cbor(encoded)
assert isinstance(decoded.plutus_data, list)
Loading