Appendix A: Complete Element Type Reference

DiscriminantVariantTreeTypeFieldsCost SizePurpose
0ItemN/A(value, flags)variesBasic key-value storage
1ReferenceN/A(path, max_hop, flags)variesLink between elements
2Tree0 (NormalTree)(root_key, flags)TREE_COST_SIZEContainer for subtrees
3SumItemN/A(value, flags)variesContributes to parent sum
4SumTree1 (SumTree)(root_key, sum, flags)SUM_TREE_COST_SIZEMaintains sum of descendants
5BigSumTree4 (BigSumTree)(root_key, sum128, flags)BIG_SUM_TREE_COST_SIZE128-bit sum tree
6CountTree2 (CountTree)(root_key, count, flags)COUNT_TREE_COST_SIZEElement counting tree
7CountSumTree3 (CountSumTree)(root_key, count, sum, flags)COUNT_SUM_TREE_COST_SIZECombined count + sum
8ItemWithSumItemN/A(value, sum, flags)variesItem with sum contribution
9ProvableCountTree5(root_key, count, flags)COUNT_TREE_COST_SIZEProvable count tree
10ProvableCountSumTree6(root_key, count, sum, flags)COUNT_SUM_TREE_COST_SIZEProvable count + sum
11CommitmentTree7(total_count: u64, chunk_power: u8, flags)12ZK-friendly Sinsemilla + BulkAppendTree
12MmrTree8(mmr_size: u64, flags)11Append-only MMR log
13BulkAppendTree9(total_count: u64, chunk_power: u8, flags)12High-throughput append-only log
14DenseAppendOnlyFixedSizeTree10(count: u16, height: u8, flags)6Dense fixed-capacity Merkle storage

Notes:

  • Discriminants 11–14 are non-Merk trees: data lives outside a child Merk subtree
    • All four store non-Merk data in the data column
    • CommitmentTree stores its Sinsemilla frontier alongside BulkAppendTree entries in the same data column (key b"__ct_data__")
  • Non-Merk trees do NOT have a root_key field — their type-specific root hash flows as the Merk child hash via insert_subtree
  • CommitmentTree uses Sinsemilla hashing (Pallas curve); all others use Blake3
  • Cost behavior for non-Merk trees follows NormalTree (BasicMerkNode, no aggregation)
  • DenseAppendOnlyFixedSizeTree count is u16 (max 65,535); heights restricted to 1..=16