forked from cerc-io/laconicd-deprecated
conflicts
This commit is contained in:
+30
-36
@@ -1,69 +1,63 @@
|
||||
#!/bin/bash
|
||||
|
||||
KEY="mykey"
|
||||
TESTKEY="test"
|
||||
CHAINID="ethermint-100"
|
||||
MONIKER="localtestnet"
|
||||
|
||||
# stop and remove existing daemon and client data and process(es)
|
||||
rm -rf $PWD/.ethermint*
|
||||
rm -rf ~/.ethermint*
|
||||
pkill -f "ethermint*"
|
||||
|
||||
make build-ethermint
|
||||
|
||||
$PWD/build/ethermintcli config keyring-backend test
|
||||
|
||||
# Set up config for CLI
|
||||
$PWD/build/ethermintcli config chain-id $CHAINID
|
||||
$PWD/build/ethermintcli config output json
|
||||
$PWD/build/ethermintcli config indent true
|
||||
$PWD/build/ethermintcli config trust-node true
|
||||
|
||||
# if $KEY exists it should be deleted
|
||||
$PWD/build/ethermintcli keys add $KEY
|
||||
# if $KEY exists it should be override
|
||||
"$PWD"/build/ethermintd keys add $KEY --keyring-backend test --algo "eth_secp256k1"
|
||||
|
||||
# Set moniker and chain-id for Ethermint (Moniker can be anything, chain-id must be an integer)
|
||||
$PWD/build/ethermintd init $MONIKER --chain-id $CHAINID
|
||||
"$PWD"/build/ethermintd init $MONIKER --chain-id $CHAINID
|
||||
|
||||
# Change parameter token denominations to aphoton
|
||||
cat $HOME/.ethermintd/config/genesis.json | jq '.app_state["staking"]["params"]["bond_denom"]="aphoton"' > $HOME/.ethermintd/config/tmp_genesis.json && mv $HOME/.ethermintd/config/tmp_genesis.json $HOME/.ethermintd/config/genesis.json
|
||||
cat $HOME/.ethermintd/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="aphoton"' > $HOME/.ethermintd/config/tmp_genesis.json && mv $HOME/.ethermintd/config/tmp_genesis.json $HOME/.ethermintd/config/genesis.json
|
||||
cat $HOME/.ethermintd/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="aphoton"' > $HOME/.ethermintd/config/tmp_genesis.json && mv $HOME/.ethermintd/config/tmp_genesis.json $HOME/.ethermintd/config/genesis.json
|
||||
cat $HOME/.ethermintd/config/genesis.json | jq '.app_state["mint"]["params"]["mint_denom"]="aphoton"' > $HOME/.ethermintd/config/tmp_genesis.json && mv $HOME/.ethermintd/config/tmp_genesis.json $HOME/.ethermintd/config/genesis.json
|
||||
cat $HOME/.ethermint/config/genesis.json | jq '.app_state["staking"]["params"]["bond_denom"]="stake"' > $HOME/.ethermint/config/tmp_genesis.json && mv $HOME/.ethermint/config/tmp_genesis.json $HOME/.ethermint/config/genesis.json
|
||||
cat $HOME/.ethermint/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="aphoton"' > $HOME/.ethermint/config/tmp_genesis.json && mv $HOME/.ethermint/config/tmp_genesis.json $HOME/.ethermint/config/genesis.json
|
||||
cat $HOME/.ethermint/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="aphoton"' > $HOME/.ethermint/config/tmp_genesis.json && mv $HOME/.ethermint/config/tmp_genesis.json $HOME/.ethermint/config/genesis.json
|
||||
cat $HOME/.ethermint/config/genesis.json | jq '.app_state["mint"]["params"]["mint_denom"]="aphoton"' > $HOME/.ethermint/config/tmp_genesis.json && mv $HOME/.ethermint/config/tmp_genesis.json $HOME/.ethermint/config/genesis.json
|
||||
|
||||
# Allocate genesis accounts (cosmos formatted addresses)
|
||||
$PWD/build/ethermintd add-genesis-account "$("$PWD"/build/ethermintcli keys show "$KEY$i" -a)" 100000000000000000000aphoton
|
||||
"$PWD"/build/ethermintd add-genesis-account "$("$PWD"/build/ethermintd keys show "$KEY" -a --keyring-backend test)" 100000000000000000000aphoton,10000000000000000000stake --keyring-backend test
|
||||
|
||||
# Sign genesis transaction
|
||||
$PWD/build/ethermintd gentx --name $KEY --amount=1000000000000000000aphoton --keyring-backend test
|
||||
"$PWD"/build/ethermintd gentx $KEY 10000000000000000000stake --amount=100000000000000000000aphoton --keyring-backend test --chain-id $CHAINID
|
||||
|
||||
# Collect genesis tx
|
||||
$PWD/build/ethermintd collect-gentxs
|
||||
"$PWD"/build/ethermintd collect-gentxs
|
||||
|
||||
# Run this to ensure everything worked and that the genesis file is setup correctly
|
||||
$PWD/build/ethermintd validate-genesis
|
||||
"$PWD"/build/ethermintd validate-genesis
|
||||
|
||||
# Start the node (remove the --pruning=nothing flag if historical queries are not needed) in background and log to file
|
||||
$PWD/build/ethermintd start --pruning=nothing --rpc.unsafe --log_level "main:info,state:info,mempool:info" --trace > ethermintd.log &
|
||||
"$PWD"/build/ethermintd start --pruning=nothing --rpc.unsafe --rpc-api "web3, eth, personal, net" --keyring-backend test > ethermintd.log 2>&1 &
|
||||
|
||||
sleep 1
|
||||
# Give ethermintd node enough time to launch
|
||||
sleep 5
|
||||
|
||||
# Start the rest server with unlocked key in background and log to file
|
||||
$PWD/build/ethermintcli rest-server --laddr "tcp://localhost:8545" --unlock-key $KEY --chain-id $CHAINID --trace --rpc-api="web3,eth,net,personal" > ethermintcli.log &
|
||||
solcjs --abi "$PWD"/tests-solidity/suites/basic/contracts/Counter.sol --bin -o "$PWD"/tests-solidity/suites/basic/counter
|
||||
mv "$PWD"/tests-solidity/suites/basic/counter/*.abi "$PWD"/tests-solidity/suites/basic/counter/counter_sol.abi 2> /dev/null
|
||||
mv "$PWD"/tests-solidity/suites/basic/counter/*.bin "$PWD"/tests-solidity/suites/basic/counter/counter_sol.bin 2> /dev/null
|
||||
|
||||
solcjs --abi $PWD/tests-solidity/suites/basic/contracts/Counter.sol --bin -o $PWD/tests-solidity/suites/basic/counter
|
||||
mv $PWD/tests-solidity/suites/basic/counter/*.abi $PWD/tests-solidity/suites/basic/counter/counter_sol.abi 2> /dev/null
|
||||
mv $PWD/tests-solidity/suites/basic/counter/*.bin $PWD/tests-solidity/suites/basic/counter/counter_sol.bin 2> /dev/null
|
||||
|
||||
ACCT=$(curl --fail --silent -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' -H "Content-Type: application/json" http://localhost:8545 | grep -o '\0x[^"]*' | head -1 2>&1)
|
||||
|
||||
echo $ACCT
|
||||
# Query for the account
|
||||
ACCT=$(curl --fail --silent -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' -H "Content-Type: application/json" http://localhost:8545 | grep -o '\0x[^"]*')
|
||||
echo "$ACCT"
|
||||
|
||||
# Start testcases
|
||||
curl -X POST --data '{"jsonrpc":"2.0","method":"personal_unlockAccount","params":["'$ACCT'", ""],"id":1}' -H "Content-Type: application/json" http://localhost:8545
|
||||
|
||||
PRIVKEY="$("$PWD"/build/ethermintcli keys unsafe-export-eth-key $KEY)"
|
||||
|
||||
echo $PRIVKEY
|
||||
#PRIVKEY="$("$PWD"/build/ethermintd keys export $KEY)"
|
||||
|
||||
## need to get the private key from the account in order to check this functionality.
|
||||
cd tests-solidity/suites/basic/ && go get && sleep 5 && go run main.go $ACCT
|
||||
cd tests-solidity/suites/basic/ && go get && go run main.go $ACCT
|
||||
|
||||
# After tests
|
||||
# kill test ethermintd
|
||||
echo "going to shutdown ethermintd in 3 seconds..."
|
||||
sleep 3
|
||||
pkill -f "ethermint*"
|
||||
@@ -9,6 +9,9 @@ QTD=1
|
||||
SLEEP_TIMEOUT=5
|
||||
TEST_QTD=1
|
||||
|
||||
## remove test data dir after
|
||||
REMOVE_DATA_DIR=false
|
||||
|
||||
#PORT AND RPC_PORT 3 initial digits, to be concat with a suffix later when node is initialized
|
||||
RPC_PORT="854"
|
||||
IP_ADDR="0.0.0.0"
|
||||
@@ -29,10 +32,11 @@ usage() {
|
||||
echo "-q <number> -- Quantity of nodes to run. eg: 3"
|
||||
echo "-z <number> -- Quantity of nodes to run tests against eg: 3"
|
||||
echo "-s <number> -- Sleep between operations in secs. eg: 5"
|
||||
echo "-r <string> -- Remove test dir after, eg: true, default is false"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "h?t:q:z:s:m:" args; do
|
||||
while getopts "h?t:q:z:s:m:r:" args; do
|
||||
case $args in
|
||||
h|\?)
|
||||
usage;
|
||||
@@ -42,6 +46,7 @@ while getopts "h?t:q:z:s:m:" args; do
|
||||
z ) TEST_QTD=${OPTARG};;
|
||||
s ) SLEEP_TIMEOUT=${OPTARG};;
|
||||
m ) MODE=${OPTARG};;
|
||||
r ) REMOVE_DATA_DIR=${OPTARG};;
|
||||
esac
|
||||
done
|
||||
|
||||
@@ -54,13 +59,6 @@ if [[ ! "$DATA_DIR" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DATA_CLI_DIR=$(mktemp -d -t ethermint-cli-datadir.XXXXX)
|
||||
|
||||
if [[ ! "$DATA_CLI_DIR" ]]; then
|
||||
echo "Could not create $DATA_CLI_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Compile ethermint
|
||||
echo "compiling ethermint"
|
||||
make build-ethermint
|
||||
@@ -68,34 +66,30 @@ make build-ethermint
|
||||
# PID array declaration
|
||||
arr=()
|
||||
|
||||
# PID arraycli declaration
|
||||
arrcli=()
|
||||
|
||||
init_func() {
|
||||
echo "create and add new keys"
|
||||
"$PWD"/build/ethermintcli config keyring-backend test --home "$DATA_CLI_DIR$i"
|
||||
"$PWD"/build/ethermintcli keys add $KEY"$i" --home "$DATA_CLI_DIR$i" --no-backup --chain-id $CHAINID
|
||||
echo "init Ethermint with moniker=$MONIKER and chain-id=$CHAINID"
|
||||
"$PWD"/build/ethermintd keys add $KEY"$i" --keyring-backend test --home "$DATA_DIR$i" --no-backup --algo "eth_secp256k1"
|
||||
"$PWD"/build/ethermintd init $MONIKER --chain-id $CHAINID --home "$DATA_DIR$i"
|
||||
echo "init ethermintcli with chain-id=$CHAINID and config it trust-node true"
|
||||
"$PWD"/build/ethermintcli config chain-id $CHAINID --home "$DATA_CLI_DIR$i"
|
||||
"$PWD"/build/ethermintcli config output json --home "$DATA_CLI_DIR$i"
|
||||
"$PWD"/build/ethermintcli config indent true --home "$DATA_CLI_DIR$i"
|
||||
"$PWD"/build/ethermintcli config trust-node true --home "$DATA_CLI_DIR$i"
|
||||
echo "prepare genesis: Allocate genesis accounts"
|
||||
"$PWD"/build/ethermintd add-genesis-account \
|
||||
"$("$PWD"/build/ethermintcli keys show "$KEY$i" -a --home "$DATA_CLI_DIR$i" )" 1000000000000000000aphoton,1000000000000000000stake \
|
||||
--home "$DATA_DIR$i" --home-client "$DATA_CLI_DIR$i"
|
||||
echo "prepare genesis: Sign genesis transaction"
|
||||
"$PWD"/build/ethermintd gentx --name $KEY"$i" --keyring-backend test --home "$DATA_DIR$i" --home-client "$DATA_CLI_DIR$i"
|
||||
echo "prepare genesis: Collect genesis tx"
|
||||
"$("$PWD"/build/ethermintd keys show "$KEY$i" --keyring-backend test -a --home "$DATA_DIR$i")" 1000000000000000000aphoton,1000000000000000000stake \
|
||||
--keyring-backend test --home "$DATA_DIR$i"
|
||||
"$PWD"/build/ethermintd gentx "$KEY$i" 1000000000000000000stake --amount=1000000000000000000aphoton --chain-id $CHAINID --keyring-backend test --home "$DATA_DIR$i"
|
||||
"$PWD"/build/ethermintd collect-gentxs --home "$DATA_DIR$i"
|
||||
echo "prepare genesis: Run validate-genesis to ensure everything worked and that the genesis file is setup correctly"
|
||||
"$PWD"/build/ethermintd validate-genesis --home "$DATA_DIR$i"
|
||||
|
||||
if [[ $MODE == "pending" ]]; then
|
||||
ls $DATA_DIR$i
|
||||
# sed -i 's/create_empty_blocks_interval = "0s"/create_empty_blocks_interval = "30s"/g' $DATA_DIR$i/config/config.toml
|
||||
ls $DATA_DIR$i
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
sed -i '' 's/create_empty_blocks_interval = "0s"/create_empty_blocks_interval = "30s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i '' 's/timeout_propose = "3s"/timeout_propose = "30s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i '' 's/timeout_propose_delta = "500ms"/timeout_propose_delta = "2s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i '' 's/timeout_prevote = "1s"/timeout_prevote = "120s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i '' 's/timeout_prevote_delta = "500ms"/timeout_prevote_delta = "2s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i '' 's/timeout_precommit = "1s"/timeout_precommit = "10s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i '' 's/timeout_precommit_delta = "500ms"/timeout_precommit_delta = "2s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i '' 's/timeout_commit = "5s"/timeout_commit = "150s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i '' 's/timeout_broadcast_tx_commit = "10s"/timeout_broadcast_tx_commit = "150s"/g' $DATA_DIR$i/config/config.toml
|
||||
else
|
||||
sed -i 's/create_empty_blocks_interval = "0s"/create_empty_blocks_interval = "30s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i 's/timeout_propose = "3s"/timeout_propose = "30s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i 's/timeout_propose_delta = "500ms"/timeout_propose_delta = "2s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i 's/timeout_prevote = "1s"/timeout_prevote = "120s"/g' $DATA_DIR$i/config/config.toml
|
||||
@@ -103,33 +97,29 @@ init_func() {
|
||||
sed -i 's/timeout_precommit = "1s"/timeout_precommit = "10s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i 's/timeout_precommit_delta = "500ms"/timeout_precommit_delta = "2s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i 's/timeout_commit = "5s"/timeout_commit = "150s"/g' $DATA_DIR$i/config/config.toml
|
||||
sed -i 's/timeout_broadcast_tx_commit = "10s"/timeout_broadcast_tx_commit = "150s"/g' $DATA_DIR$i/config/config.toml
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
start_func() {
|
||||
echo "starting ethermint node $i in background ..."
|
||||
"$PWD"/build/ethermintd start --pruning=nothing --rpc.unsafe --log_level "main:info,state:info,mempool:info" \
|
||||
"$PWD"/build/ethermintd start --pruning=nothing --rpc.unsafe \
|
||||
--p2p.laddr tcp://$IP_ADDR:$NODE_P2P_PORT"$i" --address tcp://$IP_ADDR:$NODE_PORT"$i" --rpc.laddr tcp://$IP_ADDR:$NODE_RPC_PORT"$i" \
|
||||
--home "$DATA_DIR$i" \
|
||||
--json-rpc.address http://$IP_ADDR:$RPC_PORT"$i" \
|
||||
--keyring-backend test --home "$DATA_DIR$i" \
|
||||
--rpc-api "web3, eth, personal, net" \
|
||||
>"$DATA_DIR"/node"$i".log 2>&1 & disown
|
||||
|
||||
|
||||
ETHERMINT_PID=$!
|
||||
echo "started ethermint node, pid=$ETHERMINT_PID"
|
||||
# add PID to array
|
||||
arr+=("$ETHERMINT_PID")
|
||||
}
|
||||
|
||||
start_cli_func() {
|
||||
echo "starting ethermint node $i in background ..."
|
||||
"$PWD"/build/ethermintcli rest-server --unlock-key $KEY"$i" --chain-id $CHAINID --trace --rpc-api="web3,eth,net,personal" \
|
||||
--laddr "tcp://localhost:$RPC_PORT$i" --node tcp://$IP_ADDR:$NODE_RPC_PORT"$i" \
|
||||
--home "$DATA_CLI_DIR$i" --read-timeout 30 --write-timeout 30 \
|
||||
>"$DATA_CLI_DIR"/cli"$i".log 2>&1 & disown
|
||||
|
||||
ETHERMINT_CLI_PID=$!
|
||||
echo "started ethermintcli node, pid=$ETHERMINT_CLI_PID"
|
||||
# add PID to array
|
||||
arrcli+=("$ETHERMINT_CLI_PID")
|
||||
if [[ $MODE == "pending" ]]; then
|
||||
echo "waiting for the first block..."
|
||||
sleep 300
|
||||
fi
|
||||
}
|
||||
|
||||
# Run node with static blockchain database
|
||||
@@ -138,7 +128,6 @@ for i in $(seq 1 "$QTD"); do
|
||||
init_func "$i"
|
||||
start_func "$i"
|
||||
sleep 1
|
||||
start_cli_func "$i"
|
||||
echo "sleeping $SLEEP_TIMEOUT seconds for startup"
|
||||
sleep "$SLEEP_TIMEOUT"
|
||||
echo "done sleeping"
|
||||
@@ -150,37 +139,37 @@ echo "done sleeping"
|
||||
|
||||
set +e
|
||||
|
||||
if [[ -z $TEST || $TEST == "rpc" || $TEST == "pending" ]]; then
|
||||
if [[ -z $TEST || $TEST == "rpc" || $TEST == "pending" ]]; then
|
||||
|
||||
time_out=300s
|
||||
if [[ $TEST == "pending" ]]; then
|
||||
time_out=60m0s
|
||||
fi
|
||||
|
||||
for i in $(seq 1 "$TEST_QTD"); do
|
||||
HOST_RPC=http://$IP_ADDR:$RPC_PORT"$i"
|
||||
echo "going to test ethermint node $HOST_RPC ..."
|
||||
if [[ $MODE == "pending" ]]; then
|
||||
sleep 150
|
||||
MODE=$MODE HOST=$HOST_RPC go test -v ./tests/tests-pending/rpc_pending_test.go
|
||||
else
|
||||
MODE=$MODE HOST=$HOST_RPC go test ./tests/... -timeout=300s -v -short
|
||||
fi
|
||||
|
||||
MODE=$MODE HOST=$HOST_RPC go test ./tests/... -timeout=$time_out -v -short
|
||||
|
||||
RPC_FAIL=$?
|
||||
done
|
||||
|
||||
|
||||
fi
|
||||
|
||||
stop_func() {
|
||||
ETHERMINT_PID=$i
|
||||
echo "shutting down node, pid=$ETHERMINT_PID ..."
|
||||
|
||||
|
||||
# Shutdown ethermint node
|
||||
kill -9 "$ETHERMINT_PID"
|
||||
wait "$ETHERMINT_PID"
|
||||
|
||||
if [ $REMOVE_DATA_DIR == "true" ]
|
||||
then
|
||||
rm -rf $DATA_DIR*
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
for i in "${arrcli[@]}"; do
|
||||
stop_func "$i"
|
||||
done
|
||||
|
||||
for i in "${arr[@]}"; do
|
||||
stop_func "$i"
|
||||
done
|
||||
|
||||
Executable
+155
@@ -0,0 +1,155 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ue
|
||||
|
||||
DESTDIR=${DESTDIR:-}
|
||||
PREFIX=${PREFIX:-/usr/local}
|
||||
UNAME_S="$(uname -s 2>/dev/null)"
|
||||
UNAME_M="$(uname -m 2>/dev/null)"
|
||||
BUF_VERSION=0.11.0
|
||||
PROTOC_VERSION=3.13.0
|
||||
PROTOC_GRPC_GATEWAY_VERSION=1.14.7
|
||||
|
||||
f_abort() {
|
||||
local l_rc=$1
|
||||
shift
|
||||
|
||||
echo $@ >&2
|
||||
exit ${l_rc}
|
||||
}
|
||||
|
||||
case "${UNAME_S}" in
|
||||
Linux)
|
||||
PROTOC_ZIP="protoc-${PROTOC_VERSION}-linux-x86_64.zip"
|
||||
PROTOC_GRPC_GATEWAY_BIN="protoc-gen-grpc-gateway-v${PROTOC_GRPC_GATEWAY_VERSION}-linux-x86_64"
|
||||
;;
|
||||
Darwin)
|
||||
PROTOC_ZIP="protoc-${PROTOC_VERSION}-osx-x86_64.zip"
|
||||
PROTOC_GRPC_GATEWAY_BIN="protoc-gen-grpc-gateway-v${PROTOC_GRPC_GATEWAY_VERSION}-darwin-x86_64"
|
||||
;;
|
||||
*)
|
||||
f_abort 1 "Unknown kernel name. Exiting."
|
||||
esac
|
||||
|
||||
TEMPDIR="$(mktemp -d)"
|
||||
|
||||
trap "rm -rvf ${TEMPDIR}" EXIT
|
||||
|
||||
f_print_installing_with_padding() {
|
||||
printf "Installing %30s ..." "$1" >&2
|
||||
}
|
||||
|
||||
f_print_done() {
|
||||
echo -e "\tDONE" >&2
|
||||
}
|
||||
|
||||
f_ensure_tools() {
|
||||
! which curl &>/dev/null && f_abort 2 "couldn't find curl, aborting" || true
|
||||
}
|
||||
|
||||
f_ensure_dirs() {
|
||||
mkdir -p "${DESTDIR}/${PREFIX}/bin"
|
||||
mkdir -p "${DESTDIR}/${PREFIX}/include"
|
||||
}
|
||||
|
||||
f_needs_install() {
|
||||
if [ -x $1 ]; then
|
||||
echo -e "\talready installed. Skipping." >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
f_install_protoc() {
|
||||
f_print_installing_with_padding proto_c
|
||||
f_needs_install "${DESTDIR}/${PREFIX}/bin/protoc" || return 0
|
||||
|
||||
pushd "${TEMPDIR}" >/dev/null
|
||||
curl -o "${PROTOC_ZIP}" -sSL "https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/${PROTOC_ZIP}"
|
||||
unzip -q -o ${PROTOC_ZIP} -d ${DESTDIR}/${PREFIX} bin/protoc; \
|
||||
unzip -q -o ${PROTOC_ZIP} -d ${DESTDIR}/${PREFIX} 'include/*'; \
|
||||
rm -f ${PROTOC_ZIP}
|
||||
popd >/dev/null
|
||||
f_print_done
|
||||
}
|
||||
|
||||
f_install_buf() {
|
||||
f_print_installing_with_padding buf
|
||||
f_needs_install "${DESTDIR}/${PREFIX}/bin/buf" || return 0
|
||||
|
||||
curl -sSL "https://github.com/bufbuild/buf/releases/download/v${BUF_VERSION}/buf-${UNAME_S}-${UNAME_M}" -o "${DESTDIR}/${PREFIX}/bin/buf"
|
||||
chmod +x "${DESTDIR}/${PREFIX}/bin/buf"
|
||||
f_print_done
|
||||
}
|
||||
|
||||
f_install_protoc_gen_gocosmos() {
|
||||
f_print_installing_with_padding protoc-gen-gocosmos
|
||||
|
||||
if ! grep "github.com/gogo/protobuf => github.com/regen-network/protobuf" go.mod &>/dev/null ; then
|
||||
echo -e "\tPlease run this command from somewhere inside the ethermint folder."
|
||||
return 1
|
||||
fi
|
||||
|
||||
go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos 2>/dev/null
|
||||
f_print_done
|
||||
}
|
||||
|
||||
f_install_protoc_gen_grpc_gateway() {
|
||||
f_print_installing_with_padding protoc-gen-grpc-gateway
|
||||
f_needs_install "${DESTDIR}/${PREFIX}/bin/protoc-gen-grpc-gateway" || return 0
|
||||
|
||||
curl -o "${DESTDIR}/${PREFIX}/bin/protoc-gen-grpc-gateway" -sSL "https://github.com/grpc-ecosystem/grpc-gateway/releases/download/v${PROTOC_GRPC_GATEWAY_VERSION}/${PROTOC_GRPC_GATEWAY_BIN}"
|
||||
f_print_done
|
||||
}
|
||||
|
||||
f_install_protoc_gen_swagger() {
|
||||
f_print_installing_with_padding protoc-gen-swagger
|
||||
f_needs_install "${DESTDIR}/${PREFIX}/bin/protoc-gen-swagger" || return 0
|
||||
|
||||
if ! which npm &>/dev/null ; then
|
||||
echo -e "\tNPM is not installed. Skipping."
|
||||
return 0
|
||||
fi
|
||||
|
||||
pushd "${TEMPDIR}" >/dev/null
|
||||
go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
|
||||
npm install -g swagger-combine
|
||||
popd >/dev/null
|
||||
f_print_done
|
||||
}
|
||||
|
||||
f_install_clang_format() {
|
||||
f_print_installing_with_padding clang-format
|
||||
|
||||
if which clang-format &>/dev/null ; then
|
||||
echo -e "\talready installed. Skipping."
|
||||
return 0
|
||||
fi
|
||||
|
||||
case "${UNAME_S}" in
|
||||
Linux)
|
||||
if [ -e /etc/debian_version ]; then
|
||||
echo -e "\tRun: sudo apt-get install clang-format" >&2
|
||||
elif [ -e /etc/fedora-release ]; then
|
||||
echo -e "\tRun: sudo dnf install clang" >&2
|
||||
else
|
||||
echo -e "\tRun (as root): subscription-manager repos --enable rhel-7-server-devtools-rpms ; yum install llvm-toolset-7" >&2
|
||||
fi
|
||||
;;
|
||||
Darwin)
|
||||
echo "\tRun: brew install clang-format" >&2
|
||||
;;
|
||||
*)
|
||||
echo "\tunknown operating system. Skipping." >&2
|
||||
esac
|
||||
}
|
||||
|
||||
f_ensure_tools
|
||||
f_ensure_dirs
|
||||
f_install_protoc
|
||||
f_install_buf
|
||||
f_install_protoc_gen_gocosmos
|
||||
f_install_protoc_gen_grpc_gateway
|
||||
f_install_protoc_gen_swagger
|
||||
f_install_clang_format
|
||||
+15
-6
@@ -4,22 +4,26 @@ set -eo pipefail
|
||||
|
||||
protoc_gen_gocosmos() {
|
||||
if ! grep "github.com/gogo/protobuf => github.com/regen-network/protobuf" go.mod &>/dev/null ; then
|
||||
echo -e "\tPlease run this command from somewhere inside the ethermint folder."
|
||||
echo -e "\tPlease run this command from somewhere inside the sommelier folder."
|
||||
return 1
|
||||
fi
|
||||
|
||||
go get github.com/regen-network/cosmos-proto/protoc-gen-gocosmos 2>/dev/null
|
||||
}
|
||||
|
||||
protoc_gen_doc() {
|
||||
go get -u github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc 2>/dev/null
|
||||
}
|
||||
|
||||
protoc_gen_gocosmos
|
||||
protoc_gen_doc
|
||||
|
||||
proto_dirs=$(find ./proto -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq)
|
||||
for dir in $proto_dirs; do
|
||||
buf protoc \
|
||||
-I "proto" \
|
||||
-I "third_party/proto" \
|
||||
--gocosmos_out=plugins=interfacetype+grpc,\
|
||||
Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types:. \
|
||||
--gocosmos_out=plugins=interfacetype+grpc:. \
|
||||
$(find "${dir}" -maxdepth 1 -name '*.proto')
|
||||
|
||||
# command to generate gRPC gateway (*.pb.gw.go in respective modules) files
|
||||
@@ -31,9 +35,14 @@ Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types:. \
|
||||
|
||||
done
|
||||
|
||||
# generate codec/testdata proto code
|
||||
buf protoc -I "proto" -I "third_party/proto" -I "testutil/testdata" --gocosmos_out=plugins=interfacetype+grpc,\
|
||||
Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types:. ./testutil/testdata/*.proto
|
||||
# command to generate docs using protoc-gen-doc
|
||||
buf protoc \
|
||||
-I "proto" \
|
||||
-I "third_party/proto" \
|
||||
--doc_out=./docs/core \
|
||||
--doc_opt=./docs/protodoc-markdown.tmpl,proto-docs.md \
|
||||
$(find "$(pwd)/proto" -maxdepth 5 -name '*.proto')
|
||||
go mod tidy
|
||||
|
||||
# move proto files to the right places
|
||||
cp -r github.com/cosmos/ethermint/* ./
|
||||
|
||||
@@ -3,13 +3,18 @@
|
||||
export GOPATH=~/go
|
||||
export PATH=$PATH:$GOPATH/bin
|
||||
go build -o ./build/ethermintd ./cmd/ethermintd
|
||||
go build -o ./build/ethermintcli ./cmd/ethermintcli
|
||||
mkdir $GOPATH/bin
|
||||
cp ./build/ethermintd $GOPATH/bin
|
||||
cp ./build/ethermintcli $GOPATH/bin
|
||||
|
||||
localKeyAddr=0x7cb61d4117ae31a12e393a1cfa3bac666481d02e
|
||||
user1Addr=0xc6fe5d33615a1c52c08018c47e8bc53646a0e101
|
||||
user2Addr=0x963ebdf2e1f8db8707d05fc75bfeffba1b5bac17
|
||||
|
||||
CHAINID="ethermint-1337"
|
||||
|
||||
# build ethermint binary
|
||||
make install
|
||||
|
||||
cd tests-solidity
|
||||
|
||||
if command -v yarn &> /dev/null; then
|
||||
@@ -22,11 +27,22 @@ else
|
||||
fi
|
||||
|
||||
chmod +x ./init-test-node.sh
|
||||
./init-test-node.sh > ethermintd.log &
|
||||
sleep 5
|
||||
ethermintcli rest-server --laddr "tcp://localhost:8545" --unlock-key localkey,user1,user2 --chain-id $CHAINID --trace --wsport 8546 --rpc-api="web3,eth,net,personal" > ethermintcli.log &
|
||||
nohup ./init-test-node.sh > ethermintd.log 2>&1 &
|
||||
|
||||
# give ethermintd node enough time to launch
|
||||
echo "sleeping ..."
|
||||
sleep 10
|
||||
|
||||
# show existing accounts
|
||||
echo "account list: "
|
||||
curl -X POST --data '{"jsonrpc":"2.0","method":"personal_listAccounts","params":[],"id":1}' -H "Content-Type: application/json" http://localhost:8545
|
||||
|
||||
# unlock localKey address
|
||||
curl -X POST --data '{"jsonrpc":"2.0","method":"personal_unlockAccount","params":["'$localKeyAddr'", ""],"id":1}' -H "Content-Type: application/json" http://localhost:8545
|
||||
|
||||
# tests start
|
||||
cd suites/initializable
|
||||
yarn contract-migrate
|
||||
yarn test-ethermint
|
||||
|
||||
ok=$?
|
||||
@@ -35,7 +51,6 @@ if (( $? != 0 )); then
|
||||
echo "initializable test failed: exit code $?"
|
||||
fi
|
||||
|
||||
killall ethermintcli
|
||||
killall ethermintd
|
||||
|
||||
echo "Script exited with code $ok"
|
||||
@@ -43,10 +58,7 @@ exit $ok
|
||||
|
||||
# initializable-buidler fails on CI, re-add later
|
||||
|
||||
./../../init-test-node.sh > ethermintd.log &
|
||||
sleep 5
|
||||
ethermintcli rest-server --laddr "tcp://localhost:8545" --unlock-key localkey,user1,user2 --chain-id $CHAINID --trace --wsport 8546 --rpc-api="web3,eth,net,personal" > ethermintcli.log &
|
||||
|
||||
./../../init-test-node.sh > ethermintd.log
|
||||
cd ../initializable-buidler
|
||||
yarn test-ethermint
|
||||
|
||||
@@ -56,7 +68,6 @@ if (( $? != 0 )); then
|
||||
echo "initializable-buidler test failed: exit code $?"
|
||||
fi
|
||||
|
||||
killall ethermintcli
|
||||
killall ethermintd
|
||||
|
||||
echo "Script exited with code $ok"
|
||||
|
||||
+176
-5
@@ -1,5 +1,176 @@
|
||||
#!/bin/sh
|
||||
ethermintd --home /ethermint/node$ID/ethermintd/ start > ethermintd.log &
|
||||
sleep 5
|
||||
ethermintcli rest-server --laddr "tcp://localhost:8545" --chain-id "ethermint-7305661614933169792" --trace --rpc-api="web3,eth,net,personal" > ethermintcli.log &
|
||||
tail -f /dev/null
|
||||
#!/bin/bash
|
||||
|
||||
# "stable" mode tests assume data is static
|
||||
# "live" mode tests assume data dynamic
|
||||
|
||||
SCRIPT=$(basename ${BASH_SOURCE[0]})
|
||||
TEST=""
|
||||
QTD=1
|
||||
SLEEP_TIMEOUT=5
|
||||
TEST_QTD=1
|
||||
|
||||
#PORT AND RPC_PORT 3 initial digits, to be concat with a suffix later when node is initialized
|
||||
RPC_PORT="8545"
|
||||
IP_ADDR="0.0.0.0"
|
||||
MODE="rpc"
|
||||
|
||||
KEY="mykey"
|
||||
CHAINID="ethermint-2"
|
||||
MONIKER="mymoniker"
|
||||
|
||||
## default port prefixes for ethermintd
|
||||
NODE_P2P_PORT="2660"
|
||||
NODE_PORT="2663"
|
||||
NODE_RPC_PORT="2666"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $SCRIPT"
|
||||
echo "Optional command line arguments"
|
||||
echo "-t <string> -- Test to run. eg: rpc"
|
||||
echo "-q <number> -- Quantity of nodes to run. eg: 3"
|
||||
echo "-z <number> -- Quantity of nodes to run tests against eg: 3"
|
||||
echo "-s <number> -- Sleep between operations in secs. eg: 5"
|
||||
exit 1
|
||||
}
|
||||
|
||||
while getopts "h?t:q:z:s:" args; do
|
||||
case $args in
|
||||
h|\?)
|
||||
usage;
|
||||
exit;;
|
||||
t ) TEST=${OPTARG};;
|
||||
q ) QTD=${OPTARG};;
|
||||
z ) TEST_QTD=${OPTARG};;
|
||||
s ) SLEEP_TIMEOUT=${OPTARG};;
|
||||
esac
|
||||
done
|
||||
|
||||
set -euxo pipefail
|
||||
|
||||
DATA_DIR=$(mktemp -d -t ethermint-datadir.XXXXX)
|
||||
|
||||
if [[ ! "$DATA_DIR" ]]; then
|
||||
echo "Could not create $DATA_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DATA_CLI_DIR=$(mktemp -d -t ethermint-cli-datadir.XXXXX)
|
||||
|
||||
if [[ ! "$DATA_CLI_DIR" ]]; then
|
||||
echo "Could not create $DATA_CLI_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Compile ethermint
|
||||
echo "compiling ethermint"
|
||||
make build-ethermint
|
||||
|
||||
# PID array declaration
|
||||
arr=()
|
||||
|
||||
# PID arraycli declaration
|
||||
arrcli=()
|
||||
|
||||
init_func() {
|
||||
echo "create and add new keys"
|
||||
"$PWD"/build/ethermintd config keyring-backend test --home "$DATA_CLI_DIR$i"
|
||||
"$PWD"/build/ethermintd keys add $KEY"$i" --home "$DATA_CLI_DIR$i" --no-backup --chain-id $CHAINID --algo "eth_secp256k1"
|
||||
echo "init Ethermint with moniker=$MONIKER and chain-id=$CHAINID"
|
||||
"$PWD"/build/ethermintd init $MONIKER --chain-id $CHAINID --home "$DATA_DIR$i"
|
||||
echo "init ethermintd with chain-id=$CHAINID and config it trust-node true"
|
||||
"$PWD"/build/ethermintd config chain-id $CHAINID --home "$DATA_CLI_DIR$i"
|
||||
"$PWD"/build/ethermintd config output json --home "$DATA_CLI_DIR$i"
|
||||
"$PWD"/build/ethermintd config indent true --home "$DATA_CLI_DIR$i"
|
||||
"$PWD"/build/ethermintd config trust-node true --home "$DATA_CLI_DIR$i"
|
||||
echo "prepare genesis: Allocate genesis accounts"
|
||||
"$PWD"/build/ethermintd add-genesis-account \
|
||||
"$("$PWD"/build/ethermintd keys show "$KEY$i" -a --home "$DATA_CLI_DIR$i" )" 1000000000000000000aphoton,1000000000000000000stake \
|
||||
--home "$DATA_DIR$i" --home-client "$DATA_CLI_DIR$i"
|
||||
echo "prepare genesis: Sign genesis transaction"
|
||||
"$PWD"/build/ethermintd gentx --name $KEY"$i" --keyring-backend test --home "$DATA_DIR$i" --home-client "$DATA_CLI_DIR$i"
|
||||
echo "prepare genesis: Collect genesis tx"
|
||||
"$PWD"/build/ethermintd collect-gentxs --home "$DATA_DIR$i"
|
||||
echo "prepare genesis: Run validate-genesis to ensure everything worked and that the genesis file is setup correctly"
|
||||
"$PWD"/build/ethermintd validate-genesis --home "$DATA_DIR$i"
|
||||
}
|
||||
|
||||
start_func() {
|
||||
echo "starting ethermint node $i in background ..."
|
||||
"$PWD"/build/ethermintd start --pruning=nothing --rpc.unsafe \
|
||||
--p2p.laddr tcp://$IP_ADDR:$NODE_P2P_PORT"$i" --address tcp://$IP_ADDR:$NODE_PORT"$i" --rpc.laddr tcp://$IP_ADDR:$NODE_RPC_PORT"$i" \
|
||||
--home "$DATA_DIR$i" \
|
||||
>"$DATA_DIR"/node"$i".log 2>&1 & disown
|
||||
|
||||
ETHERMINT_PID=$!
|
||||
echo "started ethermint node, pid=$ETHERMINT_PID"
|
||||
# add PID to array
|
||||
arr+=("$ETHERMINT_PID")
|
||||
}
|
||||
|
||||
start_cli_func() {
|
||||
echo "starting ethermint node $i in background ..."
|
||||
"$PWD"/build/ethermintd rest-server --unlock-key $KEY"$i" --chain-id $CHAINID --trace \
|
||||
--laddr "tcp://localhost:$RPC_PORT$i" --node tcp://$IP_ADDR:$NODE_RPC_PORT"$i" \
|
||||
--home "$DATA_CLI_DIR$i" --read-timeout 30 --write-timeout 30 \
|
||||
--rpc-api "web3, eth, personal, net" \
|
||||
>"$DATA_CLI_DIR"/cli"$i".log 2>&1 & disown
|
||||
|
||||
ETHERMINT_CLI_PID=$!
|
||||
echo "started ethermintd node, pid=$ETHERMINT_CLI_PID"
|
||||
# add PID to array
|
||||
arrcli+=("$ETHERMINT_CLI_PID")
|
||||
}
|
||||
|
||||
# Run node with static blockchain database
|
||||
# For loop N times
|
||||
for i in $(seq 1 "$QTD"); do
|
||||
init_func "$i"
|
||||
start_func "$i"
|
||||
sleep 1
|
||||
start_cli_func "$i"
|
||||
echo "sleeping $SLEEP_TIMEOUT seconds for startup"
|
||||
sleep "$SLEEP_TIMEOUT"
|
||||
echo "done sleeping"
|
||||
done
|
||||
|
||||
echo "sleeping $SLEEP_TIMEOUT seconds before running tests ... "
|
||||
sleep "$SLEEP_TIMEOUT"
|
||||
echo "done sleeping"
|
||||
|
||||
set +e
|
||||
|
||||
if [[ -z $TEST || $TEST == "rpc" ]]; then
|
||||
|
||||
for i in $(seq 1 "$TEST_QTD"); do
|
||||
HOST_RPC=http://$IP_ADDR:$RPC_PORT"$i"
|
||||
echo "going to test ethermint node $HOST_RPC ..."
|
||||
MODE=$MODE HOST=$HOST_RPC go test ./tests/... -timeout=300s -v -short
|
||||
|
||||
RPC_FAIL=$?
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
stop_func() {
|
||||
ETHERMINT_PID=$i
|
||||
echo "shutting down node, pid=$ETHERMINT_PID ..."
|
||||
|
||||
# Shutdown ethermint node
|
||||
kill -9 "$ETHERMINT_PID"
|
||||
wait "$ETHERMINT_PID"
|
||||
}
|
||||
|
||||
|
||||
for i in "${arrcli[@]}"; do
|
||||
stop_func "$i"
|
||||
done
|
||||
|
||||
for i in "${arr[@]}"; do
|
||||
stop_func "$i"
|
||||
done
|
||||
|
||||
if [[ (-z $TEST || $TEST == "rpc") && $RPC_FAIL -ne 0 ]]; then
|
||||
exit $RPC_FAIL
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user