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