Uniswap代币交换规则

uniswap 代币交换规则之不变公式:x * y = k

其中,x、y 分别为资金储备池中 token A 和 token B 的数量,而 k 为常数。

假如现在资金储备池里有 100A+10B,此时常数 K=1000;交易者向资金储备池里充入 10A(外加0.3%的fee,即0.03A),则现在资金储备池里的 token A数量为 110。由于要保持K值不变,则资金储备池里的 token B 数量应保持在 1000/110=9.091,那么交易者将得到 10-9.091=0.909 token B。

此后,资金储备池里的资金储备将更新为:

110.03A+9.091B

那么再来新的交易者时,常数将变为K=110.03*9.091=1000.28273

官网关于fee的说明中明确说了:

交换费用会立即存入流动性储备。这增加了流动性代币的价值,起到了对所有流动性提供者按其在池中的份额比例进行支付的作用。费用是通过燃烧流动性代币来收取的,以去除基础储备的比例份额。

由于费用被添加到流动性池中,因此在每笔交易结束时,不变式会增加。

简化成一个等式就是:

  • 如果充入的是token A

    X * Y = (X+a) * (Y-b)

    其中a为交换者充入的tokenA数量,b为其获得的tokenB数量。

  • 如果充入的是tokenB

    X * Y = (X-a) * (Y+b)

    其中b为交换者充入的tokenB数量,a为其获得的tokenA数量。

如果不受手续费的影响,即手续费是单独分割开的,那么常数K一旦由第一个流动性提供者充入资产定义后,会一直是一个常数。可以从下面的公式看出:

X * Y = (X+a) * (Y-b)=(X+a+a) * (Y-b-b)=…

但是由于0.3%fee被直接添加到流动性池中,因此在每笔交易结束时,不变式会增加,即K值会增加