首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我对uniswapV3的流动性计算有疑问。

我对uniswapV3的流动性计算有疑问。
EN

Ethereum用户
提问于 2023-04-08 06:06:38
回答 1查看 27关注 0票数 2
代码语言:javascript
复制
q96 = 2**96
def price_to_sqrtp(p):
    return int(math.sqrt(p) * q96)

sqrtp_low = price_to_sqrtp(4545)
sqrtp_cur = price_to_sqrtp(5000)
sqrtp_upp = price_to_sqrtp(5500)

def liquidity0(amount, pa, pb):
    if pa > pb: # pa is current price and pb is upper price in price range, so how it is 
                # possible that pa is greater than pb ??

        pa, pb = pb, pa # what does this line actually does?

    return (amount * (pa * pb) / q96) / (pb - pa) # as we make sqrt of prices, why here 
    # we used q96 again?

def liquidity1(amount, pa, pb):
    if pa > pb:
        pa, pb = pb, pa
    return amount * q96 / (pb - pa)

eth = 10**18
amount_eth = 1 * eth
amount_usdc = 5000 * eth

liq0 = liquidity0(amount_eth, sqrtp_cur, sqrtp_upp)
liq1 = liquidity1(amount_usdc, sqrtp_cur, sqrtp_low)
liq = int(min(liq0, liq1))  # Does substracting the liq1 from liq0 gives the liq? i mean
# how this works? 

> 1517882343751509868544

在这段代码中,我有几个问题,我在代码中提出的问题作为注释。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2023-04-08 15:28:44

怎么可能pa大于pb?

如果用户提供的最高价格(pb)低于当前价格(pa),则此检查已经到位,以处理潜在的输入错误。

"pa,pb = pb,pa“行做什么?

如果pa大于pb,则它只是交换pa和pb的值,这一行保证了pa的值被分配给pb,pb被赋给pa的值。

既然我们的价格是平方吨,为什么还要再使用q96呢?

它用于在计算中保持精度,在计算流动性时,需要在分母中再次使用q96,以抵消比例因子并保持正确的单位。

从liq1中减去liq0是否给出了liq?

不,行"liq = int(min( liq0,liq1))“计算流动性(liq)作为两个计算出的流动性值(liq0和liq1 )的最小值。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/148681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档