|
1 | 1 | # Appendix A: Complete Element Type Reference |
2 | 2 |
|
3 | | -| Discriminant | Variant | TreeType | Fields | Cost Size | Purpose | |
| 3 | +> **Reading the table.** "Element disc" is the bincode discriminant of |
| 4 | +> the `Element` enum (one byte; persisted at the start of every |
| 5 | +> serialized element). "TreeType disc" is the discriminant of the |
| 6 | +> *separate* `TreeType` enum in `merk/src/tree_type/mod.rs` — it is NOT |
| 7 | +> the same numbering. Most rows list both the TreeType disc and its |
| 8 | +> variant name (e.g. `0 (NormalTree)`) to keep the distinction obvious; |
| 9 | +> `N/A` means the Element variant is not a tree. |
| 10 | +
|
| 11 | +| Element disc | Variant | TreeType disc | Fields | Cost Size | Purpose | |
4 | 12 | |---|---|---|---|---|---| |
5 | 13 | | 0 | `Item` | N/A | `(value, flags)` | varies | Basic key-value storage | |
6 | 14 | | 1 | `Reference` | N/A | `(path, max_hop, flags)` | varies | Link between elements | |
7 | 15 | | 2 | `Tree` | 0 (NormalTree) | `(root_key, flags)` | TREE_COST_SIZE | Container for subtrees | |
8 | 16 | | 3 | `SumItem` | N/A | `(value, flags)` | varies | Contributes to parent sum | |
9 | 17 | | 4 | `SumTree` | 1 (SumTree) | `(root_key, sum, flags)` | SUM_TREE_COST_SIZE | Maintains sum of descendants | |
10 | | -| 5 | `BigSumTree` | 4 (BigSumTree) | `(root_key, sum128, flags)` | BIG_SUM_TREE_COST_SIZE | 128-bit sum tree | |
11 | | -| 6 | `CountTree` | 2 (CountTree) | `(root_key, count, flags)` | COUNT_TREE_COST_SIZE | Element counting tree | |
12 | | -| 7 | `CountSumTree` | 3 (CountSumTree) | `(root_key, count, sum, flags)` | COUNT_SUM_TREE_COST_SIZE | Combined count + sum | |
13 | | -| 8 | `ItemWithSumItem` | N/A | `(value, sum, flags)` | varies | Item with sum contribution | |
14 | | -| 9 | `ProvableCountTree` | 5 | `(root_key, count, flags)` | COUNT_TREE_COST_SIZE | Provable count tree | |
15 | | -| 10 | `ProvableCountSumTree` | 6 | `(root_key, count, sum, flags)` | COUNT_SUM_TREE_COST_SIZE | Provable count + sum | |
16 | | -| 11 | `CommitmentTree` | 7 | `(total_count: u64, chunk_power: u8, flags)` | 12 | ZK-friendly Sinsemilla + BulkAppendTree | |
17 | | -| 12 | `MmrTree` | 8 | `(mmr_size: u64, flags)` | 11 | Append-only MMR log | |
18 | | -| 13 | `BulkAppendTree` | 9 | `(total_count: u64, chunk_power: u8, flags)` | 12 | High-throughput append-only log | |
19 | | -| 14 | `DenseAppendOnlyFixedSizeTree` | 10 | `(count: u16, height: u8, flags)` | 6 | Dense fixed-capacity Merkle storage | |
| 18 | +| 5 | `BigSumTree` | 2 (BigSumTree) | `(root_key, sum128, flags)` | BIG_SUM_TREE_COST_SIZE | 128-bit sum tree | |
| 19 | +| 6 | `CountTree` | 3 (CountTree) | `(root_key, count, flags)` | COUNT_TREE_COST_SIZE | Element counting tree | |
| 20 | +| 7 | `CountSumTree` | 4 (CountSumTree) | `(root_key, count, sum, flags)` | COUNT_SUM_TREE_COST_SIZE | Combined count + sum | |
| 21 | +| 8 | `ProvableCountTree` | 5 (ProvableCountTree) | `(root_key, count, flags)` | COUNT_TREE_COST_SIZE | Provable count tree | |
| 22 | +| 9 | `ItemWithSumItem` | N/A | `(value, sum, flags)` | varies | Item with sum contribution | |
| 23 | +| 10 | `ProvableCountSumTree` | 6 (ProvableCountSumTree) | `(root_key, count, sum, flags)` | COUNT_SUM_TREE_COST_SIZE | Provable count + sum (only count in hash) | |
| 24 | +| 11 | `CommitmentTree` | 7 (CommitmentTree) | `(total_count: u64, chunk_power: u8, flags)` | 12 | ZK-friendly Sinsemilla + BulkAppendTree | |
| 25 | +| 12 | `MmrTree` | 8 (MmrTree) | `(mmr_size: u64, flags)` | 11 | Append-only MMR log | |
| 26 | +| 13 | `BulkAppendTree` | 9 (BulkAppendTree) | `(total_count: u64, chunk_power: u8, flags)` | 12 | High-throughput append-only log | |
| 27 | +| 14 | `DenseAppendOnlyFixedSizeTree` | 10 (DenseAppendOnlyFixedSizeTree) | `(count: u16, height: u8, flags)` | 6 | Dense fixed-capacity Merkle storage | |
20 | 28 | | 15 | `NonCounted` | wrapper | `Box<Element>` | inner + 1 byte | Opts inner out of parent count aggregation | |
21 | 29 | | 16 | `NotSummed` | wrapper | `Box<Element>` | inner + 1 byte | Opts inner out of parent sum aggregation | |
22 | | -| 17 | `ProvableSumTree` | 11 | `(root_key, sum: i64, flags)` | SUM_TREE_COST_SIZE | Sum baked into hash (see [Aggregate Sum on Range Queries](aggregate-sum-on-range-queries.md)) | |
| 30 | +| 17 | `ProvableSumTree` | 11 (ProvableSumTree) | `(root_key, sum: i64, flags)` | SUM_TREE_COST_SIZE | Sum baked into hash (see [Aggregate Sum on Range Queries](aggregate-sum-on-range-queries.md)) | |
23 | 31 |
|
24 | 32 | **Notes:** |
25 | 33 | - Discriminants 11–14 are **non-Merk trees**: data lives outside a child Merk subtree |
|
0 commit comments