去中心化交换协议的发展

从Bitshare,Stellar到以太坊上的Etherdelta,Bancor,0x协议,去中心化交换协议也经过了好几代发展和很多模式的探索,每一代都通过前面的协议的痛点来进行改进和深化,

主要分为:

  1. 链上orderbook,链上结算;
  2. 链下orderbook,链上结算;
  3. 基于智能合约管理的资金池;

链上orderbook,链上结算

最早的 基于以太坊的去中心化交换协议的成功探索非Etherdelta莫属,曾一度占据去中心化交换市场的半壁江山。Etherdelta是较为完全的去中心化模式,用户充值、挂单、吃单、结算及提现全部在链上完成。

具体运行机制如下:

Etherdelta的整个运行都在链上完成,用户保管自己的私钥,平台不会触碰用户资产,保证了资产和交换的安全、透明。但其弊病也较为明显:

  1. 由于所有的交换环节都在链上完成,且每一个挂单、撤单、吃单等操作都会消耗GAS费用,导致延时高、成本效益低下。

  2. 存在矿工非法预先交换的可能。

链下orderbook,链上结算

为了解决纯链上效率低下,且手续费低廉的问题,0x协议引入了relayer(中继)的概念,所有订单都发给relayer,无需上链,只有成交才会上链。

0x的“链下订单中继、链上最终结算”运作模式如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OJXrvV6T-1577439160857)(https://i.loli.net/2019/12/27/oSb7MDOZC9kvrYs.png)]

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 / ratioNumeratorverify actualAmount > 0 && actualAmount < valueAmountlock exchangeAmount of requestedAsset with sellerProgramlock valueAmount-actualAmount of valueAsset with standardProgramunlock actualAmount of valueAsset}clause fullTrade() {define requestedAmount: Integer = valueAmount * ratioNumerator / ratioDenominatorverify requestedAmount > 0lock requestedAmount of requestedAsset with sellerProgramunlock valueAmount of valueAsset}clause cancel(sellerSig: Signature) {verify checkTxSig(sellerKey, sellerSig)unlock valueAmount of valueAsset}}

fullTrade()就是全部解锁方法;partialTrade()是部分解锁,当触发部分解锁时,会讲为解锁的资产放入一个新生成磁力合约中去,从而等待下一次匹配;cancel()方法将用户的资产转回自己的地址,取消这个合约。

我们在看看磁力合约的输入参数:

type MagneticContractArgs struct {RequestedAsset   bc.AssetIDRatioMolecule    int64RatioDenominator int64SellerProgram    []byteSellerKey        []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的进一步开发和完善,必将发挥该方案的优势,从而让区块链能在资产交换领域发挥巨大的价值,能够让去中心化的资产兑换落地。

社区观点 | 理解比原链MOV链上交换协议相关推荐

  1. 社区观点 | 关于比原链MOV巡查官制度的几点思考

    在ChainNode白皮书解密读书会01期活动中,比原链高级研究员刘秋杉带领大家领读「MOV:下一代去中心跨链 Layer 2 价值交换协议」白皮书,得到了很多粉丝的关注,其中gentledog的读书 ...

  2. 原华为区块链科学家黄连金先生受邀担任Hashgard基金会战略顾问

    点击上方"蓝色字"可关注我们! 作者:Hashgard 目前,根据coinmarketcap的数据,区块链上的数字资产总额已超过4000亿美金,总数超过1500种,作为一种新兴的资 ...

  3. 观点丨人工智能时代的区块链技术

    11月12号20:00,BlockMania 「博士大爆炸」第四期暨AMA直播 第28期继续进行,本期主题为「人工智能时代的区块链技术」,分享嘉宾为武汉大学计算机学院管理科学与工程以及软件工程教授.博 ...

  4. JavaScript 开发进阶:理解 JavaScript 作用域和作用域链(上)

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...

  5. 您真的理解了SQLSERVER的日志链了吗?

    您真的理解了SQLSERVER的日志链了吗? 先感谢宋沄剑给本人指点迷津,还有郭忠辉童鞋今天在QQ群里抛出的问题 这个问题跟宋沄剑讨论了三天,再次感谢宋沄剑 一直以来,SQLSERVER提供了一个非常 ...

  6. JavaScript 开发进阶:理解 JavaScript 作用域和作用域链

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...

  7. 简易理解设计模式之:责任链模式——OA中请假流程示例

    介绍: 责任链模式属于行为型设计模式.它的定义为:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,只到有对象处理它为止. 类图: ...

  8. 原链YCC战略定位:公链+私链(联盟链、私有链),实现价值传递

    作为一种分布式的记账方式,区块链的重要特征就是去中心化.不可篡改.基于机器信任的原则,利用区块链技术可以使没有信任关系的用户之前完成无风险交易.因此,它可以记录每个用户不可篡改的信息或交易记录,比如个 ...

  9. 深入理解Javascript作用域和作用域链

    什么是作用域 作用域是代码运行时某些特定的部分中变量.函数和对象的可访问性,换句话说,作用域决定了代码块中变量和其他资源的可见性 作用域共有两种工作模型 词法作用域(静态作用域) 动态作用域 词法作用 ...

最新文章

  1. 2020 年了,深度学习接下来到底该怎么走?
  2. Python学习笔记(四)Python函数
  3. 观察者模式及c++实现
  4. POJ - 1734 Sightseeing trip(最小环+输出路径)
  5. linux路由内核实现分析(四)---路由缓存机制(1)
  6. 【Head First 设计模式】-装饰者模式读后总结
  7. 阿呆做网站(1)--基本功能
  8. 六一儿童节,老师带了很多好吃的巧克力到幼儿园。每块巧克力j的重量为w[j],对于每个小朋友i,当他分到的巧克力大小达到h[i] (即w[j]=h[i]),他才会上去表演节目
  9. python实现求解列表中元素的排列和组合问题
  10. ubuntu操作系统之新手操作必看篇
  11. javamail 收件人/发件人 乱码解析
  12. mimics软件怎么恢复原来默认的窗口设置
  13. 如何按比例裁剪图片?怎样改变图片形状?
  14. 常用的Markdown使用命令
  15. DES的s盒输出CPA和DPA攻击
  16. 【尾插法】表尾插入法构造链表 (10 分)
  17. Synology NAS加域
  18. Altium Designer--如何将底层视图进行翻转
  19. html 按钮位于div底部,css按钮定位在div底部
  20. imx6ul uart8路串口调试(代码)

热门文章

  1. REDD Intelligence宣布高管任命
  2. Java Swing版单机版三国杀
  3. vue滚动年月日选择器DatetimePicker
  4. Android Framework 框架系列之 MTK 功耗解决方案
  5. FinalShell高级版离线激活
  6. 宝可梦数据分析-平民最强宝可梦选择方案
  7. 电脑里每个盘下都出现$RECYCLE.BIN和system volume information等文件夹
  8. 带你写爬虫(python)第二篇----抓取网易云音乐下面的评论(API方式)
  9. PHP 获取日期 多少小时后、多少天后、多少周后、多少月后、多少年后
  10. 论文阅读笔记之——《Recovering Realistic Texture in Image Super-resolution by Deep Spatial Feature Transform》