From eb164c1f6460b99b3fdc92c0722470eed15822f5 Mon Sep 17 00:00:00 2001 From: antazoey Date: Wed, 19 Feb 2025 12:24:04 -0600 Subject: [PATCH 1/2] fix: 4 bytes instead of 3 --- src/ape/api/transactions.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ape/api/transactions.py b/src/ape/api/transactions.py index e6e12c1214..fc7f908cc2 100644 --- a/src/ape/api/transactions.py +++ b/src/ape/api/transactions.py @@ -190,13 +190,13 @@ def __str__(self) -> str: if isinstance(data["data"], str): data["data"] = ( "0x" - + bytes(data["data"][:3], encoding="utf8").hex() + + bytes(data["data"][:4], encoding="utf8").hex() + "..." - + bytes(data["data"][-3:], encoding="utf8").hex() + + bytes(data["data"][-4:], encoding="utf8").hex() ) else: data["data"] = ( - to_hex(bytes(data["data"][:3])) + "..." + to_hex(bytes(data["data"][-3:])) + to_hex(bytes(data["data"][:4])) + "..." + to_hex(bytes(data["data"][-4:])) ) else: if isinstance(data["data"], str): From 5bae0b277f1d7214fcc3041f2466afb637b58259 Mon Sep 17 00:00:00 2001 From: antazoey Date: Wed, 19 Feb 2025 12:39:35 -0600 Subject: [PATCH 2/2] fix: show first 4 bytes in transaction str --- tests/functional/test_accounts.py | 17 +++++++++++++++++ tests/functional/test_transaction.py | 11 +++++++++++ 2 files changed, 28 insertions(+) diff --git a/tests/functional/test_accounts.py b/tests/functional/test_accounts.py index 4373394e5f..7f1bd215e0 100644 --- a/tests/functional/test_accounts.py +++ b/tests/functional/test_accounts.py @@ -71,6 +71,23 @@ def test_sign_message(signer, message): assert signer.check_signature(message, signature) +def test_sign_transaction(signer, message, ethereum): + transaction = ethereum.create_transaction(nonce=0, max_fee=0, max_priority_fee=0) + signed_transaction = signer.sign_transaction(transaction) + assert signed_transaction.signature is not None + + +def test_sign_transaction_using_keyfile_account(keyfile_account, message, ethereum, runner): + transaction = ethereum.create_transaction( + nonce=0, max_fee=0, max_priority_fee=0, data="0x21314135413451" + ) + + with runner.isolation(f"y\n{PASSPHRASE}\ny"): + signed_transaction = keyfile_account.sign_transaction(transaction) + + assert signed_transaction.signature is not None + + def test_sign_string(signer): message = "Hello Apes!" signature = signer.sign_message(message) diff --git a/tests/functional/test_transaction.py b/tests/functional/test_transaction.py index e9606789d1..9f786fdeff 100644 --- a/tests/functional/test_transaction.py +++ b/tests/functional/test_transaction.py @@ -307,6 +307,17 @@ def test_str_when_data_is_bytes(ethereum): assert isinstance(actual, str) +def test_str_when_data_is_long_shows_first_4_bytes(vyper_contract_instance): + """ + Tests against a condition that would cause transactions to + fail with string-encoding errors. + """ + txn = vyper_contract_instance.setNumber.as_transaction(123) + actual = str(txn) + assert isinstance(actual, str) + assert "data: 0x30783366..." in actual + + def test_receipt_when_none(ethereum): txn = ethereum.create_transaction(data=HexBytes("0x123")) assert txn.receipt is None