118 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
#
 | 
						|
# Delegate stake to a validator
 | 
						|
#
 | 
						|
set -e
 | 
						|
 | 
						|
here=$(dirname "$0")
 | 
						|
# shellcheck source=multinode-demo/common.sh
 | 
						|
source "$here"/common.sh
 | 
						|
 | 
						|
stake_sol=1   # default number of SOL to assign as stake (1 SOL)
 | 
						|
url=http://127.0.0.1:8899   # default RPC url
 | 
						|
 | 
						|
usage() {
 | 
						|
  if [[ -n $1 ]]; then
 | 
						|
    echo "$*"
 | 
						|
    echo
 | 
						|
  fi
 | 
						|
  cat <<EOF
 | 
						|
 | 
						|
usage: $0 [OPTIONS] <SOL to stake ($stake_sol)>
 | 
						|
 | 
						|
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
 | 
						|
  --force                   - Override delegate-stake sanity checks
 | 
						|
 | 
						|
EOF
 | 
						|
  exit 1
 | 
						|
}
 | 
						|
 | 
						|
common_args=()
 | 
						|
label=
 | 
						|
airdrops_enabled=1
 | 
						|
maybe_force=
 | 
						|
keypair=
 | 
						|
 | 
						|
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
 | 
						|
      keypair="$2"
 | 
						|
      shift 2
 | 
						|
    elif [[ $1 = --force ]]; then
 | 
						|
      maybe_force=--force
 | 
						|
      shift 1
 | 
						|
    elif [[ $1 = --url || $1 = -u ]]; then
 | 
						|
      url=$2
 | 
						|
      shift 2
 | 
						|
    elif [[ $1 = --no-airdrop ]]; then
 | 
						|
      airdrops_enabled=0
 | 
						|
      shift
 | 
						|
    elif [[ $1 = -h ]]; then
 | 
						|
      usage "$@"
 | 
						|
    else
 | 
						|
      echo "Unknown argument: $1"
 | 
						|
      usage
 | 
						|
      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
 | 
						|
  stake_sol=${positional_args[0]}
 | 
						|
fi
 | 
						|
 | 
						|
config_dir="$SOLANA_CONFIG_DIR/validator$label"
 | 
						|
vote_account="$config_dir"/vote-account.json
 | 
						|
stake_account="$config_dir"/stake-account.json
 | 
						|
 | 
						|
if [[ ! -f $vote_account ]]; then
 | 
						|
  echo "Error: $vote_account not found"
 | 
						|
  exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if ((airdrops_enabled)); then
 | 
						|
  if [[ -z $keypair ]]; then
 | 
						|
    echo "--keypair argument must be provided"
 | 
						|
    exit 1
 | 
						|
  fi
 | 
						|
  $solana_cli "${common_args[@]}" --keypair "$SOLANA_CONFIG_DIR/faucet.json" transfer "$keypair" "$stake_sol"
 | 
						|
fi
 | 
						|
 | 
						|
if [[ -n $keypair ]]; then
 | 
						|
  common_args+=(--keypair "$keypair")
 | 
						|
fi
 | 
						|
 | 
						|
if ! [[ -f "$stake_account" ]]; then
 | 
						|
  $solana_keygen new --no-passphrase -so "$stake_account"
 | 
						|
else
 | 
						|
  echo "$stake_account already exists! Using it"
 | 
						|
fi
 | 
						|
 | 
						|
set -x
 | 
						|
$solana_cli "${common_args[@]}" \
 | 
						|
  vote-account "$vote_account"
 | 
						|
$solana_cli "${common_args[@]}" \
 | 
						|
  create-stake-account "$stake_account" "$stake_sol"
 | 
						|
$solana_cli "${common_args[@]}" \
 | 
						|
  delegate-stake $maybe_force "$stake_account" "$vote_account"
 | 
						|
$solana_cli "${common_args[@]}" stakes "$stake_account"
 |