3

Code have to trade on Uniswap v3 and create new positions then close. No problems with trading and closing positions which out of range. But always problem with creating new position, transaction failed. After 30-40 times, it creates. Cannot understand what is the issue. Works on yarn

this part describes unopened 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,
  }),
);

}

this part for mint a new 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();
Dajeir
  • 51
  • 1

0 Answers0