創(chuàng)建RSK的初衷是將區(qū)塊鏈的智能合約功能賦予比特幣。
RSK是最有趣的智能合約開發(fā)平臺之一,因為它結(jié)合了比特幣的網(wǎng)絡(luò)安全與Solidity語言易于使用的特性。為了給系統(tǒng)提供動力,Rootstock使用雙挖方式。想知道雙挖是怎么回事嗎?讓我們開始吧!
工作量證明(Proof-of-Work)的簡要概述
在進(jìn)一步討論之前,讓我們快速地總結(jié)一下工作量證明(POW)。
· 礦工通過解決密碼學(xué)難題來“挖”區(qū)塊并將其添加到鏈上。
· 這個過程需要大量的能源消耗和計算能力。這些加密問題的設(shè)計方式使它變得難以解答,并對系統(tǒng)造成負(fù)荷。
· 當(dāng)一個礦工解決了難題時,可以向網(wǎng)絡(luò)提交區(qū)塊以供驗證。
在比特幣的生態(tài)系統(tǒng)中挖礦是一個艱難的過程。這就是為什么礦工將他們的資源和算力集中起來以創(chuàng)建“礦池”。 礦池遵循客戶端-服務(wù)器架構(gòu),其中礦工(客戶端)連接到礦池服務(wù)器(服務(wù)端)。礦池服務(wù)器運行礦池服務(wù)器軟件。常見的軟件有CKpool、BTCpool和Eloipool。
如果您想更深入地了解POW,請參閱本指南(https://blockgeeks.com/guides/blockchain-consensus/)。接下來,讓我們更深入地討論雙挖。
什么是雙挖?
雙挖(https://dwz.cn/xQtXvIjL)是一種允許使用相同算法的不同加密貨幣同時挖礦的機(jī)制。在這種情況下,由于比特幣和RSK都基于SHA-256算法,它們可以通過雙挖的方式聯(lián)合挖礦。雙挖的兩個最大優(yōu)勢是:
· 大大降低了礦工的投資成本,因為他們不需要購買新的挖礦設(shè)備。
· 具有較低算力的加密貨幣可以通過與具有較高算力的加密貨幣錨定來獲得足夠的算力。
· 礦工也可以通過維護(hù)雙挖鏈獲得額外獎勵。
Namecoin是第一種和比特幣雙挖的加密貨幣。讓我們來看看雙挖的總體工作流程:
· 雙挖鏈的區(qū)塊ID嵌入在主鏈的區(qū)塊中。該區(qū)塊ID是二級鏈中區(qū)塊的加密哈希。
· 該雙挖區(qū)塊的哈希值以雙挖的“標(biāo)簽”為前綴。該標(biāo)簽可以是一些簡短的描述性文本或魔術(shù)字節(jié)(magic bytes)。
· 為避免混淆,主鏈中的區(qū)塊只能與第二鏈中不超過一個區(qū)塊相關(guān)聯(lián)。
· 為了確保雙挖的整體安全性,必須保證:在主鏈上挖出一個可與副鏈中的兩個區(qū)塊關(guān)聯(lián)的主塊的難度,要難于在主鏈上挖出兩個分別只關(guān)聯(lián)一個副鏈區(qū)塊的主塊的難度。
在RSK-比特幣的例子里,RSK的挖礦難度相當(dāng)于70-bit,而比特幣難度相當(dāng)于74 bits。
比特幣礦池通常在向礦工提供的每個采礦作業(yè)中都引用RSK的區(qū)塊。每次礦工找到解決方案時,都會將其與比特幣和RSK的挖礦難度進(jìn)行比較。此時可能出現(xiàn)三種情況:
· 礦工計算出的解決方案滿足比特幣網(wǎng)絡(luò)難度。區(qū)塊被封裝并發(fā)送到網(wǎng)絡(luò)。比特幣網(wǎng)絡(luò)還將傳播RSK的雙挖參數(shù)。因為RSK的難度比比特幣低,所以這個解決方案也適用于封裝RSK。
· 此解決方案滿足RSK,但不滿足比特幣。解決方案將提交給RSK網(wǎng)絡(luò),而不是比特幣網(wǎng)絡(luò)。
· 解決方案不滿足任何難度要求。
無論如何,最終提交給RSK的解決方案允許節(jié)點構(gòu)建SPV證明。如果證明是有效的,那么它將成為提交給網(wǎng)絡(luò)的區(qū)塊的一部分。
深入研究雙挖
比特幣區(qū)塊頭類似于雙挖中的POW代理。RSK區(qū)塊鏈解釋了比特幣區(qū)塊頭的工作量證明。通過在比特幣區(qū)塊中搜索標(biāo)簽以確定RSK鏈上的哪一個區(qū)塊應(yīng)該與之相關(guān)聯(lián)。同時我們需要記住,RSK區(qū)塊鏈不需要一個完整的比特幣區(qū)塊來驗證區(qū)塊頭的POW,并將其與相應(yīng)的RSK區(qū)塊頭部相關(guān)聯(lián)。一個簡易SPV證明就足以建立這種關(guān)系。我們將會繼續(xù)探討一點SPV證明。在此之前,讓我們對RSK標(biāo)簽做進(jìn)一步的理解。
RSK標(biāo)簽的當(dāng)前格式是:
RSKBLOCK:RskBlockHeaderHash
其中:
· “RSKBLOCK:” 是由52 53 4b 42 4c 4f 43 4b 3a字節(jié)組成的ASCII字符串。
· RskBlockHeaderHash 是不含雙挖區(qū)域的二進(jìn)制格式的RSK區(qū)塊頭的Keccak哈希運算結(jié)果摘要,雙挖區(qū)域?qū)⒃赑oW解決后被填充。
雖然不是強制性的,但RSK標(biāo)記應(yīng)該包含在輸出腳本的OP_RETURN OP_PUSHDATA1操作碼之后。這有助于防止向比特幣UTXO發(fā)送垃圾數(shù)據(jù)。
RskBlockHeaderHash 由標(biāo)準(zhǔn)RSK節(jié)點(rskj daemon)創(chuàng)建。礦池服務(wù)器插件輪詢rskj daemon,并維護(hù)提供給礦池服務(wù)器的最新RskBlockHeaderHash值。
除上述規(guī)定之外,以下附加限制也可能適用:
· RskBlockHeaderHash之后直到coinbase最新交易之間的字節(jié)數(shù)必須小于或等于128字節(jié)。
· 二進(jìn)制字符串“ RSKBLOCK:”(52 53 4b 42 4c 4f 43 4b 3a)不能包含在結(jié)尾的原始字節(jié)中。
· 如果RSK標(biāo)記位于非最后一個輸出腳本中,那么它有可能出現(xiàn)在下一個輸出的字節(jié)中。這就是為什么強烈建議使用最后一個輸出腳本用于RSK標(biāo)記的原因。
· 如果RSK標(biāo)記位于coinbase區(qū)域中,那么“RSKBLOCK:”就有可能出現(xiàn)在Coinbase區(qū)域中。
什么是SPV證明?
如上所述,二級RSK區(qū)塊鏈與一級比特幣區(qū)塊鏈之間的關(guān)聯(lián)可以通過SPV證明來建立。SPV證明主要由Merkle樹成員證明構(gòu)成。
藍(lán)色方框表示SPV證明中包含的信息,并沿RSK塊傳輸。由于尾隨字節(jié)的限制,RSK 全節(jié)點將創(chuàng)建SPV證明的壓縮版本,包括:
· 比特幣區(qū)塊頭(80字節(jié))。
· 一個Coinbase交易的Merkle分支(約320個字節(jié))。
· 消耗Coinbase交易頭的SHA-256中間狀態(tài)(32字節(jié))。
· 一個由Coinbase交易記錄和RSK標(biāo)簽組成的64字節(jié)對齊的數(shù)據(jù)塊(最大169字節(jié))。
· 目前,SPV雙挖證明的最大大小為780字節(jié)。
礦池服務(wù)器軟件可以向rskj daemon發(fā)送完整的區(qū)塊或SPV證明。如果rskj接收到一個區(qū)塊,它將解析它并提取必要的字段來構(gòu)建SPV證明。
雙挖難度
在繼續(xù)之前,我們需要弄懂難度的含義以及為什么首先引入此概念。你可能知道,比特幣的上限是2100萬枚。隨著越來越多的礦工參與挖礦,需要有一個機(jī)制來防止礦工很快挖完所有的比特幣。
為了防止比特幣的供應(yīng)失控,并使其成為一種更可持續(xù)的模式,中本聰(Satoshi Nakamoto)引入了難度機(jī)制。隨著挖掘出越來越多的區(qū)塊,解決密碼學(xué)問題的難度呈指數(shù)級增長。基本上,挖掘出的比特幣越多,挖掘過程就越困難。
考慮到RSK鏈的難度遠(yuǎn)低于比特幣。在系統(tǒng)內(nèi)部,難度被轉(zhuǎn)換成“目標(biāo)”,與難度成反比。目標(biāo)是一個256位無符號整數(shù)。
在同一天,合并挖掘出的區(qū)塊鏈?zhǔn)且粋€近似的目標(biāo)。而RSK有更高的目標(biāo),因為其出塊頻率高達(dá)比特幣的20倍以上。
這就是為什么解決RSK POW難題的區(qū)塊頭可能無法被比特幣網(wǎng)絡(luò)接受的原因,因為它可能無法滿足其難度。因此,這里要問的問題是:如果一個礦池總是在尋找比特幣區(qū)塊,它怎么才能探測到一個RSK區(qū)塊呢?現(xiàn)有事實已經(jīng)證明,礦工們一直在尋求以較低難度解決區(qū)塊的方法。這些中間的、低難度的區(qū)塊稱為“配額(Shares)”,它們是礦池服務(wù)器在記帳時需要的。礦池中的許多礦工將在比特幣的真實解答之間積極地創(chuàng)建更多的配額,從而為礦工的貢獻(xiàn)提供更高的顆粒度。
以下是關(guān)于配額需要注意的事情:
· 配額會非常頻繁地傳輸?shù)降V池服務(wù)器。因此,服務(wù)器可以根據(jù)相關(guān)礦工的算力貢獻(xiàn),在他們之間分配未來的收入。
· 取決于系統(tǒng)的整體算力,比特幣挖礦的難度有時會下降。這就是為什么要在系統(tǒng)內(nèi)傳遞配額,因為它有可能是解決當(dāng)前比特幣POW運算的辦法。
· 如果配額的哈希摘要低于比特幣當(dāng)前的目標(biāo),那么它會被轉(zhuǎn)發(fā)到bitcoind daemon,后者會在網(wǎng)絡(luò)上傳播它。
· 不同的次級區(qū)塊鏈可能有不同的難度。這就是為什么一個能夠進(jìn)行雙挖的礦池服務(wù)器必須將配額的目標(biāo)與它所支持的次級區(qū)塊鏈的所有目標(biāo)進(jìn)行比較的原因。因此,如果配額滿足RSK的目標(biāo),那么相應(yīng)的區(qū)塊就被認(rèn)為對RSK網(wǎng)絡(luò)是有效的。
RSK雙挖的安全性
在RSK雙挖的機(jī)制中,一個理性的挖礦者只需要進(jìn)行2^69次運算(RSK當(dāng)前的難度)。一個惡意的攻擊者需要在30秒內(nèi)計算多達(dá)2^80次哈希運算才能對系統(tǒng)造成破壞。為了進(jìn)行這種攻擊,攻擊者必須投入比礦工多2000倍的硬件。投入總額約為5萬億美元。
然而,這里還有一件事需要考慮。攻擊者也可以只為相同的RSK區(qū)塊高度生成一個或多個共享其POW的區(qū)塊。如果是這樣的話,也需要浪費5萬億美元的成本才能實現(xiàn)。
(譯者注:所以RSK網(wǎng)絡(luò)現(xiàn)在已經(jīng)非常安全了。)
SHA256算法的假設(shè)弱點
RSK使用一種非標(biāo)準(zhǔn)的加密手段來壓縮交易生成。RSK只傳輸尾部,而不是通過對Merkle-Damgard構(gòu)造的中間態(tài)進(jìn)行哈希來傳輸整個交易。 然而,這個手段假設(shè)SHA256算法完全抵抗“自由啟動碰撞(freestart collision)”。根據(jù)RSK的設(shè)置,SHA256至少需要和暴力破解80比特的難度一樣安全。
在SHA256中目前沒有發(fā)現(xiàn)自由啟動碰撞,最接近的結(jié)果也只是在SHA256的簡化版中發(fā)現(xiàn)半自由啟動碰撞(64輪中的第38輪,代價是2^65次運算)。
到目前為止,該算法被認(rèn)為是安全的。然而,如果發(fā)現(xiàn)這樣的攻擊,RSK可以通過網(wǎng)絡(luò)升級來應(yīng)對。在這種情況下,RSK將不使用加密壓縮技術(shù)。當(dāng)然,這將導(dǎo)致區(qū)塊大小的小幅增加。
注意:如果SHA256遭遇了自由啟動碰撞攻擊,它將完全失效。對于比特幣來說,這也是一個非常大的問題。
另外,RSK的1.0.0版本提供了80位的安全性,以防止可能的標(biāo)簽沖突。80位碰撞攻擊在理論上是不經(jīng)濟(jì)和無法計算的。
· POV計算: 如此大規(guī)模的攻擊將需要天量的內(nèi)存。而且,碰撞攻擊的CPU成本比解決RSK PoW難題的成本高出2000多倍(69 vs 80比特)。
· POV理論:RSK的DECOR+共識認(rèn)為碰撞的區(qū)塊可共享區(qū)塊獎勵,因此,如果過去的區(qū)塊獎勵大約等于新區(qū)塊的獎勵,挖出過去區(qū)塊的新替代區(qū)塊將變得無利可圖。這實際上意味著攻擊者將主要與他們自己競爭。
· POV經(jīng)濟(jì):善意的雙挖礦工可以賺取比特幣交易手續(xù)費,因此雙挖由比特幣補貼。 另一方面,攻擊者將必須支付碰撞攻擊的全部費用。這意味著對POW鏈接的任何攻擊都是沒有成本效益的。
RSK團(tuán)隊表示:“即使考慮到計算效率的提升,我們認(rèn)為標(biāo)簽在未來20年仍然是安全的。然而,如果計算趨勢發(fā)生根本變化,則未來的網(wǎng)絡(luò)升級可以很容易地將哈希的大小擴(kuò)展到完整的32字節(jié)。”
總結(jié)
RSK是比特幣雙挖中最賺錢的選擇。RSK團(tuán)隊已經(jīng)為CoiniumServ、CKpool、BTCpool和Eloipool等礦池開發(fā)了幾個完全可用的插件。其他礦池也開發(fā)了他們自己的插件。RSK團(tuán)隊更推薦CKpool,因為它做了適當(dāng)?shù)膬?yōu)化。如果您是一個新上線的礦池,只需遵循RSK雙挖的說明進(jìn)行操作即可。
責(zé)任編輯;zl
評論
查看更多