天天看點

社群觀點 | 了解比原鍊MOV鍊上交換協定

社群觀點 | 了解比原鍊MOV鍊上交換協定

去中心化交換協定的發展

從Bitshare,Stellar到以太坊上的Etherdelta,Bancor,0x協定,去中心化交換協定也經過了好幾代發展和很多模式的探索,每一代都通過前面的協定的痛點來進行改進和深化,

主要分為:

  1. 鍊上orderbook,鍊上結算;
  2. 鍊下orderbook,鍊上結算;
  3. 基于智能合約管理的資金池;

鍊上orderbook,鍊上結算

最早的 基于以太坊的去中心化交換協定的成功探索非Etherdelta莫屬,曾一度占據去中心化交換市場的半壁江山。Etherdelta是較為完全的去中心化模式,使用者充值、挂單、吃單、結算及提現全部在鍊上完成。

具體運作機制如下:

社群觀點 | 了解比原鍊MOV鍊上交換協定

Etherdelta的整個運作都在鍊上完成,使用者保管自己的私鑰,平台不會觸碰使用者資産,保證了資産和交換的安全、透明。但其弊病也較為明顯:

1) 由于所有的交換環節都在鍊上完成,且每一個挂單、撤單、吃單等操作都會消耗GAS費用,導緻延時高、成本效益低下。

2) 存在礦工非法預先交換的可能。

鍊下orderbook,鍊上結算

為了解決純鍊上效率低下,且手續費低廉的問題,0x協定引入了relayer(中繼)的概念,所有訂單都發給relayer,無需上鍊,隻有成交才會上鍊。

0x的“鍊下訂單中繼、鍊上最終結算”運作模式如下:

社群觀點 | 了解比原鍊MOV鍊上交換協定

0x協定的主要問題在于,如果需要共享訂單,運用0x協定的交易所每一筆成交都需要廣播出來,以便其他交易所得知和确認,是以單純地使用0x協定無法實作瞬時成交;另外,由于需要将ETH轉化為WETH,也增加了交換成本。

最具典型的資金池模式有Bancor和Kyber。所謂資金池,可以了解為平台利用智能合約建立了一個用于儲備各類資産的池子,資金池中資産的提供方可以是普通使用者或者做市商。

MOV去中心化交換協定介紹

我們在考察各個交換協定時,其實純鍊上交換協定才是最發揮區塊鍊價值的方案,但是因為以太坊等公鍊性能問題,導緻像Etherdelta這樣的純鍊上方案受挫,才有0x這樣的鍊下orderbook出現,來改善性能的問題。究其根本,是本身的基礎設施不完善,導緻的迫不得已的改變。是以比原鍊MOV從一開始就先着手解決區塊鍊性能問題。

高速側鍊是保障

MOV采用了高速側鍊Vapor pro作為底層的基礎設施,Vapor每0.5s出塊,每個區塊可以容納8000筆交易,即每秒16000 tps,在增大區塊,提升節點伺服器的情況下,仍然有進一步提升空間。這個性能能夠滿足目前非高峰時段的使用者需求,可以比肩部分的中心化的方案。

同時MOV采用了DPoS作為共識機制,雖然喪失了一定的去中心化,但是增加了可以進行鍊上撮合的門檻,提高準入門檻可以更好的防止部分有不良企圖的“礦工”進行預先交易,同時因為鍊上撮合本身具有一定的撮合收入,是以通過這個經濟激勵可以防止DPoS的出塊節點作惡來破壞系統(其作惡的成本高于其不作惡的正常收益)。

訂單共享

0x協定為了解決性能問題,是以采用鍊下orderbook,但帶來的問題就是訂單的割裂,采用0x協定的各個不同參與方,為了自己的利益,必然不會将自己使用者的訂單共享出來,進而影響整體的交易深度,而mov采用鍊上orderbook,所有的使用者訂單都在鍊上,公開透明,所有參與撮合的共識節點都可以共享這個深度,進而增強mov上資産的流動性。

磁力合約的優勢

因為比原鍊是基于比特币的UTXO模型,是以在UTXO模型上的磁力合約來做交換協定具有更大的優勢,因為UTXO模型本身以資産為基本機關,和賬戶模型相比,對于資産的操作更加簡易和友善,我們來對比兩者的流程。

以0x為例,0x整個互動流程:

  • Maker授權DEX合約通路自己的Token A餘額
  • Maker建立訂單(訂單有固定的格式)并用私鑰簽名
  • Maker使用任意通信手段廣播訂單
  • Taker接收訂單并願意執行
  • Taker授權DEX合約通路自己的Token B餘額
  • Taker送出訂單給DEX
  • DEX驗證訂單的合法性,在兩個賬戶之間按照訂單上的匯率進行轉賬

那麼磁力合約的整個流程就簡易很多:

  • Maker建立一個磁力合約(在磁力合約中放入自己的資産,并指定要兌換的資産和數量)
  • Taker建立一個磁力合約(在磁力合約中放入自己的資産,并指定要兌換的資産和數量)
  • 共識節點根據合約中的價格和數量,觸發能夠比對的磁力合約,并交換兩者的資産。

不僅在流程上簡單,手續費因為流程的簡化也會更低,我們隻要在使用者設定磁力合約的時候收取手續費即可,事實上,我們還可以嘗試0手續費,因為使用DPoS的模式,關于手續費,各個節點之間的博弈也不會太複雜。

跨鍊資産的生态

我們觀察現行以太坊上的去中心化交換協定,還停留在以太坊本身的生态上,雖然不能否認以太坊生态的強大,但其實外面才是更大的世界,當然跨鍊是後續的主旋律,包括Cosmos和Polkdot都是想做跨鍊的事情,是以MOV在一開始就考慮到了跨鍊的事情,通過OFMF将比原鍊之外的資産映射到比原鍊上來,然後形成囊括所有數字資産的大生态,使用者在mov中體驗的是跟中心化一樣的體驗,可以交易多種資産,這些資産也不單獨是在某一個鍊的生态。

MOV磁力合約詳解

這裡再詳細展開一下MOV磁力合約,看它到底是如何實作的。

MOV磁力合約本質上是一個挂單合約,不管是Taker還是Maker都需要生成這樣的一個合約,本質上其實并不區分Maker和Taker,隻是根據挂單的先後來區分Maker和Taker,兩者在相反的交易對上提升了交易深度,實際上也可以認為都是Maker。

挂單交易合約是進階版的币币交易合約,合約的本質目的是鎖定任意數量的資産A,願意以某特定的匯率兌換資産B。合約的内部應該儲存有四個常量(資産A的ID不需要存因為合約鎖定的是資産A):期望兌換的資産B的ID, 期望兌換的匯率(使用分子分母方式解決浮點支援問題),和挂單使用者的公鑰,挂單使用者接受資産B的位址。合約可以通過三種模式解鎖:

全部解鎖:所有合約中的資産A都被兌換成了資産B并轉入挂單使用者的位址中。

部分解決:部分合約中的資産A被兌換成了資産B并轉入挂單使用者的位址中,剩餘的資産A通過遞歸合約的模式從新鎖定回合約本身(新生成的UTXO)。

取消挂單:挂單使用者通過私鑰簽名将合約中的資産A都轉回自己的位址。

磁力合約Equity的代碼如下:

MagneticContract source code:
contract MagneticContract(requestedAsset: Asset,
                          ratioNumerator: Integer,
                          ratioDenominator: Integer,
                          sellerProgram: Program,
                          standardProgram: Program,
                          sellerKey: PublicKey) locks valueAmount of valueAsset {
 clause partialTrade(exchangeAmount: Amount) {
  define actualAmount: Integer = exchangeAmount * ratioDenominator / ratioNumerator
  verify actualAmount > 0 && actualAmount < valueAmount
  lock exchangeAmount of requestedAsset with sellerProgram
  lock valueAmount-actualAmount of valueAsset with standardProgram
  unlock actualAmount of valueAsset
 }

 clause fullTrade() {
  define requestedAmount: Integer = valueAmount * ratioNumerator / ratioDenominator
  verify requestedAmount > 0
  lock requestedAmount of requestedAsset with sellerProgram
  unlock valueAmount of valueAsset
 }
 clause cancel(sellerSig: Signature) {
  verify checkTxSig(sellerKey, sellerSig)
  unlock valueAmount of valueAsset
 }

}           

fullTrade()就是全部解鎖方法;partialTrade()是部分解鎖,當觸發部分解鎖時,會講為解鎖的資産放入一個新生成磁力合約中去,進而等待下一次比對;cancel()方法将使用者的資産轉回自己的位址,取消這個合約。

我們在看看磁力合約的輸入參數:

type MagneticContractArgs struct {
 RequestedAsset   bc.AssetID
 RatioMolecule    int64
 RatioDenominator int64
 SellerProgram    []byte
 SellerKey        []byte
}           

RequestedAsset是想要兌換的的資産,RatioMolecule,RatioDenominator是想要兌換資産的匯率(RatioMolecule/RatioDenominator 就是匯率),因為目前BVM不支援浮點型,是以額外采用這個參數作為比例,SellerProgram,SellerKey就是合約建立者自己的合約和位址,目标資産就要鎖定到合約建立者自己的賬戶裡面。

細心的朋友可能發現,這裡面和Equity合約少了一個參數,也就是standardProgram,那麼這個參數不用使用者自己輸入,系統會預設補齊,standardProgram 其實就代表原合約,因為部分比對會使一部分資産仍然沒有使用,就仍然傳回到合約中。

最後通過一張圖來更直白的描述一下磁力合約:

社群觀點 | 了解比原鍊MOV鍊上交換協定

總結

我們來對比一下目前的幾種去中心化交換協定:

交換協定 模式 去中心化程度 成本效益 使用者體驗
Etherdelta ★★★★★ ★★
0x ★★★★ ★★★
Bancor 基于智能合約管理的資金池
mov

最早的完全去中心化交換協定Etherdelta對交換的幹擾最少,但完全上鍊的機制使得成本消耗高且體驗較差。之後的幾類去中心化交換協定可謂都是在魚和熊掌之間權衡取舍:Bancor和kyber為代表的儲備池模式,管理者在整個過程中參與度較高,如果儲備池合約中管理者權限較高比如之前Bancor可以提走使用者資産,将會對使用者的資金安全造成威脅;二者上鍊過程比較簡單,成本控制表現不錯,交易效率也比較高,隻是功能性與有orderbook的交換協定相比略遜一籌。0x的中繼模式,平台不觸碰使用者資産,相對而言去中心化程度是較高的,但這也導緻成本效益相對較低;交體驗整體不錯,但如果需要共享訂單,就無法實作瞬時成交。

mov在結合這幾個前人的基礎上,通過提升基礎設施的性能,通過DPoS提升撮合準入門檻,并實作鍊上訂單共享,還很好的提升了使用者體驗,除了通過DPoS犧牲了一定去中心化外,在其他方面都得到了一定提升,随着mov的進一步開發和完善,必将發揮該方案的優勢,進而讓區塊鍊能在資産交換領域發揮巨大的價值,能夠讓去中心化的資産兌換落地。

繼續閱讀