laconicd/scripts/init.sh
Roy Crihfield ba0ba384fc init.sh updates
use toml config parser

- don't name key "alice"

init.sh nitro config
2025-02-13 11:41:58 +08:00

161 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
LACONIC_BIN=${LACONIC_BIN:-laconicd}
LACONIC_HOME="${LACONIC_HOME:-$HOME/.laconicd}"
KEY="node_key"
CHAINID=${CHAINID:-"laconic_9000-1"}
MONIKER=${MONIKER:-"localtestnet"}
KEYRING=${KEYRING:-"test"}
DENOM=${DENOM:-"alnt"}
STAKING_AMOUNT=${STAKING_AMOUNT:-"1000000000000000"}
LOGLEVEL=${LOGLEVEL:-"info"}
input_genesis_file=${GENESIS_FILE}
laconicd="$LACONIC_BIN --home=$LACONIC_HOME --log_level=debug"
set -e
if [[ "$OSTYPE" == "darwin"* ]]; then
sed_i="sed -i ''"
else
sed_i="sed -i"
fi
if [ "$1" == "clean" ] || [ ! -d "$LACONIC_HOME/data/blockstore.db" ]; then
# validate dependencies are installed
command -v jq > /dev/null 2>&1 || {
echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/"
exit 1
}
# remove existing daemon and client
rm -rf $LACONIC_HOME/*
$laconicd config set client chain-id $CHAINID
$laconicd config set client keyring-backend $KEYRING
# if $KEY exists it should be deleted
printf "y\n" | $laconicd keys add $KEY --keyring-backend $KEYRING --no-backup
# Set the Nitro node PK
# TODO generate?
echo "$NITRO_PK" | $laconicd keys import-hex "${KEY}_nitro"
# Set moniker and chain-id for Ethermint (Moniker can be anything, chain-id must be an integer)
$laconicd init $MONIKER --chain-id $CHAINID --default-denom $DENOM
if [[ -f ${input_genesis_file} ]]; then
# Use provided genesis config
cp $input_genesis_file $LACONIC_HOME/config/genesis.json
fi
update_genesis() {
jq "$1" $LACONIC_HOME/config/genesis.json > $LACONIC_HOME/config/tmp_genesis.json &&
mv $LACONIC_HOME/config/tmp_genesis.json $LACONIC_HOME/config/genesis.json
}
if [[ "$TEST_REGISTRY_EXPIRY" == "true" ]]; then
echo "Setting timers for expiry tests."
update_genesis '.app_state["registry"]["params"]["record_rent_duration"]="60s"'
update_genesis '.app_state["registry"]["params"]["authority_grace_period"]="60s"'
update_genesis '.app_state["registry"]["params"]["authority_rent_duration"]="60s"'
fi
if [[ "$TEST_AUCTION_ENABLED" == "true" ]]; then
echo "Enabling auction and setting timers."
update_genesis '.app_state["registry"]["params"]["authority_auction_enabled"]=true'
update_genesis '.app_state["registry"]["params"]["authority_rent_duration"]="60s"'
update_genesis '.app_state["registry"]["params"]["authority_grace_period"]="300s"'
update_genesis '.app_state["registry"]["params"]["authority_auction_commits_duration"]="60s"'
update_genesis '.app_state["registry"]["params"]["authority_auction_reveals_duration"]="60s"'
fi
if [[ "$ONBOARDING_ENABLED" == "true" ]]; then
echo "Enabling onboarding."
update_genesis '.app_state["onboarding"]["params"]["onboarding_enabled"]=true'
fi
if [[ "$AUTHORITY_AUCTION_ENABLED" == "true" ]]; then
echo "Enabling authority auctions."
update_genesis '.app_state["registry"]["params"]["authority_auction_enabled"]=true'
fi
if [[ -n $AUTHORITY_AUCTION_COMMITS_DURATION ]]; then
echo "Setting authority_auction_commits_duration to $AUTHORITY_AUCTION_COMMITS_DURATION seconds."
update_genesis ".app_state[\"registry\"][\"params\"][\"authority_auction_commits_duration\"]=\"${AUTHORITY_AUCTION_COMMITS_DURATION}s\""
fi
if [[ -n $AUTHORITY_AUCTION_REVEALS_DURATION ]]; then
echo "Setting authority_auction_reveals_duration to $AUTHORITY_AUCTION_REVEALS_DURATION seconds."
update_genesis ".app_state[\"registry\"][\"params\"][\"authority_auction_reveals_duration\"]=\"${AUTHORITY_AUCTION_REVEALS_DURATION}s\""
fi
if [[ -n $AUTHORITY_GRACE_PERIOD ]]; then
echo "Setting authority_grace_period to $AUTHORITY_GRACE_PERIOD seconds."
update_genesis ".app_state[\"registry\"][\"params\"][\"authority_grace_period\"]=\"${AUTHORITY_GRACE_PERIOD}s\""
fi
# increase block time (?)
update_genesis '.consensus["params"]["block"]["time_iota_ms"]="1000"'
# Set gas limit in genesis
update_genesis '.consensus["params"]["block"]["max_gas"]="10000000"'
update_config() {
mv -f "$2" "${2}.bak" && tomlq --toml-output "$1" "${2}.bak" > "$2"
}
# disable empty blocks
update_config '.consensus.create_empty_blocks = false' $LACONIC_HOME/config/config.toml
# Allow requests from any origin
update_config '.rpc.cors_allowed_origins = ["*"]' $LACONIC_HOME/config/config.toml
# Enable telemetry (prometheus metrics: http://localhost:1317/metrics?format=prometheus)
update_config '.telemetry.enabled = true' $LACONIC_HOME/config/app.toml
update_config '.telemetry."prometheus-retention-time" = 60' $LACONIC_HOME/config/app.toml
update_config '.instrumentation.prometheus = true' $LACONIC_HOME/config/config.toml
# Nitro config
update_config "
.nitro.\"eth-pk\" = \"${KEY}\" |
.nitro.\"eth-url\" = \"${NITRO_ETH_URL}\" |
.nitro.\"eth-ca-address\" = \"${NITRO_ETH_CA_ADDRESS}\" |
.nitro.\"eth-na-address\" = \"${NITRO_ETH_NA_ADDRESS}\" |
.nitro.\"eth-vpa-address\" = \"${NITRO_ETH_VPA_ADDRESS}\" |
.nitro.\"eth-start-block\" = \"${NITRO_ETH_START_BLOCK}\" |
.nitro.pk = \"${KEY}_nitro\" |
.nitro.\"boot-peers\" = \"${NITRO_BOOT_PEERS}\"
" $LACONIC_HOME/config/app.toml
# Allocate genesis accounts (cosmos formatted addresses)
# 10^30 alnt | 10^12 lnt
$laconicd genesis add-genesis-account $KEY 1000000000000000000000000000000$DENOM --keyring-backend $KEYRING
# Sign genesis transaction
# 10^15 alnt
$laconicd genesis gentx $KEY $STAKING_AMOUNT$DENOM --keyring-backend $KEYRING --chain-id $CHAINID
# Collect genesis tx
$laconicd genesis collect-gentxs
# Run this to ensure everything worked and that the genesis file is setup correctly
$laconicd genesis validate
else
echo "Using existing database at $LACONIC_HOME. To replace, run '`basename $0` clean'"
fi
# Start the node (remove the --pruning=nothing flag if historical queries are not needed)
# TODO new pruning config
exec $laconicd start \
--log_level "$LOGLEVEL" \
--server.minimum-gas-prices="1$DENOM" \
--rpc.laddr="tcp://0.0.0.0:26657" \
--grpc.address="127.0.0.1:9091" \
--gql.enable --gql.playground