值得信赖的区块链资讯!
零知识证明 – 一种新型的Merkle树(Shrubs)
这几天在日本大阪正在举办Devcon 5。议题中有个topic吸引我的眼球:
Shrubs – A New Gas Efficient Privacy Protocol
在以太坊上,传统的Merkle树(深度为33)添加一个叶子节点,除了计算33次Hash函数外,还需要更新33个节点(也就是需要读并且更新33个存储空间)。而更新一个节点的存储费用是昂贵的。更新33个256bit的存储,大约需要180w的GAS费用。
Shrubs就提出了一种Merkle树的变种,每次添加一个叶子节点,只需要O(1)次存储更新。这种变种的Merkle树,不只是用一个树根节点来“代表”整棵树。而是用一系列节点(个数等于深度)来”代表“整棵树,保证所有的叶子节点都能”索引“到这些节点。在变种的Merkle上,每一层选择一个节点。在添加叶子节点的时候,在不破坏其他“子树”的根的前提下,只要更新到离该叶子节点最近的子树根即可。
可以想象成,Shrubs的变种Merkle树,其实是由一棵棵的子树的树根组成。这些子树能覆盖所有的已经添加的叶子节点。这些子树的树根可以代表一棵完整的Merkle树(唯一性)。而且通过子树的路径证明,就能证明某个叶子节点在这颗完整的Merkle树上。因为每次只需要更新子树的树根,所以,每次添加叶子节点只需要一次节点数据的更新。
这些子树的树根,又能推导出整个merkle树最右边的path。这也是,Shrubs的说明中,用merkle树的最右边path代表merkle树的原因。
Shrubs的变种Merkle树的算法原型昨天更新到Github上,地址如下:
https://github.com/celo-org/shrubs
核心算法逻辑在contracts/MerkleTreeLib.sol中的insert和verify函数。
1. 插入节点
insert函数实现了叶子节点的插入逻辑。filled_subtrees就是每个选择的子树的根。insert函数的主要逻辑,就是选择子树,更新子树的根。
function insert(uint256 leaf) internal { uint32 leaf_index = next_index; uint32 current_index = next_index; next_index += 1; uint256 current_level_hash = leaf; uint256 left; uint256 right; bool all_were_right = true; for (uint8 i = 0; i < levels; i++) { if (current_index % 2 == 0) { left = current_level_hash; right = zeros[i]; filled_subtrees[i] = current_level_hash; break; } else { left = filled_subtrees[i]; right = current_level_hash; } current_level_hash = HashLeftRight(left, right); current_index /= 2; } tree_leaves.push(leaf); }
filled_subtrees采用空节点初始化。在新插入一个节点时,找到它最低的左节点作为选择的子树,并更新树根。current_index是每一层上节点的序号。选择左边节点是通过current_index%2==0实现。
以深度为4的Merkle树为例,添加第一个叶子节点后,各个子树的树根如下(青色节点是初始化的filled_subtrees节点,蓝色是更新的节点):
添加第二和三个叶子节点分别如下:
整个添加过程如下面动图效果(橙色连线代表hash计算):
1.2 验证节点
verify函数是验证某个叶子节点在Merkle树上的示例。只要能给定一条路径,能计算出一个子树根即可。
function verify(uint256 leaf, uint256[] memory path, uint32 leaf_index) internal { uint32 current_index = leaf_index; uint256 current_level_hash = leaf; uint256 left; uint256 right; for (uint8 i = 0; i < levels; i++) { if (mode == 0 && filled_subtrees[i] == current_level_hash) { emit LeafVerified(leaf, leaf_index, i, true); return; } if (current_index % 2 == 0) { left = current_level_hash; right = path[i]; } else { left = path[i]; right = current_level_hash; } current_level_hash = HashLeftRight(left, right); current_index /= 2; } } }
2.1 数据更新
Shrubs变种Merkle树,每次添加节点,只需要更新一个子树的树根。从数据更新角度,算法复杂度O(1)。
2.2 hash计算
从hash计算的角度,在添加左节点时,无需hash计算。在添加右节点时,hash计算和选择的子树深度相等。越靠右的节点,子树选择也高,hash计算也越多。即使这样,也比传统的Merkle树计算量小。
假设Merkle树的树高是n,则传统Merkle树添加所有的叶子节点,需要2^n*n次计算。Shrubs变种Merkle树添加所有的叶子节点,只需要(1+2+…+n) = (n*(n-1))/2次计算
在Devcon5上,Shrubs公开了变种Merkle树的测试结果。叶子插入的gas消耗,平均情况下,9.6w。
图中,Shrubs最坏情况下的GAS消耗应该不是168w,应该在40w左右。
如果使用Groth16零知识证明的话,大约需要不到50w的GAS(EIP1008情况下)。
值得一提的是,使用Groth16零知识证明,需要将所有的子树的树根作为public input。
总结:
为了解决以太坊智能合约中Merkle树更新存储开销较大的问题,Shrubs提出了一种新型的Merkle树变种。这种变种的Merkle树用多个子树的树根来代表一个Merkle树。每次添加一个叶子节点,只需要O(1)次存储更新,平均情况下,只需要9.6w的GAS。使用Groth16算法,证明叶子节点在树上,也只需要不到50w的GAS。
附上,好朋友从现场发回的其他照片,也分享给小伙伴们(图片中有一些地方有错误,发现错误的小伙伴留言,有奖励~):
比推快讯
更多 >>- 哈萨克斯坦正以 Solana 作为核心,推进国家加密与区块链布局
- 美 SEC 主席:DTC 参与者可直接将代币化证券转入其他参与者的注册钱包
- 华帜教育 RWA 联合 Kuant.ai 进军韩国市场
- 过去 24 小时 CEX 净流出 426.48 枚 BTC
- 英国多党派议员呼吁修订英格兰银行提出的稳定币监管框架
- 摩根大通数字资产主管:在 Solana 生态中涌现的开创性构想,最终会沉淀为适合监管市场的成熟方案
- Solana Mobile:与芯片制造商合作,计划将硬件集成套件引入超 20 亿部安卓手机
- 数据:Pump Fun 交易量已连续四个月下降
- 数据:上市公司和私企自 2023 年 1 月以来已累计增持 88.3 万枚 BTC
- RAVE 价格触及 0.67 美元,24 小时涨幅 413%
- Pyth Network 推出 PYTH 代币储备并将每月在公开市场进行代币回购
- 疑似 TANSSI 团队铸造 4500 万枚代币,距离上次大额增发仅过去 3 周
- 犬系 Meme 再添新成员,X Layer 链 DOGSHIT 代币 12 月 13 日上线
- 比特币矿企 Cango 的 BTC 总持有量突破 7100 枚,本周挖矿产出 131 枚
- 矿企 Bitdeer 本周产出 136.3 枚 BTC,总持仓增至 1994.1 枚
- 数据:过去 24h Binance 净流入 3.56 亿 USDT
- Opinion 交易量受用户对冲需求影响飙升至 3 亿美元,超越 Polymarket
- 数据:上市公司、政府、ETF 及交易所共持有 594 万枚比特币,占流通量 29.8%
- 疑似 BitMine 地址从 BitGo 收到 14,959 枚 ETH
- 香港金发局提出策略框架:5-10 年逐步提升支持代币化发行及交易后运作能力
- Delphi Digital:若 BTC 能守住 9 万至 11 万美元区间,年底有望迎来反弹
- 数据:AVNT 24 小时跌超 13%,多个代币触及今日新低
- 灰度再次向 Coinbase 转入约 14684 枚 ETH 和 252 枚 BTC,价值超 7000 万美元
- OKX:此前监测到人为操控 OM 价格的确凿证据,多项法律诉讼与司法程序正在进行中
- 某波段地址抛售 3296 枚 ETH,获利 29.2 万美元
- 涉嫌谋杀联合健康 CEO 的 Luigi 被捕时携带记录助记词的纸条
- 数据,美国 XRP 现货 ETF 单日总净流入 2017 万美元
- RootData:KAITO 将于一周后解锁价值约 173 万美元的代币
- 玻利维亚区块链协会向政府提议在以太坊上代币化黄金等贵金属
- 香港金管局:与“香港云泊控股/云泊控股 2.0”平台无任何关系,警惕稳定币诈骗
- 先锋集团高管发言仍将比特币比作数字 Labubu,称其缺乏长期投资价值
- 疑属 Polychain Capital 的钱包将 411.4 万枚 PENDLE 转进 FalconX,或亏损 325 万美元
- Fogo 取消原定于 12 月 17 日的公售计划,转为发放空投
- 数据:Hyperliquid 平台鲸鱼当前持仓 54.16 亿美元,多空持仓比为 0.93
- 先锋集团高管:比特币是一种投机性资产,但在通胀/动荡下或有实际应用
- 某鲸鱼地址 8 小时前花费 539.6 枚 BNB 买入 165 万枚 RAVE 代币
- 特朗普长子评RAVE/USD1 交易对上线 Aster:这是真正循序渐进的普及
- Coinbase:美联储隐形 QE将对加密市场形成支撑,政策环境可能比预期更为温和
- 巴西最大私人银行 Itaú:建议将不超过 3% 的资产配置于比特币
- NYDIG 研究主管:股票代币化不会立即为加密市场带来巨大收益,其效益将逐步显现
- 加密股周五收盘普跌,以太坊财库股遭遇重挫,BMNR 收跌 9.17%
- 特朗普:倾向于沃什或哈塞特执掌美联储,一年后利率应不高于 1%
- 加密恐慌指数跌至 23,重回极度恐慌区间
- 知情人士:Kalshi 为 Coinbase 预测市场初期唯一运营商
- 巴基斯坦与币安签署谅解备忘录,拟探索最高 20 亿美元资产代币化
- Coinbase 上币路线图新增 Lighter (LIGHTER)
- Ripple、Circle、BitGo 等五家加密公司获批成为信托银行
- Citadel Securities 与 DeFi 领域就监管问题在 SEC 通信中展开争论
- 巴基斯坦正在将 BTC 纳入经济基础设施,并开展 BTC 挖矿与 AI 业务
- 数据:ETH 当前全网 8 小时平均资金费率为 0.0011%
比推专栏
更多 >>观点
比推热门文章
- 美 SEC 主席:DTC 参与者可直接将代币化证券转入其他参与者的注册钱包
- 华帜教育 RWA 联合 Kuant.ai 进军韩国市场
- 过去 24 小时 CEX 净流出 426.48 枚 BTC
- 英国多党派议员呼吁修订英格兰银行提出的稳定币监管框架
- 摩根大通数字资产主管:在 Solana 生态中涌现的开创性构想,最终会沉淀为适合监管市场的成熟方案
- Solana Mobile:与芯片制造商合作,计划将硬件集成套件引入超 20 亿部安卓手机
- 数据:Pump Fun 交易量已连续四个月下降
- 数据:上市公司和私企自 2023 年 1 月以来已累计增持 88.3 万枚 BTC
- RAVE 价格触及 0.67 美元,24 小时涨幅 413%
- Pyth Network 推出 PYTH 代币储备并将每月在公开市场进行代币回购
比推 APP



