隨著區塊鏈技術的發展,基于區塊鏈的數字貨幣也大量涌現。這些數字貨幣分布在不同的區塊鏈網絡中,無法直接進行數據互通,因此主要借助于數字貨幣交易所進行交易。傳統的數字貨幣交易所多為中心化的服務,在安全性、隱私性等方面都受到挑戰。而運行在鏈上的去中心化交易所,因為其數據透明、隱私保障、實時結算等優點,越來越受到廣泛的關注。
當前提出的去中心化交易所大都只實現了同一條鏈上的代幣交易,并不能實現跨鏈的數字貨幣交易,限制了去中心化交易所的應用場景。本文提出了一種去中心化的數字貨幣交易所的解決方案,使用該解決方案可以實現跨鏈的數字貨幣交易。這里我們僅闡述基本的想法,具體的設計和開發仍在進行中。
我們將這個解決方案稱為運河(Canal),因為運河實現的是多個城市之間的貨物運輸和交易。該方案設計的初衷是,當用戶使用一鍵發鏈服務發布了自己的區塊鏈后,可以借助該解決方案實現與其他鏈上數字貨幣的兌換,從而方便數字貨幣的流通。
相關技術
去中心化交易所
目前提出的去中心化交易所可分為以下兩類。
掛單撮合
包括0x[1]、Kyber Network[2]在內的去中心化交易所系統都屬于掛單撮合交易的類型。用戶通過智能合約發布自己的買單或者賣單,然后系統幫助尋找最合適的買賣單組合進行交易。這種去中心化的交易所可以看做是把原本中心化交易所的交易流程移植到了鏈上,交易的流程機制并未發生變化。
這種交易方式的優點如下:
· 交易透明:掛單數據完全公開;
· 資金安全:數字貨幣通過智能合約管理,交易完成后及時轉至用戶賬戶;
· 交易成本低:除了區塊鏈gas,沒有第三方費用。
缺點如下:
· 交易在區塊鏈上完成,交易速度慢;
· 市場不活躍時,買賣雙方難以達成一致,流動性變弱。
自動定價
Bancor Network[3]通過智能合約,實現了用戶和數字貨幣資金池之間的自動定價交易。交易流程如下:
· 搭建交易合約,并往合約里存入一定數量的數字貨幣A和B作為初始時刻的資金池;
· 當用戶需要使用A幣換取B幣的時候,先把A幣存入合約的資金池中;然后系統會根據當前合約中的A、B幣的存量計算出A至B的轉換率,并把資金池中對應數量的B幣轉至用戶賬戶。
· 如果用戶不斷地使用A幣換取B幣,則資金池中的A幣增加,B幣減少,從而轉換率降低,即A幣能換取到的B幣減少。
自動定價交易的優點如下:
· 無需支付巨額上幣費用。
· 用戶買賣不需要掛單,可隨時交易。
· 保證流動性,用戶無需擔心交易深度。
缺點如下:
· 需要項目方提前質押一部分幣到系統中
· 當前只支持同一條鏈上的數字貨幣轉換
跨鏈技術
區塊鏈網絡之間數據無法互通,極大程度的限制了區塊鏈的應用空間??珂溂夹g旨在解決這一問題,實現區塊鏈之間的數據傳輸。目前市場上的跨鏈解決方案,僅僅實現了不同區塊鏈上價值的交換,而并未實現交易功能;即數字貨幣僅能按照預先約定的轉換率進行轉換,而不能隨著市場動態變化價格。這點一定程度上阻礙了數字貨幣價值的自由流動,也限制了跨鏈技術的應用空間。
跨鏈的解決方案可以分為兩類。
中繼
一類是使用一條主鏈連接各個側鏈,實現側鏈之間的數據互通,這條主鏈通常稱為Hub或Relay。比如Cosmos[4]、Polkadot[5]等,其基本思想大體一致:
1. 主鏈采用dPoS(Delegated Proof of Stake)、PoA(Proof of Authority)等弱中心化的共識算法,即區塊的產出是由少數超級節點完成的,或者可以稱之為聯盟鏈。
2. 主鏈的超級節點監控側鏈的數據變化,然后在主鏈產生相應的數據;或是監控主鏈數據的變化,在側鏈產生相應的數據。從而實現主鏈和側鏈數據的互通。
這種跨鏈模式的優點是數據傳輸快速高效,且可以傳輸鏈上任何形式的數據;缺點是帶來了中心化,即跨鏈數據的準確性和完整性依賴了聯盟鏈的超級節點。
原子交換
原子跨鏈交換[6]是使用區塊鏈的腳本,實現兩個區塊鏈網絡中的數字貨幣進行原子交換。這里原子的意思是指,交換雙方在兩個區塊鏈系統上發布的兩筆交易必須同時完成或同時失敗。其具體步驟如下:
1. Alice用自己的A幣交換Bob擁有的B幣。
2. Alice創建交易,將A幣支付給一個輸出腳本,這個腳本需要用一個Alice自己知道的key和Bob的簽名才能解開。
3. Bob看到這筆交易后,也創建交易,將B幣支付給一個輸出腳本,這個腳本需要同樣的key和Alice的簽名才能解開。
4. Alice用key和簽名解開Bob創建的交易,將B幣轉移至自己的賬戶地址,key會隨著轉移操作而上鏈。
5. Bob看到鏈上的key之后,使用key和自己的簽名解開Alice創建的交易,并將A幣轉移至自己的賬戶地址,交換完成。
6. 如果Alice和Bob在過程中終止操作,則兩筆交易在一定時間后,會分別退還給Alice和Bob,交換失敗。
這種跨鏈模式的優點是完全的去中心化,交換不依賴任何第三方;缺點是一次交換過程必須依賴4次交易才能完成,速度慢效率低。
算法介紹
本文提出了一種去中心化的跨鏈數字貨幣交易所解決方案。其交易流程由一個聯盟鏈網絡和多個智能合約完成。以這樣一個場景為例進行說明:側鏈A上的數字貨幣需要換成側鏈B上的數字貨幣,我們通過主鏈作為中繼完成這筆交易。
主鏈
主鏈采用聯盟鏈。聯盟鏈的超級節點通過交易所的所有用戶投票得到,或其他任意方式。超級節點負責驗證區塊鏈上的所有交易,并產生新的區塊。主鏈連接了所有需要進行交易的側鏈,從而保證了數據可以進行跨鏈傳輸。同時,主鏈負責運行數字貨幣交易所需的智能合約。方案的細節將在下文中描述。
跨鏈
跨鏈部分采用中繼的模式,由兩個合約組成,一個部署在主鏈上,稱之為主合約,另一個部署在側鏈上,稱之為子合約。子合約是用于用戶在側鏈上進行充幣和提幣的,和中心化交易所中的充提幣概念一致。主合約是用來同步用戶的充提幣和交易記錄,并且存儲用戶余額的。
跨鏈步驟如下:
充幣
· 用戶向側鏈A上的子合約中存入需要兌換的數字貨幣A。
· 超級節點監聽到子合約地址下的數字貨幣A數量變化,然后在主合約中往用戶的地址下增加相應數量的代幣。
交易
· 用戶操作用主合約中自己地址下的代幣調用交易接口。
· 接口將轉換后的數字貨幣B轉移至主合約B的用戶地址下。
提幣
· 用戶向側鏈B的子合約發起提幣請求。
· 超級節點監聽到側鏈B上的提幣請求,然后銷毀主合約中用戶的代幣,并在側鏈B上將對應數量的數字貨幣B轉移至用戶地址下。
交易
交易采用自動定價的模式,由一個智能合約組成。合約在初始化的時候,需要充入一定數量的數字貨幣A、B,作為資金池,從而實現A與B之間的交易。
交易的流程如下:
· 用戶想將一定數量的數字貨幣A轉換為數字貨幣B。
· 用戶將需要轉換數字貨幣A存入合約地址下,進入資金池。
· 系統根據需要轉換的A的數量和當前資金池中A、B的存量,計算出能轉換到的B的數量。
· 系統將轉換到的B從系統的資金池轉出到用戶的地址。
步驟3中的轉換計算需要遵循以下原則:
· 資金池內的A越少,則A到B的轉換率越高。B也亦然。
· 不能將資金池中的任何一種數字貨幣用盡,否則則無法繼續轉換。
基于以上原則,轉換的邏輯可以有多種設計。例如:
· 假設資金池中的數字貨幣A、B的存量分別為a0、b0(a0 》 0,b0 》 0),用戶想要將△a(△a 》 0)的數字貨幣A轉換,得到△b(△b 》 0)的數字貨幣B。
· 則能轉換到的B的數量為:△b =( b0 *△a ) / (a0 + △a)。
· 可以看到,△b是b0的增函數,是a0的減函數,符合上文中的原則1。
· 可以看到,△b 《 b0,則資金池中的B不會用盡,符合上文中的原則2。
總結
在設計的過程中,我們有兩點思考。第一,我們覺得不應過分強調去中心化,而犧牲交易的效率;因為如果交易的速度太慢,則會影響用戶的體驗;而去中心化的需求在一個聯盟鏈的系統中,通過投票給可信的超級節點,也是一定程度上可以滿足的。第二,自動定價交易的模式在實際的使用中應該是明顯優于掛單交易的,因為很多新發的數字貨幣交易量小流動性無法保證,而自動定價交易的模式很好地解決了流動性的問題。
評論
查看更多