http://www.7klian.com

零常识证明 - 以太坊上一种新型的Merkle树(Shrubs)

uint32 leaf_index = next_index;
} else {
break;
}


tree_leaves.push(leaf);
if (current_index % 2 == 0) {
uint32 current_index = next_index;
uint256 left;



1. 插入节点

1. 焦点算法

right = current_level_hash;
function insert(uint256 leaf) internal {
filled_subtrees回收空节点初始化。在新插入一个节点时,找到它最低的左节点作为选择的子树,并更新树根。current_index是每一层上节点的序号。选择左边节点是通过current_index%2==0实现。
current_index /= 2;


可以想象成,,Shrubs的变种Merkle树,其实是由一棵棵的子树的树根构成。这些子树能包围所有的已经添加的叶子节点。这些子树的树根可以代表一棵完整的Merkle树(独一性)。并且通过子树的路径证明,就能证明某个叶子节点在这颗完整的Merkle树上。因为每次只需要更新子树的树根,所以,每次添加叶子节点只需要一次节点数据的更新。
uint256 current_level_hash = leaf;
焦点算法逻辑在contracts/MerkleTreeLib.sol中的insert和verify函数。


next_index += 1;
Shrubs就提出了

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读