以太坊是如何運作的(十)

買賣虛擬貨幣

區塊如何最終確定

最後,我們來看看包含眾多交易的區塊如何最終確定。

當我們說“最終確定”時,它可以意味著兩種不同的東西,這取決於區塊是新的還是已有的。如果它是新區塊,我們指的是挖掘區塊要求的過程。如果它是已有區塊,那麼,我們是指驗證區塊的過程。在任何一種情況下,有四個要求來實現區塊“最終性”。

1)驗證(或者,如是挖礦,確定)ommers

區塊頭中的每個ommer區塊必須是有效的區塊頭,並且在當前區塊的第六代內。

2)驗證(或者,如是挖礦,確定)交易

區塊上的使用過的gas數必須等於累積的gas,該gas被區塊中列出的交易使用過。(回顧一下,當執行交易時,我們一直跟蹤區塊的gas計數器,它會跟蹤區塊中所有交易所使用的總gas)。

3)申請獎勵(僅限挖礦)

受益人地址被授予5 Ether用於區塊挖礦。(根據以太坊EIP-649提案,5ETH的獎勵將很快會降到3ETH)。此外,對於每個ommer,當前區塊的受益人將獲得當前區塊獎勵的額外1/32。最後,ommer區塊的受益人也會獲得特定數量的獎勵(它根據特殊公式來計算,這裡不詳述。)

4)驗證(或者,如果挖礦,計算有效的)狀態和nonce

確保所有的交易和結果狀態改變得到應用,然後,在所有區塊獎勵已經被應用到最終的交易結果狀態後,定義新區塊作為狀態。透過針對儲存在區塊頭的狀態trie來檢查該最終狀態,以此進行驗證。

PoW挖礦

“區塊”章節部分簡要介紹了區塊難度的概念。賦予區塊難度意義的演算法叫PoW。以太坊的PoW演算法稱為“Ethash”(曾經叫做Dagger-Hashimoto)。

演算法正式定義如下:

其中的m是mixHash,n是nonce(隨機數),Hn是新區塊頭(不包括nonce和mixHash元件,它們必須計算出來),Hn是區塊頭的nonce,並且d是DAG,它是大的資料集。

在“區塊”章節部分,我們提過區塊頭存在的各種item。其中兩個元件叫做mixHash和nonce。你可能還記得:

l mixHash是一個雜湊值,當它跟nonce結合使用時,證明該區塊已經執行足夠的計算。

l nonce是一個雜湊值,當它跟mixHash結合時,證明該區塊已經執行足夠的計算。

PoW功能用於評估以上兩個item。

使用PoW函式來計算mixHash和nonce有些複雜,我們可以用單獨文章來深入研究。但在更高的層面上,它是這樣工作的:

“為每個區塊計算“種子”。該種子對於每個“epoch”都是不同的,其中每個epoch都是30,000區塊長度。對於第一個epoch,種子是一系列32位元組的零的雜湊。對於後續的epoch,它是之前種子雜湊的雜湊。這樣,使用該種子,節點可以計算偽隨機的“快取”。”

這個快取非常有用,因為這讓“輕節點”的概念變得可行。輕節點的目的是可以讓特定的節點有能力驗證交易,但與此同時無需儲存整個區塊鏈的資料集。輕節點可以驗證交易的有效性,它只是基於這個快取,因為快取可以重新生成它要驗證的特定區塊。

使用快取,節點能夠生成DAG“資料集”,其中資料集中每個item依賴於來自快取的一小部分偽隨機選擇的item。為了成為礦工,你必鬚生成這個全資料集;所有全資料客戶端和礦工儲存這個資料集,並且這個資料集隨著時間線性增長。

礦工可以獲取隨機資料集切片,並把它們用數學函式進行一起雜湊,變成“mixHash”。礦工將重複生成mixHash直到輸出低於所需的目標nonce。當輸出滿足需求,nonce被認定為有效,同時區塊被新增到鏈上。

挖礦是一種安全機制

總體來說,PoW的目的是用加密安全的方式證明一定量的計算已經消耗在生成某個輸出上(即,nonce隨機數)。這是因為沒有更好的方法來找到一個隨機數,這個隨機數低於所需的閥值,而不是列舉所有的可能性。重複應用雜湊函式的輸出具有均勻分佈,所以,我們可以肯定,平均來說,找到這樣一個隨機數所需的時間取決於困難閥值。難度越高,找到nonce的時間就越長。透過這種方式,PoW演算法為難度概念賦予了意義,它用於確保區塊鏈的安全。

區塊鏈的安全是什麼意思?很簡單:我們希望的建立一個人人都可信任的區塊鏈。我們之前也提過,如果多於一條鏈存在,使用者會失去信任,因為他們不能合理地確定哪條鏈是“有效”的區塊鏈。為了讓一群使用者接受儲存在區塊鏈上的底層狀態,我們需要單一規範的區塊鏈,而這條區塊鏈人人都相信它。

這就是PoW演算法的作用:它確保特定區塊鏈將一直保持規範,讓它很難被攻擊者攻擊,攻擊者很難建立新的區塊來重寫交易的歷史(也就是,抹除交易或建立分叉交易)或維持分叉。為了讓他們的區塊首先被驗證,攻擊者需要持續地在網路中比其他人更快地算出隨機數,也因此,網路才會相信他們的鏈是最長的鏈(基於GHOST協議的原則)。這將是不可能的,除非攻擊者擁有超過一半以上的算力,也就是所謂的51%攻擊場景。

挖礦作為財富分配機制

除了提供安全的區塊鏈之外,PoW也為那些耗費算力提供安全的人提供財富分配的方式。回顧一下,礦工從挖礦中獲得獎勵,包括:

l 獲勝區塊會獲得5 Ether 的靜態區塊獎勵(很快會變成3個 Ether)

l 區塊中交易的gas成本

l 包含ommers作為區塊一部分的額外獎勵

PoW演算法機制是安全和財富分配的方法,為了確保它是長期可持續的,以太坊努力地灌輸這兩個屬性:

l 讓儘可能多的人可以訪問它。換句話說,人們不需要特製的或不常見的硬體來執行演算法。它的目的在於讓財富分配模型儘可能開放,以讓任何人都可以透過提供一定的算力來獲得Ether的獎勵。

l 減少任何單一節點獲取不成比例收益的可能性。任何節點如果可以獲取不成比例的收益,這也意味著該節點會擁有決定規範區塊鏈的巨大影響力。這是很麻煩的,因為它降低了網路的安全性。

在比特幣區塊鏈網路中,與上述兩個屬性相關的一個問題是PoW演算法是SHA256雜湊函式。這種型別函式的弱點是使用特定的硬體會更有效率,眾所周知的是ASICs。

為了減輕這個問題,以太坊選擇了的PoW演算法是Ethhash,它的演算法讓序列記憶很難。這意味著以太坊的演算法設計讓計算隨機數需要很多記憶體和頻寬。對於計算機來說,大記憶體需求讓它很難使用記憶體進行平行計算來同時發現多個隨機數,同時,更高的頻寬要求讓它很難同時發現多個隨機數,即使是超高速的計算機也是如此。這就降低了中心化的風險,併為驗證節點們建立了一個更加公平的競爭環境。

有一點需要注意的是,以太坊正在從一個PoW共識機制轉變為所謂的“PoS”證明。這個問題很豐富,也許在未來可以單獨文章探討。

結語

喔,你都看完了?

這篇文章有很多內容需要消化。如果需要閱讀幾次才能理解,也是可以的。我閱讀了以太坊的黃皮書,白皮書和程式碼庫等。儘管如此,我希望以上的闡述對你有所幫助。

------

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;