From 9d0475a86ce643bb6e1c0801a1bca066611376f9 Mon Sep 17 00:00:00 2001 From: z80 Date: Thu, 13 Jul 2023 09:12:51 -0400 Subject: [PATCH 1/5] specify encoding when calling `bytes` --- src/ape/api/transactions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ape/api/transactions.py b/src/ape/api/transactions.py index 26885d13ef..e3fa5d1f42 100644 --- a/src/ape/api/transactions.py +++ b/src/ape/api/transactions.py @@ -171,10 +171,10 @@ def __str__(self) -> str: data = self.dict() if len(data["data"]) > 9: data["data"] = ( - "0x" + bytes(data["data"][:3]).hex() + "..." + bytes(data["data"][-3:]).hex() + "0x" + bytes(data["data"][:3], encoding="utf8").hex() + "..." + bytes(data["data"][-3:], encoding="utf8").hex() ) else: - data["data"] = "0x" + bytes(data["data"]).hex() + data["data"] = "0x" + bytes(data["data"], encoding="utf8").hex() params = "\n ".join(f"{k}: {v}" for k, v in data.items()) return f"{self.__class__.__name__}:\n {params}" From 4a510abe8d1ee65bc313778c98b633cbd839ae17 Mon Sep 17 00:00:00 2001 From: z80 Date: Thu, 13 Jul 2023 09:21:52 -0400 Subject: [PATCH 2/5] fix: lint --- src/ape/api/transactions.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ape/api/transactions.py b/src/ape/api/transactions.py index e3fa5d1f42..943580fc5c 100644 --- a/src/ape/api/transactions.py +++ b/src/ape/api/transactions.py @@ -171,7 +171,10 @@ def __str__(self) -> str: data = self.dict() if len(data["data"]) > 9: data["data"] = ( - "0x" + bytes(data["data"][:3], encoding="utf8").hex() + "..." + bytes(data["data"][-3:], encoding="utf8").hex() + "0x" + + bytes(data["data"][:3], encoding="utf8").hex() + + "..." + + bytes(data["data"][-3:], encoding="utf8").hex() ) else: data["data"] = "0x" + bytes(data["data"], encoding="utf8").hex() From df472fc433e07596f3e74a11c19f4d08e52502f9 Mon Sep 17 00:00:00 2001 From: z80 Date: Thu, 13 Jul 2023 10:50:24 -0400 Subject: [PATCH 3/5] Only specify encoding if data is a string --- src/ape/api/transactions.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/ape/api/transactions.py b/src/ape/api/transactions.py index 943580fc5c..1ee6b59864 100644 --- a/src/ape/api/transactions.py +++ b/src/ape/api/transactions.py @@ -170,14 +170,23 @@ def __repr__(self) -> str: def __str__(self) -> str: data = self.dict() if len(data["data"]) > 9: - data["data"] = ( - "0x" - + bytes(data["data"][:3], encoding="utf8").hex() - + "..." - + bytes(data["data"][-3:], encoding="utf8").hex() - ) + # only want to specify encoding if data["data"] is a string + if isinstance(data["data"], str): + data["data"] = ( + "0x" + + bytes(data["data"][:3], encoding="utf8").hex() + + "..." + + bytes(data["data"][-3:], encoding="utf8").hex() + ) + else: + data["data"] = ( + "0x" + bytes(data["data"][:3]).hex() + "..." + bytes(data["data"][-3:]).hex() + ) else: - data["data"] = "0x" + bytes(data["data"], encoding="utf8").hex() + if isinstance(data["data"], str): + data["data"] = "0x" + bytes(data["data"], encoding="utf8").hex() + else: + data["data"] = "0x" + bytes(data["data"]).hex() params = "\n ".join(f"{k}: {v}" for k, v in data.items()) return f"{self.__class__.__name__}:\n {params}" From 41dcd69abad3ccc1efd5e462810f67c251254566 Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Mon, 24 Jul 2023 08:53:38 -0500 Subject: [PATCH 4/5] test: add test --- tests/functional/test_transaction.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/functional/test_transaction.py b/tests/functional/test_transaction.py index d2736ed4c8..6a400df2ac 100644 --- a/tests/functional/test_transaction.py +++ b/tests/functional/test_transaction.py @@ -72,3 +72,9 @@ def test_transaction_dict_excludes_none_values(): txn.value = None # type: ignore actual = txn.dict() assert "value" not in actual + + +def test_txn_str_when_data_is_bytes(ethereum): + txn = ethereum.create_transaction(data=HexBytes("0x123")) + actual = str(txn) + assert isinstance(actual, str) From 9789c2db53a13024bf9dd0e915627e04e50305c6 Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Mon, 24 Jul 2023 08:55:53 -0500 Subject: [PATCH 5/5] docs: add doc to test --- tests/functional/test_transaction.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/functional/test_transaction.py b/tests/functional/test_transaction.py index 6a400df2ac..c83c12b73b 100644 --- a/tests/functional/test_transaction.py +++ b/tests/functional/test_transaction.py @@ -75,6 +75,10 @@ def test_transaction_dict_excludes_none_values(): def test_txn_str_when_data_is_bytes(ethereum): + """ + Tests against a condition that would cause transactions to + fail with string-encoding errors. + """ txn = ethereum.create_transaction(data=HexBytes("0x123")) actual = str(txn) assert isinstance(actual, str)