From 6f77b2dcd962e09dec4c8b9fcd40b97888b3ef57 Mon Sep 17 00:00:00 2001 From: omritoptix Date: Sun, 8 Dec 2024 21:06:18 +0100 Subject: [PATCH 1/2] Updated rdk to beefc7181c0c --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7a63db5..12bdd35 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/cosmos/gogoproto v1.5.0 github.com/cosmos/ibc-go/v6 v6.3.0 github.com/dvsekhvalnov/jose2go v1.5.0 - github.com/dymensionxyz/dymension-rdk v1.6.1-0.20241206123648-30ef7199888d + github.com/dymensionxyz/dymension-rdk v1.6.1-0.20241208180405-beefc7181c0c github.com/dymensionxyz/dymint v1.2.0-rc01.0.20241203150638-c0e39f93d729 github.com/ethereum/go-ethereum v1.12.0 github.com/evmos/evmos/v12 v12.1.6 diff --git a/go.sum b/go.sum index 41cee85..5f3e8ee 100644 --- a/go.sum +++ b/go.sum @@ -573,8 +573,8 @@ github.com/dymensionxyz/cosmos-sdk v0.46.17-0.20241128210616-e9dfe47b8c73 h1:A0O github.com/dymensionxyz/cosmos-sdk v0.46.17-0.20241128210616-e9dfe47b8c73/go.mod h1:VPUuzF+l+ekSGPV7VVB8m0OMQfwp3QdKWNZjvkU3A1U= github.com/dymensionxyz/cosmosclient v0.4.2-beta.0.20241121093220-e0d7ad456fbd h1:V89QyOFM84o9w0iFdctMU6So8SS/Xt32JWAXGqJduT0= github.com/dymensionxyz/cosmosclient v0.4.2-beta.0.20241121093220-e0d7ad456fbd/go.mod h1:3weqpVj/TqTFpC0LjEB3H+HZSpm7BrQ1QkEg1Ahy6KY= -github.com/dymensionxyz/dymension-rdk v1.6.1-0.20241206123648-30ef7199888d h1:sT5KXaBOzg8di1pMaXqwjGSxg9CuZIAJmjQowcFdmoQ= -github.com/dymensionxyz/dymension-rdk v1.6.1-0.20241206123648-30ef7199888d/go.mod h1:AA0rq+4H+yn/Agnx5L8ermhhny3FYgCv6UW9DzK5vss= +github.com/dymensionxyz/dymension-rdk v1.6.1-0.20241208180405-beefc7181c0c h1:IeSAVYLsMVd70ueA3l91LYXD0GuPQOepnrYGzIO8PC8= +github.com/dymensionxyz/dymension-rdk v1.6.1-0.20241208180405-beefc7181c0c/go.mod h1:cXWSHOgSmraTTQh1GLvWAz1HQycptq6kgHGhnwMtvK8= github.com/dymensionxyz/dymint v1.2.0-rc01.0.20241203150638-c0e39f93d729 h1:2HtdhYN0DSqBQTcSeK9+QXBJz8CF7u1YrLu8odkCFSY= github.com/dymensionxyz/dymint v1.2.0-rc01.0.20241203150638-c0e39f93d729/go.mod h1:C3VbfePK85aRCdA1iHzB2AYD+n1gKR9Pw+wm3wQUXvE= github.com/dymensionxyz/evmos/v12 v12.1.6-dymension-v0.4.2 h1:aVP3off7u2vsvRH7lHAUPTLdf9/AfnzC/rvvi0wC/co= From 224f23852761ce440e997282110f17b2e697f536 Mon Sep 17 00:00:00 2001 From: omritoptix Date: Mon, 9 Dec 2024 08:48:22 +0100 Subject: [PATCH 2/2] Added genesis template generators and genesis template. --- genesis-templates/genesis-mainnet.json | 312 +++++++++++++++++++++++ genesis-templates/genesis-testnet.json | 312 +++++++++++++++++++++++ scripts/generate_genesis_template.sh | 95 +++++++ scripts/minimal_update_genesis_params.sh | 31 --- 4 files changed, 719 insertions(+), 31 deletions(-) create mode 100644 genesis-templates/genesis-mainnet.json create mode 100644 genesis-templates/genesis-testnet.json create mode 100755 scripts/generate_genesis_template.sh delete mode 100644 scripts/minimal_update_genesis_params.sh diff --git a/genesis-templates/genesis-mainnet.json b/genesis-templates/genesis-mainnet.json new file mode 100644 index 0000000..f80cde5 --- /dev/null +++ b/genesis-templates/genesis-mainnet.json @@ -0,0 +1,312 @@ +{ + "genesis_time": "2024-12-09T07:41:25.834885Z", + "chain_id": "rollappwasm_1234-1", + "initial_height": "1", + "consensus_params": { + "block": { + "max_bytes": "500000", + "max_gas": "400000000", + "time_iota_ms": "1000" + }, + "evidence": { + "max_age_num_blocks": "100000", + "max_age_duration": "172800000000000", + "max_bytes": "500000" + }, + "validator": { + "pub_key_types": [ + "ed25519" + ] + }, + "version": {} + }, + "app_hash": "", + "app_state": { + "auth": { + "params": { + "max_memo_characters": "256", + "tx_sig_limit": "7", + "tx_size_cost_per_byte": "10", + "sig_verify_cost_ed25519": "590", + "sig_verify_cost_secp256k1": "1000" + }, + "accounts": [] + }, + "authz": { + "authorization": [] + }, + "bank": { + "params": { + "send_enabled": [], + "default_send_enabled": true + }, + "balances": [], + "supply": [], + "denom_metadata": [] + }, + "callback": { + "params": { + "callback_gas_limit": "1000000", + "max_block_reservation_limit": "3", + "max_future_reservation_limit": "10000", + "block_reservation_fee_multiplier": "0.000000000000000000", + "future_reservation_fee_multiplier": "0.000000000000000000", + "min_price_of_gas": { + "denom": "stake", + "amount": "0" + } + }, + "callbacks": [] + }, + "capability": { + "index": "1", + "owners": [] + }, + "cwerrors": { + "params": { + "error_stored_time": "302400", + "subscription_fee": { + "denom": "stake", + "amount": "0" + }, + "subscription_period": "302400" + }, + "errors": [] + }, + "distribution": { + "params": { + "community_tax": "0.00002", + "base_proposer_reward": "0.8", + "bonus_proposer_reward": "0.000000000000000000", + "withdraw_addr_enabled": true + }, + "fee_pool": { + "community_pool": [] + }, + "delegator_withdraw_infos": [], + "previous_proposer": "", + "outstanding_rewards": [], + "validator_accumulated_commissions": [], + "validator_historical_rewards": [], + "validator_current_rewards": [], + "delegator_starting_infos": [], + "validator_slash_events": [] + }, + "epochs": { + "epochs": [ + { + "identifier": "minute", + "start_time": "0001-01-01T00:00:00Z", + "duration": "60s", + "current_epoch": "0", + "current_epoch_start_time": "0001-01-01T00:00:00Z", + "epoch_counting_started": false, + "current_epoch_start_height": "0" + }, + { + "identifier": "hour", + "start_time": "0001-01-01T00:00:00Z", + "duration": "3600s", + "current_epoch": "0", + "current_epoch_start_time": "0001-01-01T00:00:00Z", + "epoch_counting_started": false, + "current_epoch_start_height": "0" + }, + { + "identifier": "day", + "start_time": "0001-01-01T00:00:00Z", + "duration": "86400s", + "current_epoch": "0", + "current_epoch_start_time": "0001-01-01T00:00:00Z", + "epoch_counting_started": false, + "current_epoch_start_height": "0" + }, + { + "identifier": "week", + "start_time": "0001-01-01T00:00:00Z", + "duration": "604800s", + "current_epoch": "0", + "current_epoch_start_time": "0001-01-01T00:00:00Z", + "epoch_counting_started": false, + "current_epoch_start_height": "0" + }, + { + "identifier": "year", + "start_time": "0001-01-01T00:00:00Z", + "duration": "31536000s", + "current_epoch": "0", + "current_epoch_start_time": "0001-01-01T00:00:00Z", + "epoch_counting_started": false, + "current_epoch_start_height": "0" + } + ] + }, + "feegrant": { + "allowances": [] + }, + "gasless": { + "params": { + "minimum_gas_deposit": [ + { + "denom": "stake", + "amount": "10000000000000000000" + } + ] + }, + "usage_identifier_to_gastank_ids": [], + "last_gas_tank_id": "0", + "gas_tanks": [], + "gas_consumers": [] + }, + "genutil": { + "gen_txs": [] + }, + "gov": { + "starting_proposal_id": "1", + "deposits": [], + "votes": [], + "proposals": [], + "deposit_params": { + "min_deposit": [ + { + "denom": "stake", + "amount": "1000000000000000000000" + } + ], + "max_deposit_period": "172800s" + }, + "voting_params": { + "voting_period": "432000s" + }, + "tally_params": { + "quorum": "0.334000000000000000", + "threshold": "0.500000000000000000", + "veto_threshold": "0.334000000000000000" + } + }, + "hubgenesis": { + "params": {}, + "genesis_accounts": [] + }, + "hubs": { + "state": { + "hub": { + "registered_denoms": [] + } + } + }, + "ibc": { + "client_genesis": { + "clients": [], + "clients_consensus": [], + "clients_metadata": [], + "params": { + "allowed_clients": [ + "06-solomachine", + "07-tendermint" + ] + }, + "create_localhost": false, + "next_client_sequence": "0" + }, + "connection_genesis": { + "connections": [], + "client_connection_paths": [], + "next_connection_sequence": "0", + "params": { + "max_expected_time_per_block": "30000000000" + } + }, + "channel_genesis": { + "channels": [], + "acknowledgements": [], + "commitments": [], + "receipts": [], + "send_sequences": [], + "recv_sequences": [], + "ack_sequences": [], + "next_channel_sequence": "0" + } + }, + "mint": { + "minter": { + "current_inflation_rate": "0.080000000000000000" + }, + "params": { + "mint_denom": "stake", + "mint_epoch_identifier": "hour", + "mint_start_epoch": "1", + "inflation_change_epoch_identifier": "year", + "inflation_rate_change": "0.010000000000000000", + "target_inflation_rate": "0.020000000000000000" + } + }, + "params": null, + "rollappparams": { + "params": { + "da": "mock", + "drs_version": 1, + "min_gas_prices": [] + } + }, + "sequencers": { + "params": { + "unbonding_time": "1814400s", + "historical_entries": 10000 + }, + "sequencers": [] + }, + "staking": { + "params": { + "unbonding_time": "1814400s", + "max_validators": 100, + "max_entries": 7, + "historical_entries": 10000, + "bond_denom": "stake", + "min_commission_rate": "0.050000000000000000" + }, + "last_total_power": "0", + "last_validator_powers": [], + "validators": [], + "delegations": [], + "unbonding_delegations": [], + "redelegations": [], + "exported": false + }, + "timeupgrade": null, + "tokenfactory": { + "params": { + "denom_creation_fee": [ + { + "denom": "stake", + "amount": "10000000000000000000" + } + ] + }, + "factory_denoms": [] + }, + "transfer": { + "port_id": "transfer", + "denom_traces": [], + "params": { + "send_enabled": true, + "receive_enabled": true + } + }, + "upgrade": {}, + "vesting": {}, + "wasm": { + "params": { + "code_upload_access": { + "permission": "Everybody", + "address": "", + "addresses": [] + }, + "instantiate_default_permission": "Everybody" + }, + "codes": [], + "contracts": [], + "sequences": [] + } + } +} diff --git a/genesis-templates/genesis-testnet.json b/genesis-templates/genesis-testnet.json new file mode 100644 index 0000000..bf656a9 --- /dev/null +++ b/genesis-templates/genesis-testnet.json @@ -0,0 +1,312 @@ +{ + "genesis_time": "2024-12-09T07:41:25.834885Z", + "chain_id": "rollappwasm_1234-1", + "initial_height": "1", + "consensus_params": { + "block": { + "max_bytes": "500000", + "max_gas": "400000000", + "time_iota_ms": "1000" + }, + "evidence": { + "max_age_num_blocks": "100000", + "max_age_duration": "172800000000000", + "max_bytes": "500000" + }, + "validator": { + "pub_key_types": [ + "ed25519" + ] + }, + "version": {} + }, + "app_hash": "", + "app_state": { + "auth": { + "params": { + "max_memo_characters": "256", + "tx_sig_limit": "7", + "tx_size_cost_per_byte": "10", + "sig_verify_cost_ed25519": "590", + "sig_verify_cost_secp256k1": "1000" + }, + "accounts": [] + }, + "authz": { + "authorization": [] + }, + "bank": { + "params": { + "send_enabled": [], + "default_send_enabled": true + }, + "balances": [], + "supply": [], + "denom_metadata": [] + }, + "callback": { + "params": { + "callback_gas_limit": "1000000", + "max_block_reservation_limit": "3", + "max_future_reservation_limit": "10000", + "block_reservation_fee_multiplier": "0.000000000000000000", + "future_reservation_fee_multiplier": "0.000000000000000000", + "min_price_of_gas": { + "denom": "stake", + "amount": "0" + } + }, + "callbacks": [] + }, + "capability": { + "index": "1", + "owners": [] + }, + "cwerrors": { + "params": { + "error_stored_time": "302400", + "subscription_fee": { + "denom": "stake", + "amount": "0" + }, + "subscription_period": "302400" + }, + "errors": [] + }, + "distribution": { + "params": { + "community_tax": "0.00002", + "base_proposer_reward": "0.8", + "bonus_proposer_reward": "0.000000000000000000", + "withdraw_addr_enabled": true + }, + "fee_pool": { + "community_pool": [] + }, + "delegator_withdraw_infos": [], + "previous_proposer": "", + "outstanding_rewards": [], + "validator_accumulated_commissions": [], + "validator_historical_rewards": [], + "validator_current_rewards": [], + "delegator_starting_infos": [], + "validator_slash_events": [] + }, + "epochs": { + "epochs": [ + { + "identifier": "minute", + "start_time": "0001-01-01T00:00:00Z", + "duration": "60s", + "current_epoch": "0", + "current_epoch_start_time": "0001-01-01T00:00:00Z", + "epoch_counting_started": false, + "current_epoch_start_height": "0" + }, + { + "identifier": "hour", + "start_time": "0001-01-01T00:00:00Z", + "duration": "3600s", + "current_epoch": "0", + "current_epoch_start_time": "0001-01-01T00:00:00Z", + "epoch_counting_started": false, + "current_epoch_start_height": "0" + }, + { + "identifier": "day", + "start_time": "0001-01-01T00:00:00Z", + "duration": "86400s", + "current_epoch": "0", + "current_epoch_start_time": "0001-01-01T00:00:00Z", + "epoch_counting_started": false, + "current_epoch_start_height": "0" + }, + { + "identifier": "week", + "start_time": "0001-01-01T00:00:00Z", + "duration": "604800s", + "current_epoch": "0", + "current_epoch_start_time": "0001-01-01T00:00:00Z", + "epoch_counting_started": false, + "current_epoch_start_height": "0" + }, + { + "identifier": "year", + "start_time": "0001-01-01T00:00:00Z", + "duration": "31536000s", + "current_epoch": "0", + "current_epoch_start_time": "0001-01-01T00:00:00Z", + "epoch_counting_started": false, + "current_epoch_start_height": "0" + } + ] + }, + "feegrant": { + "allowances": [] + }, + "gasless": { + "params": { + "minimum_gas_deposit": [ + { + "denom": "stake", + "amount": "10000000000000000000" + } + ] + }, + "usage_identifier_to_gastank_ids": [], + "last_gas_tank_id": "0", + "gas_tanks": [], + "gas_consumers": [] + }, + "genutil": { + "gen_txs": [] + }, + "gov": { + "starting_proposal_id": "1", + "deposits": [], + "votes": [], + "proposals": [], + "deposit_params": { + "min_deposit": [ + { + "denom": "stake", + "amount": "1000000000000000000000" + } + ], + "max_deposit_period": "172800s" + }, + "voting_params": { + "voting_period": "300s" + }, + "tally_params": { + "quorum": "0.334000000000000000", + "threshold": "0.500000000000000000", + "veto_threshold": "0.334000000000000000" + } + }, + "hubgenesis": { + "params": {}, + "genesis_accounts": [] + }, + "hubs": { + "state": { + "hub": { + "registered_denoms": [] + } + } + }, + "ibc": { + "client_genesis": { + "clients": [], + "clients_consensus": [], + "clients_metadata": [], + "params": { + "allowed_clients": [ + "06-solomachine", + "07-tendermint" + ] + }, + "create_localhost": false, + "next_client_sequence": "0" + }, + "connection_genesis": { + "connections": [], + "client_connection_paths": [], + "next_connection_sequence": "0", + "params": { + "max_expected_time_per_block": "30000000000" + } + }, + "channel_genesis": { + "channels": [], + "acknowledgements": [], + "commitments": [], + "receipts": [], + "send_sequences": [], + "recv_sequences": [], + "ack_sequences": [], + "next_channel_sequence": "0" + } + }, + "mint": { + "minter": { + "current_inflation_rate": "0.080000000000000000" + }, + "params": { + "mint_denom": "stake", + "mint_epoch_identifier": "hour", + "mint_start_epoch": "1", + "inflation_change_epoch_identifier": "year", + "inflation_rate_change": "0.010000000000000000", + "target_inflation_rate": "0.020000000000000000" + } + }, + "params": null, + "rollappparams": { + "params": { + "da": "mock", + "drs_version": 1, + "min_gas_prices": [] + } + }, + "sequencers": { + "params": { + "unbonding_time": "1309600s", + "historical_entries": 10000 + }, + "sequencers": [] + }, + "staking": { + "params": { + "unbonding_time": "1309600s", + "max_validators": 100, + "max_entries": 7, + "historical_entries": 10000, + "bond_denom": "stake", + "min_commission_rate": "0.050000000000000000" + }, + "last_total_power": "0", + "last_validator_powers": [], + "validators": [], + "delegations": [], + "unbonding_delegations": [], + "redelegations": [], + "exported": false + }, + "timeupgrade": null, + "tokenfactory": { + "params": { + "denom_creation_fee": [ + { + "denom": "stake", + "amount": "10000000000000000000" + } + ] + }, + "factory_denoms": [] + }, + "transfer": { + "port_id": "transfer", + "denom_traces": [], + "params": { + "send_enabled": true, + "receive_enabled": true + } + }, + "upgrade": {}, + "vesting": {}, + "wasm": { + "params": { + "code_upload_access": { + "permission": "Everybody", + "address": "", + "addresses": [] + }, + "instantiate_default_permission": "Everybody" + }, + "codes": [], + "contracts": [], + "sequences": [] + } + } +} diff --git a/scripts/generate_genesis_template.sh b/scripts/generate_genesis_template.sh new file mode 100755 index 0000000..a8a85ce --- /dev/null +++ b/scripts/generate_genesis_template.sh @@ -0,0 +1,95 @@ +#!/bin/bash +set -x + +# Get environment parameter +if [ $# -eq 0 ]; then + echo "Error: Environment parameter (mainnet/testnet) is required" + exit 1 +fi + +ENVIRONMENT=$1 +if [ "$ENVIRONMENT" != "mainnet" ] && [ "$ENVIRONMENT" != "testnet" ]; then + echo "Error: Environment must be either 'mainnet' or 'testnet'" + exit 1 +fi + +if [ "$GENESIS_FILE" = "" ]; then + DEFAULT_GENESIS_FILE_PATH="${HOME}/.rollapp-wasm/config/genesis.json" + echo "GENESIS_FILE is not set, using default: ${DEFAULT_GENESIS_FILE_PATH}" + export GENESIS_FILE=$DEFAULT_GENESIS_FILE_PATH +fi + +update_params() { + local success=true + + # Create temp directory and copy genesis file + TEMP_DIR=$(mktemp -d) + TEMP_GENESIS="${TEMP_DIR}/genesis_temp.json" + cp "$GENESIS_FILE" "$TEMP_GENESIS" + + BLOCK_SIZE="500000" + + # Update all dasel commands to use TEMP_GENESIS instead of GENESIS_FILE + dasel put -f "$TEMP_GENESIS" '.consensus_params.block.max_gas' -v "400000000" || success=false + dasel put -f "$TEMP_GENESIS" '.consensus_params.block.max_bytes' -v "$BLOCK_SIZE" || success=false + dasel put -f "$TEMP_GENESIS" '.consensus_params.evidence.max_bytes' -v "$BLOCK_SIZE" || success=false + dasel put -f "$TEMP_GENESIS" 'app_state.distribution.params.base_proposer_reward' -v '0.8' || success=false + dasel put -f "$TEMP_GENESIS" 'app_state.distribution.params.community_tax' -v "0.00002" || success=false + + + # Update jq command to use temp file + if ! jq '.app_state.gasless.params.minimum_gas_deposit[0].amount = "10000000000000000000"' "$TEMP_GENESIS" > "${TEMP_DIR}/temp.json"; then + echo "Error updating JSON file" + success=false + else + mv "${TEMP_DIR}/temp.json" "$TEMP_GENESIS" + fi + + # Update jq command to use temp file + if ! jq '.app_state.gov.deposit_params.min_deposit[0].amount = "1000000000000000000000"' "$TEMP_GENESIS" > "${TEMP_DIR}/temp.json"; then + echo "Error updating JSON file" + success=false + else + mv "${TEMP_DIR}/temp.json" "$TEMP_GENESIS" + fi + + # Update jq command to use temp file + if ! jq '.app_state.tokenfactory.params.denom_creation_fee[0].amount = "10000000000000000000"' "$TEMP_GENESIS" > "${TEMP_DIR}/temp.json"; then + echo "Error updating JSON file" + success=false + else + mv "${TEMP_DIR}/temp.json" "$TEMP_GENESIS" + fi + + # these vary depending on environment + if [ "$ENVIRONMENT" = "mainnet" ]; then + UNBONDING_TIME="1814400s" # 2 weeks + VOTING_PERIOD="432000s" # 5 days + else + UNBONDING_TIME="1309600s" # ~2 weeks + 1 day + VOTING_PERIOD="300s" + fi + + dasel put -f "$TEMP_GENESIS" '.app_state.sequencers.params.unbonding_time' -v "$UNBONDING_TIME" || success=false + dasel put -f "$TEMP_GENESIS" '.app_state.staking.params.unbonding_time' -v "$UNBONDING_TIME" || success=false + dasel put -f "$TEMP_GENESIS" 'app_state.gov.voting_params.voting_period' -v "$VOTING_PERIOD" || success=false + + if [ "$success" = false ]; then + echo "An error occurred." + rm -rf "$TEMP_DIR" + return 1 + fi + + # Create templates directory if it doesn't exist + mkdir -p ./genesis-templates + + # Copy the modified genesis file to the template location + cp "$TEMP_GENESIS" "./genesis-templates/genesis-${ENVIRONMENT}.json" + + # Cleanup temp directory + rm -rf "$TEMP_DIR" + + set +x +} + +update_params diff --git a/scripts/minimal_update_genesis_params.sh b/scripts/minimal_update_genesis_params.sh deleted file mode 100644 index b823b2a..0000000 --- a/scripts/minimal_update_genesis_params.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - set -x -if [ "$GENESIS_FILE" = "" ]; then - DEFAULT_GENESIS_FILE_PATH="${HOME}/.rollapp_evm/config/genesis.json" - echo "GENESIS_FILE is not set, using default: ${DEFAULT_GENESIS_FILE_PATH}" - export GENESIS_FILE=$DEFAULT_GENESIS_FILE_PATH -fi - -update_params() { - local success=true - - BLOCK_SIZE="500000" - - dasel put -f "$GENESIS_FILE" '.consensus_params.block.max_gas' -v "400000000" || success=false - dasel put -f "$GENESIS_FILE" '.consensus_params.block.max_bytes' -v "$BLOCK_SIZE" || success=false - dasel put -f "$GENESIS_FILE" '.consensus_params.evidence.max_bytes' -v "$BLOCK_SIZE" || success=false - dasel put -f "$GENESIS_FILE" 'app_state.distribution.params.base_proposer_reward' -v '0.8' || success=false - dasel put -f "$GENESIS_FILE" 'app_state.distribution.params.community_tax' -v "0.00002" || success=false - # these vary depending on environment - dasel put -f "$GENESIS_FILE" 'app_state.gov.voting_params.voting_period' -v "300s" || success=false - dasel put -f "$GENESIS_FILE" '.app_state.sequencers.params.unbonding_time' -v "1209600s" || success=false # 2 weeks - dasel put -f "$GENESIS_FILE" '.app_state.staking.params.unbonding_time' -v "1209600s" || success=false # 2 weeks - - if [ "$success" = false ]; then - echo "An error occurred." - return 1 - fi - set +x -} - -update_params