-
Notifications
You must be signed in to change notification settings - Fork 231
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
IPNS with multiple resolvers #198
Comments
Some notes I had:
Question around (delegated) lookup protocol:
|
Some thoughts on Name resolution and IPNSNaming resolution schemes have three components:
IPNS (as specified in the spec) has the matching components:
DNSLink
Putting New NamespacesSome examples requirements for when to create new namespaces (and their implications):
Therefore, the Transport seems to be the only really useful piece of information in deciding whether or not to allocate a new namespace; new Transport => new Namespace. Implications for DHT and PubSub IPNSIf we really don't want To be clear, any solution that says "check PubSub and if that fails check the DHT" is based on the fact that they share properties 1 + 2. However, DNS and ENS share those properties as well and so we could just have a |
I agree that current IPNS+DNS situation at At the same time, I am pretty sure "Transport" is not the best abstraction for drawing the line. What if we frame the concept of namespaces as path Resolvers.
Some clarifying notes behind this way of thinking:
Other notes:
|
@lidel Do you think you could clarify what makes DHT and PubSub routers of IPNS records similar, and yet DNS and ENS different? I understand that IPNS over PubSub/DHT uses the same record type, but that's almost incidental. As a comparison think about the DID methods, even though they all have the same base record type the different transports/methods get different names It's also worth noting that the transports inherently have security properties embedded in them which, while not relevant for immutable data/content-addressing like IPFS, are relevant with mutable data. For example, the IPNS PubSub router will allow third parties to persist IPNS records, but the DHT router will not. I guess what I'm trying to do here is tease apart the difference between a Transport and a Resolver. It's too high level to say "Resolvers map path => path (or sometimes path => data as I noted above), and every resolver gets its own namespace" because that means any two schemes that differ at all in the path => path process get their own namespace. That implies that because the DHT and PubSub routers of IPNS records do resolution differently from each other they should get their own namespaces (unless we define a protocol P that encompasses both routers). I tried Transport as a way of showing what our current plans seem to imply, but it doesn't have to be the only option. Any answer we come up with here could theoretically apply to the DID space as well, they seem to have settled on DID Method's as the implication of what needs a new namespace, but perhaps there are lessons we can learn. |
In my mind IPNS remains a single namespace because while its internal "transports" can store and return different records for the same libp2p-key, the client can always pick and verify the latest record from across all available transports. DNS<>ENS are not like this:
DIDs made me think about concepts of "Control" and "Equivalence". In my mind DID methods translate to sub-namespaces, because
|
@lidel @hugomrdias I was talking with @Stebalien about how we're currently using Pubsub + DHT as IPNS routers. What do you think about publishing to all routing systems simultaneously, but allowing the |
@aschmahmann I'd be ok with such fast default, as long there is an opt-in way (eg. I imagine contexts where fast UI is built on top of backed that does not care about speed and wants to block until DHT publish succeeds. |
Context
As noted in the IPNS spec there are currently two components of IPNS:
The spec currently does not specify the routing system by which a user that wishes to publish or resolve an IPNS record may do so, instead it says:
However, in actual IPNS implementations (e.g. in go-ipfs and js-ipfs) there is an implicit assumption that addresses such as
/ipns/$key
ordweb:/ipns/$key
will resolve in some standardized way. There's a dive into the world of dweb addressing by @lgierth and @lidel here.Thus far we've run into minimal problems here despite having both DHT and PubSub based resolution systems. This is because the PubSub system relies on the DHT for initial content resolution (i.e. only using PubSub for publishing/retrieving updates that occur while the daemon is running) and we always publish updates to both the DHT and PubSub. This effectively makes the DHT the authoritative store of IPNS information, with PubSub just being used for faster propagation.
Upcoming Issues
Some of the current endeavors to increase IPNS performance will involve creating record delivery mechanisms that are not reliant on using the DHT to propagate the IPNS records (e.g. a persistent PubSub channel, or IPNS over DNS). As a result, it's time for us to put together a proposal that adds some clarity to issues including:
/ipns/$key
?/ipns/pubsub-backed-by-dht/$key
or/ipns/$key-with-routing-info
)/ipns
like/ipld
refers to content and pathing, but not to record retrieval or propagation?Many of these issues were surfaced in a meeting on ongoing IPNS endeavors with notes at: ipfs/team-mgmt#948.
Thanks for your help and looking forward to hearing your thoughts: @Stebalien @pgte @satazor @vasco-santos @hugomrdias @jimpick @lidel @momack2
The text was updated successfully, but these errors were encountered: