给定一个Uniswap V3的池子地址,如何计算代币的价格呢?

johnny johnny 提出于 2021-10-28 11:44 15542 浏览

给定一个Uniswap V3的池子地址,如何使用合约提供的原始信息计算代币的价格呢?能有参数和公式就可以了,非常感谢!

最佳答案

2021-11-01 08:32

使用:

function getPrice(address tokenIn, address tokenOut)
      external
      view
      returns (uint256 price)
  {
      IUniswapV3Pool pool = IUniswapV3Pool(factory.getPool(tokenIn, tokenOut, fee));
      (uint160 sqrtPriceX96,,,,,,) =  pool.slot0();
      return uint(sqrtPriceX96).mul(uint(sqrtPriceX96)).mul(1e18) >> (96 * 2);
  }

可能, 你更想知道一个币可兑换另一个币的数量, 可以这样:

function getQuote(address tokenA, uint amountA, address tokenB) public view override returns (uint256 amountB) {
    int24 tick = OracleLibrary.consult(factory.getPool(tokenIn, tokenOut, fee), 60);
    return OracleLibrary.getQuoteAtTick(tick, uint128(amountA), tokenA, tokenB);
  }

OracleLibrary 是 uniswap/v3 里提供的方法库。

Tiny熊

擅长:智能合约,以太坊 · 采纳率 33% · 回答于 2021-10-29 09:06

其它 6 个回答

fox 2022-07-15 16:05
Ethereal Solidity智能合约开发工程师 2022-01-17 20:04
zoro 2023-02-03 13:56
路远 开发 2023-07-03 09:19
tom 科学家 2023-07-05 14:06
Scott CTO 2024-02-27 10:58

写回答

你需要登录后才可以回答问题,登录