rns-icn - content addressed data over reticulum
Started by nim ·
I've been building Information Centric Networking over Reticulum and figured someone here might find it useful or interesting.
The idea: instead of asking for a destination, and then asking for data from there, you ask for the named content and the mesh gives you a verified copy from wherever the nearest one might be. The nodes cache what pass through it, so the 5th person to fetch a file doesn't drag the request all the way to a slow origin many hops out, they get it from the nearest node with the data. Its basically NDN/CCN, but for Reticulum instead of IP.
I'm not great at writing or explaining, but I've made a nomadnet page kind of introducing ICN and why it works great on reticulum. b64e064d54da1986bbeec0110b4ffc1f:/page/index.mu
It's been running as a public test origin on the live mesh. You can fetch from it right now over any RNS-connected path:
pip install -e . # or install rns-icn however you like
icn-fetch 97f750c7e12b15690fa9dfb8e7e0d372 manifest
icn-fetch 97f750c7e12b15690fa9dfb8e7e0d372 hello
icn-fetch 97f750c7e12b15690fa9dfb8e7e0d372 about
Repo and a (fairly detailed) protocol spec on the github mirror: https://github.com/0xnim/rns-icn
How to help: run icn-fetch 97f750c7e12b15690fa9dfb8e7e0d372 hello from anywhere on the RNS mesh. If it works, great. If it doesn't work, even better, send me the full output (including the path-finding lines) so I can figure out where it broke. Either way, drop the results in a GitHub issue or ping me on here.
If you want to actually build something with this and need more than the CLI, there's an ICNClient in the rns_icn.client module that wraps the whole link-pooling-retry-verify, it's about ten lines to fetch a named blob in your own app. I use it the same way for the publish-side stuff. Or if you want to talk Interests and Data directly, LinkFace is there. Docs live in the repo; let me know if something's missing.