V2 for Tree32¶
Tree Proof¶
Name 
Size 
Contents 

tag 
1bytes 
0b000000zy where y is tag of kinded_hash for before (0b0 for `Value, 0b1 for `Node), z is also tag of kinded_hash for after(same) 
version 
2 bytes 
int16 
before 
32 bytes 
hash 
after 
32 bytes 
hash 
state 
variable 
Tree¶
value of tree¶
Let p
be the byte length of length
. If length < (1<<8) then p =
1. Else if length < (1<<16) then p = 2. Otherwise p = 4.
Name 
Size 
Contents 

tag 
1 byte 
0b110000yy where yy is length tag (0b00 for p = 1, 0b01 for p = 2, 0b11 for p = 4) 
length 
p bytes 
byte length of value 
value 
(length) bytes 
bytes 
blinded_value of tree¶
Name 
Size 
Contents 

tag 
1 byte 
0b11001000 
hash 
32 bytes 
hash 
node of tree¶
Name 
Size 
Contents 

tag + length 
1 byte 
0b10yyyyyy where yyyyyy is length of list below (<=32) 
(step * tree) list 
variable 
blinded_node of tree¶
Name 
Size 
Contents 

tag 
1 byte 
0b11010000 
hash 
32 bytes 
hash 
inode of tree (sparse case)¶
When proofs have less than 15 trees, sparse case is selected. Otherwise, dense case is selected.
Name 
Size 
Contents 

tag + length 
1 byte 
0b00yyyyzz where yyyy is length of proofs(<15), zz is tag for length (0b00 for p = 1, 0b01 for p = 2, 0b10 for p = 4, 0b11 for p = 8) 
length 
p bytes 
int 
proofs 
variable 
sequence of (uint8 * Inode_tree) 
inode of tree (dense case)¶
Name 
Size 
Contents 

tag 
1 byte 
0b010000zz where zz is tag for length (0b00 for p = 1, 0b01 for p = 2, 0b10 for p = 4, 0b11 for p = 8) 
length 
p bytes 
int 
proofs 
variable 
sequence of Inode_tree (the number of inode_tree is 32) 
extender of tree¶
Name 
Size 
Contents 

tag 
1 byte 
0b110110yy where yy is tag for length (0b00 for p = 1, 0b01 for p = 2, 0b10 for p = 4, 0b11 for p = 8) 
length 
p bytes 
int 
segment 
variable 

proof 
variable 
Inode_tree¶
blinded_inode of inode_tree¶
Name 
Size 
Contents 

tag 
1 byte 
0b11000000 
hash 
32 bytes 
hash 
inode_values of inode_tree¶
Name 
Size 
Contents 

tag+length 
1 byte 
0b10yyyyyy where yyyyyy is length of list below (<=32) 
(step * tree) list 
variable 
inode_trees of inode_tree (sparse case)¶
Name 
Size 
Contents 

tag + length 
1 byte 
0b00yyyyzz where yyyy is length of proofs(<15), zz is tag for length (0b00 for p = 1, 0b01 for p = 2, 0b10 for p = 4, 0b11 for p = 8) 
length 
p bytes 
int 
proofs 
variable 
sequence of (uint8 * Inode_tree) 
inode_trees of inode_tree (dense case)¶
Name 
Size 
Contents 

tag 
1 byte 
0b010000yy where yy is tag for length (0b00 for p = 1, 0b01 for p = 2, 0b10 for p = 4, 0b11 for p = 8) 
length 
p bytes 
int 
proofs 
variable 
sequence of Inode_tree (the number of inode_tree is 32) 
inode_extender of inode_tree¶
Name 
Size 
Contents 

tag 
1 byte 
0b110100yy where yy is tag for length (0b00 for p = 1, 0b01 for p = 2, 0b10 for p = 4, 0b11 for p = 8) 
length 
p bytes 
int 
segment 
variable 

proof 
variable 
none of inode_tree¶
Used in proofs in inode of tree (dense case) and inode_trees of inode_tree (dense case)
Name 
Size 
Contents 

tag 
1 byte 
0b11100000 
Stream Proof¶
Name 
Size 
Contents 

tag 
1bytes 
0b000000zy for y is tag of kinded_hash for before(0b0 for `Value, 0b1 for `Node), z is also tag of kinded_hash for after(same) 
version 
2 bytes 
int16 
before 
32 bytes 
hash 
after 
32 bytes 
hash 
length 
4 bytes 
byte length of state 
state 
(length) bytes 
sequence of Elt 
Elt¶
value of elt¶
Let p
be the byte length of length
. If length < (1<<8) then p =
1. Else if length < (1<<16) then p = 2. Otherwise p = 4.
Name 
Size 
Contents 

tag 
1 byte 
0b110000yy where yy is length tag (0b00 for p = 1, 0b01 for p = 2, 0b11 for p = 4) 
length 
p bytes 
byte length of value 
value 
(length) bytes 
bytes 
node of elt¶
Name 
Size 
Contents 

tag + length 
1 byte 
0b10yyyyyy where yyyyyy is length of list below (<=32) 
(step * kinded_hash) list 
variable 
sequence of (Step * Kinded_hash) 
inode of elt (sparse case)¶
When proofs have less than 15 hashes, sparse case is selected.
Otherwise, dense case is selected. Hashes that proof
contains are encoded
as Optional_hash (some_case is always selected).
Name 
Size 
Contents 

tag + length 
1 byte 
0b00yyyyzz where yyyy is length of proofs(<15), zz is tag for length (0b00 for p = 1, 0b01 for p = 2, 0b10 for p = 4, 0b11 for p = 8) 
length 
p bytes 
int 
proofs 
variable 
sequence of (uint8 * Optional_hash) 
inode of elt (dense case)¶
Name 
Size 
Contents 

tag 
1 byte 
0b010000zz where zz is tag for length (0b00 for p = 1, 0b01 for p = 2, 0b10 for p = 4, 0b11 for p = 8) 
length 
p bytes 
int 
proofs 
variable 
sequence of Optional_hash (the number of hashes is 32) 
Kinded_hash¶
Name 
Size 
Contents 

tag 
1 byte 
0b00000000 for `Value, 0b00000001 for `Node 
hash 
32 bytes 
hash 
Other Components¶
Step¶
Name 
Size 
Contents 

length 
1 byte 
< 256 
content 
(length) bytes 
bytes 
Segment¶
Same as in V1 for Tree32.
The segment int is in 5 bits
10* is filled at the end of the bytes
n
segments need(n*5+8)/8
bytes
ex: Encoding of [aaaaa; bbbbb; ccccc; ddddd; eeeee; ..; zzzzz]
76543210765432107654.. .. 76543210
aaaaabbbbbcccccdddde.. .. zzzzz100
76543210765432107654.. .. 4321076543210
aaaaabbbbbcccccdddde.. .. yzzzzz1000000
76543210765432107654.. .. 54321076543210
aaaaabbbbbcccccdddde.. .. yzzzzz10000000
Name 
Size 
Contents 

length 
1 byte 
< 256 
content 
(length) bytes 
5bit integers with terminal 