Virtual Nodes

A virtual node ("vnode") is an abstraction over files and directories. It describes some basic structure that all nodes in the graph conform to:

TypeScript
Haskell
TypeScript
type VirtualNode = File | Directory | Symlink
Haskell
data VirtualNode
= FileNode File
| DirectoryNode Directory
| Symlink DNSLink

Encrypted Node

An encrypted node is a virtual node (or subtype) which has been encrypted. An external key is required to read this node. See the section on the private tree for more detail of the architecture of this in practice.

TypeScript
Haskell
TypeScript
read(key: AES256, eNode: Encrypted<VNode>): Result<Failure, VNode>
Haskell
read :: AES256 -> Encrypted VirtualNode -> Either Failure VirtualNode

Node Segments

A node is broken into two segments: header and content. There are a number of reasons for this layout, not least of which is keeping the content (userland) in a strictly separated namespace from the header (system managed).

These segments are stored as separate nodes at the protocol layer, but together at the level of application abstraction.

+---------------------------+
| VirtualNode |
| |
| +--------+ +---------+ |
| | Header | | Content | |
| +--------+ +---------+ |
| |
+---------------------------+

Contains information about the node and its contents. This includes information such as node size, tags, caches, indexes, and pointers to previous versions. This segment does cause changes in structure at the protocol layer with elements like previous version pointers.

The header is primarily system (SDK) managed, but may be influenced by the user (e.g. adding tags).

The information stored in the header segment is descriptive. It is structural at the protocol layer, but not at the application layer.

Content

The actual information storage and linking to other nodes. Links to the actual raw contents of a file. This is an internal detail, and that this is a separate segment is generally hidden from end users.

The information stored in the content segment is primarily operational. It contains the primary semantic links that get exposed to the end user.