為了鞏固對(duì)跨鏈的認(rèn)識(shí),為此對(duì)跨鏈的知識(shí)點(diǎn)概念等進(jìn)行查漏補(bǔ)缺,利用了周末的時(shí)間重新閱讀了一份關(guān)于跨鏈的報(bào)告,方便更系統(tǒng)地熟悉跨鏈的應(yīng)用場景與方案。
跨鏈的定義:
跨鏈,狹義上來說是兩個(gè)相對(duì)獨(dú)立[1]的區(qū)塊鏈賬本間進(jìn)行資產(chǎn)互操作(Interoperability)的過程;廣義上來說是兩個(gè)獨(dú)立的賬本[2]間進(jìn)行資產(chǎn)、數(shù)據(jù)互操作的過程。
[1]指兩個(gè)區(qū)塊鏈賬本間相互獨(dú)立,沒有在某方統(tǒng)一進(jìn)行清/結(jié)算的情況(交易都在母鏈賬本進(jìn)行清算的母子鏈結(jié)構(gòu)不存在本文所述的跨鏈操作)
[2] 此處所指的賬本不僅指的是區(qū)塊鏈賬本,也指中心化賬本或者其他形式的分布式賬本(如DAG賬本)。
案例應(yīng)用:
- 鏈下通道:閃電網(wǎng)絡(luò)、雷電網(wǎng)絡(luò)
- 跨賬本多跳協(xié)議:Ripple
- 側(cè)鏈:單向/雙向錨定側(cè)鏈:Liquid、Elastos
- 跨鏈平臺(tái):Wanchain
- 跨鏈平臺(tái):Cosmos、Polkadot
跨鏈的實(shí)現(xiàn)形態(tài)主要表現(xiàn)為資產(chǎn)互換和資產(chǎn)轉(zhuǎn)移
跨鏈進(jìn)化史
2012年Ripple才發(fā)布了跨賬本互操作協(xié)議《Interledger Protocol (ILP)》,通過第三方公證人的方式實(shí)現(xiàn)了跨賬本轉(zhuǎn)賬,在區(qū)塊鏈領(lǐng)域首次提出了跨賬本互操作方案。
2014年,由比特幣核心開發(fā)人員組成立的BlockStream團(tuán)隊(duì)首次提出錨定式側(cè)鏈(Pegged Sidechains)跨鏈交互方案,引入一條與主鏈雙向錨定(Two-way peg)的側(cè)鏈,可實(shí)現(xiàn)跨鏈資產(chǎn)轉(zhuǎn)移。
2015年,比特幣閃電網(wǎng)絡(luò)(Lightning Network)采用哈希時(shí)間鎖(Hashed Timelock)機(jī)制,實(shí)現(xiàn)了比特幣鏈下快速交易通道。
2016年,BTCRelay方案發(fā)表,基于中繼跨鏈方案實(shí)現(xiàn)了比特幣到以太坊的單向跨鏈連通。同年Vitalik Buterin發(fā)表的《Chain Interoperability》對(duì)區(qū)塊鏈互操作問題做了全面和深度的分析。
2017年,Polkadot和Cosmos第一次提出了建設(shè)跨鏈網(wǎng)絡(luò)基礎(chǔ)平臺(tái)的方案,目前這兩個(gè)項(xiàng)目還在開發(fā)過程中。
跨鏈實(shí)現(xiàn)形態(tài):
鏈間資產(chǎn)互換:通常指兩條鏈上的不同用戶之間進(jìn)行資產(chǎn)互換,但每條鏈上的資產(chǎn)總量并無增減,只是資產(chǎn)所有權(quán)發(fā)生了變化,且這個(gè)所有權(quán)改變的過程需在兩條鏈同步發(fā)生。
鏈間資產(chǎn)轉(zhuǎn)移(單向/雙向):資產(chǎn)轉(zhuǎn)移和資產(chǎn)互換雖看起來相似,卻有本質(zhì)的不同。上文所述資產(chǎn)互換中各鏈的資產(chǎn)總數(shù)是不變的,但資產(chǎn)轉(zhuǎn)移,是資產(chǎn)價(jià)值的轉(zhuǎn)移,各鏈中可用的資產(chǎn)總量將相應(yīng)增加或者減少。
有些項(xiàng)目提出了跨鏈智能合約的概念,多指一條鏈上的智能合約能確認(rèn)原鏈跨鏈交易的場景,這從技術(shù)實(shí)現(xiàn)上來說和實(shí)現(xiàn)跨鏈資產(chǎn)轉(zhuǎn)移是相似的,都需要對(duì)原鏈交易進(jìn)行確認(rèn)和驗(yàn)證。
1)如何保障跨鏈交易的原子性。即跨鏈交易要么發(fā)生,要么不發(fā)生,否則兩條鏈的不一致和不同步狀態(tài)將成為跨鏈交易最大的系統(tǒng)漏洞,兩個(gè)系統(tǒng)的安全性都將受到威脅。
2)如何完成對(duì)另一條鏈的交易確認(rèn)。對(duì)交易的確認(rèn),包含了兩個(gè)層次的問題,一是確認(rèn)交易已經(jīng)發(fā)生并且上鏈,寫入了區(qū)塊賬本;二是該交易已經(jīng)獲得了系統(tǒng)足夠多區(qū)塊的確認(rèn),這樣由于系統(tǒng)發(fā)生重構(gòu)而導(dǎo)致交易無效的概率將非常低。區(qū)塊鏈系統(tǒng)本身是較為封閉的系統(tǒng),缺乏主動(dòng)獲取外部信息的機(jī)制,因此要確認(rèn)另外一條鏈的交易狀態(tài)并非一件容易的事,可以說是跨鏈交易的核心難點(diǎn)之一。
3)如何保障兩條鏈的資產(chǎn)總量不變。在資產(chǎn)互換的場景下,兩條鏈的資產(chǎn)并未發(fā)生實(shí)質(zhì)性的交換,因此該類情況不會(huì)改變各鏈的資產(chǎn)總量。但是在資產(chǎn)轉(zhuǎn)移的場景下,每條鏈的可用資產(chǎn)數(shù)量是變化的,只有保障跨鏈交易精確記賬,且兩條鏈的賬本記賬完全同步,才可實(shí)現(xiàn),換種說法就是兩條鏈的記賬必須是原子性的,要么都同時(shí)記,要么都不記。除此之外,問題的關(guān)鍵是當(dāng)某條鏈發(fā)生重構(gòu)時(shí),是否依然能保持兩條鏈的資產(chǎn)總量不變。
4)如何保障兩條鏈的獨(dú)立安全性。當(dāng)兩個(gè)系統(tǒng)發(fā)生交互時(shí),難免會(huì)對(duì)彼此系統(tǒng)產(chǎn)生影響,如何在跨鏈交易的過程中保障自己系統(tǒng)和對(duì)方系統(tǒng)的安全性是個(gè)值得考慮的問題。若是安全性問題無法隔離,那一條鏈?zhǔn)艿焦簦瑢⒂绊懻麄€(gè)跨鏈網(wǎng)絡(luò)。
5)如何實(shí)現(xiàn)多條鏈之間的跨鏈互聯(lián)。參照計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展歷程,獨(dú)立的區(qū)塊鏈網(wǎng)絡(luò)終究要走上互聯(lián)互通的未來,那如何將這些已有的和未來將要開發(fā)的區(qū)塊鏈網(wǎng)絡(luò)都聯(lián)系起來成為統(tǒng)一的整體將是未來跨鏈網(wǎng)絡(luò)最重要的問題之一。
跨鏈具體的關(guān)鍵點(diǎn)與實(shí)現(xiàn)方式可以總結(jié)為:
- 如何保障跨鏈交易的原子性:介紹了原子互換和哈希時(shí)間鎖協(xié)議原理。
- 如何完成對(duì)另一條鏈的交易確認(rèn):介紹了公證人、中繼以及榫卯式三大類模式異同。
- 如何保障兩條鏈的資產(chǎn)總量不變:從正常和異常兩種情況分別闡述了應(yīng)對(duì)方案。
- 如何保障兩條鏈的獨(dú)立安全性:主要從隔離機(jī)制和安全檢測機(jī)制分析了應(yīng)對(duì)思路。
- 如何實(shí)現(xiàn)多條鏈之間的跨鏈互聯(lián):介紹了主動(dòng)兼容和被動(dòng)兼容兩種跨鏈網(wǎng)絡(luò)建設(shè)方案。
保障跨鏈交易的原子性
需要兩個(gè)轉(zhuǎn)賬交易,兩個(gè)保證對(duì)方轉(zhuǎn)賬的回撤交易。
- Alice在鏈A上有1個(gè)BTC,Bob在鏈B上有20個(gè)ETH,Alice想用1個(gè)BTC換Bob的20個(gè)ETH。Alice和Bob同時(shí)在鏈A和鏈B上都有錢包地址。
- 首先Alice隨機(jī)生成一個(gè)密鑰K,該密鑰只有Alice知道,然后在鏈A上發(fā)起一筆給Bob 1個(gè)BTC的轉(zhuǎn)賬交易(交易①),該交易只有在獲得Bob的簽名以及提供密鑰K之后才能完成。
- 在交易①廣播之前,Alice會(huì)先在鏈A上廣播一個(gè)回撤交易(交易②),若交易①在48小時(shí)內(nèi)未獲得正確的密鑰和簽名,那么交易①支付的金額將退回給Alice。交易②廣播出去后需獲得Alice和Bob的共同簽名,該交易才會(huì)生效。同時(shí),Alice只有在交易②成功生效的情況下才會(huì)向網(wǎng)絡(luò)廣播交易①。
- Bob此時(shí)看到Alice發(fā)來的交易②,若Bob愿意進(jìn)行這次交易,則Bob會(huì)對(duì)交易②簽名,當(dāng)然Alice也會(huì)完成簽名,這樣回撤交易就能生效,Alice此時(shí)將交易①向全網(wǎng)廣播。
- Bob此時(shí)無法得知密鑰K,只能通過向Alice支付20個(gè)ETH后才能獲得密鑰K,因此,Bob在鏈B上發(fā)起交易③,向Alice支付20個(gè)ETH,只有當(dāng)Alice輸入密鑰K成功解密,并附上Alice簽名才可獲得這20個(gè)ETH。為防止Alice抵賴,保障自己能成功拿到密鑰K,Bob也在廣播交易③之前先發(fā)布一個(gè)需要Alice和Bob共同簽名的回撤交易④,當(dāng)Alice在24小時(shí)內(nèi)未提供正確的密鑰K并附上簽名,就激活回撤交易④,20ETH退回給Bob。
- Alice看到Bob發(fā)起的回撤交易④,Alice和Bob為了繼續(xù)交易將會(huì)給該交易附上自己的簽名,回撤交易④生效。此時(shí)Bob也會(huì)將交易③廣播給全網(wǎng)。
- Alice為了獲得20ETH,將會(huì)對(duì)交易③附上自己的簽名,并且輸入正確的密鑰K,此時(shí)交易③成功,Alice獲得20ETH,Bob獲得密鑰K。
- Bob拿到密鑰K后,回到鏈A,輸入密鑰和自己的簽名,最終拿到Alice的1個(gè)BTC。
原子互換協(xié)議并未將鏈A的資產(chǎn)轉(zhuǎn)移到鏈B,而只是同時(shí)交換了鏈A和鏈B資產(chǎn)的所有權(quán),鏈A的資產(chǎn)總量和鏈B的資產(chǎn)總量并未改變,因此原子互換協(xié)議只能實(shí)現(xiàn)鏈間的資產(chǎn)互換,無法實(shí)現(xiàn)資產(chǎn)轉(zhuǎn)移。
HTLC哈希時(shí)間鎖協(xié)議:
哈希時(shí)間鎖協(xié)議,即HTLC(Hashed Time-Lock Contract),是原子互換協(xié)議的具體實(shí)現(xiàn),通過哈希鎖和時(shí)間鎖機(jī)制保障了交易的原子性。若只使用哈希時(shí)間鎖,只能實(shí)現(xiàn)跨鏈的資產(chǎn)互換,而非跨鏈資產(chǎn)轉(zhuǎn)移
哈希鎖
在2.1.1小節(jié)介紹的例子中,Bob要如何驗(yàn)證Alice提供的密鑰K是正確呢?這里最通常的做法是用哈希函數(shù)來實(shí)現(xiàn)。Alice在最開始的時(shí)候產(chǎn)生一個(gè)隨機(jī)數(shù)K(即密鑰K),用一個(gè)哈希函數(shù)對(duì)該隨機(jī)數(shù)做計(jì)算得到M,即H(K)=M,Alice會(huì)將函數(shù)H和M告訴Bob,我們知道哈希函數(shù)的計(jì)算是不可逆的,幾乎無法通過H和M反向計(jì)算得到K。所以Bob只能讓Alice主動(dòng)披露一個(gè)密鑰K’,并用H和M來驗(yàn)證Alice提供的K’是否能通過哈希函數(shù)H計(jì)算得到M,若驗(yàn)證通過,則證明Alice提供的K’就是真實(shí)的密鑰K。這種哈希函數(shù)鎖定的方式就是我們所說的哈希鎖,只有密鑰K才能打開的鎖。在比特幣系統(tǒng)中通常用OP_HASH256操作符來進(jìn)行哈希計(jì)算操作。
時(shí)間鎖
在2.2小節(jié)介紹的原子互換協(xié)議中,需要交易在某個(gè)時(shí)間范圍內(nèi)不生效,如回撤交易需要在超時(shí)以后再被觸發(fā)。時(shí)間鎖在比特幣系統(tǒng)中有兩種實(shí)現(xiàn)方式[3]。
- CheckLockTimeVerify(CLTV)
比特幣2015年BIP65的軟分叉版本中提出了CLTV操作碼,允許交易的輸出在一段時(shí)間內(nèi)被阻塞(交易的其它部分不受影響)。當(dāng)CLTV操作碼被調(diào)用的時(shí)候,會(huì)檢測交易中的nLockTime參數(shù),只有當(dāng)nLockTime的時(shí)間大于或者等于CLTV參數(shù)指定的時(shí)間時(shí),交易才會(huì)被完整執(zhí)行,否則交易會(huì)被阻塞在memory pool中。
nLockTime是比特幣交易最原始的參數(shù)類型,表示了該交易可最早被寫到區(qū)塊上的時(shí)間,或者是最小可寫入的區(qū)塊高度。nLockTime設(shè)置為0,表明該交易寫入任何一個(gè)區(qū)塊都將有效。
- CheckSequenceVerify(CSV)
比特幣2016年BIP68/112/113軟分叉時(shí)提出了CSV操作碼,相對(duì)于CLTV提出的絕對(duì)鎖定時(shí)間來說,CSV提出的是相對(duì)鎖定時(shí)間。當(dāng)執(zhí)行CSV操作碼時(shí),系統(tǒng)會(huì)檢查NSequence參數(shù),若其表示的相對(duì)時(shí)間大于或者等于CSV參數(shù)的時(shí)間,則交易開始執(zhí)行;否則交易會(huì)被阻塞在memory pool中。
Relative Locktime是2016年BIP68/112/113軟分叉提出來的,參數(shù)由nSequence表示,是交易輸入域參數(shù)的一種,表明了該交易最早能被寫入?yún)^(qū)塊的時(shí)間,該時(shí)間是相對(duì)于上次UTXO寫入?yún)^(qū)塊的時(shí)間而言的。
HTLA,哈希時(shí)間鎖協(xié)定
哈希時(shí)間鎖協(xié)定[4],即HTLA(Hashed Time-Lock Agreements)是Interledger[10]提出的HTLC泛化協(xié)定,不管系統(tǒng)是否支持HTLC協(xié)議,不管其是分布式賬本還是中心化賬本,系統(tǒng)和系統(tǒng)之間都能使用HTLA實(shí)現(xiàn)跨鏈交換,且支持多個(gè)系統(tǒng)之間的多跳跨鏈互換。Alice和Bob可以通過HTLA在區(qū)塊鏈A、B、C之間進(jìn)行跨鏈交換,且每一種區(qū)塊鏈都支持不同的跨鏈協(xié)議,連接器在這其中起到了連接、隔離的作用,將支持不同跨鏈協(xié)議的區(qū)塊鏈連接到一起,并且又起到了隔離的作用,使得區(qū)塊鏈之間不會(huì)相互影響。
有條件的支付通道(Conditional Payment Channels)
對(duì)賬本的功能性需求:支持支付通道的HTLC更新
對(duì)賬本的非功能性需求:支持高速交易
交易風(fēng)險(xiǎn):無
使用案例:閃電網(wǎng)絡(luò)[5]
協(xié)議簡介:支持有條件支付通道協(xié)議的系統(tǒng),交易參與者需要在賬本上預(yù)付一筆資金到一個(gè)雙方共享的臨時(shí)賬戶。當(dāng)交易開始時(shí),發(fā)送者會(huì)發(fā)送一個(gè)帶有哈希鎖和時(shí)間鎖以及附帶簽名的更新到接收者。若接收者能在超時(shí)前反饋哈希鎖的原像,則其可從臨時(shí)賬戶中贖回資金,并且發(fā)送者接收者同時(shí)簽名確認(rèn)共享賬戶的余額變動(dòng)。當(dāng)發(fā)生爭議時(shí),賬本將依據(jù)賬本信息進(jìn)行判斷和仲裁。由于交易的傳輸和處理時(shí)間會(huì)被計(jì)算在超時(shí)的范圍內(nèi),所以該種協(xié)議更適合支持高速交易的賬本系統(tǒng)。
On-Ledger持有/托管
對(duì)賬本的功能性需求:支持HTLC交易
對(duì)賬本的非功能性需求:支持高速、低費(fèi)用和高吞吐量
交易風(fēng)險(xiǎn):無
使用案例:以太坊第三方托管合約、Ripple第三方托管
協(xié)議簡介:當(dāng)賬本支持HTLC協(xié)議時(shí),并且該賬本交易速度快、費(fèi)率低、吞吐量高,那么參與者之間可以直接通過HTLC協(xié)議發(fā)起跨鏈交易。交易發(fā)起者將要傳輸?shù)馁Y金先放到賬本提供的特定持有賬戶中,并且附帶哈希鎖和時(shí)間鎖,只有當(dāng)接收者在超時(shí)前能提供正確的哈希原像,賬本賬戶才將資金發(fā)送給接收者,否則賬本將會(huì)把資金退回給發(fā)送者。這種方式可由賬本負(fù)責(zé)全權(quán)控制交易狀態(tài),交易雙方?jīng)]有額外的風(fēng)險(xiǎn)。
簡單支付通道(Simple Payment Channels)
對(duì)賬本的功能性需求:支持無條件的、單向支付通道
對(duì)賬本的非功能性需求:無
交易風(fēng)險(xiǎn):有交易對(duì)手風(fēng)險(xiǎn)
使用案例:比特幣CLTV通道[8]、Ripple PayChan[9]
協(xié)議簡介:簡單支付通道是建立的off-chain交易通道,無論賬本交易速率如何,鏈下的通道可支持大規(guī)模快速交易。在建立單向通道時(shí),發(fā)送者需要將資金存入鏈上和接收者共享的臨時(shí)賬戶中,只有當(dāng)雙方對(duì)交易金額的數(shù)量和轉(zhuǎn)移方向都同意且同時(shí)簽名時(shí),該賬戶的資金才可被取出。發(fā)送者傳給接收者的是一個(gè)帶哈希鎖和時(shí)間鎖的消息,當(dāng)接收者在超時(shí)前提供了正確的哈希原像,發(fā)送者再發(fā)起一個(gè)新的帶有簽名的申明給接收者,使得接收者能接收到全部的交易金額。
保障對(duì)另一條鏈的交易確認(rèn)
兩條鏈之間發(fā)起跨鏈交易的時(shí)候要如何才能確認(rèn)發(fā)送鏈的交易真的發(fā)生并且被它確認(rèn)了呢?
兩條鏈之間總會(huì)出現(xiàn)一個(gè)“中間人”的角色,承擔(dān)了為兩條鏈進(jìn)行信息交互的角色,只不過在具體實(shí)現(xiàn)時(shí)這個(gè)“中間人”的角色有很多種演化的可能性。“中間人”可能是一個(gè)也可能是一群,可能是中心化機(jī)構(gòu)也可能是分布式群體,兩條鏈的中間人可能是同一個(gè)/組節(jié)點(diǎn),也可能不同,甚至這個(gè)“中間人”可能是一條獨(dú)立的鏈或者又只是一個(gè)功能模塊而已?!爸虚g人”通常會(huì)同時(shí)充當(dāng)兩個(gè)區(qū)塊鏈的節(jié)點(diǎn),這樣只需在同一節(jié)點(diǎn)上再部署一個(gè)應(yīng)用軟件獲取對(duì)方系統(tǒng)數(shù)據(jù)即可。
在交易確認(rèn)這個(gè)問題上其實(shí)隱含了三層意思:
- 第一層含義是跨鏈數(shù)據(jù)傳遞,即需要獲取/收集發(fā)送鏈的數(shù)據(jù),為交易確認(rèn)做好準(zhǔn)備;
- 第二層含義是發(fā)送鏈對(duì)交易的確認(rèn),即發(fā)送鏈的交易并不是只要寫入?yún)^(qū)塊就能最終確認(rèn)的
- 第三層含義是目標(biāo)鏈對(duì)發(fā)送鏈已經(jīng)確認(rèn)過的交易再次核實(shí),即需要依據(jù)收集到的數(shù)據(jù)來做確認(rèn),到底發(fā)送鏈聲稱的跨鏈交易是否發(fā)生,以及交易是否得到最終確認(rèn)。
公證人、中繼、榫卯
“中間人”基本上完成了前者數(shù)據(jù)收集的工作,那交易如何確認(rèn),在哪確認(rèn),以及由誰來確認(rèn)成為了問題的關(guān)鍵。根據(jù)不同的方案,我們可以將該過程主要概括為三種實(shí)現(xiàn)方式,即公證人模式、中繼模式和榫卯模式。

公證人模式是最為簡潔的設(shè)計(jì),即“中間人”不僅進(jìn)行數(shù)據(jù)收集,還進(jìn)行交易確認(rèn)和驗(yàn)證。此時(shí)的“中間人”將成為可信第三方,可以是一個(gè)雙方可信的中心化機(jī)構(gòu),也可以是一群節(jié)點(diǎn)。其驗(yàn)證交易是否正確的過程又將有多種演化,主要分為三種:單簽名公證人機(jī)制、多簽名公證人機(jī)制以及分布式簽名公證人機(jī)制

中繼模式中,“中間人”僅僅充當(dāng)數(shù)據(jù)收集者的角色,并將收集的數(shù)據(jù)轉(zhuǎn)發(fā)給目標(biāo)鏈,由目標(biāo)鏈依據(jù)收集的數(shù)據(jù)去完成交易確認(rèn)的工作。中繼模式是個(gè)相對(duì)去中心化和松耦合的方式,兩個(gè)鏈之間的設(shè)計(jì)和結(jié)構(gòu)是較為獨(dú)立的,因此也具備了更高的可擴(kuò)展性。“中間人”更多地充當(dāng)了中繼橋梁的角色。

榫卯[3]模式表述的是一種通過數(shù)據(jù)強(qiáng)耦合關(guān)系來實(shí)現(xiàn)跨鏈互操作的模式。鏈A和鏈B通過“中間人”收集到對(duì)方的數(shù)據(jù),并且將對(duì)方的數(shù)據(jù)納入到自己的區(qū)塊鏈體系中來。這種納入不一定是記錄到自己的區(qū)塊中,有可能是記錄到自己系統(tǒng)中的存儲(chǔ)空間。若鏈A是已經(jīng)存在的區(qū)塊鏈,那鏈B要么只能單向嵌入鏈A,要么鏈A就要進(jìn)行相應(yīng)的升級(jí)改造。這種強(qiáng)耦合的結(jié)構(gòu)通常用于側(cè)鏈的設(shè)計(jì)中。
榫卯(sǔn mǎo)是古代中國建筑、家具及其它器械的主要結(jié)構(gòu)方式,是在兩個(gè)構(gòu)件上采用凹凸部位相結(jié)合的一種連接方式。凸出部分叫榫(或叫榫頭);凹進(jìn)部分叫卯(或叫榫眼、榫槽)。其特點(diǎn)是在物件上不使用釘子,利用卯榫加固物件。本文用來特指一種采用強(qiáng)耦合數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)跨鏈的技術(shù)模式。
理解三種方式的關(guān)鍵點(diǎn)就是:要充分理解其如何實(shí)現(xiàn)對(duì)原鏈交易的確認(rèn),即數(shù)據(jù)如何傳遞,原鏈交易如何確認(rèn),接收鏈對(duì)原鏈交易如何驗(yàn)證即可。
公證人
中心化公證人模式為:中心化公證人機(jī)制也叫單簽名公證人機(jī)制,通常由單一指定的獨(dú)立節(jié)點(diǎn)或者機(jī)構(gòu)充當(dāng),這是最簡單的模式,通常,這種模式被用于某類單一或特定的交易。與其Alice和Bob兩個(gè)陌生人直接交易,不如兩者都和有信用背書的第三方機(jī)構(gòu)間接交易更可靠(如支付寶模式)
多重簽名的公證人機(jī)制是由多位公證人在各自賬本上共同簽名達(dá)成共識(shí)后才能完成跨鏈交易。公證人的選取可以有多種方式,比如1)隨機(jī)抽取公證人;2)對(duì)交易雙方可信公證人節(jié)點(diǎn)列表求交集;3)直接采用可信聯(lián)盟中的可信節(jié)點(diǎn)等。
分布式簽名的公證人機(jī)制和多重簽名的公證人機(jī)制最大的區(qū)別在于簽名的方式不同,采用了多方計(jì)算MPC(Multi-Party Computation)的思想,分布式簽名相較于多重簽名,安全性更高,但實(shí)現(xiàn)也更復(fù)雜。
中繼Relay
中繼(Relay)是更靈活、易于擴(kuò)展的跨鏈技術(shù),其不依賴可信第三方幫助其進(jìn)行交易驗(yàn)證,而是在拿到發(fā)送鏈數(shù)據(jù)后由接收鏈自行驗(yàn)證,自行驗(yàn)證的方式依據(jù)系統(tǒng)結(jié)構(gòu)不同而不同,例如BTC-Relay依賴于SPV證明(如下文SPV小節(jié)所示),Cosmos還依靠驗(yàn)證節(jié)點(diǎn)簽名數(shù)量等。
Vitalik在其互操作性論文[2]中提到Relay,指出鏈A和鏈B可通過對(duì)方的區(qū)塊數(shù)據(jù)來進(jìn)行信息同步和跨鏈函數(shù)調(diào)用,目前信息同步是可以做到的,但是跨鏈函數(shù)調(diào)用還沒有成熟的技術(shù)方案。但兩個(gè)鏈不能同時(shí)驗(yàn)證對(duì)方區(qū)塊的有效性,否則將陷入互為嵌套的死循環(huán)。如鏈A擁有鏈B的區(qū)塊數(shù)據(jù),則鏈A需在鏈B交易確認(rèn)的情況下才能進(jìn)行確認(rèn),而鏈B因?yàn)橥瑫r(shí)擁有鏈A的區(qū)塊數(shù)據(jù),鏈B又需等待鏈A的交易確認(rèn),……,這樣,交易確認(rèn)就陷入了死循環(huán)。
BTC-Relay
2016年Consensys團(tuán)隊(duì)推出的BTC-Relay是最經(jīng)典的中繼(Relay)跨鏈方案,實(shí)現(xiàn)了以太坊和比特幣之間的跨鏈交易,使得以太坊的DApp應(yīng)用可以支持BTC支付。
BTC-Relay本身為以太坊的一個(gè)智能合約,該合約的功能就是對(duì)比特幣上的某些交易進(jìn)行驗(yàn)證,并且提供驗(yàn)證信息給以太坊上的其它DApp用戶。Relayer是從比特幣獲取區(qū)塊頭數(shù)據(jù)的一群用戶,并擁有以太坊網(wǎng)絡(luò)的賬戶地址,最快向BTC-Relay合約提交區(qū)塊頭數(shù)據(jù)的Relayer可以得到以太坊的交易費(fèi)獎(jiǎng)勵(lì)。BTC-Relay智能合約獲得區(qū)塊頭數(shù)據(jù)以后就可以依據(jù)SPV證明的原理對(duì)某交易進(jìn)行驗(yàn)證,當(dāng)比特幣網(wǎng)絡(luò)中的某交易確實(shí)發(fā)生,則可觸發(fā)以太坊網(wǎng)絡(luò)的特定交易或者智能合約執(zhí)行。
SPV證明
SPV,Simplified Payment Verification,即簡單支付證明,其中,“支付”是關(guān)鍵字,即該種證明只是對(duì)是否發(fā)生支付行為做驗(yàn)證,而不是對(duì)“交易”做驗(yàn)證。
比特幣一個(gè)區(qū)塊的大小為1M,而區(qū)塊頭只占了80個(gè)字節(jié)(Byte),交易列表則占用了區(qū)塊中的絕大部分空間。SPV的基本原理就是在只有區(qū)塊頭數(shù)據(jù)的情況下驗(yàn)證某交易是否發(fā)生,這樣既方便快速也節(jié)省了大量的存儲(chǔ)空間。
通過區(qū)塊鏈頭數(shù)據(jù)來驗(yàn)證某交易是否已發(fā)生,可以按照如下的步驟進(jìn)行:
- 下載區(qū)塊中最長鏈的區(qū)塊頭數(shù)據(jù)
- 計(jì)算該交易的哈希值,得到Tx_hash;
- 通過Tx_hash索引定位到包含該交易的區(qū)塊
- 為驗(yàn)證該交易是否存在于該區(qū)塊中,需重新計(jì)算與該交易相關(guān)的哈希值,直到根部,并將計(jì)算得到的哈希值與區(qū)塊頭中的Merkle根哈希進(jìn)行比較;若一致,則表明該交易確實(shí)發(fā)生并存在于該區(qū)塊中;若不一致,則說明該交易并未被打包到最長的鏈中,即未被驗(yàn)證確認(rèn)。
榫卯式
榫卯式是一種強(qiáng)耦合結(jié)構(gòu)的跨鏈模式,通過某種方式直接將原鏈的部分?jǐn)?shù)據(jù)嵌入到自己的區(qū)塊或者存儲(chǔ)空間中。在進(jìn)行跨鏈交易時(shí),直接通過本系統(tǒng)存儲(chǔ)的原鏈數(shù)據(jù)便可完成交易驗(yàn)證。這種方式一般在系統(tǒng)設(shè)計(jì)之初就進(jìn)行了雙向考慮,通常用于主鏈+側(cè)鏈的設(shè)計(jì)中,多采用協(xié)同挖礦模式。若主鏈已經(jīng)存在,則側(cè)鏈通常是單向錨定主鏈,即側(cè)鏈錨定了主鏈的數(shù)據(jù),但主鏈卻無法識(shí)別側(cè)鏈狀態(tài)。
榫卯式更直接,耦合度也更高,雙方緊密地綁定在一起,一條鏈的狀態(tài)將直接地反應(yīng)到另外一條鏈的數(shù)據(jù)中。當(dāng)一條鏈被攻擊時(shí),另外一條鏈也可能會(huì)受到影響。這種模式更適用于同一個(gè)系統(tǒng)的主鏈+側(cè)鏈的設(shè)計(jì),這讓雙方能成為有機(jī)的整體,又不失賬本的相對(duì)獨(dú)立性。
主鏈通過礦工可獲取側(cè)鏈的區(qū)塊頭數(shù)據(jù),并將其存儲(chǔ)在自己的區(qū)塊體中,這樣主鏈在驗(yàn)證側(cè)鏈的交易時(shí),只需查看自己區(qū)塊體中該側(cè)鏈的區(qū)塊頭信息就能進(jìn)行交易的驗(yàn)證(類SPV證明),同時(shí)也是對(duì)側(cè)鏈交易的間接確認(rèn)。由于主鏈將側(cè)鏈的信息寫入到了自己的區(qū)塊體中,因此,對(duì)于這些數(shù)據(jù)的正確性,主鏈需要額外地再做一次共識(shí)。比如一條聯(lián)盟鏈咬定ETH來給自己增加公信力
保障兩條鏈的資產(chǎn)總量不變
保障資產(chǎn)總量不變,這里面隱含了兩層含義,一是在正常的情況下,未被攻擊的情況下如何保障資產(chǎn)總量不變;二是在異常的情況下,即受到攻擊的情況下要如何確保資產(chǎn)總量的恒定。
在正常的情況下,雖未受攻擊,但還是有網(wǎng)絡(luò)狀態(tài)不穩(wěn)定、宕機(jī)、部分節(jié)點(diǎn)作惡或者部分用戶作惡等情況的存在,因此,要保障資產(chǎn)總量不變,必須要確保資產(chǎn)轉(zhuǎn)移的過程在兩條鏈上都是精確記賬。拆開了來說,就是要保障
- 跨鏈交易在兩條鏈上必須是同步的,即交易的原子性,要么都發(fā)生,要么都不發(fā)生。
- 跨鏈交易在兩條鏈上都是真實(shí)有效的,被整個(gè)網(wǎng)絡(luò)確認(rèn)過大概率有效的,后期分叉的可能性很小。
所以,正常情況下本章的難點(diǎn)三的解決是依賴于上文提的難點(diǎn)一和難點(diǎn)二的,只要前面兩者可以實(shí)現(xiàn),難點(diǎn)三就自然不攻而破了。
具體情況:
在異常情況下,假如鏈A已經(jīng)完成了一筆從鏈A到鏈B的跨鏈交易,如下圖所示:

隨后鏈A被黑客攻擊發(fā)生了分叉,之前的跨鏈交易已經(jīng)不在鏈A最長的那條鏈上了,那么之前轉(zhuǎn)賬的賬戶可以發(fā)起一筆雙花攻擊,再次給鏈B發(fā)送一筆跨鏈交易,這樣,鏈B將第二次接收到從鏈A某賬戶發(fā)來的資產(chǎn),鏈A和鏈B的資產(chǎn)總和將因雙花攻擊而增大。由于資產(chǎn)總價(jià)值不變,那么鏈B中資產(chǎn)數(shù)量不對(duì)等的增多將導(dǎo)致鏈B的資產(chǎn)貶值,鏈B的每一個(gè)用戶都要為此次雙花攻擊買單。

同理,如果發(fā)生雙花攻擊的是鏈B,則鏈A和鏈B資產(chǎn)總和將減小,鏈A轉(zhuǎn)到鏈B的資產(chǎn)由于不在主鏈上,就如同消失了一樣,鏈A上發(fā)起轉(zhuǎn)賬交易的用戶將受到損失。

相應(yīng)的處理??傮w來說,有以下幾種處理方向:
首先,隔離受攻擊的鏈。由于鏈和鏈之間的通信通常不是直接進(jìn)行的,而是需要經(jīng)過第三方的,公證人也好,“中間人”也好,中繼節(jié)點(diǎn)也好,這個(gè)第三方角色不僅承擔(dān)了鏈接人的角色,也同時(shí)承擔(dān)了隔離者的作用。當(dāng)發(fā)現(xiàn)某條鏈出現(xiàn)安全問題時(shí),隔離者應(yīng)該拒絕該鏈所有的跨鏈交易請(qǐng)求,直至安全問題被解決。
凍結(jié)跨鏈交易創(chuàng)建的失效資產(chǎn)。對(duì)于異常攻擊的第一種情況,鏈B憑空增多了資產(chǎn),原因就是之前確認(rèn)過的跨鏈交易由于鏈A重構(gòu),交易已然失效,對(duì)于這種失效的跨鏈交易,應(yīng)該在鏈B對(duì)其相關(guān)資產(chǎn)實(shí)施凍結(jié)處理,以確保資產(chǎn)總量的恒定。
釋放跨鏈交易凍結(jié)的資產(chǎn)。對(duì)于異常攻擊的第二種情況,鏈A會(huì)因?yàn)殒淏被攻擊而失去已經(jīng)發(fā)生跨鏈轉(zhuǎn)移的資產(chǎn),由3.2小節(jié)可知,實(shí)際上鏈A轉(zhuǎn)移的資產(chǎn)是凍結(jié)在鏈A的特殊賬戶里,如果攻擊發(fā)生后,能釋放凍結(jié)在鏈A特殊賬戶中的資產(chǎn),即可為鏈A中的用戶挽回?fù)p失。
以上3種處理思路更多的是邏輯的自洽,而非實(shí)際的落地方案。思路1是針對(duì)公證人機(jī)制而言的,也是較容易實(shí)現(xiàn)的,目前wanchain等項(xiàng)目已有落地方案。思路2和思路3的實(shí)現(xiàn)相對(duì)復(fù)雜,目前還未有項(xiàng)目發(fā)布具體的技術(shù)實(shí)現(xiàn)方案
保障兩條鏈的獨(dú)立安全性
在跨鏈交易的過程中保障兩條鏈的安全系數(shù)不會(huì)被降低,或者不被過度降低是一個(gè)重要的命題??傮w說來,可從以下幾個(gè)方面進(jìn)行考慮:
適度隔離。兩條鏈之間應(yīng)該保持各自的獨(dú)立性,盡量通過第三方節(jié)點(diǎn)或者獨(dú)立的模塊處理跨鏈?zhǔn)聞?wù),當(dāng)跨鏈交易發(fā)生問題時(shí),也不會(huì)影響鏈本身交易的處理。特別是對(duì)于高度耦合的系統(tǒng)設(shè)計(jì),如榫卯式模式,需要更多地從其他角度進(jìn)行系統(tǒng)的安全性保證。
檢測安全事件。系統(tǒng)架構(gòu)上做了隔離只是第一步,重要的是這個(gè)第三方節(jié)點(diǎn)或者獨(dú)立模塊要具備檢測安全事件的能力,并且具備響應(yīng)能力。
跨鏈交易正確性。這一點(diǎn)是最基礎(chǔ)的,只有在保障跨鏈交易正確和安全的前提下才能保障其相關(guān)的區(qū)塊鏈體系不受影響。而這主要由跨鏈交易的原子性以及保障交易最終確認(rèn)性來完成的,詳情可見上文,此處不再贅述。
多條鏈之間的跨鏈互聯(lián)
上文討論的主要是兩條鏈之間的互聯(lián)互通,那如何實(shí)現(xiàn)多條鏈的連通呢?其實(shí),這個(gè)問題隱藏了兩個(gè)潛在問題:一是已經(jīng)存在區(qū)塊鏈系統(tǒng)如何實(shí)現(xiàn)互聯(lián)互通;二是對(duì)于未來要開發(fā)的區(qū)塊鏈,如何為其互聯(lián)互通做好準(zhǔn)備和鋪墊。
主動(dòng)兼容
主動(dòng)兼容方案是自上而下進(jìn)行的,主要針對(duì)的是已有的區(qū)塊鏈系統(tǒng),先有了上層不同的區(qū)塊鏈應(yīng)用系統(tǒng),再進(jìn)行底層的跨鏈機(jī)制研發(fā)。通常這些系統(tǒng)都是異構(gòu)鏈,需要一一進(jìn)行對(duì)接,不過一一對(duì)接也有不同的方案,如下圖左側(cè)所示。
一種是兩兩鏈之間直接進(jìn)行互聯(lián),這種方式若無統(tǒng)一的底層協(xié)議支持,是最費(fèi)時(shí)費(fèi)力的了,四條鏈之間需要建立6條鏈接通路才可實(shí)現(xiàn)兩兩互聯(lián),且兩兩之間的通路需要定制化實(shí)現(xiàn)。這種方式雖然可擴(kuò)展性不強(qiáng),但能保障較好的安全性和獨(dú)立性,一旦有攻擊事件發(fā)生,難以影響到整個(gè)網(wǎng)絡(luò)。

第二種是建立一個(gè)第三方跨鏈平臺(tái),鏈和鏈之間都通過這個(gè)跨鏈平臺(tái)進(jìn)行間接互聯(lián),這樣要實(shí)現(xiàn)兩兩之間的互聯(lián)只需要四條鏈接通路即可,如上圖所示。但這樣,跨鏈平臺(tái)將成為整個(gè)跨鏈網(wǎng)絡(luò)的關(guān)鍵點(diǎn)和性能瓶頸(目前還不一定是瓶頸,但未來有可能是),一旦跨鏈平臺(tái)受到攻擊,那整個(gè)跨鏈網(wǎng)絡(luò)都將陷入癱瘓。
被動(dòng)兼容
被動(dòng)兼容方案是自下而上進(jìn)行設(shè)計(jì)的,主要針對(duì)的是未來還未開發(fā)的區(qū)塊鏈體系,先搭建好底層的跨鏈平臺(tái),讓其它區(qū)塊鏈系統(tǒng)能簡單、便捷、安全地接入進(jìn)來,共享跨鏈平臺(tái)的系統(tǒng)便利。
跨鏈平臺(tái)會(huì)優(yōu)先將適用于各鏈之間進(jìn)行互操作的系統(tǒng)和協(xié)議標(biāo)準(zhǔn)開發(fā)出來,后續(xù)只需在其已有的平臺(tái)上進(jìn)行符合標(biāo)準(zhǔn)的開發(fā)就可建立天然具有系統(tǒng)內(nèi)跨鏈功能的區(qū)塊鏈。
不過這里說到的跨鏈?zhǔn)侵傅姆线@套協(xié)議標(biāo)準(zhǔn)的鏈之間能簡單地互相連通,若是要和該體系外的其它鏈之間進(jìn)行互操作,還需要開發(fā)單獨(dú)的中間件來進(jìn)行連通。此外,不同的跨鏈平臺(tái)其支持的區(qū)塊鏈類型也可以不同,如Cosmos支持的是同構(gòu)鏈,而Polkadot則可支持異構(gòu)鏈,兩者都有很高的可擴(kuò)展性
小結(jié)
我們回顧一下前文提到的五個(gè)難點(diǎn)與具體解決方案參考:
- 如何保障跨鏈交易的原子性:介紹了原子互換和哈希時(shí)間鎖協(xié)議原理。
- 如何完成對(duì)另一條鏈的交易確認(rèn):介紹了公證人、中繼以及榫卯式三大類模式異同。
- 如何保障兩條鏈的資產(chǎn)總量不變:從正常和異常兩種情況分別闡述了應(yīng)對(duì)方案。
- 如何保障兩條鏈的獨(dú)立安全性:主要從隔離機(jī)制和安全檢測機(jī)制分析了應(yīng)對(duì)思路。
- 如何實(shí)現(xiàn)多條鏈之間的跨鏈互聯(lián):介紹了主動(dòng)兼容和被動(dòng)兼容兩種跨鏈網(wǎng)絡(luò)建設(shè)方案。
本章從問題出發(fā)梳理了一個(gè)跨鏈項(xiàng)目將要面對(duì)的主要問題,并給出了業(yè)界的一些主流解決方案和解決思路。但并不是每個(gè)涉及到跨鏈的項(xiàng)目都需要解決以上所有問題,而是各取所需:
- 若要實(shí)現(xiàn)跨鏈資產(chǎn)互換功能,解決難點(diǎn)一即可;
- 若要實(shí)現(xiàn)跨鏈資產(chǎn)轉(zhuǎn)移,解決難點(diǎn)一和難點(diǎn)二即可
- 若是能在此基礎(chǔ)上盡量解決難點(diǎn)三和難點(diǎn)四那將得到更安全和穩(wěn)定的系統(tǒng);
- 若要建立一個(gè)跨鏈平臺(tái),那么難點(diǎn)五是必須要考慮的問題。
對(duì)跨鏈技術(shù)的研究現(xiàn)在僅僅是個(gè)開始,跨鏈過程中的眾多難題還需要一步步去解決,特別是跨鏈安全性的研究現(xiàn)在還較為缺失,期待未來有更多優(yōu)質(zhì)的跨鏈項(xiàng)目能推動(dòng)區(qū)塊鏈網(wǎng)絡(luò)的建立和完善。
后續(xù)資料整理集中在具體的技術(shù)實(shí)現(xiàn)案例,可參考跨鏈調(diào)研(下)
原文引用自:
【火幣區(qū)塊鏈產(chǎn)業(yè)專題報(bào)告】跨鏈篇(上)跨鏈難點(diǎn)解決方案剖析 http://www.itdecent.cn/p/f2d2e83473fc
【火幣區(qū)塊鏈產(chǎn)業(yè)專題報(bào)告】跨鏈篇(下)跨鏈案例解析 http://www.itdecent.cn/p/b19b1f3cb9c7