本節書摘來自華章計算機《區塊鍊開發指南》一書中的第2章,第2.4節,作者:申屠青春 主編 宋 波 張 鵬 汪曉明 季宙棟 左川民 編著更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
sidechains(側鍊)實質上不是指特定的某個區塊鍊,而是指那些遵守側鍊協定的所有區塊鍊,這個詞是針對比特币主鍊來說的。側鍊協定是指可以讓比特币安全地從比特币主鍊轉移到其他區塊鍊,同時又可以讓其他區塊鍊上的貨币安全傳回到比特币主鍊的一種協定。
是以從某種程度上來說,現在市面上的所有區塊鍊,例如以太坊、萊特币、狗狗币等區塊鍊都可以成為側鍊應用。側鍊的實作具有重大意義,它意味着比特币可以在不同的區塊鍊上流通,其應用範圍和應用前景會更加廣泛。一旦側鍊的應用流行起來,有創意有想法的人就會研發出各種不同的側鍊協定來和比特币進行對接,很顯然這種方式會進一步鞏固比特币在區塊鍊中的地位。
2.4.1 側鍊背景
側鍊的提出主要是基于以下幾個原因。
(1)應對其他區塊鍊的應用威脅
現在市面上出現了幾種非常流行的區塊鍊,例如以太坊區塊鍊、比特股區塊鍊等,這些不斷産生的新的區塊鍊勢必會對比特币區塊鍊産生很大的威脅。以太坊區塊鍊更是提出了智能合約這個有望颠覆整個區塊鍊的應用,而到目前為止,基于比特币的應用開發項目還不多,已有的項目難度也很大。
(2)比特币核心開發組不歡迎附生鍊
比特币現有的應用中已經存在合約币和彩色币等附生鍊應用,但是基于一些原因比特币核心開發組并不是很歡迎這些應用。他們的考慮是這些應用會在一定程度上降低比特币區塊鍊的安全性。
(3)blockstream商業化的考慮
有了以太坊衆籌的前車之鑒,比特币核心開發組也希望能以某種商業化的方式來實作更高的回報,是以基于比特币的側鍊應用也激發了一群人開始嘗試商業化這些應用。
基于以上三個原因,提出側鍊協定,把比特币從主鍊上安全地轉移到了其他貨币區塊鍊,這樣既增加了區塊鍊的多樣性又可以應對二代币的競争,同時這些應用本身确實具有比較大的商業前景,一旦實作商業化,這一塊也将成為一塊很大的蛋糕。
2.4.2 技術原理
楔入式側鍊技術(pegged sidechain),它将實作比特币和其他數字資産在多個區塊鍊間的轉移,這就意味着使用者們在使用他們已有資産的情況下,就可以通路新的加密貨币系統。目前,側鍊技術主要由blockstream公司負責開發。
這裡先列出“側鍊”所需具備的屬性,具體如下。
在側鍊間移動的資産應當能夠被目前持有者移回,但除此之外的任何人都不行(包括前持有者)。
資産的移動應當是無交易對手風險的;也就是說,不誠實的一方無法阻止轉移的發生。
資産轉移應當是元操作(原子操作)的,即要麼完全完成,要麼根本不發生。不存在會導緻資産損失或允許欺詐産生的失敗模式。
側鍊應當設有防火牆:一個會使某條鍊發生資産鑄造(或偷盜)的缺陷(bug),不應導緻其他任何鍊出現資産的鑄造或偷盜。
區塊鍊重組時應當處理幹淨,即使是在資産轉移的期間也要如此;任何破壞應當隻發生在它所處的側鍊上。總的來說,理想情況下,側鍊應當完全獨立,其他鍊上所需的全部資料應由使用者提供。側鍊的驗證者應當隻有在側鍊本身的顯式共識規則有要求時,才去跟蹤其他鍊。
不應要求使用者去跟蹤他們未主動使用的側鍊。
早期“轉移”錢币的解決方案是用一個可公開識别的方式來銷毀比特币的,新的區塊鍊能夠檢測到,以允許鑄造新币[bac13b]。這解決了上面提到的部分問題,但由于這種方法隻允許單向轉移,是以還不足以滿足我們的目的。我們提出的方案是由資産轉移的交易本身提供所有者證明,進而實作資産轉移,以避免讓節點有跟蹤發送方鍊的需求。從上層實作的角度來說,當資産從一個區塊鍊向另一個鍊移動時,我們在第一個區塊鍊上建立交易鎖定資産,然後在第二個區塊鍊上建立一筆交易,該交易的輸入中包含一個鎖定已正确完成的密碼學證明。這些輸入可用某種資産類型來标記,比如創生出資産的區塊鍊的創世哈希(genesis hash)。
第一個區塊鍊稱之為父鍊,第二個則簡稱為側鍊。在某些模型中,兩條鍊可對稱地來處理,是以這一術語是相對而言的。如果打算将資産從(初始)父鍊轉移到一條側鍊,期間可能會再轉移到别的側鍊,最終還能轉回至父鍊,并保全初始資産。一般情況下,我們把父鍊看成是比特币系統,側鍊則是其他區塊鍊中的某一個。當然,側鍊的币(coin)也可以在側鍊間傳遞,并非隻能與比特币系統進行往來;不過,由于任何一個最初從比特币系統移動的币都可以移回去,是以不管變成什麼樣,它仍是個比特币。
此外,由于側鍊是從父鍊中轉移現有資産的而不是另鑄新資産,是以,側鍊不會引起未經授權的鑄币,維護資産的安全和稀缺性是依靠父鍊來實作的。
更進一步地說,參與者不必再擔心他們的持有物會被一個實驗性競争鍊鎖住,因為側鍊币能夠用等額的父鍊币來贖回。這就提供了一個退出機制,減少因無人維護軟體而造成的損失。
前面已經提到楔入式側鍊技術,它的雙向挂鈎(2wp)允許将比特币從比特币區塊鍊轉移到輔助區塊鍊,反之亦然。“轉移”實際上是一種錯覺:比特币其實并沒有轉移,隻是在比特币區塊鍊上被暫時鎖定了,而且同時在輔助區塊鍊上有相同數量的等價令牌被解鎖。當等量的令牌在輔助區塊鍊上被再次鎖定時,原先的比特币就會被解鎖。這實質上就是雙向挂鈎所要實作的功能。但這一功能也存在一個問題,即理論上隻有當輔助區塊鍊最終結算時才能實作這一功能。是以,任何雙向挂鈎系統都必須做出妥協,并且依靠于雙向挂鈎的相關參與者都是誠實的這一假設。最重要的假設是,主要的區塊鍊是無須審查的,而且大多數比特币礦工都是誠實的。另外可能需要的一個假設是,大多數監管鎖定比特币的第三方也是誠實的。如果這些假設不成立,則比特币及等效輔助區塊鍊的令牌就有可能被同時解鎖,那麼惡意的雙花就變得可行了。任何雙向挂鈎系統都必須選擇一種措施,使得被假設要誠實的各方都能在經濟和法律方面被鼓勵依章辦事。這包括分析這些關鍵方對區塊鍊網絡進行攻擊的成本及後果。雙向挂鈎實施的安全性取決于激勵機制,以便參與雙向挂鈎系統的關鍵方能夠真正執行雙向挂鈎所應實作的功能,如圖2-1所示。
雙向錨定分為四個階段,具體如下。
1)發送鎖定交易,把比特币鎖定在比特币主鍊上。
2)等待确認期。确認期的作用是等待更多區塊确認鎖定交易,可防止假冒鎖定和拒絕服務攻擊,等待時間是1~2天。
3)在側鍊上贖回比特币。上述确認期結束後,使用者在側鍊上建立一個交易花掉鎖定交易的輸出,并且提供一個spv工作量證明,輸出到自己側鍊上的位址。這個交易也稱為贖回交易,spv工作量證明是指贖回交易所在區塊的工作量證明。
4)等待一個競争期。競争期的作用是防止雙重支付,在此期間,新轉移過來的币不能在側鍊上花費。競争期的目的是防止重組時出現雙花,在重組期間會轉走先前鎖定的币。在這個延遲期内的任何時刻,如果有一個新的工作證明釋出出來,且對應的有着更多累計工作量的鍊中沒有包含那個生成鎖定輸出的區塊,那麼該轉換将被追溯為失效。我們稱此為重組證明。

圖2-1 雙向錨定示意圖
競争期結束後,這個贖回交易将被打包到區塊中,使用者就可以使用自己的比特币了,從側鍊轉移比特币的過程也是如此,當使用者想把币從側鍊上轉回父鍊時,與原先轉移所用的方法相同:在側鍊上将币發送至一個spv鎖定的輸出,并産生一個充分的spv證明來表明該輸出已經完成,然後使用這個證明來解鎖父鍊上先前被鎖定的那個等面值的輸出。
由于楔入式側鍊可能會從很多鍊中搬運資産,且無法對這些鍊的安全性做出假定,是以,不同資産不可互相兌換是非常重要的(除非是一個顯式聲明的交易)。否則,惡意使用者可以通過建立一條資産毫無價值的無價值鍊進行偷盜,即将這樣一種資産移到一個側鍊,再用它去兌換别的東西。為了應對這種情況,側鍊必須有效地将不同父鍊中的資産處置為不同的資産類型。
總之,我們提議讓父鍊和側鍊互相做資料的spv驗證。由于不能指望父鍊用戶端能看到每條側鍊,是以為了證明所有權,使用者必須從側鍊導入工作量的證明到父鍊。在對稱式雙向楔入中,反向的操作也是如此。
為了讓比特币系統成為父鍊,需要有一個能識别和驗證spv證明的腳本擴充。最起碼的要求是,這種證明需要做得足夠小,以便能放進比特币系統一個交易之中。不過,這隻是一個軟分叉,對于不使用新功能的交易不會産生影響。