16 以太坊中的数据结构及其状态树
——————>> 二刷分界线。 以太坊中的数据结构 以太坊中的账户地址是160位(20个字节),一般表示成四十个十六进制的数。 简单的hash表来实现怎么样? 查询、更新都是在常数时间内完成的,另外这种结构无法很好的提供hash proof,比如要签署一个合约:需要提供一下账户余额,这将怎么提供呢: 一种方法是将哈希表中的元素组织成一棵Merkle tree,算出一个根哈希值保存在block header中,公布出去。 存在的问题:假如要产生新的区块,新的区块的到来必将引起哈希表中的内容发生变化,这样我们就需要重新计算一遍所有账户的内容生成一棵新的Merkle tree,这样的代价太大了(账户数量太多)。而实际上发生变化的账户只是一小部分,大部分用户的状态是不会发生改变的,所以每次都要重新构建一棵Merkle tree代价是很大的。 比特币系统中也是每出现一个区块就要构建一棵Merkle tree,但是为什么就没有这个问题?:比特币的Merkle tree是将交易组装成一棵Merkle tree,比特币的Merkle tree在每次重新构建完之后是不会更改的,区块里有多少交易呢:1m 每个交易250字节 所以最多4000个 实际上很多交易是几百个,所以我们每次发布一个区块都是要把几百个到几千个区块构建成一个新的Merkle tree。而我们如果在以太坊中使用这种方式