一文读懂去中心化的金融衍生品协议 dYdX
发布:中币网 时间:2019-02-15 00:00:00 加入收藏 打赏
一文读懂去中心化的金融衍生品协议 dYdX
2019-02-15原文标题:《用 dYdX 做空以太坊时,内部合约是怎么运作的?》
在传统的金融市场里,期货的规模可能是现货的 100 倍。显然金融衍生品是一块更大的市场。
现在许多中心化交易所除了币的买卖交易,也开始提供一部分的期货交易,做衍生品的生意。
火币在去年 11 月推出火币衍生品市场,最初提供比特币的撮合服务,后面又加上了以太坊和 EOS,前段时间他们放出了一个新闻,说自己的衍生品市场交易额已经突破了 200 亿美元大关,量看起来还不错;而 OKEx 则在更早之前就推出了衍生品服务,后面还搞了一个「永续合约」的玩法,他们大部人的用户也都是炒的期货。当然,这样的代价是一旦爆仓,大家也会骂得更凶。毕竟期货的风险加上杠杆更大,很容易一夜清零。韭菜们私底下就有句话叫,「珍爱生命,远离期货」。但另一方面,虽然现在是熊市,但因为可以做空,很多投资者押注熊市里各种币会下跌,因此很多借贷市场反而比牛市的时候表现更好。
说了这么多,想表达的观点是,加密货币现在还属于一种非常初级的金融产品,衍生品和期货这块才刚开始接入。在这种背景下,就像交易所,一开始盛行的是中心化的交易所,于是就有人想要遵循区块链的原教旨主义做去中心化的交易所,金融衍生品这块大蛋糕,也有一些人想用智能合约做去中心化的版本。
dYdX 就是一个去中心化的金融衍生品协议。这篇文章我们来了解下 dYdX 具体是怎么做的,相比中心化的金融衍生品服务,它有什么缺点和优点。
dYdX 简单介绍
dYdX 的创始人很年轻,好像是 15 年才毕业的,学计算机的,毕业后在 Uber 干过。他一开始只是抱着学习下智能合约的心态,就开始写 dYdX 的协议,后来写着写着就拿到融资了,也挺牛逼的。
具体来看 dYdX 的协议,它其实就是用一些智能合约把金融衍生品的交易规则重写了一遍,重新实现出来。
在技术上,这里面有几个关键问题需要解决:
第一个问题是怎么让用户通过合约来做空或者做多。围绕 dYdX 的协议,开发者可以推出一个特定的期货 token,比如一个 token 叫以太坊做空币,用户买这个币就可以做空以太坊,因为这个做空币的价格始终会与以太坊价格成反比。dYdX 希望后续能为每个 ERC20 的币都推出相应的期货 token;
第二个关键问题是,做空做多是需要有借贷和交易的,在传统金融模式下,这些由金融机构和中心化交易所提供,但在链上,这些事情则由智能合约自动执行,这样一来,合约就要有自己能买卖的能力,但它又不可能去接中心化交易所的 api,去和火币或者币安做交易,所以,dYdX 这部分功能是基于 0x 协议来做的,通过去中心化交易所来提供智能合约需要的流动性。
dYdX 协议现在还在持续开发中,基于这套协议,他们已经推出了一个具体的产品叫 expo,一个衍生品交易市场,目前 expo 上面只有一款产品叫保证金交易(即 margin trading,如果你跟我一样是金融白痴,可以先拉到最下面把附录里「什么是保证金交易」搞懂),上面只有两种币可以买,一个叫 sETH (short eth),用来做空以太坊;另一个叫 lETH (long ETH),用来做多以太坊。
值得一提的是,现在使用这个产品的体验已经挺流畅的了,如果你浏览器上有装 metamask,直接打开 expo 官网,买做空币或者做多币,输入具体的金额数量,然后按下回车键就能成交了。
期货的杠杆倍率、利率和到期时间都是预先设定好的,你只需要输入购买金额就可以了。我的以太坊地址实在太穷了,打码保护一下自尊。
这个体验跟传统金融衍生品的体验也不太一样。
有两个最大的不同点:
第一个不同是,整套保证金交易的机制,实际上都被抽象出来了,用户对此是「零感知」的,这简化了很多参与保证金交易的门槛和步骤,因为很多事 expo 都通过 dYdX 的协议自动帮你做完了,这些事包括:
- 自动从 dYdX 的借贷合作伙伴里寻找衍生品底层所依靠的现货资产的流动性。
- 自动从去中心化交易所里寻找交易的流动性。
- 自动负责抵押品的管理。
- 自动铸造新的做空币或者做多币,为用户提供保证金交易的服务。
第二个不同是安全性和透明性,因为你是在链上跟智能合约做交易,不是把钱打给中心化的机构。这部分的区别,跟去中心化交易所和中心化交易所的区别差不多。
那么,dYdX 具体是怎么完成保证金交易的呢?我们通过 dYdX 的白皮书了解下。
dYdX 协议的原理
dYdX 协议通过一个主要的以太坊智能合约来提供基于 ERC20 代币的保证金交易。
- 出借人通过合约签名一笔交易,指明自己愿意借出什么样的 token、借出多少数量、保证金多少、利息多少,然后就可以借款给别人做保证金交易了。这些借款的 offer 可以同步到链下的交易平台,在上面列出 order book。
- 一个用户想要做保证金交易,通过向 dYdX 的智能合约发送一笔交易,指明自己要接受哪个借款、要借多少数量、指定一个未来把这些借贷来的 token (即 owed token)卖出换成另一个持有 token (即 held token)的买盘,来开始保证金交易。
- 根据这笔交易,智能合约会把保证金从用户那里转移到合约内部,然后通过外部的去中心化交易所——比如 0x——再把这些借贷来的 owed token 以指定的买盘价格卖出去换成 held token,然后合约会一直帮我们保管这些保证金,一边帮我们自动卖出 owed token 换成 held token,直到用户再次发来另一笔交易,指定卖盘结束这次保证金交易。
在这里面,总共有两种用户,他们分别扮演借贷人和交易者(交易者可以是做空者,也可以是做多者),这两种角色围绕智能合约一起运作。
三个合约
在实现上,dYdX 协议由三个主要的智能合约构成。
- Margin contract:负责保证金交易的业务逻辑。
- Proxy contract:负责代表用户完成各种资产的转移。
- Vault contract:作为一个存储金库,帮用户托管保证金交易中的资产。
合约更详细的信息,感兴趣的朋友可以直接参考 dYdX 在 github 上的代码。
接下来,我们来看看在 dYdX 上,一个保证金交易具体经历的流程和细节是什么样的。
Offering Message
要进行保证金交易,首先需要有人借款。
这个出借人想把自己手里持有的某个 token 借出去,需要指定借出的利率和保证金,然后就把借贷消息转发到各个地方,可以是链下的平台,具体怎么让出借人和借钱的人达成一个贷款共识,也就是所谓的「撮合」部分,dYdX 的智能合约是不管的,换句话说,撮合可以通过传统的中心化的方式完成。
Buyer
保证金交易的另一部分就是买盘。买盘可以像贷款一样,通过任何方式来完成撮合,进行传播。这个买盘可以是任何价格,唯一的要求是必须由交易者选定,然后买盘的总价值要不少于交易者借款的 token 的价值。通常交易者会选择价格最好的订单。
dYdX 允许交易者使用任何标准的去中心化交易所。这一点是通过 dYdX 自己把外部的去中心化交易所的智能合约,重新封装进了另一个智能合约来完成的。这个新的智能合约叫 ExchangeWrapper,它会向保证金交易提供标准的接口。
交易者可以指定使用任何 ExchangeWrapper,不需要任何许可。这意味着任何人都可以编写、发布或者使用自己的 ExchangeWrapper。dYdX 官方实现了第一个封装 0x 协议的 ExchangeWrapper,所以任何 0x 的订单都可以被交易者用于保证金交易中。
Position Opening
要开启一个保证金交易,交易者向 Margin 智能合约发送这样一笔交易,包括以下信息:
- 接受哪笔借款。
- 一个买盘,指定怎样用 owed token 购买 held token 。
- 买盘的 ExchangeWrapper 地址。
- 希望借多少 owed token,借贷的数量。
- 保证金使用 owed token 支付还是使用 held token 支付。
- 保证金数量
- 交易者的地址
当 Margin 智能合约收到消息后,会执行以下动作:
- 确认借贷生效
- Margin 合约首先会调用 Proxy 合约,把保证金从交易者那里转移到新的地方(如果保证金是 held token,就转移到 Vault 合约里,如果是 owed token,就转移到 ExchangeWrapper 上,通过去中心化交易所交易出去。
- Margin 合约调用 Proxy 合约,把 owed token 从出借人那里转移到 ExchangeWrapper 上。
- Margin 合约记录下借来的 token 被用掉了多少,然后保存成一个 mapping。这是为了防止黑客使用签名过的借款消息发动 replay 攻击。
- Margin 合约调用 ExchangeWrapper,按照买盘的说明,把 owed token 交易成相应的 held token。在这个交易里,买家是 maker,ExchangeWrapper 是 taker。交易合约(如果是使用 0x 的 ExchangeWrapper,那么交易合约就是 0x)会确认交易信息,然后执行交易。
- Margin 合约调用 Proxy 合约,把 ExchangeWrapper 卖掉收到的 held token 转移到 Vault 合约里。在保证金交易有效期间,Vault 合约会把这些 held token 一直锁在自己的合约里。
- 这个保证金交易的详细信息被存在了合约里,通过一个公共标识映射起来。后续交易者或者出借人可以通过这个公共标识和这个 postion 进行交互。
所有这一切都是原子交易,也就是说,要么成功发生,要么完全不发生。
最终,Vault 合约里会持有一定数额的 held token,如果交易者上交的保证金是 held token,那么,这个数额就等于保证金的数额加上卖出 owed token 挣到的 held token 的数额;如果交易者上交的保证金是 owed token,那么,这个数额就等于借来的 owed token 和保证金一起卖出挣到的 held token 的数额。Vault 合约在保证金交易没有结束之前都会一直锁定这些 held token。
Closing
交易者可以选择在任何时间结束一部分的 postion。结束的方法是向 Margin 合约发送一个卖盘,这个卖盘指定,把 held token 卖掉,卖多少呢?卖出多于或等于欠出借人 owed token 的数量(包括一点利息)。这个卖盘可以指定任何价格,只要 held token 的数量(根据要结束的 position 的比例换算)足够完成支付。通常交易者会倾向于选择价格最低的订单。
当 Margin 合约收到关闭 position 消息的时候,它会执行以下动作:
- 计算当前总共欠出借人多少 owed token。使用连续复利的方式进行计算。
- 如果是通过 held token 偿还,Margin 合约调用 ExchangeWrapper 归还一定的 held token 数量(根据欠下的 owed token 的数额计算);如果是通过 owed token 偿还,则调用 ExchangeWrapper 卖出所有的 held token,买入相应的 owed token。交易过后,Vault 合约将持有等同于欠款数额的 owed token ,以及一定数额的 owed token 或者 held token,这些 token 等于保证金+交易者的利润(利润可以是负值)。
- Margin 合约调用 Proxy 合约,把欠款数额的 owed token 从 ExchangeWrapper 那里转移到出借人手里。
- Margin 合约把等于保证金+利润数额的 held token 或者 owed token 发送给交易者。
- Margin 合约从存储里删除了一个 postion,如果当前数额为零的话,或者把当前 positon 的数额根据关闭 position 的数量大小做相应的减少。
当然,不止是交易者,出借人也是可以提前终止 postion 的。出借人可以向 Margin 合约发送消息,要求交易者必须在 xx 时间之前补足多少数量的 held token 作为保证金,否则这次 margin trading 的 postion 就会被结束。交易者在限定时间之前要么必须补足保证金,要么必须偿还干净所有的 owed token。如果交易者两件事都没有及时完成,那么合约里所有的 held token 余额都会归出借人所有。
出借人根据自己的利益,会在 owed token 相对于 held token 的价格上升到保证金里的 held token 已经几乎无法购买相应的 owed token 的时候,要求结束 position。出借人可以授权第三方帮他们看管这个价格信息。第三方持续观察价格走势,一有危险就提出结束 position 的请求。这个第三方可以通过中心化的 oracle 来完成。
这样也要求交易者要随时在线,在收到出借人要关闭 position 的时候能及时响应,交齐保证金或者清还贷款。交易者可以授权一个外部合约,让合约代表自己进行一些操作,这样一来就不用保持随时在线了。这个合约可以通过运行一个荷兰拍卖合约来完成,买回相应的 owed token 欠款。
例子
上面把所有的原理和过程都说清楚了,但可能还是很难看懂。没关系,我们代入一个实际的例子,跑一遍流程,也许你就会懂了。
假设现在我想通过比特币来做空以太坊(即:我认为未来一个月,以太坊相对于比特币的价格会暴跌),那我要怎么办呢?
- 首先寻找市面上的 eth 贷款,找别人借 eth。Margin 合约把 eth 从借款人那里转移到 ExchangeWrapper 上。
- 然后要交一部分的保证金,比如 10%,用 held token 来交,也就是比特币,Margin 合约调用 Proxy 合约把比特币从你手上转移到 Vault 合约里。
- 接下来,Margin 合约调用 ExchangeWrapper,按照你给出的买盘说明,把 eth 出售交易成相应的比特币。
- 然后,Margin 合约调用 Proxy 合约,把 ExchangeWrapper 买回的比特币转移到 Vault 合约里。在保证金交易有效期间,Vault 合约会把这些比特币一直锁在自己的合约里。
一个月后,以太坊相对比特币的价格真的跌成狗了,那么你可以退出了,发消息给 Margin 合约要结束这次保证金交易,合约会执行以下操作:
- 首先计算你当前总共欠出借人多少个以太坊,使用连续复利的方式进行计算。
- 然后,如果是通过比特币偿还,Margin 合约就会去调用 ExchangeWrapper 归还一定的比特币(数量等于之前欠下的以太坊的总价值,加上事先说好的一部分利息),然后剩余的比特币就是你交的保证金+赚到的利润了;
- 如果是通过以太坊偿还,则调用 ExchangeWrapper 卖出一定数量的比特币,买入相应的以太坊,交易过后,Vault 合约将持有等同于欠款数额的以太坊 ,以及一定数额的以太坊或者比特币,这些剩下的比特币或者以太坊就等于你交的保证金+赚到的利润了。
- 当然,如果一个月后,以太坊相对比特币的价格没有跌反而涨了,那么你的利润也可以是负值。
总的过程大概就是这样。当然,还有两个问题需要注意:
- 如果出借人看到以太坊的价格反而上涨了,他怕你交的保证金完全抵押不了损失,会爆仓,那他就可以提前召回自己的贷款,回收你欠他的以太坊,或者叫你交更多的比特币作为保证金,以确保不会爆仓。
- 如果我认为未来一个月,以太坊相对于比特币的价格会暴涨,我想做多以太坊怎么办呢?把上面的 owed token 和 held token 互换一下,就能达到这个效果了,即:找别人借比特币,用 btc 交易 eth。
dYdX 的未来
去中心化的数字货币衍生品是非常有趣的一个市场,但我并不是金融专业出身,所以,我其实不知道,dYdX 这种去中心化的金融衍生品服务和中心化的相比,它们对用户来说,具体的优缺点究竟在哪?目前看起来,dYdX 的还不完善,种类相对比较单一,玩起来不够刺激?如果有金融行业的朋友有自己的独到见解,欢迎在评论里分享。
不过,我个人还是有一种感觉,衍生品这个领域,和中心化交易所与去中心化交易所的发展境况,其实是差不多的——中心化交易所目前占据主流,交易深度和流动性都更好;而去中心化交易所还比较小众,但它在未来有更多的可能性。衍生品也是如此。
dYdX 的协议现在还很简单,没有中心化交易所提供的那么丰富的期货玩法和期货品类,大部分真正在炒数字货币期货的用户,也主要是在中心化的衍生品交易市场里玩。现在我能想到的会使用 dYdX 玩保证金交易的人,应该是既懂金融又懂计算机、且不是为了挣大钱(因为 dYdX 目前还太基础了)的人,而这样的人并不多。
但 dYdX 的协议如果未来得到更完善的发展,那它实际上可以作为一个桥梁,去连接许多不同的金融服务。换句话说,dYdX 可以产生很多以前从来没想过的智能合约的新玩法,因为这套协议是完全开源的,任何人都可以在上面添砖加瓦,也可以通过这套协议在上面创造自己的新玩法。
传统的中心化交易所想要提供一个币的衍生品,往往需要内部做流程决策,交易所的老板觉得有搞头就推出相应的交易市场,但在 dYdX 上面,只要有人会写代码就行了,补充一个 xx 币的做空币、做多币,任何人都可以买卖。
这就像中心化交易所是用中心化的方式去上币,而 DEX 可以自由地上任何币种。你不需要有华尔街的经验和历史,就可以通过智能合约创造一个新的期货品类,(比如开个脑洞,把 dYdX 这套衍生品玩法和预测市场结合起来会怎样?ERC721 非同质化代币可以拿来做一个新的期货市场吗?),这在以前是一件不可想像的事。
这样看来,也许未来万物皆可「衍生品化」——当然,不可避免地,它可能会造成一定的问题,但也有可能会增加金融市场的活力。
附:什么是 margin trading?
所谓的 margin trading 就是保证金交易。在这种交易里面,张三找大财主借了一项资产,借完之后马上转手又卖给了李四。等到借款合约到期的时候,张三必须把借来的资产再还给大财主,当然,还要附带一部分利息。张三、大财主、李四,他们属于保证金交易里的三种角色,各取所需地挣钱。
看看下面这些详细的例子。
保证金交易有两种类型:做空或者做多。
做空(short sells)
张三觉得比特币未来一个月会跌,于是他就找大财主借了 1 个比特币,然后把这 1 个比特币以当前价格卖给李四。等到一个月后,约定张三需要还大财主 1 个比特币,再加一点利息。
如果到时比特币真的跌成狗了,那么张三可以按更便宜的价格买回 1 个比特币还给大财主,这样一借一还的差价,就是张三通过做空赚到的利润。
当然,如果比特币一个月反而涨了,那张三就完蛋了,因为他现在要买回 1 个比特币的价格,比自己当初卖出去的还要高,一借一还的差价就是自己的亏损。
做多(leveraged longs )
有做空就有做多。
李四觉得比特币未来一个月会涨,于是他去找大财主借钱,借了 4 万块钱。李四借到 4 万块钱后,立即买了一个比特币。等到一个月之后,约定李四要还大财主 4 万块钱,再加一点利息。
如果这时比特币价格确实涨了,那么李四就可以把手里的比特币卖出高于 4 万块的价钱,再还 4 万块给大财主。一借一还的差价,就是李四通过做多赚到的利润。
当然,如果比特币一个月后反而跌了,那李四就傻逼了,因为他手里的比特币已经不值 4 万块了,为了还大财主,他需要亏损。
特别值得注意的一点是,上面这些交易里,张三和李四并不是全款去找大财主借资产,而是通过一个保证金乘以倍率,加杠杆来撬动更多的资金。比如交 10%,用 4000 块钱就可以撬动 4 万块的交易,这样投资回报率就很高了,当然风险也是相对增高了很多,容易被爆仓。总之就是玩得更刺激了。而为了避免你的保证金不足以抵消你给大财主造成的损失,保证金都是即日结算的,也就是说,如果行情不妙,你可能还需要补交更多的保证金,或者大财主有权提前收回他的借款。
- 做空可以被张三用来投机,或者做风险对冲。投机大家都懂就不说了,风险对冲是怎么回事呢?比如张三觉得比特币未来一个月会跌,他手里有一堆比特币,很害怕承担这个损失,那他就可以通过做空比特币相关联的资产来赚回一点钱,减少一些可能的损失,这样就叫做对冲。
- 做多也可以被李四拿来投机,它可以产生更高的资金利用效率,因为加上了杠杆,当然也更容易血本无归,一夜清零。
- 至于借款的人,也就是大财主,他可以通过借出资产来赚钱一定的利息,作为利润。
一些延伸阅读
- 什么是期货?期货市场是如何运转的? - 傅建朝的回答 - 知乎 https://www.zhihu.com/question/19903936/answer/78060981
- dYdX 白皮书 https://whitepaper.dydx.exchange/
- expo 官网 https://www.expotrading.com/
来源:橙皮书
来源:中币网 https://www.zhongbi.net/news/blocknews/127574.html 声明:登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。 此文如侵犯到您的合法权益,请联系我们3111859717@qq.com,我们将第一时间处理。