虾说区块链-71-以太坊七

一直在说区块链是一系列技术结合后的新的技术架构,那么这里分别介绍下这些相关技术,也涉及到一些扩展开去的相关内容。

区块链-以太坊七:

以太坊:

以太坊是区块链系统,那么以太坊的区块结构这里简单进行说明。

参考:

https://baijiahao.baidu.com/s?id=1581231980661527205&wfr=spider&for=pc

和bitcoin同理,以太坊数据记录打包成为区块,也有区块一个个串联而成。

以太坊的区块头结构:

以太坊的区块头结构包括:

parentHash、nonce、timestamp、ommersHash、beneficiary、logsBloom、difficulty、extraData、number、gaslimit、gasUsed、mixHash、stateRoot、transactionsRoot、receiptsRoot。

和bitcoin不同,区块头中包含了三个树:

状态树、交易树、收据树。

具体以上代表的含义:

parentHash:父区块头的hash值,区块链中区块之间通过父区块hash值相连。

Nonce:一个hash值,于mixHash组合时候,用于证明区块执行了足够的计算量。

Timestamp:该区块的unix时间戳。

ommersHash:先说了ommer的概念:ommer是一个区块的父区块和当前区块父区块是同一区块,有点绕口。Bitcoin中由于产生区块的时间为10分钟(平均时间10分钟),以太坊区块的产生时间比bitcoin要快的多,大概是15秒左右,区块生成时间短了,那么会出现在同一时间竞争区块被矿工发现,这样就会出现同样竞争的孤块。Ommers的目的为了奖励那些纳入了孤区块的矿工。这个bitcoin不同,孤块也存在奖励,当然孤块需要获得奖励,必须ommers是有效的,判断机制,ommers必须在父区块的小于6个区块之内。孤块的奖励只是少许报酬。故ommersHash是当前区块ommers的列表的hash值。

Beneficiary:接收挖到该区块费用的账户地址。

Logsbloom:日志信息组成的一个bloom过滤器。

Difficulty:该区块的难度。

extraData:区块相关附加数据。

Number:当前区块号。

Gaslimit:当前的gaslimit。

Gasused:交易费用使用到的gas量。

MixHash:一个hash值,与nonce组合后,证明执行了足够的计算。

Stateroot:状态树根及诶单的hash值。

Transactionsroot:该区块所列的交易树的根节点的hash值。

Receiptsroot:该区块所列的交易收据的树的根节点的hash值。

下面是以太坊中存储区块头函数:

以太坊中的日志:

日志对一个系统必不可少,那么在以太坊中日志一般用于追踪各种交易和信息,合约通过定义时间来显示日志。日志包含:

记录器的账户地址。代表了该次交易执行的各种事件的一系列的主题和该事件的相关的各种数据。日志保存在bloom过滤器中(bitcoin也有类似概念),过滤器保存大量的日志数据。

交易数据:

以太坊的交易数据类似一种收据的概念,每一笔交易类似一个收据,那么收据信息包含:

区块的区号、区块的hash值、交易的hash值、该交易使用的gas、执行该交易完成后计算使用的gas、执行该交易创建的日志等。

区块难度:

难度的存在是为了强一致性的保证,那么在以太坊中创世区块的难度是131072,以下公式用于计算难度和nonce之间的数学关系:

以太坊中某个区块的验证比之前的快了,那么难度就相应增加,hd代表难度,找到符合难度阈值的nonce。以太坊的平均出块时间为15s。

以太坊中白皮书中对挖矿的解释:

虽然和bitcoin不同,但以太坊的区块链在很多方面类似于bitcoin区块链。它们的区块链架构的不同在于,以太坊区块不仅包含交易记录和最近的状态,还包含区块序号和难度值。以太坊中的区块确认算法如下:

1.检查区块引用的上一个区块是否存在和有效。

2.检查区块的时间戳是否比引用的上一个区块大,而且小于15分钟。

3.检查区块序号、难度值、 交易根,叔根和瓦斯限额(许多以太坊特有的底层概念)是否有效。

4.检查区块的工作量证明是否有效。

5.将S[0]赋值为上一个区块的STATE_ROOT。

6.将TX赋值为区块的交易列表,一共有n笔交易。对于属于0……n-1的i,进行状态转换S[i+1] = APPLY(S[i],TX[i])。如果任何一个转换发生错误,或者程序执行到此处所花费的瓦斯(gas)超过了GASLIMIT,返回错误。

7.用S[n]给S_FINAL赋值, 向矿工支付区块奖励。

8检查S-FINAL是否与STATE_ROOT相同。如果相同,区块是有效的。否则,区块是无效的。

这一确认方法乍看起来似乎效率很低,因为它需要存储每个区块的所有状态,但是事实上以太坊的确认效率可以与比特币相提并论。原因是状态存储在树结构中(tree structure),每增加一个区块只需要改变树结构的一小部分。因此,一般而言,两个相邻的区块的树结构的大部分应该是相同的,因此存储一次数据,可以利用指针(即子树哈希)引用两次。一种被称为“帕特里夏树”(“Patricia Tree”)的树结构可以实现这一点,其中包括了对默克尔树概念的修改,不仅允许改变节点,而且还可以插入和删除节点。另外,因为所有的状态信息是最后一个区块的一部分,所以没有必要存储全部的区块历史-

本文由币乎(bihu.com)优质内容计划支持。

之前写了点东西,随着对区块链的理解,发现有些理解的并不透彻,重新整理。如有理解不正确的地方,请及时指正,同时有兴趣一块交流的可以加笔者微信:

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180123B09ZK100?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区