聊聊去中心化永续合约交易所的模型演变

相关研究主要是去年做的,所以部分结论可能已经过时,而且没有收录很多新内容。

trader会关注去中心化永续合约交易所在模型方面的哪些细节?核心模型、部署在哪条链、如何获得市场价格、滑点、如何平衡多空比、交易所内的合约价格如果与外面的现货价不同会怎样、交易者会不会赚太多钱导致项目出现巨亏。

先解释一下为什么关注上面这几点。我们知道像binance、okx这些中心化交易所,流动性都在订单簿,来交易的用户要么是限价挂单(maker),要么是市价吃单(taker)。交易所理论上只赚交易的手续费,不会亲自下场跟交易者对赌。

为了维持订单簿上有足够厚的流动性,交易所会给做市商更优厚的手续费条款(挂单0手续费甚至负手续费),或者与做市商直接签订合同,比如某些品种盘口上下百分之几之内要有多少流动性之类的。

我们在交易所买的网格策略,或者去uniswap上面存LP,本质上也都是做市。我们散户没有能力影响行情,做市就是赌币价在一定范围里震荡,如果涨多了或者跌多了,做市都会亏。

专业的做市商机构,风控会强很多,一方面是在预判到要来行情的时候,主动把盘口流动性调整到跟交易所签的合同的最低标准,一方面是会在做市的同时进行对冲,或者做一些趋势策略。

去年比较著名的FTX崩溃,本质上就是Alameda挪用用户的钱做市,而去年市场单边下跌,做市亏了太多,最终资不抵债。对交易所来说,最明智的做法是吸引外部的钱进来互相做对手盘,自己不要下场,只收手续费就好。

了解上面这些事,我们再来看去中心化永续合约交易所是怎么做的。

DYDX

沿用了中心化交易所订单簿模式,靠做市商挂单提供流动性。因为底层用的是starkware技术,相当于专用L2,性能比较强,所以可以做出订单簿。在其他通用L2上面很难做出订单簿。据说下个版本要用cosmos技术自己搭一条链。

订单簿模式下,每一份多单都有一份空单匹配,一个用户赚的是另一个用户亏的,交易所只需通过oracle获得现货价格,在永续合约与现货价格偏离比较多的时候,设置资金费,鼓励套利者把价格推回去就好了。对项目方来说风险最小,效率也很高,但是很多存储和计算都要在链下进行,会导致“不够去中心化”的批评。

GNS

token叫GNS,平台叫gains network,产品叫gTrade。主战场是polygon。核心模型是吸引用户把DAI放到池子里,跟trader做对手盘,赚交易手续费(存池子获得的凭证叫做gDAI)。如果trader赚了,DAI池子就会亏;如果trader亏了,DAI池子会赚。

这个模式的优点是,你可以上架任何oracle支持的东西,甚至是股票、外汇。所以GNS成为了大家玩长尾资产的永续合约交易所。这个模式的缺点则是抗风险能力比较差,因为一份多单并不会匹配一份空单,极端情况下可能只有多单或者只有空单。

GNS用资金费来平衡多空比,持仓多的一侧要向持仓少的一侧每小时付资金费。在通常情况下这个机制可以鼓励套利者来弥补少数一方的持仓,但极端的单边行情则不行。去年LUNA暴雷期间,GNS上面有大量空单在获利,把池子里的钱都赚走了,后来项目方自己掏钱补了亏损。

为了避免类似情况再发生,GNS设计了动态滑点:持仓量偏斜较大时,继续开仓会有很大的滑点;如果交易品种在cex上面流动性很好,开仓时滑点就比较小。这样就能保证极端行情时不至于有人来开很大的单,把池子的钱都赢走。

SNX

最早是ETH上面的项目,后来在OP上发展,交易前端叫Kwenta,计价资产是质押SNX铸造出的sUSD。这里补充一句,在L1上面能做现货交易所,但很难做合约交易所,一方面12秒才出一个块,一方面gas太高。所以在OP、ARB这些L2推出之后,衍生品市场就繁荣了。

SNX的模型比较复杂,它最早是一个合成资产债务池,用户存SNX token,铸造sUSD(本质上是计价为1 usd的债务),然后用sUSD与协议卖卖其他的合成资产,比如sBTC。在用户手里的sToken是资产,在协议那边则会记成债务。系统会动态地记算所有人的总债务,并进行再分配。

举个例子,假设系统只有甲和乙两名用户,分别铸造了100 sUSD,这时系统记了总债务200 sUSD,甲和乙分别负债100 sUSD,而甲和乙手里分别有100 sUSD的资产。现在甲向系统换了价值100 sUSD的sBTC,乙没有操作。后来sBTC价格翻倍,甲向系统换回了200 sUSD。

这时甲手里200 sUSD,乙手里100 sUSD,系统记账总负债变成了300 sUSD。由于甲和乙铸造债务时的比例相同,系统重新分配债务,甲和乙的债务都变成了150 sUSD,甲还债之后剩下50 sUSD是利润,而乙什么都没干却欠了协议50 sUSD。也就是说,如果你赚了,所有人的债务都会增加,但你的资产会增加更多;你亏了,所有其他人的债务都会减少。

由于sUSD与sBTC是在协议里根据oracle价格兑换,没有滑点,而sUSD/USDT、sBTC/WBTC这些都在curve上面有低滑点交易对,所以有时候大额WBTC兑换USDT,走SNX这里的滑点更低。

SNX靠上述PVP机制,吸引很多人进来stake SNX铸造sUSD,制造了一个债务池。基于这个债务池,又做了一个永续合约交易所,让债务池来做交易者的对手盘,也能提供零滑点。这里的零滑点其实就是所有stake SNX的用户承担了滑点的损失。和GNS一样,没办法从本质上解决极端行情的问题。 

GMX

arbitrum上面的项目,核心思路是创建GLP资金池作为trader的对手盘。首先吸引大家把USDC和ETH存进来,trader过来开多,就相当于借给他一笔ETH,trader过来开空,就相当于借给他一笔USDC。这样trader如果亏钱,GLP就赚钱。

因为开多已经锁了对应数量的ETH,就算ETH涨上天,平仓的时候池子也只需要把锁的这部分ETH卖掉,卖的钱就是trader的盈利;开空已经锁了对应的USDC,就算ETH归零,池子也只不过是把锁着的这部分USDC付给trader。如果赚了钱,永远不会把GLP池子赚光。

值得一提的是,由于计价单位是USD,而GLP池子存的是USDC和USDT,代码里有分情况写了1 USDT> 1 USD和1 USDT<1 USD的情况要怎么处理,总之协议不会在这方面吃亏。

这个模型虽然用起来是永续合约交易所,但本质上是把池子里的币借给你,用户在开仓时不必顾及滑点和资金费,但要付借币的利息。总持仓占比越高(锁住的或者说被借了的币越多),利息就越高,最高是每小时万分之一。

因为池子里都是现货,所以对外也是一个现货交易所,而且同样没有滑点。池子通过调整交易手续费,来平衡内部各个币种的比例。如果池子缺ETH,那么用ETH来这里换其他的币,可以比其他dex手续费都低,这样就能自发地维持平衡。

这种纯现货模型的优点是协议本身很安全,资金池也相对比较平稳,存入池子可以当作某种理财(尤其是GMX的多头持仓比较多,进一步对冲了GLP的波动),这样池子凭证GLP就变成了一种波动较低的生息资产,容易玩各种DeFi Lego。

缺点则是只能玩BTC和ETH,没法玩长尾资产。目前GLP只支持BTC、ETH、LINK、UNI这四种币,且后两种都是象征性地赋予1%权重。

Derivio

zksync生态的项目比较少,目前也没有龙头跑出来。这是一个测试网项目,好像快要上主网了,模型比较有意思,白皮书能看出设计者数学很厉害。它的底层是类似GLP的资金池(这里叫DLP),trader也是来跟池子做对手盘,在GLP模型上加了一些创新,而且集合了期权功能。

永续合约方面相比GMX的创新在于,Derivio这里允许交易池子里任意两个币种组成的合约,比如类似币安4月份上线的ETHBTC合约,或者是在fud稳定币的时候交易USDT/USDC。这个实现起来倒是不难,就是同时调用了oracle喂过来的两个币的价格,做多谁就锁谁。所以这里其实不存在“做空”。

另一个创新是设计了资金费用于平衡多空比。资金费的收取方式是针对每个币种,可以算出一个long funding(就是被做多锁住的部分)和一个short funding(做多其他品种时,拿它当分母的部分,也就是做空的部分),两个相减就是资金费的流向。

至于期权功能,这里就只是简单介绍,后续会出一期比较各种期权产品。Derivio的模型是类似buffer.finance的二元市场,只不过payout不固定,而是取决于两边的开仓量。如果实在没有对手盘,trader赢的钱就要DLP池子出,但这时候payout远不如去buffer上面赌,也算一种软的风控。