diff --git a/.gitmodules b/.gitmodules index 408def1f2..b7e52550a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -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 diff --git a/apps/chat2mix/chat2mix.nim b/apps/chat2mix/chat2mix.nim index 7621b4025..2b4e0a924 100644 --- a/apps/chat2mix/chat2mix.nim +++ b/apps/chat2mix/chat2mix.nim @@ -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, diff --git a/examples/lightpush_mix/lightpush_publisher_mix.nim b/examples/lightpush_mix/lightpush_publisher_mix.nim index 0a0ae078e..1e26daa9b 100644 --- a/examples/lightpush_mix/lightpush_publisher_mix.nim +++ b/examples/lightpush_mix/lightpush_publisher_mix.nim @@ -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, @@ -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 diff --git a/vendor/mix b/vendor/mix deleted file mode 160000 index 5e9533769..000000000 --- a/vendor/mix +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5e95337693ad0787baec1ee25293f454c2d105ca diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index aa8ce46f7..0309685cd 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit aa8ce46f782240cb99a7222c474022b8cfd24e52 +Subproject commit 0309685cd27d4bf763c8b3be86a76c33bcfe67ea diff --git a/waku.nimble b/waku.nimble index 609ae16bf..c63d20246 100644 --- a/waku.nimble +++ b/waku.nimble @@ -24,14 +24,13 @@ requires "nim >= 2.2.4", "stew", "stint", "metrics", - "libp2p >= 1.13.0", + "libp2p >= 1.14.2", "web3", "presto", "regex", "results", "db_connector", - "minilru", - "https://github.com/vacp2p/mix#0.1.0" + "minilru" ### Helper functions proc buildModule(filePath, params = "", lang = "c"): bool = diff --git a/waku/factory/conf_builder/mix_conf_builder.nim b/waku/factory/conf_builder/mix_conf_builder.nim index 13fc2a446..145ccb76e 100644 --- a/waku/factory/conf_builder/mix_conf_builder.nim +++ b/waku/factory/conf_builder/mix_conf_builder.nim @@ -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: diff --git a/waku/node/api/lightpush.nim b/waku/node/api/lightpush.nim index 459350bb3..550c5bd9f 100644 --- a/waku/node/api/lightpush.nim +++ b/waku/node/api/lightpush.nim @@ -17,7 +17,7 @@ import libp2p/transports/tcptransport, libp2p/transports/wstransport, libp2p/utility, - mix + libp2p/protocols/mix import ../waku_node, @@ -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( diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 1bb4eb881..f34a47a01 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -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, diff --git a/waku/waku_enr/capabilities.nim b/waku/waku_enr/capabilities.nim index f74b8b177..b4e2bf37a 100644 --- a/waku/waku_enr/capabilities.nim +++ b/waku/waku_enr/capabilities.nim @@ -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" diff --git a/waku/waku_mix/protocol.nim b/waku/waku_mix/protocol.nim index ba0e8fc92..34b50f8a9 100644 --- a/waku/waku_mix/protocol.nim +++ b/waku/waku_mix/protocol.nim @@ -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 @@ -117,14 +116,30 @@ proc startMixNodePoolMgr*(mix: WakuMix) {.async.} = heartbeat "Updating mix node pool", 5.seconds: mix.populateMixNodePool() ]# + proc toMixNodeTable(bootnodes: seq[MixNodePubInfo]): Table[PeerId, MixPubInfo] = var mixNodes = initTable[PeerId, MixPubInfo]() for node in bootnodes: - let peerId = getPeerIdFromMultiAddr(node.multiAddr).valueOr: + let pInfo = parsePeerInfo(node.multiAddr).valueOr: error "Failed to get peer id from multiaddress: ", error = error, multiAddr = $node.multiAddr continue - mixNodes[peerId] = createMixPubInfo(node.multiAddr, node.pubKey) + let peerId = pInfo.peerId + 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 @@ -138,10 +153,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"