0x:基于以太坊的去中心化交易开放协议
0x是基于以太坊的去中心化交易开放协议,它的特点在于:
- 与应用无关。
- 链下协商,链上交易。
基于0x,开发者可以很轻松地构建去中心化交易所。相比起中心化交易所,去中心化的交易所有以下特点:
- 交易双方无需信任交易所,换句话讲,不需要将私钥托管于交易所。
- 双方可直接交易,不需要中间人。
- 相比起中心化交易所,去中心化交易所的交易速度要慢的多。
这里请读者注意一点:0x != 去中心化交易所,它只是一个协议,去中心化交易所可以选择0x来完成构建。中心化交易所、去中心化交易所和0x三者之间的对比在这篇文章中以表格的形式呈现出来了。
image.png由上表可知,去中心化交易所和中心化交易所并非不共戴天。恰恰相反,两者完全可以互补:
- 用户通过中心化交易所将法币兑换成数字货币,由此进入数字货币的世界。
- 接下来,用户可以使用去中心化交易所完成与其他数字货币的交易。
有经验的读者可能会疑惑,0x似乎与“状态通道”的作用有些类似:双方都将一部分工作转移到链外,最后在链上完成交易。然而,两者之间还是存在区别:
- 状态通道涉及到通道的打开和关闭,在通道中积累中间状态,最后在区块链上完成真正交易。它并不需要借助智能合约,适合“bar tab”类型交易,对于一次性交易来讲成本过高。
- 0x协议相对来讲更轻量级,通过智能合约完成交易,适合“OTC”交易,直接在区块链上完成。
从架构上来讲,0x是一组支撑其运转的智能合约,可被任何应用直接使用,如下图。
image.png根据0x白皮书的介绍,0x协议实现了下图的交互流程:
image.png其中:
- 灰色圆圈代表以太坊上的账户
- 灰色矩形代表智能合约,指向矩形的箭头代表合约调用
- 方框外的箭头代表信息流动
整个交互流程:
- Maker授权DEX合约访问自己的Token A余额
- Maker创建订单(订单有固定的格式)并用私钥签名
- Maker使用任意通信手段广播订单
- Taker接收订单并愿意执行
- Taker授权DEX合约访问自己的Token B余额
- Taker提交订单给DEX
- DEX验证订单的合法性,在两个账户之间按照订单上的汇率进行转账
就买卖双方而言,存在两种流程,并分别对应两类订单:
- 点对点订单
- 广播订单
前者对应买卖双方已经线下达成协议,直接在线上进行实际操作,订单消息中包含有对方的地址;后者则是通过Relayer将订单广播出去,由有意者完成订单。这两种订单消息的主要差异:
- 前者直接指定了对方的地址
- 后者则没有指定,但是指定了交易手续费相关的三个属性(手续费采用由0x发行的ZRX支付):
- 手续费接收者地址
- 发起方的手续费
- 接收方的手续费
其中Relayer的作用主要是用于记录发起方发起的订单,相当于交易大厅,保存了所有的交易订单。但它与中心化交易所的差别在于:仅记录订单,不会代表买卖双方执行交易。这也是其被称为relayer,而非exchange的原因。
前面提到,交易费采用0x发行的ZRX进行交易。它除了作为交易手续费,另一个作用是用于协议治理。期望通过一种经济激励的方式来完成协议的去中心化治理,以保证协议的升级可以兼顾各方利益。这一点可以参见其白皮书中的叙述。
理论上,既然0x是有一组智能合约组成,那么只有知道智能协议的地址和相应的abi之后,其他Dapp就可以直接使用了。这一点的确没错,但出于简化开发的目的,0x项目提供了相应的工具:
使用这些工具,Dapp开发者可以非常快捷的构建基于0x的去中心化交易所。关于0x智能合约和开发细节,在后续的文章中将会详细结束,敬请期待。