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

By [dragonbro](https://paragraph.com/@dragonbro) · 2023-08-01

---

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

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上面赌，也算一种软的风控。

---

*Originally published on [dragonbro](https://paragraph.com/@dragonbro/ajZ81BTuLqGnKSQ9WW2j)*
