Uniswap V2 如何计算 mintFee

  • RareSkills
  • 发布于 2023-11-16 20:10
  • 阅读 224

本文详细介绍了Uniswap V2中协议费的收集机制,包括费用计算的数学公式、代码实现以及影响因素。文章还指出了在流动性提供者调用mintburn时收集费用的效率问题,并通过示例和代码片段深入解释了_mintFee函数的工作方式。

Uniswap V2 旨在将 1/6 的交换手续费收归协议。由于交换手续费为 0.3%,因此 1/6 的手续费为 0.05%。所以每笔交易的 0.05% 将会归协议所有。

尽管这个功能实际上并没有被激活,但我们还是讨论这个功能,毕竟一些分叉可能会使用它。此外,这个计算很容易出错,现在花时间理解它将有助于你在类似计算中捕捉错误。

先决条件

你需要熟悉 Uniswap V2 Book 中的所有前面的章节,才能跟上后面的内容。

在交易过程中收集协议手续费效率低下

在每笔交易中收取 0.05% 的手续费效率低下,因为这需要额外的代币转移。转移 ERC20 代币需要更新存储,因此将代币转移到两个地址而不是一个会产生更高的成本。

因此,当流动性提供者调用 burn 或 mint 时收取手续费。由于这些操作相对于 [交换代币](swapping tokens) 来说是不频繁的,这将节省 gas 费用。为了收取 mintFee,合约计算自上次发生以来收集的手续费,并铸造足够的 LP 代币到受益地址,使受益人有权获得 1/6 的手续费。

费用和 mintFee 的术语

为避免术语混淆,我们将“费用”称为在交换过程中从交易者那里收取的 0.3%,而“mintFee”则是 0.3% 费用的 1/6。是的,这两者都使用费用这个词并不是很好,但这就是我们必须处理的内容。

流动性是池中代币余额乘积的平方根。这个公式的理由在 Uniswap V2 交换函数文章中有所讨论。一些文献将其称为 $\sqrt{k}$,其中 $k = xy$,$x$ 和 $y$ 是池中的代币余额($x$ 和 $y$ 的储备)。我们用 $\ell$ 来表示流动性,因为它写起来比 $\sqrt{k}$ 短。

计算 mintFee 的假设

为了使这个有效,Uniswap V2 依赖以下两个不变性:

  • 如果没有调用 mint()burn(),池的流动性只能增加。
  • 流动性的增加仅仅是由于手续费(或捐赠)。通过测量自上次 mint()burn() 交易以来流动性增加的情况,池知道收集了多少手续费。

这些将是写好的 不变性测试,但目前我们将理所当然地认为它们是真实的。

mintFee 示例计算

假设在 $t_1$ 时池中有 10 个 token0 和 10 个 token1

经过大量交易和手续费收集后,$t_2$ 时新的池余额为 40 个 token0 和 40 个 token1

流动性被测量为两个代币的乘积的平方根,即 $\ell = \sqrt{k}$。在 $t_1$ 时流动性为 10,在 $t_2$ 时流动性为 40...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
该文章收录于 Uniswap V2 之书
14 订阅 9 篇文章

0 条评论

请先 登录 后评论
RareSkills
RareSkills
https://www.rareskills.io/