楔入式側鏈”的一個主要目標是在比特幣系統(tǒng)模型之上最小化附加的信任伤柄。難點是幣在側鏈間的安全轉移:接收鏈必須能得知發(fā)送鏈的幣已被正確鎖定增拥。
設計原理
“無需信任”指的不依賴外部的可信方也可完成正確的操作的特性嚣伐,一般是能夠讓所有參與方自己驗證信息是否正確逃沿。例如鸵钝,密碼學簽名系統(tǒng)中,“無需信任”是一個隱式的必要條件(如果攻擊者能偽造簽名疲迂,那么這個簽名系統(tǒng)將被視為被完全破解)。雖然分布式系統(tǒng)中一般不需如此莫湘,但比特幣在系統(tǒng)的大部分中提供了“無信任”操作尤蒿。
楔入式側鏈”的一個主要目標是在比特幣系統(tǒng)模型之上最小化附加的信任。難點是幣在側鏈間的安全轉移:接收鏈必須能得知發(fā)送鏈的幣已被正確鎖定幅垮。在比特幣的領導下腰池,我們提議用DMMS來解決這一問題。盡管有可能利用一個簡單基于信任的方案忙芒,引入固定數(shù)量簽名者來驗證幣的鎖定示弓,但有很多重要理由讓我們避免這種單點故障的引入:
? ? ? ? 信任個人簽名者,并不僅僅意味期待他們做事誠實呵萨,他們還必須永遠不出漏洞奏属、永遠不會泄露關鍵的秘密、永遠不會被挾持潮峦、永遠不會停止參與網絡囱皿。由于數(shù)字簽名是長期存在的,對任何信任的要求也必須如此忱嘹。經驗告訴我們嘱腥,即使時間跨度只有幾個月,信任需求也是一種危險的期待德谅,更何況我們所期望的金融系統(tǒng)所能持續(xù)的時間長達幾個世代爹橱。
在比特幣系統(tǒng)消除了單點故障前萨螺,數(shù)字貨幣一直沒有什么吸引力窄做,社區(qū)強烈反對引入這種弱點。2007年以來的金融事件更加強了社區(qū)的不信任;對金融系統(tǒng)和其他公共機構的公共信任也同樣處于歷史的低點慰技。
雙向楔入
楔入式側鏈的技術基礎稱作雙向楔入椭盏。本節(jié)我們將解釋它是如何工作的,先給出一些定義吻商。
定義
幣(coin)掏颊,或資產,是一種可以用密碼學方法辨識控制者的數(shù)字財產艾帐。
區(qū)塊乌叶,是一個描述資產控制發(fā)生變化的交易的集合。
區(qū)塊鏈柒爸,是一個有序次的區(qū)塊的集合准浴,所有用戶必須(或最終)對該集合達成共識。這確定了資產控制的歷史捎稚,提供了一個計算上無法偽造的交易時序乐横。
重組求橄,或稱reorg,發(fā)生在客戶端本地葡公,當先前已接受的鏈被一個有更多工作量證明的競爭鏈取代時罐农,分叉上失敗一方的區(qū)塊要從共識歷史中移除。
側鏈催什,是驗證來自其他區(qū)塊鏈數(shù)據(jù)的區(qū)塊鏈涵亏。
雙向楔入蛆楞,指的是讓幣以一個固定或確定性的匯率在側鏈間轉出和轉入的機制溯乒。
楔入式側鏈,是一條資產可以從其他鏈導入并返還的側鏈;即豹爹,一條支持雙向楔入資產的側鏈裆悄。
簡單支付驗證證明(或稱SPV證明),是一種動態(tài)成員多方簽名(DMMS),發(fā)生于一條類比特幣系統(tǒng)工作量證明(proof-of-work)區(qū)塊鏈上冰垄。
本質上虹茶,SPV證明是由一個展示工作量證明的(a)區(qū)塊眉列表隅要,和一個(b)表明某一輸出發(fā)生在列表中的某一個區(qū)塊的密碼學證明所組成步清。
這使驗證者可以檢查是否有一定數(shù)量的工作已經認可了某個輸出的存在欢搜。當有其他證明(proof)展示了一條工作量更多的鏈炒瘟,且生成該輸出區(qū)塊未包含于其中時唧领,其他證明會使這一證明失效胯杭。
使用SPV證明來確定交易歷史做个,隱含著要信任最長的區(qū)塊鏈也是最長的正確區(qū)塊鏈藤肢,在比特幣系統(tǒng)中省骂,這是由一個被稱為SPV的客戶端實現(xiàn)的。由于誠實的哈希算力不會為一個無效鏈去工作,只有當超過50%的哈希算力合謀時脓魏,才會始終欺騙SPV客戶端(除非客戶端處于長期的女巫攻擊之下轧拄,使其無法看到實際的最長鏈)府树。
還可以這樣做奄侠,通過獲取每個區(qū)塊眉來指代區(qū)塊鏈上未花費輸出的集合烹卒,任何擁有SPV證明的人不需要“中繼”(relay)每個區(qū)塊也能確定鏈的狀態(tài)溺拱。(在比特幣系統(tǒng)中,完全驗證者第一次開始跟蹤區(qū)塊鏈時需要做這種中繼和敬。)
通過在比特幣系統(tǒng)的區(qū)塊結構中包含一些額外數(shù)據(jù)昼弟,我們可以生成比區(qū)塊眉完整列表更小的證明(proofs)舱痘,從而提高可擴展性塌碌。盡管如此,這樣的證明還是比普通的比特幣交易要大得多接剩。幸好對于大多數(shù)資產轉移來說懊缺,這并不是必要的:每條鏈的持幣人可以直接使用元互換(原子交換)操作進行匯兌遗座。
對稱式雙向楔入
我們可以利用這些想法將一個側鏈SPV楔入至另一個側鏈。這包含以下工作:為了將父鏈幣轉移為側鏈幣拣度,父鏈幣被發(fā)送到父鏈上的一個特殊輸出中碎绎,該輸出只能由側鏈上擁有的一個SPV證明來解鎖。為了在兩條鏈上進行同步抗果,我們需要定義兩個等待周期:
1筋帖、側鏈間轉移的確認期,是指幣在轉移至側鏈之前冤馏,在父鏈上必須被鎖定的期間日麸。此確認期目的是生成足夠多的工作量,讓下一個等待期內的拒絕服務攻擊變得更困難逮光。典型的確認期的量級可以是一或兩天代箭。
當父鏈上生成了特殊輸出后,用戶等待確認期結束涕刚,然后在側鏈上生成一個引用該輸出的交易嗡综,提供出一個它已被創(chuàng)建并在父鏈上被足夠工作量覆蓋的SPV證明,
確認期是一個依側鏈而定的安全參數(shù)杜漠,要在跨鏈交易速度和安全性間做權衡极景。
2、接下來驾茴,用戶必須等待一個競賽期盼樟。這個期間,新轉移過來的幣不能在側鏈上花費锈至。競賽期的目的是防止重組時出現(xiàn)雙花晨缴,在重組期間轉走先前鎖定的幣。在這個延遲期內的任何時刻峡捡,如果有一個新的工作證明發(fā)布出來击碗,對應的有著更多累計工作量的鏈中沒有包含那個生成鎖定輸出的區(qū)塊,那么該轉換將被追溯為失效棋返。我們稱此為重組證明延都。
只要有可能雷猪,所有側鏈上的用戶都會有動力來制發(fā)重組證明睛竣,因為對不良證明的承認會稀釋所有幣的價值。
典型的競賽期也是一或兩天的量級求摇。為了避免這些延遲射沟,用戶很可能用元互換(原子交換)(在附錄C中有描述)進行大多數(shù)交易殊者,只要有流動性的市場可用。
當幣在父鏈上被鎖定時验夯,該幣可以在側鏈內自由轉移猖吴,不需要與父鏈進一步交互。不過挥转,它仍保留著父鏈幣的身份海蔽,僅能轉回到它所來的那一條鏈上。
當用戶想把幣從側鏈上轉回父鏈時绑谣,與原先轉移所用的方法相同:在側鏈上將幣發(fā)送至一個SPV鎖定的輸出党窜,產生一個充分的SPV證明來表明該輸出已完成,使用這個證明來解鎖父鏈上先前被鎖定的那個等面值的輸出借宵。
由于楔入式側鏈可能會從很多鏈中搬運資產幌衣,且無法對這些鏈的安全性做出假定,因此壤玫,不同資產不可相互兌換是非常重要的(除非是一個顯示聲明的交易)豁护。否則,惡意用戶可以通過創(chuàng)建一條資產毫無價值的無價值鏈進行偷盜欲间,將這樣一種資產移到一個側鏈楚里,再把它和別的東西去兌換。為了應對這種情況猎贴,側鏈必須有效地將不同父鏈中的資產處置為不同的資產類型腻豌。
總之,我們提議讓父鏈和側鏈相互做數(shù)據(jù)的SPV驗證嘱能。由于不能指望父鏈客戶端能看到每條側鏈吝梅,為了證明所有權,用戶必須從側鏈導入工作量的證明到父鏈惹骂。在對稱式雙向楔入中苏携,反向的操作也是如此。
為了讓比特幣系統(tǒng)成為父鏈对粪,需要有一個能識別和驗證SPV證明的腳本擴展右冻。最起碼的要求是,這種證明需要做得足夠小著拭,以便能放進比特幣系統(tǒng)一個交易之中纱扭。不過,這只是一個軟分叉儡遮,對于不使用新功能的交易不會產生影響乳蛾。
非對稱式雙向楔入
上節(jié)以“對稱式雙向楔入”作為標題,是因為從父鏈向側鏈的轉移機制與反方向的機制是相同:都擁有SPV安全性。
另一種方案是非對稱式雙向楔入:這種方式下肃叶,側鏈上的用戶對父鏈能完全驗證蹂随,由于所有的驗證者都知道父鏈的狀態(tài),從父鏈向側鏈的轉移不需要SPV證明因惭。另一方面岳锁,由于父鏈并不知道有側鏈,所以轉回到父鏈時需要有SPV證明蹦魔。
這對安全性有所促進激率,現(xiàn)在,即使一個51%攻擊者也沒法錯誤地將幣從父鏈轉移到側鏈勿决。不過柱搜,相應的代價是迫使側鏈的驗證者去跟蹤父鏈,同時也意味著發(fā)生在父鏈上的重組也可能導致側鏈上的重組剥险。在這里聪蘸,我們不詳細探討這種可能性,因為圍繞重組的議題會導致復雜度顯著擴大表制。