文章详细介绍了 Uniswap V2 Library 的功能和使用方法,主要包括getAmountOut()、getAmountIn()、getAmountsOut()、getAmountsIn()、getReserves() 和 quote() 等函数的工作原理和数学推导过程,并提供了相关代码和图片说明。
Uniswap V2 Library 简化了与交易对合约的某些交互,并被路由合约广泛使用。它包含八个不会改变状态的函数,这些函数在从智能合约集成 Uniswap V2 时也很有用。
如果我们想预测如果我们提供一定数量的 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()
的推导留给读者练习。
如果一个交易者提供一系列的交易对,比如 (A, B), (B, C), (C, D),并且从一开始就以一定数量的 A
反复调用 getAmountOut
,那么可以预测得到的 D
代币的数量。
每个 (A, B), (B, C) 等的 UniswapV2 交易对合约...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!