949674e511
* fix(rpc): align fee history (#1611) * update nix * add next fee in fee history * fix test * add change doc * height + 1 for next fee * cross check baseFeePerGas len * Update tests/integration_tests/test_fee_history.py Co-authored-by: MalteHerrmann <42640438+MalteHerrmann@users.noreply.github.com> * fix oldestBlock & align earliest input as eth * update doc * update nix * isort test_fee_history.py * fix test * align rpc res as eth * add cross check * add baseFeePerGas len check * add oldestBlock check Co-authored-by: MalteHerrmann <42640438+MalteHerrmann@users.noreply.github.com> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> (cherry picked from commit 47fdfd3d8318358c2578b610bc35bc8c1ebb131e) # Conflicts: # CHANGELOG.md * address merge conflicts Co-authored-by: mmsqe <mavis@crypto.com> Co-authored-by: MalteHerrmann <malte@evmos.org> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
|
|
import pytest
|
|
from web3 import Web3
|
|
|
|
from .network import setup_ethermint
|
|
from .utils import ADDRS, send_transaction
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def custom_ethermint(tmp_path_factory):
|
|
path = tmp_path_factory.mktemp("fee-history")
|
|
yield from setup_ethermint(path, 26500, long_timeout_commit=True)
|
|
|
|
|
|
@pytest.fixture(scope="module", params=["ethermint", "geth"])
|
|
def cluster(request, custom_ethermint, geth):
|
|
"""
|
|
run on both ethermint and geth
|
|
"""
|
|
provider = request.param
|
|
if provider == "ethermint":
|
|
yield custom_ethermint
|
|
elif provider == "geth":
|
|
yield geth
|
|
else:
|
|
raise NotImplementedError
|
|
|
|
|
|
def test_basic(cluster):
|
|
w3: Web3 = cluster.w3
|
|
call = w3.provider.make_request
|
|
tx = {"to": ADDRS["community"], "value": 10, "gasPrice": w3.eth.gas_price}
|
|
send_transaction(w3, tx)
|
|
size = 4
|
|
# size of base fee + next fee
|
|
max = size + 1
|
|
# only 1 base fee + next fee
|
|
min = 2
|
|
method = "eth_feeHistory"
|
|
field = "baseFeePerGas"
|
|
percentiles = [100]
|
|
height = w3.eth.block_number
|
|
latest = dict(
|
|
blocks=["latest", hex(height)],
|
|
expect=max,
|
|
)
|
|
earliest = dict(
|
|
blocks=["earliest", "0x0"],
|
|
expect=min,
|
|
)
|
|
for tc in [latest, earliest]:
|
|
res = []
|
|
with ThreadPoolExecutor(len(tc["blocks"])) as exec:
|
|
tasks = [
|
|
exec.submit(call, method, [size, b, percentiles]) for b in tc["blocks"]
|
|
]
|
|
res = [future.result()["result"][field] for future in as_completed(tasks)]
|
|
assert len(res) == len(tc["blocks"])
|
|
assert res[0] == res[1]
|
|
assert len(res[0]) == tc["expect"]
|
|
|
|
for x in range(max):
|
|
i = x + 1
|
|
fee_history = call(method, [size, hex(i), percentiles])
|
|
# start to reduce diff on i <= size - min
|
|
diff = size - min - i
|
|
reduce = size - diff
|
|
target = reduce if diff >= 0 else max
|
|
res = fee_history["result"]
|
|
assert len(res[field]) == target
|
|
oldest = i + min - max
|
|
assert res["oldestBlock"] == hex(oldest if oldest > 0 else 0)
|