2019-08-01 13:48:00 -07:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
#
|
|
|
|
# Delegate stake to a validator
|
|
|
|
#
|
|
|
|
set -e
|
|
|
|
|
|
|
|
here=$(dirname "$0")
|
|
|
|
# shellcheck source=multinode-demo/common.sh
|
|
|
|
source "$here"/common.sh
|
|
|
|
|
2020-02-15 11:53:52 -08:00
|
|
|
stake_sol=1 # default number of SOL to assign as stake (1 SOL)
|
2019-08-01 13:48:00 -07:00
|
|
|
url=http://127.0.0.1:8899 # default RPC url
|
|
|
|
|
|
|
|
usage() {
|
|
|
|
if [[ -n $1 ]]; then
|
|
|
|
echo "$*"
|
|
|
|
echo
|
|
|
|
fi
|
|
|
|
cat <<EOF
|
|
|
|
|
2020-02-15 11:53:52 -08:00
|
|
|
usage: $0 [OPTIONS] <SOL to stake ($stake_sol)>
|
2019-08-01 13:48:00 -07:00
|
|
|
|
|
|
|
Add stake to a validator
|
|
|
|
|
|
|
|
OPTIONS:
|
|
|
|
--url RPC_URL - RPC URL to the cluster ($url)
|
|
|
|
--label LABEL - Append the given label to the configuration files, useful when running
|
|
|
|
multiple validators in the same workspace
|
|
|
|
--no-airdrop - Do not attempt to airdrop the stake
|
|
|
|
--keypair FILE - Keypair to fund the stake from
|
2019-08-01 21:08:24 -07:00
|
|
|
--force - Override delegate-stake sanity checks
|
2020-11-26 19:20:56 -08:00
|
|
|
--vote-account - Path to vote-account keypair file
|
|
|
|
--stake-account - Path to stake-account keypair file
|
2019-08-01 13:48:00 -07:00
|
|
|
|
|
|
|
EOF
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
common_args=()
|
|
|
|
label=
|
|
|
|
airdrops_enabled=1
|
2019-08-01 21:08:24 -07:00
|
|
|
maybe_force=
|
2020-05-19 20:07:30 -07:00
|
|
|
keypair=
|
2019-08-01 13:48:00 -07:00
|
|
|
|
|
|
|
positional_args=()
|
|
|
|
while [[ -n $1 ]]; do
|
|
|
|
if [[ ${1:0:1} = - ]]; then
|
|
|
|
if [[ $1 = --label ]]; then
|
|
|
|
label="-$2"
|
|
|
|
shift 2
|
|
|
|
elif [[ $1 = --keypair || $1 = -k ]]; then
|
2020-05-19 20:07:30 -07:00
|
|
|
keypair="$2"
|
2019-08-01 13:48:00 -07:00
|
|
|
shift 2
|
2019-08-01 21:08:24 -07:00
|
|
|
elif [[ $1 = --force ]]; then
|
|
|
|
maybe_force=--force
|
2019-08-01 22:43:09 -07:00
|
|
|
shift 1
|
2019-08-01 13:48:00 -07:00
|
|
|
elif [[ $1 = --url || $1 = -u ]]; then
|
|
|
|
url=$2
|
|
|
|
shift 2
|
2020-11-26 19:20:56 -08:00
|
|
|
elif [[ $1 = --vote-account ]]; then
|
|
|
|
vote_account=$2
|
|
|
|
shift 2
|
|
|
|
elif [[ $1 = --stake-account ]]; then
|
|
|
|
stake_account=$2
|
|
|
|
shift 2
|
2019-08-01 13:48:00 -07:00
|
|
|
elif [[ $1 = --no-airdrop ]]; then
|
|
|
|
airdrops_enabled=0
|
|
|
|
shift
|
|
|
|
elif [[ $1 = -h ]]; then
|
|
|
|
usage "$@"
|
|
|
|
else
|
|
|
|
echo "Unknown argument: $1"
|
2020-03-06 19:08:20 -08:00
|
|
|
usage
|
2019-08-01 13:48:00 -07:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
positional_args+=("$1")
|
|
|
|
shift
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
common_args+=(--url "$url")
|
|
|
|
|
|
|
|
if [[ ${#positional_args[@]} -gt 1 ]]; then
|
|
|
|
usage "$@"
|
|
|
|
fi
|
|
|
|
if [[ -n ${positional_args[0]} ]]; then
|
2020-02-15 11:53:52 -08:00
|
|
|
stake_sol=${positional_args[0]}
|
2019-08-01 13:48:00 -07:00
|
|
|
fi
|
|
|
|
|
2020-11-26 19:20:56 -08:00
|
|
|
VALIDATOR_KEYS_DIR=$SOLANA_CONFIG_DIR/validator$label
|
|
|
|
vote_account="${vote_account:-$VALIDATOR_KEYS_DIR/vote-account.json}"
|
|
|
|
stake_account="${stake_account:-$VALIDATOR_KEYS_DIR/stake-account.json}"
|
2019-08-01 13:48:00 -07:00
|
|
|
|
2020-03-13 11:41:18 -07:00
|
|
|
if [[ ! -f $vote_account ]]; then
|
|
|
|
echo "Error: $vote_account not found"
|
2019-08-01 13:48:00 -07:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if ((airdrops_enabled)); then
|
2020-05-19 20:07:30 -07:00
|
|
|
if [[ -z $keypair ]]; then
|
|
|
|
echo "--keypair argument must be provided"
|
|
|
|
exit 1
|
|
|
|
fi
|
2021-03-22 11:10:44 -07:00
|
|
|
$solana_cli \
|
|
|
|
"${common_args[@]}" --keypair "$SOLANA_CONFIG_DIR/faucet.json" \
|
|
|
|
transfer --allow-unfunded-recipient "$keypair" "$stake_sol"
|
2020-05-19 20:07:30 -07:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -n $keypair ]]; then
|
|
|
|
common_args+=(--keypair "$keypair")
|
2019-08-01 13:48:00 -07:00
|
|
|
fi
|
|
|
|
|
2020-06-11 10:13:04 -07:00
|
|
|
if ! [[ -f "$stake_account" ]]; then
|
|
|
|
$solana_keygen new --no-passphrase -so "$stake_account"
|
|
|
|
else
|
|
|
|
echo "$stake_account already exists! Using it"
|
|
|
|
fi
|
2019-08-01 13:48:00 -07:00
|
|
|
|
|
|
|
set -x
|
2019-08-22 13:51:16 -07:00
|
|
|
$solana_cli "${common_args[@]}" \
|
2020-03-13 11:41:18 -07:00
|
|
|
vote-account "$vote_account"
|
2019-08-22 13:51:16 -07:00
|
|
|
$solana_cli "${common_args[@]}" \
|
2020-03-13 11:41:18 -07:00
|
|
|
create-stake-account "$stake_account" "$stake_sol"
|
2019-09-29 21:18:15 -07:00
|
|
|
$solana_cli "${common_args[@]}" \
|
2020-03-13 11:41:18 -07:00
|
|
|
delegate-stake $maybe_force "$stake_account" "$vote_account"
|
|
|
|
$solana_cli "${common_args[@]}" stakes "$stake_account"
|