Skip to content

Latest commit

 

History

History
213 lines (97 loc) · 13.9 KB

xy=k.md

File metadata and controls

213 lines (97 loc) · 13.9 KB

该repository作为本人读书笔记, 记录知识的获取, 以blog的形式记录下来. 该文库我会不断更新, 如果喜欢的话麻烦点一下star.


本文是对 uniswap 基础数学论文的翻译, 论文连接, 当然我主要针对重要部分进行翻译.

1. Formal Overview of x × y = k Model

Consider a decentralized exchange that trades two tokens X and Y. Let x and y be the number of tokens X and Y, respectively, that the exchange currently reserves. The token exchange price is determined by the ratio of x and y so that the product is preserved. That is, when you sell tokens, you will get tokens such that . Thus, the price is the function of . Specifically, when you trade with , the exchange token reserves are updated as follows:

Where and Also, we have:

📖 考虑一个去中心化交易所交易两种代币 X 和 Y. 使用 x 和 y 表示代币代币 X 和 Y 的数量, 相应的表示交易所当前的代币存量. 代币的交易价格是由 x 和 y 的比例决定的, 因此说 是维持固定的. 这就是为什么, 当你卖出 的代币你将会获得 的代币并且满足 . 因此说实际的价格函数是 . 尤其是, 当你交易 获得 , 交易所得存量会如下更新:

其中

Now consider a fee for each token trade. Let be a fee, e.g., for 0.3% fee schedule.

Where and , and . Also, we have:

📖 我们现在考虑一笔交易费. 设定 作为一个交易费, 例如 对应 0.3% 费率. 那么:

其中 , 以及 . 因此我们可以得到:

Note that we have the same formula with the previous one if there is no fee, i.e., . Also, note that the product of x and y slightly increases for each trade due to the fee. That is, when , while when (no fee).

📖 我们注意到当没有费率的时候这个共识与前面的是一样, 例如 . 同时, 注意到 x 和 y 的乘积略微大于没有费率时的乘积. 也就是 时, 而 没有费率时.

State Transition System We formalize the market maker model as a state transition system, where the state represents the current asset of the exchange, and the transition represents how each function updates the state. We define the exchange state as a tuple (e, t, l), where e is the amount of Ether (in wei), t is the number of (exchange) tokens, and l is the amount of total liquidity (i.e., the total supply of UNI tokens).

📖 State Transition System 我们定义市场模型类似一个状态装换系统, 其中状态代表当前交易所的资产量, 而转换代表每一个动作如何更新这个状态.

我们定义交易所的状态类似一个 tuple (e, t, l), 其中 e 代表 Ether 的数量(单位 wei), t 代表代币的交易池数量, 而 l 达标总共的流动交易量.

2. Updating Liquidity

We formalize two functions addLiquidity and removeLiquidity that mints and burns the liquidity, respectively. We first formalize their mathematical definition, addLiquidityspec and removeLiquidityspec, that uses the real arithmetic. Then, we formalize their implementation, addLiquiditycode and removeLiquiditycode , that uses the integer arithmetic, and analyze the approximation errors due to the integer rounding.

📖 我们定义两个函数 addLiquidityremoveLiquidity 分别代表流动性挖矿和销毁流动性. 我们首先公式化他们的数学定义, addLiquidityspecremoveLiquidityspec, 代表真实算术结果. 然后我们公式化定义整数算术, addLiquiditycoderemoveLiquiditycode 会存在整数计算的小偏差.

2.1 Minting Liquidity

2.1.1 addLiquidityspec

Definition 1. addLiquidityspec takes as input and updates the state as follows:

where

and .

📖 定义 addLiquidityspec 增加流动性 更新状态如下:

其中

而且 .

Here, an investor deposits both ether (wei) and tokens, and mints liquidity. The invariant is that the ratio of e : t : l is preserved, and k = e × t increases, as formulated in the following theorem.

Theorem 1. Let . Let and . Then, we have the following:

1 2 3

📖 其中, 一个投资者同时存入了 ether (wei) 和 代币. 比例变量 e:t:l 是保持不变的,而 k = e × t 增长了,将以下定理公式化:

定理1. 规定 . . 那么我们可以得出以下结论:

1 2 3

2.1.2 addLiquiditycode

Definition 2. addLiquiditycode takes as input an integer and updates the state as follows:

and .

📖 定义2. addLiquiditycode 增加了新的整数 然后状态如下:

其中 .

Theorem 2. Let . Let . Let , and . The, we have:

and

📖 定理2. 使 . 使 . 使 , . 那么我们可以得到:

以及

2.2 Burning Liquidity

2.2.1 removeLiquidityspec

取出流动性本质上来说和注入流动性刚好相反,我这里就不在赘述了,原文写的实在有些啰嗦了。

总结

核心思想是 xy=k,然后因为计算机是处理整数的,本质上币也是整数的,因此就不得不处理存在小数的情况,虽然论文写得很复杂,但本质上来讲,在增加流动性方面大家只要抓住 eth 本位原则,也就是 eth 肯定是整数,而由 token 来补足小数造成的损失。而减少流动性方面是以 l 为本位的,那么 eth 和 token 的小数损失由用户承担。