從Bitshare,Stellar到以太坊上的Etherdelta,Bancor,0x協議,去中心化交換協議也通過了好幾代發展和不少模式的探索,每一代都經過前面的協議的痛點來進行改進和深化,安全
主要分爲:服務器
最先的 基於以太坊的去中心化交換協議的成功探索非Etherdelta莫屬,曾一度佔據去中心化交換市場的半壁江山。Etherdelta是較爲徹底的去中心化模式,用戶充值、掛單、吃單、結算及提現所有在鏈上完成。性能
具體運行機制以下:區塊鏈
Etherdelta的整個運行都在鏈上完成,用戶保管本身的私鑰,平臺不會觸碰用戶資產,保證了資產和交換的安全、透明。但其弊病也較爲明顯:ui
因爲全部的交換環節都在鏈上完成,且每個掛單、撤單、吃單等操做都會消耗GAS費用,致使延時高、成本效益低下。code
存在礦工非法預先交換的可能。遞歸
爲了解決純鏈上效率低下,且手續費低廉的問題,0x協議引入了relayer(中繼)的概念,全部訂單都發給relayer,無需上鍊,只有成交纔會上鍊。開發
0x的「鏈下訂單中繼、鏈上最終結算」運做模式以下:it
0x協議的主要問題在於,若是須要共享訂單,運用0x協議的交易所每一筆成交都須要廣播出來,以便其餘交易所得知和確認,所以單純地使用0x協議沒法實現瞬時成交;另外,因爲須要將ETH轉化爲WETH,也增長了交換成本。io
最具典型的資金池模式有Bancor和Kyber。所謂資金池,能夠理解爲平臺利用智能合約創建了一個用於儲備各種資產的池子,資金池中資產的提供方能夠是普通用戶或者作市商。
咱們在考察各個交換協議時,其實純鏈上交換協議纔是最發揮區塊鏈價值的方案,可是由於以太坊等公鏈性能問題,致使像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整個交互流程:
那麼磁力合約的整個流程就簡易不少:
不只在流程上簡單,手續費由於流程的簡化也會更低,咱們只要在用戶設置磁力合約的時候收取手續費便可,事實上,咱們還能夠嘗試0手續費,由於使用DPoS的模式,關於手續費,各個節點之間的博弈也不會太複雜。
咱們觀察現行以太坊上的去中心化交換協議,還停留在以太坊自己的生態上,雖然不可否認以太坊生態的強大,但其實外面纔是更大的世界,固然跨鏈是後續的主旋律,包括Cosmos和Polkdot都是想作跨鏈的事情,因此MOV在一開始就考慮到了跨鏈的事情,經過OFMF將比原鏈以外的資產映射到比原鏈上來,而後造成囊括全部數字資產的大生態,用戶在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 其實就表明原合約,由於部分匹配會使一部分資產仍然沒有使用,就仍然返回到合約中。
最後經過一張圖來更直白的描述一下磁力合約:
咱們來對比一下當前的幾種去中心化交換協議:
交換協議 | 模式 | 去中心化程度 | 成本效益 | 用戶體驗 |
---|---|---|---|---|
Etherdelta | 鏈上orderbook,鏈上結算 | ★★★★★ | ★ | ★★ |
0x | 鏈下orderbook,鏈上結算 | ★★★★ | ★★★ | ★★★★ |
Bancor | 基於智能合約管理的資金池 | ★★ | ★★★ | ★★★★ |
mov | 鏈上orderbook,鏈上結算 | ★★★ | ★★★★ | ★★★★★ |
最先的徹底去中心化交換協議Etherdelta對交換的干擾最少,但徹底上鍊的機制使得成本消耗高且體驗較差。以後的幾類去中心化交換協議可謂都是在魚和熊掌之間權衡取捨:Bancor和kyber爲表明的儲備池模式,管理員在整個過程當中參與度較高,若是儲備池合約中管理員權限較高好比以前Bancor能夠提走用戶資產,將會對用戶的資金安全形成威脅;兩者上鍊過程比較簡單,成本控制表現不錯,交易效率也比較高,只是功能性與有orderbook的交換協議相比略遜一籌。0x的中繼模式,平臺不觸碰用戶資產,相對而言去中心化程度是較高的,但這也致使成本效益相對較低;交體驗總體不錯,但若是須要共享訂單,就沒法實現瞬時成交。
mov在結合這幾個前人的基礎上,經過提高基礎設施的性能,經過DPoS提高撮合准入門檻,並實現鏈上訂單共享,還很好的提高了用戶體驗,除了經過DPoS犧牲了必定去中心化外,在其餘方面都獲得了必定提高,隨着mov的進一步開發和完善,必將發揮該方案的優點,從而讓區塊鏈能在資產交換領域發揮巨大的價值,可以讓去中心化的資產兌換落地。