Registries tracking mutable objects (golang@latest) and downloading immutable data (sha256:deadbeef...)
Cannot download golang@sha256:deadbeef if the registry is inaccessible even if it's present elsewhere
Enter IPFS
flat address space: (e.g sha256:deadbeef not golang@sha256:deadbeef)
means you can fetch manifests, layers, etc. from anywhere
can be extended to effectively enable decentralized registries when combined with a decentralized mutability scheme
Why hasn't this been tried before?
It's has, but always needed custom manifests and registries since IPFS has been unable to handle SHA256(200MB layer) instead needing to merklize the data with something like UnixFS
This leverages a strategy for incrementally verifiable large blocks
Demo
How does it work - Recap:
Ask DHT + Indexers for who has the data
If someone has it ask them, if there's a proof use it
Find who has the proof (web3.storage)
Download the data using the proof (client using Bitswap)
Return over HTTP to Docker
Use a local HTTPS Proxy to intercept requests for hashes
Extensibilty - what made this possible
Using Bitswap -> block-based access enables new schemes without network changes
Indexer -> allows small arbitrary data to be associated with blocks
Reframe -> allows upgrading responses to contain new data without network upgrade
Just the beginning
Can adapt this pattern to many existing package managers (language package managers like Go/npm)
This demo just does fetching, the data could be served as well
Wrap up
Can fetch docker resources over IPFS no matter how big
Can apply this to many existing package managers, hashes are everywhere. Wherever you see hashes addressing data, IPFS may be able to help!
Thanks!
Reach out on #ipfs-implementers if you're interested.