fix(rpc): get_proof test fail because block numbers are not high enough (#1239)
* Problem: get_proof test fail because block numbers are not high enough Solution: - wait for app block height rather than tendermint block height * Update tests/integration_tests/test_types.py * keep get_proof response the same as geth Co-authored-by: Daniel Burckhardt <daniel.m.burckhardt@gmail.com>
This commit is contained in:
parent
989192028f
commit
94cab52ca1
@ -44,9 +44,8 @@ func (b *Backend) GetProof(address common.Address, storageKeys []string, blockNr
|
|||||||
height := blockNum.Int64()
|
height := blockNum.Int64()
|
||||||
_, err = b.GetTendermintBlockByNumber(blockNum)
|
_, err = b.GetTendermintBlockByNumber(blockNum)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Get 'latest' proof if query is in the future
|
// the error message imitates geth behavior
|
||||||
// this imitates geth behavior
|
return nil, errors.New("header not found")
|
||||||
height = 0
|
|
||||||
}
|
}
|
||||||
ctx := rpctypes.ContextWithHeight(height)
|
ctx := rpctypes.ContextWithHeight(height)
|
||||||
|
|
||||||
|
@ -11,8 +11,8 @@ from .utils import (
|
|||||||
KEYS,
|
KEYS,
|
||||||
deploy_contract,
|
deploy_contract,
|
||||||
send_transaction,
|
send_transaction,
|
||||||
|
w3_wait_for_block,
|
||||||
w3_wait_for_new_blocks,
|
w3_wait_for_new_blocks,
|
||||||
wait_for_block,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -178,7 +178,9 @@ def send_and_get_hash(w3, tx_value=10):
|
|||||||
|
|
||||||
|
|
||||||
def test_get_proof(ethermint, geth):
|
def test_get_proof(ethermint, geth):
|
||||||
wait_for_block(ethermint.cosmos_cli(), 3)
|
# on ethermint the proof query will fail for block numbers <= 2
|
||||||
|
# so we must wait for several blocks
|
||||||
|
w3_wait_for_block(ethermint.w3, 3)
|
||||||
eth_rpc = ethermint.w3.provider
|
eth_rpc = ethermint.w3.provider
|
||||||
geth_rpc = geth.w3.provider
|
geth_rpc = geth.w3.provider
|
||||||
make_same_rpc_calls(
|
make_same_rpc_calls(
|
||||||
@ -192,7 +194,7 @@ def test_get_proof(ethermint, geth):
|
|||||||
eth_rpc,
|
eth_rpc,
|
||||||
geth_rpc,
|
geth_rpc,
|
||||||
"eth_getProof",
|
"eth_getProof",
|
||||||
["0x57f96e6b86cdefdb3d412547816a82e3e0ebf9d2", ["0x0"], "0x32"],
|
["0x57f96e6b86cdefdb3d412547816a82e3e0ebf9d2", ["0x0"], "0x1024"],
|
||||||
)
|
)
|
||||||
|
|
||||||
_ = send_and_get_hash(ethermint.w3)
|
_ = send_and_get_hash(ethermint.w3)
|
||||||
|
@ -92,6 +92,21 @@ def wait_for_block(cli, height, timeout=240):
|
|||||||
raise TimeoutError(f"wait for block {height} timeout")
|
raise TimeoutError(f"wait for block {height} timeout")
|
||||||
|
|
||||||
|
|
||||||
|
def w3_wait_for_block(w3, height, timeout=240):
|
||||||
|
for i in range(timeout * 2):
|
||||||
|
try:
|
||||||
|
current_height = w3.eth.block_number
|
||||||
|
except Exception as e:
|
||||||
|
print(f"get json-rpc block number failed: {e}", file=sys.stderr)
|
||||||
|
else:
|
||||||
|
if current_height >= height:
|
||||||
|
break
|
||||||
|
print("current block height", current_height)
|
||||||
|
time.sleep(0.5)
|
||||||
|
else:
|
||||||
|
raise TimeoutError(f"wait for block {height} timeout")
|
||||||
|
|
||||||
|
|
||||||
def deploy_contract(w3, jsonfile, args=(), key=KEYS["validator"]):
|
def deploy_contract(w3, jsonfile, args=(), key=KEYS["validator"]):
|
||||||
"""
|
"""
|
||||||
deploy contract and return the deployed contract instance
|
deploy contract and return the deployed contract instance
|
||||||
|
Loading…
Reference in New Issue
Block a user