1+ #! /bin/bash
2+ # Run this script to quickly install, setup, and run the current version of the network without docker.
3+ #
4+ # Examples:
5+ # CHAIN_ID="localchain_9000-1" HOME_DIR="~/.pchain" BLOCK_TIME="1000ms" CLEAN=true sh scripts/test_node.sh
6+ # CHAIN_ID="localchain_9000-2" HOME_DIR="~/.pchain" CLEAN=true RPC=36657 REST=2317 PROFF=6061 P2P=36656 GRPC=8090 GRPC_WEB=8091 ROSETTA=8081 BLOCK_TIME="500ms" sh scripts/test_node.sh
7+ shopt -s expand_aliases
8+ set -eu
9+
10+ export KEY1=" acc1"
11+ export KEY2=" acc2"
12+ export KEY3=" acc3"
13+
14+ export CHAIN_ID=${CHAIN_ID:- " localchain_9000-1" }
15+ export MONIKER=${MONIKER:- " localvalidator" }
16+ export KEYALGO=" eth_secp256k1"
17+ export KEYRING=${KEYRING:- " test" }
18+ export HOME_DIR=$( eval echo " ${HOME_DIR:- " ~/.pchain" } " )
19+ export BINARY=${BINARY:- pchaind}
20+ export DENOM=${DENOM:- upc}
21+
22+ export CLEAN=${CLEAN:- " false" }
23+ export RPC=${RPC:- " 26657" }
24+ export REST=${REST:- " 1317" }
25+ export PROFF=${PROFF:- " 6060" }
26+ export P2P=${P2P:- " 26656" }
27+ export GRPC=${GRPC:- " 9090" }
28+ export GRPC_WEB=${GRPC_WEB:- " 9091" }
29+ export ROSETTA=${ROSETTA:- " 8080" }
30+ export BLOCK_TIME=${BLOCK_TIME:- " 1s" }
31+
32+ # if which binary does not exist, install it
33+ # if [ -z `which $BINARY` ]; then
34+ # make install
35+
36+ # if [ -z `which $BINARY` ]; then
37+ # echo "Ensure $BINARY is installed and in your PATH"
38+ # exit 1
39+ # fi
40+ # fi
41+
42+ alias BINARY=" $BINARY --home=$HOME_DIR "
43+
44+ command -v $BINARY > /dev/null 2>&1 || { echo >&2 " $BINARY command not found. Ensure this is setup / properly installed in your GOPATH (make install)." ; exit 1; }
45+ command -v jq > /dev/null 2>&1 || { echo >&2 " jq not installed. More info: https://stedolan.github.io/jq/download/" ; exit 1; }
46+
47+ set_config () {
48+ $BINARY config set client chain-id $CHAIN_ID
49+ $BINARY config set client keyring-backend $KEYRING
50+ }
51+ set_config
52+
53+
54+ from_scratch () {
55+ # Fresh install on current branch
56+ # make install
57+
58+ # remove existing daemon files.
59+ if [ ${# HOME_DIR} -le 2 ]; then
60+ echo " HOME_DIR must be more than 2 characters long"
61+ return
62+ fi
63+ rm -rf $HOME_DIR && echo " Removed $HOME_DIR "
64+
65+ # reset values if not set already after whipe
66+ set_config
67+
68+ add_key () {
69+ key=$1
70+ mnemonic=$2
71+ echo $mnemonic | BINARY keys add $key --keyring-backend $KEYRING --algo $KEYALGO --recover
72+ }
73+
74+ # push1ss5j8c8j453uecnczt3ms23lze30kxt4pzfvh9
75+ add_key $KEY1 " surface task term spring horse impact tortoise often session cable off catch harvest rain able jealous coral cargo portion surge spring genre mix avoid"
76+ # push1j55s4vpvmncruakqhj2k2fywnc9mvsuhcap28q
77+ add_key $KEY2 " season wing cost lunch leg absurd parent practice frost mistake choose leopard switch shrug wrist this pistol bright spike hurt fit meadow smart hazard"
78+ # push1fgaewhyd9fkwtqaj9c233letwcuey6dgly9gv9
79+ add_key $KEY3 " episode silver life middle tumble slogan genius loop divide alpha raven bridge drive calm club system school raccoon unfold marine oyster radio treat sphere"
80+
81+ BINARY init $MONIKER --chain-id $CHAIN_ID --default-denom $DENOM
82+
83+ update_test_genesis () {
84+ cat $HOME_DIR /config/genesis.json | jq " $1 " > $HOME_DIR /config/tmp_genesis.json && mv $HOME_DIR /config/tmp_genesis.json $HOME_DIR /config/genesis.json
85+ }
86+
87+ # === CORE MODULES ===
88+
89+ # Block
90+ update_test_genesis ' .consensus_params["block"]["max_gas"]="100000000"'
91+
92+ # Gov
93+ update_test_genesis ` printf ' .app_state["gov"]["params"]["min_deposit"]=[{"denom":"%s","amount":"1000000"}]' $DENOM `
94+ update_test_genesis ' .app_state["gov"]["params"]["voting_period"]="30s"'
95+ update_test_genesis ' .app_state["gov"]["params"]["expedited_voting_period"]="15s"'
96+
97+ update_test_genesis ` printf ' .app_state["evm"]["params"]["evm_denom"]="%s"' $DENOM `
98+ update_test_genesis ' .app_state["evm"]["params"]["active_static_precompiles"]=["0x00000000000000000000000000000000000000CB","0x00000000000000000000000000000000000000ca","0x0000000000000000000000000000000000000100","0x0000000000000000000000000000000000000400","0x0000000000000000000000000000000000000800","0x0000000000000000000000000000000000000801","0x0000000000000000000000000000000000000802","0x0000000000000000000000000000000000000803","0x0000000000000000000000000000000000000804","0x0000000000000000000000000000000000000805"]'
99+ update_test_genesis ' .app_state["erc20"]["params"]["native_precompiles"]=["0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"]' # https://eips.ethereum.org/EIPS/eip-7528
100+ update_test_genesis ` printf ' .app_state["erc20"]["token_pairs"]=[{contract_owner:1,erc20_address:"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",denom:"%s",enabled:true}]' $DENOM `
101+ update_test_genesis ' .app_state["feemarket"]["params"]["no_base_fee"]=false'
102+ update_test_genesis ' .app_state["feemarket"]["params"]["base_fee"]="1000000000.000000000000000000"'
103+ update_test_genesis ' .app_state["feemarket"]["params"]["min_gas_price"]="1000000000.000000000000000000"'
104+
105+ # staking
106+ update_test_genesis ` printf ' .app_state["staking"]["params"]["bond_denom"]="%s"' $DENOM `
107+ update_test_genesis ' .app_state["staking"]["params"]["min_commission_rate"]="0.050000000000000000"'
108+
109+ # mint
110+ update_test_genesis ` printf ' .app_state["mint"]["params"]["mint_denom"]="%s"' $DENOM `
111+
112+ # crisis
113+ update_test_genesis ` printf ' .app_state["crisis"]["constant_fee"]={"denom":"%s","amount":"1000"}' $DENOM `
114+
115+ # # abci
116+ update_test_genesis ' .consensus["params"]["abci"]["vote_extensions_enable_height"]="1"'
117+
118+ # === CUSTOM MODULES ===
119+ # tokenfactory
120+ update_test_genesis ' .app_state["tokenfactory"]["params"]["denom_creation_fee"]=[]'
121+ update_test_genesis ' .app_state["tokenfactory"]["params"]["denom_creation_gas_consume"]=100000'
122+
123+ # Allocate genesis accounts
124+ # Total: 10 000000000 . 000000000 000000000
125+ BINARY genesis add-genesis-account $KEY1 5000000000000000000000000000$DENOM ,100000000test --keyring-backend $KEYRING --append
126+ BINARY genesis add-genesis-account $KEY2 3000000000000000000000000000$DENOM ,90000000test --keyring-backend $KEYRING --append
127+ BINARY genesis add-genesis-account $KEY3 2000000000000000000000000000$DENOM ,90000000test --keyring-backend $KEYRING --append
128+
129+ # Sign genesis transaction
130+ # 10 000 . 000000000 000000000
131+ BINARY genesis gentx $KEY1 10000000000000000000000$DENOM --gas-prices 1000000000${DENOM} --keyring-backend $KEYRING --chain-id $CHAIN_ID
132+
133+ BINARY genesis collect-gentxs
134+
135+ BINARY genesis validate-genesis
136+ err=$?
137+ if [ $err -ne 0 ]; then
138+ echo " Failed to validate genesis"
139+ return
140+ fi
141+ }
142+
143+ # check if CLEAN is not set to false
144+ if [ " $CLEAN " != " false" ]; then
145+ echo " Starting from a clean state"
146+ from_scratch
147+ fi
148+
149+ echo " Starting node..."
150+
151+ # Opens the RPC endpoint to outside connections
152+ sed -i -e ' s/laddr = "tcp:\/\/127.0.0.1:26657"/c\laddr = "tcp:\/\/0.0.0.0:' $RPC ' "/g' $HOME_DIR /config/config.toml
153+ sed -i -e ' s/cors_allowed_origins = \[\]/cors_allowed_origins = \["\*"\]/g' $HOME_DIR /config/config.toml
154+
155+ # REST endpoint
156+ sed -i -e ' s/address = "tcp:\/\/localhost:1317"/address = "tcp:\/\/0.0.0.0:' $REST ' "/g' $HOME_DIR /config/app.toml
157+ sed -i -e ' s/enable = false/enable = true/g' $HOME_DIR /config/app.toml
158+ sed -i -e ' s/enabled-unsafe-cors = false/enabled-unsafe-cors = true/g' $HOME_DIR /config/app.toml
159+
160+ # peer exchange
161+ sed -i -e ' s/pprof_laddr = "localhost:6060"/pprof_laddr = "localhost:' $PROFF ' "/g' $HOME_DIR /config/config.toml
162+ sed -i -e ' s/laddr = "tcp:\/\/0.0.0.0:26656"/laddr = "tcp:\/\/0.0.0.0:' $P2P ' "/g' $HOME_DIR /config/config.toml
163+
164+ # GRPC
165+ sed -i -e ' s/address = "localhost:9090"/address = "0.0.0.0:' $GRPC ' "/g' $HOME_DIR /config/app.toml
166+ sed -i -e ' s/address = "localhost:9091"/address = "0.0.0.0:' $GRPC_WEB ' "/g' $HOME_DIR /config/app.toml
167+
168+ # Rosetta Api
169+ sed -i -e ' s/address = ":8080"/address = "0.0.0.0:' $ROSETTA ' "/g' $HOME_DIR /config/app.toml
170+
171+ # Faster blocks
172+ sed -i -e ' s/timeout_commit = "5s"/timeout_commit = "' $BLOCK_TIME ' "/g' $HOME_DIR /config/config.toml
173+
174+ BINARY start --pruning=nothing --minimum-gas-prices=1000000000$DENOM --rpc.laddr=" tcp://0.0.0.0:$RPC " --json-rpc.api=eth,txpool,personal,net,debug,web3 --chain-id=" $CHAIN_ID "
0 commit comments