This repository has been archived by the owner on Apr 4, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 566
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 (#1638) * 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 Co-authored-by: MalteHerrmann <[email protected]> * Update rpc/backend/account_info.go Co-authored-by: MalteHerrmann <[email protected]> * 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
83d4a2e
commit 1a2ee06
Showing
6 changed files
with
122 additions
and
49 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
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,32 +1,73 @@ | ||
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 | ||
|
||
|
||
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 | ||
account_path = "m/44'/60'/0'/0/1" | ||
mnemonic = os.getenv("COMMUNITY_MNEMONIC") | ||
receiver = (Account.from_mnemonic(mnemonic, account_path=account_path)).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 | ||
@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) |