Versioned Nodes Prior Art
There are a variety of similar systems and designs to versioned nodes. However, they all are designed for narrower applications, and do not quite implement the paradigm.
InterPlanetary File System
The InterPlanetary File System, dispite its name, is a general purpose content-addressed object store. It can only store one format, the IPFS Object shown below:
data IPFSObject = IPFSObject
{ ipfsData :: Bytes
, ipfsLinks :: [IPFSLink]
}
data IPFSLink = IPFSLink
{ linkName :: Text
, linkHash :: Part
, linkSize :: Natural
}
IPFS lacks encryption, explicit formats, flexible values, write capabilities, and capabilites for anything other than IPFS objects.
It may be possible to recognize common IPFS formats and present them to programs in those specific formats, but that is likely to be fragile.
Encoding for Robust Immutable Storage
ERIS defines a format for encrypted read-only content-addressed piles of bytes.
Its internal format contains a hierarchy of node types - leaf nodes (level 0) which contain data with no links and internal nodes (1 or greater) which contain no data with an ordered set of links to nodes of next level down:
struct Leaf {
/// Either 1 or 32kB of content.
content: Vec<u8>,
}
struct Internal {
links: Vec<Link>,
}
struct Link {
reference: [u8; 32],
key: [u8; 32],
}
Both the references and the keys are encrypted in intermediate nodes, requiring the nodes to be decrypted before child nodes can be fetched.
ERIS lacks explicit formats, any other value than a pile of bytes, write capabilities, and explicit capabilities generally.
Hyphanet (was Freenet)
Hyphanet is an encrypted content-addressed data sharing protocol. They define four types of keys to access data, but the documentation is light on details. The source code for CHKBlocks and SSKBlocks seems to indicate that each block contains a fixed-size header and data, up to 1022 data bytes for a CHKBlock and four short of 32kB for a SSKBlock. Within these blocks are a number of built-in document types, which may include links to other blocks.
The reference implementation is a bit of a mess and there’s no clear specification, so take this with a grain of salt.
Hyphanet definitely lacks support for concurrent edits and explicit formats. Each version has a single (or no) parent. I’m pretty sure that capabilities are embedded directly into a binary body, but I’m not actually sure.
Tahoe-LAFS
Tahoe Least-Authority File Store is an encrypted file store with mutable files and directories. It, like Freenet, has verification, read, and write keys. It has a few specific formats, for files and directories. It lacks support for concurrent edits, specifically warning not to do that.
Git
git is a distributed version control system. Internally it contains four types of objects, each with their own format. In theory, git should be able to be shoe-horned into a read-write vernode exchange format, albeit with only a few formats accepted.