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