小白专享-图解以太坊编程

2025年06月30日更新 16 人订阅
专栏简介 最基础的数据结构 - Merkle 树 MPT树前置 - 前缀树 以太坊的核心数据结构 - MPT树 以太坊数据检索的基石 - 布隆过滤器 入门以太坊的编程的第一步 - Solidity 基本语法 Gas优化的核心 - 以太坊数据存储布局及内存优化 以太坊进阶操作 - 合约调用、地址预测、发送与接收 ETH 以太坊编程进阶 - ABI 编码、函数选择器、合约升级 以太坊代理模式的进阶 - 钻石代理和最小代理 以太坊代理模式的天花板 - 信标代理 以太坊发币 - 超简单发行 ERC-20 代币并上线到 holesky 上 NFT发行 - 超简单发行 NFT 到 holesky 上(包含 ERC165、ERC721Receiver 的含义) 带你手搓一个预言机 - 极简版的 ChainLink VRF 随机数生成 监听合约事件 -- 手把手带你在线、离线部署 The Graph 事件监听 - 合约事件监听的方案汇总 代币集大成者 - 手搓一个ERC1155合约并上线 holesky DeFi 项目的基石 - ERC4626 代币金库协议的实现 智能合约的身份保证 - 数字签名 更安全的签名 - EIP712 结构化签名 ERC20授权的更优方案 - ERC20Permit 签名授权 更安全的钱包 - 最小代码手搓 gnosis safe 多签钱包 空投大杂烩 - 合约实现空投发放的三种方案 发币防止大户提前跑路 - 手搓一个线性释放合约 你也不想你的代币被盗吧? - 手搓实现代币锁和时间锁 Pectra 升级的核心:EIP-7702的原理分析和实操 Resupply 黑客事件分析

以太坊的核心数据结构 - MPT树

  • shawn_shaw
  • 发布于 2025-04-13 08:18
  • 阅读 747

MPT树结合了PatriciaTrie(压缩前缀树)和Merkle树的特点。 将中间节点的字符串换成哈希值,得到的就是一棵MPT树。 一句话总结就是:MPT树就是一棵带有hash验证功能的压缩前缀树。

❓什么是MPT树

  • 结合了Patricia Trie (压缩前缀树)和 Merkle 树的特点,将中间节点的字符串换成哈希值,得到的就是一棵MPT树。
  • 一句话总结就是:MPT树就是一棵带有hash验证功能的压缩前缀树

⭐️压缩前缀树的简单模拟

1. 节点种类

  1. leaf节点:路径的终点,包含nibble编码后剩余的key和完整的value
  2. extension节点:表示压缩的路径,和压缩前缀树中的压缩节点类似。
  3. branch节点:包含16个key槽和一个值槽,总共17个槽。每个槽用来存放下一个节点的hash。

2. nibble编码

用来对路径进行压缩编码,称为半字节编码,可以用来压缩key的长度。

3. RLP编码

用来对node和value进行编码,统一成字节数组。

4. hash编码

使用的是keccak-256算法,不是标准的SHA3。

5. 举例说明

假设我们要创建一个以太坊的状态树,存在key-value如下:

key(地址) value(账户状态)
0x10a V1
0x10b V2
0x20c V3
0x20d V4
1. 对key进行nibble编码后找公共前缀:
找到公共前缀10,20
2. 构建extension节点和branch节点:
使用公共前缀可以建立10,20两个extension节点。每个extension节点只能指向一个branch节点。
3. 构建叶子节点:
叶子节点包含路径中剩余的key和完整的value

完成后的树结构:

image.png

🌏MPT树的特点

  1. 前缀共享:前缀树的特点,提供前缀共享能力。
  2. 路径压缩:压缩前缀树的特点,提供路径压缩,减少树高度。
  3. 默克尔验证:默克尔树的特点,提供确定的结构,和默克尔验证的能力。
  4. 插入删除查找高效:查找复杂度为O(n)

🌛MPT树的应用

  1. 以太坊的底层数据结构:以太坊的四棵树的底层数据结构都是MPT树(状态树、交易树、收据树、存储树)
点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论