區塊
所有的交易組成一起進入區塊。區塊鏈包含一系列連結在一起的區塊。以太坊中,一個區塊包含:
區塊頭
關於區塊中包含的一組交易的資訊
當前區塊的ommers的一組其他區塊頭
關於Ommers
ommer到底是什麼?ommer是一個區塊,它的父區塊相當於當前區塊的父塊的父塊。快速瞭解一下ommer用於什麼,為什麼區塊包含ommers的塊頭?
由於以太坊的構建方式,出塊時間比其他區塊鏈更短,比如它約15秒/區塊,而比特幣的出塊時間是10分鐘/區塊。這讓它擁有更快的交易速度。然而,更短出塊時間的一個不足之處是礦工會發現有更多的競爭區塊。這些競爭區塊也稱為“孤塊”(即所挖出的區塊並沒有進入主鏈)。
ommers的目的是幫助獎勵礦工包括這些孤塊。礦工包含的ommers必須是“有效”的,意味著當前區塊的六代之內或更小範圍內。在六代之後,老舊的孤塊不再被引用,因為包括較老的交易會讓事情變複雜。
Ommer區塊獲得的獎勵比全區塊要少。儘管如此,對礦工來說,這依然有激勵,讓他們把這些孤塊包括進來,由此收穫獎勵。
區塊頭
讓我們回到區塊。之前提到過每個區塊都有區塊頭,它究竟是什麼?
區塊頭是區塊的一部分,包括:
parentHash:父區塊頭的雜湊值(這也是讓區塊連成鏈的原因)
ommersHash:當前區塊的ommers列表的雜湊值
受益人:接收挖礦費用的賬戶地址
stateRoot:狀態trie的根節點的雜湊值(狀態trie儲存於區塊頭並且更方便於輕客戶端驗證狀態的任何資訊)
transactionsRoot:包含區塊中列出來的所有交易的trie的根節點雜湊值
receiptsRoot:包含區塊中列出來的所有交易收據的trie的根節點雜湊值
logsBloom:Bloom過濾器(資料結構),它包含日誌資訊
difficulty:區塊的難度級別
number:當前區塊的計數(創世區塊的區塊號是0,此後的每個後續區塊都按順序增加)
gasLimit:當前的每區塊的gaslimint
timestamp:區塊開始的unix時間戳
extraData:跟區塊相關的額外資料
mixHash:也是一個雜湊值,當它結合nonce時,證明該區塊已經執行足夠的計算
nonce:也是一個雜湊值,當它結合mixHash時,證明該區塊已經執行足夠的計算
注意每個區塊頭是如何包含三種trie結構:
狀態(stateRoot)
交易(transactionRoot)
收據(receiptsRoot)
這些trie結構只是之前提到過的Merkle Patricia tries。此外,以上的描述中一些術語需要澄清。
Logs
以太坊允許logs,以便於追溯各種交易和訊息。合約可以透過定義“事件”來清晰生成日誌,這裡的“事件”則是想要記錄日誌。
log條目包含:
日誌者的賬戶地址
一系列的主題,這些主題代表本次交易執行的不同事件
跟這些事件相關的任何資料
日誌儲存在bloom過濾器中,該過濾器以有效方式儲存無盡的日誌資料。
交易收據
儲存在區塊頭的日誌來自於包含在交易收據中的日誌資訊。正如你在商店購物會收到收據一樣,以太坊也會為每筆交易生成收據。正如你所期望的,每張收據都包含交易相關的一些資訊。收據包含如下內容:
區塊編號
區塊雜湊
交易雜湊
當前交易使用的gas
當前交易執行後當前區塊所使用的累積gas
當執行目前交易建立的日誌
......等等
--未完待續---