以太坊区块包括三个部分:区块头、叔块及交易列表。
以太坊区块结构定义如下:
11.png
实际的区块信息:
12.png
1.区块头
区块头结构定义如下:
13.png
从区块头的结构分析中,可以看出每一个区块头都保存了三个不同Merkle Patricia tries(MPT)结构的根节点的Hash,包括:Root(statehash)、TxHash(交易列表hash)、ReceiptHash(收据列表hash)。Root(statehash)就是系统状态hash。系统状态就是以太坊整个网络中所有账户的状态,就是world state,它是一个merkle patricia trie结构。(注上图中的解释是有问题的)
区块头是一个区块的一部分,包含了15个字段具体解释如下:
parentHash:父区块头的Hash值(这也是使得区块变成区块链的原因)
uncleHash:叔区块列表的Hash值
coinbase:接收挖此区块费用的矿工账户地址
stateRoot:世界状态树根节点的Hash值
transactionsRoot:包含此区块所列的所有交易的树的根节点Hash值
receiptsRoot:包含此区块所列的所有交易收据的树的根节点Hash值
logsBloom:由日志信息组成的一个Bloom过滤器 (数据结构)
difficulty: 此区块的难度级别
number:当前区块的计数(创世纪块的区块序号为0,对于每个后续区块,区块序号都增加1)
gasLimit:每个区块的当前gas limit
gasUsed: 此区块中交易所用的总gas量
timestamp:此区块成立时的unix的时间戳
extraData:与此区块相关的附加数据,备用。
mixHash:一个256bitHash值,当与nonce组合时,证明此区块已经执行了足够的计算
nonce:一个64bitHash值,当与mixHash组合时,证明此区块已经执行了足够的计算
针对几个特定的字段进行解释:
(1)日志
以太坊允许日志可以跟踪各种交易和信息。一个合约可以通过定义“事件”来显示的生成日志。一个日志的实体包含:
》记录器的账户地址。
》代表本次交易执行的各种事件的一系列主题以及与这些事件相关的任何数据。
日志被保存在bloom过滤器 中,过滤器高效的保存了无尽的日志数据。
(2)交易收据
自于被包含在交易收据中的日志信息存储在头中。就像你在商店买东西时收到的收据一样,以太坊为每笔交易都产生一个收据。像你期望的那样,每个收据包含关于交易的特定信息。这些收据包含着:
》区块序号
》区块Hash
》交易Hash
》当前交易使用了的gas
》在当前交易执行完之后当前块使用的累计gas
》执行当前交易时创建的日志
等等
2.叔块
(1)什么是叔块
区块链由于是一种去中心化的技术,全世界所有的矿工同时工作,各自独立的挖掘满足要求的区块。由于是各自独立的工作,就有可能出现两个独立的矿工先后发现了两个不同的满足要求的区块,就像下面这种情况,被称为临时分叉。
14.png
两位矿工都发现了高度2的区块,那么该采用谁的呢?在比特币协议中,最长的链被认为是绝对的正确。如果一个块不是最长链的一部分,那么它被称为是“孤块”。在比特币中,孤块没有意义,随后将被抛弃,发现这个孤块的矿工也拿不到采矿相关的奖励。黄色和绿色的区块谁先有后继区块,变成最长的链,谁就会被承认,失败的就会被抛弃。为了成为最长的链,两个矿工都拼命的把自己挖到的区块通过广播的方式告诉更多的节点,并希望他们能把自己的区块传播得更广,从而使更多的矿工在自己挖出的区块下挖掘下一个区块,最终让自己的区块变成最长链的一部分。
然而,胜利者只有一个,胜利者写历史,失败者将被抛弃,其中的交易会重新被打包到之后的区块中。下面这张图就是绿色区块获得了胜利,黄色区块成为孤儿区块,被抛弃。
以太坊创造性的引入了叔块(Uncle Block)概念。对高度3的区块来说,绿色区块是他的父区块。黄色区块虽然失败了,但好歹也是高度1的区块的子区块,绿区块的兄弟区块。于是,高度3的区块就尊称这个黄区块为叔叔,叔块就是这么得名的。
不能成为主链一部分的孤儿区块,如果有幸被后来的区块通过uncles字段收留进区块链就变成了叔块。如果一个孤儿区块没有被任何区块收留,这个孤儿区块还是会被丢弃,不会进入区块链,也就是说孤儿区块被收留后才会变成叔块。
以太坊的设计比比特币人性的多,叔块也是可以获得奖励的,矿工们再也不用担心白忙乎了。而且以后的区块谁要是把叔块收留了,收留了叔块的区块还有额外的奖励,收留叔块也被称为包含叔块。
下图就是高度3的区块包含了一个叔块,不过叔块也就仅仅是被包含而已,叔块中的交易会重新回归交易池,等待重新打包。一个区块最多只能包含2个叔块。
以太坊为什么要这么设计呢?因为以太坊的区块时间是12秒左右,相对于比特币,更容易出现临时分叉和孤儿区块。而且较短的区块时间,也使得区块在整个网络中更难以充分传播,尤其是对那些网速慢的矿工,这是一种极大的不公平。为了平衡各方利益,才设计了这样一个叔块机制。叔块在全部挖掘出来的区块中占的比例叫叔块率,目前叔块率在9.7%左右。
网友评论