Comments (7)
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.
@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.
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.
you still run into the issue of having to pass swarm
for the verification to happen.
from js-libp2p.
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.
@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.
This ⛴ has sailed!
from js-libp2p.
Related Issues (20)
- libp2p.components not included in typescript types. HOT 1
- autonat and upnp-nat both detect external IP address, but neither updates announced addresses. HOT 4
- libp2p crashes with ABORT_ERR HOT 5
- Memory leak issue HOT 9
- New link for js-libp2p maintainers call? HOT 5
- Circuit Relay v2 should not publish routing key without public addresses HOT 1
- Yamux pontentially sending a WindowUpdate after it has closed the stream
- Unable to run a DHT Provide Successfully HOT 6
- Cannot connect to DNS multiaddr format HOT 3
- Browser-to-server libp2p reliability HOT 5
- investigation: hanging TCPSocketWrap in js-libp2p-amino-dht-bootstrapper HOT 1
- bug: max call stack exceeded when duplicate /webrtc listeners added HOT 1
- Finding Circuit Relay V2 servers HOT 1
- Update RTCConfig for WebRTCTransport
- Deprecate `@libp2p/mplex` tracking issue HOT 2
- PubSub not recognizing subscribers/peers, when peers are subscribed to same topic. HOT 2
- Tracking - WebTransport browser bugs
- Tracking Issue - WebRTC direct in Node.js HOT 1
- More Conservative RTCPeerConnection Instantiation
- Tracking - WebRTC browser bugs
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from js-libp2p.