From f3acd9dad4004032a5b228c27020da7ccf93f0d9 Mon Sep 17 00:00:00 2001 From: aspnxdd Date: Mon, 4 Nov 2024 13:19:09 +0100 Subject: [PATCH] feat: expand canopy depth docs --- docs/advanced/state-compression.md | 18 +++++++++++++++--- .../docs/compression/canopy-depth-1.png | Bin 0 -> 31795 bytes 2 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 public/assets/docs/compression/canopy-depth-1.png diff --git a/docs/advanced/state-compression.md b/docs/advanced/state-compression.md index 99860da5e..cdc4c8749 100644 --- a/docs/advanced/state-compression.md +++ b/docs/advanced/state-compression.md @@ -193,14 +193,14 @@ sized and set at tree creation via this `maxBufferSize` value. ### Canopy depth -The "canopy depth", sometimes called the canopy size, is the number of proof -nodes that are cached/stored on-chain for any given proof path. +The "canopy depth," also known as the canopy size, refers to the number of proof +node levels that are cached or stored onchain for a given proof path. When performing an update action on a `leaf`, like transferring ownership (e.g. selling a compressed NFT), the **complete** proof path must be used to verify original ownership of the leaf and therefore allow for the update action. This verification is performed using the **complete** proof path to correctly compute -the current `root hash` (or any cached `root hash` via the on-chain "concurrent +the current `root hash` (or any cached `root hash` via the onchain "concurrent buffer"). The larger a tree's max depth is, the more proof nodes are required to perform @@ -222,6 +222,18 @@ For example, a tree with a max depth of `14` would require `14` total proof nodes. With a canopy of `10`, only `4` proof nodes are required to be submitted per update transaction. +![Canopy depth of 1 for a Concurrent Merkle Tree of max depth of 3](/assets/docs/compression/canopy-depth-1.png) + +Consider another example, this time with a tree of max depth `3`. If we want to +apply an action to one of the tree’s leaves—such as updating `R4`—we need to +provide proofs for `L4` and `R2`. However, we can omit `R1` since it is already +cached/stored onchain due to our canopy depth of `1`, which ensures that all +nodes at level 1 (`L1` and `R1`) are stored onchain. This results in a total of +2 required proofs. + +Therefore, the number of proofs required to update a leaf is equal to the max +depth minus the canopy depth. In this example, `3 - 1 = 2`. + #### The larger the canopy depth value, the higher the cost The `canopyDepth` value is also a primary factor of cost when creating a tree diff --git a/public/assets/docs/compression/canopy-depth-1.png b/public/assets/docs/compression/canopy-depth-1.png new file mode 100644 index 0000000000000000000000000000000000000000..63bd3e31edd7e374e30a339afee99fef53b8aaa3 GIT binary patch literal 31795 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 Gr~d<~!Oe>R literal 0 HcmV?d00001