去年年底參加Polkadot在北京聚會后,就一直在期待官方關于Staking這塊的經(jīng)濟與治理計劃,雖然最終方案還沒有定下,但是Web3地研究文檔看起來相當完整了,整個設計讓我有驚艷的感覺,看了很多以PoS為共識的項目,關于Staking經(jīng)濟的設計都不盡相同,新項目總會學習過往項目,這次Polkadot帶來的NPoS是具備相當創(chuàng)新程度,且一定程度解決PoS的現(xiàn)有問題。
Polkadot可以寫的東西還很多,這篇文章將會主要環(huán)繞Staking部分與NPoS公式挑選驗證人節(jié)點的方法,這兩個方面與持幣人與節(jié)的收益有非常密切的關系。
簡單為大家復習一下PoS共識項目的完整出塊過程
1. 團隊運行節(jié)點
2. 注冊成為驗證人
(過了基本門檻)
3. Staking過程
(持幣人委托給節(jié)點,或是團隊自由代幣進行Staking委托)
4. 選舉驗證人
(系統(tǒng)通過某種算法選出每一輪的出塊節(jié)點或是驗證節(jié)點,這篇文章細說的就是Polkadot的NPoS選舉算法)
5. 打包交易、廣播交易、驗證人確認一連串過程
6. 獲得獎勵
(獎勵是由節(jié)點與持幣人按照Staking比例分配)
從持幣人的角度,更簡單理解PoS
持幣人擁有以PoS為共識的代幣Moon,將Moon進行Staking委托給喜歡的節(jié)點,節(jié)點代持幣人進行出塊并獲得獎勵,獎勵依照Staking比例進行分發(fā)。(Staking比例=持幣人參與Staking的Moon數(shù)量/所有參與Staking的Moon數(shù)量)。
上面提到的是一般的PoS項目計算獎勵的做法(獎勵多寡與持幣人Staking量為正相關)
Polkadot提出了NPoS, 初衷是為了解決過去PoS運行后,遇到的問題,因為獎勵與Staking量正相關造成富有節(jié)點更富有,代幣分配趨向中心化。
NPoS里最終獎勵結(jié)果不是依據(jù)Staking量,而是依據(jù)每個被選出節(jié)點確實出塊的工作量計算(白話來說就是不管節(jié)點擁有多少Staking量,出一個塊或是驗證一個塊得到的獎勵是一樣的),NPoS將解決一部分大節(jié)點因為Staking量大獲得更多獎勵的問題,但同時也損害了一些大節(jié)點利益。
PS: 個人意見一般項目在初期不一定適合這樣的做法,這是一個博弈過程,Polkadot是一個明星項目,他認為大多數(shù)的人愿意參與到網(wǎng)路中,即使超過一定Staking量的節(jié)點不會獲得如預期那么多的收益,他們還是愿意貢獻
Polkadot究竟是怎么做到的呢?
NPoS既然有別于傳統(tǒng)PoS項目,不是Staking權重越高出塊概率越高,我們就要詳細說明下NPoS選舉驗證人的算法。
非常詳細的文檔在Web3的研究中,另外有一篇medium文章“How Nominated Proof-of-Stake will work in Polkadot”,我參考了里面的舉例(Web 3研究中有很多數(shù)學,如果發(fā)現(xiàn)我的邏輯錯誤請告訴我)
NPoS的共識算法歷史
NPoS參考了當時19世紀末,一個瑞典數(shù)學家Lars Edvard Phragmén提議的選舉方法,當時瑞典的國會席位都是被主流黨派占據(jù),通過他的算法能更公平的讓席位分配是和投票的比例有更高的聯(lián)系,小黨派能夠獲取過去沒有辦法獲得的席位,Polkadot團隊認為兩者在設計理念上有相似之處,改良后就是現(xiàn)在看到的NPoS。
NPoS的選舉人算法,我們都知道區(qū)塊鏈這個分布式系統(tǒng)是由眾多分散各地的節(jié)點(驗證人)來維護,在PoS共識里大部分的鏈為了保證一定效率及安全下,會限制一定數(shù)量的驗證人進行出塊,也就是沒有被選上的驗證人就只是備選出塊人,而NPoS就是從一群驗證人中選取出正式驗證人,Polkadot里把一群正式驗證人成為選舉人委員會(Committee)。
選舉人算法有三大客觀目標
1. 平衡Balance
一旦選舉人委員會確定后,會將持幣人Nominators的Staking量盡可能平均分配給每個選上的選舉人Validators。
PS: 持幣人是可以選擇多個選舉人的,所以存在系統(tǒng)重新分配空間
2. 最大支持Support
選出一個選舉人委員會,委員會中的選舉人Validators收到的Staking量要盡可能貼近總持幣用戶Nominators的Staking量。
3. 公平代表FairRepresentation
選出一個選舉人委員會,其中持幣人Nominators的投票權不會被過度代表,也不會被低估代表。
PS: 持幣人可以選擇多個節(jié)點,公平代表最簡化是,每個持幣人對應到的節(jié)點至少有一個會被選出,加上現(xiàn)實條件(持幣狀況及系統(tǒng)要選出幾個節(jié)點)后有些節(jié)點會被淘汰,但盡可能保證擁有一定Staking權重的持幣人可以至少對應到一個節(jié)點。
基于這三大原則篩選出來的驗證人群(選舉人委員會)可能有多個,最終系統(tǒng)會挑選出一組最合理的Committee(選舉人委員會)進行出塊,看起來很復雜很懵吧,我最開始也繞了很久,接下來會搭配下面持幣人選舉驗證人的例子,大家會更加清晰的理解,建議先快速看過這個例子,然后閱讀過程中搭配上面三個選舉人算法的客觀目標思考,最后再仔細看一次例子。
這是Medium上官方人員的舉例(我會協(xié)助大家更好的理解)
假設有5個持幣人(左邊),5個節(jié)點(右邊),要從中選出4個節(jié)點進行出塊,為了簡化模型先忽略節(jié)點自己擁有Staking量
下面是選舉結(jié)果的舉例(我一一為大家說明)
第一張圖(最左邊)
并不符合公平代表(FairRepresentaTIon)的目標,因為圖中第一個持幣人擁有10Dot的權重, 相比第五個持幣人只有3Dot的權重,最終卻沒有對應到任何他支持的節(jié)點,不符合公平代表目標擁有一定Staking權重的持幣人至少對應到一個節(jié)點(在現(xiàn)在情況下,第一個持幣人是拿不到獎勵的)。
第二張圖
符合公平代表(FairRepresentaTIon)的目標,有些人可能會質(zhì)疑為什么E節(jié)點選上了,而B節(jié)點沒有選上,這和接下來會舉例的重新分配算法相關,這邊簡單理解,圖中第二個持幣人同時支持了3個節(jié)點,系統(tǒng)只要保證他支持的節(jié)點至少有一個被選舉上就好(這邊他支持的節(jié)點有兩個選上,第二個持幣人所有Staking量將會被分配到這兩個節(jié)點上),同時保持第五個持幣人也有支持的節(jié)點E,對于Polkadot這樣的選舉結(jié)果是可能之一。
第三張圖
符合公平代表(FairRepresentaTIon)的目標,有些人可能會質(zhì)疑這個與第二張圖產(chǎn)生矛盾,目標是盡可能讓每個持幣人最少要有一個支持節(jié)點被選上,那第5個持幣人支持的節(jié)點沒有被選上,因為整個系統(tǒng)只需要選出4個節(jié)點,所以第五個Staking權重低的持幣人支持的節(jié)點沒有選上的結(jié)果是可能之一。
以下是上述兩個符合公平原則的選舉人委員會可能結(jié)果,確立選舉人委員會后系統(tǒng)還要經(jīng)過Staking權重重新分配
Polkadot系統(tǒng)會在每次從中選出一個更公平分配且具備安全性的結(jié)果,這個例子中選擇右邊因為它平均分配的更好,右邊的節(jié)點中平均最低都擁有了9的Staking權重。
以上就介紹完Polkadot的選舉算法了,上面的邏輯非常的繞,背后的數(shù)學更是復雜,官方的舉例是在一個簡單的情況下,真實情況如果放大到100個節(jié)點,每個持幣人Staking權重都不同,同時又委托給多個節(jié)點,就會相當相當復雜,大家可以多思考幾遍,依照上面提到的三大目標,每一個目標都可以當作標準檢驗一遍,就能夠更明白。
NPoS這個選舉算法動態(tài)分配持幣人Staking權重,還基于一些規(guī)則挑選出最后的選上的節(jié)點,對現(xiàn)有的PoS生態(tài)中造成了一些不同
1. 在持幣人可以選擇多個節(jié)點下,大節(jié)點不努力爭取社區(qū)支持,也有機會在算法下被排除在外(如圖二中間B節(jié)點)
2. 在平衡staking量目標下,小且沒有資本的節(jié)點更有利,因為只要社區(qū)中越多人選擇它,在系統(tǒng)分配Staking量的機制下,選上出塊可以獲得獎勵概率更高(如圖二右邊D節(jié)點)
3. 在平衡staking量目標下,大節(jié)點利潤相對被壓縮,大節(jié)點需要思考是否將自己的幣委托出去,能獲得更多利潤
4. 持幣人更有動機去選擇小節(jié)點,利潤更高,因為獎勵是依據(jù)被選上節(jié)點的工作量計算的,只要持幣人支持的小節(jié)點成功選上進行出塊,小節(jié)點上累積的Staking的權重沒有那么高,不同持幣人依據(jù)委托給小節(jié)點的Staking比例分獎勵,相對于委托給大節(jié)點,委托給小結(jié)點利潤更高(就想像每個節(jié)點都賺10塊錢,大節(jié)點需要和100個人分,小節(jié)點只需要和30個人分)
Polkadot到底想解決現(xiàn)有PoS什么問題
1. 一部分不可避免地中心化問題
2. 低手續(xù)費未來不會無限地吸引staking量,因為收益是看節(jié)點工作量
(現(xiàn)在Cosmos上就出現(xiàn)0手續(xù)費節(jié)點吸引大量持幣人委托,在Polkadot里這樣高Staking權 重的節(jié)點與普通Staking權重的節(jié)點獲得的收益是一樣的)
3. 持幣人可以通過挑選不同節(jié)點最大化自己利益,同時促進去中心化
(對于持幣人就可以有多種委托策略,我可以挑選安全可靠的節(jié)點,同時也可以挑選一些小但是也挺靠譜節(jié)點,可以獲得更高收益率)
Polkadot在整個機制其實非常復雜,我可能也有漏掉的地方,怎么攻擊這樣的機制,包掛選舉算法到底有沒有漏洞可以鉆,都需要專業(yè)人士投入大量精力區(qū)專研,這邊就不進行討論。