-
Notifications
You must be signed in to change notification settings - Fork 1
/
excc_tmux_simnet_setup.sh
executable file
·287 lines (251 loc) · 9.35 KB
/
excc_tmux_simnet_setup.sh
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
#!/usr/bin/env bash
#
# Copyright (c) 2020 The Decred developers
# Use of this source code is governed by an ISC
# license that can be found in the LICENSE file.
#
# Tmux script to create 2 exccd nodes (named exccd1 and exccd2) connected in series
# along with 2 wallets (named wallet1 and wallet2) configured such that wallet1
# is connected via JSON-RPC to exccd1 and, likewise, wallet2 to exccd2.
#
# Both wallet1 and wallet2 use the same seed, however, wallet1 is configured to
# automatically buy tickets and vote, while wallet2 is only configured to vote.
#
# The primary exccd node (exccd1) is configured as the primary mining node.
#
# Network layout:
# exccd1 (p2p: localhost:19555) <-- exccd2 (p2p: localhost:19565)
#
# RPC layout:
# exccd1 (JSON-RPC: localhost:19556)
# ^--- wallet1 (JSON-RPC: locahost:19557, gRPC: localhost:19558)
# exccd2 (JSON-RPC: localhost:19566)
# ^--- wallet2 (JSON-RPC: locahost:19567, gRPC: None)
set -e # exit script on any error
# set -x # show all commands run
SESSION="exccd-simnet-nodes"
NODES_ROOT=${EXCC_SIMNET_ROOT:-${HOME}/exccdsimnetnodes}
RPCUSER="USER"
RPCPASS="PASS"
WALLET_SEED="b280922d2cffda44648346412c5ec97f429938105003730414f10b01e1402eac"
WALLET_MINING_ADDR="Ssde8UGkdTGwc8Ab6xcn1WBNcvec3dtGSKe" # NOTE: This must be changed if the seed is changed.
WALLET_XFER_ADDR="Ssde8UGkdTGwc8Ab6xcn1WBNcvec3dtGSKe" # same as above
WALLET_CREATE_CONFIG="y
n
y
${WALLET_SEED}
"
if [ -d "${NODES_ROOT}" ] ; then
rm -R "${NODES_ROOT}"
fi
PRIMARY_EXCCD_NAME=exccd1
SECONDARY_EXCCD_NAME=exccd2
PRIMARY_WALLET_NAME=wallet1
SECONDARY_WALLET_NAME=wallet2
mkdir -p "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}"
mkdir -p "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}"
mkdir -p "${NODES_ROOT}/${PRIMARY_WALLET_NAME}"
mkdir -p "${NODES_ROOT}/${SECONDARY_WALLET_NAME}"
cat > "${NODES_ROOT}/exccd.conf" <<EOF
rpcuser=${RPCUSER}
rpcpass=${RPCPASS}
simnet=1
logdir=./log
datadir=./data
debuglevel=TXMP=debug,MINR=debug
txindex=1
EOF
cat > "${NODES_ROOT}/exccctl.conf" <<EOF
rpcuser=${RPCUSER}
rpcpass=${RPCPASS}
simnet=1
EOF
cat > "${NODES_ROOT}/wallet.conf" <<EOF
username=${RPCUSER}
password=${RPCPASS}
simnet=1
logdir=./log
appdata=./data
pass=123
enablevoting=1
EOF
cd ${NODES_ROOT} && tmux -2 new-session -d -s $SESSION
################################################################################
# Setup the primary exccd node
################################################################################
PRIMARY_EXCCD_P2P=127.0.0.1:19555
PRIMARY_EXCCD_RPC=127.0.0.1:19556
tmux rename-window -t $SESSION:0 "${PRIMARY_EXCCD_NAME}"
tmux split-window -v
tmux select-pane -t 0
tmux send-keys "cd ${NODES_ROOT}/${PRIMARY_EXCCD_NAME}" C-m
tmux send-keys "exccd -C ../exccd.conf --listen ${PRIMARY_EXCCD_P2P} --miningaddr=${WALLET_MINING_ADDR}" C-m
tmux resize-pane -D 15
tmux select-pane -t 1
tmux send-keys "cd ${NODES_ROOT}/${PRIMARY_EXCCD_NAME}" C-m
cat > "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}/ctl" <<EOF
#!/usr/bin/env bash
exccctl -C ../exccctl.conf "\$@"
EOF
chmod +x "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}/ctl"
# Script to mine a specified number of blocks with a delay in between them
# Defaults to 1 block
cat > "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}/mine" <<EOF
#!/usr/bin/env bash
NUM=1
case \$1 in
''|*[!0-9]*) ;;
*) NUM=\$1 ;;
esac
for i in \$(seq \$NUM) ; do
./ctl generate 1
sleep 1
done
EOF
chmod +x "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}/mine"
sleep 3
tmux send-keys "./ctl generate 32" C-m
################################################################################
# Setup the primary wallet
################################################################################
PRIMARY_WALLET_RPC=127.0.0.1:19557
PRIMARY_WALLET_GRPC=127.0.0.1:19558
tmux new-window -t $SESSION:1 -n "${PRIMARY_WALLET_NAME}"
tmux split-window -v
tmux select-pane -t 0
tmux resize-pane -D 15
tmux send-keys "cd ${NODES_ROOT}/${PRIMARY_WALLET_NAME}" C-m
tmux send-keys "echo \"${WALLET_CREATE_CONFIG}\" | exccwallet -C ../wallet.conf --create; tmux wait-for -S ${PRIMARY_WALLET_NAME}" C-m
tmux wait-for ${PRIMARY_WALLET_NAME}
tmux send-keys "exccwallet -C ../wallet.conf --rpclisten ${PRIMARY_WALLET_RPC} --grpclisten ${PRIMARY_WALLET_GRPC} --enableticketbuyer --ticketbuyer.limit=10" C-m
tmux select-pane -t 1
tmux send-keys "cd ${NODES_ROOT}/${PRIMARY_WALLET_NAME}" C-m
cat > "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/ctl" <<EOF
#!/usr/bin/env bash
exccctl -C ../exccctl.conf --wallet -c ./data/rpc.cert "\$@"
EOF
chmod +x "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/ctl"
# Script to manually purchase tickets
cat > "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/tickets" <<EOF
#!/usr/bin/env bash
NUM=1
case \$1 in
''|*[!0-9]*) ;;
*) NUM=\$1 ;;
esac
./ctl purchaseticket default 999999 1 \`./ctl getnewaddress\` \$NUM
EOF
chmod +x "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/tickets"
# Script to transfer funds with a specified fee rate
# Defaults to a fee rate of 0.0001
cat > "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/xfer" <<EOF
#!/usr/bin/env bash
DEFAULTFEE=0.0001
FEE=\$DEFAULTFEE
case \$1 in
''|*[!0-9\.]*) ;;
*) FEE=\$1 ;;
esac
if [ "\$FEE" != "\$DEFAULTFEE" ]; then
./ctl settxfee \$FEE
fi
./ctl sendtoaddress ${WALLET_XFER_ADDR} 0.1
if [ "\$FEE" != "\$DEFAULTFEE" ]; then
./ctl settxfee \$DEFAULTFEE
fi
EOF
chmod +x "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/xfer"
sleep 1
################################################################################
# Setup the serially connected secondary exccd node
################################################################################
SECONDARY_EXCCD_P2P=127.0.0.1:19565
SECONDARY_EXCCD_RPC=127.0.0.1:19566
cat > "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}/ctl" <<EOF
#!/usr/bin/env bash
exccctl -C ../exccctl.conf -s ${SECONDARY_EXCCD_RPC} "\$@"
EOF
chmod +x "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}/ctl"
cp "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}/mine" "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}/"
chmod +x "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}/mine"
# Script to force reorg
cat > "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}/reorg" <<EOF
#!/usr/bin/env bash
./ctl node remove ${PRIMARY_EXCCD_P2P}
./mine
cd "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}"
./mine 2
cd "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}"
./ctl node connect ${PRIMARY_EXCCD_P2P} perm
EOF
chmod +x "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}/reorg"
tmux new-window -t $SESSION:2 -n "${SECONDARY_EXCCD_NAME}"
tmux split-window -v
tmux select-pane -t 0
tmux resize-pane -D 15
tmux send-keys "cd ${NODES_ROOT}/${SECONDARY_EXCCD_NAME}" C-m
tmux send-keys "exccd -C ../exccd.conf --listen ${SECONDARY_EXCCD_P2P} --rpclisten ${SECONDARY_EXCCD_RPC} --connect ${PRIMARY_EXCCD_P2P} --miningaddr=${WALLET_MINING_ADDR}" C-m
tmux select-pane -t 1
tmux send-keys "cd ${NODES_ROOT}/${SECONDARY_EXCCD_NAME}" C-m
################################################################################
# Setup the secondary wallet
################################################################################
SECONDARY_WALLET_RPC=127.0.0.1:19567
tmux new-window -t $SESSION:3 -n "${SECONDARY_WALLET_NAME}"
tmux split-window -v
tmux select-pane -t 0
tmux resize-pane -D 15
tmux send-keys "cd ${NODES_ROOT}/${SECONDARY_WALLET_NAME}" C-m
tmux send-keys "echo \"${WALLET_CREATE_CONFIG}\" | exccwallet -C ../wallet.conf --create; tmux wait-for -S ${SECONDARY_WALLET_NAME}" C-m
tmux wait-for ${SECONDARY_WALLET_NAME}
tmux send-keys "exccwallet -C ../wallet.conf --rpcconnect=${SECONDARY_EXCCD_RPC} --rpclisten=${SECONDARY_WALLET_RPC} --nogrpc" C-m
tmux select-pane -t 1
tmux send-keys "cd ${NODES_ROOT}/${SECONDARY_WALLET_NAME}" C-m
cat > "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/ctl" <<EOF
#!/usr/bin/env bash
exccctl -C ../exccctl.conf -c ./data/rpc.cert -s ${SECONDARY_WALLET_RPC} "\$@"
EOF
chmod +x "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/ctl"
cp "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/tickets" "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/"
chmod +x "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/tickets"
cp "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/xfer" "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/"
chmod +x "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/xfer"
sleep 1
################################################################################
# Setup helper script to stop everything
################################################################################
cat > "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}/stopall" <<EOF
#!/usr/bin/env bash
function countdown {
secs=\$1
msg=\$2
while [ \$secs -gt 0 ]; do
echo -ne "Seconds \$msg: \$secs\033[0K\r"
sleep 1
: \$((secs--))
done
}
cd "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}"
./ctl stop 2>/dev/null
cd "${NODES_ROOT}/${PRIMARY_WALLET_NAME}"
./ctl stop 2>/dev/null
cd "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}"
./ctl stop 2>/dev/null
cd "${NODES_ROOT}/${SECONDARY_WALLET_NAME}"
./ctl stop 2>/dev/null
DELAY=3
countdown \$DELAY "until shutdown"
tmux kill-session -t $SESSION
EOF
cp "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}/stopall" "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}/"
cp "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}/stopall" "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/"
cp "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}/stopall" "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/"
chmod +x "${NODES_ROOT}/${PRIMARY_EXCCD_NAME}/stopall"
chmod +x "${NODES_ROOT}/${SECONDARY_EXCCD_NAME}/stopall"
chmod +x "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/stopall"
chmod +x "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/stopall"
################################################################################
# Attach
################################################################################
tmux select-window -t $SESSION:0
tmux attach-session -t $SESSION