{"version":3,"sources":["../../src/modules/positionModule.ts"],"sourcesContent":["import {\n  AccountAddress,\n  InputEntryFunctionData,\n  Serializer,\n  U256,\n} from \"@aptos-labs/ts-sdk\";\nimport {\n  AddAMMLiquidityParams,\n  AddCLMMLiquidityParams,\n  AddStableLiquidityParams,\n  CollectFeeParams,\n  CreateAMMPoolAndAddLiquidityParams,\n  CreateCLMMPoolAndAddLiquidityParams,\n  CreateStablePoolAndAddLiquidityParams,\n  RemoveMultipleAMMLiquidityParams,\n  RemoveMultipleCLMMLiquidityParams,\n  RemoveMultipleStableLiquidityParams,\n  RemoveSingleAMMLiquidityParams,\n  RemoveSingleCLMMLiquidityParams,\n  RemoveSingleStableLiquidityParams,\n} from \"../types/position.type\";\n\nimport { TappSDK } from \"../core\";\nimport {\n  getSpacingFromFee,\n  priceToTickIndex,\n  roundPriceToTickSpacing,\n  toU64,\n} from \"../helpers\";\n\nconst TICK_BOUND = 443636;\nconst BASE = 1.0001;\nconst EMPTY_MIN_PRICE = Math.pow(BASE, -TICK_BOUND);\n\nexport default class PositionModule {\n  protected _sdk: TappSDK;\n  constructor(sdk: TappSDK) {\n    this._sdk = sdk;\n  }\n\n  removeSingleAMMLiquidity(\n    params: RemoveSingleAMMLiquidityParams\n  ): InputEntryFunctionData {\n    const serializer = new Serializer();\n    serializer.serializeStr(params.poolId);\n    serializer.serializeU64(1);\n\n    serializer.serialize(AccountAddress.fromString(params.positionAddr));\n    serializer.serializeU128(params.mintedShare);\n    serializer.serializeU64(params.minAmount0);\n    serializer.serializeU64(params.minAmount1);\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::remove_liquidity`,\n      functionArguments: [serializer.toUint8Array()],\n    };\n  }\n\n  removeMultipleAMMLiquidity(\n    params: RemoveMultipleAMMLiquidityParams\n  ): InputEntryFunctionData {\n    const serializer = new Serializer();\n    serializer.serializeStr(params.poolId);\n    serializer.serializeU64(params.positions.length);\n\n    params.positions.forEach((position) => {\n      serializer.serialize(AccountAddress.fromString(position.positionAddr));\n      serializer.serializeU128(position.mintedShare);\n      serializer.serializeU64(position.minAmount0);\n      serializer.serializeU64(position.minAmount1);\n    });\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::remove_multi_liquidity`,\n      functionArguments: [serializer.toUint8Array()],\n    };\n  }\n\n  removeSingleCLMMLiquidity(\n    params: RemoveSingleCLMMLiquidityParams\n  ): InputEntryFunctionData {\n    const serializer = new Serializer();\n    serializer.serializeStr(params.poolId);\n    serializer.serialize(AccountAddress.fromString(params.positionAddr));\n    serializer.serializeU128(params.mintedShare);\n    serializer.serializeU64(params.minAmount0);\n    serializer.serializeU64(params.minAmount1);\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::remove_liquidity`,\n      functionArguments: [serializer.toUint8Array()],\n    };\n  }\n\n  removeMultipleCLMMLiquidity(\n    params: RemoveMultipleCLMMLiquidityParams\n  ): InputEntryFunctionData {\n    const serializer = new Serializer();\n    serializer.serializeStr(params.poolId);\n    serializer.serializeU64(params.positions.length);\n\n    params.positions.forEach((position) => {\n      serializer.serialize(AccountAddress.fromString(position.positionAddr));\n      serializer.serializeU128(position.mintedShare);\n      serializer.serializeU64(position.minAmount0);\n      serializer.serializeU64(position.minAmount1);\n    });\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::remove_multi_liquidity`,\n      functionArguments: [serializer.toUint8Array()],\n    };\n  }\n\n  removeSingleStableLiquidity(\n    params: RemoveSingleStableLiquidityParams\n  ): InputEntryFunctionData {\n    const serializer = new Serializer();\n    serializer.serializeStr(params.poolId);\n    serializer.serializeU64(1);\n    serializer.serialize(\n      AccountAddress.fromString(params.position.positionAddr)\n    );\n    serializer.serializeU8(params.liquidityType);\n\n    switch (params.liquidityType) {\n      case 0: {\n        // not implemented\n        serializer.serializeU256(0); // burn_amount\n        serializer.serializeU64(0); // i\n        serializer.serializeU256(0); // min received\n        break;\n      }\n\n      case 1: {\n        // not implemented\n        serializer.serializeVector([new U256(0)]); // amounts\n        serializer.serializeU256(0); // burn amount\n        break;\n      }\n\n      default: {\n        const amounts = params.position.amounts.map((amount) => {\n          return new U256(amount);\n        });\n\n        serializer.serializeU256(params.position.mintedShare);\n        serializer.serializeVector(amounts); // min amounts\n        break;\n      }\n    }\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::remove_liquidity`,\n      functionArguments: [serializer.toUint8Array()],\n    };\n  }\n\n  removeMultipleStableLiquidity(\n    params: RemoveMultipleStableLiquidityParams\n  ): InputEntryFunctionData {\n    const serializer = new Serializer();\n    serializer.serializeStr(params.poolId);\n    serializer.serializeU64(params.positions.length);\n\n    params.positions.forEach((position) => {\n      serializer.serialize(AccountAddress.fromString(position.positionAddr));\n\n      serializer.serializeU8(params.liquidityType);\n\n      switch (params.liquidityType) {\n        case 0: {\n          // not implemented\n          serializer.serializeU256(0); // burn_amount\n          serializer.serializeU64(0); // i\n          serializer.serializeU256(0); // min received\n          break;\n        }\n\n        case 1: {\n          // not implemented\n          serializer.serializeVector([new U256(0)]); // amounts\n          serializer.serializeU256(0); // burn amount\n          break;\n        }\n\n        default: {\n          const amounts = position.amounts.map((amount) => {\n            return new U256(amount);\n          });\n\n          serializer.serializeU256(position.mintedShare);\n          serializer.serializeVector(amounts); // min amounts\n          break;\n        }\n      }\n    });\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::remove_multi_liquidity`,\n      functionArguments: [serializer.toUint8Array()],\n    };\n  }\n\n  addAMMLiquidity(params: AddAMMLiquidityParams): InputEntryFunctionData {\n    const ser = new Serializer();\n\n    ser.serializeStr(params.poolId);\n    ser.serializeOption();\n    ser.serializeU64(params.amountA);\n    ser.serializeU64(params.amountB);\n    ser.serializeU64(0);\n    ser.serializeU64(0);\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::add_liquidity`,\n      functionArguments: [ser.toUint8Array()],\n    };\n  }\n\n  addCLMMLiquidity(params: AddCLMMLiquidityParams): InputEntryFunctionData {\n    const { poolId, minPrice, maxPrice, amountA, amountB, fee, isMaxAmountB } =\n      params;\n    const ser = new Serializer();\n\n    ser.serializeStr(poolId);\n    ser.serializeOption();\n    if (amountA > 0 && isMaxAmountB) {\n      ser.serializeU64(Math.round(amountA * 1.1)); // amount_a increase by 10%\n    } else ser.serializeU64(amountA); // amount_a\n    // amount_b increase by 10%\n    ser.serializeU64(\n      amountA == 0 || params.amountB == 0 || params.isMaxAmountB\n        ? amountB\n        : Math.round(amountB * 1.1)\n    );\n\n    // fixed_amount_a\n    if (isMaxAmountB) {\n      ser.serializeBool(false);\n    } else {\n      ser.serializeBool(amountA !== 0);\n    }\n\n    const tickSpacing = getSpacingFromFee(fee);\n    const nearestTick = Math.floor(TICK_BOUND / tickSpacing) * tickSpacing;\n\n    if (minPrice === Infinity) {\n      ser.serializeU64(toU64(nearestTick));\n    } else if (minPrice === roundPriceToTickSpacing(EMPTY_MIN_PRICE, fee)) {\n      ser.serializeU64(toU64(-nearestTick));\n    } else {\n      ser.serializeU64(toU64(priceToTickIndex(minPrice, tickSpacing)));\n    }\n\n    if (maxPrice === Infinity) {\n      ser.serializeU64(toU64(nearestTick));\n    } else if (maxPrice === roundPriceToTickSpacing(EMPTY_MIN_PRICE, fee)) {\n      ser.serializeU64(toU64(-nearestTick));\n    } else {\n      ser.serializeU64(toU64(priceToTickIndex(maxPrice, tickSpacing)));\n    }\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::add_liquidity`,\n      functionArguments: [ser.toUint8Array()],\n    };\n  }\n\n  addStableLiquidity(params: AddStableLiquidityParams): InputEntryFunctionData {\n    const { poolId, amounts } = params;\n    const ser = new Serializer();\n\n    ser.serializeStr(poolId);\n    ser.serializeOption();\n\n    ser.serializeVector(amounts.map((amount) => new U256(amount)));\n\n    // min_mint_amount\n    ser.serializeU256(0);\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::add_liquidity`,\n      functionArguments: [ser.toUint8Array()],\n    };\n  }\n\n  createAMMPoolAndAddLiquidity(\n    params: CreateAMMPoolAndAddLiquidityParams\n  ): InputEntryFunctionData {\n    const { tokenAddress, fee, amounts } = params;\n    const ser = new Serializer();\n\n    ser.serializeU8(2);\n    ser.serializeVector(\n      tokenAddress.map((address) => AccountAddress.fromString(address))\n    );\n    ser.serializeU64(fee);\n\n    amounts.forEach((amount) => {\n      ser.serializeU64(amount);\n    });\n\n    amounts.forEach(() => {\n      ser.serializeU64(0);\n    });\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::create_pool_add_liquidity`,\n      functionArguments: [ser.toUint8Array()],\n    };\n  }\n\n  createCLMMPoolAndAddLiquidity(\n    params: CreateCLMMPoolAndAddLiquidityParams\n  ): InputEntryFunctionData {\n    const {\n      tokenAddress,\n      fee,\n      amounts,\n      initialPrice,\n      minPrice,\n      maxPrice,\n      isMaxAmountB,\n    } = params;\n    const ser = new Serializer();\n\n    ser.serializeU8(3);\n    ser.serializeVector(\n      tokenAddress.map((address) => AccountAddress.fromString(address))\n    ); // assets\n    ser.serializeU64(fee);\n\n    const q64 = BigInt(2) ** BigInt(64);\n    const sqrtPInitialPrice = Math.sqrt(initialPrice) * Number(q64);\n    ser.serializeU128(toU64(sqrtPInitialPrice));\n\n    let isSingleSide = false;\n    amounts.forEach((amount, index) => {\n      if (!isSingleSide) isSingleSide = amount === 0;\n      if (index === 0 && amount > 0 && isMaxAmountB) {\n        ser.serializeU64(Math.round(amount * 1.1));\n      } else if (index === 1 && !isSingleSide && !isMaxAmountB) {\n        ser.serializeU64(Math.round(amount * 1.1));\n      } else {\n        ser.serializeU64(amount);\n      }\n    });\n\n    // fixed_amount_a\n    if (isMaxAmountB) {\n      ser.serializeBool(false);\n    } else {\n      ser.serializeBool(amounts?.at(0) !== 0);\n    }\n\n    const tickSpacing = getSpacingFromFee(fee);\n    const nearestTick = Math.floor(TICK_BOUND / tickSpacing) * tickSpacing;\n\n    if (minPrice === Infinity) {\n      ser.serializeU64(toU64(nearestTick));\n    } else if (minPrice === roundPriceToTickSpacing(EMPTY_MIN_PRICE, fee)) {\n      ser.serializeU64(toU64(-nearestTick));\n    } else {\n      ser.serializeU64(toU64(priceToTickIndex(minPrice, tickSpacing)));\n    }\n\n    if (maxPrice === Infinity) {\n      ser.serializeU64(toU64(nearestTick));\n    } else if (maxPrice === roundPriceToTickSpacing(EMPTY_MIN_PRICE, fee)) {\n      ser.serializeU64(toU64(-nearestTick));\n    } else {\n      ser.serializeU64(toU64(priceToTickIndex(maxPrice, tickSpacing)));\n    }\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::create_pool_add_liquidity`,\n      functionArguments: [ser.toUint8Array()],\n    };\n  }\n\n  createStablePoolAndAddLiquidity(\n    params: CreateStablePoolAndAddLiquidityParams\n  ): InputEntryFunctionData {\n    const {\n      tokenAddress,\n      fee,\n      amounts,\n      amplificationFactor,\n      offpeg_fee_multiplier = 20000000000,\n    } = params;\n    const ser = new Serializer();\n\n    ser.serializeU8(4);\n    ser.serializeVector(\n      tokenAddress.map((address) => AccountAddress.fromString(address))\n    ); // assets\n    ser.serializeU64(fee * 10000);\n\n    ser.serializeU256(amplificationFactor);\n\n    // offpeg_fee_multiplier\n    ser.serializeU256(offpeg_fee_multiplier);\n\n    ser.serializeVector(amounts.map((amount) => new U256(amount)));\n\n    // min_mint_amount\n    ser.serializeU256(0);\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::create_pool_add_liquidity`,\n      functionArguments: [ser.toUint8Array()],\n    };\n  }\n\n  collectFee(params: CollectFeeParams): InputEntryFunctionData {\n    const ser = new Serializer();\n\n    ser.serializeStr(params.poolId);\n    AccountAddress.fromString(params.positionAddr).serialize(ser);\n\n    return {\n      function: `${this._sdk.sdkConfig.contractAddress}::router::collect_fee`,\n      functionArguments: [ser.toUint8Array()],\n    };\n  }\n}\n"],"mappings":"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","names":["AccountAddress","Serializer","U256","TICK_BOUND","BASE","EMPTY_MIN_PRICE","PositionModule","sdk","params","serializer","Serializer","AccountAddress","position","U256","amounts","amount","ser","poolId","minPrice","maxPrice","amountA","amountB","fee","isMaxAmountB","tickSpacing","getSpacingFromFee","nearestTick","toU64","roundPriceToTickSpacing","priceToTickIndex","tokenAddress","address","initialPrice","q64","sqrtPInitialPrice","isSingleSide","index","amplificationFactor","offpeg_fee_multiplier"]}