主页 > imtoken钱包下载安卓最新版本 > 以太坊中的数据结构
以太坊中的数据结构
的
——————>> 二刷分割线。
的
以太坊中的数据结构
以太坊中的账户地址为 160 位(20 个字节),一般表示为四十个十六进制数。
一个简单的哈希表怎么样?
查询和更新都在常数时间内完成。 此外,这种结构不能很好地提供散列证明。 例如签订合同:需要提供账户余额。 如何提供:
我有一个疑问,为什么以太坊需要通过这种方式遍历所有账户来生成Merkle树? 难道不能像比特币一样,只遍历相关账户,生成Merkle树吗?
每发布一个新区块,状态树中某些节点的值就会发生变化。 这些变化并没有原地改变,而是创建了一些新的分支。 原来的状态其实是保留下来的,如下图例子是相邻的两个block:
状态根是状态树的根哈希值。 下面展示了这个类的状态树。 右边的状态根是新发布区块的状态树。 我们可以看到,虽然两棵树的部分节点是不同的,但是大部分节点是共享的。 右边树中的大部分节点都指向左边的节点,只保存改变节点的分支。
上图中,改变的是存储中一些变量的值。 可以看到其中一个变量的值从29变成了45
以太坊把出块时间改成十几秒,所以会造成分叉,成为常态。 以太坊中有智能合约,所以如果之前的状态没有保存在以太坊中以太坊世界状态的数据结构及特点,就很难像比特币那样计算之前的状态(a转10个比特币给b,当前状态知道在账户a的之前状态and b before the transaction), 但这在以太坊是不可能的,不可能根据智能合约计算之前的状态,所以为了支持回滚,必须保存之前的状态,下面是 的一些定义区块头:
difficulty:挖矿难度
数字:
智能合约消耗gas费,类似于智能合约的交易税:
时间:大概的生成时间
mixdigest:起到挖矿的作用
nonce:类似于比特币中的随机数以太坊世界状态的数据结构及特点,以太坊中挖矿也是寻找随机数,写入区块头的nonce是最后找到的满足难度要求的
这是块的结构: