Skip to content
This repository was archived by the owner on Jan 30, 2026. It is now read-only.

Commit 90e913f

Browse files
committed
fix: dont use global variables
1 parent 4021f19 commit 90e913f

File tree

9 files changed

+65
-82
lines changed

9 files changed

+65
-82
lines changed

examples/poc_gossipsub.nim

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,17 @@ proc setUpNodes(numNodes: int): seq[Switch] =
4343
# This is not actually GC-safe
4444
{.gcsafe.}:
4545
# Initialize mix nodes
46-
discard initializeMixNodes(numNodes)
46+
let mixNodes = initializeMixNodes(numNodes).valueOr:
47+
error "Could not initialize mixnodes", err = error
48+
return
4749

4850
var nodes: seq[Switch] = @[]
4951

5052
for index, node in enumerate(mixNodes):
5153
# Write public info of all mix nodes
52-
let nodePubInfoRes = getMixPubInfoByIndex(index)
53-
if nodePubInfoRes.isErr:
54-
error "Get mix pub info by index error", err = nodePubInfoRes.error
54+
let nodePubInfo = mixNodes.getMixPubInfoByIndex(index).valueOr:
55+
error "Get mix pub info by index error", err = error
5556
continue
56-
let nodePubInfo = nodePubInfoRes.get()
5757

5858
let writePubRes = writeMixPubInfoToFile(nodePubInfo, index)
5959
if writePubRes.isErr:

examples/poc_gossipsub_repeated_runs.nim

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,17 @@ proc setUpNodes(numNodes: int): seq[Switch] =
4343
# This is not actually GC-safe
4444
{.gcsafe.}:
4545
# Initialize mix nodes
46-
discard initializeMixNodes(numNodes)
46+
let mixNodes = initializeMixNodes(numNodes).valueOr:
47+
error "Could not initialize mixnodes", err = error
48+
return
4749

4850
var nodes: seq[Switch] = @[]
4951

5052
for index, node in enumerate(mixNodes):
5153
# Write public info of all mix nodes
52-
let nodePubInfoRes = getMixPubInfoByIndex(index)
53-
if nodePubInfoRes.isErr:
54-
error "Get mix pub info by index error", err = nodePubInfoRes.error
54+
let nodePubInfo = mixNodes.getMixPubInfoByIndex(index).valueOr:
55+
error "Get mix pub info by index error", err = error
5556
continue
56-
let nodePubInfo = nodePubInfoRes.get()
5757

5858
let writePubRes = writeMixPubInfoToFile(nodePubInfo, index)
5959
if writePubRes.isErr:

examples/poc_noresp_ping.nim

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,17 @@ proc setUpNodes(numNodes: int): seq[Switch] =
3030
# This is not actually GC-safe
3131
{.gcsafe.}:
3232
# Initialize mix nodes
33-
discard initializeMixNodes(numNodes)
33+
let mixNodes = initializeMixNodes(numNodes).valueOr:
34+
error "Could not initialize mixnodes", err = error
35+
return
3436

3537
var nodes: seq[Switch] = @[]
3638

3739
for index, node in enumerate(mixNodes):
3840
# Write public info of all mix nodes
39-
let nodePubInfoRes = getMixPubInfoByIndex(index)
40-
if nodePubInfoRes.isErr:
41-
error "Get mix pub info by index error", err = nodePubInfoRes.error
41+
let nodePubInfo = mixNodes.getMixPubInfoByIndex(index).valueOr:
42+
error "Get mix pub info by index error", err = error
4243
continue
43-
let nodePubInfo = nodePubInfoRes.get()
4444

4545
let writePubRes = writeMixPubInfoToFile(nodePubInfo, index)
4646
if writePubRes.isErr:

examples/poc_resp_ping.nim

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@ proc setUpNodes(numNodes: int): seq[Switch] =
2828
# This is not actually GC-safe
2929
{.gcsafe.}:
3030
# Initialize mix nodes
31-
discard initializeMixNodes(numNodes)
31+
let mixNodes = initializeMixNodes(numNodes).valueOr:
32+
error "Could not initialize mixnodes", err = error
33+
return
3234

3335
var nodes: seq[Switch] = @[]
3436

3537
for index, node in enumerate(mixNodes):
3638
# Write public info of all mix nodes
37-
let nodePubInfoRes = getMixPubInfoByIndex(index)
38-
if nodePubInfoRes.isErr:
39-
error "Get mix pub info by index error", err = nodePubInfoRes.error
39+
let nodePubInfo = mixNodes.getMixPubInfoByIndex(index).valueOr:
40+
error "Get mix pub info by index error", err = error
4041
continue
41-
let nodePubInfo = nodePubInfoRes.get()
4242

4343
let writePubRes = writeMixPubInfoToFile(nodePubInfo, index)
4444
if writePubRes.isErr:
@@ -86,7 +86,7 @@ proc mixnetSimulation() {.async: (raises: [Exception]).} =
8686

8787
# We'll fwd requests, so let's register how should the exit node will read responses
8888
proto.registerFwdReadBehavior(PingCodec, readExactly(32))
89-
89+
9090
mixProto.add(proto)
9191

9292
nodes[index].mount(pingProto[index])

mix.nim

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,26 @@ export results
88
export toConnection
99
export MixProtocolID
1010
export MixProtocol
11+
1112
export initializeMixNodes
1213
export getMixPubInfoByIndex
1314
export writeMixPubInfoToFile
1415
export writeMixNodeInfoToFile
15-
export mixNodes
1616
export getMixNodeInfo
1717
export `new`
1818
export getMaxMessageSizeForCodec
1919
export deleteNodeInfoFolder
2020
export deletePubInfoFolder
21-
export initMixMultiAddrByIndex
21+
2222
export Destination
2323
export DestinationType
2424
export forwardToAddr
2525
export mixNode
26+
2627
export MixParameters
2728
export fwdReadBehaviorCb
2829
export registerFwdReadBehavior
30+
export MixNodes
2931

3032
proc readLp*(maxSize: int): fwdReadBehaviorCb =
3133
return proc(

mix/entry_connection.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ method readLp*(
170170
if length == 0:
171171
return
172172

173-
var res = newSeqUninit[byte](length)
173+
var res = newSeqUninitialized[byte](length)
174174
await s.readExactly(addr res[0], res.len)
175175
res
176176

mix/mix_node.nim

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ type MixNodeInfo* = object
1414
libp2pPubKey: SkPublicKey
1515
libp2pPrivKey: SkPrivateKey
1616

17-
var mixNodes*: seq[MixNodeInfo] = @[] # TODO: global variable?
18-
1917
proc initMixNodeInfo*(
2018
multiAddr: string,
2119
mixPubKey, mixPrivKey: FieldElement,
@@ -243,20 +241,20 @@ proc deletePubInfoFolder*(pubInfoFolderPath: string = "./pubInfo") =
243241
if dirExists(pubInfoFolderPath):
244242
removeDir(pubInfoFolderPath)
245243

246-
proc getMixPubInfoByIndex*(index: int): Result[MixPubInfo, string] =
247-
if index < 0 or index >= mixNodes.len:
248-
return err("Index must be between 0 and " & $(mixNodes.len))
244+
type MixNodes* = seq[MixNodeInfo]
245+
246+
proc getMixPubInfoByIndex*(self: MixNodes, index: int): Result[MixPubInfo, string] =
247+
if index < 0 or index >= self.len:
248+
return err("Index must be between 0 and " & $(self.len))
249249
ok(
250250
MixPubInfo(
251-
multiAddr: mixNodes[index].multiAddr,
252-
mixPubKey: mixNodes[index].mixPubKey,
253-
libp2pPubKey: mixNodes[index].libp2pPubKey,
251+
multiAddr: self[index].multiAddr,
252+
mixPubKey: self[index].mixPubKey,
253+
libp2pPubKey: self[index].libp2pPubKey,
254254
)
255255
)
256256

257-
proc generateMixNodes(
258-
count: int, basePort: int = 4242
259-
): Result[seq[MixNodeInfo], string] =
257+
proc generateMixNodes(count: int, basePort: int = 4242): Result[MixNodes, string] =
260258
var nodes = newSeq[MixNodeInfo](count)
261259
for i in 0 ..< count:
262260
let keyPairResult = generateKeyPair()
@@ -283,31 +281,21 @@ proc generateMixNodes(
283281

284282
ok(nodes)
285283

286-
proc initializeMixNodes*(count: int, basePort: int = 4242): Result[void, string] =
287-
mixNodes = generateMixNodes(count, basePort).valueOr:
284+
proc initializeMixNodes*(count: int, basePort: int = 4242): Result[MixNodes, string] =
285+
let mixNodes = generateMixNodes(count, basePort).valueOr:
288286
return err("Mix node initialization error: " & error)
287+
return ok(mixNodes)
289288

290289
proc getPeerIdFromMultiAddr*(multiAddr: string): Result[PeerId, string] =
291290
let parts = multiAddr.split("/")
292291
if parts.len != 7:
293292
return err("Invalid multiaddress format")
294293
ok(PeerId.init(parts[6]).get())
295294

296-
proc findMixNodeByPeerId*(peerId: PeerId): Result[MixNodeInfo, string] =
297-
for node in mixNodes:
295+
proc findByPeerId*(self: MixNodes, peerId: PeerId): Result[MixNodeInfo, string] =
296+
for node in self:
298297
let peerIdRes = getPeerIdFromMultiAddr(node.multiAddr).valueOr:
299298
return err("Failed to get peer id from multiAddress")
300299
if peerIdRes == peerId:
301300
return ok(node)
302301
return err("No node with peer id: " & $peerId)
303-
304-
proc getMixNodeByIndex*(index: int): Result[MixNodeInfo, string] =
305-
if index < 0 or index >= mixNodes.len:
306-
return err("Index must be between 0 and " & $(mixNodes.len))
307-
ok(mixNodes[index])
308-
309-
proc initMixMultiAddrByIndex*(index: int, multiAddr: string): Result[void, string] =
310-
if index < 0 or index >= mixNodes.len:
311-
return err("Index must be between 0 and " & $(mixNodes.len))
312-
mixNodes[index].multiAddr = multiAddr
313-
ok()

mix/mix_protocol.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ proc handleMixNodeConnection(
170170
await connCred.incoming.put(deserialized.message)
171171
else:
172172
error "could not process reply", id = processedSP.id
173-
except KeyError as ex:
173+
except KeyError:
174174
doAssert false, "checked with hasKey"
175175
of Intermediate:
176176
trace "# Intermediate: ", multiAddr = multiAddr

tests/test_mix_node.nim

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,16 @@ import libp2p/[crypto/crypto, crypto/secp, multiaddress, peerid]
55
import ../mix/[curve25519, mix_node]
66

77
suite "Mix Node Tests":
8+
var mixNodes {.threadvar.}: MixNodes
9+
810
setup:
911
var count = 5
10-
discard initializeMixNodes(count)
12+
let mixNodesRes = initializeMixNodes(count)
13+
if mixNodesRes.isErr():
14+
error "could not generate mix nodes"
15+
fail()
16+
mixNodes = mixNodesRes.value()
17+
1118
deleteNodeInfoFolder()
1219
deletePubInfoFolder()
1320

@@ -21,12 +28,7 @@ suite "Mix Node Tests":
2128
fail()
2229

2330
for i in 0 ..< count:
24-
let nodeRes = getMixNodeByIndex(i)
25-
if nodeRes.isErr:
26-
error "Get mix node by index error", err = nodeRes.error
27-
fail()
28-
let node = nodeRes.get()
29-
31+
let node = mixNodes[i]
3032
let
3133
(multiAddr, mixPubKey, mixPrivKey, libp2pPubKey, libp2pPrivKey) =
3234
getMixNodeInfo(node)
@@ -73,11 +75,7 @@ suite "Mix Node Tests":
7375

7476
test "find_mix_node_by_peer_id":
7577
for i in 0 ..< count:
76-
let nodeRes = getMixNodeByIndex(i)
77-
if nodeRes.isErr:
78-
error "Get mix node by index error", err = nodeRes.error
79-
fail()
80-
let node = nodeRes.get()
78+
let node = mixNodes[i]
8179

8280
let (multiAddr, mixPubKey, mixPrivKey, libp2pPubKey, libp2pPrivKey) =
8381
getMixNodeInfo(node)
@@ -88,7 +86,7 @@ suite "Mix Node Tests":
8886
fail()
8987
let peerId = peerIdRes.get()
9088

91-
let foundNodeRes = findMixNodeByPeerId(peerId)
89+
let foundNodeRes = mixNodes.findByPeerId(peerId)
9290
if foundNodeRes.isErr:
9391
error "Find mix node error", err = foundNodeRes.error
9492
fail()
@@ -133,17 +131,13 @@ suite "Mix Node Tests":
133131
fail()
134132
let peerId = peerIdRes.get()
135133

136-
let foundNodeRes = findMixNodeByPeerId(peerId)
134+
let foundNodeRes = mixNodes.findByPeerId(peerId)
137135
if foundNodeRes.isOk:
138136
fail()
139137

140138
test "write_and_read_mix_node_info":
141139
for i in 0 ..< count:
142-
let nodeRes = getMixNodeByIndex(i)
143-
if nodeRes.isErr:
144-
error "Get mix node by index error", err = nodeRes.error
145-
fail()
146-
let node = nodeRes.get()
140+
let node = mixNodes[i]
147141

148142
let (multiAddr, mixPubKey, mixPrivKey, libp2pPubKey, libp2pPrivKey) =
149143
getMixNodeInfo(node)
@@ -189,15 +183,15 @@ suite "Mix Node Tests":
189183

190184
test "write_and_read_mix_pub_info":
191185
for i in 0 ..< count:
192-
let nodeRes = getMixPubInfoByIndex(i)
193-
if nodeRes.isErr:
194-
error "Get mix node by index error", err = nodeRes.error
186+
let mixPubInfoRes = mixNodes.getMixPubInfoByIndex(i)
187+
if mixPubInfoRes.isErr:
188+
error "Get mix pubinfo by index error", err = mixPubInfoRes.error
195189
fail()
196-
let node = nodeRes.get()
190+
let mixPubInfo = mixPubInfoRes.get()
197191

198-
let (multiAddr, mixPubKey, libp2pPubKey) = getMixPubInfo(node)
192+
let (multiAddr, mixPubKey, libp2pPubKey) = getMixPubInfo(mixPubInfo)
199193

200-
let writeNodeRes = writeMixPubInfoToFile(node, i)
194+
let writeNodeRes = writeMixPubInfoToFile(mixPubInfo, i)
201195
if writeNodeRes.isErr:
202196
error "File write error", index = i
203197
fail()
@@ -234,14 +228,13 @@ suite "Mix Node Tests":
234228
test "generate_mix_nodes_with_different_ports":
235229
count = 3
236230
let basePort = 5000
237-
discard initializeMixNodes(count, basePort)
231+
let mixNodesRes2 = initializeMixNodes(count, basePort)
232+
if mixNodesRes2.isErr:
233+
error "could not generate mixnodes", err = mixNodesRes2.error()
234+
let mixNodes = mixNodesRes2.value()
238235

239236
for i in 0 ..< count:
240-
let nodeRes = getMixNodeByIndex(i)
241-
if nodeRes.isErr:
242-
error "Get mix node by index error", err = nodeRes.error
243-
fail()
244-
let node = nodeRes.get()
237+
let node = mixNodes[i]
245238

246239
let (multiAddr, _, _, _, _) = getMixNodeInfo(node)
247240

0 commit comments

Comments
 (0)