后一个价格点的价格是前一个价格点价格基础上浮动万分之一。 每个 Tick 也有一个唯一的序号。区间(Position)可以由两个 Tick 表示。逻辑上交易手续费可以一个个的 Tick 计算,并在每一个 Tick 上根据流动性的占比进行交易分配。先看看一个 Tick 范围的 swap 的计算。 Tick 内的 SWAP假设有一个很小的量的 y,需要 swap 为 x。通过 6.13 的公式,可以计算出因为 y 的变化导致的价格变化。 再利用 6.15 的公式可以算出换取的 x 的量。 Uniswap V3 针对同样的交易对设置了不同的交易费:0.05%,0.3% 以及 1% (还可以添加其他费率)。如果是从 Y 换取 X,则在换取之前先扣除手续费再进行上述的交换。 在同一交易池中只支持一种费率。也就是说,在一个交易池中支持不同的价格区间,但是都是同样的费率。如果需要添加同样交易对的不同交易费的交易池,必须创建新的交易池。 接下来,深入讲解一下 添加 / 删除流动性以及交易费用的计算逻辑。 添加 / 删除流动性V3 的添加 / 删除流动性是当前价格情况下在某个区间添加或者删除流动性。所有的流动性添加 / 删除流动性采用如下的公式: 注意,价格变化并不是指区间的大小,而是在某个区间上提供流动性,相对当前价格,「需要相应资金变化」对应的价格变化。 分为三种情况,想要添加的流动性区间和当前价格的关系。
因为价格在区间范围内,如果价格滑动到 il,则需要提供 y 资金。如果价格滑动到 iu,则需要提供相应的 x 资金。所以,对于 delta_Y 来说的,价格变化为 sqrt(P) - sqrt(p(il));对于 delta_X 来说,价格变化为 1/sqrt(P) - 1/sqrt(p(iu))。
因为当前价格远低于 il,即使从当前价格向 iu 滑动,也只需要 x 的资金,不需要 y 的资金。所以,在这种情况下,delta_Y = 0。因为从 il 滑向 iu 需要整个区间的 x 的资金,对于 delta_X 来说,价格变化为 1/sqrt(il) - 1/sqrt(p(iu))。 (责任编辑:admin) |