Skip to content
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

Proposal: Reliable Mutability Primitive #19

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

Gozala
Copy link

@Gozala Gozala commented Feb 17, 2021

Originally draft was edited at https://hackmd.io/@gozala/ipns-pitch

@carsonfarmer provided some valuable feedback, which I'll migrate here for the visibility of others

cc @hugomrdias @aschmahmann @lidel

Co-authored-by: Rod Vagg <rod@vagg.org>
Co-authored-by: Alan Shaw <alan.shaw@protocol.ai>

<!--Briefly describe the milestones/steps/work needed for this project-->

- Implement third party IPNS republishing (TODO: Find a relevant issue link)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a closely related issue ipfs/kubo#4435

- Implement third party IPNS republishing (TODO: Find a relevant issue link)
- Collaborate with Pinning Services to make this part of the API.
- Fix IPNS publishing in browsers.
- Enable pubsub by default + IPNS over pubsub.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: Textile threads utilize pubsub which means that any issues with enabling pubsub by default are things that would be experienced by Textile threads users. They also utilize IPNS over PubSub for buckets.

- Fix IPNS publishing in browsers.
- Enable pubsub by default + IPNS over pubsub.
- Implement & deploy strategic republishing system on PL hosted nodes that will republish popular content and drop stalled one. So that IPNS works even thought pinning services.
- (Nice to have) Implement and rollout delegated publishing to enable updating from multiple devices.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is sort of doable already "for free" if we have some way to pin/follow IPNS updates. I can just share the private key with my multiple devices via ipfs key export/import.

There are alternative approaches too, but figured I'd point this one out.

Copy link
Author

@Gozala Gozala Feb 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I meant getting it to a state where we can comfortably tell users this is how you go about it. I do have some reservations towards key sharing, but that's probably discussion worth having when we get there.

<!--
Provide success criteria. These might include particular metrics, desired changes in the types of bug reports being filed, desired changes in qualitative user feedback (measured via surveys, etc), etc.
-->
People and teams are storing IPNS keys in [DNSLink][] records as opposed to CIDs, because that provides a more effective and simpler way to publish updates. We see new projects are leveraging IPNS over working around it via things like [DNSLink][].
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At the very least because updating DNS is such a pain we see people using DNSLink and pointing it at IPNS records instead of IPFS because its so much easier to work with IPNS updates than DNS updates. Similarly, we may see people storing IPNS addresses in ENS to save on not wanting to publish many blockchain transactions.

##### Dependencies/prerequisites
<!--List any other projects that are dependencies/prerequisites for this project that is being pitched.-->

- Functioning IPNS in browsers
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: likely includes an up-to-date IPNS over PubSub implementation

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@aschmahmann do you mean something like

Suggested change
- Functioning IPNS in browsers
- Functioning IPNS in browsers (over up-to-date PubSub implementation)

Or a separate item ? I

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well IPNS over PubSub has a few tweaks over just PubSub itself to give some reliability. It's specced here.

@hugomrdias would probably know more about other work required to get IPNS functioning in a browser I just know that without the IPNS over PubSub changes in the spec that it won't be fast enough.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the basic question, but I'm still confused by what is meant by "functioning IPNS in browsers". What isn't working browsers today?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I should probably capture this in the document. Currently pubsub is disabled in go-ipfs so all the IPNS records are published and resolved from DHT. Nodes in browsers do not have necessary capabilities to query/publish DHT. Instead they do publish and resolve IPNS records over pubsub. Result is fragmented network where go and js nodes see each others records.

Furthermore because because there is not enough nodes on the network with pubsub enabled published records from browser don't always make to nodes subscribed to them.

P.S.: Some of this may not be completely accurate, @hugomrdias @aschmahmann could you please confirm I'm not misrepresenting current state.

- Collaborate with Pinning Services to make this part of the API.
- Fix IPNS publishing in browsers.
- Enable pubsub by default + IPNS over pubsub.
- Implement & deploy strategic republishing system on PL hosted nodes that will republish popular content and drop stalled one. So that IPNS works even thought pinning services.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting, I'm not sure this is really required as we can give IPNS the same guarantees as IPFS. However, since the amount of data is smaller this idea of a public IPNS pinning service seems pretty cool.

- Subscribtion based deny lists (node can subscribe to any endpoint)
- RSS like systems (In RSS readers memorable namse were not a concern)
- DAGs revisions carrying IPNS key so that last latest revision or any past revision could be discovered.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, more advanced mutability systems could be built (e.g. where instead of a single public key, we can have M of N signers required on records). But it all starts from having the UX and process around pinning mutable names and having a performant and efficient mutability system (e.g. Persistent PubSub, like what IPNS over PubSub uses)

Describe any choices and uncertainty in this scope estimate. (E.g. Uncertainty in the scope until design work is complete, low uncertainty in execution thereafter.)
-->

Large. Requires lot of coordinated changes across implementations and collabs. Uncertainty in the scope until concrete actionable plan is in place. Uncertenty in collab buy-in.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, although just getting things stable + performant in go-ipfs and web browsers would likely go along way while collabs conversations are underway.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Gozala : can we put some high-level estimates (in terms of dev weeks) around each item in the "Brief plan of attack" above? I think that will help give a bit more clarity on the size of this project.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm afraid I'm not well qualified to do this. I've mostly put this proposal together from prior discussions I had with @aschmahmann and @hugomrdias (still in outsider capacity) in an attempt to rally folks who have much better understanding of internal details.

Help trying to scope it out further, would be greatly appreciated.

P.S: Me & @hugomrdias plan no going over this proposal tomorrow to flush it out further.


- [Pinata][] gets asked about how to change content for CID once every few weeks _(Most of the time they find that is not what the users actually need)_.
- [fission.codes](https://fission.codes/) found IPNS persistance unreliable and had to build custom solution that updates [DNSLink][] records (**TODO**: Get a quote / link from Boris)
- **TODO**: Survey textile, last time we talked they found IPNS to be unreliable for propagating thread updates.
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I should also mention something else to provide further context: We're currently managing 1000s (yes, that's right) of IPNS updates for buckets. This currently takes an extremely long time to republish. We are actively conducting tests to determine exactly how long this takes, and how often it fails to complete. In some cases, it is taking hours per day.


<!--Briefly describe the milestones/steps/work needed for this project-->

- Implement third party IPNS republishing (TODO: Find a relevant issue link)
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

##### Alternatives
_How might this project’s intent be realized in other ways (other than this project proposal)? What other potential solutions can address the same need?_

- Integrating textile threads as core component of the ecosystem.

- Integrating textile threads as core component of the ecosystem.
- Standardizing DNS record updates mechanism and intergating into IPFS.
- Work with Pinning Services to implement stardized DNSLink updating mechanism.
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(new person coming up to speed): what would this look like? I think I'll be able to grok it with a tiny sketch or a mock sample code example.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have recently created pinning service API that allows you to add pinning services like pinata to your IPFS node and then remote pin things. Kind of like adding git remote and pushing changes to it.

Idea here is to extend that API in a way that you could update DNSLink provided by the pinning service to the new CID through extended API. Kind of like when you push to remote it updates corresponding branch to new commit. In our case branch names would be DNSLinks, that you could update to point to new CID.

@BigLep does this answer your question ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Gozala : thanks - this helps. The only open area for me then is where is this DNSLink stored? Is this a DNSLink in a DNS record on a (sub)domain that the Pinning Service owns?

Basically would the chain be
My domain (e.g., mywebsite.com) has DNS record that points to a domain the Pinning service controls (e.g., mywebsite.somepinningservice.com) which has the DNSLink to the latest CID?

Copy link
Member

@lidel lidel Mar 1, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@BigLep This is great question – it makes us think about all implications.
Depends on: if you (A) publish to your own domain, or (B) use a subdomain provided by pinning service for free.

To give you a real life example, let's say we want to host https://cid.ipfs.io on some pinning service (pin + take care of updating dnslink + TLS).

(B) is easy. Pinning service simply give you a name on some domain they own. Fleek does that already, they give https://cid-utils-website.on.fleek.co/ for free + they set up DNSLink for those names (because they own the top domain).

(A) means we want to delegate updates of DNS TXT record on _dnslink.cid.ipfs.io to some pinning service.
This can be done either by:

  • giving DNS provider credentials to pinning service + expecting them to implement support for proprietary APIs of each dns provider (not realistic IMO, but mentioning here for completeness)
  • using DNS protocol itself for delegation (details TBD, below are broad stroke ideas to explore):
    • setting ALIAS record, delegating everything to a subdomain controlled by pinning service
    • setting NS records that delegate management of _dnslink.cid.ipfs.io to a DNS server controlled by pinning service. That way they have full control over DNSLink without having any control over other records (because we delegated only _dnslink subdomain)

@alanshaw alanshaw changed the title Reliable Mutability Primitive pitch Proposal: Reliable Mutability Primitive Feb 22, 2021
Copy link
Contributor

@BigLep BigLep left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot for putting this together - good stuff. Apologies if the questions below are all basic. Feel free to point me anywhere I should be reading to self-service answer.


- Implement third party IPNS republishing (TODO: Find a relevant issue link)
- Collaborate with Pinning Services to make this part of the API.
- Fix IPNS publishing in browsers.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(New person comment): is this essential for unblock the core use-case of enabling customers to do ipns updates instead of DNS updates?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes if those updates were to made from browser. It is also however useful on it's own merit as it enables apps to pull updated content even if such content has no human readable name.

##### Counterpoints &amp; pre-mortem
_Why might this project be lower impact than expected? How could this project fail to complete, or fail to be successful?_

- IPNS has bad reputation, changing it may prove to be a challenge.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do we get more data on this? Is this a question to PM's?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's well know fact, evidence been that teams have tried and ultimately end up going with DNSLink solution. I'm pretty sure PL did that too, but someone with longer history here might know better.

We could also get specific collabs to comment here to either validate the claim or dispute it. I have invited folks from textile & fission to validate. We could reach out to more teams.

@olizilla do you by a chance know if we used to have IPNS in DNSLink past or am I making wrong assumptions here.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@BigLep good pulse check in this issue (2017–today): ipfs/kubo#3860

_Why might this project be lower impact than expected? How could this project fail to complete, or fail to be successful?_

- IPNS has bad reputation, changing it may prove to be a challenge.
- Teams may find that general primitive is not adequate for custom needs.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have we been presented any usecases where ipns (once it has a reliable mutability primitive) isn't sufficient?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • IPNS lacks human readable/memorable naming which is a concern in most human facing interactions.
  • I have in the past voiced concerns about the lack of revision history associated with it (although one could built such a system on top).
  • There also had been discussions about ability to have multiple publishers to the same name.
  • And then there are also questions about compromised or lost key recovery

I suspect that despite all this usable IPNS will address enough use cases to be worth it. That said we might find that a higher level primitive that address more use cases out of the box will provide a better market fit.

_How might this project’s intent be realized in other ways (other than this project proposal)? What other potential solutions can address the same need?_

- Integrating textile threads as core component of the ecosystem.
- Standardizing DNS record updates mechanism and intergating into IPFS.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this even possible? Doesn't it depend on each DNS' API for mutating actions?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hypothetically speaking we can start a standardization effort form a committee and get enough big players onboard to get it done. I imagine there might be some value for DNS providers to make their products more accessible.


- Integrating textile threads as core component of the ecosystem.
- Standardizing DNS record updates mechanism and intergating into IPFS.
- Work with Pinning Services to implement stardized DNSLink updating mechanism.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(new person coming up to speed): what would this look like? I think I'll be able to grok it with a tiny sketch or a mock sample code example.

##### Dependencies/prerequisites
<!--List any other projects that are dependencies/prerequisites for this project that is being pitched.-->

- Functioning IPNS in browsers
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the basic question, but I'm still confused by what is meant by "functioning IPNS in browsers". What isn't working browsers today?

Describe any choices and uncertainty in this scope estimate. (E.g. Uncertainty in the scope until design work is complete, low uncertainty in execution thereafter.)
-->

Large. Requires lot of coordinated changes across implementations and collabs. Uncertainty in the scope until concrete actionable plan is in place. Uncertenty in collab buy-in.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Gozala : can we put some high-level estimates (in terms of dev weeks) around each item in the "Brief plan of attack" above? I think that will help give a bit more clarity on the size of this project.


- go-ipfs development
- js-ipfs development
- cross org coordinator (to get pinning services onboard)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry to be slow, but why is it required to get pinning services onboard? I'm not saying we should skip doing this, I just want to make sure I understand the inter-dependency. For example, in my head right now I understand that Pinning Services are critical for persistence but I'm less clear on their role in mutability.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is a valid point and calling out pinning services specifically might be projecting too far of how things would work.

This was partially influenced by the fact that IPNS (at least in its current form) requires records to be republished otherwise they'll become unsolvable. Implicit assumption here, is that, unless there are motivated nodes to do this, system will end up impractical. Pinning services just seem well positions to do this given that they are motivated nodes keep content that IPNS will point to available (insert git branch analogy here).

That said we could and probably should consider different strategies to meet reliability goals.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In other words I think we still need someone to help coordinate efforts beyond just leading implementation efforts, to ensure that we do not end up with a system that is directly tied to PL infrastructure. I am assuming this involves getting other teams onboard.

Copy link
Member

@lidel lidel Mar 1, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 on at least thinking about pinning services in the context of IPNS:

  • how pinning of /ipns/{libp2p-key-cid} would work?
    (would there be special handling for a CID with libp2p-key codec etc)
  • how they can help with avoiding IPNS rot
  • how someone could pin IPNS record behind /ipns/en.wikipedia-on-ipfs.org (when we switch it to IPNS .. or not)


Authors: [@gozala](https://github.com/gozala)

Initial PR: https://github.com/protocol/web3-dev-team/pull/19/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe add a note that this is part of the larger story in #42 ?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure this would be accurate. I think there is a merit to reliable mutability primitive whether we decide to do human readable names or not.

@BigLep BigLep mentioned this pull request Feb 24, 2021
lidel added a commit that referenced this pull request Mar 1, 2021
Removed IPNS-specific work as it is already tracked in
#19
Copy link
Member

@lidel lidel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed IPNS from #42 and would like to add some IPNS-specific things here (details below)

proposals/Reliable Mutability Primitive.md Outdated Show resolved Hide resolved
proposals/Reliable Mutability Primitive.md Outdated Show resolved Hide resolved
proposals/Reliable Mutability Primitive.md Show resolved Hide resolved
Co-authored-by: Marcin Rataj <lidel@lidel.org>
@mikeal
Copy link
Contributor

mikeal commented Mar 24, 2021

i’d like a review approval from @aschmahmann on this one

@mikeal mikeal added the ease:low Ease rating is 5 or below. label Mar 24, 2021
@Gozala
Copy link
Author

Gozala commented Mar 24, 2021

I think it is worth pointing out that this proposal was mostly about:

  1. Documenting current state of mutability in IPFS
  2. Making a case for addressing this problem

During iterations it became clear that different strategies (with various tradeoffs) could be used to address it. I have proposed #66 as one such strategy and was hoping that other proposals would surface as well. I also attempted to further document current limitations https://hackmd.io/@gozala/state-of-ipns across environments that I challenge other previously discussed strategies to improve IPNS across the board.

@mikeal
Copy link
Contributor

mikeal commented Mar 24, 2021

@Gozala should we close this PR in favor of #66 then?

@Gozala
Copy link
Author

Gozala commented Mar 24, 2021

@Gozala should we close this PR in favor of #66 then?

Not sure. I feel like current proposal structure does not support decoupling problem statement that attempts to clarify why we should address the problem, from concrete plan how can we do that. In many cases including this one it would make sense to have single problem statement (like this document) and multiple proposals to address it (which could link to this instead of reiterating).

Currently "Brief plan of attack" attempts to capture what @aschmahmann had been saying on various channels, to whom I'd defer this call.

@aschmahmann
Copy link
Contributor

aschmahmann commented Mar 24, 2021

I feel like current proposal structure does not support decoupling problem statement that attempts to clarify why we should address the problem, from concrete plan how can we do that. In many cases including this one it would make sense to have single problem statement (like this document) and multiple proposals to address it (which could link to this instead of reiterating).

💯

IMO going down the path of this proposal better prepares us for a decentralized solution while also having "exit points" towards #66 if needed.

Briefly my understanding of this proposal is:

  • Implement third party IPNS republishing
  • go-ipfs default use of PubSub and IPNS over PubSub
  • js-ipfs fully implementing IPNS over PubSub (i.e. spec which includes the fetch protocol) and using it by default

Briefly my understanding of #66 is:

  • Define fast lane name resolution specification.
  • Define name keeper service specification.
  • Define name routing service specification.
  • Implement name routing service in go-ipfs
  • Implement name keeper service in go-ipfs
  • Implement fast lane name resolution across web, go, node ipfs.
  • Deploy name routing service to PL operated boostrap nodes

But what if instead these were almost the same:

  • Define fast lane name resolution specification -> ✅ fetch protocol
  • Define name keeper service specification -> third party IPNS republishing + "pinning API" to ask a third party to do it for you
  • Define name routing service specification -> ✅ DHT provider records
  • Implement name routing service in go-ipfs -> ✅ DHT provider records
  • Implement name keeper service in go-ipfs -> third party IPNS republishing + "pinning API" to ask a third party to do it for you
  • Implement fast lane name resolution across web, go, node ipfs -> IPNS over PubSub (Go ✅, JS ⚠)
  • Deploy name routing service to PL operated boostrap nodes -> ✅ delegated routing

There's a reasonable point made in #66 that maybe IPNS records should have more information in them like routing hints (e.g. where is a good node to start my query), and while we can do this with pretty low effort because of how the DHT processes IPNS records I also don't think it's really going to be necessary once we've got IPNS over PubSub actually working.

There is a risk/issue with the IPNS over PubSub approach wherein PubSub falls over if you try and sign up for too many topics. However, if this becomes an issue we can easily pivot towards #66 by making a new router type that only uses the Fetch protocol instead of also using PubSub. The tradeoff is that we no longer get updates pushed to us and have to poll for updates, but it's an easy pivot to make if we need to.

@momack2
Copy link
Contributor

momack2 commented Mar 24, 2021 via email

@aschmahmann
Copy link
Contributor

Is this something we can grant to an ecosystem team? third party IPNS
publishing sounds like something that could be executed through an
RFP/devgrant...

Maybe? The toughest part of the job is doing the plumbing in go-ipfs which shouldn't be too hard to do but is also not intuitive. I'd be ok giving this a shot as long as we do regular check-ins to check for alignment.

@Gozala
Copy link
Author

Gozala commented Mar 24, 2021

But what if instead these were almost the same:

I think it is worth considering:

  1. Complexity between approach proposed in propose: fast lane ipns #66 and below. Broadly speaking propose: fast lane ipns #66 attempts network querying by caching name keeper addresses forever at:

    1. Local level
    2. Name routing level

    And removes need for disturbing a network when publishing updates by making it point to point operation.

    Furthermore by embedding name keeper address in the DNSLink all human readable name resolutions could effectively be point to point operations.

    It is less decentralized, but but that is a conscious decision to remove all of the overhead in happy path. It does not replace need for fully distributed solution as it is still needed as a slower fallback.

  2. Dependencies

#66 intentionally does not specify how name routing service API nor name keeper API nor how things get replicated. That is because I want to be able to make progress on IPNS without blocking on pubsub or DHT in JS or other things.

* Define fast lane name resolution specification -> ✅ fetch protocol

Not sure what you're referring to here. Assuming it's name keeper resolution I think fetch protocol is probably a good way to go about it. Although protocol seems generic enough that I feel some semantic meaning might be useful.

* Define name keeper service specification -> third party IPNS republishing + "pinning API" to ask a third party to do it for you

#66 intentionally makes publishing an operation that does not require disturbing the rest of the network. I think it is a good compromise, maybe it is not ? Worth comparing tradeoffs at least.

* Define name routing service specification -> ✅ DHT provider records

in #66 intention was to decouple name routing from DHT, pubsub etc... If node is aware of some name keeper(s) it can provide routing. It does not even needs to be IPFS node.

* Implement name routing service in go-ipfs -> ✅  DHT provider records

👍

* Implement name keeper service in go-ipfs -> third party IPNS republishing + "pinning API" to ask a third party to do it for you

In #66 intenion was that anything, as simple as cloudless lambda could play that role in the system. All it needs is a key value store as opposed to whole IPFS node.

* Implement fast lane name resolution across web, go, node ipfs -> IPNS over PubSub (Go ✅,  JS ⚠)

I really want us to arrive to a place where you can build distributed applications on the web without having to have to operate ipfs nodes on the server, because that is where many choose AWS as cheaper and simpler alternative. #66 was geared towards enabling that so might be worth considering.

It is true however that it creates a system in which a name resolution depends on an authoritative node, however remedy is that name owner can freely swap that authority which I think provides a good compromise.

* Deploy name routing service to PL operated boostrap nodes -> ✅ delegated routing

Load on routing nodes as per #66 is designed to be a lot smaller than I imagine it would be with delegated routing.

@BigLep
Copy link
Contributor

BigLep commented May 26, 2021

Assigning to grants since it won't get worked on in the short term with the current program structure. @mikeal is going to evaluate grant possibility.

Serhii0317 added a commit to Serhii0317/NFT_we3-dev-team that referenced this pull request Mar 2, 2022
Removed IPNS-specific work as it is already tracked in
protocol/web3-dev-team#19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ease:low Ease rating is 5 or below.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants