forked from cerc-io/laconicd-deprecated
tests(integration): block gas limit tests (#1500)
* added antehandler test * add integration tests * add back gas call test * added integration tests v2 * linters * Update tests/integration_tests/test_gas.py * Update tests/integration_tests/test_gas.py * update gomod2nix * Update tests/integration_tests/test_gas.py Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: Freddy Caceres <facs95@gmail.com>
This commit is contained in:
co-authored by
Federico Kunze Küllmer
Freddy Caceres
parent
5b43aab0d5
commit
a230c0ec2c
Executable → Regular
+65
-21
@@ -1,4 +1,13 @@
|
||||
from .utils import ADDRS, CONTRACTS, KEYS, deploy_contract, send_transaction
|
||||
import pytest
|
||||
|
||||
from .utils import (
|
||||
ADDRS,
|
||||
CONTRACTS,
|
||||
KEYS,
|
||||
deploy_contract,
|
||||
send_transaction,
|
||||
w3_wait_for_new_blocks,
|
||||
)
|
||||
|
||||
|
||||
def test_gas_eth_tx(geth, ethermint):
|
||||
@@ -21,12 +30,10 @@ def test_gas_eth_tx(geth, ethermint):
|
||||
def test_gas_deployment(geth, ethermint):
|
||||
# deploy an identical contract on geth and ethermint
|
||||
# ensure that the gasUsed is equivalent
|
||||
_, geth_contract_receipt = deploy_contract(
|
||||
geth.w3,
|
||||
CONTRACTS["TestERC20A"])
|
||||
_, geth_contract_receipt = deploy_contract(geth.w3, CONTRACTS["TestERC20A"])
|
||||
_, ethermint_contract_receipt = deploy_contract(
|
||||
ethermint.w3,
|
||||
CONTRACTS["TestERC20A"])
|
||||
ethermint.w3, CONTRACTS["TestERC20A"]
|
||||
)
|
||||
assert geth_contract_receipt.gasUsed == ethermint_contract_receipt.gasUsed
|
||||
|
||||
|
||||
@@ -35,28 +42,65 @@ def test_gas_call(geth, ethermint):
|
||||
|
||||
# deploy an identical contract on geth and ethermint
|
||||
# ensure that the contract has a function which consumes non-trivial gas
|
||||
geth_contract, _ = deploy_contract(
|
||||
geth.w3,
|
||||
CONTRACTS["BurnGas"])
|
||||
ethermint_contract, _ = deploy_contract(
|
||||
ethermint.w3,
|
||||
CONTRACTS["BurnGas"])
|
||||
geth_contract, _ = deploy_contract(geth.w3, CONTRACTS["BurnGas"])
|
||||
ethermint_contract, _ = deploy_contract(ethermint.w3, CONTRACTS["BurnGas"])
|
||||
|
||||
# call the contract and get tx receipt for geth
|
||||
geth_gas_price = geth.w3.eth.gas_price
|
||||
geth_txhash = (geth_contract.functions
|
||||
.burnGas(function_input)
|
||||
.transact({'from': ADDRS["validator"], "gasPrice": geth_gas_price}))
|
||||
geth_txhash = geth_contract.functions.burnGas(function_input).transact(
|
||||
{"from": ADDRS["validator"], "gasPrice": geth_gas_price}
|
||||
)
|
||||
geth_call_receipt = geth.w3.eth.wait_for_transaction_receipt(geth_txhash)
|
||||
|
||||
# repeat the above for ethermint
|
||||
ethermint_gas_price = ethermint.w3.eth.gas_price
|
||||
ethermint_txhash = (ethermint_contract.functions
|
||||
.burnGas(function_input)
|
||||
.transact({'from': ADDRS["validator"],
|
||||
"gasPrice": ethermint_gas_price}))
|
||||
ethermint_call_receipt = (ethermint.w3.
|
||||
eth.wait_for_transaction_receipt(ethermint_txhash))
|
||||
ethermint_txhash = ethermint_contract.functions.burnGas(function_input).transact(
|
||||
{"from": ADDRS["validator"], "gasPrice": ethermint_gas_price}
|
||||
)
|
||||
ethermint_call_receipt = ethermint.w3.eth.wait_for_transaction_receipt(
|
||||
ethermint_txhash
|
||||
)
|
||||
|
||||
# ensure that the gasUsed is equivalent
|
||||
assert geth_call_receipt.gasUsed == ethermint_call_receipt.gasUsed
|
||||
|
||||
|
||||
def test_block_gas_limit(ethermint):
|
||||
tx_value = 10
|
||||
|
||||
# get the block gas limit from the latest block
|
||||
w3_wait_for_new_blocks(ethermint.w3, 5)
|
||||
block = ethermint.w3.eth.get_block("latest")
|
||||
exceeded_gas_limit = block.gasLimit + 100
|
||||
|
||||
# send a transaction exceeding the block gas limit
|
||||
ethermint_gas_price = ethermint.w3.eth.gas_price
|
||||
tx = {
|
||||
"to": ADDRS["community"],
|
||||
"value": tx_value,
|
||||
"gas": exceeded_gas_limit,
|
||||
"gasPrice": ethermint_gas_price,
|
||||
}
|
||||
|
||||
# expect an error due to the block gas limit
|
||||
with pytest.raises(Exception):
|
||||
send_transaction(ethermint.w3, tx, KEYS["validator"])
|
||||
|
||||
# deploy a contract on ethermint
|
||||
ethermint_contract, _ = deploy_contract(ethermint.w3, CONTRACTS["BurnGas"])
|
||||
|
||||
# expect an error on contract call due to block gas limit
|
||||
with pytest.raises(Exception):
|
||||
ethermint_txhash = ethermint_contract.functions.burnGas(
|
||||
exceeded_gas_limit
|
||||
).transact(
|
||||
{
|
||||
"from": ADDRS["validator"],
|
||||
"gas": exceeded_gas_limit,
|
||||
"gasPrice": ethermint_gas_price,
|
||||
}
|
||||
)
|
||||
(ethermint.w3.eth.wait_for_transaction_receipt(ethermint_txhash))
|
||||
|
||||
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user