The point of difference is where Prolly Trees draw on ideas from Merkle Trees, widely used in distributed protocols such as Bitcoin and IPFS. Instead of internal nodes storing pointers to child nodes, and leaf nodes storing key value pairs (or pointers to key value pairs), both the leaf nodes and the internal nodes are variable-length and content-addressed. The child pointers of the internal nodes are the content addresses of the leaf or internal nodes that they point to. This means the actual values themselves can be stored in an immutable content-addressed chunk store, and the content addresses used as the "pointers" in the Prolly Tree. The benefit of this architecture is it facilitates structural sharing. When only a few values in a table, stored as a Prolly Tree, change, then we need only write the new values to a content addressed chunk, and recompute the nodes that lead to content addresses to the updated values. The rest of the tree still consists of content addresses (i.e. pointers) to the same chunks. The result of this is that the storage footprint of different versions of a table is proportional to the size of the changes between the two versions. This is called structural sharing, and it's an important mechanism for making Dolt feasible.