-
Notifications
You must be signed in to change notification settings - Fork 75
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
[OPEN GRANT] Fierro IPNS Pinning Service #142
Conversation
Transferred repository to the GH Organization that I created called Fierro Labs. And I bought a new domain for the site. fierro.io. You can find the repository here: https://github.com/Fierro-Labs/Fierro
@mrodriguez3313 Thank you for submitting this draft proposal. The overall project goal and milestone/budget structure look good. I'm tagging @autonome @aschmahmann @lidel as IPNS experts to weigh in on the proposed technical design. (cc @ErinOCon @realChainLife) |
Adding additional information
Just an aside, I'm doing a bunch of IPNS stuff in the Agregore project right now and finding some pain points that might be relevant. Feel free to ping me if you ever wanna chat about it. 😁 I'd also love to integrate the IPNS pinning stuff you're doing into the web extension we're making for Agregore to make pinning easier. |
Reworked grant proposal: New budget, better flow from top to bottom, added future plans using UCANs
Hi @mrodriguez3313 thank you for your proposal. We'd like to fund the work outlined here with a few recommendations:
Please email [email protected] so we can discuss next steps. |
(moving technical feedback from email thread to this public issue) Pinning Service API Specs Clarification: when it comes to devgrant and IPNS specs, my understanding is that we won't be changing IPNS specs as part of this project, but we are interested in extending Pinning Service API specs to document a convention for pinning IPNS records using this already existing API (right now, only immutable identifiers can be pinned). The rationale is that it is better for the wider ecosystem if you base your work on an already existing pinning spec than to create something new. Pinning the immutable IPNS record and data User should be able to use This should be possible with a small spec extension:
I think this is what "startFollowing" method does in your initial API. What I propose here is to avoid inventing new API for add/update/remove pin, and reuse existing methods instead. Spec for adding/removing pins exists at https://ipfs.github.io/pinning-services-api-spec/, it is already supported across ecosystem, go-ipfs ships with client. If we want to add support for "IPNS pinning", then leveraging the existing spec is the way to go. Note: this existing spec is focused on pinning only. Trustless IPNS pinning vs Shared publishing keys You may notice that there is no mention of sharing keys – that is because we always want to support "trustless pinning" where IPNS publishing keys are never shared with a pinning service. In many cases, delegating trust to pinning service is not acceptable, and we always need to support trustless scenario, where records are kept alive for longer periods of time (record lifetime/ttl set to more than 24h, service keeping record alive beyond 36h DHT window). Ability to fully delegate IPNS key management, signing and publishing is useful, fine to work on it as part of the devgrant, but "delegating trust" should be optional, not mandatory. @mrodriguez3313 this is my initial high level feedback + below answers to your questions from the email thread. Q&A
|
Thank you for the feedback again! Something that I thought about while reading was that a user may want to publish multiple records to a remote node. so having something like
So if I understand correctly, ultimately until a solution is crafted on the ipfs side, it will be upto the service to implement like a zk-snark, UCAN, etc... to support republishing in a decentralized & trustless manner? Or are you saying that you forsee that even with these methods it won't be possible to allow that kind of republishing? Therefore that won't be included in the spec and the tracking is all that is needed to be spec'd out as of right now?
But atleast the remote tracking is 100% possible which this is a good start 👍 |
Yes, being able to pin local IPNS names creates nice UX.
Yes, I believe doing this in userland is the easiest path to enable experimentation. We are open to improving IPNS record format, but if someone proposes a change to the spec of IPNS record format, that is much bigger endeavor, because it requires additional reviews, approval, and then every IPFS implementation to support new version to become interoperable. |
Just reviewed this, trustless pinning of IPNS as part of the spec seems great! One thing to note will be that folks should increase the expiration time in their IPNS records when they do the IPNS publish so that they can get the maximum utility out of the pinning service IPNS republeshing. Not sure if there's a CLI flag for that but any examples should have that in there with a note to make people aware of the limitations. Is Fierro only going to support the case where the private key is sent to the pinning service? Or would it be possible for it to support both cases as part of this grant? |
My plan was originally to include it later after beta, but I think it will have to be milestone 2 or 3 instead. I don't know if it has to be its own grant due to some obscure grant acceptance logistics?? Maybe they can confirm 👇? What it looks like what should happen is, the grant would be altered/rearranged like this: M1) IPNS pinning spec as described by lidel in his latest comment. *This will only be to do part 1 in his comment for now, as we briefly discussed on Tuesday How does that sound? @lidel @realChainLife @mishmosh. This would add time and money to the project, but I am super glad that I'm able to have this conversation with more people and especially core IPFS contributor to get this idea rolling for the community! |
M1 and M2 sound good. tbd if we do IPNS pinning under existing My vote would be for latter – exploring how As for M3, personally, I would suggest extracting M3 into a separate devgrant, or just focusing on it and coming up with a spec for delegated IPNS republishing (e.g. where republisher is only able to bump expiration time, and is not able to modify the target CID). Trying to do both "Fierro - a polished end product pinning service" and "low level IPNS specs change for delegated publishing" under a single grant feels a bit distracting, and makes it harder to review. |
Yes that is what I was thinking as well. I will change up the current devgrant to reflect these additions. I like the idea of having a new endpoint, to the points you make in that thread. Ill ping you when I have the edits and see how you approve. |
Added adjustments to grant proposal
One thing I'd like to just throw out there, would it be make sense to extend the pinning service spec to support pinning a e.g. |
So I roughly understand what would be the benefit of adding this support? That's not to say I don't think its a bad idea. Just that I really don't know what you mean by pinning a url? And what scenarios would that bring value to the proposition? Im also confused/thinking about how that request would look like 🤔 |
Yeah, I talked about it a bit at the IPFS Implementors call yesterday: https://youtu.be/XZDXAKbpwoc?t=1228 I think right now CID make it hard to think about pinning things that aren't easily repesented as "an entire tree of IPFS data". e.g. IPNS with DNSLink or public keys seems pretty different from the CID use case. Similarly, there's been some mention that it would be useful if there was a way to pin data that's more specific like ADLs. URLs make this a bit more straightforward in that rather than pinning a CID, one can pin either an Similarly, this could open the door for being able to pin Finally, I'm working on an For the time being though, having This could look like:
It's pretty much the same as the existing spec, but with a |
Draft open grant application
Edit: Link to repository https://github.com/Fierro-Labs/Fierro