mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-19 13:21:37 +00:00
196 lines
4.6 KiB
Bash
Executable file
196 lines
4.6 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# vars from docker env
|
|
# - IDENTITY (default to empty)
|
|
# - PASSWORD (default to empty)
|
|
# - PRIVATE_KEY (default to empty)
|
|
# - BOOTNODES (default to empty)
|
|
# - EXTIP (default to empty)
|
|
# - VERBOSITY (default to 3)
|
|
# - MAXPEERS (default to 25)
|
|
# - SYNC_MODE (default to 'full')
|
|
# - NETWORK_ID (default to '89')
|
|
# - WS_SECRET (default to empty)
|
|
# - NETSTATS_HOST (default to 'netstats-server:3000')
|
|
# - NETSTATS_PORT (default to 'netstats-server:3000')
|
|
|
|
# constants
|
|
DATA_DIR="data"
|
|
KEYSTORE_DIR="keystore"
|
|
|
|
# variables
|
|
genesisPath=""
|
|
params=""
|
|
accountsCount=$(
|
|
XDC account list --datadir $DATA_DIR --keystore $KEYSTORE_DIR \
|
|
2> /dev/null \
|
|
| wc -l
|
|
)
|
|
|
|
# file to env
|
|
for env in IDENTITY PASSWORD PRIVATE_KEY BOOTNODES WS_SECRET NETSTATS_HOST \
|
|
NETSTATS_PORT EXTIP SYNC_MODE NETWORK_ID ANNOUNCE_TXS STORE_REWARD DEBUG_MODE MAXPEERS; do
|
|
file=$(eval echo "\$${env}_FILE")
|
|
if [[ -f $file ]] && [[ ! -z $file ]]; then
|
|
echo "Replacing $env by $file"
|
|
export $env=$(cat $file)
|
|
elif [[ "$env" == "BOOTNODES" ]] && [[ ! -z $file ]]; then
|
|
echo "Bootnodes file is not available. Waiting for it to be provisioned..."
|
|
while true ; do
|
|
if [[ -f $file ]] && [[ $(grep -e enode $file) ]]; then
|
|
echo "Fount bootnode file."
|
|
break
|
|
fi
|
|
echo "Still no bootnodes file, sleeping..."
|
|
sleep 5
|
|
done
|
|
export $env=$(cat $file)
|
|
fi
|
|
done
|
|
|
|
# networkid
|
|
if [[ ! -z $NETWORK_ID ]]; then
|
|
case $NETWORK_ID in
|
|
88 )
|
|
genesisPath="mainnet.json"
|
|
;;
|
|
89 )
|
|
genesisPath="testnet.json"
|
|
params="$params --apothem --gcmode archive --http-api db,eth,net,web3,debug,XDPoS"
|
|
;;
|
|
90 )
|
|
genesisPath="devnet.json"
|
|
;;
|
|
* )
|
|
echo "network id not supported"
|
|
;;
|
|
esac
|
|
params="$params --networkid $NETWORK_ID"
|
|
fi
|
|
|
|
# custom genesis path
|
|
if [[ ! -z $GENESIS_PATH ]]; then
|
|
genesisPath="$GENESIS_PATH"
|
|
fi
|
|
|
|
# data dir
|
|
if [[ ! -d $DATA_DIR/XDC ]]; then
|
|
echo "No blockchain data, creating genesis block."
|
|
XDC init $genesisPath --datadir $DATA_DIR 2> /dev/null
|
|
fi
|
|
|
|
# identity
|
|
if [[ -z $IDENTITY ]]; then
|
|
IDENTITY="unnamed_$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6)"
|
|
fi
|
|
|
|
# password file
|
|
if [[ ! -f ./password ]]; then
|
|
if [[ ! -z $PASSWORD ]]; then
|
|
echo "Password env is set. Writing into file."
|
|
echo "$PASSWORD" > ./password
|
|
else
|
|
echo "No password set (or empty), generating a new one"
|
|
$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32} > password)
|
|
fi
|
|
fi
|
|
|
|
# private key
|
|
if [[ $accountsCount -le 0 ]]; then
|
|
echo "No accounts found"
|
|
if [[ ! -z $PRIVATE_KEY ]]; then
|
|
echo "Creating account from private key"
|
|
echo "$PRIVATE_KEY" > ./private_key
|
|
XDC account import ./private_key \
|
|
--datadir $DATA_DIR \
|
|
--keystore $KEYSTORE_DIR \
|
|
--password ./password
|
|
rm ./private_key
|
|
else
|
|
echo "Creating new account"
|
|
XDC account new \
|
|
--datadir $DATA_DIR \
|
|
--keystore $KEYSTORE_DIR \
|
|
--password ./password
|
|
fi
|
|
fi
|
|
account=$(
|
|
XDC account list --datadir $DATA_DIR --keystore $KEYSTORE_DIR \
|
|
2> /dev/null \
|
|
| head -n 1 \
|
|
| cut -d"{" -f 2 | cut -d"}" -f 1
|
|
)
|
|
echo "Using account $account"
|
|
params="$params --unlock $account"
|
|
|
|
# bootnodes
|
|
if [[ ! -z $BOOTNODES ]]; then
|
|
params="$params --bootnodes $BOOTNODES"
|
|
fi
|
|
|
|
# extip
|
|
if [[ ! -z $EXTIP ]]; then
|
|
params="$params --nat extip:${EXTIP}"
|
|
fi
|
|
|
|
# syncmode
|
|
if [[ ! -z $SYNC_MODE ]]; then
|
|
params="$params --syncmode ${SYNC_MODE}"
|
|
fi
|
|
|
|
# netstats
|
|
if [[ ! -z $WS_SECRET ]]; then
|
|
echo "Will report to netstats server ${NETSTATS_HOST}:${NETSTATS_PORT}"
|
|
params="$params --ethstats ${IDENTITY}:${WS_SECRET}@${NETSTATS_HOST}:${NETSTATS_PORT}"
|
|
else
|
|
echo "WS_SECRET not set, will not report to netstats server."
|
|
fi
|
|
|
|
# annonce txs
|
|
if [[ ! -z $ANNOUNCE_TXS ]]; then
|
|
params="$params --announce-txs"
|
|
fi
|
|
|
|
# store reward
|
|
if [[ ! -z $STORE_REWARD ]]; then
|
|
params="$params --store-reward"
|
|
fi
|
|
|
|
# debug mode
|
|
if [[ ! -z $DEBUG_MODE ]]; then
|
|
params="$params --gcmode archive --http-api db,eth,net,web3,debug,XDPoS"
|
|
fi
|
|
|
|
# maxpeers
|
|
if [[ -z $MAXPEERS ]]; then
|
|
MAXPEERS=25
|
|
fi
|
|
|
|
# dump
|
|
echo "dump: $IDENTITY $account $BOOTNODES"
|
|
|
|
set -x
|
|
|
|
exec XDC $params \
|
|
--verbosity $VERBOSITY \
|
|
--datadir $DATA_DIR \
|
|
--keystore $KEYSTORE_DIR \
|
|
--identity $IDENTITY \
|
|
--maxpeers $MAXPEERS \
|
|
--password ./password \
|
|
--port 30303 \
|
|
--txpool-globalqueue 5000 \
|
|
--txpool-globalslots 5000 \
|
|
--http \
|
|
--http-corsdomain "*" \
|
|
--http-addr 0.0.0.0 \
|
|
--http-port 8545 \
|
|
--http-vhosts "*" \
|
|
--ws \
|
|
--ws-addr 0.0.0.0 \
|
|
--ws-port 8546 \
|
|
--ws-origins "*" \
|
|
--mine \
|
|
--gasprice "250000000" \
|
|
--miner-gaslimit "84000000" \
|
|
"$@"
|