algorand共識協議 Algorand協議簡介

2021-10-13 14:06:47 字數 2852 閱讀 9023

algorand是權益證明(pos)的乙個公升級,徹底消除區塊鏈分叉的可能性,可以在一小段時間內確認交易,algorand的核心使用稱為ba⋆的拜占庭協議,同時擴充套件到許多使用者。即使一些使用者是惡意的,網路被臨時分割槽,algorand也確保使用者從未對已確認的交易有不同意見。在algorand的ba⋆協議中,除了私鑰之外,使用者不會保留任何私有狀態。

兩種共識:

最終共識: ba⋆()將不會在這一輪的任何其他塊達成共識。

暫定共識:其他使用者可能已經在不同的塊上達成了暫定共識(只要沒有使用者達成最終的共識)。

這個演算法每一輪的總流程,分為兩個大部分——塊提議和ba⋆。塊提議中首先在普通使用者中通過加密抽籤選擇出這一輪的委員會成員(委員會成員會在每一輪通訊進行替換),然後在委員會成員中再次通過加密抽籤選擇出這一輪的提議者,每個提議者提議乙個塊。然後連同雜湊和證明(一種隨機號碼,數字簽名可以很容易對其進行驗證)一起傳播到網路上。之後,這一輪的所有委員會成員接到訊息後,通過ba⋆協議對塊達成共識(暫定或最終共識)。如果這一輪是暫定共識,則只有在當後續塊(後幾輪的塊)有達成最終共識的情況下才能確認前幾輪的暫定共識塊。

加密抽籤。用來建立和驗證區塊鏈(如若是在乙個擁有數百萬使用者的系統中,那麼參與者的數量可能達到數千人)。這種抽籤的方法基於前乙個區塊,選擇過程是自動並且完全隨機的。使用者被選中的概率基於他的權重。關鍵技術是使用可驗證的隨機函式(vrfs),以私人和非互動方式隨機選擇使用者。允許使用者私下檢查是否被選擇參與拜占庭協議。

每個使用者在每一輪都要進行加密抽籤。在輸入字串(種子+角色)上,vrfsk返回兩個值:雜湊和證明。然後用為該角色選擇的使用者的預期數量τ除上所有使用者的權重和,得到乙個概率p。j引數表示此使用者被選擇了多少次。 被選擇j次意味著使用者以j個不同的「子使用者」的身份參與。一開始j初始化為0,然後迴圈確定此使用者的多少子使用者被選擇,抽籤演算法將區間[0,1)劃分為連續區間的形式,如果hash / 2hashlen(其中hashlen是雜湊的位元長度)屬於間隔,則使用者恰好具有j個選定的子使用者。

要進行加密抽籤就要先獲得本輪的種子seed。每一輪都會產生乙個新的種子。假設現在為第r輪,在r輪的塊提議期間,通過這個公式,為第r+1輪塊提議計算種子seedr+1。這個種子(和相應的vrf證明π)被包含在每個提出的塊中,所以一旦algorand在r輪的塊上達成一致,在r+1輪開始時,每個人都知道seedr+1。 如果塊不包含有效的種子(例如,因為該塊是由惡意使用者提出的並且包括無效的交易),則使用者將整個提出的塊看作是空的,並且使用這個公式來計算第r輪的相關種子。引導種子選擇的seed0的值可以在演算法一開始時通過初始參與者(在宣告他們的公鑰之後)用分布式隨機數隨機選擇生成。由第乙個公式可知,在選擇第r+1輪的種子之前要選擇每個使用者的金鑰sku(r輪使用的)。

塊提議。抽籤確保隨機選擇一小部分使用者,並通過其權重為每個所選使用者提供優先順序,可以在使用者之間進行比較。由於抽籤是隨機的,所以可能會有多個子使用者選擇提出塊,使用者通過比較子使用者優先順序,採用有最高優先順序的子使用者的那個塊,子使用者的最高優先順序是塊的優先順序。 然後使用者通過網路傳播這個塊,以及其優先順序和證明。其他使用者等待一定的時間來接收塊。如果使用者沒有收到塊提議,則會用空白塊初始化ba⋆。

拜占庭協議ba⋆:確保區塊鏈不會分叉。塊提議不保證所有使用者都收到相同的塊。為了在乙個單獨的塊上達成共識,algorand使用ba⋆。每個使用者使用他們接收的最高優先順序塊初始化ba⋆。

ba⋆的執行由兩個階段組成。第一階段,將在任意乙個塊的雜湊上達成一致的問題轉換為在兩個值達成一致,這兩個值是特定建議的塊雜湊,或者是空塊的雜湊。 程式裡是用reduction這個函式。在第二階段,ba⋆就這些選擇之一達成一致:要麼同意乙個建議的區塊,要麼同意乙個空的區塊。程式裡是用binaryba⋆這個函式。

首先reduction這個函式,主要分為兩步,step1,每個委員會成員對由ba⋆ main函式傳遞給reduction()的塊的雜湊進行投票。step2,委員會成員對第一步至少得到t·τ票的雜湊進行投票,或者如果沒有雜湊得到足夠的票數,則預設空塊的雜湊。 reduce()確保至多有乙個非空塊可以被reduce()返回給所有誠實使用者。

這裡的投票是有兩個主要函式——傳送選票和計票。

傳送選票函式,檢查在給定的輪和步驟中使用者是否被選擇為委員會成員,這一步用之前的加密抽籤函式實現。如果被選中,則使用者就會傳播乙個包含值(要投給的塊的雜湊)的簽名訊息傳遞。

計票函式,從這個緩衝區中讀取屬於當前輪和步驟的訊息。它通過呼叫每個訊息的這個函式來處理投票, 這個函式是用來確保投票的有效性的,它不僅返回訊息中包含的值,還返回與該值關聯的投票數。在計票函式while迴圈裡,只要乙個值超過t·τ票,就會返回該值。如果在分配的λ時間視窗內沒有收到足夠的訊息,則會產生超時並返回timeout。

第二階段,binaryba⋆這個函式。前面說了,是二選一。每個委員會成員都為乙個值投了一票,所有的使用者都對票數進行統計。在binaryba⋆()的每個步驟中,如果乙個使用者看到了某個值超過了t·τ票,那麼在下一步中將投票給相同的值。 然而,如果沒有任何值獲得足夠的選票,binaryba⋆()選擇下乙個投票。

在一般情況下,當網路強同步且塊提議者是誠實時,binaryba⋆()將為大多數使用者啟動相同的block_hash,並將在第一步達成共識,因為大多數委員會成員為相同 block_hash值投票。程式裡有顯示。

如果網路不是強同步的,binaryba⋆()可能在兩個不同的塊上返回共識。【例如,假設在binaryba⋆()的第一步中,所有的使用者投票給block_hash,但是只有乙個誠實的使用者a接收這些投票。 在這種情況下,a將在block_hash上返回共識,但所有其他使用者將轉到下一步。 現在,其他使用者再次給block_hash投票,因為countvotes()返回timeout。 但是,讓我們假設網路將所有這些投票放棄。 最後,使用者在第三步給投票empty_hash,網路表現良好,所有投票都被傳遞。 因此,使用者將繼續投票給empty_hash,直到下乙個迭代迴圈,此時他們在empty_hash上達成共識。】通過引入最終和暫定共識的概念來解決這個問題。ba⋆演算法main函式最後是判斷建立的是最終共識還是暫定共識。

位元幣 位元幣中的共識協議

在位元幣系統中,hash指標有兩個用途 指向前乙個區塊和指向某筆交易。位元幣支付過程中,每筆交易都必須包含輸入和輸出。在交易時,首先會從區塊中驗證交易輸入,驗證通過後才會執行交易輸出。這一步可以防止 雙花 攻擊。區塊鏈是乙個去中心化的分布式賬本,既然是分布式,那就需要網路中的各個節點對賬本資訊達成共...

RAFT 區塊鏈中分布式共識協議

即便如此paxos演算法還是沒有得到重視,2001年lamport 覺得同行無法接受他的幽默感,於是用容易接受的方法重新表述了一遍 paxos made 可見lamport對paxos演算法情有獨鍾。近幾年paxos演算法的普遍使用也證明它在分布式一致性演算法中的重要地位。2006年google的三...

康奈爾大學教授 共識協議面臨改革,明年是PoS之年

區塊鏈技術令人興奮,但其和加密貨幣解決方案目前仍處於學術層面。emin g n sirer是在計算機網路和p2p系統方面的著名研究學者。g n sirer 同時也是康奈爾大學的電腦科學教授。這位教授在大規模辯論中非常直言不諱,是乙個不怕批判加密貨幣社群成員的人。在中本聰願景大會上,g n sirer...