1+ #! /bin/bash
2+ set -e
3+
4+ OPTS=" dapp testnet [<options>] <args>...
5+ dapp testnet --help
6+ --
7+ db-user=name database user
8+ db-password=password database password
9+ db-name=name database name
10+ db-host=address database host
11+ db-port=port database port
12+ db-write=bool turn on database write mode
13+ db-type=name the type of database
14+ db-driver=name the driver used for the database
15+ db-waitforsync=bool Should the statediff service start once geth has synced to head (default: false)
16+ rpc-port=port change RPC port (default: 8545)
17+ rpc-addr=address change RPC address (default: 127.0.0.1)
18+ chain-id=number change chain ID (default: 99)
19+ period=seconds use a block time instead of instamine
20+ accounts=number create multiple accounts (default: 1)
21+ address=address eth address to add to genesis
22+ save=name after finishing, save snapshot
23+ load=name start from a previously saved snapshot
24+ dir=directory testnet directory
25+ "
26+
27+ eval " $(
28+ git rev-parse --parseopt -- " $@ " <<< " $OPTS" || echo exit $?
29+ ) "
30+
31+ DB_USER=vdbm
32+ DB_PASSWORD=password
33+ DB_NAME=vulcanize_public
34+ DB_HOST=127.0.0.1
35+ DB_PORT=5432
36+ DB_TYPE=postgres
37+ DB_DRIVER=sqlx
38+ DB_WAIT_FOR_SYNC=false
39+ RPC_PORT=8545
40+ RPC_ADDRESS=127.0.0.1
41+ PERIOD=0
42+ CHAINID=99
43+ ACCOUNTS=0
44+ ADDRESS=
45+ gethdir=$HOME /testnet
46+
47+ while [[ $1 ]]; do
48+ case $1 in
49+ --) shift ; break ;;
50+ --db-user) shift ; DB_USER=$1 ;;
51+ --db-password) shift ; DB_PASSWORD=$1 ;;
52+ --db-name) shift ; DB_NAME=$1 ;;
53+ --db-host) shift ; DB_HOST=$1 ;;
54+ --db-port) shift ; DB_PORT=$1 ;;
55+ --db-write) shift ; DB_WRITE=$1 ;;
56+ --db-type) shift ; DB_TYPE=$1 ;;
57+ --db-driver) shift ; DB_DRIVER=$1 ;;
58+ --db-waitforsync) shift ; DB_WAIT_FOR_SYNC=$1 ;;
59+ --rpc-port) shift ; RPC_PORT=$1 ;;
60+ --rpc-addr) shift ; RPC_ADDRESS=$1 ;;
61+ --chain-id) shift ; CHAINID=$1 ;;
62+ --period) shift ; PERIOD=$1 ;;
63+ --accounts) shift ; ACCOUNTS=$1 ;;
64+ --save) shift ; SAVE=$1 ;;
65+ --address) shift ; ADDRESS=$1 ;;
66+ --load) shift ; LOAD=$1 ;;
67+ --dir) shift ; gethdir=$1 ;;
68+ * ) printf " ${0##*/ } : internal error: %q\\ n" " $1 " ; exit 1
69+ esac ; shift
70+ done
71+
72+ chaindir=$gethdir /$RPC_PORT
73+ # while true; do
74+ # if [[ ! -d "$gethdir/$CHAINID" ]]; then break; fi
75+ # CHAINID=$((CHAINID + 1))
76+ # done
77+
78+ mkdir -p " $chaindir /config"
79+ # if [ -n "$ADDRESS" ]; then
80+ # balance+=(-n {} -s "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" -i balance \
81+ # -i "$ADDRESS")
82+ # fi
83+ for i in $( seq 0 " $ACCOUNTS " ) ; do
84+ address+=( " $(
85+ geth 2> /dev/null account new --datadir " $chaindir " --password=<( exit) 2> /dev/null \
86+ | grep -o -E " 0x[A-Fa-f0-9]*" ) " )
87+ # balance+=(-n {} -s "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" -i balance \
88+ # -i "${address[i]}")
89+ balance+=(' "' " ${address[i]} " ' ": { "balance": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}' )
90+ done
91+
92+ # ALLOC_CLEAN=$(echo ${ALLOC} | jq .)
93+ EXTRA_DATA=" 0x3132333400000000000000000000000000000000000000000000000000000000${address[0]# 0x} 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
94+ JSON_VAL=' {
95+ "config": {
96+ "chainId": ' " $CHAINID " ' ,
97+ "homesteadBlock": 0,
98+ "eip150Block": 0,
99+ "eip155Block": 0,
100+ "eip158Block": 0,
101+ "byzantiumBlock": 0,
102+ "constantinopleBlock": 0,
103+ "petersburgBlock": 0,
104+ "istanbulBlock": 0,
105+ "clique": {
106+ "period": ' " $PERIOD " ' ,
107+ "epoch": 3000
108+ }
109+ },
110+ "difficulty": "0x1",
111+ "gaslimit": "0xffffffffffff",
112+ "extraData": "' " $EXTRA_DATA " ' ",
113+ "alloc": {' " $balance " ' }
114+ }'
115+ echo $JSON_VAL | jq . > $chaindir /config/genesis.json
116+
117+ geth 2> /dev/null --datadir " $chaindir " init " $chaindir /config/genesis.json"
118+
119+ export ETH_RPC_URL=http://$RPC_ADDRESS :$RPC_PORT
120+
121+ port=$(( RPC_PORT + 30000 ))
122+
123+ geth version
124+ echo >&2 " dapp-testnet: RPC URL: $ETH_RPC_URL "
125+ echo >&2 " dapp-testnet: TCP port: $port "
126+ echo >&2 " dapp-testnet: Chain ID: $CHAINID "
127+ echo >&2 " dapp-testnet: Database: $chaindir "
128+ echo >&2 " dapp-testnet: Geth log: $chaindir /geth.log"
129+
130+ printf " %s\n" " ${address[@]} " > " $chaindir /config/account"
131+ echo " $ETH_RPC_URL " > " $chaindir /config/rpc-url"
132+ echo " $port " > " $chaindir /config/node-port"
133+
134+ set +m
135+ # Uncomment below once waitforsync has been merged
136+ # geth \
137+ # 2> >(tee "$chaindir/geth.log" | grep --line-buffered Success | sed 's/^/geth: /' >&2) \
138+ # --datadir "$chaindir" --networkid "$CHAINID" --port="$port" \
139+ # --mine --miner.threads=1 --allow-insecure-unlock \
140+ # --http --http.api "web3,eth,net,debug,personal,statediff" --http.corsdomain '*' --http.vhosts '*' --nodiscover \
141+ # --http.addr="$RPC_ADDRESS" --http.port="$RPC_PORT" --syncmode=full --gcmode=archive \
142+ # --statediff --statediff.db.host="$DB_HOST" --statediff.db.port="$DB_PORT" --statediff.db.user="$DB_USER" \
143+ # --statediff.db.password="$DB_PASSWORD" --statediff.db.name="$DB_NAME" \
144+ # --statediff.db.nodeid 1 --statediff.db.clientname test1 --statediff.writing="$DB_WRITE" \
145+ # --statediff.db.type="$DB_TYPE" --statediff.db.driver="$DB_DRIVER" --statediff.waitforsync="$DB_WAIT_FOR_SYNC" \
146+ # --ws --ws.addr="0.0.0.0" --unlock="$(IFS=,; echo "${address[*]}")" --password=<(exit) &
147+
148+ geth \
149+ 2> >( tee " $chaindir /geth.log" | grep --line-buffered Success | sed ' s/^/geth: /' >&2 ) \
150+ --datadir " $chaindir " --networkid " $CHAINID " --port=" $port " \
151+ --mine --miner.threads=1 --allow-insecure-unlock \
152+ --http --http.api " web3,eth,net,debug,personal,statediff" --http.corsdomain ' *' --http.vhosts ' *' --nodiscover \
153+ --http.addr=" $RPC_ADDRESS " --http.port=" $RPC_PORT " --syncmode=full --gcmode=archive \
154+ --statediff --statediff.db.host=" $DB_HOST " --statediff.db.port=" $DB_PORT " --statediff.db.user=" $DB_USER " \
155+ --statediff.db.password=" $DB_PASSWORD " --statediff.db.name=" $DB_NAME " \
156+ --statediff.db.nodeid 1 --statediff.db.clientname test1 --statediff.writing=" $DB_WRITE " \
157+ --statediff.db.type=" $DB_TYPE " --statediff.db.driver=" $DB_DRIVER " \
158+ --ws --ws.addr=" 0.0.0.0" --unlock=" $( IFS=,; echo " ${address[*]} " ) " --password=<( exit) &
159+
160+ gethpid=$!
161+
162+ clean () {
163+ ( set -x; kill -INT $gethpid ; wait )
164+ if [[ $SAVE ]]; then
165+ echo >&2 " dapp-testnet: saving $gethdir /snapshots/$SAVE "
166+ mkdir -p " $gethdir /snapshots/$SAVE "
167+ cp -r " $chaindir /keystore" " $gethdir /snapshots/$SAVE "
168+ cp -r " $chaindir /config" " $gethdir /snapshots/$SAVE "
169+ geth > /dev/null 2>&1 --datadir " $chaindir " \
170+ export " $gethdir /snapshots/$SAVE /backup"
171+ fi
172+ ( set -x; rm -rf " $chaindir " )
173+ }
174+ trap clean EXIT
175+
176+ until curl -s " $ETH_RPC_URL " ; do sleep 1; done
177+
178+ # UPDATE
179+ # ETH_FROM=$(seth --rpc-url="$ETH_RPC_URL" rpc eth_coinbase)
180+ # export ETH_FROM
181+ export ETH_KEYSTORE=$chaindir /keystore
182+ export ETH_PASSWORD=/dev/null
183+ printf ' dapp-testnet: Account: %s (default)\n' " ${address[0]} " >&2
184+
185+ [[ " ${# address[@]} " -gt 1 ]] && printf ' dapp-testnet: Account: %s\n' " ${address[@]: 1} " >&2
186+
187+ while true ; do sleep 3600; done
0 commit comments