UniswapV2Library 代码详解

  • RareSkills
  • 发布于 2023-11-08 18:18
  • 阅读 230

文章详细介绍了 Uniswap V2 Library 的功能和使用方法,主要包括getAmountOut()、getAmountIn()、getAmountsOut()、getAmountsIn()、getReserves() 和 quote() 等函数的工作原理和数学推导过程,并提供了相关代码和图片说明。

UniswapV2Library

Uniswap V2 Library 简化了与交易对合约的某些交互,并被路由合约广泛使用。它包含八个不会改变状态的函数,这些函数在从智能合约集成 Uniswap V2 时也很有用。

getAmountOut() 和 getAmountIn()

如果我们想预测如果我们提供一定数量的 token x,将获得的 token y 的数量,那么我们可以通过下面的推导来得出输出数量(为了简单起见,忽略手续费)。让 x 为输入代币,y 为输出代币,Δx 为进入的数量,Δy 为输出的数量。

$$ \begin{align} xy &= (x + \Delta x)(y – \Delta y) \\ y – \Delta y &= \frac{xy}{x + \Delta x} \\ -\Delta y &= \frac{xy – y(x + \Delta x)}{x + \Delta x} \\ -\Delta y &= \frac{-y \Delta x}{x + \Delta x} \\ \Delta y &= \frac{y \Delta x}{x + \Delta x} \end{align} $$

$$ \mathrm{amount_out} = \frac{\mathrm{reserve_out} \cdot \mathrm{amount_in}}{\mathrm{reserve_in} + \mathrm{amount_in}} $$

考虑到这一点,UniswapV2Library.sol 中的 getAmountOut() 函数应该是不言而喻的。请注意,这些数字被缩放了 1,000,以考虑 0.3% 的手续费。包含费用的 getAmountIn() 的推导留给读者练习。

functions getAmountOut and getAmountIn

链接 getAmountOut() 到 getAmountsOut() 进行对跳

getAmountsOut() 和 getAmountsIn()

如果一个交易者提供一系列的交易对,比如 (A, B), (B, C), (C, D),并且从一开始就以一定数量的 A 反复调用 getAmountOut,那么可以预测得到的 D 代币的数量。

每个 (A, B), (B, C) 等的 UniswapV2 交易对合约...

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

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

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