From c5ed4994f70e33bbbd8782edc3d43344cbb01525 Mon Sep 17 00:00:00 2001 From: Omri Date: Mon, 9 Dec 2024 10:05:47 +0100 Subject: [PATCH] chore(genesis): Added genesis template generators per environment (#381) --- genesis-templates/genesis-mainnet.json | 305 +++++++++++++++++++++++ genesis-templates/genesis-testnet.json | 305 +++++++++++++++++++++++ scripts/generate-genesis-template.sh | 107 ++++++++ scripts/minimal_update_genesis_params.sh | 38 --- 4 files changed, 717 insertions(+), 38 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 100755 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..cc5dd7b --- /dev/null +++ b/genesis-templates/genesis-mainnet.json @@ -0,0 +1,305 @@ +{ + "genesis_time": "2024-12-09T07:53:58.289783Z", + "chain_id": "rollappevm_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": [] + }, + "bank": { + "params": { + "send_enabled": [], + "default_send_enabled": true + }, + "balances": [], + "supply": [], + "denom_metadata": [] + }, + "capability": { + "index": "1", + "owners": [] + }, + "claims": { + "params": { + "enable_claims": false, + "airdrop_start_time": "0001-01-01T00:00:00Z", + "duration_until_decay": "2629800s", + "duration_of_decay": "5259600s", + "claims_denom": "aevmos", + "authorized_channels": [ + "channel-0", + "channel-3" + ], + "evm_channels": [ + "channel-2" + ] + }, + "claims_records": [] + }, + "denommetadata": { + "params": { + "allowed_addresses": [] + } + }, + "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" + } + ] + }, + "erc20": { + "params": { + "enable_erc20": true, + "enable_evm_hook": true + }, + "token_pairs": [] + }, + "evm": { + "accounts": [], + "params": { + "evm_denom": "aevmos", + "enable_create": true, + "enable_call": true, + "extra_eips": "3855", + "chain_config": { + "homestead_block": "0", + "dao_fork_block": "0", + "dao_fork_support": true, + "eip150_block": "0", + "eip150_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155_block": "0", + "eip158_block": "0", + "byzantium_block": "0", + "constantinople_block": "0", + "petersburg_block": "0", + "istanbul_block": "0", + "muir_glacier_block": "0", + "berlin_block": "0", + "london_block": "0", + "arrow_glacier_block": "0", + "gray_glacier_block": "0", + "merge_netsplit_block": "0", + "shanghai_block": "0", + "cancun_block": "0" + }, + "allow_unprotected_txs": false + } + }, + "feemarket": { + "params": { + "no_base_fee": false, + "base_fee_change_denominator": 8, + "elasticity_multiplier": 2, + "enable_height": "0", + "base_fee": "1000000000", + "min_gas_price": "1000000000.0", + "min_gas_multiplier": "0.500000000000000000" + }, + "block_gas": "0" + }, + "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_triggerer_allowlist": [] + }, + "state": { + "is_locked": false, + "genesis_tokens": [] + } + }, + "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, + "sequencers": { + "params": { + "unbonding_time": "1814400s", + "historical_entries": 10000 + }, + "genesis_operator_address": "" + }, + "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 + }, + "transfer": { + "port_id": "transfer", + "denom_traces": [], + "params": { + "send_enabled": true, + "receive_enabled": true + } + }, + "upgrade": {}, + "vesting": {} + } +} diff --git a/genesis-templates/genesis-testnet.json b/genesis-templates/genesis-testnet.json new file mode 100644 index 0000000..98d82f8 --- /dev/null +++ b/genesis-templates/genesis-testnet.json @@ -0,0 +1,305 @@ +{ + "genesis_time": "2024-12-09T07:53:58.289783Z", + "chain_id": "rollappevm_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": [] + }, + "bank": { + "params": { + "send_enabled": [], + "default_send_enabled": true + }, + "balances": [], + "supply": [], + "denom_metadata": [] + }, + "capability": { + "index": "1", + "owners": [] + }, + "claims": { + "params": { + "enable_claims": false, + "airdrop_start_time": "0001-01-01T00:00:00Z", + "duration_until_decay": "2629800s", + "duration_of_decay": "5259600s", + "claims_denom": "aevmos", + "authorized_channels": [ + "channel-0", + "channel-3" + ], + "evm_channels": [ + "channel-2" + ] + }, + "claims_records": [] + }, + "denommetadata": { + "params": { + "allowed_addresses": [] + } + }, + "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" + } + ] + }, + "erc20": { + "params": { + "enable_erc20": true, + "enable_evm_hook": true + }, + "token_pairs": [] + }, + "evm": { + "accounts": [], + "params": { + "evm_denom": "aevmos", + "enable_create": true, + "enable_call": true, + "extra_eips": "3855", + "chain_config": { + "homestead_block": "0", + "dao_fork_block": "0", + "dao_fork_support": true, + "eip150_block": "0", + "eip150_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155_block": "0", + "eip158_block": "0", + "byzantium_block": "0", + "constantinople_block": "0", + "petersburg_block": "0", + "istanbul_block": "0", + "muir_glacier_block": "0", + "berlin_block": "0", + "london_block": "0", + "arrow_glacier_block": "0", + "gray_glacier_block": "0", + "merge_netsplit_block": "0", + "shanghai_block": "0", + "cancun_block": "0" + }, + "allow_unprotected_txs": false + } + }, + "feemarket": { + "params": { + "no_base_fee": false, + "base_fee_change_denominator": 8, + "elasticity_multiplier": 2, + "enable_height": "0", + "base_fee": "1000000000", + "min_gas_price": "1000000000.0", + "min_gas_multiplier": "0.500000000000000000" + }, + "block_gas": "0" + }, + "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_triggerer_allowlist": [] + }, + "state": { + "is_locked": false, + "genesis_tokens": [] + } + }, + "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, + "sequencers": { + "params": { + "unbonding_time": "1309600s", + "historical_entries": 10000 + }, + "genesis_operator_address": "" + }, + "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 + }, + "transfer": { + "port_id": "transfer", + "denom_traces": [], + "params": { + "send_enabled": true, + "receive_enabled": true + } + }, + "upgrade": {}, + "vesting": {} + } +} diff --git a/scripts/generate-genesis-template.sh b/scripts/generate-genesis-template.sh new file mode 100755 index 0000000..a7fdf63 --- /dev/null +++ b/scripts/generate-genesis-template.sh @@ -0,0 +1,107 @@ +#!/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_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 + + # 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 + dasel put -t bool -f "$GENESIS_FILE" 'app_state.feemarket.params.no_base_fee' -v false || success=false + dasel put -f "$GENESIS_FILE" '.app_state.feemarket.params.min_gas_price' -v "1000000000.0" || success=false + dasel put -f "$GENESIS_FILE" '.app_state.auth.accounts' -t json -r json -v '[]' || success=false + dasel put -f "$GENESIS_FILE" '.app_state.bank.balances' -t json -r json -v '[]' || success=false + + +# Update jq command to use temp file + if ! jq '.app_state.evm.params.extra_eips = "3855"' "$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 + + # 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 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/scripts/minimal_update_genesis_params.sh b/scripts/minimal_update_genesis_params.sh deleted file mode 100755 index 2033172..0000000 --- a/scripts/minimal_update_genesis_params.sh +++ /dev/null @@ -1,38 +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 -t bool -f "$GENESIS_FILE" 'app_state.feemarket.params.no_base_fee' -v false || success=false - dasel put -f "$GENESIS_FILE" '.app_state.evm.params.extra_eips.[]' -v '3855' || success=false - dasel put -f "$GENESIS_FILE" '.app_state.feemarket.params.min_gas_price' -v "10000000.0" || 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 - dasel put -f "$GENESIS_FILE" '.app_state.auth.accounts' -t json -r json -v '[]' || success=false # 2 weeks - dasel put -f "$GENESIS_FILE" '.app_state.bank.balances' -t json -r json -v '[]' || success=false # 2 weeks - dasel put -f "$GENESIS_FILE" '.app_state.genutil.gen_txs' -t json -r json -v '[]' || success=false # 2 weeks - - # 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