側鏈與跨鏈 (Sidechain、Cross-Chain)
側鏈最早是為了提升比特幣交易速度所提出的解決方案,可以讓比特幣安全的從主鏈上轉移到另一條鏈,又可以安全的返回比特幣主鏈的一種協議。如果一個 鏈 B 的存在是為了處理 鏈 A 上的交易,簡單來說 鏈B 就像外掛插件,依附於 鏈 A,則稱 鏈 B 為 鏈 A 的「側鏈」,鏈 A 就是 鏈 B 的「主鏈」。其中 主鏈 A 並不知道 側鏈 B 的存在,側鏈 B 知道有 主鏈 A 的存在。
側鏈與跨鏈的定義較難釐清,也有許多人將所有牽涉到鏈下的解決方案統稱為側鏈,為了方便理解,如果是像比特幣與以太坊這種,兩條擁有各自獨立數據的主鏈之間的數據交換,本文則稱之為「跨鏈」。
雙向錨定 (Two-way Peg)
然而在區塊鏈的世界中,資產不能真的從一條鏈轉移到另一條鏈。以比特幣為例,比特幣不可能真的從一條鏈流通到另一條鏈,而是透過「雙向錨定」的方式完成。
以比特幣為例,進行側鏈或跨鏈操作時,將比特幣發送到一個特定的錢包地址鎖定,就能夠在另一條鏈上釋放等量的代幣。同樣的,當等量等值的代幣在側鏈上被鎖定時,比特幣區塊鏈上的原始比特幣就可以被釋放了。
這時就涉及到一個很重要的問題,「安全」。誰來管理鎖定的賬戶?誰來解鎖?鎖定的資產如何被安全釋放?可以說,這個部分是側鏈與跨鏈技術最困難的地方。
目前主流的方法有公證人機制、中繼器/鏈、哈希鎖定和分佈式私鑰控制四種機制。
公證人機制 (Notary schemes)
鏈與鏈之間互操作最簡單的方法是使用公證人模式。在公證人模式中,使用受信任的一個或者一組團體向鏈A聲明鏈B上發生了某事件,或者確定該聲明是正確的。
舉個例子 :
阿平有一個比特幣,阿蔡有一個以太幣。
有一天阿平突然跟阿蔡說,”欸欸,我用一個比特幣跟你換一個以太幣”。阿蔡聽到興奮不已,但冷靜思考後,覺得天底下哪有這麼好的事,阿平會不會心懷不軌。於是,他想了一個辦法,他找了老徐來當公證人,雙方都先把幣打給老徐,老徐收到雙方的幣並確認金額無誤後便把一個比特幣打給阿蔡,一個以太幣打給阿平,雙方交易完成。
公證人模式在側鏈解決方案領域受到很多關注,因為其既可以提供靈活的共識,也無需進行昂貴的工作證明或關於利益機制的複雜證明。然而,從上述例子中我們也不難發現,最大的缺點就是中心化程度高,存在安全疑慮,如果例子中的老徐從中作梗,將導致資產陷入危險之中。公證人模式的代表項目有 Ripple。
中繼器/中繼鏈 (Relays/Sidechain)
區塊鏈的區塊頭中擁有歷史交易的有效證明信息。因此可以藉由將鏈 A 的區塊頭,寫入中繼鏈的塊中。等待鏈 A 的區塊頭序列之後,在中繼鏈上處理的交易,就可以通過區塊頭的歷史交易的證明信息,來驗證交易的有效性。以比特幣為例,中繼鏈就像是比特幣鏈的簡易複製版,比特幣可以透過這條複製出的中繼鏈,與其他區塊鏈進行跨鏈的資產轉移。
以 BTC Relay 為例。在 BTC Relay 的設計中,比特幣鏈上會有一個腳色稱為 Relayer ,負責蒐集比特幣的區塊頭訊息並 將此訊息發送給 BTC Relay , BTC Relay 透過這些區塊頭的串接創建出小型版本的比特幣區塊鏈,以太坊 Dapp 開發者便能藉此從智能合約向 BTC Relay 進行 API 調用來驗證比特幣網路的狀態。
舉個例子:
阿菜想用比特幣跟阿平買以太幣,他們說好要用 BTC Relay 做交易。
阿平會先將以太幣打到 BTC Relay 在以太坊上的智能合約 BTCSwap,阿菜再接著將比特幣打到阿平的比特幣地址。→阿平拿到比特幣
接下來阿菜必須讓智能合約知道他已經把比特幣打給阿平了,阿菜把交易資訊發送給 BTC Relay 驗證這筆交易是否真實存在。(注意,由於區塊鏈是封閉式的,所以必須由使用者提供資訊,才能進行驗證)
驗證成功後 BTC Relay 便會觸發 BTCSwap 釋放以太幣給阿菜。→阿菜拿到以太幣
中繼器 / 中繼鏈 與公證人所扮演的腳色事一樣的,不同的地方在於,公證人機制存在信任問題,交易執行與否,由公證人決定,而 中繼器 / 中繼鏈 則是自動執行,只要符合條件即自動進行交易。
哈希鎖定 (Hash-locking)
哈希鎖定模式的設計來自於閃電網路,也是其關鍵技術之一。透過「哈希鎖定」以及「時間鎖」的搭配,能夠消除網路上參與交易者之間的信任問題,這部分在之後的「閃電網路」會做更深入的介紹。雖然哈希鎖定能實現單一資產的交換,但是不能實現跨鏈兩種資產之間的轉移,換句話說哈希鎖定沒辦法做到比特幣與以太幣之間的跨鏈資產轉移,因此它的應用場景比較受限。
分佈式私鑰控制(Distributed private key control)
進行跨鏈交易時,需要涉及的問題是,「原有鏈上的資產必須被安全的鎖定,當交易完成時,資產要能安全的被解鎖與分配」。而分佈式私鑰控制就是跨鏈進行資產鎖定的其中一種解決方案。
以跨鏈項目 FUSION 為例,當用戶要進行跨鏈交易時,就需要鎖定 鏈 A 上的部分資產。首先需要先向 FUSION 請求跨鏈交易,FUSION 便會生成一個可以鎖定資產的一組私鑰和地址,並把這個地址發送給用戶,用戶就可以在 鏈 A 上把資產轉移到鎖定的地址上面去。
接下來 FUSION 網路裡面的多個節點,會將這組私鑰,拆分共同保管,由多個節點共同持有這組私鑰,單獨某幾個節點是沒辦法去動用這裡面的資產的。只有在通過智能合約的特定條件(例如: 鏈 B 交易完成)時,各節點達成共識之後,如果他們都認為這個資產是可以解鎖的,他們才會把各自的私鑰片段貢獻出來,將這個私鑰完整恢復,對應的資產也就可以被解鎖了。
側鏈的應用
側鏈的應用較單純,就是將原鏈上的某些交易,轉移到側鏈上做確認,要結算時,在將結果廣播到原鏈上清算。簡單來說側鏈最大的應用就是提升交易吞吐量。
現實世界中的賭場,就是側鏈很好的例子。想像一下,如果每一個賭桌,都開放用新台幣下注,桌上又是鈔票又是零錢,每一局結算等荷官算錢都不知道浪費多少時間了。所以大部分賭場都會統一使用籌碼下注,讓所有人進場時將法幣換成籌碼 (雙向錨定,鎖定原資產),所有賭局都透過籌碼進行,要離開時再回到櫃台結算,將籌碼換回法幣 (交易結算,釋放相應數量的資產)。
跨鏈的應用
- 與側鏈相比,跨鏈涉及到兩條不同的鏈,因此擁有更多樣化的應用場景。
- 資產轉移:不需要透過交易所即可進行資產交換。
- 原子交易:所謂原子交易就是說如果 A交易 成功了,那麼 B 就應該是成功,如果 A 失敗了,那麼 B 就肯定是同時失敗的。BTC Relay 就是原子交易很好的例子,若比特幣沒有發送至約定地址,就無法觸發智能合約發送以太幣。
- 數據交換:鏈A 能夠得知 鏈B 上的數據
去中心化交易所:一般去中心化交易所只支援單一條鏈上的資產,例如 EtherDelta 只支援以太坊的 ERC20 代幣。透過跨鏈技術,去中心化交易所即可實現不同鏈上的資產交換。
*本文由 AMIS 首席科學家 – 陳昶吾博士協助審閱。