Skip to content

Commit 2a7c53c

Browse files
committed
proper config loading
1 parent caff496 commit 2a7c53c

File tree

2 files changed

+46
-41
lines changed

2 files changed

+46
-41
lines changed

nimbus_verified_proxy/libverifproxy/example.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ int main() {
3838
"{"
3939
"\"Eth2Network\": \"mainnet\","
4040
"\"TrustedBlockRoot\": \"0x6e2b0d0725949a5ce977b61646cc4353a8c789f6c2b8fc8bfc98fcfdb99b3d0\","
41-
"\"Web3Url\": \"https://eth.llamarpc.com\","
41+
"\"BackendUrl\": \"https://eth.llamarpc.com\","
4242
"\"LogLevel\": \"info\""
4343
"}";
4444
startVerifProxy(ctx, jsonConfig, onStart);

nimbus_verified_proxy/libverifproxy/verifproxy.nim

Lines changed: 45 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import
99
algorithm,
1010
json_serialization,
1111
chronos,
12-
std/[atomics, locks, json],
13-
beacon_chain/spec/digest,
12+
eth/net/nat,
13+
std/[atomics, locks, json, net],
14+
beacon_chain/spec/[digest, network],
15+
beacon_chain/nimbus_binary_common,
1416
../engine/types,
1517
../engine/engine,
1618
../nimbus_verified_proxy,
@@ -144,20 +146,50 @@ proc pollAsyncTaskEngine(ctx: ptr Context) {.exported.} =
144146
if ctx.tasks.len > 0:
145147
poll()
146148

149+
150+
proc load(T: type VerifiedProxyConf, configJson: string): T {.raises: [CatchableError, ValueError]}=
151+
let jsonNode = parseJson($configJson)
152+
153+
let
154+
eth2Network = some(jsonNode.getOrDefault("Eth2Network").getStr("mainnet"))
155+
trustedBlockRoot =
156+
if jsonNode.contains("TrustedBlockRoot"):
157+
Eth2Digest.fromHex(jsonNode["TrustedBlockRoot"].getStr())
158+
else:
159+
raise newException(ValueError, "`TrustedBlockRoot` not specified in JSON config")
160+
backendUrl =
161+
if jsonNode.contains("BackendUrl"):
162+
parseCmdArg(Web3Url, jsonNode["BackendUrl"].getStr())
163+
else:
164+
raise newException(ValueError, "`BackendUrl` not specified in JSON config")
165+
logLevel = jsonNode.getOrDefault("LogLevel").getStr("INFO")
166+
defaultListenAddress = (static parseIpAddress("0.0.0.0"))
167+
168+
return VerifiedProxyConf(
169+
listenAddress: some(defaultListenAddress),
170+
eth2Network: eth2Network,
171+
trustedBlockRoot: trustedBlockRoot,
172+
backendUrl: backendUrl,
173+
logLevel: logLevel,
174+
maxPeers: 160,
175+
nat: NatConfig(hasExtIp: false, nat: NatAny),
176+
logStdout: StdoutLogKind.Auto,
177+
dataDirFlag: none(OutDir),
178+
tcpPort: Port(defaultEth2TcpPort),
179+
udpPort: Port(defaultEth2TcpPort),
180+
agentString: "nimbus",
181+
discv5Enabled: true,
182+
)
183+
147184
proc run(ctx: ptr Context, configJson: string) {.async: (raises: [ValueError, CancelledError, CatchableError]).} =
148185
try:
149186
initLib()
150187
except Exception as err:
151188
raise newException(CancelledError, err.msg)
152189

153-
let jsonNode = parseJson($configJson)
190+
let config = VerifiedProxyConf.load($configJson)
154191

155-
let config = VerifiedProxyConf(
156-
eth2Network: some(jsonNode["Eth2Network"].getStr()),
157-
trustedBlockRoot: Eth2Digest.fromHex(jsonNode["TrustedBlockRoot"].getStr()),
158-
backendUrl: parseCmdArg(Web3Url, jsonNode["Web3Url"].getStr()),
159-
logLevel: jsonNode["LogLevel"].getStr(),
160-
)
192+
echo $config
161193

162194
let
163195
engineConf = RpcVerificationEngineConf(
@@ -174,6 +206,7 @@ proc run(ctx: ptr Context, configJson: string) {.async: (raises: [ValueError, Ca
174206
# the backend only needs the url to connect to
175207
engine.backend = jsonRpcClient.getEthApiBackend()
176208

209+
# inject the frontend into c context
177210
ctx.frontend = engine.frontend
178211

179212
# start frontend and backend
@@ -184,38 +217,10 @@ proc run(ctx: ptr Context, configJson: string) {.async: (raises: [ValueError, Ca
184217
await startLightClient(config, engine)
185218

186219
proc startVerifProxy(ctx: ptr Context, configJson: cstring, cb: CallBackProc) {.exported.} =
187-
let task = createTask(cb)
188-
189220
try:
190-
ctx.lock.acquire()
191-
ctx.tasks.add(task)
192-
finally:
193-
ctx.lock.release()
194-
195-
let fut = run(ctx,$configJson)
196-
197-
fut.addCallback proc (_: pointer) {.gcsafe.} =
198-
try:
199-
ctx.lock.acquire()
200-
if fut.cancelled:
201-
task.response = "{\"error\": \"cancelled\"}"
202-
task.finished = true
203-
task.status = -2
204-
elif fut.failed():
205-
task.response = "{\"error\": \"failed\"}"
206-
task.finished = true
207-
task.status = -1
208-
else:
209-
try:
210-
task.response = "{\"result\": \"finished\"}"
211-
task.status = 0
212-
except CatchableError as e:
213-
task.response = "{\"error\": \"" & e.msg & "\"}"
214-
task.status = -1
215-
finally:
216-
task.finished = true
217-
finally:
218-
ctx.lock.release()
221+
waitFor run(ctx, $configJson)
222+
except:
223+
quit(QuitFailure)
219224

220225
proc stopVerifProxy*(ctx: ptr Context) {.exported.} =
221226
ctx.lock.acquire()

0 commit comments

Comments
 (0)