Skip to content

Commit 03f567f

Browse files
committed
Fix error when adding multiple redeemers
1 parent 4543094 commit 03f567f

File tree

4 files changed

+100
-2
lines changed

4 files changed

+100
-2
lines changed

pycardano/plutus.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,12 @@ def __add__(self, other: ExecutionUnits) -> ExecutionUnits:
739739
)
740740
return ExecutionUnits(self.mem + other.mem, self.steps + other.steps)
741741

742+
def is_empty(self) -> bool:
743+
return self.mem == 0 and self.steps == 0
744+
745+
def __bool__(self):
746+
return not self.is_empty()
747+
742748

743749
@dataclass(repr=False)
744750
class Redeemer(ArrayCBORSerializable):

pycardano/txbuilder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,15 @@ def _consolidate_redeemer(self, redeemer):
166166
self._should_estimate_execution_units = True
167167
redeemer.ex_units = ExecutionUnits(0, 0)
168168
else:
169-
if not self._should_estimate_execution_units and redeemer.ex_units is None:
169+
if not self._should_estimate_execution_units and not redeemer.ex_units:
170170
raise InvalidArgumentException(
171171
f"All redeemers need to provide execution units if the firstly "
172172
f"added redeemer specifies execution units. \n"
173173
f"Added redeemers: {self.redeemers} \n"
174174
f"New redeemer: {redeemer}"
175175
)
176176
if self._should_estimate_execution_units:
177-
if redeemer.ex_units is not None:
177+
if redeemer.ex_units:
178178
raise InvalidArgumentException(
179179
f"No redeemer should provide execution units if the firstly "
180180
f"added redeemer didn't provide execution units. \n"

test/pycardano/test_plutus.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,15 @@ def test_plutus_data_hash():
208208
)
209209

210210

211+
def test_execution_units_bool():
212+
assert ExecutionUnits(
213+
1000000, 1000000
214+
), "ExecutionUnits should be true when its value is not 0"
215+
assert not ExecutionUnits(
216+
0, 0
217+
), "ExecutionUnits should be false when its value is 0"
218+
219+
211220
def test_redeemer():
212221
data = MyTest(123, b"234", IndefiniteList([4, 5, 6]), {1: b"1", 2: b"2"})
213222
redeemer = MyRedeemer(data, ExecutionUnits(1000000, 1000000))

test/pycardano/test_txbuilder.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,89 @@ def test_add_script_input_with_script_from_specified_utxo(chain_context):
585585
assert [existing_script_utxo.input] == tx_body.reference_inputs
586586

587587

588+
def test_add_script_input_multiple_redeemers(chain_context):
589+
tx_builder = TransactionBuilder(chain_context)
590+
tx_in1 = TransactionInput.from_primitive(
591+
["18cbe6cadecd3f89b60e08e68e5e6c7d72d730aaa1ad21431590f7e6643438ef", 0]
592+
)
593+
tx_in2 = TransactionInput.from_primitive(
594+
["18cbe6cadecd3f89b60e08e68e5e6c7d72d730aaa1ad21431590f7e6643438ef", 1]
595+
)
596+
plutus_script = PlutusV2Script(b"dummy test script")
597+
script_hash = plutus_script_hash(plutus_script)
598+
script_address = Address(script_hash)
599+
datum = PlutusData()
600+
utxo1 = UTxO(
601+
tx_in1, TransactionOutput(script_address, 10000000, datum_hash=datum.hash())
602+
)
603+
604+
existing_script_utxo = UTxO(
605+
TransactionInput.from_primitive(
606+
[
607+
"41cb004bec7051621b19b46aea28f0657a586a05ce2013152ea9b9f1a5614cc7",
608+
1,
609+
]
610+
),
611+
TransactionOutput(script_address, 1234567, script=plutus_script),
612+
)
613+
614+
utxo2 = UTxO(
615+
tx_in2, TransactionOutput(script_address, 10000000, datum_hash=datum.hash())
616+
)
617+
618+
existing_script_utxo = UTxO(
619+
TransactionInput.from_primitive(
620+
[
621+
"41cb004bec7051621b19b46aea28f0657a586a05ce2013152ea9b9f1a5614cc7",
622+
1,
623+
]
624+
),
625+
TransactionOutput(script_address, 1234567, script=plutus_script),
626+
)
627+
628+
tx_builder.add_script_input(
629+
utxo1, script=existing_script_utxo, datum=datum, redeemer=Redeemer(PlutusData())
630+
)
631+
632+
tx_builder.add_script_input(
633+
utxo2, script=existing_script_utxo, datum=datum, redeemer=Redeemer(PlutusData())
634+
)
635+
636+
pytest.raises(
637+
InvalidArgumentException,
638+
tx_builder.add_script_input,
639+
utxo2,
640+
script=existing_script_utxo,
641+
datum=datum,
642+
redeemer=Redeemer(PlutusData(), ExecutionUnits(1000000, 1000000)),
643+
)
644+
645+
tx_builder = TransactionBuilder(chain_context)
646+
647+
tx_builder.add_script_input(
648+
utxo1,
649+
script=existing_script_utxo,
650+
datum=datum,
651+
redeemer=Redeemer(PlutusData(), ExecutionUnits(1000000, 1000000)),
652+
)
653+
654+
tx_builder.add_script_input(
655+
utxo2,
656+
script=existing_script_utxo,
657+
datum=datum,
658+
redeemer=Redeemer(PlutusData(), ExecutionUnits(1000000, 1000000)),
659+
)
660+
661+
pytest.raises(
662+
InvalidArgumentException,
663+
tx_builder.add_script_input,
664+
utxo2,
665+
script=existing_script_utxo,
666+
datum=datum,
667+
redeemer=Redeemer(PlutusData()),
668+
)
669+
670+
588671
def test_add_minting_script_from_specified_utxo(chain_context):
589672
tx_builder = TransactionBuilder(chain_context)
590673
plutus_script = PlutusV2Script(b"dummy test script")

0 commit comments

Comments
 (0)