這一片文章中我們介紹一下Hyperledger Sawtooth項目中所提出的PoET共識算法, 現有的區塊鏈共識算法大概可以分為兩種:
Nakamoto consensus:通過樂透的方式選擇出一個leader,由leader產生塊添加到賬本中。最典型的例子就是bitcoin,通過挖礦算法來選出一個leader(最先挖出塊的節點),leader公布自己的塊給其他的參與者,參與者決定是否將其加入到自己的鏈中,以及決定是否沿着該塊繼續向下挖掘,而這實際上是一種隱性投票。
PoET屬於Nakamoto consenus的一種,它的全稱是 Proof of Elapsed Time。而一個好的Nakamoto consenus要有一個好的算法來支撐,它需要具備一下幾個要素:
公平:雖然每個節點的能力是有差距的,但要保證每個節點的權利是平等,這樣可以使更多的節點參與到選舉中來;
可校驗:對於參與者而言,校驗leader的身份是很容易的;
投資性:選舉的投入和產出應該是成正比的。
就拿Bitcoin來講, 設定一個很高的破壞成本(理論上需要全網51%算力,但實際上只要攻方算力能夠保持的其分叉最快增長就可以完成攻擊,因為其他的算力並不是統一的,而隨着攻方鏈的增加,其余算力會加入進來),同時保證維護bitcoin的正確性能帶來持續性的收益,實際上更多的是利用一個資本間的博弈來引導一個良性循環。
PoET是怎樣滿足以上要素的?
根據官方文檔,PoET的大致思路是這樣的是這樣的,每個節點發布塊之前都要從一個enclave(英文翻譯是飛地,所謂飛地就是與國家主體領土隔離的領土,在sawtooh里面它代表一個可信操作)獲取一個隨機的等待時間,等待時間最短的率先發布塊(相當於被選為leader),其中的enclave是通過新型的安全CPU指令來實現的。
enclave支持兩個函數“CreateTimer”和“CheckTimer”,CreateTimer用於從enclave中產生一個timer,CheckTimer會去校驗這個timer是不是由enclave產生?是否已經過期?如果滿足以上兩個條件就會一個attestation(憑證)。attestaion 中包含的信息可以用來校驗 certificate(證書?wtf?) 是由該enclave 產生的,而且已經等待了timer規定的時間。
成為leader的概率與捐獻的資源成比例的(所謂的捐獻資源指的是可信環境下的通用處理器, ps:怎么判斷捐獻的資源是可信的?),因為是通用處理器(consumer and enterprise processors,雖說是通用的,但不知道是不是IBM特產的)不需要定制礦機,所以參與的門檻就比較低,節點就會比較多,整個共識會更健壯。
說簡單點就是在不依賴大量的算力開銷和硬件開銷(礦機)下,通過硬件產生隨機數保證選舉的隨機性。
參考網址:https://intelledger.github.io/introduction.html#proof-of-elapsed-time-poet
以上是本人理解加工后的產物,可能會有所偏差,歡迎大家指正!!!下面是我的一些疑問:
1.enclave 是每個節點一個還是由所有節點貢獻的CPU構成?
2.CheckTimer由誰來調用?是leader還是其他參與節點?
3.怎么抵御拜占庭攻擊?
接下來會一一解開。