Skip to content

Commit

Permalink
Problem: no plan for testnet to update default max_callback_gas param (
Browse files Browse the repository at this point in the history
…#1252)

* Problem: no plan for testnet to update default max_callback_gas param

* mv cb test to ica

* Update CHANGELOG.md

Signed-off-by: mmsqe <[email protected]>

* cleanup

* add test

* fix max_gas in test

* test both

* add exec

* Apply suggestions from code review

* cleanup

* concurrent test

---------

Signed-off-by: mmsqe <[email protected]>
  • Loading branch information
mmsqe authored Dec 7, 2023
1 parent abc3297 commit f97e655
Show file tree
Hide file tree
Showing 12 changed files with 227 additions and 211 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
- [#1247](https://github.com/crypto-org-chain/cronos/pull/1247) Update ethermint to develop, go-ethereum to `v1.11.2`.
- [#1235](https://github.com/crypto-org-chain/cronos/pull/1235) Add channel detail in ica packet callback.
- [#1251](https://github.com/crypto-org-chain/cronos/pull/1251) Adjust require gas for submitMsgs in ica precompile.
- [#1252](https://github.com/crypto-org-chain/cronos/pull/1252) Add plan `v1.1.0-testnet` to update default max_callback_gas param.

### Improvements

Expand Down
15 changes: 15 additions & 0 deletions app/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,21 @@ func (app *App) RegisterUpgradeHandlers(cdc codec.BinaryCodec, clientKeeper clie
app.ConsensusParamsKeeper.Set(ctx, consParams)
return m, nil
})

testnetPlanName := "v1.1.0-testnet"
app.UpgradeKeeper.SetUpgradeHandler(testnetPlanName, func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
m, err := app.mm.RunMigrations(ctx, app.configurator, fromVM)
if err != nil {
return m, err
}
params := app.CronosKeeper.GetParams(ctx)
params.MaxCallbackGas = cronostypes.MaxCallbackGasDefaultValue
if err := app.CronosKeeper.SetParams(ctx, params); err != nil {
return m, err
}
return m, nil
})

upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk()
if err != nil {
panic(fmt.Sprintf("failed to read upgrade info from disk %s", err))
Expand Down
38 changes: 38 additions & 0 deletions integration_tests/configs/cosmovisor_testnet.jsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
local config = import 'default.jsonnet';

config {
'cronos_777-1'+: {
'app-config'+: {
'app-db-backend': 'rocksdb',
'minimum-gas-prices': '100000000000basetcro',
'iavl-lazy-loading':: super['iavl-lazy-loading'],
},
genesis+: {
consensus_params+: {
block+: {
max_gas: '60000000',
},
},
app_state+: {
bank+: {
send_enabled+: [
{
denom: 'stake',
enabled: true,
},
{
denom: 'basetcro',
enabled: false,
},
],
},
feemarket+: {
params+: {
no_base_fee: false,
base_fee:: super.base_fee,
},
},
},
},
},
}
17 changes: 17 additions & 0 deletions integration_tests/configs/upgrade-testnet-test-package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
let
pkgs = import ../../nix { };
fetchFlake = repo: rev: (pkgs.flake-compat {
src = {
outPath = builtins.fetchTarball "https://github.com/${repo}/archive/${rev}.tar.gz";
inherit rev;
shortRev = builtins.substring 0 7 rev;
};
}).defaultNix;
# v1.1.0-rc1
released = (fetchFlake "crypto-org-chain/cronos" "e61acd9193ac455098987e578ee6374ecc249836").default;
current = pkgs.callPackage ../../. { };
in
pkgs.linkFarm "upgrade-test-package" [
{ name = "genesis"; path = released; }
{ name = "v1.1.0-testnet"; path = current; }
]
98 changes: 28 additions & 70 deletions integration_tests/cosmoscli.py
Original file line number Diff line number Diff line change
Expand Up @@ -667,73 +667,13 @@ def edit_validator(
)
)

def gov_propose_v0_7(self, proposer, kind, proposal, **kwargs):
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
if kind == "software-upgrade":
return json.loads(
self.raw(
"tx",
"gov",
"submit-proposal",
kind,
proposal["name"],
"-y",
from_=proposer,
# content
title=proposal.get("title"),
description=proposal.get("description"),
upgrade_height=proposal.get("upgrade-height"),
upgrade_time=proposal.get("upgrade-time"),
upgrade_info=proposal.get("upgrade-info"),
deposit=proposal.get("deposit"),
# basic
home=self.data_dir,
**kwargs,
)
)
elif kind == "cancel-software-upgrade":
return json.loads(
self.raw(
"tx",
"gov",
"submit-proposal",
kind,
"-y",
from_=proposer,
# content
title=proposal.get("title"),
description=proposal.get("description"),
deposit=proposal.get("deposit"),
# basic
home=self.data_dir,
**kwargs,
)
)
else:
with tempfile.NamedTemporaryFile("w") as fp:
json.dump(proposal, fp)
fp.flush()
return json.loads(
self.raw(
"tx",
"gov",
"submit-proposal",
kind,
fp.name,
"-y",
from_=proposer,
# basic
home=self.data_dir,
**kwargs,
)
)

def gov_propose_legacy(self, proposer, kind, proposal, **kwargs):
def gov_propose_legacy(self, proposer, kind, proposal, mode="block", **kwargs):
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
kwargs.setdefault("gas", DEFAULT_GAS)
kwargs.setdefault("broadcast_mode", "block")
if mode:
kwargs.setdefault("broadcast_mode", mode)
if kind == "software-upgrade":
return json.loads(
rsp = json.loads(
self.raw(
"tx",
"gov",
Expand All @@ -755,8 +695,11 @@ def gov_propose_legacy(self, proposer, kind, proposal, **kwargs):
**kwargs,
)
)
if rsp["code"] == 0 and mode is None:
rsp = self.event_query_tx_for(rsp["txhash"])
return rsp
elif kind == "cancel-software-upgrade":
return json.loads(
rsp = json.loads(
self.raw(
"tx",
"gov",
Expand All @@ -773,11 +716,14 @@ def gov_propose_legacy(self, proposer, kind, proposal, **kwargs):
**kwargs,
)
)
if rsp["code"] == 0:
rsp = self.event_query_tx_for(rsp["txhash"])
return rsp
else:
with tempfile.NamedTemporaryFile("w") as fp:
json.dump(proposal, fp)
fp.flush()
return json.loads(
rsp = json.loads(
self.raw(
"tx",
"gov",
Expand All @@ -791,10 +737,13 @@ def gov_propose_legacy(self, proposer, kind, proposal, **kwargs):
**kwargs,
)
)
if rsp["code"] == 0:
rsp = self.event_query_tx_for(rsp["txhash"])
return rsp

def gov_vote(self, voter, proposal_id, option, **kwargs):
def gov_vote(self, voter, proposal_id, option, event_query_tx=True, **kwargs):
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
return json.loads(
rsp = json.loads(
self.raw(
"tx",
"gov",
Expand All @@ -807,6 +756,9 @@ def gov_vote(self, voter, proposal_id, option, **kwargs):
**kwargs,
)
)
if rsp["code"] == 0 and event_query_tx:
rsp = self.event_query_tx_for(rsp["txhash"])
return rsp

def gov_deposit(self, depositor, proposal_id, amount):
return json.loads(
Expand Down Expand Up @@ -1172,7 +1124,7 @@ def gov_propose_token_mapping_change_legacy(
def gov_propose_update_client_legacy(self, proposal, **kwargs):
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
kwargs.setdefault("gas", 600000)
return json.loads(
rsp = json.loads(
self.raw(
"tx",
"gov",
Expand All @@ -1193,10 +1145,13 @@ def gov_propose_update_client_legacy(self, proposal, **kwargs):
**kwargs,
)
)
if rsp["code"] == 0:
rsp = self.event_query_tx_for(rsp["txhash"])
return rsp

def submit_gov_proposal(self, proposal, **kwargs):
default_kwargs = self.get_default_kwargs()
return json.loads(
rsp = json.loads(
self.raw(
"tx",
"gov",
Expand All @@ -1208,6 +1163,9 @@ def submit_gov_proposal(self, proposal, **kwargs):
**(default_kwargs | kwargs),
)
)
if rsp["code"] == 0:
rsp = self.event_query_tx_for(rsp["txhash"])
return rsp

def update_token_mapping(self, denom, contract, symbol, decimals, **kwargs):
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
Expand Down
2 changes: 1 addition & 1 deletion integration_tests/test_broadcast.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ def custom_cronos(tmp_path_factory):


def test_submit_any_proposal(custom_cronos, tmp_path):
submit_any_proposal(custom_cronos, tmp_path, True)
submit_any_proposal(custom_cronos, tmp_path)
1 change: 0 additions & 1 deletion integration_tests/test_gov_update_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ def test_gov_update_params(cronos, tmp_path):
}
proposal.write_text(json.dumps(proposal_src))
rsp = cli.submit_gov_proposal(proposal, from_="community")

assert rsp["code"] == 0, rsp["raw_log"]
approve_proposal(cronos, rsp)
print("check params have been updated now")
Expand Down
48 changes: 46 additions & 2 deletions integration_tests/test_ica.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@
from pystarport import cluster

from .ibc_utils import (
deploy_contract,
funds_ica,
gen_send_msg,
parse_events_rpc,
prepare_network,
register_acc,
wait_for_check_channel_ready,
wait_for_check_tx,
)
from .utils import CONTRACTS, wait_for_fn


@pytest.fixture(scope="module")
Expand All @@ -33,10 +36,49 @@ def test_ica(ibc, tmp_path):
cli_controller = ibc.cronos.cosmos_cli()
ica_address, channel_id = register_acc(cli_controller, connid)
balance = funds_ica(cli_host, ica_address)
num_txs = len(cli_host.query_all_txs(ica_address)["txs"])
to = cli_host.address("signer2")
amount = 1000
denom = "basecro"
jsonfile = CONTRACTS["TestICA"]
tcontract = deploy_contract(ibc.cronos.w3, jsonfile)
memo = {"src_callback": {"address": tcontract.address}}

def generated_tx_packet(msg_num):
# generate a transaction to send to host chain
m = gen_send_msg(ica_address, to, denom, amount)
msgs = []
for i in range(msg_num):
msgs.append(m)
data = json.dumps(msgs)
packet = cli_controller.ica_generate_packet_data(data, json.dumps(memo))
return packet

def send_tx(msg_num, gas="200000"):
num_txs = len(cli_host.query_all_txs(ica_address)["txs"])
generated_tx = json.dumps(generated_tx_packet(msg_num))
# submit transaction on host chain on behalf of interchain account
rsp = cli_controller.ica_ctrl_send_tx(
connid,
generated_tx,
gas=gas,
from_="signer2",
)
assert rsp["code"] == 0, rsp["raw_log"]
wait_for_check_tx(cli_host, ica_address, num_txs)

msg_num = 10
send_tx(msg_num)
balance -= amount * msg_num
assert cli_host.balance(ica_address, denom=denom) == balance

def check_for_ack():
criteria = "message.action=/ibc.core.channel.v1.MsgAcknowledgement"
return cli_controller.tx_search(criteria)["txs"]

txs = wait_for_fn("ack change", check_for_ack)
events = parse_events_rpc(txs[0]["events"])
err = events.get("ibc_src_callback")["callback_error"]
assert "sender is not authenticated" in err, err

def generated_tx_txt(msg_num):
# generate a transaction to send to host chain
Expand All @@ -56,6 +98,7 @@ def generated_tx_txt(msg_num):
no_timeout = 60

def submit_msgs(msg_num, timeout_in_s=no_timeout, gas="200000"):
num_txs = len(cli_host.query_all_txs(ica_address)["txs"])
# submit transaction on host chain on behalf of interchain account
rsp = cli_controller.icaauth_submit_tx(
connid,
Expand All @@ -80,5 +123,6 @@ def submit_msgs(msg_num, timeout_in_s=no_timeout, gas="200000"):
# submit normal txs should work
msg_num = 2
submit_msgs(msg_num)
balance -= amount * msg_num
# check if the funds are reduced in interchain account
assert cli_host.balance(ica_address, denom=denom) == balance - amount * msg_num
assert cli_host.balance(ica_address, denom=denom) == balance
Loading

0 comments on commit f97e655

Please sign in to comment.