Skip to content

Commit f97e655

Browse files
authored
Problem: no plan for testnet to update default max_callback_gas param (#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 <mavis@crypto.com> * cleanup * add test * fix max_gas in test * test both * add exec * Apply suggestions from code review * cleanup * concurrent test --------- Signed-off-by: mmsqe <mavis@crypto.com>
1 parent abc3297 commit f97e655

File tree

12 files changed

+227
-211
lines changed

12 files changed

+227
-211
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
- [#1247](https://github.com/crypto-org-chain/cronos/pull/1247) Update ethermint to develop, go-ethereum to `v1.11.2`.
1818
- [#1235](https://github.com/crypto-org-chain/cronos/pull/1235) Add channel detail in ica packet callback.
1919
- [#1251](https://github.com/crypto-org-chain/cronos/pull/1251) Adjust require gas for submitMsgs in ica precompile.
20+
- [#1252](https://github.com/crypto-org-chain/cronos/pull/1252) Add plan `v1.1.0-testnet` to update default max_callback_gas param.
2021

2122
### Improvements
2223

app/upgrades.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,21 @@ func (app *App) RegisterUpgradeHandlers(cdc codec.BinaryCodec, clientKeeper clie
117117
app.ConsensusParamsKeeper.Set(ctx, consParams)
118118
return m, nil
119119
})
120+
121+
testnetPlanName := "v1.1.0-testnet"
122+
app.UpgradeKeeper.SetUpgradeHandler(testnetPlanName, func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
123+
m, err := app.mm.RunMigrations(ctx, app.configurator, fromVM)
124+
if err != nil {
125+
return m, err
126+
}
127+
params := app.CronosKeeper.GetParams(ctx)
128+
params.MaxCallbackGas = cronostypes.MaxCallbackGasDefaultValue
129+
if err := app.CronosKeeper.SetParams(ctx, params); err != nil {
130+
return m, err
131+
}
132+
return m, nil
133+
})
134+
120135
upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk()
121136
if err != nil {
122137
panic(fmt.Sprintf("failed to read upgrade info from disk %s", err))
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
local config = import 'default.jsonnet';
2+
3+
config {
4+
'cronos_777-1'+: {
5+
'app-config'+: {
6+
'app-db-backend': 'rocksdb',
7+
'minimum-gas-prices': '100000000000basetcro',
8+
'iavl-lazy-loading':: super['iavl-lazy-loading'],
9+
},
10+
genesis+: {
11+
consensus_params+: {
12+
block+: {
13+
max_gas: '60000000',
14+
},
15+
},
16+
app_state+: {
17+
bank+: {
18+
send_enabled+: [
19+
{
20+
denom: 'stake',
21+
enabled: true,
22+
},
23+
{
24+
denom: 'basetcro',
25+
enabled: false,
26+
},
27+
],
28+
},
29+
feemarket+: {
30+
params+: {
31+
no_base_fee: false,
32+
base_fee:: super.base_fee,
33+
},
34+
},
35+
},
36+
},
37+
},
38+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
let
2+
pkgs = import ../../nix { };
3+
fetchFlake = repo: rev: (pkgs.flake-compat {
4+
src = {
5+
outPath = builtins.fetchTarball "https://github.com/${repo}/archive/${rev}.tar.gz";
6+
inherit rev;
7+
shortRev = builtins.substring 0 7 rev;
8+
};
9+
}).defaultNix;
10+
# v1.1.0-rc1
11+
released = (fetchFlake "crypto-org-chain/cronos" "e61acd9193ac455098987e578ee6374ecc249836").default;
12+
current = pkgs.callPackage ../../. { };
13+
in
14+
pkgs.linkFarm "upgrade-test-package" [
15+
{ name = "genesis"; path = released; }
16+
{ name = "v1.1.0-testnet"; path = current; }
17+
]

integration_tests/cosmoscli.py

Lines changed: 28 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -667,73 +667,13 @@ def edit_validator(
667667
)
668668
)
669669

670-
def gov_propose_v0_7(self, proposer, kind, proposal, **kwargs):
671-
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
672-
if kind == "software-upgrade":
673-
return json.loads(
674-
self.raw(
675-
"tx",
676-
"gov",
677-
"submit-proposal",
678-
kind,
679-
proposal["name"],
680-
"-y",
681-
from_=proposer,
682-
# content
683-
title=proposal.get("title"),
684-
description=proposal.get("description"),
685-
upgrade_height=proposal.get("upgrade-height"),
686-
upgrade_time=proposal.get("upgrade-time"),
687-
upgrade_info=proposal.get("upgrade-info"),
688-
deposit=proposal.get("deposit"),
689-
# basic
690-
home=self.data_dir,
691-
**kwargs,
692-
)
693-
)
694-
elif kind == "cancel-software-upgrade":
695-
return json.loads(
696-
self.raw(
697-
"tx",
698-
"gov",
699-
"submit-proposal",
700-
kind,
701-
"-y",
702-
from_=proposer,
703-
# content
704-
title=proposal.get("title"),
705-
description=proposal.get("description"),
706-
deposit=proposal.get("deposit"),
707-
# basic
708-
home=self.data_dir,
709-
**kwargs,
710-
)
711-
)
712-
else:
713-
with tempfile.NamedTemporaryFile("w") as fp:
714-
json.dump(proposal, fp)
715-
fp.flush()
716-
return json.loads(
717-
self.raw(
718-
"tx",
719-
"gov",
720-
"submit-proposal",
721-
kind,
722-
fp.name,
723-
"-y",
724-
from_=proposer,
725-
# basic
726-
home=self.data_dir,
727-
**kwargs,
728-
)
729-
)
730-
731-
def gov_propose_legacy(self, proposer, kind, proposal, **kwargs):
670+
def gov_propose_legacy(self, proposer, kind, proposal, mode="block", **kwargs):
732671
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
733672
kwargs.setdefault("gas", DEFAULT_GAS)
734-
kwargs.setdefault("broadcast_mode", "block")
673+
if mode:
674+
kwargs.setdefault("broadcast_mode", mode)
735675
if kind == "software-upgrade":
736-
return json.loads(
676+
rsp = json.loads(
737677
self.raw(
738678
"tx",
739679
"gov",
@@ -755,8 +695,11 @@ def gov_propose_legacy(self, proposer, kind, proposal, **kwargs):
755695
**kwargs,
756696
)
757697
)
698+
if rsp["code"] == 0 and mode is None:
699+
rsp = self.event_query_tx_for(rsp["txhash"])
700+
return rsp
758701
elif kind == "cancel-software-upgrade":
759-
return json.loads(
702+
rsp = json.loads(
760703
self.raw(
761704
"tx",
762705
"gov",
@@ -773,11 +716,14 @@ def gov_propose_legacy(self, proposer, kind, proposal, **kwargs):
773716
**kwargs,
774717
)
775718
)
719+
if rsp["code"] == 0:
720+
rsp = self.event_query_tx_for(rsp["txhash"])
721+
return rsp
776722
else:
777723
with tempfile.NamedTemporaryFile("w") as fp:
778724
json.dump(proposal, fp)
779725
fp.flush()
780-
return json.loads(
726+
rsp = json.loads(
781727
self.raw(
782728
"tx",
783729
"gov",
@@ -791,10 +737,13 @@ def gov_propose_legacy(self, proposer, kind, proposal, **kwargs):
791737
**kwargs,
792738
)
793739
)
740+
if rsp["code"] == 0:
741+
rsp = self.event_query_tx_for(rsp["txhash"])
742+
return rsp
794743

795-
def gov_vote(self, voter, proposal_id, option, **kwargs):
744+
def gov_vote(self, voter, proposal_id, option, event_query_tx=True, **kwargs):
796745
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
797-
return json.loads(
746+
rsp = json.loads(
798747
self.raw(
799748
"tx",
800749
"gov",
@@ -807,6 +756,9 @@ def gov_vote(self, voter, proposal_id, option, **kwargs):
807756
**kwargs,
808757
)
809758
)
759+
if rsp["code"] == 0 and event_query_tx:
760+
rsp = self.event_query_tx_for(rsp["txhash"])
761+
return rsp
810762

811763
def gov_deposit(self, depositor, proposal_id, amount):
812764
return json.loads(
@@ -1172,7 +1124,7 @@ def gov_propose_token_mapping_change_legacy(
11721124
def gov_propose_update_client_legacy(self, proposal, **kwargs):
11731125
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
11741126
kwargs.setdefault("gas", 600000)
1175-
return json.loads(
1127+
rsp = json.loads(
11761128
self.raw(
11771129
"tx",
11781130
"gov",
@@ -1193,10 +1145,13 @@ def gov_propose_update_client_legacy(self, proposal, **kwargs):
11931145
**kwargs,
11941146
)
11951147
)
1148+
if rsp["code"] == 0:
1149+
rsp = self.event_query_tx_for(rsp["txhash"])
1150+
return rsp
11961151

11971152
def submit_gov_proposal(self, proposal, **kwargs):
11981153
default_kwargs = self.get_default_kwargs()
1199-
return json.loads(
1154+
rsp = json.loads(
12001155
self.raw(
12011156
"tx",
12021157
"gov",
@@ -1208,6 +1163,9 @@ def submit_gov_proposal(self, proposal, **kwargs):
12081163
**(default_kwargs | kwargs),
12091164
)
12101165
)
1166+
if rsp["code"] == 0:
1167+
rsp = self.event_query_tx_for(rsp["txhash"])
1168+
return rsp
12111169

12121170
def update_token_mapping(self, denom, contract, symbol, decimals, **kwargs):
12131171
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)

integration_tests/test_broadcast.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ def custom_cronos(tmp_path_factory):
1515

1616

1717
def test_submit_any_proposal(custom_cronos, tmp_path):
18-
submit_any_proposal(custom_cronos, tmp_path, True)
18+
submit_any_proposal(custom_cronos, tmp_path)

integration_tests/test_gov_update_params.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ def test_gov_update_params(cronos, tmp_path):
3131
}
3232
proposal.write_text(json.dumps(proposal_src))
3333
rsp = cli.submit_gov_proposal(proposal, from_="community")
34-
3534
assert rsp["code"] == 0, rsp["raw_log"]
3635
approve_proposal(cronos, rsp)
3736
print("check params have been updated now")

integration_tests/test_ica.py

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44
from pystarport import cluster
55

66
from .ibc_utils import (
7+
deploy_contract,
78
funds_ica,
89
gen_send_msg,
10+
parse_events_rpc,
911
prepare_network,
1012
register_acc,
1113
wait_for_check_channel_ready,
1214
wait_for_check_tx,
1315
)
16+
from .utils import CONTRACTS, wait_for_fn
1417

1518

1619
@pytest.fixture(scope="module")
@@ -33,10 +36,49 @@ def test_ica(ibc, tmp_path):
3336
cli_controller = ibc.cronos.cosmos_cli()
3437
ica_address, channel_id = register_acc(cli_controller, connid)
3538
balance = funds_ica(cli_host, ica_address)
36-
num_txs = len(cli_host.query_all_txs(ica_address)["txs"])
3739
to = cli_host.address("signer2")
3840
amount = 1000
3941
denom = "basecro"
42+
jsonfile = CONTRACTS["TestICA"]
43+
tcontract = deploy_contract(ibc.cronos.w3, jsonfile)
44+
memo = {"src_callback": {"address": tcontract.address}}
45+
46+
def generated_tx_packet(msg_num):
47+
# generate a transaction to send to host chain
48+
m = gen_send_msg(ica_address, to, denom, amount)
49+
msgs = []
50+
for i in range(msg_num):
51+
msgs.append(m)
52+
data = json.dumps(msgs)
53+
packet = cli_controller.ica_generate_packet_data(data, json.dumps(memo))
54+
return packet
55+
56+
def send_tx(msg_num, gas="200000"):
57+
num_txs = len(cli_host.query_all_txs(ica_address)["txs"])
58+
generated_tx = json.dumps(generated_tx_packet(msg_num))
59+
# submit transaction on host chain on behalf of interchain account
60+
rsp = cli_controller.ica_ctrl_send_tx(
61+
connid,
62+
generated_tx,
63+
gas=gas,
64+
from_="signer2",
65+
)
66+
assert rsp["code"] == 0, rsp["raw_log"]
67+
wait_for_check_tx(cli_host, ica_address, num_txs)
68+
69+
msg_num = 10
70+
send_tx(msg_num)
71+
balance -= amount * msg_num
72+
assert cli_host.balance(ica_address, denom=denom) == balance
73+
74+
def check_for_ack():
75+
criteria = "message.action=/ibc.core.channel.v1.MsgAcknowledgement"
76+
return cli_controller.tx_search(criteria)["txs"]
77+
78+
txs = wait_for_fn("ack change", check_for_ack)
79+
events = parse_events_rpc(txs[0]["events"])
80+
err = events.get("ibc_src_callback")["callback_error"]
81+
assert "sender is not authenticated" in err, err
4082

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

58100
def submit_msgs(msg_num, timeout_in_s=no_timeout, gas="200000"):
101+
num_txs = len(cli_host.query_all_txs(ica_address)["txs"])
59102
# submit transaction on host chain on behalf of interchain account
60103
rsp = cli_controller.icaauth_submit_tx(
61104
connid,
@@ -80,5 +123,6 @@ def submit_msgs(msg_num, timeout_in_s=no_timeout, gas="200000"):
80123
# submit normal txs should work
81124
msg_num = 2
82125
submit_msgs(msg_num)
126+
balance -= amount * msg_num
83127
# check if the funds are reduced in interchain account
84-
assert cli_host.balance(ica_address, denom=denom) == balance - amount * msg_num
128+
assert cli_host.balance(ica_address, denom=denom) == balance

0 commit comments

Comments
 (0)