本文深入探讨了常数乘积自动化做市商(AMM)的数学原理及其在去中心化金融(DeFi)中的应用,详细分析了流动性添加和删除过程中的公式推导和智能合约代码示例。通过分步讲解,读者可以理解常数乘积 AMM 的机制及其在交易中的影响。
自动化市场制造商 (AMM) 在去中心化金融 (DeFi) 领域中发挥着关键作用,促进流动性提供和交易。该领域的一个关键概念是 恒定乘积 AMM,它支撑着流行的去中心化交易所如 Uniswap 和 SushiSwap。
在本文中,我们将深入探讨恒定乘积自动化市场制造商,解密添加和移除流动性的数学原理。
恒定乘积 AMM 是一种 AMM,其中代币的价格由以下方程决定:
XY = K
其中 X = AMM 中的 Token A 数量,Y = AMM 中的 Token B 数量。
当我们在 AMM 上进行交易时,X 和 Y 代币的值会变化,但 K 的值将保持不变。
例如,我们将出售 Token A 并购买 Token B。因此我们可以写成:
dX = 输入的 Token A 数量
dY = 输出的 Token B 数量
在交易之前,我们有方程:XY = K
交易之后,我们将得到以下修改后的方程:
( X + dX )( Y - dY ) = K
X 是交易前 AMM 中的代币数量,因为我们在出售 Token A,因此我们增加了 dX。
同样地,Y 是交易前 AMM 中的代币数量,我们因为购买 Token B 而减少了 dY。
K 将始终保持不变。
这就是交易通过图形表示的样子。
可以看到,交易后我们需要将 Y 的值降低到 Y-dY,并将 X 增加到 X+dX,以确保 K 的值保持不变。
x
) 和 Token B ( y
) 的初始数量设置为其乘积等于 k
。所以,如果最初有 100 个 Token A 和 50 个 Token B,那么:k = 100 * 50 = 5000
x
增加)。x*y=k
,池中 Token B 的数量 ( y
) 必须减少。将重新计算 x
和 y
的新值,以确保乘积仍然等于 k
。y
相对于 x
增加的减少率决定了交易的有效汇率。x = 100
单位的 Token A 和 y = 50
单位的 Token B,所以 k = 5000
。k
。池的新状态将是 x = 125
单位 Token A 和 y = 40
单位 Token B (因为 125 * 40 = 5000
)。x
或 y
中做更大的改变,以保持 k
恒定。dx
) 对应的输出数量 ( dy
)。xy=k
。当用户交换 dX
数量的某个代币时,储备的变化和乘积必须仍然等于 k
。dY
,即应给予用户的另一种代币的数量。YdX / (X + dX)
考虑输入数量和当前储备给出输出数量。uint256 amountInWithFee = (_amountIn * 997) / 1000;
amountOut = (reserveOut * amountInWithFee) / (reserveIn + amountInWithFee);
添加流动性需要保持价格比例,表示为:
dX
和 dY
) 的比例保持当前价格比例。dY = Y / X * dX
给出为保持价格比例所需的 dY
的数量。if (reserve0 > 0 || reserve1 > 0) {
require(reserve0 * _amount1 == reserve1 * _amount0, "x / y != dx / dy");
股份计算对公平分配至关重要:
f(X,Y)
= 流动性的价值
我们将定义 f(X,Y) = **√**XY
L0 = f(X,Y)
L1 = f(X+dX,Y+dY)
T = 总股份
s = 要铸造的股份
总股份应与流动性的增加成正比
L1 / L0 = (T + s) / T
L1 * T = L0 * (T + s)
(L1 - L0) * T / L0 = s
√**XY
).(L1 - L0) * T / L0 = s
计算基于流动性变化要铸造的新股份。if (totalSupply == 0) {
shares = _sqrt(_amount0 * _amount1);
} else {
shares = _min(
(_amount0 * totalSupply) / reserve0,
(_amount1 * totalSupply) / reserve1
);
}
移除流动性涉及返回每种代币的按比例数量:
dX, dY = 要移除的流动性数量
dX = s / T * X
dY = s / T * Y
证明
让我们计算 dX, dY 使得
v / L = s / T
其中
v = f(dx, dy) = √dXdY,
L = 总流动性 = √XY
s = 股份
T = 总供应
√dXdY = s / T * √XY
移除的流动性金额必须不改变价格,因此 dX / dY = x / y
替换 dY = dX * Y/ X
√dXdY = √(dX * dX * Y / X) = dX * √(Y / X)
将方程的两边都除以 √(Y / X)
dX = s / T * √(XY) / √(Y / X)= s / T * √(X²) = s / T * X
同样,dY = s / T * Y
dx
和 dy
)。s
) 成正比。dx = s / T * x
和 dy = s / T * y
根据用户的总供应股份给出返回的每种代币的数量。amount0 = (_shares * bal0) / totalSupply;
amount1 = (_shares * bal1) / totalSupply;
查看恒定乘积 AMM 的代码文件在 Github。
随着 DeFi 生态系统的不断发展,恒定乘积 AMM 证明了去中心化金融的创新精神。它提供了一个关于未来的窗口,未来金融服务将变得更加可获取、透明和公平。
理解和改进 AMM 的旅程仍在继续,这是一段将数学的严谨性与区块链技术的无限可能性相结合的旅程。
- 原文链接: medium.com/@tomarpari90/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!