深入 GMX V2 - 介绍
2025-05-26 10:48
Coset
2025-05-26 10:48
订阅此专栏
收藏此文章

前言

GMX 是一个去中心化交易所(DEX),专注于现货和永续合约交易,以其低费用、零滑点交易和高杠杆功能在去中心化金融(DeFi)领域占据重要地位。由于团队保持匿名,且文档较为潦草。市面很难找到详细介绍 GMX V2 的资源。这极大地影响了 GMX 相关量化策略的研究。对此,我们不得不花了一些时间对 GMX V2 设计以及实现进行整理,并撰写了这个系列文章。

本文面向的对象是 Defi 的研究者,仅限技术讨论,不涉及任何投资建议。 

由于本文内容大多通过代码整理,难免有疏漏和错误,欢迎各位读者讨论并指正。

GMX V2 介绍

GMX 最初于 2021 年 9 月以 Gambit Exchange 的名称在 BNB Chain 上推出,随后更名为 GMX,并全面迁移至以太坊 Layer-2 解决方案 Arbitrum,并在 2022 年初扩展至 Avalanche 区块链。GMX 的核心目标是提供一个高效、透明且用户友好的去中心化交易平台,通过非托管的钱包交易机制,使用户能够完全掌控自己的资产。2025 年 3 月,GMX 进一步扩展至 Solana 区块链(以 GMX-Solana 的形式)。截至 2025 年,GMX 已成为 Arbitrum 和 Avalanche 生态系统中领先的衍生品交易平台,累计交易量超过 2770 亿美元,用户总数超过 72.8 万。

目前 GMX 仍然在迭代中,后续的计划见这里[1]

GMX 项目有 4 种代币:

  • GMX:GMX 项目的治理代币
  • GLP:GMX V1 版本的 LP 持仓凭证
  • GM:GMX V2 版本的 LP 持仓凭证
  • GLV:GMX V2 的进阶版本。在 V2 上构建了一个 Vault 概念。投资 Vault 后,可以在相同抵押品的所有池中,挑选自动挑选最优的 pool 投资。目前 GLV 有两种 BTC-USDC 和 ETH-USDC。

GMX V2 pool

GMX V2 的一大改进是将各个代币的交易池独立,这隔绝了各个代币之间的影响。交对于一个池来说,有三种代币:

  1. Long token:做多代币,比如 BTC,ETH
  2. Short token:做空代币。基本都是 USDC
  3. Index token:指数代币,说白了就是永续合约要追踪的标的。

比如对于 [ETH-USDC] 池,long 和 index token 都是 ETH,short token 是 USDC。随着 ETH 价格变动, trader 会有不同的 PNL。

为了保持资金安全,对与波动比较大的代币,GMX 允许抵押相对稳定的币种。如 [ETH-USDC] 这个池,Long token 是 ETH,short token 是 USDC,index token 是 AAVE。无论 trader 和 LP,都要抵押 ETH 或者 USDC,但是收益计算依据 AAVE 的价格。

还有一种类型是单一币种池,long 和 short 都是一个币种,如 [WETH-WETH],long 和 short token 都是 WETH。 使用单一资产可以让 LP 以币本位做市,减少价格波动带来的损失.

另外,每个 Pool 都继承了 ERC20 合约,也就是说每个 Pool 就是一个 token,这个 Token 被称作 Market token,也被称为 GM。LP 在提供流动性后,会获得一些 Market token,这些 ERC20 Token 也可以再次流通。而 trader 在开仓后,GMX 不会发给 trader 任何凭证,只在合约中记录了仓位的信息。

价格

对于永续合约来说,价格是非常核心的问题,小的 CEX 肆意扎针让人心有余悸。而 GMX 价格来源使用 Chainlink Data Stream[2],减少价格操纵风险。这样做有两个优势:

  • 低延迟:价格更新频率更高(接近实时),相比 GMX V1 的传统预言机,减少了价格滞后和滑点,确保交易价格更贴近市场真实价格。

  • 防操纵:通过多源价格聚合和 Chainlink 的去中心化验证,V2 降低了单一数据源被攻击或操纵的可能性,保障价格数据的稳定性。

GMX V2 的运行机制

GMX 的核心功能是永续合约交易,通俗来说,允许 trader 抵押一定本金,并借用一部分资金做杠杆交易,交易可以做多,也可以做空。

鉴于链上资源的限制,GMX 没有采用订单簿模型,trader 借用的资金,由流动性提供者 (LP) 来提供。在这里,LP 的角色相当于 CEX 的做市商,与 trader 形成对手方。Trader 的利润,就是 LP 的损失,反之亦然。举例来说,如果市场上多头(long)的 pnl 是 1000u,空头(short)的 pnl 是 -400u,那么中间这 600u 的空缺就要由池中所有的 LP 共同承担。

为此,LP 承担了被动交易的风险,成为容易受损失的一方 (PS:很多地方都在说成为做市商都是稳赚不赔。但实际上这种说法并不科学 )。为了补偿 LP,所有交易手续费,连同借款手续费,都按照一定比例分配给了 LP。

同时,LP 的资金也被用在为 SWAP 提供流动性。这与其他 DEX 是相似的。由于 SWAP 只是 GMX 的副业,因此 GMX 的 swap 费率极低 (0.07%),相比其他 DEX 占很大优势。

为了平衡多空,GMX 设置了 funding fee 机制,这也是永续合约的核心机制。funding fee 在多头和空头之间转移,用于平衡多空双方。如果多头占优势,多头就要付给空头 funding fee,反之空头就要给多头付 funding fee。

为了平衡池中 long 和 short token 的数量,GMX 还设置了 Price Impact 机制。如果一笔交易,让池中的两种 token 变得更平衡 ( 价值比例为 1:1),那么就会得到一点奖励。如果让池中的 token 变得不平衡,就要付出额外的费用。比如,如果 pool 中 BTC:USDC 的比例是 100:98,此时 BTC 多,USDC 少。如果此时进行从 USDC 到 BTC 的 SWAP 操作,会让 USDC 增多,BTC 减少,那么 GMX 就会在输出金额中增加一些额外的奖励。price impact 有两种,分别是 position price impact 和 swap price impact。

单词表

GMX 的源码中有很多术语,读懂这些术语对看懂 GMX 的源代码很有帮助,这里整理了一些常见的术语,并介绍他们在代码中的含义。

永续部分:

  • trader:进行永续交易的用户,通过 index price 的变动获取收益。
  • long:做多
  • short:做空
  • open interest:trader 的头寸,通常这个概念偏向于金额
  • position:trader 在做永续合约交易后,所开的头寸。这个概念偏重于用户投资了这个东西,得到了这个衍生品。
  • increase position/decrease position:trader 开杠杆或者平仓的行为.
  • Order:特指 increase position/decrease position/swap 操作的订单,与 LP 无关
  • collateral:进行合约交易时,trader 抵押的资产。
  • funding fee:平衡多空双方的费用.
  • position price impact:平衡 pool 中两种代币的费用。
  • borrowing fee:trader 在加杠杆后,collateral 以外的资金属于向 LP 的借款,因此要对这部分资金支付借款手续费。
  • PNL:trader 做永续合约交易的收入或者损失。

LP 部分:

  • LP:为池提供流动性的用户。通过获取手续费,以及做 trader 的对手方获取收益。
  • deposit:LP 提供流动性行为
  • withdraw:LP 撤出流动性的行为
  • pool amount:池中所有 LP 质押的资金的总量。
  • pool value:池中所有 LP 所能获取的价值。这个价值包括 LP 抵押的 token,手续费收入,pnl,和 position price impact。
  • market token amount:LP 所持有凭证的数量。表示提供了多少流动性。这个 token 就是 Pool 本身。
  • swap price impact:平衡 pool 中两种代币的费用。

其他

  • keeper:执行交易的服务器。
  • claimable fee:手续费收入有一部分 ( 通常是 37%) 被划为 claimable fee,这部分费用会由 keeper 定期收走。
  • capped:受限制的,有时候金额会受到一些限制,比如 cappedPNL,也就是 trader 能够获得的 PNL 不能超过这个限制。
  • Virtual Market:在 GMX V2 中有虚拟市场的概念,这个概念和 price impact 相关,多个 pool 会共享一个 virtual market id,形成一个虚拟市场。计算 price impact 的时候会比较 pool 和虚拟市场的平衡性,按照小的值像用户收取 price impact,减少用户 price impact 的支出。

资金模型

在解析 GMX V2 的时候,最让人困惑的部分就是 GMX pool 中,资金分为多少部分,每个部分是什么关系。只有理解了这一点,才能真正了解 GMX 池的运作方式。我根据 GMX 的代码整理了一个 GMX 的资金模型。图中灰色部分代表整个交易池,实线代表每部分的资金,虚线是该资金来源的说明。

GMX struct
GMX struct

Pool amount

蓝色的部分是 pool amount,这个名字非常容易混淆,让人以为这是池中所有 Long/Short token 的数量。到区块链浏览器看一下就会发现,Pool 的余额和 Pool amount 是对不上的。实际上 pool amount 仅仅是 LP 对应资产,仅占池子代币余额的一部分。

LP 通过 deposit 向池内注入资金。原则上,注入的资金中,long 和 short 的比例应该是 1:1,也就是应该尽量维持 long 和 short token 平衡。如果比例不均衡甚至只抵押一个币种也可以。如果只存入 long,会有一半被兑换为 short,同时收取 ( 或者发放 ) 对应的 swap price impact。

除了用户的 deposit,pool amount 中另一个非常重要的部分是 Realized PNL。前面说过 trader 互为对手方,如果 trader 盈利,就要从 Pool amount 中拿走一部分钱作为利润。如果 trader 亏损,就会把 trader 的一部分 collateral 扣掉,并充值到 pool amount 中。不过,这个「转帐」并不是时时刻刻进行的。比如 trader Alice 以 200u 的本金投资了多头,当 index price 上涨,Alice 得到了 100u 的盈利,此时这 100u 仅仅属于账面上的盈利,还没有落到 Alice 的口袋中,因此它属于 Pending PNL。而且此时 LP 那边,pool amount 的数量也不会变化。只有在 Alice 关闭头寸的时候,这 100u 连同 200u 的本金一起转入 Alice 的钱包。而这 100u 对 LP 形成了 -100u 的亏损,pool amount 会扣掉 100u。此时 pending PNL 变成了 realized PNL。

需要注意,尽管 pending pnl 对 pool amount 不会造成影响,但是对 pool value 还是有影响的。pool value 代表了 LP 的所有资产,Pending 值也包括在内。


Alice‘s position
Pool amount
Pool value
投入 200u
0 + 200 = 200
不变
不变
价格上涨,Alice 盈利 100u
200 +100 = 300
不变
-100
Alice 止盈,关闭头寸
300 - 300 = 0
-100
-100

LP 还有一块稳定的收入就是手续费,包括

  • Position fee:永续交易的手续费
  • swap fee:swap 交易和 LP 交易的手续费
  • borrowing fee:永续头寸的资金占用费.

另一个比较小的部分是 Realized position price impact。这部分是 trader 的 order 产生的。用于平衡 pool 中 long/short token 的数量.

Collateral

橙色的部分是 Collateral,存放的是 Order 的抵押资金。 这部分其实是一个虚拟的部分。Pool 中只用了一个 Collateral Sum 记录了总的抵押量。具体每个用户有多少抵押,被记录在了每个 Position 对象中。

用户对头寸的操作是通过 Increaes 或者 decrease。抵押的金额乘以杠杆,就是 Open interest,比如用户抵押了 5,开了 10 倍杠杆,Open interest 就是 50。合约会记录总 Open Interest,这个数据很重要,计算 PNL 和 borrowing fee 都会用到。trader 开仓有四种情况:

  • 做多 (long):
    • 抵押 long token
    • 抵押 short token
  • 做空 (short):
    • 抵押 long token
    • 抵押 short token

合约会单独记录每种情况的总 Open interest。

Open interest 中多出来那部分钱 ( 按照上面的例子就是 50-5=45),可以看作 trader 是从 LP 那里借的,所以要支付 borrowing fee。

而随着 Index price 的变化,用户的 Open Interest 会变多或者变少,这部分变化就是 PNL。在用户关闭头寸之前,它是随时变化的,没有写入 LP 的资金池 (pool amount) 中,所以它处于 pending 的状态。

其它

Pool 还有几个独立于 Collateral 和 pool amount 的部分。最重要的是 funding fee,这部分用于平衡多空双方。占优势放需要支付 funding fee,另一方则会收到 funding fee。用户 funding fee 会根据 fundingFeeAmountPerSize 积累,如果如果需要支付,会统一在 decrease 的时候扣除。如果有盈余,则会被转入 user claimable funding fee,用户需要单独发起交易领取。

swap price impact 是 swap 交易 ( 包括 LP 的 deposit 和 withdraw) 相关的 Price impact。

claimable fee 与 pool amount 中的 realized fee 同源。所有的手续费,会有 63% 分给 LP( 也就是转入 pool amount 成为 realized fee),剩下的 37%,则会转入到 claimable fee 中。keeper 会定期到各个 pool 中收取这些手续费。注意分配的比例是可配置的,不同的池可能不同。

总结

这篇文章介绍了 GMX 的运作方式,基本概念,以及资金存放的方式。后面将结合合约源码,介绍 GMX 如何进行交易。

往期阅读

Uniswap 系列研究

Zelos 小组产出


参考资料

[1] 

这里: https://gov.gmx.io/t/gmx-v2-2-v2-3/4223

[2] 

Chainlink Data Stream: https://docs.chain.link/data-streams

Coset 

致力于促进不同个体之间有效的、深度的交流与协作,激发更多创新和创造。

关注我们的社交媒体,了解更多动态:

Website:https://coset.io/ 

Twitter:https://twitter.com/coset_io

Telegram:https://t.me/coset_io

Youtube:www.youtube.com/@coset_io
Contact:emily@coset.io


【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

Coset
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开