从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的进一步开发和完善,必将发挥该方案的优点,从而让区块链能在资产交换领域发挥巨大的价值,可以让去中心化的资产兑换落地。