#!/bin/bash LACONIC_BIN=${LACONIC_BIN:-laconicd} LACONIC_HOME="${LACONIC_HOME:-$HOME/.laconicd}" KEY="alice" 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 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"' # disable produce empty block $sed_i 's/create_empty_blocks = true/create_empty_blocks = false/g' $LACONIC_HOME/config/config.toml # Run this to allow requests from any origin $sed_i 's/cors_allowed_origins.*$/cors_allowed_origins = ["*"]/' $LACONIC_HOME/config/config.toml # Enable telemetry (prometheus metrics: http://localhost:1317/metrics?format=prometheus) $sed_i 's/enabled = false/enabled = true/g' $LACONIC_HOME/config/app.toml $sed_i 's/prometheus-retention-time = 0/prometheus-retention-time = 60/g' $LACONIC_HOME/config/app.toml $sed_i 's/prometheus = false/prometheus = true/g' $LACONIC_HOME/config/config.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 $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-server --gql-playground