js-libp2p-gossipsub icon indicating copy to clipboard operation
js-libp2p-gossipsub copied to clipboard

new found discovered peers not added to peers

Open koh-osug opened this issue 6 months ago • 3 comments

I'm running two nodes on the same machine and can see:

libp2p:mdns peer found 12D3KooWFvEoC1NJz5Cgcji15WyNGRjo85ytgMi7PJCQnTeTHM2B +0ms libp2p:mdns discovered peer in mDNS query response 12D3KooWFvEoC1NJz5Cgcji15WyNGRjo85ytgMi7PJCQnTeTHM2B +1ms

Now, I would strongly assume that private onPeerConnected must be called to add this peer. But this never happens. The integration seems to be not working. I'm using version ^11.0.1

The code:

import { noise } from '@chainsafe/libp2p-noise'
import { yamux } from '@chainsafe/libp2p-yamux'
import { tcp } from '@libp2p/tcp'
import defaultsDeep from '@nodeutils/defaults-deep'
import { createLibp2p as create } from 'libp2p'
import { gossipsub } from '@chainsafe/libp2p-gossipsub'
import { mdns } from '@libp2p/mdns'
import { pubsubPeerDiscovery } from '@libp2p/pubsub-peer-discovery'

async function createLibp2p (_options) {
    const defaults = {
        addresses: {
            listen: ['/ip4/0.0.0.0/tcp/0']
        },
        transports: [
            tcp(),
        ],
        streamMuxers: [
            yamux()
        ],
        connectionEncryption: [
            noise()
        ],
        peerDiscovery: [
            mdns({
                interval: 20e3
            }),
            pubsubPeerDiscovery()
        ],
        services: {
            pubsub: gossipsub({
                allowPublishToZeroPeers: true
            })
        }
    }

    return create(defaultsDeep(_options, defaults))
}

async function run () {

    const node = await createLibp2p({
    })
    console.log('node ready, listening on:')
    node.getMultiaddrs().forEach((ma) => {
        console.log(ma.toString())
    })
    node.addEventListener('peer:discovery', (evt) => console.log('Discovered:', evt.detail.id.toString()))

    node.addEventListener('peer:connect', (evt) => {
        const remotePeer = evt.detail
        console.log('connected to: ', remotePeer.toString())
    })

    node.services.pubsub.addEventListener('message', (message) => {
        console.log(`${message.detail.topic}:`, new TextDecoder().decode(message.detail.data))
    })

    node.services.pubsub.subscribe('rendezvous')

    setInterval((async () => {
        try {
            await node.services.pubsub.publish('rendezvous', new TextEncoder().encode('test'))
        }
        catch (e) {
            console.log("error publishing", e)
        }
    }), 10000)

    return node.start()
}

await run()

koh-osug avatar Jan 06 '24 03:01 koh-osug