Skip to content

Commit

Permalink
chore(local setup): update init scripts (#98)
Browse files Browse the repository at this point in the history
  • Loading branch information
artemijspavlovs authored Jul 16, 2024
1 parent 823dee3 commit e41b5c5
Show file tree
Hide file tree
Showing 3 changed files with 192 additions and 87 deletions.
239 changes: 178 additions & 61 deletions scripts/init.sh
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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 <<EOF
[
{"amount":
{"amount":"50000000000000000000000","denom":"${BASE_DENOM}"},
"address":"$(dymd keys show -a genesis-wallet --keyring-backend test --keyring-dir "${ROLLAPP_HOME_DIR}")"
}
]
EOF
}

generate_denom_metadata() {
tee "$ROLLAPP_SETTLEMENT_INIT_DIR_PATH/denommetadata.json" >/dev/null <<EOF
[
{
"description": "The native staking and governance token of the ${ROLLAPP_CHAIN_ID}",
"denom_units": [
{
"denom": "${BASE_DENOM}",
"exponent": 0
},
{
"denom": "${DENOM}",
"exponent": 18
}
],
"base": "${BASE_DENOM}",
"display": "${DENOM}",
"name": "${DENOM}",
"symbol": "${DENOM}"
}
]
EOF

tee "$ROLLAPP_SETTLEMENT_INIT_DIR_PATH/hub-denommetadata.json" > /dev/null <<EOF
[
{
"token_metadata": {
"description": "DYM",
"denom_units": [
{
"denom": "ibc/FECACB927EB3102CCCB240FFB3B6FCCEEB8D944C6FEA8DFF079650FEFF59781D",
"exponent": 0
},
{
"denom": "DYM",
"exponent": 18
}
],
"base": "ibc/FECACB927EB3102CCCB240FFB3B6FCCEEB8D944C6FEA8DFF079650FEFF59781D",
"display": "DYM",
"name": "DYM",
"symbol": "DYM"
},
"denom_trace": "transfer/channel-0/adym"
}
]
EOF
}

add_denom_metadata() {
local success=true

denom_metadata=$(cat "$ROLLAPP_SETTLEMENT_INIT_DIR_PATH"/denommetadata.json)
elevated_address=$("$EXECUTABLE" keys show "$KEY_NAME_ROLLAPP" --keyring-backend test -a)

dasel put -f "$GENESIS_FILE" '.app_state.bank.denom_metadata' -v "$denom_metadata" || success=false
dasel put -t json -f "$GENESIS_FILE" '.app_state.denommetadata.params.allowed_addresses.' -v "$elevated_address" || success=false

if [ "$success" = false ]; then
echo "An error occurred. Please refer to README.md"
return 1
fi
}

# --------------------------------- run init --------------------------------- #
if ! command -v $EXECUTABLE >/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
Expand All @@ -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
33 changes: 11 additions & 22 deletions scripts/settlement/register_rollapp_to_hub.sh
Original file line number Diff line number Diff line change
@@ -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
7 changes: 3 additions & 4 deletions scripts/settlement/register_sequencer_to_hub.sh
Original file line number Diff line number Diff line change
@@ -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" \
Expand Down

0 comments on commit e41b5c5

Please sign in to comment.