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