diff --git a/src/ape/api/accounts.py b/src/ape/api/accounts.py index 75a1c991a5..ba1fc3b6ca 100644 --- a/src/ape/api/accounts.py +++ b/src/ape/api/accounts.py @@ -198,13 +198,13 @@ def transfer( if data: txn.data = self.conversion_manager.convert(data, bytes) - if not value and not kwargs.get("send_everything"): + if value is None and not kwargs.get("send_everything"): raise AccountsError("Must provide 'VALUE' or use 'send_everything=True'") - elif value and kwargs.get("send_everything"): + elif value is not None and kwargs.get("send_everything"): raise AccountsError("Cannot use 'send_everything=True' with 'VALUE'.") - elif value: + elif value is not None: txn.value = self.conversion_manager.convert(value, int) if txn.value < 0: raise AccountsError("Value cannot be negative.") diff --git a/tests/functional/test_accounts.py b/tests/functional/test_accounts.py index db16660861..6caf9ea1da 100644 --- a/tests/functional/test_accounts.py +++ b/tests/functional/test_accounts.py @@ -196,6 +196,19 @@ def test_transfer_using_type_0(sender, receiver, convert): assert receiver.balance == expected +def test_transfer_value_of_0(sender, receiver): + """ + There was a bug where this failed, thinking there was no value. + """ + initial_balance = receiver.balance + sender.transfer(receiver, 0) + assert receiver.balance == initial_balance + + # Also show conversion works. + sender.transfer(receiver, "0 wei") + assert receiver.balance == initial_balance + + def test_deploy(owner, contract_container, chain, clean_contracts_cache): contract = owner.deploy(contract_container, 0) assert contract.address