當前位置:編程學習大全網 - 源碼下載 - POA(Proof of Activity)區塊鏈***識算法

POA(Proof of Activity)區塊鏈***識算法

POA(Proof of Activity)算法是壹個區塊鏈的***識算法,基本原理是結合POW(Proof of work)和POS(Proof of stake)算法的特點進行工作,POW算法和POS算法的具體內容可以參考:

POW算法 : /p/b23cbafbbad2

POS算法 : /wgwgnihao/article/details/80635162

POA算法相比於其他算法可以改進網絡拓撲,維持在線節點比例,需求更少的交易費同時減少***識算法過程中的能量損耗。

POA算法需求的網絡中同樣包含兩類節點,礦工和普通參與者,其中普通參與者不壹定壹直保持在線。POA算法首先由礦工構造區塊頭,由塊頭選出N個幣,這N個幣的所有者參與後續的校驗和生成塊的過程。

從這裏可以看到POA算法不僅與算力有關,後續的N個參與者的選舉則完全由參與者在網絡中所擁有的幣的總數量決定。擁有越多幣的參與者越有機會被選為N個後續的參與者。而後續N個參與者參與的必要條件是這N個參與者必須在線,這也是POA命名的由來,POA算法的維護取決於網絡中的活躍節點(Active)。

POA算法的壹個理想的基本流程是,類似於POW協議,礦工構造出壹個符合難度要求的塊頭,通過礦工得到的塊頭計算衍生出N個幣的編號,從區塊鏈中追溯可以得到這幾個幣目前所述的參與者。礦工將這個塊頭發送給這N個參與者,其中前N-1個參與者對這個塊進行校驗和簽名,最後第N個參與者校驗並將交易加入到該塊中,將這個區塊發布出去,即完成壹個區塊的出塊。

壹個理想過程如下圖所示:

在實際運行中,無法保證網絡上所有參與者都在線,而不在線的參與者則無法進行校驗和簽名,這個無法被校驗和簽名的塊頭則會被廢棄。

即在實際運行中,應該是壹個礦工構造出塊頭後廣播給各個參與者簽名,同時繼續重新構造新的塊頭,以免上壹個塊頭衍生的N個參與者存在有某壹個沒有在線,而導致塊頭被廢棄。

因此,在這種情況下,壹個塊是否被確認不僅與礦工的計算能力有關同時也與網絡上的在線比例有關。

與純POW相比,在與比特幣(POW)同樣10分鐘出壹個塊的情況下,POA由於會有參與者不在線而產生的損耗,因此,10分鐘內礦工可以構造的塊的數量會更多,即塊頭的難度限制會降低,那麽礦工在挖礦過程中會造成的能量損耗也會降低。

與純POS相比,可以看到POA的出塊流程並不會將構造區塊過程中的相關信息上鏈,可以明顯減少區塊鏈上用於維護協議產生的冗余信息的量。

本節對上訴協議中壹些參數設置進行分析

在礦工構造出塊頭後對塊頭進行校驗和區塊構造的N個參與者的數量選定比較類似於比特幣中每壹個塊的出塊時間的選取。比特幣中選擇了10分鐘作為每壹個塊的期望出塊時間並通過動態調節難度來適應。

這裏N的取值同樣可以選擇選定值或者動態調節。動態調節需要更加復雜的協議內容,同時可能會帶來區塊鏈的數據膨脹,而復雜的協議也增加了攻擊者攻擊的可能性。另外暫時沒有辦法證明動態調節可以帶來什麽好處。靜態調節在後續的分析(4 安全分析)中可以得到N=3的取值是比較合適的。

從上面的描述可以看到,構造新的區塊的除了礦工還有從塊頭中衍生出來的N個幣所有者。在構造出壹個新的區塊後,這些參與者同樣應該收到壹定的激勵,以維持參與者保持在線狀態。

礦工與參與者之間的非配比例與參與者的在線狀態相關。給予參與者的激勵與參與者保持在線狀態的熱情密切相關,越多參與者保持在線狀態,能更好地維持網絡的穩定。因此,可以在網絡上在線參與者不夠多的時候,提高參與者得到的激勵分成比例,從而激發更多的參與者上線。

如何確定當前參與者的在線情況呢?可以最後第N個參與者構造區塊時,將構造出來但是被廢棄的塊頭加入到區塊中,如果被丟棄的塊頭數量過多,說明在線人數過低,應當調節分成比例。

同時最後第N個參與者與其他參與者的分成同樣需要考慮,第N個參與者需要將交易加入區塊中,即需要維護UTXO池,同時第N個參與者還需要將被丟棄的塊頭加入新構建的區塊中。

為了激勵其將廢棄區塊頭加入新構建的區塊中,可以按照加入的區塊頭,適當增加壹點小的激勵。雖然加入更多的區塊頭,可以在下壹輪的時候增加分成的比例,應當足夠激勵參與者往區塊中加入未使用的塊頭了(這裏參與者不可能為了增加分成而更多地加入區塊頭,每壹個區塊頭都意味著壹位礦工的工作量)。

壹個參與者如果沒有維護UTXO池則無法構造區塊,但是可以參與前N-1個的簽名,因此為了激勵參與者維護UTXO池,作為最後壹個構造區塊的參與者,必須給予更多的激勵,比如是其他參與者的兩倍。

從3.2的描述中可以知道壹個用戶必須在線且維護UTXO池才可能盡可能地獲得利益。這種機制勢必會導致壹些用戶將自己的賬戶托管給壹個中心化的機構。這個機構壹直保持在線,並為用戶維護其賬戶,在被選為構造區塊的參與者時參與區塊的構建並獲取利益。最後該機構將收益按照某種形式進行分成。

上面說到參與者必須用自己的密鑰進行簽名,而托管給某個機構後,這個機構在可以用這個密鑰簽名構造區塊的同時,也有可能使用這個密鑰消費用戶的財產。這裏可以采用壹種有限花銷的密鑰,這個密鑰有兩個功能,壹個是將賬戶中的部分財產消費出去,另壹個是將所有財產轉移到壹個指定賬戶。在托管的時候可以使用這個密鑰,在被通知部分財產被花費後可以立即將所有財產轉移到自己的另壹個賬戶下,以保證財產的安全。

從上面的分析可以看到,POA的安全性與攻擊者所擁有的算力和攻擊者所擁有的股權有關。假設攻擊者擁有的在線股權占比為 ,則攻擊者的算力需要達到其他所有算力的 倍才能達成分叉。假設攻擊者股權總占比為 ,網絡中誠實用戶的在線比例為 ,則攻擊者的算力需要達到其他所有算力的 倍才能達成攻擊。

攻擊的分析表格如下:

從上文的分析可以看到,POA算法相比於其他算法可以改進網絡拓撲,維持在線節點比例,需求更少的交易費同時減少***識算法過程中的能量損耗。同時,PoA協議的攻擊成本要高於比特幣的純PoW協議。

參考文獻:Proof of Activity: Extending Bitcoin’s Proof of Work via Proof of Stake

  • 上一篇:Autojs檢測並開啟無障礙服務
  • 下一篇:進口電視故障代碼
  • copyright 2024編程學習大全網