Skip to content

公式 ​

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

概述 ​

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

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

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

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

基于著名的 AMM 方程:

x×y=kx \times y = k

其中 kk 是常数。

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

基于输入的定价 ​

让我们进一步定义 dxdx、dydy 分别是您想要支付的 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(y−dy)×997+1getOutputPrice(x, y, dy) = \frac{1000 \times x \times dy}{(y - dy) \times 997} + 1

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

价格影响 ​

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

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

基于输入 (dxdx) ​

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

基于输出 (dydy) ​

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

注意

价格影响始终在 -1 和 0 之间。

跨交易价格影响 ​

如果两个代币之间没有直接交易对,比如在 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 许可证发布。