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

❓什么是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)
推荐文章
Pectra 升级的核心:EIP-7702的原理分析和实操
来 The Web3, 学习史上最全面的区块链教程,挑战高薪
TON钱包签名、私钥导入与发送交易
Rust 实战:构建高效的异步 P2P 网络节点
深入理解solana-keygen
solana账户总结
以太坊POS工作原理详解:Epoch、Slot 与信标区块
以太坊发币 - 超简单发行 ERC-20 代币并上线到 holesky 上
NFT发行 - 超简单发行 NFT 到 holesky 上(包含 ERC165、ERC721Receiver 的含义)
更安全的签名 - EIP712 结构化签名
The Web3 社区--区块链运维课程大纲
带你手搓一个预言机 - 极简版的 ChainLink VRF 随机数生成
wrapped SOL 与 naive SOL 互相转换
以太坊代理模式的天花板 - 信标代理
DeFi 项目的基石 - ERC4626 代币金库协议的实现
The Web3 区块链钱包教程大纲
Uniswap价格批量查询与ws订阅行情
智能合约的身份保证 - 数字签名
SOL合约部署调用与销毁
ERC20授权的更优方案 - ERC20Permit 签名授权
事件监听 - 合约事件监听的方案汇总
Solana USDC 转账交易的细节
The Web3 社区 Move 共学招募
abigen 工具和 sol! 宏生成智能合约 ABI 数据结构
代币集大成者 - 手搓一个ERC1155合约并上线 holesky
监听合约事件 -- 手把手带你在线、离线部署 The Graph
MPC托管系统工作原理
The Web3 社区第三期区块链技术培训课程火热招生中--四个月高强度挑战,成为区块链技术高手
如何成为一名专业的 Web3 产品经理 ——Web3 产品经理课程招募!
Solana ts/rs 代码 nonce-account 签名