雙向錨定(2WP)允許比特幣從比特幣區塊鏈轉移到第二層區塊鏈,并且反之亦然。“轉移”其實是一個錯覺:比特幣是不能被轉移的,但可以暫時性地將比特幣在比特幣區塊鏈上鎖定,同時等量的等價代幣在第二層區塊鏈上被釋放。當等量等價的代幣在第二層區塊鏈上被鎖定時,則比特幣區塊鏈上的原始比特幣就可以被釋放。這就是雙向錨定的本質。這一本質存在一個問題,理論上第二層區塊鏈已經清算完畢,但如何保證實際執行是一個問題。因此,任何雙向錨定系統必須做的承諾都基于假設雙向錨定的參與者是誠實的。最重要的一個假設是,第一層區塊鏈是抗審查的,并且大多數比特幣礦工是誠實的。另外一個假設是主要的保管鎖定的比特幣的第三方也是誠實的。如果這些假設不成立,那么比特幣和等量等價的第二層區塊鏈代幣可能被同時釋放,這就導致了惡意的雙花。任何一個雙向錨定系統必須選出一個實施方案,以保證參與的各方承諾的誠實性是在經濟上和法律上有根據。這涉及到那些由關鍵性參與方發起的攻擊的成本分析,和攻擊因果關系分析。雙向錨定方案的安全性取決于其激勵體制是否能夠強化系統中關鍵性的參與方對系統做出的承諾。
什么不是雙向錨定
質押托管合同(BEC)是比特股上創建的一種方法,這種方法可以讓比特幣(或法定貨幣)在一個智能支付平臺上創建和平臺本身不同的代幣(如bts)進行交易。這種方法也適應于其他平臺。這種方法可以在平臺上鎖定發行者的當地貨幣或比特幣來發行債券,一般來說鎖定的貨幣或比特幣價值要超過他們創建的債券價值,或等值,然后他們就可以創建債券白條在平臺上銷售。平臺監控比特幣的實時價格可以實現發行的債券總量的動態調整。顯然,這種方法不是雙向錨定,因為這種方法創建了新的“比特幣”,并且沒有等量的比特幣在比特幣區塊鏈上被鎖定。質押托管合同(BEC)的安全性通常是弱于雙向錨定(2WP)的,因為用戶必須信任沒有對應利益關系的記賬方,他們可能沒有獲得高額的獎勵,但用戶卻必須信任他們是誠實的。并且,因為本地代幣市場價格的波動性,讓持有債券的參與方幾乎只有很少甚至沒有經濟利益。
任何雙向錨定系統只是一個投票系統
當第二層區塊鏈最終沒有清算,我們可以將任何雙向錨定系統簡化,并且看出雙向錨定系統就相當于有一組保管人投票來決定鎖定比特幣和發送已經鎖定的比特幣。投票可以以數字簽名、哈希算力(工作量證明PoW)、存儲空間(存儲空間證明Proof of space),或者加密數字貨幣權益(股權證明POS),或者其他任何已有區塊鏈的共識系統。我們可以調整每一個參與方的投票權,調整可投票的參與方數量,調整某個參與方在某種情況下是否被允許投票,可以設定多個允許投票條件,等等,但我們無法改變這個系統的投票本身。
雙向錨定設計
我們目前已經有的最常見的雙向錨定設計是:側鏈,驅動鏈和多重簽名監管和混合設計。為了簡化說明,我們將從比特幣區塊鏈轉移到第二層區塊鏈的代幣稱為第二層鏈代幣(secoins)
單一保管人
雙向錨定的一種可實現形式是建立一個交易所擔保托管鎖定比特幣和執行監管解鎖等量第二層鏈代幣。在第二層區塊鏈代幣沒有被鎖定前需要鎖定比特幣,可以由交易所手動執行,也可以通過軟件協議來執行操作。這個操作過程可用下圖來描述:
多重簽名聯邦
雙向錨定的一個更好的實現方式是建立由一組公證人控制的多重簽名,其中大部分公證人被批準執行資金解鎖。這種設置方式要比由單個組織來控制資金更合理,但控制權依然有可能中心化。為了實現真正的去中心化,需要仔細選擇公證人,讓他們分布在不同的司法管轄范圍,不同的地理位置,并且每一個人都要擁有良好的聲譽和足夠好的保密性。他們不能太少,也不能太多。這個操作過程可用下圖來描述:
側鏈
為了不讓更多第三方參與雙向錨定,每個區塊鏈可以通過協議來實現強制執行的共識。一個區塊鏈系統性能能夠理解其它區塊鏈的共識系統,能夠實現在獲得其它區塊鏈系統提供的鎖定交易證明之后,自動釋放比特幣。可以用下圖來描述:
然而,當使用比特幣的側鏈時存在幾個問題:
大多數公共區塊鏈沒有最終結算方案。如果第二層區塊鏈也沒有最終結算方案,那么比特幣區塊鏈就不能確認第二層區塊鏈的交易是否被第二層區塊鏈網絡所接受。(例如:鎖定第二層鏈代幣(secoins))它所能得到的只是一個概率保證:越多的工作量證明被用來驗證一個交易,就意味著它越有可能已經被接受。
即使第二層區塊鏈有最終結算方案,如果沒有區塊鏈糾纏(見下一節)那么第二層區塊鏈將遇到與比特幣區塊鏈相同的問題。如果存在糾纏,那么第二層區塊鏈的出塊率不能高于比特幣的出塊率。
比特幣的側鏈需要一個軟分叉或者硬分叉來添加新的復雜操作碼。Blockstream的方案現在是不完整的,沒有解決簡單支付驗證(SPV)證明的工作量證明(POW)的驗證問題。
區塊鏈糾纏
解決雙向錨定缺乏最終交易確認問題的一種方式是區塊鏈糾纏,例如在第一層區塊鏈中鎖定交易的被撤消,就等同于第二層區塊鏈中解鎖交易的撤消。有幾種區塊鏈糾纏的方式:
第二層區塊鏈的交易被嵌入到第一層區塊鏈的交易中(例如嵌入到OP_RETURN支付載荷中,像合約幣(Counterparty))
第二層區塊鏈的區塊有兩個父塊,一個在第二層區塊鏈,一個在第一層區塊鏈。第二層區塊鏈節點驗證第一層區塊鏈里的父塊是否是在比特幣的最長鏈。
第二層區塊鏈的區塊被錨定在被監管的第一層區塊鏈的加密交易中。
前兩種方式允許第二層區塊鏈驗證簡單支付驗證(SPV)證明,而不需要證明者提供確認區塊頭部信息(header),因為第二層區塊鏈客戶端也保存了一份比特幣區塊鏈的副本(第一種方式中的整個區塊鏈,第二種方式是只保存區塊頭部信息)。而第三種方式并不可行。
區塊鏈糾纏有以下幾個缺點:
它阻止了第二層區塊鏈以比比特幣更高的速率創建區塊,因為在錨定前,區塊鏈分支的接受情況存在不確定性。有可能出現描定的是一條短鏈,而不是錨定在最長鏈嗎?
在比特幣交易中嵌入了第二層區塊鏈的交易時,第二層區塊鏈的所有用戶都需要處理兩個鏈的交易。
區塊鏈糾纏解決了最終結算方案的某方面問題,但沒有解決第一層區塊鏈中被鎖定的比特幣的監管問題。
驅動鏈
驅動鏈將被鎖定比特幣的監管權交給比特幣礦工,并且允許比特幣礦工們投票決定何時解鎖比特幣和將解鎖的比特幣發送到哪里。礦工使用比特幣區塊鏈投票,使用區塊里的某些字段來實現投票(例如coinbase字段)。越多的誠實礦工參與進來投票,則安全性就越高。下圖是對驅動鏈的描述:
混合型
迄今為止所提出的所有設計都是對稱的:用于解鎖第二層鏈代幣的方法與解鎖比特幣的方法是相同的。但第一層區塊鏈和第二層區塊鏈有本質的不同:第一層區塊鏈主要是在發行貨幣,而第二層鏈則不發行貨幣。這在安全性方面存在巨大的隱患,它表明了對稱的雙向錨定模型可能是不夠完善的。混合雙向錨定是對兩邊使用了不同的解鎖方法,例如在第二層區塊鏈上使用側鏈而在第一層區塊鏈網絡上使用驅動鏈。
根鏈(RSK)案例
根鏈(RSK)是很特別的。根鏈基于這樣一種基本的設計選擇:必須與比特幣聯合挖礦。因此,我們必須分析出最佳設計。我們要考慮到:
哪一方控制著被鎖定的比特幣
攻擊的成本是什么
攻擊的后果是什么
參與的激勵機制是什么
我們發現,如果幾乎全體的比特幣礦工都加入到聯合挖礦中,當監管者是比特幣礦工時,參與各方可以被激發出最高的誠實性,但只有當幾乎所有礦工都參與其中。在聯合挖礦的情況下,驅動鏈和側鏈都完全依靠比特幣礦工的誠實,兩者的安全性是相同的。然而,側鏈在比特幣一側實現起來要復雜得多,所以在比特幣這一側,根鏈的最佳選擇是使用驅動鏈。而在根鏈這一層,我們使用側鏈的方式來實現。所以從這一點來說,根鏈是采用混合型設計方案,可以被稱為驅動鏈/側鏈。
當礦工參與聯合挖礦的程度比較低時,“驅動鏈/側鏈”的安全性是很低的。因此,我們建議采用這樣一種混合模型,其中被鎖定比特幣的安全性是基于驅動鏈外加一組公證人。礦工和公證人(擁有不同的權重)共同投票決定解鎖哪些比特幣。公證人使用數字簽名進行投票,而礦工則在他們的coinbase交易中寫入一個特殊的標記進行投票。這是中心化和安全性之間的一種權衡。最終的根鏈雙向錨定設計可以被稱為“驅動鏈 +公證人/側鏈”。我們會基于比特幣全體礦工參與到聯合挖礦的程度來動態調整投票權重。在初期,只有公證人才有投票權,使用傳統的多重簽名交易。在中期,當驅動鏈功能被加載到比特幣時,公證人和礦工將一起參與投票。從長遠來看,當90%以上的礦工參與了聯合挖礦時,公證人的投票權將被刪除,屆時只有礦工才有投票權。這個演變的過程可以用來圖來描述:
在本質上,我們建議將鎖定的比特幣的安全性建立在礦工和一組公證人身上,但是這兩者之間的投票權重會因全體礦參與聯合挖礦的程度而動態調整。
在之后文章中,我們將展示驅動鏈+公證人的設計是如何在比特幣上實現的,只需要在比特幣上植入一個單一的操作碼OP_CHECK_VOTES_MULTISIG_VERIFY。這個操作碼很容易理解,編程實現也很簡單,并且可以以軟分叉的方式在比特幣網絡上部署。