From 7a042c488c441e8c9958462b612b76a152c2a8e1 Mon Sep 17 00:00:00 2001 From: Tomas Guerra <54514587+GAtom22@users.noreply.github.com> Date: Thu, 1 Dec 2022 11:41:35 -0300 Subject: [PATCH] tests(filters): add logs by topic test case (#1515) * tests(filters) add logs by topic test case * fix(logs): add getLogs http call in test * tests(logs) add test case for getLogs by topic * tests(logs) fix lint errors --- default.nix | 2 +- tests/integration_tests/test_filters.py | 30 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/default.nix b/default.nix index c319aeaf..9b621609 100644 --- a/default.nix +++ b/default.nix @@ -3,7 +3,7 @@ , rev ? "dirty" }: let - version = "v0.17.1"; + version = "v0.20.0-rc2"; pname = "ethermintd"; tags = [ "netgo" ]; ldflags = lib.concatStringsSep "\n" ([ diff --git a/tests/integration_tests/test_filters.py b/tests/integration_tests/test_filters.py index 659acc86..b20f807e 100644 --- a/tests/integration_tests/test_filters.py +++ b/tests/integration_tests/test_filters.py @@ -9,6 +9,7 @@ from .utils import ( deploy_contract, send_successful_transaction, send_transaction, + w3_wait_for_new_blocks, ) # Smart contract names @@ -21,6 +22,35 @@ CHANGE_GREETING_TOPIC = Web3.keccak(text="ChangeGreeting(address,string)") TRANSFER_TOPIC = Web3.keccak(text="Transfer(address,address,uint256)") +def test_get_logs_by_topic(cluster): + w3: Web3 = cluster.w3 + + contract, _ = deploy_contract(w3, CONTRACTS["Greeter"]) + + topic = Web3.keccak(text="ChangeGreeting(address,string)") + + # with tx + tx = contract.functions.setGreeting("world").build_transaction() + receipt = send_transaction(w3, tx) + assert receipt.status == 1 + + # The getLogs method under the hood works as a filter + # with the specified topics and a block range. + # If the block range is not specified, it defaults + # to fromBlock: "latest", toBlock: "latest". + # Then, if we make a getLogs call within the same block that the tx + # happened, we will get a log in the result. However, if we make the call + # one or more blocks later, the result will be an empty array. + logs = w3.eth.get_logs({"topics": [topic.hex()]}) + + assert len(logs) == 1 + assert logs[0]["address"] == contract.address + + w3_wait_for_new_blocks(w3, 2) + logs = w3.eth.get_logs({"topics": [topic.hex()]}) + assert len(logs) == 0 + + def test_pending_transaction_filter(cluster): w3: Web3 = cluster.w3 flt = w3.eth.filter("pending")