Website-Suche

typescript - Uniswap V3 Liquidity hinzufügen schlägt fehl


Der Code muss auf Uniswap v3 handeln und neue Positionen erstellen und dann schließen. Kein Problem beim Handeln und Schließen von Positionen, die außerhalb des Bereichs liegen. Aber immer ein Problem beim Erstellen einer neuen Position, Transaktion fehlgeschlagen. Nach 30-40 Versuchen wird sie erstellt. Kann nicht verstehen, was das Problem ist. Funktioniert mit yarn.

Dieser Teil beschreibt die ungeöffnete Position:

export class NewPosition extends UniPosition {static fromPosition(position: Position): NewPosition {
return new NewPosition({
  pool: position.pool,
  liquidity: position.liquidity,
  tickLower: position.tickLower,
  tickUpper: position.tickUpper,
});

}

  static withRange(pool: Pool, rangePercentage: number, amount0: string): NewPosition {
const newPriceRange = calculatePriceRange(pool.token0Price, rangePercentage);

const tickSpacing = pool.tickSpacing;
const tickLower = priceToClosestTick(newPriceRange.lower) - (priceToClosestTick(newPriceRange.lower) % tickSpacing);
const tickUpper =
  priceToClosestTick(newPriceRange.upper) + (tickSpacing - (priceToClosestTick(newPriceRange.upper) % tickSpacing));

return NewPosition.fromPosition(
  NewPosition.fromAmount0({
    pool,
    tickLower,
    tickUpper,
    amount0,
    useFullPrecision: true,
  }),
);

}

dieser Teil zum Erstellen einer neuen Position:

 async mint(signer: Signer): Promise<BigNumber> {let useNative = Ether.onChain(await (await signer.getChainId())) as any;

 useNative = null;

const params = NonfungiblePositionManager.addCallParameters(this, {
  slippageTolerance: new Percent(5, 100),
  deadline: ethers.constants.MaxUint256.toString(),    
  recipient: await signer.getAddress(),
  createPool: false,
  useNative: useNative,
});
  const tx = await signer.sendTransaction({
  to: POSITIONS_ADDRESS, 
  from: await signer.getAddress(),
  data: params.calldata,
  value: params.value,
  maxFeePerGas: await getmaxFeePerGas(), 
  maxPriorityFeePerGas: getmaxPriorityFee(),  
  gasLimit: 600000,
});
const receipt = await tx.wait();