帶寬實際上是區塊鏈吞吐量的最大限制,在美國舊金山舉辦的ScalingBitcoinMeetup中,Nervos&Cryptape研究員張韌從「帶寬利用率」角度分析了諸多共識協議的效率和可行性。Algorand的帶寬利用效率如何?Cardano的Ouroboros怎么樣?Solana、NKN為什么能有那么高的TPS?以太坊將出塊間隔縮短到15秒,為什么并沒有比比特幣吞吐量高出很多?這些問題,張韌博士都會在分享中一一回答。以下為韌博士演講稿整理,如若希望和韌博士進行進一步討論,歡迎點擊文末「閱讀原文」,我們在NervosTalk共同探討。閱讀本文對讀者的區塊鏈基礎知識儲備有一定要求:
比特幣共識協議基本概念
以太坊共識協議基本概念
孤塊、叔塊、自私挖礦等概念
整理:Ryan、萬涔涔
自我介紹一下,我是張韌,Nervos&Cryptape的研究員,目前我在魯汶大學COSIC(Computer?Securityand?Industrial?Cryptographygroup)?讀博士,師從BartPreneel。如果你對COSIC不熟悉的話,不知道你是否聽說過AES,它是我們所有人的手機中使用的加密標準。
當然如果你熟悉BartPreneel的話,會知道他是RIPEMD160的設計者。RIPEMD160是比特幣公鑰轉化為比特幣地址時使用的哈希算法。
NervosCKB是一個公有鏈,能夠支持各種編程語言的智能合約,以及各種各樣的Layer2協議。在NervosCKB上你可以用任意資產支付交易手續費。在NervosCKB中智能合約的執行和驗證是分離的,從而達到更好的隱私和性能。最后,在NervosCKB中采用了NC-Max——一個NakamotoConsensus的變體——作為共識協議,擁有更高的吞吐量。
聲明:本次分享內容僅著眼于Layer1共識協議的分析,我將不會談到LightningNetwork這樣的Layer2方案。
這里是我本次分享的大綱,首先我會告訴你為什么我們會那么喜歡NakamotoConsensus。然后我會給出我們為什么不采用其他共識協議的理由。最后我會給出我們NervosCKB的共識協議NC-Max的設計思路。
為什么我們喜歡比特幣的NC?
先來回答一個問題,為什么我們喜歡比特幣的NakamotoConsensus?有很多的理由,首先NC的性能優化做的非常好,它能夠節約每一個傳輸的每一個字節,以及每個計算周期。舉例來說,它使用CompactBlock來加快區塊的傳播,可能在未來使用Minisketch來節省交易廣播所需要的帶寬資源。同時比特幣的開發者提出了Graftroot,你可以認為它能夠通過壓縮比特幣上的智能合約從而獲得更好的隱私性和更好的性能。或許我們還能夠看到簽名聚合技術應用在比特幣之上。
知識點:CompactBlockRelay,在比特幣改進協議152中提出,能夠減少P2P網絡節點廣播區塊所需的帶寬數量。
比特幣礦企Iris Energy提前啟用41兆瓦的比特幣礦機:金色財經報道,比特幣礦企Iris Energy (IREN) 宣布提前一個多月在不列顛哥倫比亞省上線 41 兆瓦的比特幣礦機。
該公司在周一的新聞稿中表示,這一增加使該公司在比特幣網絡上的操作哈希率(或計算能力)增加了一倍,達到2.3哈希/秒(EH/s)。另外一個1.4哈希/秒(EH/s),需要50兆瓦的能源容量,也在不列顛哥倫比亞省,計劃在9月底前啟動和運行。
Iris Energy“繼續為其剩余的 2.3 EH/s 礦工解決部署選項”,包括本月早些時候從比特大陸購買的 1.7 EH/s 比特大陸 Antminer S19j Pros 。(coindesk)[2022/8/9 12:10:47]
Compactblock是完整區塊的「概要」,包含下面三部分信息:
1、新區塊的區塊頭
2、交易ID
3、發送方節點預測的但是接收節點不具備的完整交易
接收方會嘗試根據收到的信息以及在其內存池中的交易來重新構建完整區塊。若仍然缺失某些交易,它將會請求廣播節點。
喜歡NC的另一個理由是它的通用性。UTXO模型加上全局交易順序能夠支持各種分片技術和Layer2方案,以及復雜的智能合約。
相比來看,以太坊的Account模型進行分片的難度更高;并且如果你沒有一個全局交易順序的話,比如像許多DAG類型協議那樣,那么就很難支持復雜的智能合約,關于這一部分會在后面談DAG的時候詳細描述。
我們也喜歡比特幣NC的安全性。比特幣網絡經歷了很多的攻擊,還是穩定運行了十年。而且嚴格意義上來說,目前沒有任何一個已知的工作量證明共識機制在整體上超越NC。如果你對這個話題感興趣,可以看這里。
然而在NC中有兩個地方我們希望做出一些改變。首先在帶寬利用方面,比特幣的NC在采用隔離見證之后,人為設定了最大為每十分鐘4Mb的吞吐量,然而現實情況是,比特幣公共節點的帶寬水平在過去的幾年里獲得了大幅度的提升。
對于NC我們有哪些地方需要做出改變?
如同上圖中這個研究所指出的,鏈接到網絡中的比特幣IPv4節點在2016年時帶寬中位數為33Mbit/s,在2017年2月,這個數字達到了56Mbit/s。我們很容易想到的改進方式就是,協議自身是否能夠動態地調節吞吐量來適應帶寬水平的變化?
BitcoinUnlimited做了一個糟糕的嘗試,它希望能夠動態地調節比特幣的吞吐量,但是它失敗了,引入了多種新的攻擊方式讓它的協議變得不安全。上面是在Coindesk上發布的一篇關于?BitcoinUnlimited安全性研究,我也是這項研究的參與者之一。
另一個我們希望在NC中做出改變的是它的激勵問題,也就是出現自私挖礦攻擊的問題。自私挖礦攻擊者會扣留發現的區塊,希望在網絡中獲得更大的領先優勢。當其他誠實礦工發現區塊的時候,攻擊者會向網絡廣播這個被扣留的區塊,寄希望于這個被廣播的扣留區塊會在誠實區塊之前,被大部分誠實礦工接收到。如果攻擊者足夠幸運,下一個塊是在攻擊者的塊上面進行挖礦的,那么誠實的塊將會成為孤塊。如果攻擊者運氣好到能夠連續挖到多個區塊,那么它將能夠非常安全地讓一個誠實礦工的區塊失效,因為攻擊者會有更長的鏈。
ANTMINER E9將于美東時間7月6日上午9:00開始銷售:金色財經報道,螞蟻礦機在社交媒體上宣布,ANTMINER E9將于7月6日上午9:00(美東時間)開始銷售,據公告稱,E9算力為2400M,功耗1920W,能效0.8J/M,采用ETH/ETC的Ethash算法,E9相當于25塊RTX 3080顯卡。[2022/7/5 1:52:59]
為什么自私挖礦是有利可圖的呢?我們舉一個具體的例子,假設自私挖礦攻擊者有全網30%的算力,誠實礦工控制剩下的70%。如果沒有自私挖礦攻擊出現,那么攻擊者在10個區塊中能夠找到3個,誠實礦工找到7個,大家都拿到應有的報酬。如果攻擊者發動自私挖礦攻擊,那么它能夠找到3個區塊,誠實礦工只能找到4個區塊,因為另外3個誠實礦工找到的區塊經過前面提到的攻擊方式變成了孤塊,原本能夠產生10個區塊的時間現在只產生了7個區塊,主鏈增長速度減慢。在下一個難度調整周期,由于協議發現主鏈增長速度減慢,會降低挖礦難度,從而攻擊者能夠用同樣大的算力獲得更多的獎勵,這是自私挖礦有利可圖的原理。要注意的是,礦工獲得的收益是根據單位時間內獲得的幣的數量而不是獲得幣的比例來計算的。在下一個難度調整周期,由于鏈增長的速度下降,協議會降低挖礦難度,此時礦工在單位時間能夠獲得更多的幣,才有收益。因此,自私挖礦在第一個難度調整周期中是沒有收益的,只有在挖礦難度調整之后自私挖礦才會有收益。
其他替代性共識協議
那我們為什么不選擇其他替代性的共識協議呢?目前有三種替代NC的方式,它們分別是?PoS,DAG?和兩種區塊類型的共識協議。注意這三種方式并不是相互排斥的,是有可能同時應用它們之中的2-3種的。下面我們來進一步分析這些協議的安全性、功能性和吞吐量。
首先是?PoS,實際上所有的PoS協議引入了新的安全前提。拿Algorand舉例來說,它要求大部分誠實用戶發送的消息能夠被大部分其他誠實用戶在一個已知的時間范圍內里面接收到。這意味著當你持有Algorand的Token時,根據協議最初的設計你需要時刻保持在線來接收消息。如果你不在線你就不是一個合格的Token持有者。
Cardano的共識協議Ouroboros則假設所有用戶有一個弱同步的時鐘,并且所有消息都能夠在一定時間間隔內被送達。這實際上是提出了一個非常強的假設。有很多攻擊方式能夠讓你的挖礦設備,你的公共節點或者手機上的時鐘產生偏差。并且這個方案在現實環境中實現起來也非常困難。另外SleepyProtocol也要求用戶擁有大致同步的時鐘。當這些安全性假設被違反,會為這些PoS協議帶來災難性的后果。并且PoS協議引入了一些新的攻擊方式,如Nothing-at-stakeAttack,GrindingAttack,Long-rangeAttack,這些攻擊方式在PoW協議中是不存在的,在這里我不對這些攻擊方式進行詳細描述。
那么?DAG?協議怎么樣呢?所有DAG協議都有交易排序的問題,如像DAG協議那樣讓區塊同步產生,那么不同的礦工或不同的公共節點對交易順序的判斷會有不一致:我認為這一些交易被確認了,但是其他人可能認為另一組交易是被確認的。這時候你會有兩種解決問題的思路。一種是在區塊鏈拓撲排序完成之后對交易進行排序,這意味著你需要等待很長的交易確認時間。另一種是不去確認交易順序。合約的輸入需要全局的交易順序,如果不同礦工判斷的交易順序不同,那么每個礦工對合約邏輯執行順序的理解就是不一樣的,特別是對于復雜的合約。這會限制合約的功能性,復雜合約不能執行,合約中包含的Token會卡在合約中。
OneRing確認遭到閃電貸攻擊,黑客竊取逾145萬美元:3月22日消息,Fantom生態穩定幣收益優化器OneRing發文表示,北京時間3月22日02:44:10,黑客通過閃電貸攻擊竊取了1454672.244369枚USDC,且合約已被配置為在特定區塊自毀,因此幾乎不可能跟蹤合約中的哪些特定功能被調用以竊取資金。目前,團隊已暫停保險庫,正在努力重新設置。并且團隊正在制定為受影響的人提供具體的中長期還款計劃,此外,OneRing宣布將提供被盜資金的15%以及1,000,000個RING代幣作為返還資金的賞金。此前,派盾報告顯示,Fantom生態穩定幣收益優化器OneRing疑似遭到攻擊。[2022/3/22 14:10:24]
那么那些有兩種區塊類型的協議如何呢?兩種區塊類型的協議,顧名思義,它采用一種和NC中的區塊一樣的關鍵區塊來保障交易確認的安全,同時在兩個關鍵區塊之間廣播微區塊來提高吞吐量。這些協議通常和DAG協議一樣會有較長的確認延遲。BitcoinNG就采用了上述的方案。在BitcoinNG的論文中明確表明,若用戶需要確保交易確認,在BitcoinNG中他們就需要等待數個關鍵區塊的確認,忍受較長的交易延遲。。
聲稱的TPS?
所有采用這些替代性共識協議的項目都聲稱它們有很高的吞吐量,那么這些項目的吞吐量究竟如何呢?
Solana聲稱能夠每秒能夠處理710000筆交易。如果你能夠有這么大的突破,理應獲得圖靈獎。我迫不及待地想聽到他們獲獎的消息。
還有這個名為NKN的協議,他們聲稱他們能夠在全網擁有10000個節點的同時每秒處理100萬筆交易,目前我還不知道他們是如何做到的,但是我對他們實現的方式非常好奇。我也很好奇為什么Stellar和Ripple也將自己的協議歸類為NC,我也非常好奇10000個節點如何實現每秒處理100萬筆交易的。
而如果你想做個夢的話,你最好做一個偉大的夢,比如這個協議。它聲稱能夠在低于1秒的最終確認時間內擁有1000000000000TPS。嗯,我真的覺得地球對他們而言已經不夠大了,他們真的需要另找一個更大的星球來部署他們的協議。
我們要注意的是,自稱的TPS是沒有可比性的。因為它們是在不同的網絡環境中做模擬,某些模擬甚至使用1Gbit/s的帶寬,顯然這和現實網絡情況相差甚遠。并且這些協議都忽略了真實的情況。他們之中沒有一個考慮到交易的同步。對它們來說似乎所有的交易都是已經在區塊中同步好的一樣,共識協議只是用來對交易進行排序的。而且一些模擬假設委員會成員之間有直接的連接,但事實是,在公有鏈網絡中所有的消息都是通過廣播進行的,而廣播消息會占用公共節點的帶寬。
知識點:FreshTransaction,為什么說要考慮交易的同步呢?要認識到,在比特幣中一個用戶從錢包客戶端發起的交易并不是被所有礦工都接受到,而是相鄰的幾個礦工。這些礦工在接受到用戶發起的交易的時候會對交易進行驗證才能放到交易池中,以便在未來將這些交易打包出塊。因此若一個礦工成功挖到一個塊并廣播CompactBlock,其他礦工在檢查CompactBlock中交易ID的時候若發現對應的有些交易并不在自己的交易池中,則需要向發送方請求完整交易進行驗證來保障區塊中所有交易都是合法的,這些交易就是「FreshTransaction」。若不進行驗證就在收到區塊之后挖礦,一旦完整區塊廣播后被發現有非法交易,將不會被礦工認可,在這個非法區塊之后挖出的區塊都會作廢。FreshTransaction的概念我們會在后面用到。
CKB主網上線4個月?Nervos DAO鎖定總額已占其流通量 30%:根據 Nervos Explorer顯示,Nervos DAO鎖定總額已突破42.07億,已占CKB流通量30%以上,再創歷史新高。Nervos DAO中的鎖定地址總數超過2000個。二級發行中,已銷毀數量占總發行量78.7%,挖礦獎勵占14.6%,鎖幣補貼占總發行量的6.7%。
Nervos CKB是一條基于PoW共識機制的多資產價值存儲公鏈,其主網啟動至今僅有4個月。Nervos DAO能夠為CKB持有者提供一種抗稀釋的功能,投資者將CKB鎖定至Nervos DAO將會獲得鎖幣補貼。[2020/3/19]
這里我們有一個評估TPS的模型。如圖所示,首先我們相信所有公共節點的帶寬是有一個上限的,最多能夠使用100%的帶寬,你不能使用超過100%的帶寬。在這里帶寬的占用有三個組成部分。如上圖所示,第一部分是用于同步最終確認的交易所占用的帶寬比例,這一部分是真正的TPS。交易首先要被同步,之后才能進行交易確認。第二部分是被共識協議「浪費」的帶寬所占的比例。第三部分是未被利用的帶寬。所以如果想要提高TPS,能夠做的只有兩件事。1、降低共識協議占用的帶寬比例2、降低未被利用部分的帶寬比例能做的只有這兩件事情,對,沒有其他的方式了,并且對于Layer1的協議帶寬占用不能超過100%。
那我們先來看看其他替代性共識協議的帶寬占用。事實上,很多協議將它們珍貴的帶寬資源浪費在委員會成員之間的通信上。Algorand存儲區塊證書以此來向新用戶證明一個區塊被提交。每個區塊證書的大小是300KB,獨立于區塊容量限制之外。如果你按照一個區塊1MB的大小來計算,那么這意味著大約25%的帶寬會永遠被用于同步這些證書。因此我非常好奇為什么它們聲稱他們的吞吐量比NC更好,這根本不合理。另外一種在共識協議中浪費帶寬的方式是區塊型DAG和孤塊中的冗余交易。如上圖的論文中所說,如果所有的節點在區塊中選擇包含同樣的一組子交易,任何兩個平行創建的區塊將可能出現沖突,并且吞吐量就不會很高。?而目前所有的區塊型DAG協議對這種情況視若罔聞。
如何突破中本聰共識困境?
從上面的分析中看到,顯然目前的吞吐量不能滿足我們,因此,NervosCKB的共識協議NC-Max對NC做了一些改進:
NC-Max有三個主要的創新
采用兩步交易確認來降低孤塊率
動態調整區塊間隔和區塊獎勵來更好的提升帶寬利用率
在難度調整的時候考慮周期中的所有區塊,來抵御自私挖礦攻擊。
接下來我會進行詳細解釋。
NC有一個天然的吞吐量限制,因為想要提高NC中的吞吐量,只能做兩件事情:第一件是更大的區塊,就如BitcoinUnlimited和BitcoinCash那樣,還有很多其他的項目也這樣做;第二件是降低出塊間隔。但是由于區塊廣播需要時間,廣播期間若其他節點發現區塊并廣播,會和正在廣播的區塊產生競爭,其中之一會成為孤塊。更大的區塊會需要更長時間廣播,降低出塊間隔實際上是降低出塊難度,節點更容易發現區塊。這兩種方案容易帶來的結果是孤塊率變高了。這些孤塊占用更多的帶寬,但是它們并不為交易確認做出貢獻。當孤塊率提高時,系統的安全性會降低并且吞吐量也會降低。因此對于這兩種方案最終會達到一個平衡,當區塊大小或出塊間隔調節到一定程度時,孤塊率會高到一定程度,即使你進一步增加區塊大小或者降低出塊間隔,吞吐量也不會得到提高。
日本金融廳向加密貨幣交易所施壓,要求其放棄Monero、ZCash和Dash:據報道,日本金融廳正在非正式地鼓勵該國的加密貨幣交易所將Monero、Zcash和Dash都退市,所有這些都是所謂的“隱私加密貨幣”。接近金融廳的消息人士顯然表示,此舉是出于對洗錢和其他可能非法使用加密貨幣的擔憂。總的來說,與比特幣或以太坊等其他數字資產相比,隱私加密貨幣的交易和所有權更難以追蹤。[2018/5/1]
為什么太多的孤塊會對網絡的安全和性能產生負面影響呢?在上圖中我們能夠看到,當孤塊率非常高時,攻擊者能夠非常輕易地私自構建一條更長鏈。攻擊者只需要擁有比全網算力的51%低很多的算力,就能夠覆蓋掉區塊鏈。并且孤塊會消耗公共節點大量的帶寬,這會對整個系統的吞吐量造成很大的負面影響。那我們如何打破NC吞吐量的限制呢?經過上面分析,如果我們想要打破這個限制,就必須降低孤塊率。如果孤塊率下降,那么網絡的安全性和吞吐量都能夠提高。如何降低孤塊率呢?孤塊的出現是由于區塊廣播的延遲,若在一個區塊廣播的過程中,有另一個區塊被發現,那么其中一個區塊就注定會成為孤塊。如果區塊廣播能夠瞬間完成,自然不會有孤塊出現。那我們如何確保區塊能夠足夠快速地被廣播出去呢?比特幣的開發者已經投入了非常多的資源和精力來加快區塊的廣播速度,我們需要進一步找出哪些區塊的廣播速度較慢,或是出了問題。我們來詳細看看這是如何發生的,請看下圖。
目前的比特幣網絡,如果一切順利的話,一個區塊是通過一個CompactBlock中繼協議來廣播的。在CompactBlock中,并不會將整個交易廣播出去,而是廣播CompactBlock中的交易ID。這些交易ID組成了CompactBlock,這些CompactBlock比實際的區塊小很多,因此速度會快很多。當節點A廣播CompactBlock給節點B的時候,節點B檢查這些交易ID,如果對于節點B這些交易都不是FreshTransaction,節點B能夠立刻轉發這些CompactBlock給相鄰節點,這種情況非常棒,過程很順利。然而如果在CompactBlock中有FreshTransaction,節點B將首先需要從節點A那邊同步FreshTransaction,然后驗證這些交易的簽名,這些步驟都很耗費時間。只有當整個區塊都經過驗證無誤之后,節點B才能繼續廣播這個區塊。這個過程避免收到的區塊非法,這樣礦工才會在這個區塊之后挖礦并廣播,若不經過驗證萬一之后發現是非法區塊,那么在這個非法區塊之后的區塊都是無效的。同步FreshTransaction的過程是比特幣區塊廣播延遲的主要原因。
所以,以太坊是一個糟糕的嘗試,我來分析一下他們是怎么做的。以太坊簡單地縮短了出塊間隔,但是以太坊有一個問題,就是它不能夠在收到區塊之前驗證交易的有效性。因為在以太坊中一個交易的有效性依賴于區塊中交易的順序,因此如果你想要驗證一個交易的有效性你必須等到整個區塊都被接收到才行,這樣的話每一個區塊實際上都是FreshTransaction。并且以太坊的網絡協議維護得非常差,自從2015年開始就沒有任何的迭代。而且在交易廣播過程中也有大量的冗余。以太坊客戶端會將同一筆交易向不同的節點廣播7次,這意味著每一個節點將會收到同一筆交易7次。而且不同類型的客戶端之間有不一致性,兩個主要的以太坊客戶端之間基本都是獨立的。因此能夠鏈接兩個不同的網絡的節點非常少,這也是為什么以太坊孤塊率有時會高達30%,并且交易吞吐量非常低。而且大礦工沒有加快區塊廣播速度的激勵。因為如果我的區塊能夠更慢地廣播出去,意味著我實際上能夠實現「自私挖礦」。這對我來講是好事,為什么我要加速區塊廣播呢?以太坊中的叔塊獎勵也沒有提供任何幫助,畢竟如果產生了的孤塊,礦工還是能夠獲得獎勵。因此小礦工會采用先廣播區塊頭和空塊的方式,因為廣播區塊頭的速度會快很多。并且由于不知道下一個區塊中會包含哪些交易,因此礦工通常會挖一個空塊來確保區塊中不會包含和之前區塊交易產生沖突的交易。這非常糟糕,因為空塊并不為交易確認做出貢獻。下面是我們的設計,來緩解上面提到的一些問題。這張圖是區塊的結構,我們在比特幣區塊結構的基礎上增加了幾個字段。
上圖是我們的完整區塊的區塊結構。首先我們有一個交易提案區。只有交易提案區可包含FreshTransaction,而傳統的交易確認區只能包含前幾個區塊的交易提案區的交易,若當前區塊高度是h的話,那么就是h-m到h-n區塊的交易提案區內的交易。只有這些交易能夠被確認,FreshTransaction不能被交易確認區確認。交易提案區不包含完整的交易,只包含交易ID,因此交易提案區會非常小。在叔塊頭區可以包含任意數量的叔塊,叔塊應該包含它們的區塊頭和交易提案區。叔塊頭區不計入區塊大小,因而不受區塊大小的限制,所以不會限制礦工添加叔塊。
下面我進一步來解釋交易提案區。這個區域非常小,因為它只包含交易ID。完整的交易與區塊同步廣播,因為這是一個并行的過程,所以交易的廣播不會影響到區塊的廣播。并且節點在收到廣播的交易后只需要驗證哈希,不會影響區塊的驗證過程。盡管這意味著在交易提案區可能會有無效的交易,雙花交易以及礦工可能不愿意接受的交易,但是這都沒有關系。
類比之前提到的比特幣區塊廣播過程,在我們的協議中,發現區塊的節點會先廣播CompactBlock,CompactBlock較比特幣的稍微大一點,包含交易提案區和若干叔塊的區塊頭和叔塊的交易提案區。但由于CompactBlock本身足夠小通常會立刻廣播給相鄰的節點。新提出的交易,如果有一部分不在節點的交易池中,它們會在發出CompactBlock之后進行廣播。這些都是并行過程,不會相互影響。節點收到交易,經過哈希驗證后廣播給相鄰的節點。這很自然地會有幾個問題:
如果礦工拒絕提供提案交易的完整版本怎么辦?
我把這個交易放到我的交易提案區,但是當你問我要完整的交易的時候,我裝作不知道。
實際上這個對區塊廣播不會有影響,因為不論交易提案區是否有FreshTransaction,區塊都能夠廣播。并且其他礦工也會繼續挖礦,因為總是有足夠的提案交易需要確認。該礦工也沒有必要挖空塊,因為之前區塊的交易提案區包含了它將打包的這些交易ID,已經被發現的區塊在CompactBlock中都廣播了打包進的交易確認區的交易ID,礦工都知道哪些交易被打包了哪些沒有,不會選擇和被發現區塊交易確認區內相沖突的交易,因此礦工會選擇繼續打包交易出塊并獲得手續費,為交易確認做貢獻。
那么如果礦工在他們最新的區塊中包含了這些提出但未廣播的交易,以獲得一個類似自私挖礦的優勢怎么辦?在比特幣的NC中,礦工減慢區塊廣播速度可以獲得挖礦優勢。礦工通常能夠在挖出一個區塊時,只廣播區塊頭,而在廣播完整區塊的時候放慢動作。在這個過程中只有該礦工能夠挖礦。但是在我們的協議中,采用這種方式只會減慢n個區塊之后的區塊廣播速度。因為提出但未廣播的交易只有自私礦工知道,也只有自私礦工能以此作為優勢。然而這個不能被用在下一個區塊中,因為在我們的協議中只能挖n個區塊之前提案區中包含交易,中間需要有一個間隔。礦工只能夠挖h-m至h-n個區塊內的提案交易,但是不能挖前一個區塊的提案交易,除非這個區塊也是被攻擊者挖到的。
如圖所示,這是我們的共識協議和比特幣NC的對比。在比特幣NC中當自私的礦工找到區塊h,它能夠立刻開始挖區塊h1,此時誠實礦工只能夠在收到完整的區塊h之后才能開始挖礦,因為其他礦工需要知道區塊包含的完整的交易并驗證來確定區塊是合法的,而自私礦工能夠通過減慢區塊h傳輸的速度來讓其他礦工更晚收到區塊。在區塊廣播期間就是自私挖礦者的優勢期。然而在我們的協議中當一個自私礦工找到一個區塊h,廣播了包含區塊頭和交易ID的CompactBlock,誠實礦工能夠立刻開始挖h1。如果自私礦工想要利用這些提出但未廣播的交易,它必須找到n個區塊之后的區塊,這樣他們才能利用這個優勢。然而這很難發生,你不能確定在n個塊之后的那個塊是你挖出來的,這個非常難預測。
為了更好地利用帶寬,我們的協議使用了另一種不同的難度調整機制,設定一個固定的孤塊率。如果孤塊率在上一個難度調整周期低于設定的孤塊率,挖礦難度會降低,出塊間隔將降低,吞吐量會提高。也就是說,更少的孤塊意味著當前的網絡狀態實際上有能力更快地同步交易,我們能夠在提高吞吐量的同時不損害網絡的去中心化。反過來看如果難度提高,那么出塊間隔會增加,吞吐量也會降低。如果孤塊率很高那么意味著當前的網絡在這個難度調整周期內并不能處理那么多的交易,那么協議就會降低吞吐量。同時出塊獎勵會和1/成正比,因此在每個難度調整周期中預期的總出塊獎勵是固定的。這意味著假設我們每十分鐘出一個塊,每個塊中有12.5個比特幣,如果難度調節變成每5分鐘出一個塊的時候,每個塊會有6.125個比特幣。因此貨幣的發行率也是保持恒定的。
最后,抵抗自私挖礦攻擊。前面我們提到我們的協議和NC的一個區別在于,我們的難度調整機制是根據難度調整區間中出現的所有區塊來計算的,在估計總算力的時候也會包含叔塊。在NC-Max中,假設攻擊者占總算力的30%,誠實礦工70%,如果沒有自私挖礦攻擊,在10個區塊中攻擊者能夠找到3個區塊,誠實礦工找到7個。如果進行自私挖礦,攻擊者在7個區塊中能夠找到3個區塊,誠實礦工找到4個,3個誠實區塊會成為孤塊,主鏈會增長緩慢。前面也提到自私挖礦在第一個難度調整周期內是沒有收益的,那么在第二個難度調整周期會出現什么?在下一個難度調整周期,難度會保持不變,攻擊者并不能用同樣的算力找到更多的區塊,因此自私挖礦不再有利可圖。也就是說,我們假設幣價在短時間內維持穩定,由于自私挖礦攻擊者是短視的,他們的獎勵是根據單位時間內獲得的獎勵來定義,可以等價于同樣的電力消耗能夠獲得的獎勵。在比特幣中,自私挖礦攻擊者能夠通過降低鏈增長速度,「迫使」協議降低出塊難度,從而在難度調整之后單位時間內能夠獲得更多的獎勵。而在NC-Max協議設計中,出塊難度會根據所有區塊來計算,包括孤塊,攻擊者讓誠實礦工的區塊成為孤塊,卻并不能「迫使」協議降低出塊難度,以在單位時間內獲得更高獎勵。
最后總結一下,我們的協議會很好地利用孤塊:我們希望能夠通過兩步交易驗證來降低孤塊數量,在孤塊數量降低之后,我們利用孤塊率作為一個帶寬利用水平的指標來動態地調節吞吐量。并且孤塊信息被寫在了區塊鏈中,我們在挖礦難度調整算法中利用這個信息從而讓自私挖礦無利可圖。
NC-Max是NervosCKB的PoW共識協議。NC是NakamotoConsensus的簡稱,也就是比特幣的共識協議。如果讀完這篇文章,你覺得這個共識協議應該有一個更好的名字,歡迎告訴我們,或許我們能夠采納:)
Nervos官網:
https://www.nervos.org
Nervos官方論壇:
https://talk.nervos.org
Nervos公眾號:NervosNetwork?
文|《中國企業家》記者張弘北京時間6月18日下午,Facebook旗下全球加密貨幣項目Libra官方網站正式上線并發布白皮書.
1900/1/1 0:00:00在本輪的拉升中,有投資者認為這次的回調更加理性,市場趨于成熟,此輪的價格大幅上漲與2017年底的暴力拉升有著明顯的不同.
1900/1/1 0:00:00親愛的用戶:?? IDAX將上線XCT。開通XCT/BTC交易,立即前往。充值開放時間:2019/7/117:00:00(UTC8)提幣開放時間:2019/7/317:00:00(UTC8)ad.
1900/1/1 0:00:00據比推數據,市值最高的加密貨幣比特幣在6月22日早間突破1萬美元大關。這也是比特幣自2018年3月以來價格再次回到5位數.
1900/1/1 0:00:00尊敬的用戶, 為滿足杠桿用戶更精細化的借貸需求,火幣全球站已經將IOST/USDT杠桿倍數調整為3倍,BCH/BTC,LTC/BTC杠桿倍數調整為4倍,ETH/BTC.
1900/1/1 0:00:00據DAppTotal.comDeFi專題頁面數據顯示:截至目前,已統計的23個DeFi項目共計鎖倉資金達16.3億美元,其中EOSREX鎖倉6.58億美元,占比41.98%.
1900/1/1 0:00:00