Paper Reading — Constant Function Market Makers: Multi-asset Trades via Convex Optimization
以太坊及其他支持智能合约的区块链的兴起促使了去中心化交易所(DEXs)的诞生,像 Uniswap、Balancer、Curve、mStable 和 SushiSwap 等,它们能让参与者在无需信任中心化机构的情况下交易加密货币。传统交易所依靠订单簿匹配和执行交易,而 DEXs…
Paper Reading — Constant Function Market Makers: Multi-asset Trades via Convex Optimization
以太坊及其他支持智能合约的区块链的兴起促使了去中心化交易所(DEXs)的诞生,像 Uniswap、Balancer、Curve、mStable 和 SushiSwap 等,它们能让参与者在无需信任中心化机构的情况下交易加密货币。传统交易所依靠订单簿匹配和执行交易,而 DEXs 通常采用恒定函数做市商(CFMMs)机制。CFMMs 依据一个取决于提议交易和 DEX 当前储备的函数评估来决定是否接受提议交易。对于仅涉及两种资产的交易,通过两个函数能轻松理解 CFMMs,这两个函数分别表示为获得一定数量的一种资产所需提供的另一种资产的数量,反之亦然。但当涉及两种以上资产的交换时,理解可能的交易情况就变得更困难。不过,选择多资产交易的各类问题可被表述为凸优化问题,进而能可靠且高效地得到解决。
在一般的交易中,可能会同时交换多种资产,此时要理解恒定函数做市商(CFMMs)的情况就比较困难。当提供多种资产时,可能有许多不同的资产组合都可以用来换取某一特定的资产组合;反之,给定一个提供的资产组合,可接收的资产组合也有多种选择。因此,多资产交易的选择比单纯指定提供或接收的资产数量要复杂得多。在这种情况下,交易者可能希望提供和接收最符合其偏好或效用的资产组合(例如,能使风险调整后的回报最大化的资产组合)。
在本文中,我们利用(交易函数都是凹函数 — 常数乘积、几何平均等)的事实将各种多资产交易问题表述为凸优化问题。由于凸优化问题在理论和实践中都能够可靠且高效地求解,所以我们能够精确地解决所构建的交易问题。这就为在众多可能的多资产交易中进行选择的问题提供了一个切实可行的解决方案:交易者阐明他们的目标和约束条件,而这个问题的解决方案会确定要提供和接收的资产组合。
背景知识
区块链:区块链是一种去中心化、无需许可且公开的账本。区块链存储由加密公钥代表的账户,以及一种或多种加密货币的相关余额。执行一笔改变区块链状态的交易,会让发起者支付一笔费用,这笔费用通常支付给为网络提供计算能力的个体。
加密货币:加密货币是在区块链上实现的数字货币。每个区块链都有其原生加密货币,用于支付网络交易费用。一个给定的区块链上可能还会实现其他几种加密货币。这些额外的货币有时被称为代币,以区别于基础货币。
智能合约:现代区块链允许任何人部署称为智能合约的任意有状态程序。任何人都可以通过网络发送交易并将其发送到合约,来调用合约的公共函数。CFMMs 是使用智能合约实现的,具有交易、添加流动性和移除流动性的功能。它们的实现通常很简单。例如,Uniswap v2 仅用 200 行代码就实现了。除了 DEXs,许多其他金融应用也已部署在区块链上,包括借贷协议(例如)和各种衍生品(例如)。在区块链上运行的金融应用集合被称为去中心化金融,简称为 DeFi。
交易型开放式指数基金:CFMMs 与交易型开放式指数基金(ETFs)有一些相似之处。CFMM 的流动性提供者类似于 ETF 的授权参与者;向 CFMM 添加流动性类似于创建 ETF 份额,随后移除流动性类似于赎回。但是,ETF 的授权参与者名单通常非常有限,而世界上任何人都可以向 CFMM 提供流动性或与之进行交易。
订单簿模型:在订单簿中,用多种资产交换另外的多种资产需要进行多次单独交易。每笔这样的交易都需要支付区块链费用,从而增加了交易者的总交易成本,且该操作不具备原子性。而在 CFMM 中,多资产组合在一次交易中进行交换,要么作为一组交易全部完成,要么全部不完成,因此交易者不会面临部分执行的风险。CFMMs 相对于订单簿交易的另一个优势是其存储效率,因为它们不需要存储和维护限价订单簿,并且计算效率高,因为它们只需要评估交易函数。由于用户必须为每笔交易支付计算成本,并且在某些区块链中这些成本通常不可忽视,因此实现 CFMMs 的交易所对于用户来说通常比实现订单簿的交易所交互成本低得多。
凸优化问题


常数函数做市商
考虑这样一个去中心化交易所(DEX),它支持n>1种资产,这些资产标记为1,⋯,n,并采用 CFMM 机制。其中资产n作为计价单位,用于对其他资产进行估值和定价。
储备或资金池:DEX 拥有一定数量的可用资产储备,由向量R \in \mathbb{R}{+}^{n}表示,其中R{i}是储备中资产i的数量。
流动性提供者份额权重:DEX 维护一个包含所有流动性提供者的表格,这些流动性提供者是向储备贡献资产的主体。该表格记录了每个流动性提供者对储备的权益份额权重,我们将这些权重记为v{1},\cdots,v{N},其中N是流动性提供者的数量。这些权重是非负的,且总和为 1,即v \geq 0且\sum{i=1}^{N} v{i}=1 。随着新流动性提供者的加入,或者权重为零的流动性提供者从表格中移除,权重v_{i}和流动性提供者的数量N会随时间变化。
CFMM 的状态:储备R和流动性提供者权重v共同构成了 DEX 的状态。由于交易(或交换)、添加流动性或移除流动性这三种可能的交易操作,DEX 的状态会随时间发生变化。
提议交易(或提议交换):由交易者发起,他们提议用一系列资产交换另一系列资产。一个提议交易指定了投标组合,其资产数量由\Delta \in \mathbb{R}{+}^{n}给出,这是交易者提议交给 DEX 的资产组合;以及接收组合,其资产数量由\Lambda \in \mathbb{R}{+}^{n}给出,这是交易者提议从 DEX 接收的资产组合作为回报。这里\Delta{i}(\Lambda{i})表示交易者提议交给 DEX(从 DEX 接收)的资产i的数量。在后续内容中,我们将表示资产数量的向量\Delta和\Lambda分别称为投标组合和接收组合。
提议交易可能被 DEX 拒绝,在这种情况下,DEX 的状态不会改变;也可能被接受,若被接受,投标组合\Delta将从交易者转移到 DEX,接收组合\Lambda则从 DEX 转移到交易者。
R^{+}=R+\Delta-\Lambda\
其中R^{+}表示池中新的储备。提议交易是否被接受取决于一个简单条件(后面描述),该条件始终确保R^{+} \geq 0 。
直观上,一笔交易不应在提议的投标和接收组合中同时包含同一种资产,即我们不应同时有\Delta{i}>0和\Lambda{i}>0 。稍后我们会看到,虽然在两个组合中包含同一种资产是可能的,但这样做毫无意义。这意味着可以假设\Delta和\Lambda不相交,即对于每个i,都有\Delta{i} \Lambda{i}=0。这使我们能够定义与提议或已接受交易相关的两个不相交的资产集: \mathcal{T}={i | \Delta{i}>0}, \mathcal{R}={i | \Lambda{i}>0}
因此,\mathcal{T}是交易者提议交给 DEX 的资产的索引集,以换取索引在\mathcal{R}中的资产。如果j \notin \mathcal{T} \cup \mathcal{R},则意味着提议的交易不涉及资产j,即\Delta{j}=\Lambda{j}=0 。
一种非常常见的提议交易类型只涉及两种资产,一种是投标资产,另一种是接收资产,即|\mathcal{T}| = |\mathcal{R}| = 1 。假设\mathcal{T}={i}且\mathcal{R}={j},其中i \neq j。那么我们有\Delta=\delta e{i}和\Lambda=\lambda e{j},其中e_{i}表示第i个单位向量,\lambda \geq 0是交易者希望用数量为\delta \geq 0的资产i交换得到的资产j的数量(这被称为用资产i交换资产j)。当一笔交易涉及超过两种资产时,它被称为多资产交易。
交易是否被接受取决于提议的交易和当前的储备。只有当 \varphi(R+\gamma \Delta-\Lambda)=\varphi(R) 时,提议交易(\Delta, \Lambda)才会被接受,其中\varphi: \mathbb{R}_{+}^{n} \to \mathbb{R}是与 CFMM 相关的交易函数,参数\gamma \in (0,1]用于引入交易费用(\gamma < 1)。CFMM 名称中的 “恒定函数” 指的就是这个交易接受条件是恒定的等式。
我们可以这样解释交易接受条件:如果\gamma = 1,提议交易只有在\varphi(R)不变的情况下才会被接受,即\varphi(R^{+})=\varphi(R)。当\gamma < 1(通常取值非常接近 1)时,提议交易基于被折价的投标组合\gamma \Delta来决定是否接受。之后,储备会根据完整的投标组合\Delta进行更新。
我们假设交易函数\varphi是凹函数、单调递增且可微的。许多现有的 CFMM 所关联的函数还满足齐次性这一额外性质,即对于\alpha > 0,有\varphi(\alpha R)=\alpha \varphi(R)。
最简单的交易函数是线性函数, 即 \varphi(R)=p^{T} R=p{1} R{1}+\cdots+p{n} R{n} 其中p > 0,p_{i}可以解释为资产i的价格。交易条件可简化为 \gamma p^{T} \Delta=p^{T} \Lambda。我们将等式右边解释为按照价格p计算的接收组合的总价值,左边解释为经过因子\gamma折价后的投标组合的价值。当p = 1,即所有资产价格都等于 1 时,这样的 CFMM 被称为恒定和做市商。
另一种交易函数的选择是(加权)几何平均,即 \varphi(R)=\prod{i=1}^{n} R{i}^{w_{i}}。其中w > 0且\mathbf{1}^{T} w = 1 。与线性和求和交易函数一样,几何平均函数也是齐次的。使用几何平均作为交易函数的 CFMM 被称为恒定均值做市商。
将求和函数和几何平均函数结合起来,即 \varphi(R)=(1-\alpha)\mathbf{1}^{T} R+\alpha \prod{i=1}^{n} R{i}^{w_{i}} 。其中\alpha \in [0,1]是一个参数,w \geq 0且\mathbf{1}^{T} w = 1。这个交易函数产生的 CFMM 在恒定和市场(当\alpha = 0时)和恒定几何平均市场(当\alpha = 1时)之间进行插值。由于它是求和函数和几何平均函数的凸组合,而这两个函数本身是齐次的,所以得到的函数也是齐次的。
我们基于交易接受条件的一阶近似引入资产价格的概念,这些价格为如何向 CFMM 添加和移除流动性提供了指导。

等式右边是使用未缩放价格P{i}计算的接收组合的价值,左边是使用未缩放价格P{i}计算的投标组合的价值,并经过因子\gamma折价。
资产的报告价格(或简称为价格)是相对于计价单位(即资产n)的价格,价格定义为:p{i}=\frac{P{i}}{P{n}}, i = 1,\cdots,n。(计价单位的价格始终为 1)。一般来说,价格取决于储备R(唯一的例外是线性交易函数,其价格是恒定的)。因此, \gamma \sum{i \in \mathcal{T}} p{i} \Delta{i} \approx \sum{i \in \mathcal{R}} p{i} \Lambda_{i}


如何向储备中添加或移除流动性:当向池中添加流动性时,向储备中添加一个资产组合 \Psi \in \mathbb{R}{+}^{n},导致储备更新为R^{+}=R+\Psi。当从池中移除流动性时,从储备中移除一个资产组合 \Psi \in \mathbb{R}{+}^{n},储备更新为R^{+}=R-\Psi(移除流动性的条件确保R^{+} \geq 0)。添加或移除流动性还会更新流动性提供者的份额权重。
添加或移除流动性必须以保持资产价格的方式进行。如果满足这个条件,我们称之为有效的流动性变化。
当交易函数是齐次函数时,会出现另一种简化情况。对于这种情况,对于任何\alpha > 0,有 \nabla \varphi(\alpha R)=\nabla \varphi(R)(通过对\varphi(\alpha R)=\alpha \varphi(R)关于R求梯度得到)。这意味着\Psi = \nu R(其中\nu > 0)是一个有效的流动性变化(对于移除流动性,需满足\nu \leq 1)。换句话说:你可以通过添加或移除一个与当前储备成比例的资产组合来添加或移除流动性。同时,在添加和移除流动性时,要更改份额。
寻求进行交易、添加或移除流动性的参与者会提出交易提议。这些提议是否被接受,取决于上述的接受条件。如果另一个参与者的提议在其之前被接受(处理),进而改变了储备量 R 并使接受条件失效,那么该提议可能会被拒绝。


为什么要设置最大流动性金额?
- 防止价格操纵:如果没有最大流动性金额的限制,恶意交易者可能会投入大量资金来操纵流动性池中的资产价格,从而获取不当利益。设置最大流动性金额可以增加价格操纵的难度,维护市场价格的稳定。
- 减少滑点影响:大额交易在 AMM 中可能会导致较大的滑点,影响交易的执行价格和市场公平性。合理设置最大流动性金额可以控制单笔交易对价格的影响程度,降低滑点,使市场价格更加稳定和可预测。
恒定函数做市商的性质
交易函数具有非唯一性。若用φ=h∘φ(其中h为凹、递增且可微函数)替代交易函数φ,新得到的函数同样是凹、递增且可微的,并且与之关联的 CFMM 与原 CFMM 在交易接受条件、价格、流动性变化条件以及流动性提供者份额更新等方面完全一致。
有效交易接收的资产不能超过流动性池的储备量。对于最大有效接收资产组合,任何有效交易都满足φ(R+γΔ−Λ)=φ(R),进而R+γΔ−Λ≥0,鉴于Δ和Λ支持集不重叠,可得出Λ≤R。
有效投标和接收资产组合的支持集通常不重叠。当γ<1时,对于存在Δk>0且Λk>0的提议交易不合理,构造的新交易(Δ~,Λ~)与原交易(Δ,Λ)效果类似,但交易者能获得更多第k种资产。
交易能增加函数值(池中储备的价值),对于被接受的非零交易,因为φ递增且R+Δ−Λ≥R+γΔ−Λ(γ<1时至少有一个元素严格更大),所以φ(R+Δ−Λ)>φ(R+γΔ−Λ)=φ(R),利用φ的凹性还能推导出更强的不等式φ(R+Δ−Λ)≥φ(R)+(1−γ)(P+)Δ,其中P+=∇φ(R+)。
交易成本为正,对于有效交易(Δ,Λ),交易成本δ=p(Δ−Λ),通过φ的凹性可证明δ≥(1−γ)pΔ,且交易成本也是当前价格下总储备价值的增加量,即每笔交易使总储备价值按当前价格至少增加投标组合价值的(1−γ)倍。
在流动性变化方面,对流动性变化条件有一种自然解释,是基于一个简单优化问题,即

在给定资产组合按当前价格的总价值限制下,寻求使变化后的交易函数值最大化的资产组合。该凸优化问题的最优性条件与流动性变化条件相关联,能由此确定交易组合。当交易函数为齐次函数时,用于添加或移除流动性的组合与当前储备成比例,而在其他情况下,可通过求解上述凸优化问题来找到实现有效流动性变化的组合。另外,因交易函数的凹性,添加流动性时,对应的梯度比例因子小于 1,移除流动性时,该因子大于 1 。
双资产交易
双资产交易,有时也称为互换交易,是在去中心化交易所(DEXs)上进行的最常见交易类型之一。
假设我们用资产 i 交换资产 j,所以 Δ=δe_i 且 Λ=λe_j,其中 δ≥0,λ≥0 。交易接受条件为:φ(R+γδe_i−λe_j)=φ(R) . 等式左边随δ增大而增大,随λ增大而减小。因此,对于每个δ值,最多只有一个有效的λ值;对于每个λ值,也最多只有一个有效的δ值。换句话说,λ和γ之间的关系定义了一个一一映射函数。这意味着双资产交易由单个参数表征,该参数可以是δ(投标的数量)或λ(接收的数量)。
正向交换函数:定义F:R+→R,其中F(δ)是满足交易接受条件的唯一λ值。函数F被称为正向交换函数,因为F(δ)表示如果你用δ数量的资产 i 进行交换,能得到的资产 j 的数量。由于φ是逐分量递增的,所以正向交换函数F是递增的,又因为F(0)=0,所以F是非负的。另外我们也可以证明,正向交易函数是凹函数。
反向交换函数:定义G:R+→R∪{+∞},其中G(λ)是满足交易接受条件的唯一δ值,如果不存在这样的δ,则G(λ)=+∞ 。函数G被称为反向交换函数,因为G(λ)表示为了得到λ数量的资产 j,你必须交换的资产 i 的数量。与正向交换函数类似,反向交换函数也是非负且递增的,但这个函数是凸函数而非凹函数。
图中展示了一个具有两种资产、权重w_1=0.2和w_2=0.8 ,且γ=0.997的恒定几何平均市场的正向和反向交换函数。我们展示了两种储备值下的函数:R=(1,100)和R=(0.1,10) 。两种储备值下的汇率相同,均为E_{12}=γw1R2/w2R*1=25 。

双资产交易的一种简单扩展 — — 交换固定资产组合倍数的情况。在这种扩展的双资产交易中,交易的资产数量由固定资产组合的倍数决定,即Δ=δΔ’和Λ=λΛ’ ,其中λ≥0和δ≥0是缩放因子,Δ’和Λ’是固定资产组合。当Δ’=ei且Λ’=ej时,就退化为普通的双资产交易。此情况下,依然可以引入正向和反向函数F和G ,它们具有与普通双资产交易中交换函数相似的性质,即互为反函数,都是递增的,F是凹函数,G是凸函数,且F(0)=G(0)=0。
在这类交易中,存在一个规则,即F(δ)的值会小于或等于Eδ 。这里的E是一个特殊的数值,用来衡量交换两个固定资产组合时的兑换比例,它是根据交易函数的相关信息计算出来的。同时,对于反向交易的函数G ,也有类似的规则,用来描述交易时资产数量的关系。
假设交易者想要把一堆资产组合换成计价资产,也就是进行清算。这里用Δ表示要清算的资产组合,并且假设这个组合里不包含计价资产(即Δ_n=0 )。为了完成这笔交易,需要找到一个合适的数量α ,使得把Δ资产组合给出去,能换回来α数量的计价资产,并且满足特定条件(φ(R+γΔ−αe_n)=φ(R) ),这里的α就代表了这一堆资产的清算价值。经过分析发现,这个清算价值不会超过按照一定折扣计算后的资产价值。
多资产交易
多资产交易更为复杂,因为即便固定了接收资产组合 Λ,仍有许多有效的投标资产组合可供选择,我们面临该用哪一个的问题。同样,当固定投标资产组合∆时,我们可能收到的资产组合 Λ 也有很多,需要从中做出选择。更普遍地说,我们面临着如何选择提议交易(∆, Λ)的问题。在双资产交易的情况下,选择由一个标量参数化,即 δ 或 λ。但在多资产交易中,自由度更多。
我们将选择(∆, Λ)的问题表述为一个优化问题。交易者持有的净变化为 Λ — ∆。交易者使用效用函数 U: Rⁿ → R ∪ {-∞} 来评判持有量的净变化,如果 U (Λ — ∆) > U (Λ’— ∆’),则相比于 (∆’, Λ’),交易者更偏好 (∆, Λ)。

然而,该约束条件通常非凸(除非交易函数是线性的),因此转而求解其凸松弛问题:

结论
本文对恒定函数做市商(CFMMs)进行了全面的描述,概述了用户如何通过交易、增加和移除流动性与 CFMM 进行交互。我们发现,CFMMs 的许多特性都源于交易函数的凹性。在简单的双资产交易或交换场景中,只需指定我们希望接收(或投标)的数量,通过计算一个凸(凹)函数,就能确定我们投标(接收)的数量。而多资产交易更为复杂,因为有效交易的集合是多维的,即存在多种可能的投标或接收资产组合。我们将从这些可能的有效交易中进行选择的问题,转化为一个凸优化问题,该问题可以全局高效地求解。
메타데이터
- post_id
- 75b8f5dcd63c
- slug
- paper-reading-constant-function-market-makers-multi-asset-trades-via-convex-optimization-75b8f5dcd63c
- url
- https://medium.com/@jingansihandsomeman/paper-reading-constant-function-market-makers-multi-asset-trades-via-convex-optimization-75b8f5dcd63c
- canonical_url
- https://medium.com/@jingansihandsomeman/paper-reading-constant-function-market-makers-multi-asset-trades-via-convex-optimization-75b8f5dcd63c
- author_url
- https://medium.com/@jingansihandsomeman
- status
- ok
- fetched_at
- 2026-07-20 05:27:41