From e41b5c5514366a09a65ce1e650607a54924997fc Mon Sep 17 00:00:00 2001 From: artpav <19916123+artemijspavlovs@users.noreply.github.com> Date: Tue, 16 Jul 2024 16:44:11 +0300 Subject: [PATCH] chore(local setup): update init scripts (#98) --- scripts/init.sh | 239 +++++++++++++----- scripts/settlement/register_rollapp_to_hub.sh | 33 +-- .../settlement/register_sequencer_to_hub.sh | 7 +- 3 files changed, 192 insertions(+), 87 deletions(-) diff --git a/scripts/init.sh b/scripts/init.sh index 16e5ab5..dc12148 100755 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -1,42 +1,6 @@ #!/bin/bash -tmp=$(mktemp) - -set_denom() { - base_denom=$1 - denom=$(echo "$base_denom" | sed 's/^.//') - jq --arg base_denom $base_denom '.app_state.mint.params.mint_denom = $base_denom' "$GENESIS_FILE" >"$tmp" && mv "$tmp" "$GENESIS_FILE" - jq --arg base_denom $base_denom '.app_state.staking.params.bond_denom = $base_denom' "$GENESIS_FILE" >"$tmp" && mv "$tmp" "$GENESIS_FILE" - jq --arg base_denom $base_denom '.app_state.gov.deposit_params.min_deposit[0].denom = $base_denom' "$GENESIS_FILE" >"$tmp" && mv "$tmp" "$GENESIS_FILE" - - jq --arg base_denom $base_denom --arg denom $denom '.app_state.bank.denom_metadata = [ - { - "base": $base_denom, - "denom_units": [ - { - "aliases": [], - "denom": $base_denom, - "exponent": 0 - }, - { - "aliases": [], - "denom": $denom, - "exponent": 18 - } - ], - "description": "Denom metadata for Rollapp Wasm", - "display": $denom, - "name": $denom, - "symbol": "WASM" - } - ]' "$GENESIS_FILE" > "$tmp" && mv "$tmp" "$GENESIS_FILE" - -} - -set_consensus_params() { - BLOCK_SIZE="500000" - jq --arg block_size "$BLOCK_SIZE" '.consensus_params["block"]["max_bytes"] = $block_size' "$GENESIS_FILE" >"$tmp" && mv "$tmp" "$GENESIS_FILE" - jq --arg block_size "$BLOCK_SIZE" '.consensus_params["evidence"]["max_bytes"] = $block_size' "$GENESIS_FILE" >"$tmp" && mv "$tmp" "$GENESIS_FILE" -} +EXECUTABLE="rollappd" +ROLLAPP_HOME_DIR="$HOME/.rollapp" # ---------------------------- initial parameters ---------------------------- # # Assuming 1,000,000 tokens @@ -46,25 +10,172 @@ STAKING_AMOUNT="500000000000000000000000$BASE_DENOM" CONFIG_DIRECTORY="$ROLLAPP_HOME_DIR/config" GENESIS_FILE="$CONFIG_DIRECTORY/genesis.json" -TENDERMINT_CONFIG_FILE="$CONFIG_DIRECTORY/config.toml" -APP_CONFIG_FILE="$CONFIG_DIRECTORY/app.toml" + +set_denom() { + local denom=$1 + + dasel put -f "$GENESIS_FILE" '.app_state.mint.params.mint_denom' -v "$denom" || success=false + dasel put -f "$GENESIS_FILE" '.app_state.staking.params.bond_denom' -v "$denom" || success=false + dasel put -t string -f "$GENESIS_FILE" '.app_state.gov.deposit_params.min_deposit.[0].denom' -v "$denom" || success=false + + if [ "$success" = false ]; then + echo "An error occurred. Please refer to README.md" + exit 1 + fi +} + +update_configuration() { + celestia_namespace_id=$(openssl rand -hex 10) + if [ ! -d "$CELESTIA_HOME_DIR" ]; then + echo "Celestia light client is expected to be initialized in this directory: $CELESTIA_HOME_DIR" + echo "but it does not exist, please initialize the light client or update the 'CELESTIA_HOME_DIR'" + echo "environment variable" + exit 1 + fi + + celestia_token=$(celestia light auth admin --p2p.network "$CELESTIA_NETWORK" --node.store "$CELESTIA_HOME_DIR") + + if [[ "$OSTYPE" == "darwin"* ]]; then + sed -i '' "s/da_layer =.*/da_layer = \"celestia\"/" "${CONFIG_DIRECTORY}/dymint.toml" + sed -i '' "s/namespace_id .*/namespace_id = \"${celestia_namespace_id}\"/" "${CONFIG_DIRECTORY}/dymint.toml" + sed -i '' "s/da_config .*/da_config = \"{\\\\\"base_url\\\\\": \\\\\"http:\/\/localhost:26658\\\\\", \\\\\"timeout\\\\\": 60000000000, \\\\\"gas_prices\\\\\":1.0, \\\\\"gas_adjustment\\\\\": 1.3, \\\\\"namespace_id\\\\\": \\\\\"${celestia_namespace_id}\\\\\", \\\\\"auth_token\\\\\":\\\\\"${celestia_token}\\\\\"}\"/" "${CONFIG_DIRECTORY}/dymint.toml" + + sed -i '' 's/settlement_layer.*/settlement_layer = "dymension"/' "${CONFIG_DIRECTORY}/dymint.toml" + sed -i '' -e "/settlement_node_address =/s/.*/settlement_node_address = \"${HUB_RPC_URL//\//\\/}\"/" "${CONFIG_DIRECTORY}/dymint.toml" + sed -i '' -e "/rollapp_id =/s/.*/rollapp_id = \"$ROLLAPP_CHAIN_ID\"/" "${CONFIG_DIRECTORY}/dymint.toml" + sed -i '' -e "/minimum-gas-prices =/s/.*/minimum-gas-prices = \"1000000000${BASE_DENOM}\"/" "${CONFIG_DIRECTORY}/app.toml" + else + sed -i "s/da_layer =.*/da_layer = \"celestia\"/" "${CONFIG_DIRECTORY}/dymint.toml" + sed -i "s/namespace_id .*/namespace_id = \"${celestia_namespace_id}\"/" "${CONFIG_DIRECTORY}/dymint.toml" + sed -i "s/da_config .*/da_config = \"{\\\\\"base_url\\\\\": \\\\\"http:\/\/localhost:26658\\\\\", \\\\\"timeout\\\\\": 60000000000, \\\\\"gas_prices\\\\\":1.0, \\\\\"gas_adjustment\\\\\": 1.3, \\\\\"namespace_id\\\\\": \\\\\"${celestia_namespace_id}\\\\\", \\\\\"auth_token\\\\\":\\\\\"${celestia_token}\\\\\"}\"/" "${CONFIG_DIRECTORY}/dymint.toml" + + sed -i 's/settlement_layer.*/settlement_layer = "dymension"/' "${CONFIG_DIRECTORY}/dymint.toml" + sed -i '/settlement_node_address =/c\settlement_node_address = '\""$HUB_RPC_URL"\" "${CONFIG_DIRECTORY}/dymint.toml" + sed -i '/rollapp_id =/c\rollapp_id = '\""$ROLLAPP_CHAIN_ID"\" "${CONFIG_DIRECTORY}/dymint.toml" + sed -i '/minimum-gas-prices =/c\minimum-gas-prices = '\"1000000000"$BASE_DENOM"\" "${CONFIG_DIRECTORY}/app.toml" + fi +} + +add_genesis_accounts() { + local success=true + + ALICE_MNEMONIC="mimic ten evoke card crowd upset tragic race borrow final vibrant gesture armed alley figure orange shock strike surge jaguar deposit hockey erosion taste" + echo "$ALICE_MNEMONIC" | dymd keys add genesis-wallet --keyring-backend test --keyring-dir "$ROLLAPP_HOME_DIR" --recover + + tee "$ROLLAPP_SETTLEMENT_INIT_DIR_PATH/genesis_accounts.json" >/dev/null </dev/null < /dev/null </dev/null; then +if ! command -v "$EXECUTABLE" >/dev/null; then echo "$EXECUTABLE does not exist" echo "please run make install" exit 1 fi -if [ -z "$ROLLAPP_CHAIN_ID" ]; then - echo "ROLLAPP_CHAIN_ID is not set" +if [ "$MONIKER" = "" ]; then + MONIKER="${ROLLAPP_CHAIN_ID}-sequencer" # Default moniker value +fi + +if [ "$KEY_NAME_ROLLAPP" = "" ]; then + KEY_NAME_ROLLAPP="rol-user" # Default key name value +fi + +if [ "$ROLLAPP_SETTLEMENT_INIT_DIR_PATH" = "" ]; then + # ROLLAPP_SETTLEMENT_INIT_DIR_PATH is used as a target for generating the necessary + # configuration files for RollApp initialization, such as denom metadata and genesis account + # json files + ROLLAPP_SETTLEMENT_INIT_DIR_PATH="${ROLLAPP_HOME_DIR}/init" +fi + +if [ "$ROLLAPP_CHAIN_ID" = "" ]; then + echo "ROLLAPP_CHAIN_ID is not set" exit 1 +fi + +if [ "$CELESTIA_NETWORK" = "" ]; then + echo "CELESTIA_NETWORK is not set" + exit 1 +fi + +if [ "$CELESTIA_HOME_DIR" = "" ]; then + echo "CELESTIA_HOME_DIR is not set" exit 1 fi -# Verify that a genesis file doesn't exists for the dymension chain if [ -f "$GENESIS_FILE" ]; then printf "\n======================================================================================================\n" - echo "A genesis file already exists [$GENESIS_FILE]. building the chain will delete all previous chain data. continue? (y/n)" + echo "A genesis file already exists at $GENESIS_FILE." + echo "Building the chain will delete all previous chain data. Continue? (y/n)" printf "\n======================================================================================================\n" read -r answer if [ "$answer" != "${answer#[Yy]}" ]; then @@ -75,36 +186,42 @@ if [ -f "$GENESIS_FILE" ]; then fi # ------------------------------- init rollapp ------------------------------- # -$EXECUTABLE init "$MONIKER" --chain-id "$ROLLAPP_CHAIN_ID" +"$EXECUTABLE" init "$MONIKER" --chain-id "$ROLLAPP_CHAIN_ID" + +if [ ! -d "$ROLLAPP_SETTLEMENT_INIT_DIR_PATH" ]; then + mkdir -p "$ROLLAPP_SETTLEMENT_INIT_DIR_PATH" + echo "creating init directory : $ROLLAPP_SETTLEMENT_INIT_DIR_PATH" +else + echo "init directory : $ROLLAPP_SETTLEMENT_INIT_DIR_PATH already exists" +fi # ------------------------------- client config ------------------------------ # -$EXECUTABLE config keyring-backend test -$EXECUTABLE config chain-id "$ROLLAPP_CHAIN_ID" +"$EXECUTABLE" config keyring-backend test +"$EXECUTABLE" config chain-id "$ROLLAPP_CHAIN_ID" # -------------------------------- app config -------------------------------- # -sed -i'' -e "s/^minimum-gas-prices *= .*/minimum-gas-prices = \"0$BASE_DENOM\"/" "$APP_CONFIG_FILE" set_denom "$BASE_DENOM" -set_consensus_params +update_configuration +add_genesis_accounts +generate_denom_metadata +update_configuration + # --------------------- adding keys and genesis accounts --------------------- # #local genesis account -$EXECUTABLE keys add "$KEY_NAME_ROLLAPP" --keyring-backend test -$EXECUTABLE add-genesis-account "$KEY_NAME_ROLLAPP" "$TOKEN_AMOUNT" --keyring-backend test - -# set sequencer's operator address -operator_address=$($EXECUTABLE keys show "$KEY_NAME_ROLLAPP" -a --keyring-backend test --bech val) -jq --arg addr $operator_address '.app_state["sequencers"]["genesis_operator_address"] = $addr' "$GENESIS_FILE" > "$tmp" && mv "$tmp" "$GENESIS_FILE" +"$EXECUTABLE" keys add "$KEY_NAME_ROLLAPP" --keyring-backend test +"$EXECUTABLE" add-genesis-account "$KEY_NAME_ROLLAPP" "$TOKEN_AMOUNT" --keyring-backend test # set sequencer's operator address -operator_address=$($EXECUTABLE keys show "$KEY_NAME_ROLLAPP" -a --keyring-backend test --bech val) -jq --arg addr $operator_address '.app_state["sequencers"]["genesis_operator_address"] = $addr' "$GENESIS_FILE" >"$tmp" && mv "$tmp" "$GENESIS_FILE" +operator_address=$("$EXECUTABLE" keys show "$KEY_NAME_ROLLAPP" -a --keyring-backend test --bech val) +dasel put -f "$GENESIS_FILE" '.app_state.sequencers.genesis_operator_address' -v "$operator_address" echo "Do you want to include staker on genesis? (Y/n) " read -r answer if [ ! "$answer" != "${answer#[Nn]}" ]; then set -x - $EXECUTABLE gentx "$KEY_NAME_ROLLAPP" "$STAKING_AMOUNT" --chain-id "$ROLLAPP_CHAIN_ID" --keyring-backend test --home "$ROLLAPP_HOME_DIR" - $EXECUTABLE collect-gentxs --home "$ROLLAPP_HOME_DIR" + "$EXECUTABLE" gentx "$KEY_NAME_ROLLAPP" "$STAKING_AMOUNT" --chain-id "$ROLLAPP_CHAIN_ID" --keyring-backend test --home "$ROLLAPP_HOME_DIR" + "$EXECUTABLE" collect-gentxs --home "$ROLLAPP_HOME_DIR" set +x fi -$EXECUTABLE validate-genesis +"$EXECUTABLE" validate-genesis \ No newline at end of file diff --git a/scripts/settlement/register_rollapp_to_hub.sh b/scripts/settlement/register_rollapp_to_hub.sh index 5c29db0..171790a 100644 --- a/scripts/settlement/register_rollapp_to_hub.sh +++ b/scripts/settlement/register_rollapp_to_hub.sh @@ -1,36 +1,25 @@ #!/bin/bash - -KEYRING_PATH="$HOME/.rollapp-wasm/sequencer_keys" -MAX_SEQUENCERS=5 +MAX_SEQUENCERS=1 # this account must be whitelisted on the hub for permissioned deployment setup -DEPLOYER="$HUB_KEY_WITH_FUNDS" +DEPLOYER=${HUB_PERMISSIONED_KEY-"$HUB_KEY_WITH_FUNDS"} +SEQUENCER_ADDR=$(dymd keys show sequencer --address --keyring-backend test --keyring-dir "$ROLLAPP_HOME_DIR"/sequencer_keys) -if [ -z "$HUB_RPC_URL" ]; then +if [ "$HUB_RPC_URL" = "" ]; then echo "HUB_RPC_URL is not set, using 'http://localhost:36657'" HUB_RPC_URL="http://localhost:36657" fi -if [ -z "$HUB_CHAIN_ID" ]; then +if [ "$HUB_CHAIN_ID" = "" ]; then echo "HUB_CHAIN_ID is not set, using 'dymension_100-1'" HUB_CHAIN_ID="dymension_100-1" fi -# this file is generated using the scripts/settlement/generate_denom_metadata.sh -DENOM_METADATA_PATH="${ROLLAPP_SETTLEMENT_INIT_DIR_PATH}/denommetadata.json" -# this file is generated using the scripts/settlement/add_genesis_accounts.sh -GENESIS_ACCOUNTS_PATH="${ROLLAPP_SETTLEMENT_INIT_DIR_PATH}/genesis_accounts.json" - -#Register rollapp set -x -dymd tx rollapp create-rollapp "$ROLLAPP_CHAIN_ID" "$MAX_SEQUENCERS" '{"Addresses":[]}' \ - "$DENOM_METADATA_PATH" \ - --genesis-accounts-path "$GENESIS_ACCOUNTS_PATH" \ - --from "$DEPLOYER" \ - --keyring-backend test \ - --broadcast-mode block \ - --node "$HUB_RPC_URL" \ - --chain-id "$HUB_CHAIN_ID" \ - --fees 1dym \ - -y +dymd tx rollapp create-rollapp "$ROLLAPP_CHAIN_ID" "$MAX_SEQUENCERS" "{\"Addresses\":[\"${SEQUENCER_ADDR}\"]}" \ + "$ROLLAPP_HOME_DIR"/init/denommetadata.json \ + --genesis-accounts-path "$ROLLAPP_HOME_DIR"/init/genesis_accounts.json \ + --from "$DEPLOYER" \ + --keyring-backend test --broadcast-mode block \ + --fees 1dym set +x diff --git a/scripts/settlement/register_sequencer_to_hub.sh b/scripts/settlement/register_sequencer_to_hub.sh index 02b20ed..479f67e 100644 --- a/scripts/settlement/register_sequencer_to_hub.sh +++ b/scripts/settlement/register_sequencer_to_hub.sh @@ -1,13 +1,12 @@ #!/bin/bash -KEYRING_PATH="$HOME/.rollapp-wasm/sequencer_keys" +KEYRING_PATH="$HOME/.rollapp/sequencer_keys" KEY_NAME_SEQUENCER="sequencer" #Register Sequencer DESCRIPTION="{\"Moniker\":\"${ROLLAPP_CHAIN_ID}-sequencer\",\"Identity\":\"\",\"Website\":\"\",\"SecurityContact\":\"\",\"Details\":\"\"}" -SEQ_PUB_KEY="$($EXECUTABLE dymint show-sequencer)" -BOND_AMOUNT="$(dymd q sequencer params -o json --node ${HUB_RPC_URL} | jq -r '.params.min_bond.amount')$(dymd q sequencer params -o jsono | jq -r '.params.min_bond.denom')" -echo $BOND_AMOUNT +SEQ_PUB_KEY="$("$EXECUTABLE" dymint show-sequencer)" +BOND_AMOUNT="$(dymd q sequencer params -o json --node "$HUB_RPC_URL" | jq -r '.params.min_bond.amount')$(dymd q sequencer params -o json --node "$HUB_RPC_URL" | jq -r '.params.min_bond.denom')" set -x dymd tx sequencer create-sequencer "$SEQ_PUB_KEY" "$ROLLAPP_CHAIN_ID" "$DESCRIPTION" "$BOND_AMOUNT" \