From eab0ce00e5f0fb327eef3a0ecbb0020dc6f65070 Mon Sep 17 00:00:00 2001 From: jinoosss Date: Mon, 24 Jun 2024 18:05:55 +0900 Subject: [PATCH 01/17] feat: add a reposition contract function on reposition --- .../transaction-messages/position.ts | 28 ++++- .../reposition/use-reposition-handle.tsx | 35 +++--- .../position/position-repository-impl.ts | 115 ++++++++++++++++-- .../position/position-repository.ts | 18 ++- .../repositories/position/request/index.ts | 1 + .../request/reposition-liquidity-request.ts | 23 ++++ .../repositories/position/response/index.ts | 3 +- .../response/reposition-liquidity-response.ts | 13 ++ 8 files changed, 205 insertions(+), 31 deletions(-) create mode 100644 packages/web/src/repositories/position/request/reposition-liquidity-request.ts create mode 100644 packages/web/src/repositories/position/response/reposition-liquidity-response.ts diff --git a/packages/web/src/common/clients/wallet-client/transaction-messages/position.ts b/packages/web/src/common/clients/wallet-client/transaction-messages/position.ts index 7bcf1f2ed..c319475bb 100644 --- a/packages/web/src/common/clients/wallet-client/transaction-messages/position.ts +++ b/packages/web/src/common/clients/wallet-client/transaction-messages/position.ts @@ -102,8 +102,8 @@ export function makePositionIncreaseLiquidityMessage( packagePath: PACKAGE_POSITION_PATH, args: [ lpTokenId, // LP Token ID - `${amount0Desired}`, // Maximum amount of tokenA to offer `${amount1Desired}`, // Maximum amount of tokenB to offer + `${amount0Desired}`, // Maximum amount of tokenA to offer `${amount0Min}`, // Minimum amount of tokenA to provide `${amount1Min}`, // Minimum amount of tokenB to provide "9999999999", // Deadline UTC time @@ -112,6 +112,32 @@ export function makePositionIncreaseLiquidityMessage( }); } +export function makePositionRepositionLiquidityMessage( + lpTokenId: string, + minTick: number, + maxTick: number, + tokenAAmount: string, + tokenBAmount: string, + caller: string, + sendAmount: string | null, +) { + const send = makeGNOTSendAmount(sendAmount); + + return makeTransactionMessage({ + send, + func: "Reposition", + packagePath: PACKAGE_POSITION_PATH, + args: [ + lpTokenId, // LP Token ID + `${minTick}`, // position's minimal tick + `${maxTick}`, // position's maximal tick + `${tokenAAmount}`, // Maximum amount of tokenB to offer + `${tokenBAmount}`, // Maximum amount of tokenA to offer + ], + caller, + }); +} + export function makePositionDecreaseLiquidityMessage( lpTokenId: string, liquidityRatio: number, diff --git a/packages/web/src/hooks/reposition/use-reposition-handle.tsx b/packages/web/src/hooks/reposition/use-reposition-handle.tsx index 1dedd9c18..6a9000919 100644 --- a/packages/web/src/hooks/reposition/use-reposition-handle.tsx +++ b/packages/web/src/hooks/reposition/use-reposition-handle.tsx @@ -15,7 +15,6 @@ import { useTokenAmountInput } from "@hooks/token/use-token-amount-input"; import { useWallet } from "@hooks/wallet/use-wallet"; import { PoolPositionModel } from "@models/position/pool-position-model"; import { TokenModel } from "@models/token/token-model"; -import { AddLiquidityResponse } from "@repositories/pool/response/add-liquidity-response"; import { SwapRouteResponse } from "@repositories/swap/response/swap-route-response"; import { IncreaseState } from "@states/index"; import { MAX_UINT64 } from "@utils/math.utils"; @@ -32,6 +31,7 @@ import { convertToKMB } from "@utils/stake-position-utils"; import { checkGnotPath, encryptId } from "@utils/common"; import { useEstimateSwap } from "@query/router"; import { makeDisplayTokenAmount } from "@utils/token-utils"; +import { RepositionLiquidityResponse } from "@repositories/position/response"; export interface IPriceRange { tokenARatioStr: string; @@ -51,13 +51,12 @@ export const useRepositionHandle = () => { ); const { address } = useAddress(); - const { swapRouterRepository, positionRepository, poolRepository } = - useGnoswapContext(); + const { swapRouterRepository, positionRepository } = useGnoswapContext(); const { getGnotPath } = useGnotToGnot(); const { slippage, changeSlippage } = useSlippage(); const { connected, account } = useWallet(); const { positions } = usePositionData({ - poolPath: encryptId(poolPath) + poolPath: encryptId(poolPath), }); const { openModal: openConfirmModal, update: updateConfirmModalData } = useTransactionConfirmModal(); @@ -101,8 +100,8 @@ export const useRepositionHandle = () => { return selectedPosition?.closed ? RANGE_STATUS_OPTION.NONE : inRange - ? RANGE_STATUS_OPTION.IN - : RANGE_STATUS_OPTION.OUT; + ? RANGE_STATUS_OPTION.IN + : RANGE_STATUS_OPTION.OUT; }, [selectedPosition, inRange]); const aprFee = useMemo(() => { @@ -191,13 +190,13 @@ export const useRepositionHandle = () => { : 1 / selectPool.currentPrice; const originPrices = ordered ? { - minPrice: tickToPrice(selectedPosition.tickLower), - maxPrice: tickToPrice(selectedPosition.tickUpper), - } + minPrice: tickToPrice(selectedPosition.tickLower), + maxPrice: tickToPrice(selectedPosition.tickUpper), + } : { - minPrice: tickToPrice(-1 * selectedPosition.tickUpper), - maxPrice: tickToPrice(-1 * selectedPosition.tickLower), - }; + minPrice: tickToPrice(-1 * selectedPosition.tickUpper), + maxPrice: tickToPrice(-1 * selectedPosition.tickLower), + }; const depositPrices = { minPrice: selectPool.minPrice, maxPrice: selectPool.maxPrice, @@ -221,7 +220,7 @@ export const useRepositionHandle = () => { originDepositAmounts.amountA.toString(), ).dividedBy( Number(originDepositAmounts.amountA.toString()) + - Number(originDepositAmounts.amountB.toString()), + Number(originDepositAmounts.amountB.toString()), ); const currentDepositRatioBN = BigNumber( Number(depositAmounts.amountA), @@ -414,7 +413,7 @@ export const useRepositionHandle = () => { async ( swapToken: TokenModel, swapAmount: string, - ): Promise | null> => { + ): Promise | null> => { if ( !address || !selectedPosition || @@ -441,14 +440,14 @@ export const useRepositionHandle = () => { ? repositionAmounts.amountB.toString() : BigNumber(currentAmounts.amountB).plus(swapAmount).toString(); - return poolRepository - .addLiquidity({ + return positionRepository + .repositionLiquidity({ + lpTokenId: selectedPosition.lpTokenId, tokenA, tokenB, tokenAAmount, tokenBAmount, slippage: Number(MAX_UINT64), - feeTier: selectPool.feeTier, minTick: priceToNearTick( selectPool.minPrice, SwapFeeTierInfoMap[selectPool.feeTier].tickSpacing, @@ -479,7 +478,7 @@ export const useRepositionHandle = () => { selectPool.minPrice, selectPool.maxPrice, repositionAmounts, - poolRepository, + positionRepository, ], ); diff --git a/packages/web/src/repositories/position/position-repository-impl.ts b/packages/web/src/repositories/position/position-repository-impl.ts index f3c8f3190..4211ec624 100644 --- a/packages/web/src/repositories/position/position-repository-impl.ts +++ b/packages/web/src/repositories/position/position-repository-impl.ts @@ -20,6 +20,7 @@ import { IncreaseLiquidityResponse, PositionBinResponse, PositionListResponse, + RepositionLiquidityResponse, } from "./response"; import { makeApporveStakeTokenMessage, @@ -31,6 +32,7 @@ import { makePositionDecreaseLiquidityMessage, makePositionCollectFeeMessage, makePositionIncreaseLiquidityMessage, + makePositionRepositionLiquidityMessage, } from "@common/clients/wallet-client/transaction-messages/position"; import { IPositionHistoryModel } from "@models/position/position-history-model"; import { PositionHistoryMapper } from "@models/position/mapper/position-history-mapper"; @@ -46,7 +48,11 @@ import { WRAPPED_GNOT_PATH, } from "@constants/environment.constant"; import { MAX_INT64, MAX_UINT64 } from "@utils/math.utils"; -import { DecreaseLiquidityRequest, IncreaseLiquidityRequest } from "./request"; +import { + DecreaseLiquidityRequest, + IncreaseLiquidityRequest, + RepositionLiquidityRequest, +} from "./request"; import { checkGnotPath, isGNOTPath } from "@utils/common"; import { makeRawTokenAmount } from "@utils/token-utils"; import { makeStakerApproveMessage } from "@common/clients/wallet-client/transaction-messages/pool"; @@ -100,16 +106,16 @@ export class PositionRepositoryImpl implements PositionRepository { getPositionsByAddress = async ( address: string, options?: { - isClosed?: boolean, - poolPath?: string, + isClosed?: boolean; + poolPath?: string; }, ): Promise => { if (!this.networkClient) { throw new CommonError("FAILED_INITIALIZE_PROVIDER"); } const queries = [ - (options?.isClosed !== undefined ? `closed=${options.isClosed}` : ""), - (options?.poolPath !== undefined ? `poolPath=${options.poolPath}` : "") + options?.isClosed !== undefined ? `closed=${options.isClosed}` : "", + options?.poolPath !== undefined ? `poolPath=${options.poolPath}` : "", ]; const queryString = queries.filter(item => !!item).join("&"); @@ -120,7 +126,7 @@ export class PositionRepositoryImpl implements PositionRepository { "/users/" + address + "/position" + - (queryString ? `?${queryString}` : "") + (queryString ? `?${queryString}` : ""), }); if (!response?.data?.data) { return []; @@ -323,8 +329,8 @@ export class PositionRepositoryImpl implements PositionRepository { tokenAWrappedPath === WRAPPED_GNOT_PATH ? tokenAAmountRaw : tokenBWrappedPath - ? tokenBAmountRaw - : null; + ? tokenBAmountRaw + : null; // Make Approve messages that can be managed by a Pool package of tokens. const approveMessages = [ @@ -471,6 +477,99 @@ export class PositionRepositoryImpl implements PositionRepository { }; }; + repositionLiquidity = async ( + request: RepositionLiquidityRequest, + ): Promise> => { + if (this.walletClient === null) { + throw new CommonError("FAILED_INITIALIZE_WALLET"); + } + const { + lpTokenId, + tokenA, + tokenB, + minTick, + maxTick, + tokenAAmount, + tokenBAmount, + caller, + } = request; + + const tokenAWrappedPath = tokenA.wrappedPath || checkGnotPath(tokenA.path); + const tokenBWrappedPath = tokenB.wrappedPath || checkGnotPath(tokenB.path); + + const tokenAAmountRaw = makeRawTokenAmount(tokenA, tokenAAmount) || "0"; + const tokenBAmountRaw = makeRawTokenAmount(tokenB, tokenBAmount) || "0"; + + const sendAmount = + tokenAWrappedPath === WRAPPED_GNOT_PATH + ? tokenAAmountRaw + : tokenBWrappedPath + ? tokenBAmountRaw + : null; + + // Make Approve messages that can be managed by a Pool package of tokens. + const approveMessages = [ + makeApproveMessage( + tokenAWrappedPath, + [PACKAGE_POOL_ADDRESS, tokenAAmountRaw], + caller, + ), + makeApproveMessage( + tokenBWrappedPath, + [PACKAGE_POOL_ADDRESS, tokenBAmountRaw], + caller, + ), + ]; + + const increaseLiquidityMessage = makePositionRepositionLiquidityMessage( + lpTokenId, + minTick, + maxTick, + tokenAAmountRaw, + tokenBAmountRaw, + caller, + sendAmount, + ); + + const messages = [...approveMessages, increaseLiquidityMessage]; + + const response = await this.walletClient.sendTransaction({ + messages, + gasFee: DEFAULT_GAS_FEE, + gasWanted: DEFAULT_GAS_WANTED, + }); + + const result = response as WalletResponse; + if (result.code !== 0 || !result.data) { + return { + ...result, + data: null, + }; + } + + const data = ( + result.data as SendTransactionSuccessResponse + ).data; + if (!data || data.length < 5) { + return { + ...result, + data: null, + }; + } + + return { + ...result, + data: { + tokenID: data[0], + liquidity: data[1], + minTick: Number(data[2]), + maxTick: Number(data[3]), + tokenAAmount: data[4], + tokenBAmount: data[5], + }, + }; + }; + removeLiquidity = async ( request: RemoveLiquidityRequest, ): Promise>> => { diff --git a/packages/web/src/repositories/position/position-repository.ts b/packages/web/src/repositories/position/position-repository.ts index ea8648861..65d1e6011 100644 --- a/packages/web/src/repositories/position/position-repository.ts +++ b/packages/web/src/repositories/position/position-repository.ts @@ -11,17 +11,25 @@ import { IPositionHistoryModel } from "@models/position/position-history-model"; import { DecreaseLiquidityResponse, IncreaseLiquidityResponse, + RepositionLiquidityResponse, } from "./response"; -import { DecreaseLiquidityRequest, IncreaseLiquidityRequest } from "./request"; +import { + DecreaseLiquidityRequest, + IncreaseLiquidityRequest, + RepositionLiquidityRequest, +} from "./request"; import { PositionBinModel } from "@models/position/position-bin-model"; export interface PositionRepository { - getPositionsByAddress: (address: string, options?: { isClosed?: boolean, poolPath?: string, }) => Promise; + getPositionsByAddress: ( + address: string, + options?: { isClosed?: boolean; poolPath?: string }, + ) => Promise; getPositionBins: ( lpTokenId: string, count: 20 | 40, - ) => Promise + ) => Promise; claimAll: ( request: ClaimAllRequest, @@ -43,6 +51,10 @@ export interface PositionRepository { request: DecreaseLiquidityRequest, ) => Promise>; + repositionLiquidity: ( + request: RepositionLiquidityRequest, + ) => Promise>; + removeLiquidity: ( request: RemoveLiquidityRequest, ) => Promise>>; diff --git a/packages/web/src/repositories/position/request/index.ts b/packages/web/src/repositories/position/request/index.ts index 3c5dbda88..e7b6c3cac 100644 --- a/packages/web/src/repositories/position/request/index.ts +++ b/packages/web/src/repositories/position/request/index.ts @@ -1,6 +1,7 @@ export * from "./claim-all-request"; export * from "./decrease-liquidity-request"; export * from "./increase-liquidity-request"; +export * from "./reposition-liquidity-request"; export * from "./remove-liquidity-request"; export * from "./stake-positions-request"; export * from "./unstake-positions-request"; diff --git a/packages/web/src/repositories/position/request/reposition-liquidity-request.ts b/packages/web/src/repositories/position/request/reposition-liquidity-request.ts new file mode 100644 index 000000000..eb8fc519f --- /dev/null +++ b/packages/web/src/repositories/position/request/reposition-liquidity-request.ts @@ -0,0 +1,23 @@ +import { TokenModel } from "@models/token/token-model"; + +export interface RepositionLiquidityRequest { + lpTokenId: string; + + tokenA: TokenModel; + + tokenB: TokenModel; + + tokenAAmount: string; + + tokenBAmount: string; + + minTick: number; + + maxTick: number; + + slippage: number; + + caller: string; + + withStaking?: boolean; +} diff --git a/packages/web/src/repositories/position/response/index.ts b/packages/web/src/repositories/position/response/index.ts index dc9386d26..8a045fb0b 100644 --- a/packages/web/src/repositories/position/response/index.ts +++ b/packages/web/src/repositories/position/response/index.ts @@ -1,4 +1,5 @@ export * from "./position-list-response"; export * from "./increase-liquidity-response"; export * from "./decrease-liquidity-response"; -export * from "./position-bin"; \ No newline at end of file +export * from "./reposition-liquidity-response"; +export * from "./position-bin"; diff --git a/packages/web/src/repositories/position/response/reposition-liquidity-response.ts b/packages/web/src/repositories/position/response/reposition-liquidity-response.ts new file mode 100644 index 000000000..68fa432ae --- /dev/null +++ b/packages/web/src/repositories/position/response/reposition-liquidity-response.ts @@ -0,0 +1,13 @@ +export interface RepositionLiquidityResponse { + tokenID: string; + + liquidity: string; + + minTick: number; + + maxTick: number; + + tokenAAmount: string; + + tokenBAmount: string; +} From af5be077e91ef58fe11d373990eab2d7f50589f6 Mon Sep 17 00:00:00 2001 From: jinoosss Date: Mon, 24 Jun 2024 18:11:12 +0900 Subject: [PATCH 02/17] fix: fix component's argument --- .../common/reposition-modal/RepositionModal.tsx | 10 +++++----- .../RepositionBroadcastProgress.tsx | 10 +++++----- .../reposition-container/RepositionContainer.tsx | 4 ++-- .../RepoitionModalContainer.tsx | 10 +++++----- .../src/hooks/reposition/use-reposition-handle.tsx | 4 ++-- .../reposition/use-reposition-position-modal.tsx | 12 ++++++------ 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/web/src/components/common/reposition-modal/RepositionModal.tsx b/packages/web/src/components/common/reposition-modal/RepositionModal.tsx index 9569496ad..5080b3f41 100644 --- a/packages/web/src/components/common/reposition-modal/RepositionModal.tsx +++ b/packages/web/src/components/common/reposition-modal/RepositionModal.tsx @@ -6,12 +6,12 @@ import RepositionInfo from "@components/reposition/reposition-info/RepositionInf import { RANGE_STATUS_OPTION } from "@constants/option.constant"; import { IPriceRange } from "@hooks/increase/use-increase-handle"; import { TokenModel } from "@models/token/token-model"; -import { AddLiquidityResponse } from "@repositories/pool/response/add-liquidity-response"; import { SwapRouteResponse } from "@repositories/swap/response/swap-route-response"; import React, { useCallback, useState } from "react"; import Button, { ButtonHierarchy } from "../button/Button"; import IconClose from "../icons/IconCancel"; import { RepositionModalWrapper } from "./RepositionModal.styles"; +import { RepositionLiquidityResponse } from "@repositories/position/response"; interface Props { close: () => void; @@ -37,10 +37,10 @@ interface Props { repositionAmounts: { amountA: number | null; amountB: number | null } | null; removePosition: () => Promise; swapRemainToken: () => Promise | null>; - addPosition: ( + reposition: ( swapToken: TokenModel, swapAmount: string, - ) => Promise | null>; + ) => Promise | null>; } const RepositionModal: React.FC = ({ @@ -55,7 +55,7 @@ const RepositionModal: React.FC = ({ repositionAmounts, removePosition, swapRemainToken, - addPosition, + reposition, }) => { const [confirm, setConfirm] = useState(false); @@ -102,7 +102,7 @@ const RepositionModal: React.FC = ({ diff --git a/packages/web/src/components/reposition/reposition-broadcast-progress/RepositionBroadcastProgress.tsx b/packages/web/src/components/reposition/reposition-broadcast-progress/RepositionBroadcastProgress.tsx index 6784320c4..b32905b62 100644 --- a/packages/web/src/components/reposition/reposition-broadcast-progress/RepositionBroadcastProgress.tsx +++ b/packages/web/src/components/reposition/reposition-broadcast-progress/RepositionBroadcastProgress.tsx @@ -9,22 +9,22 @@ import IconSwapCircle from "@components/common/icons/IconSwapCircle"; import IconAddPositionCircle from "@components/common/icons/IconAddPositionCircle"; import { WalletResponse } from "@common/clients/wallet-client/protocols"; import { SwapRouteResponse } from "@repositories/swap/response/swap-route-response"; -import { AddLiquidityResponse } from "@repositories/pool/response/add-liquidity-response"; import { TokenModel } from "@models/token/token-model"; +import { RepositionLiquidityResponse } from "@repositories/position/response"; export interface RepositionBroadcastProgressProps { removePosition: () => Promise; swapRemainToken: () => Promise | null>; - addPosition: ( + reposition: ( swapToken: TokenModel, swapAmount: string, - ) => Promise | null>; + ) => Promise | null>; closeModal: () => void; } const RepositionBroadcastProgress: React.FC< RepositionBroadcastProgressProps -> = ({ removePosition, addPosition, swapRemainToken, closeModal }) => { +> = ({ removePosition, reposition, swapRemainToken, closeModal }) => { const [removePositionState, setRemovePositionState] = useState("NONE"); const [swapState, setSwapState] = useState("NONE"); @@ -124,7 +124,7 @@ const RepositionBroadcastProgress: React.FC< return; } - addPosition(swapResult.resultToken, swapResult.resultAmount).then( + reposition(swapResult.resultToken, swapResult.resultAmount).then( response => { if (!response) { setAddPositionState("FAIL"); diff --git a/packages/web/src/containers/reposition-container/RepositionContainer.tsx b/packages/web/src/containers/reposition-container/RepositionContainer.tsx index 4b7dbdbbd..c9ccfa35b 100644 --- a/packages/web/src/containers/reposition-container/RepositionContainer.tsx +++ b/packages/web/src/containers/reposition-container/RepositionContainer.tsx @@ -35,7 +35,7 @@ const RepositionContainer: React.FC = () => { repositionAmounts, removePosition, swapRemainToken, - addPosition, + reposition, } = useRepositionHandle(); const { openModal } = useRepositionModalContainer({ @@ -53,7 +53,7 @@ const RepositionContainer: React.FC = () => { repositionAmounts, removePosition, swapRemainToken, - addPosition, + reposition, }); const onSubmit = () => { diff --git a/packages/web/src/containers/reposition-modal-container/RepoitionModalContainer.tsx b/packages/web/src/containers/reposition-modal-container/RepoitionModalContainer.tsx index 0b42e6310..b61375ead 100644 --- a/packages/web/src/containers/reposition-modal-container/RepoitionModalContainer.tsx +++ b/packages/web/src/containers/reposition-modal-container/RepoitionModalContainer.tsx @@ -4,7 +4,7 @@ import { RANGE_STATUS_OPTION } from "@constants/option.constant"; import { useClearModal } from "@hooks/common/use-clear-modal"; import { IPriceRange } from "@hooks/reposition/use-reposition-handle"; import { TokenModel } from "@models/token/token-model"; -import { AddLiquidityResponse } from "@repositories/pool/response/add-liquidity-response"; +import { RepositionLiquidityResponse } from "@repositories/position/response"; import { SwapRouteResponse } from "@repositories/swap/response/swap-route-response"; import React, { useCallback } from "react"; @@ -31,10 +31,10 @@ interface Props { repositionAmounts: { amountA: number | null; amountB: number | null } | null; removePosition: () => Promise; swapRemainToken: () => Promise | null>; - addPosition: ( + reposition: ( swapToken: TokenModel, swapAmount: string, - ) => Promise | null>; + ) => Promise | null>; } const RepositionModalContainer: React.FC = ({ @@ -48,7 +48,7 @@ const RepositionModalContainer: React.FC = ({ repositionAmounts, removePosition, swapRemainToken, - addPosition, + reposition, }) => { const clearModal = useClearModal(); @@ -69,7 +69,7 @@ const RepositionModalContainer: React.FC = ({ repositionAmounts={repositionAmounts} removePosition={removePosition} swapRemainToken={swapRemainToken} - addPosition={addPosition} + reposition={reposition} /> ); }; diff --git a/packages/web/src/hooks/reposition/use-reposition-handle.tsx b/packages/web/src/hooks/reposition/use-reposition-handle.tsx index 6a9000919..a25d93c68 100644 --- a/packages/web/src/hooks/reposition/use-reposition-handle.tsx +++ b/packages/web/src/hooks/reposition/use-reposition-handle.tsx @@ -409,7 +409,7 @@ export const useRepositionHandle = () => { swapRouterRepository, ]); - const addPosition = useCallback( + const reposition = useCallback( async ( swapToken: TokenModel, swapAmount: string, @@ -531,6 +531,6 @@ export const useRepositionHandle = () => { repositionAmounts: estimatedRepositionAmounts, removePosition, swapRemainToken, - addPosition, + reposition, }; }; diff --git a/packages/web/src/hooks/reposition/use-reposition-position-modal.tsx b/packages/web/src/hooks/reposition/use-reposition-position-modal.tsx index d1f5e5390..f8a9874fc 100644 --- a/packages/web/src/hooks/reposition/use-reposition-position-modal.tsx +++ b/packages/web/src/hooks/reposition/use-reposition-position-modal.tsx @@ -7,12 +7,12 @@ import { import RepositionModalContainer from "@containers/reposition-modal-container/RepoitionModalContainer"; import { TokenAmountInputModel } from "@hooks/token/use-token-amount-input"; import { TokenModel } from "@models/token/token-model"; -import { AddLiquidityResponse } from "@repositories/pool/response/add-liquidity-response"; import { SwapRouteResponse } from "@repositories/swap/response/swap-route-response"; import { CommonState } from "@states/index"; import { useAtom } from "jotai"; import { useCallback, useMemo } from "react"; import { IPriceRange } from "./use-reposition-handle"; +import { RepositionLiquidityResponse } from "@repositories/position/response"; export interface Props { openModal: () => void; @@ -33,10 +33,10 @@ export interface RepositionModalProps { repositionAmounts: { amountA: number | null; amountB: number | null } | null; removePosition: () => Promise; swapRemainToken: () => Promise | null>; - addPosition: ( + reposition: ( swapToken: TokenModel, swapAmount: string, - ) => Promise | null>; + ) => Promise | null>; } export const useRepositionModalContainer = ({ @@ -54,7 +54,7 @@ export const useRepositionModalContainer = ({ repositionAmounts, removePosition, swapRemainToken, - addPosition, + reposition, }: RepositionModalProps): Props => { const [, setOpenedModal] = useAtom(CommonState.openedModal); const [, setModalContent] = useAtom(CommonState.modalContent); @@ -95,7 +95,7 @@ export const useRepositionModalContainer = ({ repositionAmounts={repositionAmounts} removePosition={removePosition} swapRemainToken={swapRemainToken} - addPosition={addPosition} + reposition={reposition} />, ); }, [ @@ -111,7 +111,7 @@ export const useRepositionModalContainer = ({ repositionAmounts, removePosition, swapRemainToken, - addPosition, + reposition, ]); return { From 9ca8753d072a594bb5ced1009b435421e048aa89 Mon Sep 17 00:00:00 2001 From: jinoosss Date: Thu, 27 Jun 2024 18:59:28 +0900 Subject: [PATCH 03/17] fix: change message arguments --- .../clients/wallet-client/transaction-messages/position.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/src/common/clients/wallet-client/transaction-messages/position.ts b/packages/web/src/common/clients/wallet-client/transaction-messages/position.ts index c319475bb..6d31e3a1e 100644 --- a/packages/web/src/common/clients/wallet-client/transaction-messages/position.ts +++ b/packages/web/src/common/clients/wallet-client/transaction-messages/position.ts @@ -102,8 +102,8 @@ export function makePositionIncreaseLiquidityMessage( packagePath: PACKAGE_POSITION_PATH, args: [ lpTokenId, // LP Token ID - `${amount1Desired}`, // Maximum amount of tokenB to offer `${amount0Desired}`, // Maximum amount of tokenA to offer + `${amount1Desired}`, // Maximum amount of tokenB to offer `${amount0Min}`, // Minimum amount of tokenA to provide `${amount1Min}`, // Minimum amount of tokenB to provide "9999999999", // Deadline UTC time From 0f8ae5b7a4888e021ba1d20e61e579d6b2a0ae69 Mon Sep 17 00:00:00 2001 From: jinoosss Date: Mon, 15 Jul 2024 22:43:21 +0900 Subject: [PATCH 04/17] fix: add button state in reposition --- .../reposition-content/RepositionContent.tsx | 27 ++++++++++---- .../RepositionContainer.tsx | 3 ++ .../reposition/use-reposition-handle.tsx | 37 +++++++++++-------- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/packages/web/src/components/reposition/reposition-content/RepositionContent.tsx b/packages/web/src/components/reposition/reposition-content/RepositionContent.tsx index 88f811d9b..eb3a4129c 100644 --- a/packages/web/src/components/reposition/reposition-content/RepositionContent.tsx +++ b/packages/web/src/components/reposition/reposition-content/RepositionContent.tsx @@ -3,20 +3,18 @@ import IconInfo from "@components/common/icons/IconInfo"; import Tooltip from "@components/common/tooltip/Tooltip"; import { RANGE_STATUS_OPTION } from "@constants/option.constant"; import { AddLiquidityPriceRage } from "@containers/earn-add-liquidity-container/EarnAddLiquidityContainer"; -import { - INCREASE_BUTTON_TYPE, - IPriceRange, -} from "@hooks/increase/use-increase-handle"; +import { IPriceRange } from "@hooks/increase/use-increase-handle"; import { SelectPool } from "@hooks/pool/use-select-pool"; import { TokenAmountInputModel } from "@hooks/token/use-token-amount-input"; import { PoolPositionModel } from "@models/position/pool-position-model"; import { TokenModel } from "@models/token/token-model"; -import React from "react"; +import React, { useMemo } from "react"; import BalanceChange from "../balance-change/BalanceChange"; import RepositionSelectPosition from "../reposition-select-position/RepositionSelectPosition"; import RepositionSelectRange from "../reposition-select-range/RepositionSelectRange"; import { ToolTipContentWrapper } from "../reposition-select-range/RepositionSelectRange.styles"; import { RepositionContentWrapper } from "./RepositionContent.styles"; +import { REPOSITION_BUTTON_TYPE } from "@hooks/reposition/use-reposition-handle"; interface RepositionContentProps { tokenA: TokenModel | null; @@ -34,7 +32,7 @@ interface RepositionContentProps { changeTokenBAmount: (amount: string) => void; slippage: number; changeSlippage: (value: number) => void; - buttonType: INCREASE_BUTTON_TYPE; + buttonType: REPOSITION_BUTTON_TYPE; onSubmit: () => void; selectPool: SelectPool; priceRanges: AddLiquidityPriceRage[]; @@ -64,7 +62,19 @@ const RepositionContent: React.FC = ({ repositionAmounts, selectedPosition, isLoadingPosition, + buttonType, }) => { + const submitButtonText = useMemo(() => { + if (buttonType === "INSUFFICIENT_LIQUIDITY") { + return "Insufficient Liquidity"; + } + return "Reposition"; + }, [buttonType]); + + const isSubmit = useMemo(() => { + return buttonType === "REPOSITION"; + }, [buttonType]); + return (
@@ -128,11 +138,12 @@ const RepositionContent: React.FC = ({