Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problem: no plan for testnet to update default max_callback_gas param #1252

Merged
merged 11 commits into from
Dec 7, 2023
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
33 changes: 29 additions & 4 deletions app/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,17 @@
feemarkettypes "github.com/evmos/ethermint/x/feemarket/types"
)

// enlarge block gas limit
func (app *App) enlargeBlockGasLimit(ctx sdk.Context) error {
consParams, err := app.ConsensusParamsKeeper.Get(ctx)
if err != nil {
return err
}
consParams.Block.MaxGas = 60_000_000
app.ConsensusParamsKeeper.Set(ctx, consParams)
return nil

Check warning on line 46 in app/upgrades.go

View check run for this annotation

Codecov / codecov/patch

app/upgrades.go#L39-L46

Added lines #L39 - L46 were not covered by tests
}

func (app *App) RegisterUpgradeHandlers(cdc codec.BinaryCodec, clientKeeper clientkeeper.Keeper) {
planName := "v1.1.0"
// Set param key table for params module migration
Expand Down Expand Up @@ -108,15 +119,29 @@
return m, err
}

// enlarge block gas limit
consParams, err := app.ConsensusParamsKeeper.Get(ctx)
if err := app.enlargeBlockGasLimit(ctx); err != nil {
return m, err
}
return m, nil

Check warning on line 125 in app/upgrades.go

View check run for this annotation

Codecov / codecov/patch

app/upgrades.go#L122-L125

Added lines #L122 - L125 were not covered by tests
})

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)

Check warning on line 130 in app/upgrades.go

View check run for this annotation

Codecov / codecov/patch

app/upgrades.go#L130

Added line #L130 was not covered by tests
if err != nil {
return m, err
}
consParams.Block.MaxGas = 60_000_000
app.ConsensusParamsKeeper.Set(ctx, consParams)
params := app.CronosKeeper.GetParams(ctx)
params.MaxCallbackGas = cronostypes.MaxCallbackGasDefaultValue
if err := app.CronosKeeper.SetParams(ctx, params); err != nil {
return m, err
}
if err := app.enlargeBlockGasLimit(ctx); err != nil {
return m, err
}

Check warning on line 141 in app/upgrades.go

View check run for this annotation

Codecov / codecov/patch

app/upgrades.go#L134-L141

Added lines #L134 - L141 were not covered by tests
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
36 changes: 10 additions & 26 deletions integration_tests/configs/cosmovisor.jsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -10,39 +10,23 @@ config {
genesis+: {
app_state+: {
bank+: {
params: {
send_enabled: [
{
denom: 'stake',
enabled: true,
},
{
denom: 'basetcro',
enabled: false,
},
],
},
send_enabled+: [
{
denom: 'stake',
enabled: true,
},
{
denom: 'basetcro',
enabled: false,
},
],
},
mmsqe marked this conversation as resolved.
Show resolved Hide resolved
feemarket+: {
params+: {
no_base_fee: false,
base_fee:: super.base_fee,
},
},
gov: {
voting_params: {
voting_period: '10s',
},
deposit_params: {
max_deposit_period: '10s',
min_deposit: [
{
denom: 'basetcro',
amount: '1',
},
],
},
},
},
},
},
Expand Down
6 changes: 3 additions & 3 deletions integration_tests/configs/upgrade-test-package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ let
shortRev = builtins.substring 0 7 rev;
};
}).defaultNix;
# v1.0.12
released = (fetchFlake "crypto-org-chain/cronos" "a54d8a9659a98b917d3fc1ae39489fbc0699df60").default;
# 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"; path = current; }
{ name = "v1.1.0-testnet"; path = current; }
]
88 changes: 21 additions & 67 deletions integration_tests/cosmoscli.py
Original file line number Diff line number Diff line change
Expand Up @@ -667,73 +667,12 @@ 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):
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
kwargs.setdefault("gas", DEFAULT_GAS)
kwargs.setdefault("broadcast_mode", "block")
# kwargs.setdefault("broadcast_mode", "block")
if kind == "software-upgrade":
return json.loads(
rsp = json.loads(
self.raw(
"tx",
"gov",
Expand All @@ -755,8 +694,11 @@ def gov_propose_legacy(self, proposer, kind, proposal, **kwargs):
**kwargs,
)
)
if rsp["code"] == 0:
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 +715,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 +736,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):
kwargs.setdefault("gas_prices", DEFAULT_GAS_PRICE)
return json.loads(
rsp = json.loads(
self.raw(
"tx",
"gov",
Expand All @@ -807,6 +755,9 @@ def gov_vote(self, voter, proposal_id, option, **kwargs):
**kwargs,
)
)
if rsp["code"] == 0:
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 @@ -1196,7 +1147,7 @@ def gov_propose_update_client_legacy(self, proposal, **kwargs):

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 +1159,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
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
Loading