@@ -11,6 +11,7 @@ wallet_password=""
11
11
new_user_setup=0
12
12
new_network=0
13
13
network_status_url=" "
14
+ container_id=" "
14
15
15
16
voi_logo="[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m
16
17
[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m[38;2;255;255;255mM[0m
@@ -222,12 +223,31 @@ wait_for_stack_to_be_ready() {
222
223
display_banner "Stack is ready!"
223
224
}
224
225
226
+ function get_container_id() {
227
+ case ${VOINETWORK_PROFILE} in
228
+ "relay")
229
+ container_id=$(docker ps -q -f name=voinetwork_relay)
230
+ ;;
231
+ "developer")
232
+ container_id=$(docker ps -q -f name=voinetwork_developer)
233
+ ;;
234
+ "archiver")
235
+ container_id=$(docker ps -q -f name=voinetwork_archiver)
236
+ ;;
237
+ "participation")
238
+ container_id=$(docker ps -q -f name=voinetwork_algod)
239
+ ;;
240
+ *)
241
+ abort "Invalid profile. Exiting the program."
242
+ ;;
243
+ esac
244
+ }
245
+
225
246
verify_node_is_running() {
226
247
local retries=0
227
248
local max_retries=5
228
249
229
250
while [[ $retries -lt $max_retries ]]; do
230
- container_id=$(execute_sudo "docker ps -q -f name=voinetwork_algod")
231
251
if [[ -n "$container_id" ]]; then
232
252
execute_sudo "docker exec ${container_id} bash -c \"curl -sS http://localhost:8080/health > /dev/null\""
233
253
local exit_code=$?
@@ -309,6 +329,7 @@ catchup_node() {
309
329
get_node_status
310
330
sleep 5
311
331
done
332
+ echo ""
312
333
display_banner "Caught up with the network!"
313
334
}
314
335
@@ -475,6 +496,37 @@ generate_new_key() {
475
496
execute_interactive_docker_command " /node/bin/goal account addpartkey -a ${address} --roundFirstValid ${start_block} --roundLastValid ${end_block} "
476
497
}
477
498
499
+ ensure_accounts_are_offline() {
500
+ account_addresses=$( get_account_addresses)
501
+
502
+ if [[ -z ${account_addresses} ]]; then
503
+ return
504
+ fi
505
+
506
+ if [[ ${container_id} == " " ]]; then
507
+ echo " Skipping account offline check as container not found."
508
+ return
509
+ fi
510
+
511
+ display_banner " Migrating to new network. Ensuring all accounts are offline."
512
+
513
+ echo " Checking if accounts are online and have a balance of 1,000 microVoi or more."
514
+ echo " Accounts with a balance of 1,000 microVoi or more will be taken offline."
515
+
516
+ for account in ${account_addresses} ; do
517
+ local balance
518
+ balance=$( get_account_balance " ${account} " )
519
+ account_status=$( execute_docker_command " /node/bin/goal account dump -a ${account} " | jq -r .onl)
520
+
521
+ if [[ ${balance} -ge 1000 && ${account_status} -eq 1 ]]; then
522
+ echo " "
523
+ echo " Balance is ${balance} which is above 1,000 microVoi. Taking account ${account} offline."
524
+ execute_interactive_docker_command " /node/bin/goal account changeonlinestatus -a ${account} -o=false"
525
+ echo " Account ${account} is now offline! "
526
+ fi
527
+ done
528
+ }
529
+
478
530
generate_participation_key() {
479
531
display_banner " Generating/Updating participation key"
480
532
@@ -504,12 +556,12 @@ generate_participation_key() {
504
556
return 1
505
557
fi
506
558
507
- local balance
508
- balance=$( get_account_balance " ${account} " )
509
-
510
559
if [[ ${account_addresses_length} -eq 1 ]]; then
511
560
generate_new_key " ${account} "
512
561
else
562
+ local balance
563
+ balance=$( get_account_balance " ${account} " )
564
+
513
565
if [[ ${balance} -ge 1000 ]]; then
514
566
echo " Balance is equal/above 1,000 microVoi. Generating participation key for account ${account} "
515
567
generate_new_key " ${account} "
@@ -524,6 +576,7 @@ generate_participation_key() {
524
576
else
525
577
echo " Balance is below 1,000 microVoi. Skipping participation key generation for account ${account} "
526
578
fi
579
+ echo " "
527
580
fi
528
581
elif [[ $(( active_key_last_valid_round- last_committed_block)) -le 417104 ]]; then
529
582
local existing_expiration_date
@@ -625,10 +678,10 @@ joined_network_instructions() {
625
678
echo " Account setup skipped. Multiple accounts detected in your wallet."
626
679
else
627
680
echo " Account setup skipped. Detected existing account with address: ${account_addr} "
628
- fi
629
681
630
- echo " To see network participation status use ${HOME} /voi/bin/get-participation-status ${account_addr} "
631
- echo " To go online use ${HOME} /voi/bin/go-online ${account_addr} "
682
+ echo " To see network participation status use ${HOME} /voi/bin/get-participation-status ${account_addr} "
683
+ echo " To go online use ${HOME} /voi/bin/go-online ${account_addr} "
684
+ fi
632
685
fi
633
686
634
687
# Display information informing the user that the network will catch up in the background if used in non-interactive mode
@@ -676,10 +729,23 @@ change_account_online_status() {
676
729
677
730
join_as_new_user () {
678
731
new_user_setup=1
732
+ local account_addresses
733
+ account_addresses=$( get_account_addresses)
734
+
679
735
display_banner " Joining network"
680
736
681
737
generate_participation_key
682
738
739
+ # If there are multiple accounts, we don't want to go online automatically, unless previously done
740
+ # as part of participation key generation.
741
+ if [[ $( echo " $account_addresses " | wc -l) -gt 1 ]]; then
742
+ display_banner " Welcome to Voi!"
743
+
744
+ joined_network_instructions
745
+
746
+ exit
747
+ fi
748
+
683
749
busy_wait_until_balance_is_sufficient
684
750
685
751
change_account_online_status " ${account} "
@@ -1084,6 +1150,11 @@ fi
1084
1150
1085
1151
check_minimum_requirements
1086
1152
1153
+ if [[ ${new_network} -eq 1 ]]; then
1154
+ get_container_id
1155
+ ensure_accounts_are_offline
1156
+ fi
1157
+
1087
1158
get_telemetry_name
1088
1159
set_telemetry_name
1089
1160
@@ -1149,6 +1220,7 @@ start_stack
1149
1220
wait_for_stack_to_be_ready
1150
1221
1151
1222
if [[ ${VOINETWORK_PROFILE} == " participation" ]]; then
1223
+ get_container_id
1152
1224
verify_node_is_running
1153
1225
fi
1154
1226
@@ -1219,6 +1291,7 @@ if [[ ${skip_account_setup} -eq 0 || ${new_network} -eq 1 ]]; then
1219
1291
else
1220
1292
generate_participation_key
1221
1293
participation_key_generation_status=$?
1294
+
1222
1295
# # Catch cases where an install was aborted / user didn't succeed in going online
1223
1296
# # This can happen where there are no part keys present on the machine, or where there's multiple part keys but
1224
1297
# # no key is active.
0 commit comments