atomic-server icon indicating copy to clipboard operation
atomic-server copied to clipboard

Atomic-Server + Content Addressing (like IPFS)

Open joepio opened this issue 5 years ago • 1 comments

Since Atomic Data uses a lot of (non-local) HTTP resources, there is a risk of remote errors that make data unfetchable. When a server goes down, a resource has changed or a domain name hasn't been paid for - the request will fail. That is part of the web, and we have a chance to encounter this every time we open a webpage.

With Atomic Data, however, we rely even more intensely on remote data. Atomic Properties, for example, tell us something about the datatype of an Atom. When parsing triples with new properties for a client, the properties need to resolve. IPFS might help with this, as it can enable 'freezing' of resources. The frozen resources could still contain a link to the original source (HTTPS address) which can be used for updating properties.

joepio avatar Jan 07 '21 09:01 joepio

Responsibilities of IPFS module in server

  • Store Commits in ipfs (these are always immutable) - no reason to store these using other mechanism.
  • Store versioned representations of resources n0-computer/iroh#42. I think storing all versions is a good first step, but in the end the server might decide to only store the latest version of a resource.
  • Resolve /ipfs urls (at least - if they are Atomic Resources, maybe skip non-atomic data?)
  • When using some property URL, freeze it and convert it to IPFS (if this is set, maybe this should be optional).

Implementation

Full ipfs node in app (depracated)

The rust-ipfs crate seems to be the only true option. I've been following it for quite some time. I think it still needs the add feature, though. Lacks a DHT implementation, and it might take a while before this is realized.

EDIT: It's no longer maintained

Client-only - use external gateway

ipfs-embed is lighter weight, but requires an external ipfs node.

ipfs-api is an interesting one. Connect to an external gateway, and use that as both storage and resolve mechanism.

https://docs.rs/ipfs-api/0.11.0/ipfs_api/#writing-a-file-to-ipfs

IROH

From creators of IPFS & Filecoin. Written in rust, is embeddable, uses this cool new hashing algorithm, does hole-punching and has iroh-blobs. It outputs 'tickets' which point to a node + file hash.

It seems like a true schema (like ipfs / ipns) for resolving files is still missing, though.

I'm also unsure as to how performant this would be in practice. Is node discovery fast? Is only the first request slow? Can the network get clogged easily?

joepio avatar Jan 17 '21 13:01 joepio