区块链系列----Pos大有可为
隨機數
隨機數對于區塊鏈技術來說很關鍵。 本質上,分布式賬本的核心問題就是隨機選擇出塊人的問題,這個隨機性要能被全網確認,并且不能被操控,也不能被預測, 否則惡意節點通過操控這個隨機數就可以操控長鏈,從而實現雙花攻擊。
Pow算法
PoW(工作量證明,Proof-of-Work)的方案是讓大家進行算力競賽,設置一個計算哈希的難題,誰先算出來誰贏,算力高的贏的概率高,算力低的贏的概率低,以這樣的方式保證勝出者是隨機的。投入的算力能夠體現在哈希值上, 這樣全網能夠驗證,并選擇包含最多算力的那條鏈。惡意節點只能通過提升自己的算力來增加攻擊成功的概率。
所以工作量證明需要消耗大量的算力,同時比特幣大約 10min 才會產生一個區塊,區塊的大小也只有 1MB,僅僅能夠包含 3、4000 筆交易,平均下來每秒只能夠處理 5~7(個位數)筆交易,所以比特幣網絡的擁堵狀況非常嚴重。
DPos算法
DPos(委托權益證明,Delegated Proof-of-Stake)能夠讓每一個人選出可以代表自己利益的人參與到記賬權的爭奪中,這樣多個小股東就能夠通過投票選出自己的代理人,保障自己的利益。DPos中最著名的便是EOS。
在 EOS 圈里,每一個被選出來的代表所能夠獲得的回報是如此的豐厚(EOS 每年增發額中 5% 的收益,大概是每年 4 億美金),這樣超高的利潤回報吸引著無數人蜂擁而至,參與到有關“誰來運行這些超級計算節點”的競選中去。
“任何一個超級節點候選人,都可以在任何一個地區拉票,作為 EOS 的持有者你也可以不分國別和地區的投給任何一個超級節點候選人。但盡管如此,從競選剛一開始,國別戰爭就開始了。”
不受開發者社群的待見,同時還面臨著來自韓國的激烈競爭,所以中國的 EOS 超級節點拿出來的新的戰略:賄選。
V神談EOS節點投票:我們必須繞開的陰影之地[附EOS節點投票]
有關信任的社會化共識,在很多具體的場景內是有用的。但是它無法達到普適性。在一個國家或者一家公司里所適用的共識,在另外的地方也許就得不到認可。而且它們也很難量化。它們看起來似乎是安全的,似乎都有“人”在為另外的人承擔相應的責任,但實際上人還是會出于經濟利益,被其他人擺布操控的。
Pos算法
POS(權益證明,Proof-of-Stake)權益證明是區塊鏈網絡中的使用的另一種共識算法,在基于權益證明的密碼貨幣中,下一個區塊的選擇是根據不同節點的股份和時間進行隨機選擇的。
如果“隨機”這一步沒有問題的話,惡意節點只能通過增加自己的份額,增加自己被選中的概率,從而增加雙花攻擊的成功概率。 這里有一點比PoW的方案要好就是,要實現攻擊,先得成為持幣大戶,如果攻擊成功幣價大跌,攻擊者也會承受最大的損失。 而PoW方案中雖然算力要花錢,但是如果攻擊者沒有持幣,那么他的利益和幣價不一定是正相關的,不能排除仍然存在攻擊的動力。
Cardano中的Ouroboros協議
那么接下來的核心問題就是,這個不能被操控不能被預測的隨機數從哪來。
傳統地PoS方案嘗試從鏈上現有的數據入手,比如使用上一個區塊的哈希值,上一個區塊的時間戳等等來作為隨機數的來源,但這些會帶來額外的安全風險。 因為區塊本身的信息就是節點寫進去的,然后又要根據里面的信息來選舉后續的出塊者,存在循環論證的嫌疑,安全性不會太好。 這也是傳統地認為PoS方案不如PoW可靠的部分原因。
Cardano項目采用的Ouroboros協議是被密碼學界證明安全的一個PoS協議,也是唯一一個被工業界采用的可證明安全性的PoS協議。 它采用密碼學的手段來生成這個隨機數。為了弄清楚這個過程,我們先從更基礎的密碼學工具開始:
- 1.承諾(Commitment)和打開(Open)
假設張三李四要玩剪刀石頭布,用傳統方式作弊者如果稍微出的晚一點,可以等看到對方的手勢后再做選擇。 為了防止這種情況,他們:
- 先各自做出選擇,然后把自己的選擇做個哈希;
- 交換這個哈希;
- 等雙方都收到對方的哈希后,再交換雙方的選擇;
- 驗證對方的選擇和之前的哈希一致;
這樣雙方都知道了對方的選擇,也能確認對方的選擇是提前就做好的。 這個哈希值就叫做承諾,因為它里面包含了保密信息,但又沒有泄漏保密信息,而最終發送對應的保密信息,就叫做打開承諾。
承諾和打開是一種模式,哈希只是實現手段之一。
- 2.簡單隨機數協議(Coin-Tossing)
現在我們可以設計一個多方生成隨機數的協議:
- 每個節點在本地產生一個隨機數,并把它的承諾廣播給其他人
- 當它收到所有人廣播的承諾后,再把打開也廣播給其他人。
- 最后大家把得到的隨機數異或到一起,因為異或操作滿足交換律和結合律,所以操作順序不影響結果。
最終大家都得到了一個一致的無法被操縱的隨機數。 但這個簡單協議的問題在于,惡意節點可以選擇終止協議,也就是不發送自己的打開,會使得其他人無法進行下去。要解決這個問題,我們還需要另一個工具。
- 3.可驗證秘密共享(Verifiable Secret Sharing)
秘密共享是說,一個人可以把一個需要保密的信息,拆分成n份,分別發送給n個人,只要惡意節點不超過一定數量,最終大家可以綜合各自的信息片段把原始信息還原出來。 并且就算分發者如果作弊,大家也可以檢查出來。具體的實現方式也有多種,這里就不深入了。
有了這個工具,就算惡意節點不發送打開,我們也能根據拆分信息還原出他的隨機數,如果他想在拆分信息上作弊,大家也能檢查出來并把他踢掉。
結合這幾個技術,我們就可以有一個完整的隨機數生成協議了。最后,因為我們本來就是個區塊鏈,所以協議過程中需要廣播的信息,我們可以直接寫到鏈上去, 這樣可以簡化實現,并且也不需要所有投票節點同時在線,并且如果有人作弊,作弊的記錄將會永遠保存在鏈上。
最后綜合一下整個協議流程:
- 在提交階段,每個節點本地生成隨機數和對應的承諾,同時把隨機數拆成n份匹配其他的投票節點, 并且用相應投票節點的公鑰對每一份信息進行加密,保證它只能被對應的節點解密, 然后把承諾和加密后的拆分信息一起廣播給區塊鏈。
- 當大家收到大部分節點的承諾和拆分信息后,就進入打開階段,每個節點把自己的打開發到鏈上。
- 然后是恢復階段,每個節點檢查是否有節點發送了承諾但沒有發送打開, 如果有,則解密自己對應的那份拆分信息并發布,然后根據大家發布的拆分信息恢復出該節點的隨機數。
- 現在大家就有了所有節點的隨機數,把它們異或到一起,最終得到了一個一致的隨機數,并用它來選擇下一輪的出塊人。
最后,這個隨機數不光可以用來選擇出塊人,也可以給智能合約用,這是PoS另一個好處; 而PoW體系雖然出塊人是隨機的,但并沒有產生一個具體的隨機數,所以智能合約要用隨機數,還是得從區塊鏈本身的數據里面去獲取了。
以太坊中的Casper協議
Casper是一種基于保證金的經濟激勵共識協議(security-deposit based economic consensus protocol)。協議中的節點,作為“鎖定保證金的驗證人(bonded validators)”,必須先繳納保證金(這一步叫做鎖定保證金,”bonding”)才可以參與出塊和共識形成。Casper共識協議通過對這些保證金的直接控制來約束驗證人的行為。具體來說就是,如果一個驗證人作出了任何Casper認為“無效”的事情,他的保證金將被罰沒,出塊和參與共識的權利也會被取消。保證金的引入解決了”nothing at stake”,也就是經典POS協議中做壞事的代價很低的問題。現在有了代價,而且被客觀證明做錯事的驗證人將會付出這個代價。
程序猿看這里——Vlad談Casper共識協議
總結
在區塊鏈共有鏈世界中,既不想純粹的浪費資源(Pow),又不想受到被他人擺布操控的干預(Dpos)。那么讓未來選擇Pos,純粹的機器共識。
作者:niyuelin(區塊鏈極客,一直致力于區塊鏈底層技術的研究) 歡迎大家加入區塊鏈技術探討群,QQ群號21911041總結
以上是生活随笔為你收集整理的区块链系列----Pos大有可为的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: latch: cache buffers
- 下一篇: python批量读取文件名_Python