RChain的Casper共識演算法

來源:互聯網
上載者:User

標籤:建立   nts   div   new   空間   研究   hang   瞭解   ash   

RChain的Casper共識演算法是基於Vlad Zamfir的correct-by-construction共識協議和CTO Greg Meredith和其他RChain成員討論而來的。他們還為Casper開發了一個模擬器:https://github.com/rchain/Casper-Proof-of-Stake/tree/simulation-dev。

1、通用預估安全性通訊協定

一個預估安全性通訊協定需要以下內容:

1)一個可能共識的值的集合C 

2)一個邏輯Lc,用來判斷集合C中的元素宣告的命題是正確或者是錯誤

3)一個分類,∑代表協議,∑中的對象是協議狀態和態射的協議執行

4)一個調用評估器的函數ε,用於把協議狀態映射到邏輯中的命令

我們假設這麼一個命題:P是一個已經預估過安全的協議狀態,Q是所有可能的未來狀態都被預估器標明是P。

在邏輯中給定少數合理的約束以及預估器,我們可以得到以下的安全共識結果:

1) 如果Q1和Q2有共同的未來狀態,那麼它們的安全預估就不可能相互矛盾(如果P是安全的,非P肯定是不安全的)。因此如果節點按照預估器的行為,就不可能到達不可調和的狀態,因此達成共識是可能的。再者,一旦一個節點看到一個命題是安全的,它知道最終的公示結果也會保持是正確的。

 

2、RChain的預估安全性通訊協定

RChain在通用預估安全性通訊協定上擴充以滿足自身的需求,同時仍然保留上面所希望的一致安全結果。

2.1 The Consensus Values

集合C會包括所有可能的塊DAG(blockDAGs) 。與鏈結構相反,DAG結構的原因在於共識協議的某些部分需要多個父塊指標。

在區塊的上下文中需要有以下的屬性:

1)父區塊的指標

2)政治資本(PC)

3)資料

4)原則 (指向其他區塊的指標,那些在建立的時候就被驗證器看到的區塊)

一個區塊包含的資料取決於它是什麼類型的區塊,與使用者最相關的將是運行在RhoVM上包含計劃交易的區塊,但是與當前討論最相關的將是包含DAG中其他區塊的“確認”的區塊。這些區塊在共識協議當中扮演者重要的角色。這些資料還可能會強制執行“削減條件”,從而懲罰產生無效塊的驗證人。

2.2 The Logic and Propositions

其次,我們需要定義我們用來談論blockDAG的邏輯Lc。 在這裡,想想自然陳述是真的還是假的,似乎是最簡單也是最明智的。例如,“區塊在DAG中”或“區塊有父母”。 最終,我們最關心的聲明將是前者,因為這是我們的“分岔選擇規則”。 (對於嚴格的數學處理,我們需要對邏輯細節做更精確的描述,但上面的直覺對我們來說已經足夠了。)

2.3 The Protocol‘s Specification

現在我們要給定一個明確的協議規範,這在數學上我們認為是一個類別∑。協議的狀態是來自一個元組的集合中的{A, P, H}. A∈{"propose", "acknowledge"}是預期的行為,P∈R 是政治資本的平衡條件,H是接收過的曆史訊息。 訊息裡麵包括使用者執行智能合約的請求和來自其它驗證器的區塊。那些包含區塊的訊息必須只有建立它的驗證器的簽名。協議執行的操作是“更改意圖”、“執行”和“接收訊息”(以及“不做任何事”的動作和各種動作的任何組合,因為這是一個類別的需求)。

在給出每個協議執行如何更新協議狀態的細節之前,我們需要定義預估器ε。前面提到過,估計器最關心的是那些與DAG中哪些塊有關的邏輯命題。ε是分叉選擇規則,它選擇多個可能的替代塊中的選出區塊來繼續結構。在工作證明的區塊鏈協議它的是最大工作量的鏈的頭部。這裡我們選擇的是greedy heaviest observed sub-tree (GHOST) 演算法,它會選擇得分最高的區塊來繼續這個結構。一個區塊的得分b,關於訊息曆史,H,它是DAG中來自其寄件者的最近訊息中的區塊的權重的總和。

一個區塊的權重的公司可以用下面的公司來定義:

其中f是參數的一個協議,0<f<1, ack(b)是確認b的區塊,pca(b)是串連到b的政治資本的數量。

下面是一個具體的例子:

假設有3個驗證器:A, B, C,讓我們以A的角度來看,假設她有一個與一致的訊息曆史:

 

在圖中,區塊在其建立者之上對齊。每個區塊上都標有它的名字還有政治資本的數量,箭頭指示父區塊指標。

此外,標有“ACK”的標記還表示目標區塊中的確認資料存在於來源區塊中。訊息記錄顯示來自每個寄件者的最新訊息是 A - b6, B - b5, C - b4。

因此只有這些塊有非0的得分,按照上面的公司,W(b6) = 3, W(b5) = 4f2, and W(b4) = 2f。然後遍曆整個DAG,我們計算出來得分:

Score(b6) = 3 +4f2 + 2f, Score(b5) = 4f2 + 2f, Score(b4) = 2f。因此b6有最高的得分,未來通過A建立的區塊必須從b6構建,除非它收到一條改變得分的訊息。

注意,如果我們回顧一條訊息(在建立B6之前),Score(b5) = 4f2 + 2f + 2(+2是來自b1,它具有A最近的訊息,b6沒有)它的得分是最高的,這是為什麼b6是建立在b5之後的原因。

還要注意的是,b3和b4可以被認為是另外“促進”A的區塊兩個驗證人,b5充當前兩個非衝突塊的區塊“串連”成一個區塊,這樣就可以使結構繼續擴充,又不留下任何已經確認一致的塊。

我們再回到指定協議執行上,更改意向協議執行只是改變了預期的行為,而行為觸發了當前的預期行動。這裡有兩種可能採取的行動:

1、提議(Propose),根據訊息記錄中的一個或多個未處理的智能合約請求建立交易計劃,建立一個區塊需要根據合約中涉及的父區塊的名字、GHOST分叉規則、政治資本的數量(由驗證器選擇,需要注意的的是政治中心越多區塊的權重越高,這以為著它更可能被GHOST分叉規則選出來)、作為資料建立的計劃、從訊息記錄中可作為理由的所有區塊(這裡可以做的一個喲最佳化是,只選擇那些相關的區塊)。

2、承認(Acknowledge),促進或者串連。從寄件者中選擇訊息記錄中最新訊息的任意數量的獨立塊(一個區塊是一個選項,它將是"promoting")。獨立性的含義是既不能通過DAG串連從另一個達到,並且包含在它們的未串連的DAG的部分中的任何資料不衝突。然後建立一個新的區塊,需要的東西和提議是一樣。

兩種執行對協議狀態的影響是將產生的塊添加到訊息曆史中(驗證器立即收到所有發送給網路的訊息),減少區塊的政治資本的餘額。政治資本的餘額的增加是根據遞迴公式在區塊中確認的。

pce(b)是區塊b掙到的政治資本數量。需要注意的是,最新的訊息的約束會組織它去增加舊的區塊的政治資本。
單一確認規則同樣可以防止重複提交同一區塊進行的快速“政治資本挖掘”。

最後的協議執行,接受訊息,並沒有像它剛開始表現的那麼簡單。當然,它把新訊息添加到訊息曆史中,但同樣重要的是這條訊息是在這個動作當中驗證。
這一步是必要的,以確保blockDAG的完整性。實際上,因為這是一個不信任的系統,所有驗證人都需要獨立的驗證它所受到的所有訊息。
收到新訊息時,有幾個不同的事情需要驗證:

1)訊息不產生歧義。歧義的定義是,來自同一個發送方的兩條訊息沒法證明另外一條訊息。也就是說,這兩個訊息都不出現在另一條訊息的理由(或遞迴地在這些理由中)。這是一種拜占庭式的故障,因為它表明發送方的行為就像在運行協議的兩個獨立版本。否則,寄件者的最新訊息將包含寄件者在其理由中的所有過去訊息。

2)如果一條訊息是一個包含交易的區塊,那麼它的所有交易都是合法的。即智能合約還沒有被前面的區塊執行,並且使用事務來更新虛擬機器狀態成功沒有錯誤。 例如。 導致雙重花費的交易應該是錯誤的,因此是無效的。

3)如果訊息是連線類型的確認,那麼區塊是相互獨立的,並且之前沒有被相同的發送方確認過。 同樣的事務不會存在於多個確認區塊中。

4)如果訊息是一個削減區塊,它確實對應於一個真正的違反行為。

5)如果訊息是任何類型的確認,那麼確認的所有區塊都是有效。也就是說,這個子彈使驗證成為一個遞迴過程。

如果上述的任何條件違反了,那麼這條訊息就是無效的。這種違規行為就會被報告。在這種情況下,將建立一個新的“削減”塊,懲罰無效訊息的違規寄件者。

 

協議的最後一部分是終結的概念,即我們怎麼知道這個區塊會永久的存在於DAG當中?目前的區塊鏈使用區塊的深度作為最終的代理,並且在技術上沒有區塊是結束了。這裡用一個區塊的深度以便瞭解一個區塊是否仍然是主DAG的一部分的可能性,然而我們也可以引入合理的“同步約束”來具有真正的結束。一個驗證人(或者使用者)在訊息已經存在它的曆史當中有一段時間T(假設說是1星期),就會認為一個區塊已經結束了。這表示終結的概念是相對的,它取決於訊息的接收,但實際上,在時限足夠長的時候,這並不構成太大的問題。如果兩個節點完成相互排斥的區塊,這確實允許共識失敗的可能性,但是當時間視窗很長並且由於下面討論的激勵時,這種情況也是不可能的。

2.4 Economic Considerations: 

與其他區塊鏈一樣,提出交易塊的驗證人也包括反映驗證人為執行計算而獲得的“費用”(以REV的形式)的一些交易。因此,驗證人被激勵來確保他們建立的區塊保留在主DAG中,否則他們被獎勵的交易將會丟失。GHOST分支選擇規則會導致更多權重的區塊更可能在主DAG中結束,因此,將大量政治資本附加到他們建立的去塊上的驗證人更可能保留他們獲得小費。因此,在提出區塊時花費政治資本是經濟上的激勵。而且,由於政治資本被納入共識協議,花費之後賺取政治資本的唯一途徑就是承認其他區塊。被別人承認的區塊(自己提議的區塊沒有政治資本,得分會比原來的要低,因為f<1,並且GHOST只會考慮最近的訊息)是最有可能用於擴充DAG的,因為他們的得分比較高。因此,推動區塊對於每個人都是有利的,因為推動者可獲得政治資本供未來使用,而推廣者可有可能獲得小費。因此,串連區塊是更加激勵,因為它把所有個人促銷的好處的進行了加和。

個人行為的好處:

1、自動輪流驗證人。最好賺取政治資本的方式是從別的驗證人花費的,政治資本的流動(以及因此提出障礙的能力)在不同的驗證人之間;

2、減少分叉。推動區塊和合并區塊工作,以保持單一的主要DAG。

2.5 Slashing: Punishments for invalid blocks

產生無效塊的驗證人應該避免他再次這樣做,因此懲罰應該包括減少他們的政治資本。事實上,允許通過懲罰減少政治資本,可以防止一個壞的驗證人。然而,和解原則上總是可能的,因為驗證人仍然可以獲得政治資本,並且如果需要的話,慢慢地將他們的餘額回到零以上。

有關各種違規行為的確切數額的細節尚未制定出來。

 2.6  The one free parameter in the protocol f

f的值應該是多少呢?f的值會不會因為網路中的參與者數量的變化而隨時間改變?這些問題還需要通過模擬器進行更多的驗證。

2.7  Initiating the protocol: Where do the first validators and political capital come from?

由於政治資本只能通過已經擁有政治資本的區塊來推動,所以一個自然的問題是第一個政治資本來自哪裡。一個解決辦法是讓創世紀塊有一定的政治資本附在他們身上。

所有的驗證人需要推進至少一個區塊,為了增加政治資本(初始值為0)。單一承認規則防止這種剝削獲得無限量的政治資本。請注意, 即使一個驗證器人建立了一個無限鏈,它從創世區塊開始不斷的推進區塊, 但是幾何系列將收斂到一個有限的值。此外, 單一確認規則可防止建立多個此類鏈。

一個相關的問題是,誰會成為驗證人?一個簡單的答案,任何人。每一個使用者加入網路之後,它的政治資本是0,他們不能提出建立新的區塊,但是他們可以參與驗證的過程。只有參與共識過程的使用者才能獲得政治資本。我們確保只有那些真正對網路感興趣的人才能貢獻未來的區塊,同時仍然讓任何人都有機會達到這個水平。

 2.8  Bad Behaviour Technically Allowed in Present Protocol Specification

1、提出一個區塊,自己馬上去推銷它。這可以防止別人馬上承認了你提出的區塊。這可以減少對手從你的提議裡面獲得的政治資本。確實減少了你正在構建的分支的分數(因為得分只考慮了最近的訊息,而升級區塊的權重將低於原來的),因此有一種可能性,你的的區塊將錯過叉選擇規則。因此,目前尚不清楚在這種情況下壟斷政治資本的策略是否會成功。

2、用毫無意義的確認淹沒網路,試圖崩潰更小的節點。例如,寫一個指令碼,在創世區塊的基礎上建立一個全是確認區塊的無限鏈,類似於DDOS攻擊。如上所述,這種攻擊行為是不被系統本身鼓勵的,但是出於一些外部的原因,有人想搞垮RChain的話,這是一種可以想到的方法。

一個簡單的(雖然不方便)的方式去這將驗證人在發出確認之前要出入一個驗證碼。另外一個選項是內建一個防火牆,在檢測到這種攻擊的時候能自動的屏蔽掉另外的驗證人。

 2.9  Future Optimizations

允許衝突區塊的串連,解決衝突的一個方案是在提出區塊的同時確認獨立區塊的分區。

Other Notes

1、一個驗證人離開了幾個月,然後又回來怎麼辦?怎麼樣在保證網路不受攻擊的情況下重建立立信任?

政治資本是通過在達成共識的過程中積極活動而獲得的,因此是信任的代表。這個問題是政治資本有某種“半衰期”的一個很好的論據。這就意味著當驗證人離開之後,他需要重新努力才能回到以前的地位。關於這個半衰期是多久,這個還在討論中。

 

2、我們有沒有解決囚徒困境的方法?

交易收入(代替驗證人驗證每個共用跨分區狀態的分區)就是一個囚徒困境。囚徒困境,作為一個無限重複博弈的遊戲。它有一個最優的預設合作策略,甚至在失去信任之前原諒一次背叛。我們簡化了這個遊戲,值得信任的名稱空間將得到很好的處理,而不可信的命名空間與網路的其他部分隔離開來。我們還會有一些跨名字空間的驗證人,確保不會被一些垃圾玩家把整個網路都搞臭了。

 3、有沒有可能操縱共識協議來獲得免費的儲存?也就是說,因為共識的曆史需要作為證據永久儲存,那這些資訊是否可以由用戶端使用,而不需要支付適當的儲存費用。

這是可能的,可以通過設定確認區塊中的資料格式來避免這種情況。

 

 

 

該文章翻譯自:https://rchain.atlassian.net/wiki/spaces/CORE/pages/92536846/Casper+for+RChain 

翻譯水平有限,我本身對區塊鏈的瞭解也有限,如有錯誤,請及時聯絡我,大家一起提高,謝謝!

相關文章:

1、https://medium.com/rchain-cooperative/a-visualization-for-the-future-of-blockchain-consensus-b6710b2f50d6

2、https://github.com/ethereum/research/blob/master/papers/cbc-consensus/AbstractCBC.pdf

3、https://github.com/ethereum/research/blob/master/papers/CasperTFG/CasperTFG.pdf

 

 

對區塊鏈技術感興趣的童鞋可以添加QQ群:711399035。大家一起研究區塊鏈技術,投資好的區塊鏈項目。

 

岑玉海

轉載請註明出處,謝謝!

 

RChain的Casper共識演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.