GithubHelp home page GithubHelp logo

Comments (7)

nunofmn avatar nunofmn commented on May 30, 2024

Hey, I would like to work on this.

Question: should the libp2p-railing be integrated directly into the base js-libp2p? Shouldn't it be required as a discovery mechanism in the js-libp2p bundles?

from js-libp2p.

daviddias avatar daviddias commented on May 30, 2024

@nunofmn awesome!

The way it is set up means that it has to be passed as an extra module loaded by js-ipfs into libp2p, because only js-ipfs has access to the bootstrap list.

Another question is how to hot load swarm into it. Trying to figure out a nice way to plug in this discovery mechanism, that requires swarm (or libp2p) to work. So far, what is making sense is to have a mechanism to add modules on the fly:

libp2p.module.add('discovery', <instance>)

Thoughts?

from js-libp2p.

nunofmn avatar nunofmn commented on May 30, 2024

Adding modules on-the-fly is useful and a good default solution, but maybe supporting some configuration-based initialization could be also useful (similar to the already existing one in js-libp2p-ipfs)

const modules = {
      transport: [
        new TCP(),
        new WS()
      ],
      connection: {
        muxer: [
          spdy
        ],
        crypto: [
          secio
        ]
      },
      discovery: [
        {
          module: require('js-libp2p-railing'),
          options: { verify: true }
        },
        {
          module: require('js-libp2p-mdns-discovery'),
          options: { verify: true }
        }
      ]
}

This way in the base js-libp2p is then possible to initialize the discovery modules, since the swarm instance is already available.

The only disadvantage is that is necessary a common "constructor function signature" in all discovery modules.

from js-libp2p.

daviddias avatar daviddias commented on May 30, 2024

you still run into the issue of having to pass swarm for the verification to happen.

from js-libp2p.

nunofmn avatar nunofmn commented on May 30, 2024

In the base class you can now do something like this:

// Attach discovery mechanisms
if (this.discovery) {
  let discoveries = this.modules.discovery
    discoveries = Array.isArray(discoveries) ? discoveries : [discoveries]
    discoveries.forEach((discovery) => {
      let Discovery = discovery.module
      let disc = new Discovery(discovery.options, this.swarm)

      disc.on('peer', (peerInfo) => {
        this.discovery.emit('peer', peerInfo)
       })
   })
}

from js-libp2p.

daviddias avatar daviddias commented on May 30, 2024

@nunofmn here is what we are going to do.

  • the bundles get a new options object passed ipfs-inactive/js-libp2p-ipfs-nodejs#46
  • the discovery mechanisms (for now) might or not receive as the last argument of their constructor, a reference to the libp2p instance itself. So in case of libp2p-railing, you would pass the libp2p node, and access swarm from there. Through this direct reference to the instance, the options can be fetched, for example bootstrap-list.

Makes sense?

from js-libp2p.

daviddias avatar daviddias commented on May 30, 2024

This ⛴ has sailed!

from js-libp2p.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.