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

chore: update init scripts #98

Merged
merged 3 commits into from
Jul 16, 2024
Merged
Show file tree
Hide file tree
Changes from all 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
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
Loading