# 剖析DeFi产品之ApeX Protocol：概述篇

By [Keegan小钢](https://paragraph.com/@keeganlee) · 2022-02-21

---

前言
--

**ApeX Protocol** 是一款新的 DeFi 产品，其定位为**衍生品协议**，但与目前流行的 **dYdX** 和 **Perp** 都大不相同。ApeX Protocol 有几个关键特性是其它衍生品协议所不具备的：

*   **Permissionless**：用户可以无需许可地创建任何交易对
    
*   **Two-way Futures**：既支持正向合约，也支持反向合约
    
*   **eAMM**：Elastic AMM，只需提供一种真实资产作为流动性的 AMM
    
*   **PCV**：Protocol Controlled Value，即协议控制价值
    

编写此文时，ApeX Protocol 主网还未上线，但测试网已经运行了一段时间了。合约代码的 Github 地址也开放了，审计报告也公开了。

*   **官网**：[https://apex.exchange](https://apex.exchange)
    
*   **Github**：[https://github.com/ApeX-Protocol/apex-protocol](https://github.com/ApeX-Protocol/apex-protocol)
    
*   **审计报告**：[https://github.com/ApeX-Protocol/apex-protocol/blob/master/docs/audit\_report.pdf](https://github.com/ApeX-Protocol/apex-protocol/blob/master/docs/audit_report.pdf)
    

eAMM 模式
-------

ApeX 协议的底层交易模式采用了 **eAMM** 模式，称为**弹性自动化做市商**模式。

每个交易对的底层实现，是和 UniswapV2 类似的**恒定乘积做市商**模式。不同的地方，首先是**流动性提供者（LP）** 无需像 Uniswap 一样提供两种真实资产来注入流动性，而只需注入单种真实资产，该种资产也称为**基础资产**，而另一种资产则是**弹性供应**的**虚拟资产**。

比如，交易对 WETH/USDC，WETH 为基础资产，USDC 为虚拟资产。那 LP 提供流动性时，只需要注入 WETH，而 USDC 的数量则是自动计算出来的。当添加的流动性为**初始流动性**时，会从**价格预言机**读取出交易对的价格，根据价格算出 USDC 要同步增加到 eAMM 池子里的储备量。而添加的流动性不是初始流动性的话，则根据池子自身的价格来计算 USDC 的增量。

举个例子，假如 LP 注入 0.2 个 WETH 来添加初始流动性，从价格预言机读取到的 WETH 价格为 3000 USDC，那就往池子里增加 0.2 ETH + 0.2 \* 3000 USDC 的储备量，其中，0.2 ETH 是真实资产，而 0.2 \* 3000 = 600 USDC 则是自动供应的虚拟资产。若非初始流动性，而池子自身的价格为 2900 USDC，那就往池子里增加 0.2 个 ETH 的真实资产和 0.2 \* 2900 = 580 USDC 的虚拟资产。

LP 提供流动性之后，和 UniswapV2 一样也会得到代表其份额的 **LP Token**。LP 要移除流动性时，则将 LP Token 返回给 eAMM 池子进行销毁，而池子则根据份额占比返回对应的基础资产给到 LP。

另外，eAMM 与其他 AMM 模式还有一个地方不同，那就是引入了 **Rebase** 机制。当 eAMM 池子的价格与外部预言机的价格偏差较大时，就可触发 Rebase，此时就会自动增加或减少 eAMM 池子里虚拟资产的数量，让 eAMM 的价格和外部市场价格保持一致。这种机制将会使得 eAMM 的价格与外部市场价格始终保持在一个合理的偏差范围内，避免出现独立的插针行情。

永续合约
----

ApeX 协议目前提供的衍生品为永续合约，既支持正向合约，也支持反向合约。比如，交易对 WETH/USDC 和 WBTC/USDC，若保证金都为 USDC，则是正向合约；若保证金分别为币本位的 WETH 和 WBTC，那就是反向合约。

在 ApeX 底层智能合约实现中，一个交易对是用 **baseToken - quoteToken** 的方式表示的，baseToken 为保证金资产，而 quoteToken 则为虚拟资产。因此，对于 WETH/USDC 交易对，其正向合约在底层智能合约的交易对为 USDC - WETH，而反向合约则为 WETH - USDC，在底层是两个不同的交易对。

不管是正向合约还是反向合约，任何交易对都可由任何用户无需许可地自由创建，这也是其它衍生品协议目前还不具备的一个特性。

从交易流程上来说，交易者通过充值保证金资产来进行开多或开空。在底层智能合约层面，每个账户在每个交易对都只会维护一个仓位，可以对该仓位进行追加或减少保证金，也可以进行加仓或减仓，支持全部平仓也支持部分平仓，甚至可以反向开仓。

还有，其它衍生品交易协议基本都是设置固定的最大开仓杠杆倍数，因此，指定保证金下的最大开仓量也是固定的。而 ApeX 协议的最大开仓量则是动态计算的，其计算公式如下：

![](https://storage.googleapis.com/papyrus_images/901750a3e6b7010d43b29d7655bc67552c87ff1629d8ca6c772814f8abfc22a4.png)

该公式主要涉及到几个参数：开仓保证金率 **MarginRate(open)**、用户开仓保证金数量 **Margin(acc)**、eAMM 池子的深度 **vUSD(pool)**、价格 **MarkPrice** 和滑点保护的系数 **beta**。

其中，影响最关键的是开仓保证金率和池子的深度。当用户的开仓保证金相比池子的深度来说比较小的话，那最大开仓量主要由开仓保证金率决定，该保证金率也相当于一个固定的最大开仓倍数。而随着用户的开仓保证金提高，第二项对最大开仓量的限制就会逐步增大，使用户实际可开杠杆倍数随着资金量增大而减小。这种方案，兼顾仓位安全性的同时，也提高了资金利用率。

PCV
---

在大部分 DeFi 应用中，流动性都是其最关键的存在，流动性就是价值所在。但在 **DeFi 1.0** 的应用中，其流动性基本都是控制在用户手里的，用户可以自由地添加流动性，也可以随时撤走流动性。很多应用都会通过各种激励措施来刺激用户保留其流动性，但一旦减低了激励或其它竞品提供了更高的激励，那用户就很可能会撤走流动性。所以，本质上，是用户控制了价值，DeFi 协议是很被动的。

为了改善这种情况，**DeFi 2.0** 就有了 **PCV** 的尝试，尝试由协议来控制价值。PCV 的基本思想就是流动性不再单纯地全控制在用户手里，而是协议本身也可以拥有流动性。如此，这些由协议控制的流动性就可以长期锁在协议里，可以保证稳定的流动性。而且，因为流动性还是可以产生收益的，不断累积的收益就可以通过不同策略实现再增值，从而让协议拥有更多价值。

ApeX 协议主要是通过 **Bonding** 机制来实现 **PCV**。其基本原理是通过出售打折的 **APEX**（ApeX 协议的治理代币），来捕获用户的真实资产，并将得到的资产注入到 **eAMM** 中添加流动性。如此一来，这些流动性就是协议所拥有，而不再是用户所拥有。

而且，协议自身控制的这些流动性，还可以不断从 eAMM 中赚取到交易手续费，累积的手续费就可以通过不同策略复投来产生更多收益。

技术架构
----

在技术实现上，整个 ApeX 协议其实可以划分为**主协议**和**外围协议**两大块，主协议实现了最核心的交易功能，而外围协议则包含了好几个模块，主要包括 **Bonding**、**Staking** 和 **Referral** 等。

下面我们来看看 ApeX 协议的技术架构，这里主要说的是**智能合约层面**的架构，这也是整个协议的核心。

### 主协议

主协议的架构图如下：

![](https://storage.googleapis.com/papyrus_images/be657a03043a0b98f7668adfdb4c7080e7a0804cf8264a95ea7c571330fedf98.png)

参与主协议的用户群体中，主要有四种角色：

*   **Trader**：交易者，使用协议的主要用户群体。
    
*   **LP**：Liquidity Provider，流动性提供者，也是 Trader 的交易对手方。
    
*   **Liquidator**：清算人，可对达到清算门槛的持仓单执行清算操作，并得到清算激励。
    
*   **Arbitrager**：套利者，当内部格与外部预言机价格偏离较大时，就可通过 rebase 调整市场价格。
    

主协议主要包括以下合约：

*   **Router**：Trader & LP 与主协议交互的主要入口。
    
*   **Factory**：用来创建和查询交易对的合约，为了避免单 Factory 出现合约代码超 size 的问题，所以拆分为了 PairFactory、AmmFactory、MarginFactory 三个合约。
    
*   **Amm**：实现 eAMM 的底层合约，每个交易对都有一个 Amm 合约实例。同时继承了 LiquidityERC20，即 LP Token 合约。
    
*   **Margin**：管理用户仓位的底层合约，每个交易对也有一个 Margin 合约实例，和 Amm 实例绑定。同时继承了 Vault 接口，管理着真实资产。
    
*   **Config**：管理着主协议用到的所有配置参数。
    
*   **PriceOracle**：价格预言机合约。
    

### 外围协议

外围协议的架构则如下：

![](https://storage.googleapis.com/papyrus_images/96efa412514323feb829ccf55a6f0c8bf4a31848a7b685783efc7fef1ad1e925.png)

外围协议主要包含了三个模块：**Bonding、Staking 和 Referral**。对应三种参与者：**Bonder、Staker 和 Trader**。

**Bonder** 可通过 **bond** 的方式，支付某种资产给到 **BondPool** 以折扣价格获得 **APEX**，BondPool 会将收到的资产转投入 **Amm** 提供流动性，并将获得的 **LP Token** 交由 **PCVTreasury** 统一管理。这也是前文所说的实现 **PCV** 的方式。

**Staker** 可将 **UniswapV2** 或 **SushiSwap** 等外部 DEX 的 **APEX-WETH** 交易对的 LPToken 质押到 LPTokenPool 赚取 APEX 代币，赚取到的 APEX 还可以再质押投入 APEXPool 赚取更多的 APEX 代币。

**Trader** 则可通过不断交易，实现交易挖矿，赚取 APEX 代币。另外，Trader 还可以发展下线，邀请其他 Trader 来参与交易，赚取邀请奖励。

总结
--

本文作为概述篇，只对 ApeX Protocol 做了一些简单的介绍，旨在对这一款新产品有一个初步认识。后续文章将分模块深入剖析一些设计和实现细节，敬请期待！

* * *

文章首发于「Keegan小钢」公众号：

[https://mp.weixin.qq.com/s?\_\_biz=MzA5OTI1NDE0Mw==&mid=2652494413&idx=1&sn=be5fb7cbe3af2174430802a3c4cd9d8b&chksm=8b68505dbc1fd94b499ba372d494d7a351eab428788e8aa6dfb9e05d4572d7c52b6ae3364968&token=1693026129&lang=zh\_CN#rd](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652494413&idx=1&sn=be5fb7cbe3af2174430802a3c4cd9d8b&chksm=8b68505dbc1fd94b499ba372d494d7a351eab428788e8aa6dfb9e05d4572d7c52b6ae3364968&token=1693026129&lang=zh_CN#rd)

---

*Originally published on [Keegan小钢](https://paragraph.com/@keeganlee/defi-apex-protocol)*
