中本聰在其開創(chuàng)性的比特幣論文中首次將分布式時間戳協(xié)議應(yīng)用于去中心化金融網(wǎng)絡(luò),后續(xù)從業(yè)余愛好者和專業(yè)人士那里該領(lǐng)域已經(jīng)取得了爆發(fā)式的研究進展,各方的相互競爭促進了對現(xiàn)有協(xié)議的擴展、調(diào)整、改進和細化。引人注目的新想法的實現(xiàn)包括Ethereum (其擴展了腳本)、CryptoNotes(其改進了隱私)和側(cè)鏈(其研究了與比特幣代幣的1:1雙向錨定)。這些協(xié)議都實現(xiàn)了最初在比特幣白皮書里描述的工作量證明(PoW)。
對于比特幣協(xié)議的一個常見擴展是修改其共識機制,使用部分或者完全的權(quán)益證明(PoS)或者使用一個權(quán)益(Token), 而不是算力來參與時間戳的處理。第一個基于比特幣協(xié)議的權(quán)益證明區(qū)塊鏈在2012年由King和Nada實現(xiàn),包含了PoW 和PoS,隨著時間的推移該區(qū)塊鏈項目會逐漸轉(zhuǎn)向完整的PoS。對于純PoS共識系統(tǒng)的批評是很多的,最強烈的反對來自于那些使用純PoW區(qū)塊鏈的人士。對于分布式時間戳系統(tǒng),最常見的對于PoS的反對意見是“不承擔(dān)任何風(fēng)險”或“不花錢的模擬”,其描述了系統(tǒng)的不穩(wěn)定性來源于權(quán)益持有者能夠毫不費力地生成相應(yīng)的時間戳歷史。
盡管有爭議,但很明顯,那些疊加在PoW時間戳系統(tǒng)之上的PoS系統(tǒng)很顯然也可以獨立地實現(xiàn)共識。Bentov 和同事在他們的論文中探討了活動量證明(PoA),這似乎是對于PoW協(xié)議的-個可行性擴展并且可能會啟用- -些新的有趣屬性。2013年早些時候Mackenzie提出了類似的稱為MC2的設(shè)計。本文我們闡述了類似的我們稱之為“Decred”的共識系統(tǒng)的搭建和實現(xiàn)。
1.混合PoW/PoS設(shè)計
與前述中本聰機制的主要差別是一個新的彩票系統(tǒng),在可以選擇和消費彩票之前必須購買彩票并等待到期的時期。根據(jù)區(qū)塊頭部中包含的偽隨機數(shù),在到期的票池中按字典序為區(qū)塊進行彩票的選擇。因為在PoW系統(tǒng)中操縱這種偽隨機數(shù)是很困難的,所以選票操作會與PoW礦工的基本成本相關(guān)聯(lián)。我們可以通過概率密度的數(shù)來描述一段時間之內(nèi)的選票選擇問題,其類似于在恒定的難度下以恒定的哈希速率在PoW共識機制中生成區(qū)塊的概率,以近似于一半票池大小的模式產(chǎn)生一個概率分布。選票的購買價格是由一個新的權(quán)益難度控制的,而權(quán)益難度由購票的指數(shù)權(quán)重平均值以及先前區(qū)塊中的到期選票數(shù)目來決定。
以下步驟解釋了PoW區(qū)塊的確認過程:
i.區(qū)塊是由PoW礦工挖礦產(chǎn)生的,礦工選擇交易并放入?yún)^(qū)塊里。與權(quán)益系統(tǒng)相關(guān)的交易被插入到UTXO集合中。
ii. PoS礦工通過他們的選票發(fā)起一個投票 交易在區(qū)塊上進行投票,投票能夠在前一個區(qū)塊之上構(gòu)建一個區(qū)塊,并且不管前一一個常規(guī)交易樹(包含coinbase和非權(quán)益相關(guān)的交易)是否有效,都會選擇一個區(qū)塊。
ili另外一個PoW礦工開始構(gòu)建一個區(qū)塊并插入PoS礦工的投票。已投選票的大多數(shù)都會被包含在后續(xù)的區(qū)塊中,并被網(wǎng)絡(luò)所接受。在這個新區(qū)塊的投票交易中,PoW礦工會檢查一個標(biāo)記來確定PoS礦工是否指示了區(qū)塊的常規(guī)交易樹是有效的。這些投票標(biāo)記會被記錄。如果前一個區(qū)塊的常規(guī)交易樹是有效的,那么會在區(qū)塊中基于大多數(shù)選票來設(shè)置一個比特位標(biāo)記來指明該信息。
iv.最后會找到一個滿足網(wǎng)絡(luò)難度的隨機數(shù),并且該區(qū)塊被插入到區(qū)塊鏈中。如果確認了前一個區(qū)塊的常規(guī)交易樹,就將這些交易插入到UTXO集合中,并返回到第i步。
為了防止對于已經(jīng)納入的選票的操縱,如果礦工沒有將所有的投票交易納入?yún)^(qū)塊中,那么會對當(dāng)前的區(qū)塊采用線性的補貼處罰。對以前那些交易樹進行失效動作的“軟”處罰有助于防止丟棄工作,這對于確保系統(tǒng)安全是必要的,并且假設(shè)下一個區(qū)塊將由一個無私的保留前面區(qū)塊補貼的礦工獲得,以便獲得支持。即使不是這樣的情況,具有高哈希率的惡意礦工仍然至少需要(數(shù)量為大多數(shù)的數(shù)目/2)+1個選票支持他們之前區(qū)塊的交易樹,以便產(chǎn)生一個新區(qū)塊,使得他們可以從前面的區(qū)塊獲得任何補貼。
比特位標(biāo)記會被顯式地添加到區(qū)塊頭部和投票中以便礦工可以輕松地進行硬分叉或者軟分叉。
2.去中心化權(quán)益池
早先的PoS設(shè)計帶來的一個問題就是如何在PoS挖礦時執(zhí)行類似于PoW挖礦的池化礦池對PoW礦池是有利的,但是PoS礦池除了簡單地運行一個節(jié)點,。不需要專門的硬件,而且也不像PoW挖礦那樣,集中化推進挖礦的場景會隨著成本增加帶來利潤下降。Decred通過允許為同一張選票的同--筆購買交易擁有多個輸入并為每一個輸入按比例提供UTXO補貼金額,同時也為這些按比例的獎勵提供一個新的輸出公鑰或者腳本,從而解決了這個問題。這些補貼獎勵那些在不可信環(huán)境下生成選票的礦工,并且在提交到區(qū)塊鏈網(wǎng)絡(luò)之前使用RoundRobin輪詢方式進行簽名。重要的是,控制選票產(chǎn)生的本身實體就是另外一個公鑰或者腳本,該腳本不能操縱給予接受者的補貼,利用選票中的多重簽名腳本可以以分布式的方式來產(chǎn)生選票。
3. 小的設(shè)計元素
3.1 橢圓曲線簽名算法
段還沒有已知的攻擊會使用一個稍大的m值。人們也提出了其它一些對于secp256k1使用參數(shù)的反對意見。
另一個非常受歡迎的采用128位加密的數(shù)字簽名算法(DSA)是Ed25519,它在曲線上使用雙有理的等效于Curve25519的EdDSA簽名算法,這個算法如今是被廣泛應(yīng)用的。與secp256k1的ECDSA不同,Ed25519使用更簡單的Schnorr簽名,在隨機預(yù)言機模型[附錄A]中是可證明安全的。
Schnorr簽名也被用于比特幣,然而Decred使用了一個新的操作碼一OP_CHECKSIGALT來驗證--個擁有無限數(shù)量的新簽名的機制,而不是使用Schnorr簽名專屬的一個實現(xiàn)了secp256k1 曲線參數(shù)的操作碼。在目前的實現(xiàn)中,secp256k1 Schnorr 簽名和Ed25519簽名均可用于作為secp256k1的ECDSA簽名的增補。將來,在軟分叉中添加新的簽名方案也是非常簡單的,例如量子安全的方案。擁有這兩個Schnorr套件也允許生成一個占用空間與正常簽名相同的簡單組簽名,這兩者目前都已經(jīng)實現(xiàn)了。在將來,使用無代理的加密共享的門限簽名還將使得(,n)i限簽名占據(jù)相同的空間量。
3.2 哈希函數(shù)
用于比特幣的SHA256由于其Merkle Damgard數(shù)據(jù)結(jié)構(gòu)從而具有很多技術(shù)缺陷,這些漏洞導(dǎo)致了SHA3有機會競爭基于不同的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)的新哈希函數(shù)。Decred 選擇了BLAKE256作為其哈希函數(shù)的最終贏家。該哈希函數(shù)基于HAIFA數(shù)據(jù)結(jié)構(gòu),其結(jié)合了Bernstein 的ChaCha流式密碼變體。該哈希函數(shù)在x86-64微架構(gòu)上有著顯著的高性能,與SHA256相比,短消息的速度更快,盡管該哈希函數(shù)被認為在14輪時具有更高的安全邊際開銷。
3.3腳本擴展
除了之前提到的OP_ CHECKSIGALT和OP CHECKSIGALTVERIFY之外,我們也對其它比特幣腳本做了修改。在輸出腳本中添加了一個版本字節(jié),以便啟 用簡單的軟分叉到一個新的腳本語言,正如先前Wuille建議的。所有和數(shù)學(xué)及邏輯相關(guān)的操作碼都已被重新啟用,現(xiàn)在可以運行in在t32寄存器上。各種字節(jié)字符串操作操作碼也已實現(xiàn)并重新啟用。剩下的未使用的比特幣操作碼已被重新用于未來的軟分叉,此外,也修復(fù)了比特幣腳本語言長期存在的一些bug。
3.4 簽名腳本隔離和防偽證明
為了防止交易可塑性以及產(chǎn)生的交易具有相同的輸入引用和輸出,但是交易;ID卻不同,已經(jīng)從交易哈希的計算中移除了輸入腳本。盡管在CryptoNote幣和側(cè)鏈中已經(jīng)實現(xiàn)了這個修改,但這個修改的由來還是頗有爭議的?,F(xiàn)在有提議將比特幣的軟分叉稱為“隔離見證”,比如在側(cè)鏈實現(xiàn)中,對見證人數(shù)據(jù)的承諾是包含在區(qū)塊的merkle樹中的。另外,比特幣的軟分叉提出的防偽證明是由礦工設(shè)定的,并且也致力于作為merkle樹中數(shù)據(jù)的一部分。
3.5 交易擴展
添加了交易到期這個屬性,如果區(qū)塊已經(jīng)達到一定的高度,那么允許從內(nèi)存池中刪除交易。以前從內(nèi)存池刪除交易的唯一方法是雙花。
3.6 其他改進
在比特幣中,補貼是以區(qū)塊高度呈指數(shù)衰減的。然而,Decred 的算法雖然也非常簡單,但隨著時間的推移也更好地融入了這種衰減,以免產(chǎn)生與CryptoNote類似的由于補貼急劇下降導(dǎo)致的市場震蕩。像PeerCoin一樣,PoW難度是根據(jù)先前區(qū)塊時間的指數(shù)加權(quán)平均值計算的。然而,這個計算也被融入到了類比特幣的數(shù)字貨幣的難度窗口周期中。通過確保區(qū)塊時間中的每個差異被納入到難度計算中,比特幣中的“fimewarp“ bug得到了糾正。
還應(yīng)該指出,許多眾所周知的挖礦攻擊,比如selfish mining和stubbonmining, 在一個高效的去中心化權(quán)益挖礦以及沒有PoW-PoS礦工合謀的系統(tǒng)中將不再有效,這是因為沒有PoS礦工的協(xié)助,它是不可能對區(qū)塊產(chǎn)生加密擴展的。針對前述的以及針對我們系統(tǒng)的特定的新挖礦攻擊方法的保護彈性將會成為未來研究的一個富有成果的領(lǐng)域。