Skip to content

Commit 282a929

Browse files
Merge branch 'master' into release/v0.37
2 parents 902732e + 62be30d commit 282a929

File tree

56 files changed

+1622
-1530
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1622
-1530
lines changed

Dockerfile.lightpushWithMix.compile

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ ARG NIM_COMMIT
77
ARG LOG_LEVEL=TRACE
88

99
# Get build tools and required header files
10-
RUN apk add --no-cache bash git build-base openssl-dev pcre-dev linux-headers curl jq
10+
RUN apk add --no-cache bash git build-base openssl-dev linux-headers curl jq
1111

1212
WORKDIR /app
1313
COPY . .
@@ -40,14 +40,12 @@ LABEL version="unknown"
4040
EXPOSE 30303 60000 8545
4141

4242
# Referenced in the binary
43-
RUN apk add --no-cache libgcc pcre-dev libpq-dev \
43+
RUN apk add --no-cache libgcc libpq-dev \
4444
wget \
4545
iproute2 \
4646
python3 \
4747
jq
4848

49-
# Fix for 'Error loading shared library libpcre.so.3: No such file or directory'
50-
RUN ln -s /usr/lib/libpcre.so /usr/lib/libpcre.so.3
5149

5250
COPY --from=nim-build /app/build/lightpush_publisher_mix /usr/bin/
5351
RUN chmod +x /usr/bin/lightpush_publisher_mix

apps/benchmarks/benchmarks.nim

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,9 @@ proc benchmark(
2828
iter = i, elapsed_ms = (getTime() - start_time).inMilliseconds
2929

3030
discard await manager.updateRoots()
31-
let proofResult = await manager.fetchMerkleProofElements()
32-
if proofResult.isErr():
33-
error "Failed to fetch Merkle proof", error = proofResult.error
34-
manager.merkleProofCache = proofResult.get()
31+
manager.merkleProofCache = (await manager.fetchMerkleProofElements()).valueOr:
32+
error "Failed to fetch Merkle proof", error = error
33+
quit(QuitFailure)
3534

3635
let epoch = default(Epoch)
3736
debug "epoch in bytes", epochHex = epoch.inHex()

apps/chat2/chat2.nim

Lines changed: 31 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -132,25 +132,14 @@ proc showChatPrompt(c: Chat) =
132132
except IOError:
133133
discard
134134

135-
proc getChatLine(c: Chat, msg: WakuMessage): Result[string, string] =
135+
proc getChatLine(payload: seq[byte]): string =
136136
# No payload encoding/encryption from Waku
137-
let
138-
pb = Chat2Message.init(msg.payload)
139-
chatLine =
140-
if pb.isOk:
141-
pb[].toString()
142-
else:
143-
string.fromBytes(msg.payload)
144-
return ok(chatline)
137+
let pb = Chat2Message.init(payload).valueOr:
138+
return string.fromBytes(payload)
139+
return $pb
145140

146141
proc printReceivedMessage(c: Chat, msg: WakuMessage) =
147-
let
148-
pb = Chat2Message.init(msg.payload)
149-
chatLine =
150-
if pb.isOk:
151-
pb[].toString()
152-
else:
153-
string.fromBytes(msg.payload)
142+
let chatLine = getChatLine(msg.payload)
154143
try:
155144
echo &"{chatLine}"
156145
except ValueError:
@@ -173,18 +162,16 @@ proc startMetricsServer(
173162
): Result[MetricsHttpServerRef, string] =
174163
info "Starting metrics HTTP server", serverIp = $serverIp, serverPort = $serverPort
175164

176-
let metricsServerRes = MetricsHttpServerRef.new($serverIp, serverPort)
177-
if metricsServerRes.isErr():
178-
return err("metrics HTTP server start failed: " & $metricsServerRes.error)
165+
let server = MetricsHttpServerRef.new($serverIp, serverPort).valueOr:
166+
return err("metrics HTTP server start failed: " & $error)
179167

180-
let server = metricsServerRes.value
181168
try:
182169
waitFor server.start()
183170
except CatchableError:
184171
return err("metrics HTTP server start failed: " & getCurrentExceptionMsg())
185172

186173
info "Metrics HTTP server started", serverIp = $serverIp, serverPort = $serverPort
187-
ok(metricsServerRes.value)
174+
ok(server)
188175

189176
proc publish(c: Chat, line: string) =
190177
# First create a Chat2Message protobuf with this line of text
@@ -202,19 +189,17 @@ proc publish(c: Chat, line: string) =
202189
version: 0,
203190
timestamp: getNanosecondTime(time),
204191
)
192+
205193
if not isNil(c.node.wakuRlnRelay):
206194
# for future version when we support more than one rln protected content topic,
207195
# we should check the message content topic as well
208-
let appendRes = c.node.wakuRlnRelay.appendRLNProof(message, float64(time))
209-
if appendRes.isErr():
196+
if c.node.wakuRlnRelay.appendRLNProof(message, float64(time)).isErr():
210197
debug "could not append rate limit proof to the message"
211198
else:
212199
debug "rate limit proof is appended to the message"
213-
let decodeRes = RateLimitProof.init(message.proof)
214-
if decodeRes.isErr():
200+
let proof = RateLimitProof.init(message.proof).valueOr:
215201
error "could not decode the RLN proof"
216-
217-
let proof = decodeRes.get()
202+
return
218203
# TODO move it to log after dogfooding
219204
let msgEpoch = fromEpoch(proof.epoch)
220205
if fromEpoch(c.node.wakuRlnRelay.lastEpoch) == msgEpoch:
@@ -438,16 +423,18 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
438423
let resolved = await dnsResolver.resolveTxt(domain)
439424
return resolved[0] # Use only first answer
440425

441-
var wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl.get(), resolver)
426+
let wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl.get(), resolver)
442427
if wakuDnsDiscovery.isOk:
443428
let discoveredPeers = await wakuDnsDiscovery.get().findPeers()
444429
if discoveredPeers.isOk:
445430
info "Connecting to discovered peers"
446431
discoveredNodes = discoveredPeers.get()
447432
echo "Discovered and connecting to " & $discoveredNodes
448433
waitFor chat.node.connectToNodes(discoveredNodes)
434+
else:
435+
warn "Failed to find peers via DNS discovery", error = discoveredPeers.error
449436
else:
450-
warn "Failed to init Waku DNS discovery"
437+
warn "Failed to init Waku DNS discovery", error = wakuDnsDiscovery.error
451438

452439
let peerInfo = node.switch.peerInfo
453440
let listenStr = $peerInfo.addrs[0] & "/p2p/" & $peerInfo.peerId
@@ -483,21 +470,19 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
483470
else:
484471
newSeq[byte](0)
485472

486-
let
487-
pb = Chat2Message.init(payload)
488-
chatLine =
489-
if pb.isOk:
490-
pb[].toString()
491-
else:
492-
string.fromBytes(payload)
473+
let chatLine = getChatLine(payload)
493474
echo &"{chatLine}"
494475
info "Hit store handler"
495476

496-
let queryRes = await node.query(
497-
StoreQueryRequest(contentTopics: @[chat.contentTopic]), storenode.get()
498-
)
499-
if queryRes.isOk():
500-
storeHandler(queryRes.value)
477+
block storeQueryBlock:
478+
let queryRes = (
479+
await node.query(
480+
StoreQueryRequest(contentTopics: @[chat.contentTopic]), storenode.get()
481+
)
482+
).valueOr:
483+
error "Store query failed", error = error
484+
break storeQueryBlock
485+
storeHandler(queryRes)
501486

502487
# NOTE Must be mounted after relay
503488
if conf.lightpushnode != "":
@@ -511,8 +496,9 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
511496
error = peerInfo.error
512497

513498
if conf.filternode != "":
514-
let peerInfo = parsePeerInfo(conf.filternode)
515-
if peerInfo.isOk():
499+
if (let peerInfo = parsePeerInfo(conf.filternode); peerInfo.isErr()):
500+
error "Filter not mounted. Couldn't parse conf.filternode", error = peerInfo.error
501+
else:
516502
await node.mountFilter()
517503
await node.mountFilterClient()
518504

@@ -523,8 +509,6 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
523509
chat.printReceivedMessage(msg)
524510

525511
# TODO: Here to support FilterV2 relevant subscription.
526-
else:
527-
error "Filter not mounted. Couldn't parse conf.filternode", error = peerInfo.error
528512

529513
# Subscribe to a topic, if relay is mounted
530514
if conf.relay:
@@ -545,11 +529,8 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
545529

546530
proc spamHandler(wakuMessage: WakuMessage) {.gcsafe, closure.} =
547531
debug "spam handler is called"
548-
let chatLineResult = chat.getChatLine(wakuMessage)
549-
if chatLineResult.isOk():
550-
echo "A spam message is found and discarded : ", chatLineResult.value
551-
else:
552-
echo "A spam message is found and discarded"
532+
let chatLineResult = getChatLine(wakuMessage.payload)
533+
echo "spam message is found and discarded : " & chatLineResult
553534
chat.prompt = false
554535
showChatPrompt(chat)
555536

apps/chat2bridge/chat2bridge.nim

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,7 @@ proc toMatterbridge(
136136

137137
proc pollMatterbridge(cmb: Chat2MatterBridge, handler: MbMessageHandler) {.async.} =
138138
while cmb.running:
139-
let getRes = cmb.mbClient.getMessages()
140-
141-
if getRes.isOk():
139+
if (let getRes = cmb.mbClient.getMessages(); getRes.isOk()):
142140
for jsonNode in getRes[]:
143141
await handler(jsonNode)
144142
else:
@@ -169,9 +167,7 @@ proc new*(
169167
let mbClient = MatterbridgeClient.new(mbHostUri, mbGateway)
170168

171169
# Let's verify the Matterbridge configuration before continuing
172-
let clientHealth = mbClient.isHealthy()
173-
174-
if clientHealth.isOk() and clientHealth[]:
170+
if mbClient.isHealthy().valueOr(false):
175171
info "Reached Matterbridge host", host = mbClient.host
176172
else:
177173
raise newException(ValueError, "Matterbridge client not reachable/healthy")

apps/chat2bridge/config_chat2bridge.nim

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ type Chat2MatterbridgeConf* = object
9191
name: "filternode"
9292
.}: string
9393

94-
# Matterbridge options
94+
# Matterbridge options
9595
mbHostAddress* {.
9696
desc: "Listening address of the Matterbridge host",
9797
defaultValue: parseIpAddress("127.0.0.1"),
@@ -126,11 +126,9 @@ proc completeCmdArg*(T: type keys.KeyPair, val: string): seq[string] =
126126
return @[]
127127

128128
proc parseCmdArg*(T: type crypto.PrivateKey, p: string): T =
129-
let key = SkPrivateKey.init(p)
130-
if key.isOk():
131-
crypto.PrivateKey(scheme: Secp256k1, skkey: key.get())
132-
else:
129+
let key = SkPrivateKey.init(p).valueOr:
133130
raise newException(ValueError, "Invalid private key")
131+
return crypto.PrivateKey(scheme: Secp256k1, skkey: key)
134132

135133
proc completeCmdArg*(T: type crypto.PrivateKey, val: string): seq[string] =
136134
return @[]

apps/chat2mix/chat2mix.nim

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -146,25 +146,14 @@ proc showChatPrompt(c: Chat) =
146146
except IOError:
147147
discard
148148

149-
proc getChatLine(c: Chat, msg: WakuMessage): Result[string, string] =
149+
proc getChatLine(payload: seq[byte]): string =
150150
# No payload encoding/encryption from Waku
151-
let
152-
pb = Chat2Message.init(msg.payload)
153-
chatLine =
154-
if pb.isOk:
155-
pb[].toString()
156-
else:
157-
string.fromBytes(msg.payload)
158-
return ok(chatline)
151+
let pb = Chat2Message.init(payload).valueOr:
152+
return string.fromBytes(payload)
153+
return $pb
159154

160155
proc printReceivedMessage(c: Chat, msg: WakuMessage) =
161-
let
162-
pb = Chat2Message.init(msg.payload)
163-
chatLine =
164-
if pb.isOk:
165-
pb[].toString()
166-
else:
167-
string.fromBytes(msg.payload)
156+
let chatLine = getChatLine(msg.payload)
168157
try:
169158
echo &"{chatLine}"
170159
except ValueError:
@@ -375,18 +364,17 @@ proc maintainSubscription(
375364
let peerOpt = selectRandomServicePeer(
376365
wakuNode.peerManager, some(actualFilterPeer), WakuFilterSubscribeCodec
377366
)
378-
if peerOpt.isOk():
379-
actualFilterPeer = peerOpt.get()
380-
381-
info "Found new peer for codec",
382-
codec = filterPubsubTopic, peer = constructMultiaddrStr(actualFilterPeer)
383-
384-
noFailedSubscribes = 0
385-
continue # try again with new peer without delay
386-
else:
367+
peerOpt.isOkOr:
387368
error "Failed to find new service peer. Exiting."
388369
noFailedServiceNodeSwitches += 1
389370
break
371+
372+
actualFilterPeer = peerOpt.get()
373+
info "Found new peer for codec",
374+
codec = filterPubsubTopic, peer = constructMultiaddrStr(actualFilterPeer)
375+
376+
noFailedSubscribes = 0
377+
continue # try again with new peer without delay
390378
else:
391379
if noFailedSubscribes > 0:
392380
noFailedSubscribes -= 1
@@ -530,16 +518,18 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
530518
let resolved = await dnsResolver.resolveTxt(domain)
531519
return resolved[0] # Use only first answer
532520

533-
var wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl.get(), resolver)
521+
let wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl.get(), resolver)
534522
if wakuDnsDiscovery.isOk:
535523
let discoveredPeers = await wakuDnsDiscovery.get().findPeers()
536524
if discoveredPeers.isOk:
537525
info "Connecting to discovered peers"
538526
discoveredNodes = discoveredPeers.get()
539527
echo "Discovered and connecting to " & $discoveredNodes
540528
waitFor chat.node.connectToNodes(discoveredNodes)
529+
else:
530+
warn "Failed to find peers via DNS discovery", error = discoveredPeers.error
541531
else:
542-
warn "Failed to init Waku DNS discovery"
532+
warn "Failed to init Waku DNS discovery", error = wakuDnsDiscovery.error
543533

544534
let peerInfo = node.switch.peerInfo
545535
let listenStr = $peerInfo.addrs[0] & "/p2p/" & $peerInfo.peerId
@@ -575,13 +565,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
575565
else:
576566
newSeq[byte](0)
577567

578-
let
579-
pb = Chat2Message.init(payload)
580-
chatLine =
581-
if pb.isOk:
582-
pb[].toString()
583-
else:
584-
string.fromBytes(payload)
568+
let chatLine = getChatLine(payload)
585569
echo &"{chatLine}"
586570
info "Hit store handler"
587571

0 commit comments

Comments
 (0)