共識(shí)算法作為區(qū)塊鏈的基石之一,快速和不可逆是我們重點(diǎn)關(guān)注的目標(biāo)。除此之外,為了更好地建設(shè)公鏈生態(tài),我們認(rèn)為公平性同樣重要,如果大資本可以輕松占據(jù)公鏈中區(qū)塊共識(shí)的話語權(quán),那么會(huì)有很多公鏈上的開發(fā)者和用戶的利益無端受損,一個(gè)不能保障公鏈建設(shè)者利益的生態(tài),很難沉淀出價(jià)值深度,和星云鏈設(shè)計(jì)原則相違背。所以我們在設(shè)計(jì)共識(shí)算法時(shí),在優(yōu)先保證快速和不可逆的情況下,將盡可能追求公平性,維護(hù)公鏈建設(shè)者的利益。
常用共識(shí)算法的缺陷
我們試圖在較為常用的共識(shí)算法中找到符合我們設(shè)計(jì)目標(biāo)的選擇,但是這些算法和我們的目標(biāo)多少都有些差距。
PoW (Proof of Work) 工作量證明共識(shí)算法為零和博弈,采用競爭性哈希計(jì)算來確定記賬人,導(dǎo)致了整個(gè)生態(tài)每次出塊時(shí)都有大量電能在競爭中被無端消耗,挖礦成本高,而且速度受限。如果把公鏈參與者作為整體來看,隨著參與挖礦的節(jié)點(diǎn)增加,每個(gè)節(jié)點(diǎn)獲得記賬權(quán)的概率將會(huì)減小,那么 PoW 協(xié)議下生態(tài)維持平穩(wěn)出塊的成本將會(huì)持續(xù)升高。不斷增加挖礦難度的 Bitcoin 早晚需要?臨礦機(jī)收益入不敷出的情形,而Ethereum 則早已在考慮使用新的 PoS 共識(shí)算法 Casper來逐步取代現(xiàn)階段的 PoW 共識(shí) ??梢?,從挖礦速度和經(jīng)濟(jì)成本?度,PoW 都不利于公鏈生態(tài)的長期快速發(fā)展,和我們“快速”的目標(biāo)不相符。
PoS (Proof of Stake) 股權(quán)證明共識(shí)算法試圖采用資產(chǎn)的多寡來取代算力的作用,按照幣齡或者押金數(shù)額來分配獲得記賬權(quán)的概率,現(xiàn)階段 Peercoin 和 Ethereum 的 Casper 協(xié)議都采用了 PoS 共識(shí)算法。這種算法解決了 PoW 高能耗的弊端,但很直觀地放大了資本對記賬權(quán)概率分配的影響,相較于 PoW,在PoS 下大資本更容易占據(jù)生態(tài)的話語權(quán),形成大集團(tuán)壟斷,可能會(huì)對生態(tài)的建設(shè)者的利益造成損害,不利于公鏈生態(tài)的價(jià)值沉淀,同樣和我們“公平性”的目標(biāo)不相符。
PoI (Proof of Importance) 重要度證明共識(shí)算法最早由 Nem 提出,不同于 PoS,PoI 中引入了賬戶重要程度的概念,使用賬戶重要性評分來分配記賬權(quán)的概率。這種算法解決了 PoW 的高能耗弊端,減緩了 PoS 的資本壟斷危機(jī),但暴露了 nothing-at-stake 的問題,作弊者逆轉(zhuǎn)一個(gè)區(qū)塊的成本被大大降低,和我們“不可逆”的目標(biāo)不相符。
綜上,鑒于常用共識(shí)算法和我們目標(biāo)存在差距,我們提出了基于賬戶貢獻(xiàn)度的 PoD (Proof of Devotion)算法,將評估賬戶綜合影響力的 PoI 和具有嚴(yán)格經(jīng)濟(jì)懲罰的 PoS 相融合,利用 PoS 強(qiáng)化 PoI 的不可逆性,使用 PoI 反向遏制了 PoS 的壟斷性,以此為生態(tài)自由快速發(fā)展助力。
PoD 算法設(shè)計(jì)
1. 新區(qū)塊產(chǎn)生
類似 PoI 共識(shí)算法選取重要性高的賬戶,PoD 將選取生態(tài)中貢獻(xiàn)度較高的賬戶,不同之處在于,PoD賦予選取出來的賬戶平等概率的記賬權(quán)來參與產(chǎn)生新區(qū)塊 (block),防?概率傾斜衍生壟斷。
在選擇貢獻(xiàn)度較高的賬戶時(shí),我們使用了星云鏈原生的 NR 普適價(jià)值尺度評估。在 NR 的算法設(shè)計(jì)中,著重考慮了賬戶的流動(dòng)性和傳播性,我們認(rèn)為滿足這些性質(zhì)的賬戶對生態(tài)建設(shè)貢獻(xiàn)度較高。所以在 PoD 中,將選取 NR 排名 Top N 的賬戶,這些賬戶自愿繳納一定數(shù)量的 Nas 作為押金后則有資格成為新區(qū)塊的驗(yàn)證者 (validator),參與記賬。
在給定驗(yàn)證者集合 (validators set) 之后,PoD 算法通過偽隨機(jī)數(shù)來決定驗(yàn)證者集合中誰是新的區(qū)塊的提議者 (proposer),提議者產(chǎn)生新區(qū)塊。驗(yàn)證者集合不是固定不變的,有資格的賬戶可以選擇加入或者退出驗(yàn)證者集合,而隨著周期性 NR 的變化,有資格的賬戶也會(huì)不一樣。所以我們在 PoD 設(shè)計(jì)了驗(yàn)證者集合動(dòng)態(tài)變化機(jī)制,來實(shí)現(xiàn)驗(yàn)證者集合的更迭。
2. 驗(yàn)證者集合更迭
驗(yàn)證者集合的更迭就如朝代變更一樣,于是我們將驗(yàn)證者集合按照朝代 (dynasty) 做劃分,一個(gè)朝代內(nèi)驗(yàn)證者集合不會(huì)發(fā)生變化。一個(gè)朝代不能更迭地過快,至少要保持一段時(shí)間不做變更,因此我們將每 X 個(gè)區(qū)塊定義為一個(gè) Epoch,在同一個(gè) Epoch 中朝代不會(huì)發(fā)生變化。所以朝代的變更只會(huì)發(fā)生在 Epoch 交接時(shí),在此時(shí)將會(huì)考察上一個(gè) Epoch 的第一個(gè)區(qū)塊,如果此區(qū)塊到達(dá)了 finality 狀態(tài),那么當(dāng)前 Epoch 進(jìn)入下一個(gè)朝代 D1,否則延續(xù)上一個(gè)朝代 D0 不變,如圖13所示。
由于網(wǎng)絡(luò)延遲,各個(gè)節(jié)點(diǎn)可能在朝代更迭時(shí),看到的區(qū)塊 G 是否 finality 的狀態(tài)不一致,所以參考Casper 的動(dòng)態(tài)驗(yàn)證集策略,要求每一個(gè)朝代的共識(shí)過程將由當(dāng)前朝代和上一個(gè)朝代的驗(yàn)證者集合共同完成。因此在任意一個(gè)朝代,有資格的賬戶只能申請加入或者退出 D+2 朝代的驗(yàn)證者集合,當(dāng)朝代變更到D+2 時(shí),才可加入新區(qū)塊的共識(shí)過程。
3. 共識(shí)過程
新的區(qū)塊被提出后,當(dāng)前朝代驗(yàn)證者集合中所有人將會(huì)參與一輪 BFT (Byzantine Fault Tolerant) ?式的投票,來確定此區(qū)塊的合法性。在投票最開始,每一個(gè)參與此區(qū)塊共識(shí)的驗(yàn)證者將會(huì)被從押金中收取 2x(x 為激勵(lì)獎(jiǎng)金?例) 的保證金,然后進(jìn)入兩階段的投票過程。
? 第一階段,所有驗(yàn)證者需要對新區(qū)塊投 P repare 票,投完 P repare 票的驗(yàn)證者將獲得 1.5x 的獎(jiǎng)勵(lì),如果在當(dāng)前朝代和上一個(gè)朝代中都有超過 2/3 的押金總額的驗(yàn)證者對新區(qū)塊投了 P repare 票,那么該區(qū)塊進(jìn)入投票的第二階段。此處需要說明,新區(qū)塊的提議者將被默認(rèn)對新區(qū)塊投 P repare 票。
? 第二階段,所有驗(yàn)證者需要對新區(qū)塊投 Commit 票,投完 Commit 票的驗(yàn)證者,可以再獲得 1.5x 的獎(jiǎng)勵(lì),如果在當(dāng)前朝代和上一個(gè)朝代中都有超過 2/3 的押金總額的驗(yàn)證者對新區(qū)塊投了 Commit 票,那么該區(qū)塊到達(dá) finality 狀態(tài)。
為了加速整個(gè)生態(tài)向前延展,如果區(qū)塊 b 的 P repare 和 Commit 票的時(shí)間戳和區(qū)塊 b 的時(shí)間戳相差超過 T,那么這些票將被視為過期,直接忽略。
4. 分叉選擇
PoD 算法以每個(gè)高度上區(qū)塊的得分來選擇權(quán)威鏈,總是選擇得分最高的區(qū)塊加入權(quán)威鏈,在高度 h 的區(qū)塊 b 的得分如下,
即為該區(qū)塊及其所有后代區(qū)塊收到的 commit 票對應(yīng)的押金總和,如圖14所示。
5. 投票規(guī)則
為了避免共識(shí)過程被惡意破壞,導(dǎo)致共識(shí)過程沒法完成,阻礙生態(tài)發(fā)展,PoD 參考 Casper 的最小懲罰規(guī)則來約束驗(yàn)證者的共識(shí)活動(dòng)。
假設(shè)共識(shí)過程中的 P repare 和 Commit 票結(jié)構(gòu)如下,
? P repare(H, v, vs),其中 H 為當(dāng)前區(qū)塊 hash,v 表示當(dāng)前區(qū)塊高度,vs 表示 v 的某個(gè)祖先區(qū)塊高度
? Commit(H, v),其中 H 為當(dāng)前區(qū)塊 hash,v 表示當(dāng)前區(qū)塊高度
PoD 算法為整個(gè)投票過程制定了如下 4 條基本規(guī)則,
? 單個(gè)區(qū)塊的兩階段共識(shí)過程存在嚴(yán)格的先后順序,只有在第一階段 P repare(H, v, vs) 票總權(quán)值達(dá)到2/3 后,驗(yàn)證者們才可以投出第二階段的 Commit(H, v) 票,
? 多區(qū)塊間不強(qiáng)制一個(gè)區(qū)塊共識(shí)結(jié)束后才能開始后一個(gè)區(qū)塊的共識(shí),允許交織共識(shí) (interwoven consensus),但是不能完全沒有秩序只有高度vs 完成了第一階段過程,擁有 2/3 的 P repare(Hanc, vs, vs’)后,才可以基于 vs 對其后代區(qū)塊投 P repare(H, v, vs) 票,保證交織穩(wěn)步向前
? 為了避免有節(jié)點(diǎn)利用交織共識(shí)惡意跨多區(qū)塊投票,要求基于高度 u 投出了 P repare(H, w, u) 票之后,對于高度在跨度 u 和 w 之間的所有區(qū)塊,不能再投出 Commit(H, v) 票,保證共識(shí)過程的高效有序
? 為了制?節(jié)點(diǎn)用同一筆押金在多個(gè)分支上同時(shí)下注,導(dǎo)致 nothing at stake 的問題,要求在一個(gè)高度投出 P repare(H1, v, vs1) 票之后,不能再投出不一樣的 P repare(H2, v, vs2) 票違反上述規(guī)則的驗(yàn)證者一旦被舉報(bào)核實(shí),將會(huì)被罰掉所有押金,舉報(bào)者們將會(huì)共享罰金的 4% 作為獎(jiǎng)勵(lì),罰金的剩余部分將會(huì)被銷毀。
PoD 經(jīng)濟(jì)分析
1. 激勵(lì)分析
參與 PoD 算法的驗(yàn)證者,在每一個(gè)合法區(qū)塊上可以獲得 1x 的星云幣獎(jiǎng)勵(lì),如果網(wǎng)絡(luò)不暢或者有人作弊導(dǎo)致 Prepare 階段沒有辦法完成進(jìn)入 Commit 階段,那么所有驗(yàn)證者將損失 0.5x。因此成為驗(yàn)證者的價(jià)值節(jié)點(diǎn)在保持網(wǎng)絡(luò)暢通,不參與作弊的情況下,將共享大量記賬收益。
2. 作弊分析
雙重支付攻擊 (double spend)
假設(shè)商戶 merchant 等到新區(qū)塊到達(dá) finality 狀態(tài)就確認(rèn)交易發(fā)貨,那么 fraud 要在 PoD 共識(shí)算法下完成雙重支付攻擊實(shí)現(xiàn)零成本購物要付出的最小代價(jià)如下:
?先,fraud 需要提高自己的 Nebulas Rank 到 Top N,然后繳一定數(shù)的 NaS 作為押金成為驗(yàn)證者,并申請參與 D+2 朝代區(qū)塊的驗(yàn)證。
然后,fraud 需要被偽隨機(jī)算法選中為新區(qū)塊的提議者,此時(shí) fraud 提出兩個(gè)高度相同的新區(qū)塊,一個(gè)哈希值為 hash1 包含 fraud 向 merchant 的轉(zhuǎn)賬交易,另一個(gè)哈希值為 hash2 包含 fraud 向 fraud 自己的轉(zhuǎn)賬交易。
最后,為了讓 hash1 和 hash2 區(qū)塊都到達(dá) finality,如圖15所示,fraud 至少需要花費(fèi)所有押金的 1/3來賄賂 1/3 的驗(yàn)證者,讓他們給兩個(gè)區(qū)塊都投 Commit 票。
所以要完成一次成功的雙重支付攻擊,fraud 需要花費(fèi)一定的精力和財(cái)力來提升自己的 Nebulas Rank排名,然后等到幸運(yùn)地被選為提議者時(shí),至少花費(fèi)總押金的 1/3 來讓兩個(gè)塊同時(shí)到達(dá)finality 狀態(tài)。
51% 攻擊 (51% attack)
在 PoW 中要發(fā)起 51% 攻擊需要 51% 的算力,在 PoS 中則需要 51% 的押金,而在 PoD 中,則需要驗(yàn)證者集合中 51% 的賬戶,這意味著擁有足夠多的高聲望用戶進(jìn)入 Nebulas Rank 的 Top N,并且需要支付對應(yīng)的押金,因此在 PoD 中 51% 攻擊將更為困難。
短程攻擊 (short-range attack)
PoD 中的每個(gè)高度上的區(qū)塊都有共識(shí)有效期,如果某個(gè)高度距離最新高度超過 100 時(shí),該高度的所有區(qū)塊在共識(shí)過程中將被視為過期,那么這些區(qū)塊上的所有新的共識(shí)活動(dòng)將會(huì)被直接忽略。因此要在 PoD 中完成長程攻擊 (long-range attack) ?乎不可能,但是在有效期內(nèi)依舊存在發(fā)起短程攻擊的可能性。
短程攻擊者 Attacker 試圖在高度 H+1 的區(qū)塊還沒有過期的情況下,偽造 A 鏈來替代 B 鏈成為權(quán)威鏈,Attacker 需要讓區(qū)塊 A1 的得分? B1 更高。由于多投會(huì)被嚴(yán)懲,所以 Attacker 將不可避免地要賄賂驗(yàn)證者,否則無法完成短程攻擊。為了展現(xiàn) PoD 共識(shí)算法的安全性,下?分別分析使不同數(shù)量的區(qū)塊失效時(shí),Attacker 需要付出的代價(jià)。
如果 Attacker 想要使 B1 失效,最小代價(jià)的情況如圖16,就相當(dāng)一次雙重支付攻擊,Attacker 幸運(yùn)地成為了 H+1 高度的區(qū)塊提議者,那么至少需要賄賂朝代 D0 中 1/3 的驗(yàn)證者多投使 A1 達(dá)到 finality,最小代價(jià)為所有押金的 1/3。
如果 Attacker 想要使 B1-B2 失效,假設(shè) B1 和 B2 都已到達(dá) finality,塊中交易都已生效,為了讓這些交易失效,這?考慮兩種情況。第一種如圖17中 (a) 所示,高度 H+1 和 H+2 在同一個(gè) Epoch 中,朝代相同,那么 Attacker ?先需要賄賂 D0 中 1/3 的驗(yàn)證者使 A1 達(dá)到 finality,此時(shí)這 1/3 的驗(yàn)證者將會(huì)被懲罰,押金被罰完。在 A2 的驗(yàn)證中整體押金總和只有 A1 中的 2/3,此時(shí) Attacker 想要讓 A2 到達(dá)和 B2同價(jià)值的 committ 票,需要賄賂剩下所有沒有作弊的驗(yàn)證者,合起來至少需要損失總押金的 3/3,即使如此也不能保證 A1 得分? B1 高,攻擊失敗風(fēng)險(xiǎn)高。第二種情況如圖17中 (b) 所示,高度 H+1 和 H+2 正好在不同的 Epoch 中,且朝代不相同,那么此時(shí) Attacker 需要賄賂 D0 中的 1/3 來讓 A1 到達(dá) finality,然后賄賂 D1 中的 1/3 來讓 A2 達(dá)到 finality,完成一次這樣的攻擊至少需要損失總押金的 2/3。綜上,想要發(fā)起短程攻擊導(dǎo)致兩個(gè) finality 區(qū)塊失效,至少需要花費(fèi)總押金 2/3 的代價(jià)。
如果 Attacker 想要使 B1-B3 失效,如圖18所示,Attacker ?先需要賄賂 D0 中 1/3 的人完成 A1 的finality,然后賄賂 D1 中 1/3 的人完成 A2 的 finality,最后需要賄賂 D1 中剩下 2/3 中的所有人來完成A3 的 finality,綜上至少要損失總押金的 4/3。要完成這些攻擊準(zhǔn)備將會(huì)十分困難,而且即使有幸做到了,也不定能保證 A1 的得分? B1 高,攻擊也可能會(huì)失敗。
如果 Attacker 想要使 B1-BN 失效,其中 N 受到區(qū)塊共識(shí)有效期的限制,不會(huì)很大,由于 N = 3 時(shí)當(dāng)前朝代所有驗(yàn)證者的押金就會(huì)被全部罰完,所以 N 》= 4 時(shí),將沒法完成攻擊讓 B1 得分? A1 高,使B1-BN 失效,發(fā)起這樣的攻擊沒有任何意義。
評論
查看更多