区块链原理与技术
  • 区块链原理与技术
  • 比特币密码学基础
    • 密码学简介
    • 哈希函数
    • 数字签名
  • 比特币数据结构
    • 哈希指针
    • 默克尔树
    • 数据结构
  • 比特币交易模型
    • 身份确认
    • 交易服务
  • 比特币共识机制
    • 共识机制
    • 区块链的共识机制
  • 挖矿&脚本
    • 挖矿
    • 比特币脚本
    • 多重签名
  • 区块链分叉
    • 硬分叉与软分叉
  • 问题
  • 比特币匿名性
    • Page 1
  • 以太坊数据结构
    • 以太坊概述
    • 以太坊账户
    • 以太坊状态树
  • 交易树&收据树
    • 以太坊交易树&收据树
    • 布隆过滤器
    • GHOST协议
  • 以太坊:从PoW到PoS
    • 工作量证明PoW(节能)
    • 权益证明PoS
Powered by GitBook
On this page
  1. 以太坊数据结构

以太坊状态树

Previous以太坊账户Next以太坊交易树&收据树

Last updated 4 months ago

以太坊采用基于账户的模式,系统中显式记录每个账户的状态(余额、nonce等)。

  • 账户地址:160字节

  • 地址总数:2.5亿

状态树实现了从账户地址到账户状态的映射,状态包含了:

  • 余额(balance)

  • 交易次数(nonce)

  • 合约账户中还包含了code(代码)和存储(storage)

账户地址-账户状态组成了许多key- value pairs,即hash table。

能否像BTC中,将哈希表的内容组织为Merkel Tree?

不能。BTC每次发布区块新状态,需要重新组织Merkel Tree。如果用Merkel Tree来组织账户信息,规模会越来越庞大,发生变化的仅仅为很少一部份数据,每次重新构建Merkel Tree代价很大。每个节点自己组织Merkel Tree,树的形状不同。为了保证所有节点的一致性和查找速度,需要进行排序。

MPT(Modified Patricia Tree)

Trie 被称为字典树,又称单词查找树或键树,常用于统计和排序大量的字符串,如搜索引擎的文本磁盘统计等。

可以利用公共前缀进行状态压缩,就得到了Patricia Tree:

每次发布新的区块时,状态树中的新节点的值会发生变化,并不是更改原值,而是新建一些分支,保留原来的状态(因此可以实现回滚)。

为什么以太坊不在原节点上直接修改,要保留历史状态?

为了支持回滚,以太坊分叉很普遍;智能合约功能复杂。