forked from evmos/ethermint
-
Notifications
You must be signed in to change notification settings - Fork 44
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(rpc): align query result of future block for eth_getTransactionCo…
…unt (evmos#1638) (#225) * add future height check for get_transaction_count * add query future account test * fasten get_transaction_count test * add change doc * fix test * update nix * Update CHANGELOG.md * Update rpc/backend/account_info.go * update nix * add test for block height in future Co-authored-by: MalteHerrmann <[email protected]> Co-authored-by: MalteHerrmann <[email protected]>
- Loading branch information
1 parent
58a3ffe
commit 00f44a3
Showing
4 changed files
with
109 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,73 @@ | ||
from .utils import ADDRS, derive_new_account, w3_wait_for_new_blocks | ||
|
||
|
||
def test_get_transaction_count(ethermint_rpc_ws, geth): | ||
for p in [ethermint_rpc_ws, geth]: | ||
w3 = p.w3 | ||
blk = hex(w3.eth.block_number) | ||
sender = ADDRS["validator"] | ||
|
||
# derive a new address | ||
receiver = derive_new_account().address | ||
n0 = w3.eth.get_transaction_count(receiver, blk) | ||
# ensure transaction send in new block | ||
w3_wait_for_new_blocks(w3, 1, sleep=0.1) | ||
txhash = w3.eth.send_transaction( | ||
{ | ||
"from": sender, | ||
"to": receiver, | ||
"value": 1000, | ||
} | ||
) | ||
receipt = w3.eth.wait_for_transaction_receipt(txhash) | ||
assert receipt.status == 1 | ||
[n1, n2] = [w3.eth.get_transaction_count(receiver, b) for b in [blk, "latest"]] | ||
assert n0 == n1 | ||
assert n0 == n2 | ||
import os | ||
|
||
import pytest | ||
from eth_account import Account | ||
from web3 import Web3 | ||
|
||
from .network import setup_ethermint | ||
from .utils import ADDRS, w3_wait_for_new_blocks | ||
|
||
|
||
@pytest.fixture(scope="module") | ||
def custom_ethermint(tmp_path_factory): | ||
path = tmp_path_factory.mktemp("account") | ||
yield from setup_ethermint(path, 26700, long_timeout_commit=True) | ||
|
||
|
||
@pytest.fixture(scope="module", params=["ethermint", "ethermint-ws", "geth"]) | ||
def cluster(request, custom_ethermint, geth): | ||
""" | ||
run on ethermint, ethermint websocket and geth | ||
""" | ||
provider = request.param | ||
if provider == "ethermint": | ||
yield custom_ethermint | ||
elif provider == "ethermint-ws": | ||
ethermint_ws = custom_ethermint.copy() | ||
ethermint_ws.use_websocket() | ||
yield ethermint_ws | ||
elif provider == "geth": | ||
yield geth | ||
else: | ||
raise NotImplementedError | ||
|
||
|
||
def derive_new_address(n=1): | ||
# derive a new address | ||
account_path = f"m/44'/60'/0'/0/{n}" | ||
mnemonic = os.getenv("COMMUNITY_MNEMONIC") | ||
return (Account.from_mnemonic(mnemonic, account_path=account_path)).address | ||
|
||
|
||
def test_get_transaction_count(cluster): | ||
w3: Web3 = cluster.w3 | ||
blk = hex(w3.eth.block_number) | ||
sender = ADDRS["validator"] | ||
|
||
receiver = derive_new_address() | ||
n0 = w3.eth.get_transaction_count(receiver, blk) | ||
# ensure transaction send in new block | ||
w3_wait_for_new_blocks(w3, 1, sleep=0.1) | ||
txhash = w3.eth.send_transaction( | ||
{ | ||
"from": sender, | ||
"to": receiver, | ||
"value": 1000, | ||
} | ||
) | ||
receipt = w3.eth.wait_for_transaction_receipt(txhash) | ||
assert receipt.status == 1 | ||
[n1, n2] = [w3.eth.get_transaction_count(receiver, b) for b in [blk, "latest"]] | ||
assert n0 == n1 | ||
assert n0 == n2 | ||
|
||
|
||
def test_query_future_blk(cluster): | ||
w3: Web3 = cluster.w3 | ||
acc = derive_new_address(2) | ||
current = w3.eth.block_number | ||
future = current + 1000 | ||
with pytest.raises(ValueError) as exc: | ||
w3.eth.get_transaction_count(acc, hex(future)) | ||
print(acc, str(exc)) | ||
assert "-32000" in str(exc) |