-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathgenerate_solvers.sh
executable file
·163 lines (138 loc) · 3.84 KB
/
generate_solvers.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
#!/usr/bin/env bash
## POSIX Bash implementation of realpath
## Copied and modified from https://github.com/mkropat/sh-realpath and https://github.com/AsymLabs/realpath-lib/
## Copyright (c) 2014 Michael Kropat - MIT License
## Copyright (c) 2013 Asymmetry Laboratories - MIT License
function realpath {
_resolve_symlinks "$(_canonicalize "$1")"
}
function _directory {
local out slsh
slsh=/
out="$1"
out="${out//$slsh$slsh/$slsh}"
if [ "$out" = / ]; then
echo /
return
fi
out="${out%/}"
case "$out" in
*/*)
out="${out%/*}"
;;
*)
out=.
;;
esac
if [ "$out" ]; then
printf '%s\n' "$out"
else
echo /
fi
}
function _file {
local out slsh
slsh=/
out="$1"
out="${out//$slsh$slsh/$slsh}"
if [ "$out" = / ]; then
echo /
return
fi
out="${out%/}"
out="${out##*/}"
printf '%s\n' "$out"
}
function _resolve_symlinks {
local path pattern context
while [ -L "$1" ]; do
context="$(_directory "$1")"
path="$(POSIXLY_CORRECT=y ls -ld -- "$1" 2>/dev/null)"
pattern='*'"$(_escape "$1")"' -> '
path="${path#$pattern}"
set -- "$(_canonicalize "$(_prepend_context "$context" "$path")")" "$@"
_assert_no_path_cycles "$@" || return 1
done
printf '%s\n' "$1"
}
function _escape {
local out
out=''
local -i i
for ((i=0; i < ${#1}; i+=1)); do
out+='\'"${1:$i:1}"
done
printf '%s\n' "$out"
}
function _prepend_context {
if [ "$1" = . ]; then
printf '%s\n' "$2"
else
case "$2" in
/* ) printf '%s\n' "$2" ;;
* ) printf '%s\n' "$1/$2" ;;
esac
fi
}
function _assert_no_path_cycles {
local target path
if [ $# -gt 16 ]; then
return 1
fi
target="$1"
shift
for path in "$@"; do
if [ "$path" = "$target" ]; then
return 1
fi
done
}
function _canonicalize {
local d f
if [ -d "$1" ]; then
(CDPATH= cd -P "$1" 2>/dev/null && pwd -P)
else
d="$(_directory "$1")"
f="$(_file "$1")"
(CDPATH= cd -P "$d" 2>/dev/null && printf '%s/%s\n' "$(pwd -P)" "$f")
fi
}
## end POSIX Bash implementation of realpath
set -Eeufo pipefail -o posix
declare project_root
project_root="$(_directory "$(_directory "$(realpath "${BASH_SOURCE[0]}")")")"
declare -r project_root
cd "$project_root"
echo "This script is mostly for Duncan's use in generating the file solvers.txt ." >&2
echo "You probably don't need to run this script." >&2
echo "The only reason you'd need to run this script is if the production or staging" >&2
echo 'chain worker mnemonics have been rotated.' >&2
echo '' >&2
. "$project_root"/sh/common.sh
. "$project_root"/sh/common_secrets.sh
declare -i num_production_addresses
num_production_addresses="$(get_secret intentWorkers limit.production)"
declare -r -i num_production_addresses
declare production_mnemonic
production_mnemonic="$(get_secret intentWorkers mnemonic.production)"
declare -r production_mnemonic
declare -i num_staging_addresses
num_staging_addresses="$(get_secret intentWorkers limit.staging)"
declare -r -i num_staging_addresses
declare staging_mnemonic
staging_mnemonic="$(get_secret intentWorkers mnemonic.staging)"
declare -r staging_mnemonic
declare -a solvers=()
declare privkey
declare solver
for (( i = 0 ; i < $num_production_addresses ; i++ )) ; do
privkey="$(cast wallet private-key "$production_mnemonic" "m/44'/60'/0'/0/$i")"
solver="$(cast wallet address "$privkey")"
solvers+=("$solver")
done
for (( i = 0 ; i < $num_staging_addresses ; i++ )) ; do
privkey="$(cast wallet private-key "$staging_mnemonic" "m/44'/60'/0'/0/$i")"
solver="$(cast wallet address "$privkey")"
solvers+=("$solver")
done
printf '%s\n' "${solvers[@]}"