2

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

 3 years ago
source link: https://blog.dteam.top/posts/2019-02/%E9%9B%86%E6%88%900x%E4%B8%BA%E9%A1%B9%E7%9B%AE%E5%B8%A6%E6%9D%A5%E5%8E%BB%E4%B8%AD%E5%BF%83%E5%8C%96%E4%BA%A4%E6%98%93%E8%83%BD%E5%8A%9B.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前文介绍过 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。

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

  • orderSource,订单来源,可以是 Relayer 服务端点和一组签名的订单。
  • availableAssetDatas,可以通过此 Instant 购买的 Token
  • additionalAssetMetaDataMap,购买自定义 Token 时需要
  • affiliateInfo,抽成信息,指定地址和比例

前文也说过,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。此外,从微服务架构的角度,将其理解成为订单服务也未尝不可。

在整个交易过程中:

  • Maker 将订单发给 Relayer
  • Taker 从 Relayer 获得订单
  • 然后,Taker 将订单直接发给 0x 协议智能合约执行订单
  • 合约完成原子转换,达成双方交易

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

  • Matching,Relayer 接收和广播的订单其 Taker 必须是自己控制的那些 Taker。
  • Open orderbook,订单的 Taker 若是 0x0000000000000000000000000000000000000000,它就会被接收和广播。
  • Quote provider,Relayer 准备买 Token 时采用。
  • Reserve manager,Relayer 准备卖 Token 时采用。它允许 Relayer 一次性卖出大量的 Token,而 Taker 可以按需购买。比如,Relayer 准备卖出 10000 个 Token,甲看到后可以买 100,乙可以买 10,等等,总数不超过 10000。

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"

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK