logos-messaging-nim/apps/peer_exchange_tester/peer_exchange_tester.nim
2024-08-22 22:06:02 +05:30

88 lines
2.7 KiB
Nim

import chronos, chronicles, options, os
import libp2p/peerId
import eth/p2p/discoveryv5/enr
import
waku/[
waku_node,
waku_peer_exchange,
node/peer_manager,
node/peer_manager/peer_manager,
node/peer_manager,
factory/waku,
factory/external_config,
common/logging,
]
proc main() {.async.} =
echo "--------------- main started ---------------"
var wakuConf: WakuNodeConf
wakuConf.logLevel = logging.LogLevel.DEBUG
wakuConf.logFormat = logging.LogFormat.TEXT
wakuConf.staticNodes =
@[
"/ip4/178.128.141.171/tcp/30303/p2p/16Uiu2HAkykgaECHswi3YKJ5dMLbq2kPVCo89fcyTd38UcQD6ej5W"
]
wakuConf.maxConnections = 100
wakuConf.pubsubTopics = @["/waku/2/rs/0/0"]
wakuConf.clusterId = 1
wakuConf.nat = "extip:117.99.49.10"
wakuConf.relayPeerExchange = true
wakuConf.peerExchange = true
var wakuApp = Waku.init(wakuConf).valueOr:
error "Waku initialization failed", error = error
quit(QuitFailure)
(waitFor startWaku(addr wakuApp)).isOkOr:
error "Starting waku failed", error = error
quit(QuitFailure)
let switch = newStandardSwitch()
discard switch.start()
let addrs = "/ip4/178.128.141.171/tcp/30303/"
let id = "16Uiu2HAkykgaECHswi3YKJ5dMLbq2kPVCo89fcyTd38UcQD6ej5W"
let ma = MultiAddress.init(addrs).tryGet()
let peerId = PeerId.init(id).tryGet()
let peer_info = RemotePeerInfo.init(peerId, @[ma])
var iter = 0
var success = 0
for i in 0 .. 60:
echo "Seq No :- " & $i & " ---> "
let response = await wakuApp.node.wakuPeerExchange.request(5, peer_info)
if response.isOk:
var validPeers = 0
let peers = response.get().peerInfos
for pi in peers:
var record: enr.Record
if enr.fromBytes(record, pi.enr):
let peer_info = record.toRemotePeerInfo().get()
let peerId = peer_info.peerId
let ma = peer_info.addrs
echo $iter & ") -----> " & $ma[0] & " -- " & $peerId
iter += 1
try:
let wait = 20000
let conn = await switch
.dial(peerId, ma, "/vac/waku/metadata/1.0.0")
.withTimeout(wait)
except TimeoutError:
echo "Dialing peer " & $peerId & " timed out."
except:
echo "An error occurred while dialing peer " & $peerId
success += len(switch.connectedPeers(Direction.Out))
echo $success & " out of " & $iter & " operation successful"
discard switch.disconnect(peerId)
else:
echo " ------------ response isn't not ok ------------------"
sleep(120000)
while iter mod 5 == 0:
iter += 1
echo "---------------------------- Done ------------------------------- "
when isMainModule:
waitFor main()