zoukankan      html  css  js  c++  java
  • Hydro:DeFi 作为去中心化交易协议的依归

    编者注:本文为 Hydro 交易协议团队成员代世超和雷达熊作品。在我看来,他们不仅是分析了现有去中心化交易协议中的一些问题,更重要的是给交易协议找准了一个定位。

    今天讲一个 “给淘金人卖水” 的生意。

    这一波淘金人就是各种 DeFi 项目(Decentralized Finance 去中心化金融)。

    何谓 DeFi?

    2019 年 3 月,The Block 媒体统计的 DeFi 市场长这样:

    1

    - 2019 年 3 月-

    相比于半年前,DeFi 市场,从 “稀疏” 到 “密集” 。

    - 2018 年 10 月-

    目前的 DeFi 项目主要建立在以太坊公链上,以太坊本身的市值已经在 180 亿美金左右,仅仅在以太坊生态,DeFi 都将是一个不小于百亿美金的市场

    DeFi 项目可分为:稳定币、去中心化交易所、支付、指数产品、金融衍生品包括借贷市场和预测市场等。

    DeFi项目的核心是:通证化一切资产,随时随地交易。

    关键词拆开看:

    • 通证化。不管链上原生资产、还是链下资产,都以通证的形式流通;
    • 一切资产。资产的概念将进一步扩张。不只是期货、石油、黄金、产权等真实资产上链;以预测市场为例,任何事件都可以通过 “对赌” 的形式包裹成链上资产赋予流动性,创造收益和风险。
    • 随时随地交易。区块链账本 24 小时无休;没有准入门槛和身份、地理限制。

    前半句 *“通证化一切资产” * 是现在各种 DeFi 金融衍生品项目专注做的事。开辟细分的通证化市场,并为之设计一套自由公平的玩法。

    比如将股票、大宗商品通证化的 UMA;将法币资产通证化的 Dai 等稳定币;将事件通证化的预测市场项目 Augur、Veil、Flux、BlitzPredict 等等。

    后半句 “随时随地交易” 则是去中心化交易平台/协议专业负责的事。

    前者为后者提供应用场景;后者为前者支持流量入口。

    DeFi 的流量入口,谁的需求,谁来供给?

    DeFi 产品往往需要自建本地流量入口,来形成一个流量闭环:

    MakerDao 做了 Oasis,dYdX 做了 expo,Dharma 做了 Level。

    这些流量入口本质上就是一个轻量级的去中心化交易所(DEX):只处理与自己项目相关的交易就足够。

    但即使是轻量级DEX,也不是DeFi项目方能 “顺手” 就做好的事。

    因为交易所是一个需要强运营和专业经验的事儿。自己从头搭建交易平台的开发和运营成本过高。

    所以,项目方会选择利用已有的开源技术来集成所需要的交易平台。

    DeFi 项目方需要什么样的去中心化交易开源技术呢?

    去中心化交易平台的核心部件是:订单簿、撮合系统、结算合约。分别对应前端、后端和合约层。

    DeFi 项目对自家流量入口的需求是:

    • 前端的订单簿和 UI 自定义、自管理;
    • 后端的撮合,和结算合约利用现有开源技术,以达到最少的开发成本和最好的交易体验。

    那么,现在对于这样的交易系统的市场供给有哪些呢?

    以交易的撮合和结算在链上/链下来划分交易模式。

    • 撮合引擎在链上/链下导致了交易效率的高低;
    • 结算在链上/链下决定了资金的安全性

    3

    中心化交易所,因为资产不在链上,无法和智能合约交互而无缘DeFi。

    去中心化交易所,都将资金结算放在链上,以保证资金的去托管化来实现安全性。而对撮合的不同处理,衍生出3种不同的交易模式:

    1. 链上模式:链上撮合引擎,问题是贵+慢。
    2. Open 模式:链下靠订单广播,用户抢单。导致 “订单冲突” 和 “抢先交易” 问题。即:

      • 订单冲突(order collision):多人可能吃到同一个订单,但只有一个人能成交,剩下的人都吃单失败。订单失败或成功只能等区块链的确认结果,耽误交易时机。而且,越是市场变化剧烈、交易旺盛时,冲突越严重。
      • 抢先交易(front running): 即在上述情况下,谁的 gas 费出的高,谁就更有可能交易成功,普通交易者相对于机器人脚本劣势巨大。
    3. Hybrid 模式:链下撮合引擎,链上结算合约。同时保证交易效率+资产安全。

    对于用户来讲,所谓 “去中心” 交易需要的是资金托管的去中心,而不是撮合的 “去中心” 。对于撮合,要的是高效率、高流动性。

    所以,我们认为 Hybrid 模式是在ETH 2.0前最好的去中心化交易模式。

    Hybrid 模式哪家强?

    作为一个 DeFi 项目,我要建一个交易平台,作为流量入口。在提供 Hybrid 交易模式的开源技术中,我应该如何选择?

    4

    在上述最具代表性的 Hybrid 模式交易所中,

    • DDEX 采用的是 Hydro 协议;
    • Paradex 采用的是 0x 协议;
    • IDEX 背后并没有一套开源的 SDK 开发工具包。

    那么,为我的DeFi项目搭建交易平台,现在有2个选择:Hydro 或 0x。

    0x 的 Hybrid 模式体验怎么样呢?DDEX 作为曾经的 0x relayer(中继商),在开发实践时,遇到了以下问题,可供参考:

    1.无法收手续费

    这个 bug 导致了:Relayer 无法赚钱。

    0x 要求用户购买 ZRX 作为手续费,就好像在 A 股交易时要求股民用美元交手续费。是一个给流动性带来摩擦的负面设计。

    为了能让用户用交易对中的通证直接交手续费,Relayer 采取一种 hack 的办法:用户签单时,把手续费签进订单价格。例如一个在订单簿显示价格为 100 的卖单,用户实际签署的价格为 99,价差作为手续费。

    这种 hack 不仅在工程上造成了很大的困难,又因为 0x 在撮合前不能够区分 maker 和 taker,导致了 maker 和 taker 的费率无法实现差异化。

    2.无法区分 maker 和 taker 费率

    这个 bug 导致了:无法通过 maker 手续费优惠,从供给侧鼓励流动性。

    Maker 和 taker 不同费率是维护市场公平,促进流动性的重要机制。然而在 0x 中,只有当订单被撮合,我们才知道它是 taker 还是 maker。上一点讲到,用户在发送订单前,即把手续费签到了价格中,所以不论最后当 maker 还是 taker,用户交的手续费只能设定成一样的。

    唯一的办法是 Relayer 定期向 maker 返点,这种做法成本高昂且需要 Relayer 和 maker 的相互信任。

    3.无法做到价格优化

    这个 bug 导致了 Relayer 多收用户的钱。

    在 0x 中,订单会按照用户签署的价格成交。Maker 按 maker 价格成交;在 taker按taker价格成交。听起来没毛病,但实践中会遇到这种问题:

    5

    在当前的订单簿,我下一个买单:价格120 数量 3。

    合理情况是:以价格 100 撮合第一个单,价格 110 撮合第二个单。花费 210。

    而 0x 会以我的出价 120 来收费,两笔撮合的价格都是 120,花费 240。Relayer 多收了我 240-210=30 块钱。

    Relayer 需要后续单独返还差价给用户。

    4. 无法支持市价单。

    市价单本质上是一个价格无限高的买单/价格无限低的卖单,不论作为 taker 还是maker,我的成交价格都是 maker 价格,0x 做不到,所以 0x Relayer 高别市价单。

    5. 甚至,取消订单需要缴纳 Gas fee。


    为了解决以上问题,Hydro 做了以下优化:

    • 按照计价货币收取手续费—— Relayer 利好

    • 区分 maker 和 taker,并在合约层提供 maker 费率优化和返点—— 做市商利好

    • 价格优化——用户利好

    • 支持市价单——用户利好

    • 免费取消订单——用户利好

    Relayer 利好、做市商利好、用户利好本质上都是流动性利好。

    哪项交易技术,能够最大化的促进流动性,带来最好的交易体验,才是 DeFi 产品的最终选择。

    毕竟,在投资 3 要素:收益/风险/流动性中,DeFi 产品相对于传统金融,根本优势不是更高的收益、更低的风险;

    而是不局限于谁来交易、交易什么、什么时间交易、在哪儿交易,以此带来的无限流动性。

    所以,一切对 DeFi 流动性造成摩擦的技术,终将被淘汰。

    在给 DeFi 淘金者卖水的生意里,谁的水流动性最好,生意就属于谁。


    查看Hydro SDK 开源链接:

    https://github.com/HydroProtocol/hydro-sdk


    作者: 代世超@Hydro,雷达熊@Hydro

  • 相关阅读:
    转载 线程池 异步I/O线程 <第三篇>
    转载 线程初步了解
    gdal库中设置prj4库全路径的用法
    比较ArrayList、LinkedList、Vector
    JavaScript创建日志文件并记录时间的做法
    从length与length()开始谈Java
    Java异常处理示例
    hudson添加批处理编译命令的注意事项
    使用相对路径导入ado库的方法
    如何将字段中带逗号的SQLite数据库数据导入到MySQL
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313334.html
Copyright © 2011-2022 走看看