以太坊的共識機制

2021-08-22 19:20:30 字數 3050 閱讀 7550

在開始之前,我們補充一點基礎知識。

第乙個概念是雜湊。簡單理解,

雜湊是乙個函式

。它的作用是將

任意長度的資料作為輸入

,轉變為

固定長度的乙個字串作為輸出

。這個函式有兩個主要特點:

過程不可逆

對輸入做微小改動,輸出就會完全不一樣。

雜湊函式有好多種,但都滿足上面的特點。幾乎任何加密貨幣都會用到雜湊演算法,以太坊採用的雜湊演算法是

ethash演算法。

第二個補充知識是,以太坊的區塊結構。乙個以太坊區塊包含

區塊頭和區塊內容。

區塊內容就是區塊所包含的交易列表

。而區塊頭中包含了如下資訊:

前乙個區塊的雜湊、區塊序號(

n)、隨機數(

nonce

)、目標值(

target

)、時間戳(

timestamp

)、難度值(

difficulty

)、礦工位址(

address

)等內容。

好了,介紹完上述基礎,我們正式開始本文的內容。

以太坊共有四個階段,即frontier

(前沿)、

homestead

(家園)、

metropolis

(大都會)、

serenity

(寧靜)。以太坊前三個階段採用的是

pow共識機。第四個階段將採用自己建立的

pos機制,名為casper

投注共識,這種機制增加了懲罰機制,並基於pos的思想在記賬節點中選取驗證人。

首先介紹以太坊前三階段使用的pow機制。我們在上節課中講到,pow機制的基本原理是下面這個公式:

計算值《目標值

下面我們具體來看。在以太坊中

f(h, n)

我們先看目標值

m / d 其中

m是乙個常數,數值非常非常大,取

2^256-1 d

是當前區塊的難度值,

d=pd + pd//2048*max( 1-(t-pt)//10,-99 ) + int(  2** (n//100000-2)  )

其中,pd:前乙個區塊的難度值

t:當前區塊的時間戳

pt:前乙個區塊的時間戳

n:當前區塊的區塊序號

其中//

為整數除法運算子,

a//b

,即先計算

a/b,然後取不大於

a/b的最大整數。

調整難度的目的,是為了使挖礦時間保持在

10-19s

期間內,如果低於

10s增大挖礦難度,如果大於

19s將減小難度。另外,計算出的當前區塊難度不應低於以太坊創世區塊難度,即

131072。

難度係數變大,目標值m / d

就越小,所以要計算出滿足要求的計算值就越難,這就是難度係數的意思。

再看計算值

f(h, n)

。f()

這個函式表示乙個概念函式,代表一系列的複雜運算。

其中輸入引數,h和

n分別是,區塊頭

header

的雜湊值、以及

header

中的隨機數

nonce。

計算機的整個挖礦過程,大致可以認為是計算機不斷調整嘗試

nonce

的值,再將計算出的

f(h, n)

與目標值比較

。這就是

工作量證明

,證明你一直在進行計算工作。因為我們預設,只有你在不算嘗試計算,才能找到那個對的

nonce

。雖然這其中有一定的運氣成分,但我們現實生活中也有很多地方是看結果來證明你的工作量,這很好理解啊,你拿到了文憑,我就預設你花過時間學習了。

這就是以太坊的pow過程,具體的源**,詳見文末。

好,我們接下來看以太坊第四階段的共識機制casper。這就是pos的一種。但它有自己的特點:

在有些情況下,礦工的幣不但不會增加,反而會減少。為什麼呢,我們來看看

在casper共識機制中,礦工要拿出保證金對他認為的大概率勝出的區塊進行下注。如果賭對了,他們就可以拿回保證金外加區塊中的交易費用,也許還會有一些新發的貨幣;如果下注沒有迅速達成一致,他們只能拿回部分保證金,相當於損失了一些保證金。因此數個回合之後礦工的下注分布就會收斂。一旦結果出來,那些選錯的礦工就會輸掉他們的保證金。此外如果礦工過於顯著的改變下注,例如先是賭某個塊有很高概率勝出,然後又改賭另外乙個塊有高概率勝出,他將被嚴懲。如此朝三暮四的人在區塊鏈中也是不受歡迎的啊。這條規則確保了礦工只有在非常確信其他人也認為某個塊有高概率勝出時才下注。我們通過這個機制來確保不會出現下注先收斂於乙個結果然後又收斂到另外乙個結果的情況。(將該段的情況簡單體現在乙個ppt頁面裡)。這就是casper的大致工作機理,由於以太坊目前還沒有發布第四個版本,更多細節以後有機會再交流。

源**:

func (ethash *ethash) mine(block *types.block, id int, seed uint64, abort chan struct{}, found chan *types.block)

//hashimotofull

即rand(h, n)

所代表的一系列的複雜運算

digest, result := hashimotofull(dataset, hash, nonce)

//result

滿足rand(h, n)  <=  m / d

if new(big.int).setbytes(result).cmp(target) <= 0

return }

//不斷變更

nonce

nonce++ }

} }

//**位置

以太坊2 0的共識有多安全?

以太坊2.0的主要變化之一就是其共識機制的變化,它由pow邁向pos casper pow和pos在最終性有什麼不同?它會比pow更安全嗎?本文作者alex stokes,由藍狐筆記社群 sl 翻譯。casper權益證明共識協議的正常執行導致資料上最終性屬性的產生,參與者在參與過程中達成共識。我們將...

以太坊RLP機制分析

目錄 1 rlp 定義 2 rlp 編碼規則 3 rlp 編碼例項 4 rlp 分析 1 rlp 定義 rlp,即 recursive length prefix,遞迴長度字首編碼,是以太坊資料序列化的主要方法,具有較好的資料處理效率,尤其是將長度和型別統一作為字首,實際上 rlp 是基於 asci...

以太坊 RLP機制分析

目錄 1 rlp 定義 2 rlp 編碼規則 3 rlp 編碼例項 4 rlp 分析 1 rlp 定義 rlp,即 recursive length prefix,遞迴長度字首編碼,是以太坊資料序列化的主要方法,具有較好的資料處理效率,尤其是將長度和型別統一作為字首,實際上 rlp 是基於 asci...