博客
关于我
死磕以太坊源码分析之MPT树-上
阅读量:407 次
发布时间:2019-03-05

本文共 1004 字,大约阅读时间需要 3 分钟。

MPT树(Merkle Patricia Trie)详解

前缀树(Trie)的基础

前缀树(Trie)是一种高效存储字符串的数据结构,通过分支节点和叶子节点组织数据,减少存储空间的浪费。每个节点包含一个索引数组,用于定位子节点,并存储从根节点到当前节点的路径组成的键的值。

前缀树的优缺点

  • 优点

    • 查询效率高,$O(m)$,$m$为键的长度。
    • 适合用于哈希表替代,减少IO开销。
  • 缺点

    • 存储空间浪费,尤其是处理长键时。
    • 攻击向量较多,可能导致性能下降。
  • Patricia Tree(压缩前缀树)的改进

    Patricia Tree通过将索引数组的大小限制为基数(如16),减少了存储空间的浪费,适合处理长键和大量相同前缀的字符串。

    Patricia Tree的结构

    • 分支节点:17个元素,前16个用于存储键的前缀,第17个用于存储终止节点。
    • 叶子节点:2个元素,键和值。
    • 扩展节点:2个元素,键和哈希值,用于指向子节点。

    MPT树的核心特性

    以太坊使用MPT树作为状态树,优化了键的编码方式:

  • 键编码

    • Raw编码:原生键编码,适合内部使用。
    • Hex编码:将键拆分为半字节,存储为数组,最后添加终止符。
    • Hex-Prefix编码:在存储时添加前缀,区分节点类型和长度,减少冗余。
  • 轻节点机制

    • 优化存储和加载流程,减少磁盘占用和内存压力。
    • 缓存机制,仅在需要时加载节点,提升性能。
  • 以太坊中的MPT树应用

    以太坊使用MPT树存储多种数据结构:

    • 状态树(State Trie):键为账户地址,值为账号信息。
    • 交易树(Transaction Trie):键为交易偏移量,值为交易数据。
    • 收据树(Receipts Trie):键为交易偏移量,值为交易收据。
    • 存储树(Storage Trie):存储合约状态,按账号分隔。

    节点编码与优化

    • 终止符:Hex编码中添加终止符,HP编码中添加前缀标识符。
    • 节点类型:HP编码区分扩展节点和叶子节点,优化存储和加载。

    改进后的MPT树优势

    • 存储效率:减少了冗余信息,节省空间。
    • 性能提升:轻节点机制降低了内存和磁盘占用,提高了查询速度。
    • 抗攻击能力:通过哈希计算和轻节点机制,减少了DoS攻击风险。

    总结

    MPT树通过优化节点结构和编码方式,解决了传统前缀树的存储和查询效率问题。其在以太坊中的应用,通过轻节点机制进一步提升了性能和安全性,成为高效存储键值对的关键数据结构。

    转载地址:http://toxzz.baihongyu.com/

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 实战篇——基于YOLOv8和OpenCV实现车速检测(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战|OpenCV实时弯道检测(详细步骤+源码)
    查看>>
    OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
    查看>>
    OpenCV与AI深度学习 | 工业缺陷检测中数据标注需要注意的几个事项
    查看>>
    OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
    查看>>
    OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 + 源码)
    查看>>
    OpenCV与AI深度学习 | 水下检测+扩散模型:或成明年CVPR最大惊喜!
    查看>>
    OpenCV与AI深度学习 | 深度学习检测小目标常用方法
    查看>>
    OpenCV与AI深度学习 | 超越YOLOv10/11、RT-DETRv2/3!中科大D-FINE重新定义边界框回归任务
    查看>>
    OpenCV与AI深度学习 | 高效开源的OCR工具:Surya-OCR介绍与使用
    查看>>
    OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)
    查看>>
    Opencv中KNN背景分割器
    查看>>
    OpenCV中基于已知相机方向的透视变形
    查看>>
    OpenCV中的监督学习
    查看>>
    opencv中读写视频
    查看>>
    OpenCV中遇到Microsoft C++ 异常 cv::Exception
    查看>>
    opencv之cv2.findContours和drawContours(python)
    查看>>
    opencv之namedWindow,imshow出现两个窗口
    查看>>
    opencv之模糊处理
    查看>>
    Opencv介绍及opencv3.0在 vs2010上的配置
    查看>>