惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
Apple Machine Learning Research
Apple Machine Learning Research
F
Fortinet All Blogs
罗磊的独立博客
爱范儿
爱范儿
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
C
CXSECURITY Database RSS Feed - CXSecurity.com
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
G
GRAHAM CLULEY
A
About on SuperTechFans
C
Cisco Blogs
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog
Project Zero
Project Zero
V
V2EX
K
Kaspersky official blog
P
Privacy International News Feed
博客园 - 叶小钗
I
Intezer
T
Threatpost
The GitHub Blog
The GitHub Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Vulnerabilities – Threatpost
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cybersecurity and Infrastructure Security Agency CISA
Cyberwarzone
Cyberwarzone
Microsoft Azure Blog
Microsoft Azure Blog
N
Netflix TechBlog - Medium
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 【当耐特】
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
S
Schneier on Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
The Cloudflare Blog
P
Palo Alto Networks Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tenable Blog

博客园 - daviyoung

Windows 11 22H2 安装 .NET Framework 3.5 完整教程 System.Threading.Timer 详细讲解 Agent 开发入门(一):从零构建你的第一个智能体 用 C# 开发一个解释器语言——基于《Crafting Interpreters》的实战系列(五)表达式求值 python使用plotly绘制图表 手把手搭建OPC UA服务器 图像处理库Pillow的使用:批量裁剪图片 python-docx库的使用:图片插入到word文档里 modbus(二)用NModbus4库实现Modbus tcp从站 Jenkins 容器化实践:Docker 部署与 CI/CD 流水线配置 Streamlit实战 用pycdc批量反编译pyc文件 以ENS 的 BaseRegistrarImplementation 合约为例,用web3.py调用合约 虚拟环境下安装包后,vs code仍然有下滑波浪线及显示找不到包(运行是正常的)的解决办法 用 C# 开发一个解释器语言——基于《Crafting Interpreters》的实战系列(四)可视化 语法树 Solidity开发ERC20智能合约claim token的功能 Solidity开发ERC20智能合约demo及部署到测试网 用 C# 开发一个解释器语言——基于《Crafting Interpreters》的实战系列(三)表达式的抽象语法树设计(Expr) 用 C# 开发一个解释器语言——基于《Crafting Interpreters》的实战系列(二)词法分析器
Merkle Tree
daviyoung · 2025-08-12 · via 博客园 - daviyoung

1. Merkle Tree 是什么

Merkle Tree 是一种 二叉哈希树(Binary Hash Tree),它的作用是把大量数据的哈希值组织成树状结构,用 一个根哈希(Merkle Root) 来代表全部数据的完整性。

你可以把它理解成:

"用一个短短的指纹(Merkle Root)证明整个数据库的内容没有被篡改。"


2. 结构示意

假设我们有 4 个数据块:A, B, C, D

  1. 对每个数据块做哈希:

    hA = hash(A)
    hB = hash(B)
    hC = hash(C)
    hD = hash(D)
    
  2. 两两合并再哈希:

    hAB = hash(hA + hB)
    hCD = hash(hC + hD)
    
  3. 最终合并得到根哈希:

    root = hash(hAB + hCD)
    

结构像这样:

        Merkle Root
        /        \
     hAB          hCD
    /  \         /   \
  hA    hB    hC     hD

3. 它的好处

✅ 快速验证数据是否在集合中

  • 你只需要提供少量节点的哈希值(Merkle Proof),就能证明某个数据在这棵树里。
  • 不用下载整个数据集。

✅ 节省存储和传输

  • 例如区块链节点,只需要保存 Merkle Root 就能校验交易。

✅ 高效的防篡改机制

  • 任何一个数据块被改动,最终的 Merkle Root 都会变化。

4. 在区块链中的用途

  1. 比特币 / 以太坊

    • 区块头(Block Header)里会存 交易的 Merkle Root,保证交易列表不可篡改。
  2. airdrop白名单

    • 如果一个airdrop活动有 100 万个地址,直接存到合约里会非常贵。

    • 解决方法:

      • 离线计算 Merkle Tree,把所有地址做成 Merkle Root
      • 部署合约时只存 Root
      • 领取空投时,用户提交自己的地址和 Merkle Proof(验证路径所需的所有兄弟节点哈希值的集合),合约用 Merkle Root 验证地址是否在白名单中。

5. Merkle Proof 验证过程

假设要验证 A 在树中:

  • 你提交:hA + 需要的兄弟节点哈希(比如 hBhCD)。
  • 链上合约按顺序拼接和哈希,直到算出 Merkle Root
  • 如果结果等于合约存的 Root,说明验证通过。

6. MerkleProof库

// Merkle树验证,调用MerkleProof库的verify()函数
    function _verify(bytes32 leaf, bytes32[] memory proof)
    internal view returns (bool)
    {
        return MerkleProof.verify(proof, root, leaf);
    }