Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,3 @@
url = https://github.com/waku-org/waku-rlnv2-contract.git
ignore = untracked
branch = master
[submodule "vendor/mix"]
path = vendor/mix
url = https://github.com/vacp2p/mix/
branch = main
2 changes: 1 addition & 1 deletion apps/chat2mix/chat2mix.nim
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ import
peerid, # Implement how peers interact
protobuf/minprotobuf, # message serialisation/deserialisation from and to protobufs
nameresolving/dnsresolver,
protocols/mix/curve25519,
] # define DNS resolution
import mix/curve25519
import
waku/[
waku_core,
Expand Down
6 changes: 3 additions & 3 deletions examples/lightpush_mix/lightpush_publisher_mix.nim
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ import
confutils,
libp2p/crypto/crypto,
libp2p/crypto/curve25519,
libp2p/protocols/mix,
libp2p/protocols/mix/curve25519,
libp2p/multiaddress,
eth/keys,
eth/p2p/discoveryv5/enr,
metrics,
metrics/chronos_httpserver

import mix, mix/mix_protocol, mix/curve25519

import
waku/[
common/logging,
Expand Down Expand Up @@ -119,7 +119,7 @@ proc setupAndPublish(rng: ref HmacDrbgContext, conf: LightPushMixConf) {.async.}
conn = node.wakuMix.toConnection(
MixDestination.init(dPeerId, pxPeerInfo.addrs[0]), # destination lightpush peer
WakuLightPushCodec, # protocol codec which will be used over the mix connection
Opt.some(MixParameters(expectReply: Opt.some(true), numSurbs: Opt.some(byte(1)))),
MixParameters(expectReply: Opt.some(true), numSurbs: Opt.some(byte(1))),
# mix parameters indicating we expect a single reply
).valueOr:
error "failed to create mix connection", error = error
Expand Down
1 change: 0 additions & 1 deletion vendor/mix
Submodule mix deleted from 5e9533
3 changes: 1 addition & 2 deletions waku.nimble
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ requires "nim >= 2.2.4",
"regex",
"results",
"db_connector",
"minilru",
"https://github.com/vacp2p/mix#0.1.0"
"minilru"

### Helper functions
proc buildModule(filePath, params = "", lang = "c"): bool =
Expand Down
2 changes: 1 addition & 1 deletion waku/factory/conf_builder/mix_conf_builder.nim
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import chronicles, std/options, results
import libp2p/crypto/crypto, libp2p/crypto/curve25519, mix/curve25519
import libp2p/crypto/crypto, libp2p/crypto/curve25519, libp2p/protocols/mix/curve25519
import ../waku_conf, waku/waku_mix

logScope:
Expand Down
8 changes: 3 additions & 5 deletions waku/node/api/lightpush.nim
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import
libp2p/transports/tcptransport,
libp2p/transports/wstransport,
libp2p/utility,
mix
libp2p/protocols/mix

import
../waku_node,
Expand Down Expand Up @@ -207,10 +207,8 @@ proc lightpushPublishHandler(
let conn = node.wakuMix.toConnection(
MixDestination.init(peer.peerId, peer.addrs[0]),
WakuLightPushCodec,
Opt.some(
MixParameters(expectReply: Opt.some(true), numSurbs: Opt.some(byte(1)))
# indicating we only want a single path to be used for reply hence numSurbs = 1
),
MixParameters(expectReply: Opt.some(true), numSurbs: Opt.some(byte(1))),
# indicating we only want a single path to be used for reply hence numSurbs = 1
).valueOr:
error "could not create mix connection"
return lighpushErrorResult(
Expand Down
5 changes: 2 additions & 3 deletions waku/node/waku_node.nim
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@ import
libp2p/transports/tcptransport,
libp2p/transports/wstransport,
libp2p/utility,
mix,
mix/mix_node,
mix/mix_protocol
libp2p/protocols/mix,
libp2p/protocols/mix/mix_protocol

import
../waku_core,
Expand Down
2 changes: 1 addition & 1 deletion waku/waku_enr/capabilities.nim
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import
std/[options, bitops, sequtils, net, tables], results, eth/keys, libp2p/crypto/crypto
import ../common/enr, ../waku_core/codecs
import mix/mix_protocol
import libp2p/protocols/mix

const CapabilitiesEnrField* = "waku2"

Expand Down
37 changes: 29 additions & 8 deletions waku/waku_mix/protocol.nim
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
{.push raises: [].}

import chronicles, std/[options, tables, sequtils], chronos, results, metrics
import chronicles, std/[options, tables, sequtils], chronos, results, metrics, strutils

import
libp2p/crypto/curve25519,
mix/mix_protocol,
mix/mix_node,
mix/mix_metrics,
libp2p/protocols/mix,
libp2p/protocols/mix/mix_node,
libp2p/[multiaddress, multicodec, peerid],
eth/common/keys

Expand Down Expand Up @@ -117,14 +116,35 @@ proc startMixNodePoolMgr*(mix: WakuMix) {.async.} =
heartbeat "Updating mix node pool", 5.seconds:
mix.populateMixNodePool()
]#

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

proc toMixNodeTable(bootnodes: seq[MixNodePubInfo]): Table[PeerId, MixPubInfo] =
var mixNodes = initTable[PeerId, MixPubInfo]()
for node in bootnodes:
let peerId = getPeerIdFromMultiAddr(node.multiAddr).valueOr:
error "Failed to get peer id from multiaddress: ",
error = error, multiAddr = $node.multiAddr
continue
mixNodes[peerId] = createMixPubInfo(node.multiAddr, node.pubKey)
var peerPubKey: crypto.PublicKey
if not peerId.extractPublicKey(peerPubKey):
warn "Failed to extract public key from peerId, skipping node", peerId = peerId
continue

if peerPubKey.scheme != PKScheme.Secp256k1:
warn "Peer public key is not Secp256k1, skipping node",
peerId = peerId, scheme = peerPubKey.scheme
continue

let multiAddr = MultiAddress.init(node.multiAddr).valueOr:
error "Failed to parse multiaddress", multiAddr = node.multiAddr, error = error
continue

mixNodes[peerId] = MixPubInfo.init(peerId, multiAddr, node.pubKey, peerPubKey.skkey)
info "using mix bootstrap nodes ", bootNodes = mixNodes
return mixNodes

Expand All @@ -138,10 +158,11 @@ proc new*(
): WakuMixResult[T] =
let mixPubKey = public(mixPrivKey)
info "mixPrivKey", mixPrivKey = mixPrivKey, mixPubKey = mixPubKey

let nodeMultiAddr = MultiAddress.init(nodeAddr).valueOr:
return err("failed to parse mix node address: " & $nodeAddr & ", error: " & error)
let localMixNodeInfo = initMixNodeInfo(
nodeAddr, mixPubKey, mixPrivKey, peermgr.switch.peerInfo.publicKey.skkey,
peermgr.switch.peerInfo.privateKey.skkey,
peermgr.switch.peerInfo.peerId, nodeMultiAddr, mixPubKey, mixPrivKey,
peermgr.switch.peerInfo.publicKey.skkey, peermgr.switch.peerInfo.privateKey.skkey,
)
if bootnodes.len < mixMixPoolSize:
warn "publishing with mix won't work as there are less than 3 mix nodes in node pool"
Expand Down
Loading