forked from abklabs/svmkit-examples
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstake
executable file
·96 lines (69 loc) · 2.81 KB
/
stake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/env ../bin/opsh
lib::import ssh
[[ $# -eq 1 ]] || log::fatal "usage: $0 <statedir>"
STATEDIR=$1
shift
umask 077
mkdir -p "$STATEDIR"
log::info "storing SPE state inside '$STATEDIR'..."
cd "$STATEDIR" || log::fatal "couldn't enter state directory '$STATEDIR'!"
SPEINFO=speInfo
log::info "dumping SPE info..."
pulumi stack output --show-secrets speInfo >"$SPEINFO"
get() {
jq --exit-status -r "$@" <"$SPEINFO" || log::fatal "failed to get info for key $*"
}
ssh::begin
ssh::config <<EOF
Host *
UserKnownHostsFile /dev/null
StrictHostKeyChecking off
EOF
log::info "loading up authentication information..."
log::info "adding key for bootstrap node..."
get .bootstrap.connection.private_key | ssh::key::add
NODECOUNT=$(get '.otherValidators | length - 1')
NODEINDICES=$(seq 0 "$NODECOUNT")
log::info "found $NODECOUNT non-bootstrap nodes..."
for i in $NODEINDICES; do
log::info "adding key for validator node $i..."
get ".otherValidators[$i].connection.private_key" | ssh::key::add
done
ssh::background::run -L 8899:localhost:8899 "$(get .bootstrap.connection.user)@$(get .bootstrap.connection.host)"
SOLANA="solana -u http://localhost:8899"
log::info "getting validator state..."
$SOLANA validators
log::info "extracting treasury key..."
get ".treasuryKey.json" >treasuryKey.json
for i in $NODEINDICES; do
# This matches the name in pulumi
NODENAME="node$((i + 1))"
DIR="$NODENAME"
mkdir -p "$DIR"
if [[ ! -e "$DIR/vote-setup" ]]; then
get ".otherValidators[$i].validatorKey.json" >"$DIR/validatorKey.json"
get ".otherValidators[$i].voteAccountKey.json" >"$DIR/voteAccountKey.json"
log::info "creating $NODENAME's vote account..."
$SOLANA -k treasuryKey.json create-vote-account "$DIR/voteAccountKey.json" "$DIR/validatorKey.json" treasuryKey.json
log::info "funding $NODENAME's validator key..."
$SOLANA -k treasuryKey.json transfer --allow-unfunded-recipient "$DIR/validatorKey.json" 100
touch "$DIR/vote-setup"
else
log::info "skipping vote account setup and initial funding of $NODENAME..."
fi
if [[ ! -e "$NODENAME/stake-setup" ]]; then
log::info "staking and delegating to $NODENAME..."
solana-keygen new --no-passphrase -o "$NODENAME/stakeKey.json"
$SOLANA -k treasuryKey.json create-stake-account "$NODENAME/stakeKey.json" 150
$SOLANA -k treasuryKey.json delegate-stake "$NODENAME/stakeKey.json" "$NODENAME/voteAccountKey.json"
touch "$DIR/stake-setup"
else
log::info "skipping stake account setup and initial funding of $NODENAME..."
fi
done
log::info "checking validator stake warm-up for 60 seconds, printing every 15 seconds..."
for i in {1..4}; do
$SOLANA validators
sleep 15
log::info "elapsed $((i * 15)) seconds... (press Ctrl+C to exit)"
done