【问题标题】:What does Invariant failed: PRICE_BOUNDS means?Invariant failed: PRICE_BOUNDS 是什么意思?
【发布时间】:2022-07-04 08:30:22
【问题描述】:

我正在尝试创建 v3 uniswap 池的实例。 我正在使用安全帽和孟买测试网的一个分支。

当我尝试创建池实例时:

const poolExample = new Pool(
  TokenA,
  TokenB,
  immutables.fee,
  state.sqrtPriceX96.toString(),
  state.liquidity.toString(),
  state.tick
);

我收到以下错误:

Error: Invariant failed: PRICE_BOUNDS

堆栈是:

Error: Invariant failed: PRICE_BOUNDS
  at invariant (node_modules/tiny-invariant/dist/tiny-invariant.cjs.js:14:11)
  at new Pool (node_modules/@uniswap/v3-sdk/src/entities/pool.ts:71:5)
  at Context.<anonymous> (test/Uniswap-test.js:134:25)
  at processTicksAndRejections (node:internal/process/task_queues:96:5)

关于追踪错误来源的任何提示?

池的参数具有以下值:

fee : 3000
state.sqrtPriceX96 : 0
state.liquidity: 0
state.tick: 0

【问题讨论】:

标签: hardhat uniswap


【解决方案1】:

我认为问题在于您创建状态 (PoolState) 的位置,而不是池。

sqrtPriceX96 不能为0,这些参数需要正确设置

这是你应该如何获得池状态:


async function getPoolState() {
  const liquidity = await poolContract.liquidity();
  const slot = await poolContract.slot0();

  const PoolState: State = {
    liquidity,
    sqrtPriceX96: slot[0],
    tick: slot[1],
    observationIndex: slot[2],
    observationCardinality: slot[3],
    observationCardinalityNext: slot[4],
    feeProtocol: slot[5],
    unlocked: slot[6],
  };

  return PoolState;
}

然后你这样使用它:

  const immutables = await getPoolImmutables();
  const state = await getPoolState();

  const TokenA = new Token(3, immutables.token0, 18, "DAI", "Dai Stablecoin");
  const TokenB = new Token(3, immutables.token1, 18, "WETH", "Wrapped Ether");

  const poolExample = new Pool(
    TokenA,
    TokenB,
    immutables.fee,
    state.sqrtPriceX96.toString(),
    state.liquidity.toString(),
    state.tick
  );

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 2012-12-26
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多