Skip to content

Commit 797370e

Browse files
remove mixPubKey from ENR and provide config param to pass mix nodes statically (#3587)
1 parent 63f3234 commit 797370e

File tree

18 files changed

+202
-117
lines changed

18 files changed

+202
-117
lines changed

apps/chat2mix/chat2mix.nim

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -397,22 +397,6 @@ proc maintainSubscription(
397397

398398
await sleepAsync(30000) # Subscription maintenance interval
399399

400-
proc processMixNodes(localnode: WakuNode, nodes: seq[string]) {.async.} =
401-
if nodes.len == 0:
402-
return
403-
404-
info "Processing mix nodes: ", nodes = $nodes
405-
for node in nodes:
406-
var enrRec: enr.Record
407-
if enrRec.fromURI(node):
408-
let peerInfo = enrRec.toRemotePeerInfo().valueOr:
409-
error "Failed to parse mix node", error = error
410-
continue
411-
localnode.peermanager.addPeer(peerInfo, Discv5)
412-
info "Added mix node", peer = peerInfo
413-
else:
414-
error "Failed to parse mix node ENR", node = node
415-
416400
{.pop.}
417401
# @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError
418402
proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
@@ -486,11 +470,9 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
486470
error "failed to generate mix key pair", error = error
487471
return
488472

489-
(await node.mountMix(conf.clusterId, mixPrivKey)).isOkOr:
473+
(await node.mountMix(conf.clusterId, mixPrivKey, conf.mixnodes)).isOkOr:
490474
error "failed to mount waku mix protocol: ", error = $error
491475
quit(QuitFailure)
492-
if conf.mixnodes.len > 0:
493-
await processMixNodes(node, conf.mixnodes)
494476
await node.start()
495477

496478
node.peerManager.start()
@@ -624,7 +606,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} =
624606
servicePeerInfo = parsePeerInfo(conf.serviceNode).valueOr:
625607
error "Couldn't parse conf.serviceNode", error = error
626608
RemotePeerInfo()
627-
if $servicePeerInfo.peerId == "":
609+
if servicePeerInfo == nil or $servicePeerInfo.peerId == "":
628610
# Assuming that service node supports all services
629611
servicePeerInfo = selectRandomServicePeer(
630612
node.peerManager, none(RemotePeerInfo), WakuLightpushCodec

apps/chat2mix/config_chat2mix.nim

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ import
44
eth/keys,
55
libp2p/crypto/crypto,
66
libp2p/crypto/secp,
7+
libp2p/crypto/curve25519,
8+
libp2p/multiaddress,
9+
libp2p/multicodec,
710
nimcrypto/utils,
811
confutils,
912
confutils/defs,
1013
confutils/std/net
1114

12-
import waku/waku_core
15+
import waku/waku_core, waku/waku_mix
1316

1417
type
1518
Fleet* = enum
@@ -83,8 +86,10 @@ type
8386
.}: seq[string]
8487

8588
mixnodes* {.
86-
desc: "Peer ENR to add as a mixnode. Argument may be repeated.", name: "mixnode"
87-
.}: seq[string]
89+
desc:
90+
"Multiaddress and mix-key of mix node to be statically specified in format multiaddr:mixPubKey. Argument may be repeated.",
91+
name: "mixnode"
92+
.}: seq[MixNodePubInfo]
8893

8994
keepAlive* {.
9095
desc: "Enable keep-alive for idle connections: true|false",
@@ -225,6 +230,23 @@ type
225230
name: "websocket-secure-support"
226231
.}: bool ## rln-relay configuration
227232

233+
proc parseCmdArg*(T: type MixNodePubInfo, p: string): T =
234+
let elements = p.split(":")
235+
if elements.len != 2:
236+
raise newException(
237+
ValueError, "Invalid format for mix node expected multiaddr:mixPublicKey"
238+
)
239+
let multiaddr = MultiAddress.init(elements[0]).valueOr:
240+
raise newException(ValueError, "Invalid multiaddress format")
241+
if not multiaddr.contains(multiCodec("ip4")).get():
242+
raise newException(
243+
ValueError, "Invalid format for ip address, expected a ipv4 multiaddress"
244+
)
245+
246+
return MixNodePubInfo(
247+
multiaddr: elements[0], pubKey: intoCurve25519Key(ncrutils.fromHex(elements[1]))
248+
)
249+
228250
# NOTE: Keys are different in nim-libp2p
229251
proc parseCmdArg*(T: type crypto.PrivateKey, p: string): T =
230252
try:

examples/lightpush_mix/lightpush_publisher_mix.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ proc setupAndPublish(rng: ref HmacDrbgContext, conf: LightPushMixConf) {.async.}
107107
let (mixPrivKey, mixPubKey) = generateKeyPair().valueOr:
108108
error "failed to generate mix key pair", error = error
109109
return
110-
(await node.mountMix(clusterId, mixPrivKey)).isOkOr:
110+
(await node.mountMix(clusterId, mixPrivKey, conf.mixnodes)).isOkOr:
111111
error "failed to mount waku mix protocol: ", error = $error
112112
return
113113

examples/lightpush_mix/lightpush_publisher_mix_config.nim

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import confutils/defs
1+
import
2+
confutils/defs,
3+
libp2p/crypto/curve25519,
4+
libp2p/multiaddress,
5+
libp2p/multicodec,
6+
nimcrypto/utils as ncrutils
7+
8+
import waku/waku_mix
29

310
type LightPushMixConf* = object
411
destPeerAddr* {.desc: "Destination peer address with peerId.", name: "dp-addr".}:
@@ -26,3 +33,26 @@ type LightPushMixConf* = object
2633
mixDisabled* {.
2734
desc: "Do not use mix for publishing.", defaultValue: false, name: "without-mix"
2835
.}: bool
36+
37+
mixnodes* {.
38+
desc:
39+
"Multiaddress and mix-key of mix node to be statically specified in format multiaddr:mixPubKey. Argument may be repeated.",
40+
name: "mixnode"
41+
.}: seq[MixNodePubInfo]
42+
43+
proc parseCmdArg*(T: typedesc[MixNodePubInfo], p: string): T =
44+
let elements = p.split(":")
45+
if elements.len != 2:
46+
raise newException(
47+
ValueError, "Invalid format for mix node expected multiaddr:mixPublicKey"
48+
)
49+
50+
let multiaddr = MultiAddress.init(elements[0]).valueOr:
51+
raise newException(ValueError, "Invalid multiaddress format")
52+
if not multiaddr.contains(multiCodec("ip4")).get():
53+
raise newException(
54+
ValueError, "Invalid format for ip address, expected a ipv4 multiaddress"
55+
)
56+
return MixNodePubInfo(
57+
multiaddr: elements[0], pubKey: intoCurve25519Key(ncrutils.fromHex(elements[1]))
58+
)

simulations/mixnet/run_chat_mix.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
../../build/chat2mix --cluster-id=2 --num-shards-in-network=1 --shard=0 --servicenode="/ip4/127.0.0.1/tcp/60001/p2p/16Uiu2HAmPiEs2ozjjJF2iN2Pe2FYeMC9w4caRHKYdLdAfjgbWM6o" --log-level=TRACE --mixnode="enr:-Nq4QIPd6TbOWns1TsbSq2KB6g3hIClJa8qBUWFFwbGut9OBCwTHYshi0-iv1ilTMx4FkuSJ4NtkZVx0QSrrMRTGpEsDgmlkgnY0gmlwhH8AAAGHbWl4LWtleaCSMehtpkMlApAKhPhnAEznhjKrUs2OMLHsMizXlXEMKoptdWx0aWFkZHJzigAIBMCoRD4G6mKCcnOFAAIBAACJc2VjcDI1NmsxoQN6R8gw1Pu8IwMlTap0_E7vVd1wcaFgg_VUaaeVWSZYVIN0Y3CC6mKDdWRwgiMrhXdha3UyLQ" --mixnode="enr:-Nq4QC6XyKXZSlJNFzTDPI118SBC2ilLqE05RR4o4OzEZxueGkYtExHtTBvmY-9pl17EXZtXvF_tIV_2g0K_fb2LmsoDgmlkgnY0gmlwhH8AAAGHbWl4LWtleaAnXNaInh8pykjlue24ANGpT0nxPTk6Ds8aB691NQbebIptdWx0aWFkZHJzigAIBMCoRD4G6mOCcnOFAAIBAACJc2VjcDI1NmsxoQPYhmrbTqylbdenVfvO2U0w6EC4A-l5lwvu3QWL7IqkO4N0Y3CC6mODdWRwgiMthXdha3UyLQ" --mixnode="enr:-Nq4QKoh8Ta8Q3zLLAkf4hyYzxpuTc-BRBGb_WYVIm6hRptKZFuIo3DNlWCpfIxJnNI5epjLWQWHFUo3dqpAoWhoXEUDgmlkgnY0gmlwhH8AAAGHbWl4LWtleaDg7VlKjVBmgb4HXo4jcjR4OI-xgkd_ekaTCaJecHb8GIptdWx0aWFkZHJzigAIBMCoRD4G6mSCcnOFAAIBAACJc2VjcDI1NmsxoQOnphVC3U5zmOCkjOI2tY0v8K5QkXSaE5xO37q3iFfKGIN0Y3CC6mSDdWRwgiMvhXdha3UyLQ" --mixnode="enr:-Nq4QN7ub3xi53eDyKKstEM2IjFo7oY5Kf4glFz45W2saWqNXPqJFruw08c9B_EIu1LoW4opwXId_4zvPmekZwYHKp8DgmlkgnY0gmlwhH8AAAGHbWl4LWtleaCP16GnwZtAPSMUUqmx6kDrHMdvRV2RjviYDnaF-e7rH4ptdWx0aWFkZHJzigAIBMCoRD4G6mWCcnOFAAIBAACJc2VjcDI1NmsxoQLJtl9kA98YgBkVElkJgl9XyyRNco78oShb1hsv6Mlbs4N0Y3CC6mWDdWRwgiMxhXdha3UyLQ"
1+
../../build/chat2mix --cluster-id=2 --num-shards-in-network=1 --shard=0 --servicenode="/ip4/127.0.0.1/tcp/60001/p2p/16Uiu2HAmPiEs2ozjjJF2iN2Pe2FYeMC9w4caRHKYdLdAfjgbWM6o" --log-level=TRACE --mixnode="/ip4/127.0.0.1/tcp/60002/p2p/16Uiu2HAmLtKaFaSWDohToWhWUZFLtqzYZGPFuXwKrojFVF6az5UF:9231e86da6432502900a84f867004ce78632ab52cd8e30b1ec322cd795710c2a" --mixnode="/ip4/127.0.0.1/tcp/60003/p2p/16Uiu2HAmTEDHwAziWUSz6ZE23h5vxG2o4Nn7GazhMor4bVuMXTrA:275cd6889e1f29ca48e5b9edb800d1a94f49f13d393a0ecf1a07af753506de6c" --mixnode="/ip4/127.0.0.1/tcp/60004/p2p/16Uiu2HAmPwRKZajXtfb1Qsv45VVfRZgK3ENdfmnqzSrVm3BczF6f:e0ed594a8d506681be075e8e23723478388fb182477f7a469309a25e7076fc18" --mixnode="/ip4/127.0.0.1/tcp/60005/p2p/16Uiu2HAmRhxmCHBYdXt1RibXrjAUNJbduAhzaTHwFCZT4qWnqZAu:8fd7a1a7c19b403d231452a9b1ea40eb1cc76f455d918ef8980e7685f9eeeb1f"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
../../build/chat2mix --cluster-id=2 --num-shards-in-network=1 --shard=0 --servicenode="/ip4/127.0.0.1/tcp/60001/p2p/16Uiu2HAmPiEs2ozjjJF2iN2Pe2FYeMC9w4caRHKYdLdAfjgbWM6o" --log-level=TRACE --mixnode="enr:-Nq4QIPd6TbOWns1TsbSq2KB6g3hIClJa8qBUWFFwbGut9OBCwTHYshi0-iv1ilTMx4FkuSJ4NtkZVx0QSrrMRTGpEsDgmlkgnY0gmlwhH8AAAGHbWl4LWtleaCSMehtpkMlApAKhPhnAEznhjKrUs2OMLHsMizXlXEMKoptdWx0aWFkZHJzigAIBMCoRD4G6mKCcnOFAAIBAACJc2VjcDI1NmsxoQN6R8gw1Pu8IwMlTap0_E7vVd1wcaFgg_VUaaeVWSZYVIN0Y3CC6mKDdWRwgiMrhXdha3UyLQ" --mixnode="enr:-Nq4QC6XyKXZSlJNFzTDPI118SBC2ilLqE05RR4o4OzEZxueGkYtExHtTBvmY-9pl17EXZtXvF_tIV_2g0K_fb2LmsoDgmlkgnY0gmlwhH8AAAGHbWl4LWtleaAnXNaInh8pykjlue24ANGpT0nxPTk6Ds8aB691NQbebIptdWx0aWFkZHJzigAIBMCoRD4G6mOCcnOFAAIBAACJc2VjcDI1NmsxoQPYhmrbTqylbdenVfvO2U0w6EC4A-l5lwvu3QWL7IqkO4N0Y3CC6mODdWRwgiMthXdha3UyLQ" --mixnode="enr:-Nq4QKoh8Ta8Q3zLLAkf4hyYzxpuTc-BRBGb_WYVIm6hRptKZFuIo3DNlWCpfIxJnNI5epjLWQWHFUo3dqpAoWhoXEUDgmlkgnY0gmlwhH8AAAGHbWl4LWtleaDg7VlKjVBmgb4HXo4jcjR4OI-xgkd_ekaTCaJecHb8GIptdWx0aWFkZHJzigAIBMCoRD4G6mSCcnOFAAIBAACJc2VjcDI1NmsxoQOnphVC3U5zmOCkjOI2tY0v8K5QkXSaE5xO37q3iFfKGIN0Y3CC6mSDdWRwgiMvhXdha3UyLQ" --mixnode="enr:-Nq4QN7ub3xi53eDyKKstEM2IjFo7oY5Kf4glFz45W2saWqNXPqJFruw08c9B_EIu1LoW4opwXId_4zvPmekZwYHKp8DgmlkgnY0gmlwhH8AAAGHbWl4LWtleaCP16GnwZtAPSMUUqmx6kDrHMdvRV2RjviYDnaF-e7rH4ptdWx0aWFkZHJzigAIBMCoRD4G6mWCcnOFAAIBAACJc2VjcDI1NmsxoQLJtl9kA98YgBkVElkJgl9XyyRNco78oShb1hsv6Mlbs4N0Y3CC6mWDdWRwgiMxhXdha3UyLQ"
1+
../../build/chat2mix --cluster-id=2 --num-shards-in-network=1 --shard=0 --servicenode="/ip4/127.0.0.1/tcp/60001/p2p/16Uiu2HAmPiEs2ozjjJF2iN2Pe2FYeMC9w4caRHKYdLdAfjgbWM6o" --log-level=TRACE --mixnode="/ip4/127.0.0.1/tcp/60002/p2p/16Uiu2HAmLtKaFaSWDohToWhWUZFLtqzYZGPFuXwKrojFVF6az5UF:9231e86da6432502900a84f867004ce78632ab52cd8e30b1ec322cd795710c2a" --mixnode="/ip4/127.0.0.1/tcp/60003/p2p/16Uiu2HAmTEDHwAziWUSz6ZE23h5vxG2o4Nn7GazhMor4bVuMXTrA:275cd6889e1f29ca48e5b9edb800d1a94f49f13d393a0ecf1a07af753506de6c" --mixnode="/ip4/127.0.0.1/tcp/60004/p2p/16Uiu2HAmPwRKZajXtfb1Qsv45VVfRZgK3ENdfmnqzSrVm3BczF6f:e0ed594a8d506681be075e8e23723478388fb182477f7a469309a25e7076fc18" --mixnode="/ip4/127.0.0.1/tcp/60005/p2p/16Uiu2HAmRhxmCHBYdXt1RibXrjAUNJbduAhzaTHwFCZT4qWnqZAu:8fd7a1a7c19b403d231452a9b1ea40eb1cc76f455d918ef8980e7685f9eeeb1f"

tests/wakunode_rest/test_rest_health.nim

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ suite "Waku v2 REST API - health":
9494
response.status == 200
9595
$response.contentType == $MIMETYPE_JSON
9696
response.data.nodeHealth == HealthStatus.READY
97-
response.data.protocolsHealth.len() == 14
97+
response.data.protocolsHealth.len() == 15
9898
response.data.protocolsHealth[0].protocol == "Relay"
9999
response.data.protocolsHealth[0].health == HealthStatus.NOT_READY
100100
response.data.protocolsHealth[0].desc == some("No connected peers")
@@ -114,19 +114,21 @@ suite "Waku v2 REST API - health":
114114
response.data.protocolsHealth[7].health == HealthStatus.NOT_MOUNTED
115115
response.data.protocolsHealth[8].protocol == "Rendezvous"
116116
response.data.protocolsHealth[8].health == HealthStatus.NOT_MOUNTED
117-
response.data.protocolsHealth[9].protocol == "Lightpush Client"
118-
response.data.protocolsHealth[9].health == HealthStatus.NOT_READY
119-
response.data.protocolsHealth[9].desc ==
117+
response.data.protocolsHealth[9].protocol == "Mix"
118+
response.data.protocolsHealth[9].health == HealthStatus.NOT_MOUNTED
119+
response.data.protocolsHealth[10].protocol == "Lightpush Client"
120+
response.data.protocolsHealth[10].health == HealthStatus.NOT_READY
121+
response.data.protocolsHealth[10].desc ==
120122
some("No Lightpush service peer available yet")
121-
response.data.protocolsHealth[10].protocol == "Legacy Lightpush Client"
122-
response.data.protocolsHealth[10].health == HealthStatus.NOT_MOUNTED
123-
response.data.protocolsHealth[11].protocol == "Store Client"
123+
response.data.protocolsHealth[11].protocol == "Legacy Lightpush Client"
124124
response.data.protocolsHealth[11].health == HealthStatus.NOT_MOUNTED
125-
response.data.protocolsHealth[12].protocol == "Legacy Store Client"
125+
response.data.protocolsHealth[12].protocol == "Store Client"
126126
response.data.protocolsHealth[12].health == HealthStatus.NOT_MOUNTED
127-
response.data.protocolsHealth[13].protocol == "Filter Client"
128-
response.data.protocolsHealth[13].health == HealthStatus.NOT_READY
129-
response.data.protocolsHealth[13].desc ==
127+
response.data.protocolsHealth[13].protocol == "Legacy Store Client"
128+
response.data.protocolsHealth[13].health == HealthStatus.NOT_MOUNTED
129+
response.data.protocolsHealth[14].protocol == "Filter Client"
130+
response.data.protocolsHealth[14].health == HealthStatus.NOT_READY
131+
response.data.protocolsHealth[14].desc ==
130132
some("No Filter service peer available yet")
131133

132134
await restServer.stop()

tools/confutils/cli_args.nim

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import
1111
confutils/std/net,
1212
confutils/toml/defs as confTomlDefs,
1313
confutils/toml/std/net as confTomlNet,
14+
libp2p/crypto/curve25519,
1415
libp2p/crypto/crypto,
1516
libp2p/crypto/secp,
1617
libp2p/multiaddress,
18+
libp2p/multicodec,
1719
nimcrypto/utils,
1820
secp256k1,
1921
json
@@ -26,6 +28,7 @@ import
2628
node/peer_manager,
2729
waku_core/topics/pubsub_topic,
2830
waku_core/message/default_values,
31+
waku_mix,
2932
],
3033
../../tools/rln_keystore_generator/rln_keystore_generator
3134

@@ -615,6 +618,12 @@ with the drawback of consuming some more bandwidth.""",
615618
name: "mixkey"
616619
.}: Option[string]
617620

621+
mixnodes* {.
622+
desc:
623+
"Multiaddress and mix-key of mix node to be statically specified in format multiaddr:mixPubKey. Argument may be repeated.",
624+
name: "mixnode"
625+
.}: seq[MixNodePubInfo]
626+
618627
## websocket config
619628
websocketSupport* {.
620629
desc: "Enable websocket: true|false",
@@ -694,6 +703,22 @@ proc isNumber(x: string): bool =
694703
except ValueError:
695704
result = false
696705

706+
proc parseCmdArg*(T: type MixNodePubInfo, p: string): T =
707+
let elements = p.split(":")
708+
if elements.len != 2:
709+
raise newException(
710+
ValueError, "Invalid format for mix node expected multiaddr:mixPublicKey"
711+
)
712+
let multiaddr = MultiAddress.init(elements[0]).valueOr:
713+
raise newException(ValueError, "Invalid multiaddress format")
714+
if not multiaddr.contains(multiCodec("ip4")).get():
715+
raise newException(
716+
ValueError, "Invalid format for ip address, expected a ipv4 multiaddress"
717+
)
718+
return MixNodePubInfo(
719+
multiaddr: elements[0], pubKey: intoCurve25519Key(ncrutils.fromHex(elements[1]))
720+
)
721+
697722
proc parseCmdArg*(T: type ProtectedShard, p: string): T =
698723
let elements = p.split(":")
699724
if elements.len != 2:
@@ -778,6 +803,22 @@ proc readValue*(
778803
except CatchableError:
779804
raise newException(SerializationError, getCurrentExceptionMsg())
780805

806+
proc readValue*(
807+
r: var TomlReader, value: var MixNodePubInfo
808+
) {.raises: [SerializationError].} =
809+
try:
810+
value = parseCmdArg(MixNodePubInfo, r.readValue(string))
811+
except CatchableError:
812+
raise newException(SerializationError, getCurrentExceptionMsg())
813+
814+
proc readValue*(
815+
r: var EnvvarReader, value: var MixNodePubInfo
816+
) {.raises: [SerializationError].} =
817+
try:
818+
value = parseCmdArg(MixNodePubInfo, r.readValue(string))
819+
except CatchableError:
820+
raise newException(SerializationError, getCurrentExceptionMsg())
821+
781822
proc readValue*(
782823
r: var TomlReader, value: var ProtectedShard
783824
) {.raises: [SerializationError].} =
@@ -972,6 +1013,7 @@ proc toWakuConf*(n: WakuNodeConf): ConfResult[WakuConf] =
9721013
b.storeServiceConf.storeSyncConf.withRelayJitterSec(n.storeSyncRelayJitter)
9731014

9741015
b.mixConf.withEnabled(n.mix)
1016+
b.mixConf.withMixNodes(n.mixnodes)
9751017
b.withMix(n.mix)
9761018
if n.mixkey.isSome():
9771019
b.mixConf.withMixKey(n.mixkey.get())

waku/factory/conf_builder/mix_conf_builder.nim

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import chronicles, std/options, results
22
import libp2p/crypto/crypto, libp2p/crypto/curve25519, mix/curve25519
3-
import ../waku_conf
3+
import ../waku_conf, waku/waku_mix
44

55
logScope:
66
topics = "waku conf builder mix"
@@ -11,6 +11,7 @@ logScope:
1111
type MixConfBuilder* = object
1212
enabled: Option[bool]
1313
mixKey: Option[string]
14+
mixNodes: seq[MixNodePubInfo]
1415

1516
proc init*(T: type MixConfBuilder): MixConfBuilder =
1617
MixConfBuilder()
@@ -21,15 +22,22 @@ proc withEnabled*(b: var MixConfBuilder, enabled: bool) =
2122
proc withMixKey*(b: var MixConfBuilder, mixKey: string) =
2223
b.mixKey = some(mixKey)
2324

25+
proc withMixNodes*(b: var MixConfBuilder, mixNodes: seq[MixNodePubInfo]) =
26+
b.mixNodes = mixNodes
27+
2428
proc build*(b: MixConfBuilder): Result[Option[MixConf], string] =
2529
if not b.enabled.get(false):
2630
return ok(none[MixConf]())
2731
else:
2832
if b.mixKey.isSome():
2933
let mixPrivKey = intoCurve25519Key(ncrutils.fromHex(b.mixKey.get()))
3034
let mixPubKey = public(mixPrivKey)
31-
return ok(some(MixConf(mixKey: mixPrivKey, mixPubKey: mixPubKey)))
35+
return ok(
36+
some(MixConf(mixKey: mixPrivKey, mixPubKey: mixPubKey, mixNodes: b.mixNodes))
37+
)
3238
else:
3339
let (mixPrivKey, mixPubKey) = generateKeyPair().valueOr:
3440
return err("Generate key pair error: " & $error)
35-
return ok(some(MixConf(mixKey: mixPrivKey, mixPubKey: mixPubKey)))
41+
return ok(
42+
some(MixConf(mixKey: mixPrivKey, mixPubKey: mixPubKey, mixNodes: b.mixNodes))
43+
)

waku/factory/internal_config.nim

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ proc enrConfiguration*(
2929
).isOkOr:
3030
return err("could not initialize ENR with shards")
3131

32-
if conf.mixConf.isSome():
33-
enrBuilder.withMixKey(conf.mixConf.get().mixPubKey)
34-
3532
let recordRes = enrBuilder.build()
3633
let record =
3734
if recordRes.isErr():

0 commit comments

Comments
 (0)