DTeam 技术日志

Doer、Delivery、Dream

集成0x,为项目带来去中心化交易能力

胡键 Posted at — Feb 3, 2019 阅读

前文介绍过 0x 项目的愿景和基本情况,本文就来说说如何在项目中集成 0x。集成的目的很简单:为自己项目或网站的客户提供一个可以方便进行 Token 交换的途径。

0x Instant

这是最简单的一种方式,直接在网页中嵌入一段脚本即可,如同 Google 的 AdSense,而且还无需担心类似 Google 认为你作弊而将你辛苦赚的广告费直接划掉(好吧,我就经历过这样的事情,而且千真万确没有作弊)。

利用 0x Instant,你直接就能坐地抽成(最多 5%),所得直接进入你指定的地址,不再需要中间商!从这里可以看到一个测试网的例子

0x Instant 由两部分组成:UI 和 Asset Buyer,前者负责界面展示,后者则是实际的业务逻辑。假如想采用自己的 UI,你大可直接集成 Asset Buyer。另外,若要交易的 Token 属于 ERC721 的话,你也只能集成 Asset Buyer,因为 UI 组件目前仅支持 ERC20。

对于配置脚本的参数,值得注意的有:

前文也说过,0x 的手续费采用 ZRX,那是否意味着交易双方需要拥有 ZRX 才能用 0x 呢?答案是:非也。整个购买过程中,Asset Buyer 会从订单来源购买并支付,对用户完全透明。

0x Launch Kit

另一种集成方式就是将交易大厅直接集成到自己的应用中,这可以通过实现自己的 Relayer 来完成。实现自己的 Relayer 最简单的方式就是直接采用0x-launch-kit,它提供了开箱即用的 API 服务,支持 Typescript 和 Javascript,缺省采用 SQLite 来保存 OrderBook。

对于这个工具,最简单的理解就是将其类比为数据库,只不过这个数据库只能通过 HTTP 和 WebSocket 来交互。关于 API 文档,参见这里。为了简化交互,0x 提供了0x Connect。此外,从微服务架构的角度,将其理解成为订单服务也未尝不可。

在整个交易过程中:

因为订单消息是按照 0x 协议的订单格式在所有 Relayer 之间发送,因此完全有可能交易双方在不同的 Relayer 上。并且,订单首次提交到的那个 Relayer 获得交易抽成。关于 Relayer 的控制策略,0x 也提供了一定的弹性空间,目前主要有四种:

0x Starter Project

假如开箱即用的 Relayer 满足不了你一颗不羁的心,那你还可以直接使用 0x.js 完成高度自由的定制。此时,采用0x Starter Project可以帮你快速搭建工程模板。

0x Order Watcher

如果你仅仅只对订单状态感兴趣,比如 Relayer 中就需要及时知道订单状态以清除 OrderBook 中“脏订单”(比如超时),那直接使用OrderWatcher就好。0x-launch-kit 就已经将其包含在内了。

它本质上是一个后台服务,监听以太坊状态和不断扫描数据库,然后以回调方式通知订阅者。

测试环境:Ganache 配置

最后说一说测试环境的配置,因为 Ganache 并不包含 0x 的智能合约。因此,为了简化开发者的工作,不让其自己去部署合约,0x 提供了Ganache 数据库的快照。将其下载解压之后,然后运行以下命令启动 Ganache,测试环境就自动初始化好了:

ganache-cli \
--networkId 50 \
-p 8545 \
--db ./0x_ganache_snapshot \
-m "concert load couple harbor equip island argue ramp clarify fence smart topic"

参考


相关文章