Versions

Versions provide read-write storage.

They contain some ciphertext, a set of references to other Objects, and an ordered set of references to parent Versions.

#![allow(unused)]
fn main() {
struct Version {
  data: Ciphertext,
  refs: BTreeSet<Reference>,
  vers: Vec<VersionSignature>,
}
}

Version Serialization

Versions are serialized using atlv, as an array of those three fields, using the tag 1. The references must be listed in lexicographic order. As an example, a 128 byte ciphertext with a single reference to another braid and a single parent:

offset  bytes  description
00:     07     the tag (1) and type (array) of the version
01:     03     the number of elements in the array
02:     01     the tag (0) and type (binary) of the ciphertext
03:     01 00  the length of the ciphertext (128 bytes)
05…84:  ...    the ciphertext
85:     23     the tag (8) and type (array) of the reference vector
86:     01     the length of the reference vector
87:     4a     the tag (18) and type (union) of a Braid public key reference
88:     01 20  the tag (0) and type (binary) and length (32 bytes) of a blake3-schnorr-ristretto255 public key
8a…a9:  ...    the content of the blake3-schnorr-ristretto255 public key
aa:     47     the tag (17) and type (array) of the parents vector
ab:     01     the length of the parents vector
ac:     01 40  the tag (0) and type (binary) and length (64 bytes) of a blake3-schnorr-ristretto255 signature
ad…ed:  ...    the content of the blake3-schnorr-ristretto255 signature