Skip to content

Commit

Permalink
Fix initial staking in one-chain script (informalsystems#512)
Browse files Browse the repository at this point in the history
* Fix initial staking in one-chain script

* Fix error messages in dev-env

* Add user's genesis account first in one-chain

* Increase number of samoleans in dev-env
  • Loading branch information
vitorenesduarte authored Jan 12, 2021
1 parent 5e9c1d6 commit 4a45567
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 67 deletions.
52 changes: 31 additions & 21 deletions dev-env
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Copied from https://github.com/cosmos/relayer and modified to initialize the Rust relayer light clients.

usage() {
echo "Usage: $0 [CONFIG_FILE] [CHAIN_ID_0] [CHAIN_ID_1]"
echo "Usage: $0 [CONFIG_FILE] [CHAIN_0_ID] [CHAIN_1_ID]"
echo "Example: $0 ./config.toml ibc-0 ibc-1"
exit 1
}
Expand All @@ -18,23 +18,23 @@ if [ -z "$1" ]; then
fi

if [ -z "$2" ]; then
missing "CHAIN_ID_0"
missing "CHAIN_0_ID"
fi

if [ -z "$3" ]; then
missing "CHAIN_ID_1"
missing "CHAIN_1_ID"
fi

if [ "$#" -gt 3 ]; then
echo "Incorrect number of parameters."
usage
fi

tomlcfg="$1"
chainid0="$2"
chainid1="$3"
CONFIG_FILE="$1"
CHAIN_0_ID="$2"
CHAIN_1_ID="$3"

if ! [ -f $tomlcfg ]; then
if ! [ -f $CONFIG_FILE ]; then
echo "[CONFIG_FILE] ($1) does not exist or is not a file."
usage
fi
Expand All @@ -43,7 +43,7 @@ GAIA_DATA="$(pwd)/data"

# Ensure user understands what will be deleted
if [[ -d $GAIA_DATA ]] && [[ ! "$3" == "skip" ]]; then
echo "$0 will delete $HOME/.relayer and $(pwd)/data folder."
echo "$0 will delete $(pwd)/data folder."
read -p "> Do you wish to continue? (y/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
Expand Down Expand Up @@ -72,31 +72,41 @@ mkdir -p "$GAIA_DATA" && cd "$GAIA_DATA" && cd ../

ONE_CHAIN="$(dirname "$0")/one-chain"

"$ONE_CHAIN" gaiad "$chainid0" ./data 26657 26656 6060 9090
"$ONE_CHAIN" gaiad "$chainid1" ./data 26557 26556 6061 9091
CHAIN_0_RPC_PORT=26657
CHAIN_0_RPC_ADDR="localhost:$CHAIN_0_RPC_PORT"
CHAIN_1_RPC_PORT=26557
CHAIN_1_RPC_ADDR="localhost:$CHAIN_1_RPC_PORT"

[ -f "$GAIA_DATA/$chainid0.log" ] && echo "$chainid0 initialized. Watch file $GAIA_DATA/$chainid0.log to see its execution."
[ -f "$GAIA_DATA/$chainid1.log" ] && echo "$chainid1 initialized. Watch file $GAIA_DATA/$chainid1.log to see its execution."
CHAIN_0_SAMOLEANS=100000000000
CHAIN_1_SAMOLEANS=100000000000

"$ONE_CHAIN" gaiad "$CHAIN_0_ID" ./data $CHAIN_0_RPC_PORT 26656 6060 9090 $CHAIN_0_SAMOLEANS
"$ONE_CHAIN" gaiad "$CHAIN_1_ID" ./data $CHAIN_1_RPC_PORT 26556 6061 9091 $CHAIN_1_SAMOLEANS

[ -f "$GAIA_DATA/$CHAIN_0_ID.log" ] && echo "$CHAIN_0_ID initialized. Watch file $GAIA_DATA/$CHAIN_0_ID.log to see its execution."
[ -f "$GAIA_DATA/$CHAIN_1_ID.log" ] && echo "$CHAIN_1_ID initialized. Watch file $GAIA_DATA/$CHAIN_1_ID.log to see its execution."

echo "Building the Rust relayer..."
cargo build
cargo build &> /dev/null

# cleanup the client entries from config
echo "Removing light client peers from configuration..."
cargo run --bin relayer -- -c "$tomlcfg" light rm -c "$chainid0" --all -y &> /dev/null || true
cargo run --bin relayer -- -c "$tomlcfg" light rm -c "$chainid1" --all -y &> /dev/null || true
cargo run --bin relayer -- -c "$CONFIG_FILE" light rm -c "$CHAIN_0_ID" --all -y &> /dev/null || true
cargo run --bin relayer -- -c "$CONFIG_FILE" light rm -c "$CHAIN_1_ID" --all -y &> /dev/null || true

# set the primary peers for clients on each chain
echo "Adding primary peers to light client configuration..."
cargo run --bin relayer -- -c "$tomlcfg" light add localhost:26657 -c "$chainid0" -f -p -s "$GAIA_DATA/$chainid0/data" -y &>/dev/null
cargo run --bin relayer -- -c "$tomlcfg" light add localhost:26557 -c "$chainid1" -f -p -s "$GAIA_DATA/$chainid1/data" -y &>/dev/null
cargo run --bin relayer -- -c "$CONFIG_FILE" light add $CHAIN_0_RPC_ADDR -c "$CHAIN_0_ID" -f -p -s "$GAIA_DATA/$CHAIN_0_ID/data" -y &>/dev/null
cargo run --bin relayer -- -c "$CONFIG_FILE" light add $CHAIN_1_RPC_ADDR -c "$CHAIN_1_ID" -f -p -s "$GAIA_DATA/$CHAIN_1_ID/data" -y &>/dev/null

# set the secondary peers for clients on each chain
echo "Adding secondary peers to light client configuration..."
cargo run --bin relayer -- -c "$tomlcfg" light add localhost:26657 -c "$chainid0" -s "$GAIA_DATA/$chainid0/data" -y --peer-id 2427F8D914A6862279B3326FA64F76E3BC06DB2E &>/dev/null
cargo run --bin relayer -- -c "$tomlcfg" light add localhost:26557 -c "$chainid1" -s "$GAIA_DATA/$chainid1/data" -y --peer-id A885BB3D3DFF6101188B462466AE926E7A6CD51E &>/dev/null
cargo run --bin relayer -- -c "$CONFIG_FILE" light add $CHAIN_0_RPC_ADDR -c "$CHAIN_0_ID" -s "$GAIA_DATA/$CHAIN_0_ID/data" -y --peer-id 2427F8D914A6862279B3326FA64F76E3BC06DB2E &>/dev/null
cargo run --bin relayer -- -c "$CONFIG_FILE" light add $CHAIN_1_RPC_ADDR -c "$CHAIN_1_ID" -s "$GAIA_DATA/$CHAIN_1_ID/data" -y --peer-id A885BB3D3DFF6101188B462466AE926E7A6CD51E &>/dev/null

# add the key seeds to the keyring of each chain
echo "Importing keys..."
cargo run --bin relayer -- -c "$tomlcfg" keys add "$chainid0" "$GAIA_DATA/$chainid0/key_seed.json" &>/dev/null
cargo run --bin relayer -- -c "$tomlcfg" keys add "$chainid1" "$GAIA_DATA/$chainid1/key_seed.json" &>/dev/null
cargo run --bin relayer -- -c "$CONFIG_FILE" keys add "$CHAIN_0_ID" "$GAIA_DATA/$CHAIN_0_ID/key_seed.json" &>/dev/null
cargo run --bin relayer -- -c "$CONFIG_FILE" keys add "$CHAIN_1_ID" "$GAIA_DATA/$CHAIN_1_ID/key_seed.json" &>/dev/null

echo "Done!"
123 changes: 77 additions & 46 deletions one-chain
Original file line number Diff line number Diff line change
@@ -1,73 +1,98 @@
#!/bin/sh
# Copied from https://github.com/cosmos/relayer/tree/master/scripts

display_usage() {
echo "\nMissing $1 parameter. Please check if all parameters were specified."
echo "\nUsage: ./one-chain [BINARY] [CHAIN_ID] [CHAIN_DIR] [RPC_PORT] [P2P_PORT] [PROFILING_PORT] [GRPC_PORT]"
echo "\nExample: ./one-chain $BINARY test-chain-id ./data 26657 26656 6060 9090 \n"
usage() {
echo "Usage: $0 [BINARY] [CHAIN_ID] [CHAIN_DIR] [RPC_PORT] [P2P_PORT] [PROFILING_PORT] [GRPC_PORT] [SAMOLEANS]"
echo "Example: $0 gaiad ibc-0 ./data 26657 26656 6060 9090 100"
exit 1
}

BINARY=$1
CHAINID=$2
CHAINDIR=$3
RPCPORT=$4
P2PPORT=$5
PROFPORT=$6
GRPCPORT=$7
missing() {
echo "Missing $1 parameter. Please check if all parameters were specified."
usage
}

if [ -z "$1" ]; then
display_usage "[BINARY] ($BINARY|akash)"
missing "[BINARY] (gaiad|akash)"
fi

if [ -z "$2" ]; then
display_usage "[CHAIN_ID]"
missing "[CHAIN_ID]"
fi

if [ -z "$3" ]; then
display_usage "[CHAIN_DIR]"
missing "[CHAIN_DIR]"
fi

if [ -z "$4" ]; then
display_usage "[RPC_PORT]"
missing "[RPC_PORT]"
fi

if [ -z "$5" ]; then
display_usage "[P2P_PORT]"
missing "[P2P_PORT]"
fi

if [ -z "$6" ]; then
display_usage "[PROFILING_PORT]"
missing "[PROFILING_PORT]"
fi

if [ -z "$7" ]; then
display_usage "[GRPC_PORT]"
missing "[GRPC_PORT]"
fi

if [ -z "$8" ]; then
missing "[SAMOLEANS]"
fi

echo "Creating $BINARY instance: home=$CHAINDIR | chain-id=$CHAINID | p2p=:$P2PPORT | rpc=:$RPCPORT | profiling=:$PROFPORT | grpc=:$GRPCPORT"
if [ "$#" -gt 8 ]; then
echo "Incorrect number of parameters."
usage
fi

BINARY=$1
CHAIN_ID=$2
CHAIN_DIR=$3
RPC_PORT=$4
P2P_PORT=$5
PROF_PORT=$6
GRPC_PORT=$7
SAMOLEANS=$8

echo "Creating $BINARY instance: home=$CHAIN_DIR | chain-id=$CHAIN_ID | p2p=:$P2P_PORT | rpc=:$RPC_PORT | profiling=:$PROF_PORT | grpc=:$GRPC_PORT | samoleans=:$SAMOLEANS"

# Add dir for chain, exit if error
if ! mkdir -p $CHAINDIR/$CHAINID 2>/dev/null; then
if ! mkdir -p $CHAIN_DIR/$CHAIN_ID 2>/dev/null; then
echo "Failed to create chain folder. Aborting..."
exit 1
fi

# Build genesis file incl account for passed address
coins="100000000000stake,100000000000samoleans"
STAKE="100000000000stake"
# - the user also needs stake to perform actions
USER_COINS="${STAKE},${SAMOLEANS}samoleans"

$BINARY --home $CHAINDIR/$CHAINID --chain-id $CHAINID init $CHAINID &> /dev/null
$BINARY --home $CHAIN_DIR/$CHAIN_ID --chain-id $CHAIN_ID init $CHAIN_ID &> /dev/null
sleep 1
$BINARY --home $CHAINDIR/$CHAINID keys add validator --keyring-backend="test" --output json > $CHAINDIR/$CHAINID/validator_seed.json 2> /dev/null
$BINARY --home $CHAIN_DIR/$CHAIN_ID keys add validator --keyring-backend="test" --output json > $CHAIN_DIR/$CHAIN_ID/validator_seed.json 2> /dev/null
sleep 1
$BINARY --home $CHAINDIR/$CHAINID keys add user --keyring-backend="test" --output json > $CHAINDIR/$CHAINID/key_seed.json 2> /dev/null
$BINARY --home $CHAIN_DIR/$CHAIN_ID keys add user --keyring-backend="test" --output json > $CHAIN_DIR/$CHAIN_ID/key_seed.json 2> /dev/null
sleep 1
$BINARY --home $CHAINDIR/$CHAINID add-genesis-account $($BINARY --home $CHAINDIR/$CHAINID keys --keyring-backend="test" show user -a) $coins &> /dev/null

# Add samoleans to user
USER=$($BINARY --home $CHAIN_DIR/$CHAIN_ID keys --keyring-backend="test" show user -a)
$BINARY --home $CHAIN_DIR/$CHAIN_ID add-genesis-account $USER $USER_COINS &> /dev/null
sleep 1
$BINARY --home $CHAINDIR/$CHAINID add-genesis-account $($BINARY --home $CHAINDIR/$CHAINID keys --keyring-backend="test" show validator -a) $coins &> /dev/null

# Add stake to validator
VALIDATOR=$($BINARY --home $CHAIN_DIR/$CHAIN_ID keys --keyring-backend="test" show validator -a)
$BINARY --home $CHAIN_DIR/$CHAIN_ID add-genesis-account $VALIDATOR $STAKE &> /dev/null
sleep 1
$BINARY --home $CHAINDIR/$CHAINID gentx validator --keyring-backend="test" --chain-id $CHAINID $coins &> /dev/null

# Stake everything
$BINARY --home $CHAIN_DIR/$CHAIN_ID gentx validator --keyring-backend="test" --chain-id $CHAIN_ID $STAKE &> /dev/null
sleep 1
$BINARY --home $CHAINDIR/$CHAINID collect-gentxs &> /dev/null

$BINARY --home $CHAIN_DIR/$CHAIN_ID collect-gentxs &> /dev/null
sleep 1

# Check platform
Expand All @@ -80,27 +105,33 @@ fi
# Set proper defaults and change ports (use a different sed for Mac or Linux)
echo "Change settings in config.toml file..."
if [ $platform = 'linux' ]; then
sed -i 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"$RPCPORT"'"#g' $CHAINDIR/$CHAINID/config/config.toml
sed -i 's#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"$P2PPORT"'"#g' $CHAINDIR/$CHAINID/config/config.toml
sed -i 's#"localhost:6060"#"localhost:'"$P2PPORT"'"#g' $CHAINDIR/$CHAINID/config/config.toml
sed -i 's/timeout_commit = "5s"/timeout_commit = "1s"/g' $CHAINDIR/$CHAINID/config/config.toml
sed -i 's/timeout_propose = "3s"/timeout_propose = "1s"/g' $CHAINDIR/$CHAINID/config/config.toml
sed -i 's/index_all_keys = false/index_all_keys = true/g' $CHAINDIR/$CHAINID/config/config.toml
# sed -i '' 's#index-events = \[\]#index-events = \["message.action","send_packet.packet_src_channel","send_packet.packet_sequence"\]#g' $CHAINDIR/$CHAINID/config/app.toml
sed -i 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"$RPC_PORT"'"#g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
sed -i 's#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"$P2P_PORT"'"#g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
sed -i 's#"localhost:6060"#"localhost:'"$PROF_PORT"'"#g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
sed -i 's/timeout_commit = "5s"/timeout_commit = "1s"/g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
sed -i 's/timeout_propose = "3s"/timeout_propose = "1s"/g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
sed -i 's/index_all_keys = false/index_all_keys = true/g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
# sed -i '' 's#index-events = \[\]#index-events = \["message.action","send_packet.packet_src_channel","send_packet.packet_sequence"\]#g' $CHAIN_DIR/$CHAIN_ID/config/app.toml
else
sed -i '' 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"$RPCPORT"'"#g' $CHAINDIR/$CHAINID/config/config.toml
sed -i '' 's#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"$P2PPORT"'"#g' $CHAINDIR/$CHAINID/config/config.toml
sed -i '' 's#"localhost:6060"#"localhost:'"$P2PPORT"'"#g' $CHAINDIR/$CHAINID/config/config.toml
sed -i '' 's/timeout_commit = "5s"/timeout_commit = "1s"/g' $CHAINDIR/$CHAINID/config/config.toml
sed -i '' 's/timeout_propose = "3s"/timeout_propose = "1s"/g' $CHAINDIR/$CHAINID/config/config.toml
sed -i '' 's/index_all_keys = false/index_all_keys = true/g' $CHAINDIR/$CHAINID/config/config.toml
# sed -i '' 's#index-events = \[\]#index-events = \["message.action","send_packet.packet_src_channel","send_packet.packet_sequence"\]#g' $CHAINDIR/$CHAINID/config/app.toml
# sed -i '' 's/error/debug/g' $CHAINDIR/$CHAINID/config/config.toml
# sed -i '' 's/info/debug/g' $CHAINDIR/$CHAINID/config/config.toml
sed -i '' 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"$RPC_PORT"'"#g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
sed -i '' 's#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"$P2P_PORT"'"#g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
sed -i '' 's#"localhost:6060"#"localhost:'"$PROF_PORT"'"#g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
sed -i '' 's/timeout_commit = "5s"/timeout_commit = "1s"/g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
sed -i '' 's/timeout_propose = "3s"/timeout_propose = "1s"/g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
sed -i '' 's/index_all_keys = false/index_all_keys = true/g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
# sed -i '' 's#index-events = \[\]#index-events = \["message.action","send_packet.packet_src_channel","send_packet.packet_sequence"\]#g' $CHAIN_DIR/$CHAIN_ID/config/app.toml
# sed -i '' 's/error/debug/g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
# sed -i '' 's/info/debug/g' $CHAIN_DIR/$CHAIN_ID/config/config.toml
fi

# Start gaia
$BINARY --home $CHAINDIR/$CHAINID start --trace --pruning=nothing --grpc.address="0.0.0.0:$GRPCPORT" > $CHAINDIR/$CHAINID.log 2>&1 &
$BINARY --home $CHAIN_DIR/$CHAIN_ID start --trace --pruning=nothing --grpc.address="0.0.0.0:$GRPC_PORT" > $CHAIN_DIR/$CHAIN_ID.log 2>&1 &

# Start gaia with trace
# $BINARY --home $CHAINDIR/$CHAINID start --trace --pruning=nothing --grpc.address="0.0.0.0:$GRPCPORT" > $CHAINDIR/$CHAINID.log 2>&1 &
# $BINARY --home $CHAIN_DIR/$CHAIN_ID start --trace --pruning=nothing --grpc.address="0.0.0.0:$GRPC_PORT" > $CHAIN_DIR/$CHAIN_ID.log 2>&1 &

# Show validator's and user's balance
sleep 3
RPC_ADDR="tcp://localhost:$RPC_PORT"
$BINARY --node $RPC_ADDR query bank balances $VALIDATOR
$BINARY --node $RPC_ADDR query bank balances $USER

0 comments on commit 4a45567

Please sign in to comment.