国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Nervos CKB 共識協(xié)議 NC-Max:突破 Nakamoto Consensus 吞吐量的極

用戶83 / 1214人閱讀

摘要:最后,在中采用了一個的變體作為共識協(xié)議,擁有更高的吞吐量。知識點(diǎn),在比特幣改進(jìn)協(xié)議中提出,能夠減少網(wǎng)絡(luò)節(jié)點(diǎn)廣播區(qū)塊所需的帶寬數(shù)量。下面我們來進(jìn)一步分析這些協(xié)議的安全性功能性和吞吐量。當(dāng)這些安全性假設(shè)被違反,會為這些協(xié)議帶來災(zāi)難性的后果。

帶寬實(shí)際上是區(qū)塊鏈吞吐量的最大限制,在美國舊金山舉辦的 Scaling Bitcoin Meetup 中,Nervos & Cryptape 研究員張韌從「帶寬利用率」角度分析了諸多共識協(xié)議的效率和可行性。

Algorand 的帶寬利用效率如何?Cardano 的 Ouroboros 怎么樣?Solana、NKN 為什么能有那么高的TPS?以太坊將出塊間隔縮短到 15 秒,為什么并沒有比比特幣吞吐量高出很多?

這些問題,張韌博士都會在分享中一一回答。以下為韌博士演講稿整理,如若希望和韌博士進(jìn)行進(jìn)一步討論,歡迎點(diǎn)擊:https://talk.nervos.org/t/ner...,我們在 Nervos Talk 共同探討。

閱讀本文對讀者的區(qū)塊鏈基礎(chǔ)知識儲備有一定要求:

比特幣共識協(xié)議(也就是 Nakamoto Consensus)基本概念

以太坊共識協(xié)議基本概念

孤塊、叔塊、自私挖礦等概念

整理:Ryan、萬涔涔

視頻鏈接:https://v.qq.com/x/page/g0837...

自我介紹一下,我是張韌,Nervos & Cryptape 的研究員,目前我在魯汶大學(xué) COSIC (Computer Security and Industrial Cryptography group) 讀博士,師從 Bart Preneel。 如果你對 COSIC 不熟悉的話,不知道你是否聽說過 AES,它是我們所有人的手機(jī)中使用的加密標(biāo)準(zhǔn)。

當(dāng)然如果你熟悉 Bart Preneel 的話,會知道他是 RIPEMD 160 的設(shè)計(jì)者。RIPEMD 160 是比特幣公鑰轉(zhuǎn)化為比特幣地址時使用的哈希算法。

Nervos CKB 是一個公有鏈,能夠支持各種編程語言的智能合約,以及各種各樣的 Layer 2 協(xié)議。在 Nervos CKB 上你可以用任意資產(chǎn)支付交易手續(xù)費(fèi)。在 Nervos CKB 中智能合約的執(zhí)行和驗(yàn)證是分離的,從而達(dá)到更好的隱私和性能。最后,在 Nervos CKB 中采用了 NC-Max ——一個 Nakamoto Consensus 的變體——作為共識協(xié)議,擁有更高的吞吐量。

聲明:本次分享內(nèi)容僅著眼于 Layer 1 共識協(xié)議的分析,我將不會談到 Lightning Network 這樣的 Layer 2 方案。

這里是我本次分享的大綱,首先我會告訴你為什么我們會那么喜歡 Nakamoto Consensus(也就是比特幣的共識協(xié)議,以下簡稱 NC,包含一組規(guī)則,如最長鏈規(guī)則、激勵規(guī)則、增發(fā)規(guī)則等)。然后我會給出我們?yōu)槭裁床徊捎闷渌沧R協(xié)議的理由。最后我會給出我們 Nervos CKB 的共識協(xié)議 NC-Max 的設(shè)計(jì)思路。

為什么我們喜歡比特幣的 NC?

先來回答一個問題,為什么我們喜歡比特幣的 Nakamoto Consensus(NC)?

有很多的理由,首先 NC 的性能優(yōu)化做的非常好,它能夠節(jié)約每一個傳輸?shù)拿恳粋€字節(jié),以及每個計(jì)算周期。舉例來說,它使用Compact Block來加快區(qū)塊的傳播,可能在未來使用 Minisketch (一個用于在分布式系統(tǒng)不同節(jié)點(diǎn)之間同步信息時,降低帶寬需求的軟件庫)來節(jié)省交易廣播所需要的帶寬資源。同時比特幣的開發(fā)者提出了 Graftroot(關(guān)系到比特幣上開發(fā)智能合約以及隱私性的一項(xiàng)提案),你可以認(rèn)為它能夠通過壓縮比特幣上的智能合約從而獲得更好的隱私性和更好的性能。或許我們還能夠看到簽名聚合技術(shù)(Signature Aggregation)應(yīng)用在比特幣之上。

知識點(diǎn):Compact Block Relay,在比特幣改進(jìn)協(xié)議(BIP)152 中提出,能夠減少 P2P 網(wǎng)絡(luò)節(jié)點(diǎn)廣播區(qū)塊所需的帶寬數(shù)量。
Compact block 是完整區(qū)塊的「概要」,包含下面三部分信息:
1、新區(qū)塊的區(qū)塊頭
2、交易 ID
3、發(fā)送方節(jié)點(diǎn)預(yù)測的但是接收節(jié)點(diǎn)不具備的完整交易
接收方會嘗試根據(jù)收到的信息以及在其內(nèi)存池中的交易來重新構(gòu)建完整區(qū)塊。若仍然缺失某些交易,它將會請求廣播節(jié)點(diǎn)。*

喜歡 NC 的另一個理由是它的通用性。UTXO 模型加上全局交易順序能夠支持各種分片技術(shù)和 Layer 2 方案,以及復(fù)雜的智能合約。

相比來看,以太坊的 Account 模型進(jìn)行分片的難度更高;并且如果你沒有一個全局交易順序的話,比如像許多 DAG 類型協(xié)議那樣,那么就很難支持復(fù)雜的智能合約,關(guān)于這一部分會在后面談 DAG 的時候詳細(xì)描述。

我們也喜歡比特幣 NC 的安全性。比特幣網(wǎng)絡(luò)經(jīng)歷了很多的攻擊,還是穩(wěn)定運(yùn)行了十年。而且嚴(yán)格意義上來說,目前沒有任何一個已知的工作量證明共識機(jī)制在整體上超越 NC。如果你對這個話題感興趣,可以看這里。

然而在 NC 中有兩個地方我們希望做出一些改變。首先在帶寬利用方面,比特幣的 NC 在采用隔離見證之后,人為設(shè)定了最大為每十分鐘 4Mb 的吞吐量,然而現(xiàn)實(shí)情況是,比特幣公共節(jié)點(diǎn)的帶寬水平在過去的幾年里獲得了大幅度的提升。

對于 NC 我們有哪些地方需要做出改變?

如同上圖中這個研究所指出的,鏈接到網(wǎng)絡(luò)中的比特幣 IPv4 節(jié)點(diǎn)在 2016 年時帶寬中位數(shù)為 33Mbit/s,在 2017 年 2 月,這個數(shù)字達(dá)到了 56Mbit/s。

我們很容易想到的改進(jìn)方式就是,協(xié)議自身是否能夠動態(tài)地調(diào)節(jié)吞吐量來適應(yīng)帶寬水平的變化?

Bitcoin Unlimited 做了一個糟糕的嘗試,它希望能夠動態(tài)地調(diào)節(jié)比特幣的吞吐量,但是它失敗了,引入了多種新的攻擊方式讓它的協(xié)議變得不安全。上面是在 Coindesk 上發(fā)布的一篇關(guān)于 Bitcoin Unlimited 安全性研究(鏈接:https://www.coindesk.com/etf-...),我也是這項(xiàng)研究的參與者之一。

另一個我們希望在 NC 中做出改變的是它的激勵問題,也就是出現(xiàn)自私挖礦攻擊的問題。自私挖礦攻擊者會扣留發(fā)現(xiàn)的區(qū)塊,希望在網(wǎng)絡(luò)中獲得更大的領(lǐng)先優(yōu)勢。當(dāng)其他誠實(shí)礦工發(fā)現(xiàn)區(qū)塊的時候,攻擊者會向網(wǎng)絡(luò)廣播這個被扣留的區(qū)塊,寄希望于這個被廣播的扣留區(qū)塊會在誠實(shí)區(qū)塊之前,被大部分誠實(shí)礦工接收到。如果攻擊者足夠幸運(yùn),下一個塊是在攻擊者的塊上面進(jìn)行挖礦的,那么誠實(shí)的塊將會成為孤塊。如果攻擊者運(yùn)氣好到能夠連續(xù)挖到多個區(qū)塊,那么它將能夠非常安全地讓一個誠實(shí)礦工的區(qū)塊失效,因?yàn)楣粽邥懈L的鏈。

為什么自私挖礦是有利可圖的呢?我們舉一個具體的例子,假設(shè)自私挖礦攻擊者有全網(wǎng) 30% 的算力,誠實(shí)礦工控制剩下的 70%。如果沒有自私挖礦攻擊出現(xiàn),那么攻擊者在 10 個區(qū)塊中能夠找到 3 個,誠實(shí)礦工找到 7 個,大家都拿到應(yīng)有的報酬。如果攻擊者發(fā)動自私挖礦攻擊,那么它能夠找到 3 個區(qū)塊,誠實(shí)礦工只能找到 4 個區(qū)塊,因?yàn)榱硗?3 個誠實(shí)礦工找到的區(qū)塊經(jīng)過前面提到的攻擊方式變成了孤塊,原本能夠產(chǎn)生 10 個區(qū)塊的時間現(xiàn)在只產(chǎn)生了 7 個區(qū)塊,主鏈增長速度減慢。

在下一個難度調(diào)整周期,由于協(xié)議發(fā)現(xiàn)主鏈增長速度減慢,會降低挖礦難度,從而攻擊者能夠用同樣大的算力獲得更多的獎勵,這是自私挖礦有利可圖的原理。要注意的是,礦工獲得的收益是根據(jù)單位時間內(nèi)獲得的幣的數(shù)量而不是獲得幣的比例來計(jì)算的。在下一個難度調(diào)整周期,由于鏈增長的速度下降,協(xié)議會降低挖礦難度,此時礦工在單位時間能夠獲得更多的幣,才有收益。因此,自私挖礦在第一個難度調(diào)整周期中是沒有收益的,只有在挖礦難度調(diào)整之后自私挖礦才會有收益。

其他替代性共識協(xié)議

那我們?yōu)槭裁床贿x擇其他替代性的共識協(xié)議呢?

目前有三種替代 NC 的方式,它們分別是 PoS(Proof of Stake,權(quán)益證明),DAG 和兩種區(qū)塊類型的共識協(xié)議。注意這三種方式并不是相互排斥的,是有可能同時應(yīng)用它們之中的 2-3 種的。下面我們來進(jìn)一步分析這些協(xié)議的安全性、功能性和吞吐量。

首先是 PoS,實(shí)際上所有的 PoS 協(xié)議引入了新的安全前提。拿 Algorand 舉例來說,它要求大部分誠實(shí)用戶發(fā)送的消息能夠被大部分其他誠實(shí)用戶在一個已知的時間范圍內(nèi)里面接收到。這意味著當(dāng)你持有 Algorand 的 Token 時,根據(jù)協(xié)議最初的設(shè)計(jì)你需要時刻保持在線來接收消息。如果你不在線你就不是一個合格的 Token 持有者。

Cardano 的共識協(xié)議 Ouroboros 則假設(shè)所有用戶有一個弱同步的時鐘,并且所有消息都能夠在一定時間間隔內(nèi)被送達(dá)。這實(shí)際上是提出了一個非常強(qiáng)的假設(shè)。有很多攻擊方式能夠讓你的挖礦設(shè)備,你的公共節(jié)點(diǎn)或者手機(jī)上的時鐘產(chǎn)生偏差。并且這個方案在現(xiàn)實(shí)環(huán)境中實(shí)現(xiàn)起來也非常困難。

另外 Sleepy Protocol 也要求用戶擁有大致同步的時鐘。

當(dāng)這些安全性假設(shè)被違反,會為這些 PoS 協(xié)議帶來災(zāi)難性的后果。并且 PoS 協(xié)議引入了一些新的攻擊方式,如 Nothing-at-stake Attack,Grinding Attack,Long-range Attack,這些攻擊方式在 PoW 協(xié)議中是不存在的,在這里我不對這些攻擊方式進(jìn)行詳細(xì)描述。

那么 DAG 協(xié)議怎么樣呢?

所有 DAG 協(xié)議都有交易排序的問題,如像 DAG 協(xié)議那樣讓區(qū)塊同步產(chǎn)生,那么不同的礦工或不同的公共節(jié)點(diǎn)對交易順序的判斷會有不一致:我認(rèn)為這一些交易被確認(rèn)了,但是其他人可能認(rèn)為另一組交易是被確認(rèn)的。這時候你會有兩種解決問題的思路。

一種是在區(qū)塊鏈拓?fù)渑判蛲瓿芍髮灰走M(jìn)行排序,這意味著你需要等待很長的交易確認(rèn)時間。

另一種是不去確認(rèn)交易順序。合約的輸入需要全局的交易順序,如果不同礦工判斷的交易順序不同,那么每個礦工對合約邏輯執(zhí)行順序的理解就是不一樣的,特別是對于復(fù)雜的合約。這會限制合約的功能性,復(fù)雜合約不能執(zhí)行,合約中包含的 Token 會卡在合約中。

那么那些有兩種區(qū)塊類型的協(xié)議如何呢?兩種區(qū)塊類型的協(xié)議,顧名思義,它采用一種和 NC 中的區(qū)塊一樣的關(guān)鍵區(qū)塊(Key Block)來保障交易確認(rèn)的安全,同時在兩個關(guān)鍵區(qū)塊之間廣播微區(qū)塊(Micro Block)來提高吞吐量。

這些協(xié)議通常和 DAG 協(xié)議一樣會有較長的確認(rèn)延遲。Bitcoin NG 就采用了上述的方案。在 Bitcoin NG 的論文中明確表明,若用戶需要確保交易確認(rèn),在 Bitcoin NG 中他們就需要等待數(shù)個關(guān)鍵區(qū)塊的確認(rèn),忍受較長的交易延遲。

(原本在分享過程中張韌提到 Byzcoin 也有類似的問題。但是經(jīng)過進(jìn)一步分析發(fā)現(xiàn)問題并不類似,若對 Byzcoin 感興趣可以在論壇:https://talk.nervos.org/t/ner... 進(jìn)一步討論 )。

聲稱的 TPS?

所有采用這些替代性共識協(xié)議的項(xiàng)目都聲稱它們有很高的吞吐量,那么這些項(xiàng)目的吞吐量究竟如何呢?(下面這一段建議觀看視頻,約在 15:30 部分,現(xiàn)場非常精彩 )

Solana 聲稱能夠每秒能夠處理 710000 筆交易。如果你能夠有這么大的突破,理應(yīng)獲得圖靈獎。我迫不及待地想聽到他們獲獎的消息。

還有這個名為 NKN 的協(xié)議,他們聲稱他們能夠在全網(wǎng)擁有 10000 個節(jié)點(diǎn)的同時每秒處理 100 萬筆交易,目前我還不知道他們是如何做到的,但是我對他們實(shí)現(xiàn)的方式非常好奇。

我也很好奇為什么 Stellar 和 Ripple 也將自己的協(xié)議歸類為 NC,我也非常好奇 10000 個節(jié)點(diǎn)如何實(shí)現(xiàn)每秒處理 100 萬筆交易的。

而如果你想做個夢的話,你最好做一個偉大的夢,比如這個協(xié)議。它聲稱能夠在低于 1 秒的最終確認(rèn)時間內(nèi)擁有 1000000000000TPS 。

嗯,我真的覺得地球?qū)λ麄兌砸呀?jīng)不夠大了,他們真的需要另找一個更大的星球來部署他們的協(xié)議。

我們要注意的是,自稱的 TPS 是沒有可比性的。因?yàn)樗鼈兪窃诓煌木W(wǎng)絡(luò)環(huán)境中做模擬,某些模擬甚至使用 1Gbit/s 的帶寬,顯然這和現(xiàn)實(shí)網(wǎng)絡(luò)情況相差甚遠(yuǎn)。

并且這些協(xié)議都忽略了真實(shí)的情況。他們之中沒有一個考慮到交易的同步。對它們來說似乎所有的交易都是已經(jīng)在區(qū)塊中同步好的一樣,共識協(xié)議只是用來對交易進(jìn)行排序的。而且一些模擬假設(shè)委員會成員(節(jié)點(diǎn))之間有直接的連接,但事實(shí)是,在公有鏈網(wǎng)絡(luò)中所有的消息都是通過廣播進(jìn)行的,而廣播消息會占用公共節(jié)點(diǎn)的帶寬。

知識點(diǎn):Fresh Transaction,為什么說要考慮交易的同步呢?要認(rèn)識到,在比特幣中一個用戶從錢包客戶端發(fā)起的交易并不是被所有礦工都接受到,而是相鄰的幾個礦工。這些礦工在接受到用戶發(fā)起的交易的時候會對交易進(jìn)行驗(yàn)證才能放到交易池中,以便在未來將這些交易打包出塊。因此若一個礦工成功挖到一個塊并廣播 Compact Block,其他礦工在檢查 Compact Block 中交易 ID 的時候若發(fā)現(xiàn)對應(yīng)的有些交易并不在自己的交易池中,則需要向發(fā)送方請求完整交易進(jìn)行驗(yàn)證來保障區(qū)塊中所有交易都是合法的,這些交易就是「Fresh Transaction」。若不進(jìn)行驗(yàn)證就在收到區(qū)塊之后挖礦,一旦完整區(qū)塊廣播后被發(fā)現(xiàn)有非法交易,將不會被礦工認(rèn)可,在這個非法區(qū)塊之后挖出的區(qū)塊都會作廢。Fresh Transaction 的概念我們會在后面用到。

比較吞吐量的簡易模型

這里我們有一個評估 TPS 的模型。如圖所示,首先我們相信所有公共節(jié)點(diǎn)的帶寬是有一個上限的,最多能夠使用 100% 的帶寬,你不能使用超過 100% 的帶寬。在這里帶寬的占用有三個組成部分。

如上圖所示,第一部分是用于同步最終確認(rèn)的交易所占用的帶寬比例,這一部分是真正的 TPS(This is the real TPS)。交易首先要被同步,之后才能進(jìn)行交易確認(rèn)。第二部分是被共識協(xié)議「浪費(fèi)」的帶寬所占的比例。第三部分是未被利用的帶寬。

所以如果想要提高 TPS,能夠做的只有兩件事。

1、降低共識協(xié)議占用的帶寬比例
2、降低未被利用部分的帶寬比例

能做的只有這兩件事情,對,沒有其他的方式了,并且對于 Layer 1 的協(xié)議帶寬占用不能超過 100%。

那我們先來看看其他替代性共識協(xié)議的帶寬占用。

事實(shí)上,很多協(xié)議將它們珍貴的帶寬資源浪費(fèi)在委員會成員之間的通信上。

Algorand 存儲區(qū)塊證書以此來向新用戶證明一個區(qū)塊被提交。每個區(qū)塊證書的大小是 300KB ,獨(dú)立于區(qū)塊容量限制之外。如果你按照一個區(qū)塊 1MB 的大小來計(jì)算,那么這意味著大約 25% 的帶寬會永遠(yuǎn)被用于同步這些證書。因此我非常好奇為什么它們聲稱他們的吞吐量比 NC 更好,這根本不合理。

另外一種在共識協(xié)議中浪費(fèi)帶寬的方式是區(qū)塊型 DAG 和孤塊中的冗余交易。如上圖的論文中所說,如果所有的節(jié)點(diǎn)在區(qū)塊中選擇包含同樣的一組子交易,任何兩個平行創(chuàng)建的區(qū)塊將可能出現(xiàn)沖突,并且吞吐量就不會很高。

而目前所有的區(qū)塊型 DAG 協(xié)議對這種情況視若罔聞。

如何突破中本聰共識困境?

從上面的分析中看到,顯然目前的吞吐量不能滿足我們,因此,Nervos CKB 的共識協(xié)議 NC-Max 對 NC 做了一些改進(jìn):

NC-Max 有三個主要的創(chuàng)新

采用兩步交易確認(rèn)來降低孤塊率
動態(tài)調(diào)整區(qū)塊間隔和區(qū)塊獎勵來更好的提升帶寬利用率
在難度調(diào)整的時候考慮周期中的所有區(qū)塊,來抵御自私挖礦攻擊。

接下來我會進(jìn)行詳細(xì)解釋。

NC 有一個天然的吞吐量限制,因?yàn)橄胍岣?NC 中的吞吐量,只能做兩件事情:

第一件是更大的區(qū)塊,就如 Bitcoin Unlimited 和 Bitcoin Cash 那樣,還有很多其他的項(xiàng)目也這樣做;

第二件是降低出塊間隔。

但是由于區(qū)塊廣播需要時間,廣播期間若其他節(jié)點(diǎn)發(fā)現(xiàn)區(qū)塊并廣播,會和正在廣播的區(qū)塊產(chǎn)生競爭,其中之一會成為孤塊。更大的區(qū)塊會需要更長時間廣播,降低出塊間隔實(shí)際上是降低出塊難度,節(jié)點(diǎn)更容易發(fā)現(xiàn)區(qū)塊。這兩種方案容易帶來的結(jié)果是孤塊率變高了。這些孤塊占用更多的帶寬,但是它們并不為交易確認(rèn)做出貢獻(xiàn)。當(dāng)孤塊率提高時,系統(tǒng)的安全性會降低并且吞吐量也會降低。因此對于這兩種方案最終會達(dá)到一個平衡,當(dāng)區(qū)塊大小或出塊間隔調(diào)節(jié)到一定程度時,孤塊率會高到一定程度,即使你進(jìn)一步增加區(qū)塊大小或者降低出塊間隔,吞吐量也不會得到提高。

為什么太多的孤塊會對網(wǎng)絡(luò)的安全和性能產(chǎn)生負(fù)面影響呢?在上圖中我們能夠看到,當(dāng)孤塊率非常高時,攻擊者能夠非常輕易地私自構(gòu)建一條更長鏈。攻擊者只需要擁有比全網(wǎng)算力的 51% 低很多的算力,就能夠覆蓋掉區(qū)塊鏈。并且孤塊會消耗公共節(jié)點(diǎn)大量的帶寬,這會對整個系統(tǒng)的吞吐量造成很大的負(fù)面影響。

那我們?nèi)绾未蚱?NC 吞吐量的限制呢?經(jīng)過上面分析,如果我們想要打破這個限制,就必須降低孤塊率。如果孤塊率下降,那么網(wǎng)絡(luò)的安全性和吞吐量都能夠提高。

如何降低孤塊率呢?孤塊的出現(xiàn)是由于區(qū)塊廣播的延遲,若在一個區(qū)塊廣播的過程中,有另一個區(qū)塊被發(fā)現(xiàn),那么其中一個區(qū)塊就注定會成為孤塊。如果區(qū)塊廣播能夠瞬間完成,自然不會有孤塊出現(xiàn)。那我們?nèi)绾未_保區(qū)塊能夠足夠快速地被廣播出去呢?

比特幣的開發(fā)者已經(jīng)投入了非常多的資源和精力來加快區(qū)塊的廣播速度,我們需要進(jìn)一步找出哪些區(qū)塊的廣播速度較慢,或是出了問題。

我們來詳細(xì)看看這是如何發(fā)生的,請看下圖。

目前的比特幣網(wǎng)絡(luò),如果一切順利的話,一個區(qū)塊是通過一個Compact Block 中繼協(xié)議來廣播的。

在 Compact Block 中,并不會將整個交易(比特幣每個交易大約 250Bytes)廣播出去,而是廣播 Compact Block 中的交易 ID。這些交易 ID 組成了 Compact Block,這些 Compact Block 比實(shí)際的區(qū)塊小很多,因此速度會快很多。

當(dāng)節(jié)點(diǎn) A 廣播 Compact Block 給節(jié)點(diǎn) B 的時候,節(jié)點(diǎn) B 檢查這些交易 ID ,如果對于節(jié)點(diǎn) B 這些交易都不是 Fresh Transaction(也就是節(jié)點(diǎn) B 的交易池中包含這些交易),節(jié)點(diǎn) B 能夠立刻轉(zhuǎn)發(fā)這些 Compact Block 給相鄰節(jié)點(diǎn),這種情況非常棒,過程很順利。

然而如果在 Compact Block 中有 Fresh Transaction,節(jié)點(diǎn) B 將首先需要從節(jié)點(diǎn) A 那邊同步 Fresh Transaction,然后驗(yàn)證這些交易的簽名,這些步驟都很耗費(fèi)時間。只有當(dāng)整個區(qū)塊都經(jīng)過驗(yàn)證無誤之后,節(jié)點(diǎn) B 才能繼續(xù)廣播這個區(qū)塊。這個過程避免收到的區(qū)塊非法,這樣礦工才會在這個區(qū)塊之后挖礦并廣播,若不經(jīng)過驗(yàn)證萬一之后發(fā)現(xiàn)是非法區(qū)塊,那么在這個非法區(qū)塊之后的區(qū)塊都是無效的。同步 Fresh Transaction 的過程是比特幣區(qū)塊廣播延遲的主要原因。

所以,以太坊是一個糟糕的嘗試,我來分析一下他們是怎么做的。以太坊簡單地縮短了出塊間隔,但是以太坊有一個問題,就是它不能夠在收到區(qū)塊之前驗(yàn)證交易的有效性。因?yàn)樵谝蕴恢幸粋€交易的有效性依賴于區(qū)塊中交易的順序,因此如果你想要驗(yàn)證一個交易的有效性你必須等到整個區(qū)塊都被接收到才行,這樣的話每一個區(qū)塊實(shí)際上都是 Fresh Transaction。

并且以太坊的網(wǎng)絡(luò)協(xié)議維護(hù)得非常差,自從 2015 年開始就沒有任何的迭代。

而且在交易廣播過程中也有大量的冗余。以太坊客戶端會將同一筆交易向不同的節(jié)點(diǎn)廣播 7 次,這意味著每一個節(jié)點(diǎn)將會收到同一筆交易 7 次。(以太坊有不同的客戶端,如 Parity Ethereum,Geth 等)而且不同類型的客戶端之間有不一致性,兩個主要的以太坊客戶端之間基本都是獨(dú)立的。

因此能夠鏈接兩個不同的網(wǎng)絡(luò)的節(jié)點(diǎn)非常少,這也是為什么以太坊孤塊率有時會高達(dá) 30%,并且交易吞吐量非常低。

而且大礦工沒有加快區(qū)塊廣播速度的激勵。因?yàn)槿绻业膮^(qū)塊能夠更慢地廣播出去,意味著我實(shí)際上能夠?qū)崿F(xiàn)「自私挖礦」(這里大礦工并不扣留區(qū)塊,只是區(qū)塊廣播比較慢,在這個過程中出現(xiàn)了其他的競爭塊,而因?yàn)槲沂谴蟮V工有較大的概率在和其他競爭塊競爭過程中勝出)。這對我來講是好事,為什么我要加速區(qū)塊廣播呢?

以太坊中的叔塊獎勵也沒有提供任何幫助,畢竟如果產(chǎn)生了的孤塊,礦工還是能夠獲得獎勵。因此小礦工會采用先廣播區(qū)塊頭和空塊的方式,因?yàn)閺V播區(qū)塊頭的速度會快很多。并且由于不知道下一個區(qū)塊中會包含哪些交易,因此礦工通常會挖一個空塊來確保區(qū)塊中不會包含和之前區(qū)塊交易產(chǎn)生沖突的交易。這非常糟糕,因?yàn)榭諌K并不為交易確認(rèn)做出貢獻(xiàn)。

下面是我們的設(shè)計(jì),來緩解上面提到的一些問題。

這張圖是區(qū)塊的結(jié)構(gòu),我們在比特幣區(qū)塊結(jié)構(gòu)的基礎(chǔ)上增加了幾個字段。

上圖是我們的完整區(qū)塊的區(qū)塊結(jié)構(gòu)。首先我們有一個交易提案區(qū)(青色區(qū)域)。只有交易提案區(qū)可包含 Fresh Transaction,而傳統(tǒng)的交易確認(rèn)區(qū)(橙色區(qū)域)只能包含前幾個區(qū)塊的交易提案區(qū)的交易,若當(dāng)前區(qū)塊高度是 h 的話,那么就是 h-m 到 h-n 區(qū)塊的交易提案區(qū)內(nèi)的交易。只有這些交易能夠被確認(rèn),F(xiàn)resh Transaction 不能被交易確認(rèn)區(qū)確認(rèn)。交易提案區(qū)不包含完整的交易,只包含交易 ID(Truncated Transaction ID),因此交易提案區(qū)會非常小。

在叔塊頭區(qū)可以包含任意數(shù)量的叔塊(紫色區(qū)域),叔塊應(yīng)該包含它們的區(qū)塊頭和交易提案區(qū)。叔塊頭區(qū)不計(jì)入?yún)^(qū)塊大小,因而不受區(qū)塊大小的限制,所以不會限制礦工添加叔塊。

下面我進(jìn)一步來解釋交易提案區(qū)。這個區(qū)域非常小,因?yàn)樗话灰?ID。完整的交易與區(qū)塊同步廣播,因?yàn)檫@是一個并行的過程,所以交易的廣播不會影響到區(qū)塊的廣播。并且節(jié)點(diǎn)在收到廣播的交易后只需要驗(yàn)證哈希,不會影響區(qū)塊的驗(yàn)證過程。

盡管這意味著在交易提案區(qū)可能會有無效的交易,雙花交易以及礦工可能不愿意接受的交易,但是這都沒有關(guān)系。

類比之前提到的比特幣區(qū)塊廣播過程,在我們的協(xié)議中,發(fā)現(xiàn)區(qū)塊的節(jié)點(diǎn)會先廣播 Compact Block(也就是區(qū)塊頭和交易的 ID),Compact Block 較比特幣的稍微大一點(diǎn),包含交易提案區(qū)和若干叔塊的區(qū)塊頭和叔塊的交易提案區(qū)。但由于 Compact Block 本身足夠小通常會立刻廣播給相鄰的節(jié)點(diǎn)。

新提出的交易,如果有一部分不在節(jié)點(diǎn)的交易池中,它們會在發(fā)出 Compact Block 之后進(jìn)行廣播。這些都是并行過程,不會相互影響。節(jié)點(diǎn)收到交易,經(jīng)過哈希驗(yàn)證后廣播給相鄰的節(jié)點(diǎn)。

這很自然地會有幾個問題:

如果礦工拒絕提供提案交易的完整版本怎么辦?
我把這個交易放到我的交易提案區(qū),但是當(dāng)你問我要完整的交易的時候,我裝作不知道。

實(shí)際上這個對區(qū)塊廣播不會有影響,因?yàn)椴徽摻灰滋岚竻^(qū)是否有 Fresh Transaction,區(qū)塊都能夠廣播。

并且其他礦工也會繼續(xù)挖礦,因?yàn)榭偸怯凶銐虻奶岚附灰仔枰_認(rèn)。該礦工也沒有必要挖空塊,因?yàn)橹皡^(qū)塊的交易提案區(qū)包含了它將打包的這些交易 ID,已經(jīng)被發(fā)現(xiàn)的區(qū)塊在 Compact Block 中都廣播了打包進(jìn)的交易確認(rèn)區(qū)的交易 ID,礦工都知道哪些交易被打包了哪些沒有,不會選擇和被發(fā)現(xiàn)區(qū)塊交易確認(rèn)區(qū)內(nèi)相沖突的交易,因此礦工會選擇繼續(xù)打包交易出塊并獲得手續(xù)費(fèi),為交易確認(rèn)做貢獻(xiàn)。

那么如果礦工在他們最新的區(qū)塊中包含了這些提出但未廣播的交易,以獲得一個類似自私挖礦的優(yōu)勢怎么辦?

在比特幣的 NC 中,礦工減慢區(qū)塊廣播速度可以獲得挖礦優(yōu)勢。礦工通常能夠在挖出一個區(qū)塊時,只廣播區(qū)塊頭,而在廣播完整區(qū)塊的時候放慢動作。在這個過程中只有該礦工能夠挖礦(因?yàn)橹挥兴老乱粋€區(qū)塊的信息,能夠基于這個新塊挖礦,這個過程類似扣留區(qū)塊)。

但是在我們的協(xié)議中,采用這種方式只會減慢 n 個區(qū)塊之后的區(qū)塊廣播速度。因?yàn)樘岢龅磸V播的交易只有自私礦工知道,也只有自私礦工能以此作為優(yōu)勢。然而這個不能被用在下一個區(qū)塊中,因?yàn)樵谖覀兊膮f(xié)議中只能挖 n 個區(qū)塊之前提案區(qū)中包含交易,中間需要有一個間隔。

礦工只能夠挖 h-m 至 h-n 個區(qū)塊內(nèi)的提案交易,但是不能挖前一個區(qū)塊的提案交易,除非這個區(qū)塊也是被攻擊者挖到的。

如圖所示,這是我們的共識協(xié)議和比特幣 NC 的對比。在比特幣 NC 中當(dāng)自私的礦工找到區(qū)塊 h, 它能夠立刻開始挖區(qū)塊 h+1,此時誠實(shí)礦工只能夠在收到完整的區(qū)塊 h 之后才能開始挖礦,因?yàn)槠渌V工需要知道區(qū)塊包含的完整的交易并驗(yàn)證來確定區(qū)塊是合法的,而自私礦工能夠通過減慢區(qū)塊 h 傳輸?shù)乃俣葋碜屍渌V工更晚收到區(qū)塊。在區(qū)塊廣播期間就是自私挖礦者的優(yōu)勢期。

然而在我們的協(xié)議中當(dāng)一個自私礦工找到一個區(qū)塊 h,廣播了包含區(qū)塊頭和交易 ID 的 Compact Block,誠實(shí)礦工能夠立刻開始挖 h+1。如果自私礦工想要利用這些提出但未廣播的交易,它必須找到 n 個區(qū)塊之后的區(qū)塊(這些區(qū)塊才能包含這些提出但未廣播的交易),這樣他們才能利用這個優(yōu)勢。然而這很難發(fā)生,你不能確定在 n 個塊之后的那個塊是你挖出來的,這個非常難預(yù)測。

為了更好地利用帶寬,我們的協(xié)議使用了另一種不同的難度調(diào)整機(jī)制,設(shè)定一個固定的孤塊率(根據(jù)上一個難度調(diào)節(jié)期的叔塊數(shù)來計(jì)算)。

如果孤塊率在上一個難度調(diào)整周期低于設(shè)定的孤塊率,挖礦難度會降低,出塊間隔將降低,吞吐量會提高。也就是說,更少的孤塊意味著當(dāng)前的網(wǎng)絡(luò)狀態(tài)實(shí)際上有能力更快地同步交易,我們能夠在提高吞吐量的同時不損害網(wǎng)絡(luò)的去中心化。

反過來看如果難度提高,那么出塊間隔會增加,吞吐量也會降低。如果孤塊率很高那么意味著當(dāng)前的網(wǎng)絡(luò)在這個難度調(diào)整周期內(nèi)并不能處理那么多的交易,那么協(xié)議就會降低吞吐量。

同時出塊獎勵會和 1/(預(yù)期出塊間隔)成正比,因此在每個難度調(diào)整周期中預(yù)期的總出塊獎勵是固定的。

這意味著假設(shè)我們每十分鐘出一個塊,每個塊中有 12.5 個比特幣,如果難度調(diào)節(jié)變成每 5 分鐘出一個塊的時候,每個塊會有 6.125 個比特幣。因此貨幣的發(fā)行率也是保持恒定的。

最后,抵抗自私挖礦攻擊。前面我們提到我們的協(xié)議和 NC 的一個區(qū)別在于,我們的難度調(diào)整機(jī)制是根據(jù)難度調(diào)整區(qū)間中出現(xiàn)的所有區(qū)塊來計(jì)算的,在估計(jì)總算力的時候也會包含叔塊。

在 NC-Max 中,假設(shè)攻擊者占總算力的 30%,誠實(shí)礦工 70%,如果沒有自私挖礦攻擊,在 10 個區(qū)塊中攻擊者能夠找到 3 個區(qū)塊,誠實(shí)礦工找到 7 個。如果進(jìn)行自私挖礦,攻擊者在 7 個區(qū)塊中能夠找到 3 個區(qū)塊,誠實(shí)礦工找到 4 個,3 個誠實(shí)區(qū)塊會成為孤塊,主鏈會增長緩慢。

前面也提到自私挖礦在第一個難度調(diào)整周期內(nèi)是沒有收益的,那么在第二個難度調(diào)整周期會出現(xiàn)什么?

在下一個難度調(diào)整周期,難度會保持不變(因?yàn)殡y度會根據(jù)所有區(qū)塊計(jì)算,包含孤塊),攻擊者并不能用同樣的算力找到更多的區(qū)塊,因此自私挖礦不再有利可圖。

也就是說,我們假設(shè)幣價在短時間內(nèi)維持穩(wěn)定,由于自私挖礦攻擊者是短視的,他們的獎勵是根據(jù)單位時間內(nèi)獲得的獎勵來定義,可以等價于同樣的電力消耗能夠獲得的獎勵。在比特幣中,自私挖礦攻擊者能夠通過降低鏈增長速度,「迫使」協(xié)議降低出塊難度,從而在難度調(diào)整之后單位時間內(nèi)能夠獲得更多的獎勵。而在 NC-Max 協(xié)議設(shè)計(jì)中,出塊難度會根據(jù)所有區(qū)塊來計(jì)算,包括孤塊,攻擊者讓誠實(shí)礦工的區(qū)塊成為孤塊,卻并不能「迫使」協(xié)議降低出塊難度,以在單位時間內(nèi)獲得更高獎勵。

最后總結(jié)一下,我們的協(xié)議會很好地利用孤塊:

我們希望能夠通過兩步交易驗(yàn)證來降低孤塊數(shù)量,在孤塊數(shù)量降低之后,我們利用孤塊率作為一個帶寬利用水平的指標(biāo)來動態(tài)地調(diào)節(jié)吞吐量。

并且孤塊信息被寫在了區(qū)塊鏈中,我們在挖礦難度調(diào)整算法中利用這個信息從而讓自私挖礦無利可圖。

NC-Max 是 Nervos CKB 的 PoW 共識協(xié)議。NC 是 Nakamoto Consensus 的簡稱,也就是比特幣的共識協(xié)議。如果讀完這篇文章,你覺得這個共識協(xié)議應(yīng)該有一個更好的名字,歡迎告訴我們,或許我們能夠采納:)歡迎討論:https://talk.nervos.org/t/ner...。

推薦閱讀:張韌博士的共識安全性分析文章《制定通用的標(biāo)準(zhǔn):評估 PoW 共識協(xié)議的安全性》

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/24565.html

相關(guān)文章

  • 突破中本聰共識!公鏈 CKB 公布 NC-Max 共識協(xié)議

    摘要:最后,在中采用了一個的變體作為共識協(xié)議,擁有更高的吞吐量。知識點(diǎn),在比特幣改進(jìn)協(xié)議中提出,能夠減少網(wǎng)絡(luò)節(jié)點(diǎn)廣播區(qū)塊所需的帶寬數(shù)量。 本期秘猿科技區(qū)塊鏈小課堂將會就 PoW 共識的突破進(jìn)行展開。帶寬實(shí)際上是區(qū)塊鏈吞吐量的最大限制,在美國舊金山舉辦的 Scaling Bitcoin Meetup 中,秘猿科技研究員張韌從「帶寬利用率」角度分析了諸多共識協(xié)議的效率和可行性。理解本文需要以下知...

    zhonghanwen 評論0 收藏0
  • Nervos 雙周報第 4 期:經(jīng)濟(jì)白皮書的發(fā)件小哥正在路上

    摘要:老師周四分享程序員中的專業(yè)區(qū)塊鏈講解員老師每周四晚的千聊直播分享,最近兩周帶來了期有關(guān)比特幣白皮書圖解的內(nèi)容,第一部分主要講的是比特幣的基本情況及比特幣網(wǎng)絡(luò)的基本組成,第二部分深入解析了比特幣的交易及共識機(jī)制。 showImg(https://segmentfault.com/img/bVbpdhy?w=1080&h=460); 這一期,有些激動有些慌!為什么呢? 在正式發(fā)布 CKB ...

    Panda 評論0 收藏0
  • 喜報!Nervos 研究員張韌論文被頂級安全會議 IEEE S&P 接收!

    摘要:近日,研究員張韌發(fā)表的被接收,這也是中國大陸的區(qū)塊鏈團(tuán)隊(duì)第一次在區(qū)塊鏈行業(yè)核心會議上發(fā)表相關(guān)論文。關(guān)于論文張韌是魯汶大學(xué)在讀博士,前研究員,長期專注于區(qū)塊鏈共識協(xié)議安全和隱私研究。 showImg(https://segmentfault.com/img/bVbpmou?w=2779&h=1179); 近日,Nervos & Cryptape 研究員張韌發(fā)表的《Lay Down the...

    zqhxuyuan 評論0 收藏0
  • 社區(qū)獎勵第二發(fā):NC-Max 共識協(xié)議提案活動細(xì)則

    摘要:月日,的專區(qū)悄悄上線了共識協(xié)議提案,這份提案由研究員張韌提交,暫命名為。以上活動可同時參與,不影響獲獎資格。 6 月 19 日,Nervos Network 的 RFC 專區(qū)悄悄上線了共識協(xié)議提案,這份 RFC 提案由 Nervos 研究員張韌提交,暫命名為 NC-Max。 NC-Max 在比特幣的 Nakamoto Consensus 的基礎(chǔ)上,主要有三大創(chuàng)新: 1.通過兩步交易確認(rèn)...

    Zhuxy 評論0 收藏0
  • Nervos 項(xiàng)目發(fā)展路線圖更新

    摘要:距離我們首次發(fā)布項(xiàng)目發(fā)展路線圖已經(jīng)有六個多月的時間。當(dāng)我們有新的變化時,會及時更新項(xiàng)目發(fā)展路線圖,以便讓大家了解項(xiàng)目進(jìn)程。 距離我們首次發(fā)布項(xiàng)目發(fā)展路線圖已經(jīng)有六個多月的時間。現(xiàn)在,我們將更新項(xiàng)目最新的進(jìn)展及規(guī)劃,包括過去已實(shí)現(xiàn)的、未實(shí)現(xiàn)的,以及未來將會發(fā)生的一些變化。 showImg(https://segmentfault.com/img/bVbqetb?w=4001&h=2251...

    morgan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<