Skip to content

公式

本页面展示了 mimo 协议中使用的公式。

概述

在每笔交易中,交易者用一定数量的某种代币交换一定数量的另一种代币,价格由公式定义。没有订单簿,无需等待成交。

mimo 使用的公式是著名的 x×y=kx \times y = k,该公式已被基于 AMM 的 DEX 广泛采用,如 Uniswap。

公式 x×y=kx \times y = k

假设 XX 是源代币,YY 是目标代币。在 mimo 中,XXYY 可以是 IOTX 或 XRC20 代币。设 xxyy 分别是当前流动性池中的 X 代币、Y 代币。

基于著名的 AMM 方程:

x×y=kx \times y = k

其中 kk 是常数。

交易前后 xxyy 的乘积保持不变。详情请参阅 Vitalik Buterin 的文章

基于输入的定价

让我们进一步定义 dxdxdydy 分别是您想要支付的 X 代币数量和您将获得的 Y 代币数量。

getInputPrice

如果 getInputPrice 表示通过出售给定的 dxdx 可以购买多少 Y 代币(即 dydy):

getInputPrice(x,y,dx)=y×997×dx1000×x+997×dxgetInputPrice(x, y, dx) = \frac{y \times 997 \times dx}{1000 \times x + 997 \times dx}

getOutputPrice

如果 getOutputPrice 表示购买 dydy 个 Y 代币需要多少 X 代币:

getOutputPrice(x,y,dy)=1000×x×dy(ydy)×997+1getOutputPrice(x, y, dy) = \frac{1000 \times x \times dy}{(y - dy) \times 997} + 1

其中上述等式中的 / 表示 divToInteger,意味着除法结果向下取整。

价格影响

在 AMM 中,每笔交易后价格都会变化。交易者希望在交易前了解价格影响。

有两种计算价格影响的方法。可以基于 x,y,dxx, y, dxx,y,dyx, y, dy。一种基于输入,一种基于输出。

基于输入 (dxdx)

PriceImpact(x,y,dx)=(1000×x)2(1000×x+997×dx)21PriceImpact(x, y, dx) = \frac{(1000 \times x)^2}{(1000 \times x + 997 \times dx)^2} - 1

基于输出 (dydy)

PriceImpact(x,y,dy)=(ydy)2y21PriceImpact(x, y, dy) = \frac{(y - dy)^2}{y^2} - 1

注意

价格影响始终在 -10 之间。

跨交易价格影响

如果两个代币之间没有直接交易对,比如在 V1 中我们只支持 IOTX/代币对,交易者需要使用一种代币(如 IOTX)作为桥接来在两个代币之间进行交易。

在这种情况下,价格影响为:

PriceImpactcross=PI1×PI2+PI1+PI2PriceImpact_{cross} = PI_1 \times PI_2 + PI_1 + PI_2

其中:

  • PI1PI_1 是第一个交易对的价格影响,如 xx 到 IOTX
  • PI2PI_2 是第二个交易对的价格影响,如 IOTX 到 yy

基于 MIT 许可证发布。