#!/bin/bash KEY="alice" CHAINID=${CHAINID:-"laconic_9000-1"} MONIKER=${MONIKER:-"localtestnet"} KEYRING=${KEYRING:-"test"} DENOM=${DENOM:-"alnt"} STAKING_AMOUNT=${STAKING_AMOUNT:-"1000000000000000"} MIN_GAS_PRICE=${MIN_GAS_PRICE:-"0.001"} LOGLEVEL=${LOGLEVEL:-"info"} input_genesis_file=${GENESIS_FILE} if [ "$1" == "clean" ] || [ ! -d "$HOME/.laconicd/data" ]; 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 $HOME/.laconicd/* if [ -n "`which make`" ]; then make install fi laconicd config set client chain-id $CHAINID laconicd config set client keyring-backend $KEYRING # if $KEY exists it should be deleted laconicd keys add $KEY --keyring-backend $KEYRING # Set moniker and chain-id laconicd init $MONIKER --chain-id $CHAINID --default-denom $DENOM if [[ -f ${input_genesis_file} ]]; then # Use provided genesis config cp $input_genesis_file $HOME/.laconicd/config/genesis.json fi update_genesis() { jq "$1" $HOME/.laconicd/config/genesis.json > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/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 if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' 's/create_empty_blocks = true/create_empty_blocks = false/g' $HOME/.laconicd/config/config.toml else sed -i 's/create_empty_blocks = true/create_empty_blocks = false/g' $HOME/.laconicd/config/config.toml fi # Run this to allow requests from any origin sed -i 's/cors_allowed_origins.*$/cors_allowed_origins = ["*"]/' $HOME/.laconicd/config/config.toml # Enable telemetry (prometheus metrics: http://localhost:1317/metrics?format=prometheus) if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' 's/enabled = false/enabled = true/g' $HOME/.laconicd/config/app.toml sed -i '' 's/prometheus-retention-time = 0/prometheus-retention-time = 60/g' $HOME/.laconicd/config/app.toml sed -i '' 's/prometheus = false/prometheus = true/g' $HOME/.laconicd/config/config.toml else sed -i 's/enabled = false/enabled = true/g' $HOME/.laconicd/config/app.toml sed -i 's/prometheus-retention-time = 0/prometheus-retention-time = 60/g' $HOME/.laconicd/config/app.toml sed -i 's/prometheus = false/prometheus = true/g' $HOME/.laconicd/config/config.toml fi # 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 $HOME/.laconicd. To replace, run '`basename $0` clean'" fi # Start the node (remove the --pruning=nothing flag if historical queries are not needed) laconicd start \ --pruning=nothing \ --log_level $LOGLEVEL \ --minimum-gas-prices=$MIN_GAS_PRICE$DENOM \ --api.enable \ --rpc.laddr="tcp://0.0.0.0:26657" \ --gql-server --gql-playground