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
This commit is contained in:
Tomas Guerra 2022-12-01 11:41:35 -03:00 committed by GitHub
parent 7f8b51e4c6
commit 7a042c488c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 1 deletions

View File

@ -3,7 +3,7 @@
, rev ? "dirty" , rev ? "dirty"
}: }:
let let
version = "v0.17.1"; version = "v0.20.0-rc2";
pname = "ethermintd"; pname = "ethermintd";
tags = [ "netgo" ]; tags = [ "netgo" ];
ldflags = lib.concatStringsSep "\n" ([ ldflags = lib.concatStringsSep "\n" ([

View File

@ -9,6 +9,7 @@ from .utils import (
deploy_contract, deploy_contract,
send_successful_transaction, send_successful_transaction,
send_transaction, send_transaction,
w3_wait_for_new_blocks,
) )
# Smart contract names # 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)") 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): def test_pending_transaction_filter(cluster):
w3: Web3 = cluster.w3 w3: Web3 = cluster.w3
flt = w3.eth.filter("pending") flt = w3.eth.filter("pending")