diff --git a/packages/oraidex-common/package.json b/packages/oraidex-common/package.json
index 71d44bc2..afca2328 100644
--- a/packages/oraidex-common/package.json
+++ b/packages/oraidex-common/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@oraichain/oraidex-common",
-  "version": "1.0.41",
+  "version": "1.0.42",
   "main": "build/index.js",
   "files": [
     "build/"
diff --git a/packages/oraidex-common/src/pairs.ts b/packages/oraidex-common/src/pairs.ts
index 213259da..2a19c0df 100644
--- a/packages/oraidex-common/src/pairs.ts
+++ b/packages/oraidex-common/src/pairs.ts
@@ -78,6 +78,10 @@ export const PAIRS: PairMapping[] = [
   {
     asset_infos: [{ token: { contract_addr: INJECTIVE_CONTRACT } }, { native_token: { denom: ORAI } }],
     symbols: ["INJ", "ORAI"]
+  },
+  {
+    asset_infos: [{ token: { contract_addr: USDC_CONTRACT } }, { token: { contract_addr: ORAIX_CONTRACT } }],
+    symbols: ["ORAIX", "USDC"]
   }
 ];
 
@@ -94,7 +98,8 @@ export enum pairLpTokens {
   USDC_ORAI = "orai1e0x87w9ezwq2sdmvv5dq5ngzy98lt47tqfaf2m7zpkg49g5dj6fqred5d7",
   TRX_ORAI = "orai1wgywgvumt5dxhm7vjpwx5es9ecrtl85qaqdspjqwx2lugy7vmw5qlwrn88",
   SCATOM_ATOM = "orai1hcjne0hmdj6pjrc3xuksucr0yplsa9ny7v047c34y8k8hfflq6yqyjapnn",
-  INJ_ORAI = "orai1slqw6gfvs6l2jgvh5ryjayf4g77d7sgfv6fumtyzcr06a6g9gnrq6c4rgg"
+  INJ_ORAI = "orai1slqw6gfvs6l2jgvh5ryjayf4g77d7sgfv6fumtyzcr06a6g9gnrq6c4rgg",
+  USDC_ORAIX = "orai1nwpfd09mr4rf8d5c9mh43axzezkwyr7dq2lus23jsw4xw2jqkaxqxwmkd3"
 }
 
 // token identifier can be denom or contract addr
@@ -109,47 +114,6 @@ export const isInPairList = (tokenIdentifier: string) => {
   );
 };
 
-/**
- * Get list contract_addr | denom that make a pair when combined with input
- * @param contractAddress
- * @returns
- */
-export const getPairSwapV2 = (contractAddress: string) => {
-  let arr = [];
-  let arrDenom = ORAI;
-  if (!contractAddress) return { arrLength: 0 };
-
-  const pairMapping = PAIRS.filter((p) =>
-    p.asset_infos.find(
-      (asset: {
-        token: {
-          contract_addr: string;
-        };
-      }) => asset?.token?.contract_addr === contractAddress
-    )
-  );
-
-  if (pairMapping.length) {
-    for (const info of pairMapping) {
-      const assets0 = parseAssetInfo(info?.asset_infos?.[0]);
-      const assets1 = parseAssetInfo(info?.asset_infos?.[1]);
-      if (assets0 !== contractAddress) arr.push(assets0);
-      if (assets1 !== contractAddress) arr.push(assets1);
-    }
-  }
-
-  if (arr.length) {
-    arrDenom = oraichainTokens.find((e) => e.contractAddress === arr[0])?.denom ?? arr[0];
-  }
-
-  return {
-    arr,
-    arrLength: arr.length,
-    arrDenom,
-    arrIncludesOrai: arr.includes(ORAI)
-  };
-};
-
 export const isFactoryV1 = (assetInfos: [AssetInfo, AssetInfo]): boolean => {
   const pair = PAIRS.find(
     (pair) =>
diff --git a/packages/oraidex-common/tests/helper.spec.ts b/packages/oraidex-common/tests/helper.spec.ts
index 107d9f6b..109b8690 100644
--- a/packages/oraidex-common/tests/helper.spec.ts
+++ b/packages/oraidex-common/tests/helper.spec.ts
@@ -34,7 +34,7 @@ import {
 } from "../src/helper";
 import { CoinGeckoId, NetworkChainId, OraiToken } from "../src/network";
 import { AssetInfo } from "@oraichain/oraidex-contracts-sdk";
-import { getPairSwapV2, isFactoryV1 } from "../src/pairs";
+import { isFactoryV1 } from "../src/pairs";
 import { Coin } from "@cosmjs/amino";
 import { toBinary } from "@cosmjs/cosmwasm-stargate";
 
@@ -101,17 +101,6 @@ describe("should helper functions in helper run exactly", () => {
     expect(parseAssetInfo(assetInfo)).toEqual(expectedResult);
   });
 
-  it.each<[string, string[], string, boolean]>([
-    [MILKY_CONTRACT, [USDT_CONTRACT], "usdt", false],
-    [USDC_CONTRACT, [ORAI], ORAI, true]
-  ])("test-get-pair-swap", (contractAddress, expectedArr, exprectArrDenom, expectedArrIncludesOrai) => {
-    const { arr, arrLength, arrIncludesOrai, arrDenom } = getPairSwapV2(contractAddress);
-    expect(arr).toEqual(expectedArr);
-    expect(arrLength).toEqual(arr!.length);
-    expect(arrDenom).toEqual(exprectArrDenom);
-    expect(arrIncludesOrai).toEqual(expectedArrIncludesOrai);
-  });
-
   it("test-isFactoryV1-true", () => {
     const data = isFactoryV1([
       { native_token: { denom: ORAI } },
diff --git a/packages/oraidex-common/tests/pairs.spec.ts b/packages/oraidex-common/tests/pairs.spec.ts
index 62cc2027..27d4da54 100644
--- a/packages/oraidex-common/tests/pairs.spec.ts
+++ b/packages/oraidex-common/tests/pairs.spec.ts
@@ -1,18 +1,7 @@
 import { MILKY_CONTRACT, OSMOSIS_ORAICHAIN_DENOM, USDC_CONTRACT, USDT_CONTRACT } from "../src/constant";
-import { getPairSwapV2, isFactoryV1, isInPairList } from "../src/pairs";
+import { isFactoryV1, isInPairList } from "../src/pairs";
 
 describe("test pairs functions should behave correctly", () => {
-  it.each<[string, string[], string, boolean]>([
-    [MILKY_CONTRACT, [USDT_CONTRACT], "usdt", false],
-    [USDC_CONTRACT, ["orai"], "orai", true]
-  ])("test-getPairSwapV2", (contractAddress, expectedArr, exprectArrDenom, expectedArrIncludesOrai) => {
-    const { arr, arrLength, arrIncludesOrai, arrDenom } = getPairSwapV2(contractAddress);
-    expect(arr).toEqual(expectedArr);
-    expect(arrLength).toEqual(arr!.length);
-    expect(arrDenom).toEqual(exprectArrDenom);
-    expect(arrIncludesOrai).toEqual(expectedArrIncludesOrai);
-  });
-
   it("test-isFactoryV1", () => {
     const oraiToken = { native_token: { denom: "orai" } };
     expect(
diff --git a/packages/oraidex-server/package.json b/packages/oraidex-server/package.json
index 1306496f..35821082 100644
--- a/packages/oraidex-server/package.json
+++ b/packages/oraidex-server/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@oraichain/oraidex-server",
-  "version": "1.0.21",
+  "version": "1.0.22",
   "main": "dist/index.js",
   "bin": "dist/index.js",
   "license": "MIT",
diff --git a/packages/oraidex-server/package.staging.json b/packages/oraidex-server/package.staging.json
index 39619792..0864de03 100644
--- a/packages/oraidex-server/package.staging.json
+++ b/packages/oraidex-server/package.staging.json
@@ -1,6 +1,6 @@
 {
   "name": "@oraichain/oraidex-server-staging",
-  "version": "1.0.34",
+  "version": "1.0.36",
   "main": "dist/index.js",
   "bin": "dist/index.js",
   "license": "MIT",
diff --git a/packages/oraidex-sync/src/helper.ts b/packages/oraidex-sync/src/helper.ts
index 686c4ce1..3e1f6bd1 100644
--- a/packages/oraidex-sync/src/helper.ts
+++ b/packages/oraidex-sync/src/helper.ts
@@ -110,35 +110,6 @@ async function delay(timeout: number) {
   return new Promise((resolve) => setTimeout(resolve, timeout));
 }
 
-function findMappedTargetedAssetInfo(targetedAssetInfo: AssetInfo): AssetInfo[] {
-  const mappedAssetInfos = [];
-
-  for (const pair of pairs) {
-    const infos = pair.asset_infos;
-    if (parseAssetInfo(infos[0]) === parseAssetInfo(targetedAssetInfo)) mappedAssetInfos.push(infos[1]);
-    else if (parseAssetInfo(infos[1]) === parseAssetInfo(targetedAssetInfo)) mappedAssetInfos.push(infos[0]);
-    else continue;
-  }
-
-  return mappedAssetInfos;
-}
-
-function findAssetInfoPathToUsdt(info: AssetInfo): AssetInfo[] {
-  // first, check usdt mapped target infos because if we the info pairs with usdt directly then we can easily calculate its price
-  // otherwise, we find orai mapped target infos, which can lead to usdt.
-  // finally, if not paired with orai, then we find recusirvely to find a path leading to usdt token
-  if (parseAssetInfo(info) === parseAssetInfo(usdtInfo)) return [info]; // means there's no path, the price should be 1
-  const mappedUsdtInfoList = findMappedTargetedAssetInfo(usdtInfo);
-  if (mappedUsdtInfoList.find((assetInfo) => parseAssetInfo(assetInfo) === parseAssetInfo(info)))
-    return [info, usdtInfo];
-  const mappedOraiInfoList = findMappedTargetedAssetInfo(oraiInfo);
-  if (mappedOraiInfoList.find((assetInfo) => parseAssetInfo(assetInfo) === parseAssetInfo(info)))
-    return [info, oraiInfo, usdtInfo];
-  const pairedInfo = findMappedTargetedAssetInfo(info);
-  if (pairedInfo.length === 0) return []; // cannot find any mapped target pair
-  return [info, ...findAssetInfoPathToUsdt(pairedInfo[0])]; // only need the first found paired token with the one we are matching
-}
-
 function generateSwapOperations(infoPath: AssetInfo[]): SwapOperation[] {
   const swapOps: SwapOperation[] = [];
   for (let i = 0; i < infoPath.length - 1; i++) {
@@ -483,8 +454,6 @@ export function getDate24hBeforeNow(time: Date) {
 
 export {
   delay,
-  findAssetInfoPathToUsdt,
-  findMappedTargetedAssetInfo,
   findPairAddress,
   generateSwapOperations,
   getAllFees,
diff --git a/packages/oraidex-sync/src/index.ts b/packages/oraidex-sync/src/index.ts
index f3b561a2..d890c5fb 100644
--- a/packages/oraidex-sync/src/index.ts
+++ b/packages/oraidex-sync/src/index.ts
@@ -67,7 +67,7 @@ class OraiDexSync {
       console.time("timer-updateLatestPairInfos");
       const pairInfos = await getAllPairInfos();
       const allPools = await this.duckDb.getPools();
-      if (allPools.length > 0 && pairInfos.length === allPools.length) return;
+      if (allPools.length > 0 && pairInfos.length === allPools.length) return false;
       await this.duckDb.insertPairInfos(
         pairInfos.map((pair) => {
           const symbols = getSymbolFromAsset(pair.asset_infos);
@@ -86,18 +86,18 @@ class OraiDexSync {
         })
       );
       console.timeEnd("timer-updateLatestPairInfos");
+      return true;
     } catch (error) {
       console.log("error in updateLatestPairInfos: ", error);
     }
   }
 
-  private async updateLatestLpAmountHistory(currentHeight: number) {
+  private async updateLatestLpAmountHistory(currentHeight: number, isNewPool: boolean) {
     try {
       console.time("timer-updateLatestLpAmountHistory");
       const countLpAmounts = await this.duckDb.getLpAmountHistory();
-      if (countLpAmounts > 0) return;
-      const pairInfos = await this.duckDb.getPools();
-
+      if (countLpAmounts > 0 && !isNewPool && !process.env.IS_MIGRATE_POOL) return;
+      const pairInfos = await this.duckDb.getPools(); // 13 pools
       const poolInfos = await getPoolInfos(
         pairInfos.map((pair) => pair.pairAddr),
         currentHeight
@@ -181,10 +181,10 @@ class OraiDexSync {
       }
       console.log("current ind: ", currentInd);
 
-      await this.updateLatestPairInfos();
+      const isNewPool = await this.updateLatestPairInfos();
 
       // update offer & ask, total share of pool history in the first time
-      await this.updateLatestLpAmountHistory(currentInd);
+      await this.updateLatestLpAmountHistory(currentInd, isNewPool);
 
       // NOTE: need to updateLatestLpAmountHistory before update apr in the first time
       // to get the offerAmount, askAmount from lp amount history table.
diff --git a/packages/oraidex-sync/src/pairs.ts b/packages/oraidex-sync/src/pairs.ts
index d1b4f009..bc33dc4f 100644
--- a/packages/oraidex-sync/src/pairs.ts
+++ b/packages/oraidex-sync/src/pairs.ts
@@ -17,21 +17,8 @@ import {
   usdtCw20Address
 } from "./constants";
 import { PairMapping } from "./types";
+import { pairLpTokens } from "@oraichain/oraidex-common";
 
-export enum pairLpTokens {
-  AIRI_ORAI = "orai1hxm433hnwthrxneyjysvhny539s9kh6s2g2n8y",
-  ORAIX_ORAI = "orai1qmy3uuxktflvreanaqph6yua7stjn6j65rur62",
-  SCORAI_ORAI = "orai1ay689ltr57jt2snujarvakxrmtuq8fhuat5rnvq6rct89vjer9gqm2vde6",
-  ATOM_ORAI = "orai1g2prqry343kx566cp7uws9w7v78n5tejylvaz6",
-  USDT_ORAI = "orai1mav52eqhd07c3lwevcnqdykdzhh4733zf32jcn",
-  KWT_ORAI = "orai17rcfcrwltujfvx7w4l2ggyku8qrncy0hdvrzvc",
-  OSMO_ORAI = "orai19ltj97jmdqnz5mrd2amethetvcwsp0220kww3e",
-  MILKY_USDT = "orai18ywllw03hvy720l06rme0apwyyq9plk64h9ccf",
-  USDC_ORAI = "orai1e0x87w9ezwq2sdmvv5dq5ngzy98lt47tqfaf2m7zpkg49g5dj6fqred5d7",
-  TRX_ORAI = "orai1wgywgvumt5dxhm7vjpwx5es9ecrtl85qaqdspjqwx2lugy7vmw5qlwrn88",
-  SCATOM_ATOM = "orai1hcjne0hmdj6pjrc3xuksucr0yplsa9ny7v047c34y8k8hfflq6yqyjapnn",
-  INJ_ORAI = "orai1slqw6gfvs6l2jgvh5ryjayf4g77d7sgfv6fumtyzcr06a6g9gnrq6c4rgg"
-}
 // the orders are important! Do not change the order of the asset_infos.
 export const pairs: PairMapping[] = [
   {
@@ -106,6 +93,11 @@ export const pairs: PairMapping[] = [
     asset_infos: [{ token: { contract_addr: injAddress } }, { native_token: { denom: ORAI } }],
     lp_token: pairLpTokens.INJ_ORAI,
     symbols: ["INJ", "ORAI"]
+  },
+  {
+    asset_infos: [{ token: { contract_addr: usdcCw20Address } }, { token: { contract_addr: oraixCw20Address } }],
+    lp_token: pairLpTokens.USDC_ORAIX,
+    symbols: ["ORAIX", "USDC"]
   }
 ];
 
diff --git a/packages/oraidex-sync/tests/helper.spec.ts b/packages/oraidex-sync/tests/helper.spec.ts
index 7f8b8c68..b9935692 100644
--- a/packages/oraidex-sync/tests/helper.spec.ts
+++ b/packages/oraidex-sync/tests/helper.spec.ts
@@ -21,8 +21,6 @@ import {
   calculateBasePriceFromSwapOp,
   calculatePriceByPool,
   concatDataToUniqueKey,
-  findAssetInfoPathToUsdt,
-  findMappedTargetedAssetInfo,
   findPairAddress,
   findPairIndexFromDenoms,
   getSwapDirection,
@@ -33,13 +31,14 @@ import {
   toDecimal,
   toDisplay
 } from "../src/helper";
-import { pairs, pairLpTokens } from "../src/pairs";
+import { pairs } from "../src/pairs";
 import { LpOpsData, PairInfoData, ProvideLiquidityOperationData, SwapDirection, SwapOperationData } from "../src/types";
 import { DuckDb, collectAccumulateLpAndSwapData, getVolumePairByAsset, getVolumePairByUsdt } from "../src";
 import * as poolHelper from "../src/pool-helper";
 import * as helper from "../src/helper";
 import * as parse from "../src/parse";
 import { SwapOperation } from "@oraichain/oraidex-contracts-sdk/build/OraiswapRouter.types";
+import { pairLpTokens } from "@oraichain/oraidex-common";
 
 describe("test-helper", () => {
   let duckDb: DuckDb;
@@ -126,37 +125,6 @@ describe("test-helper", () => {
     });
   });
 
-  it.each<[AssetInfo, number]>([
-    [{ token: { contract_addr: usdtCw20Address } }, 2],
-    [{ token: { contract_addr: usdcCw20Address } }, 1],
-    [{ native_token: { denom: "orai" } }, 10],
-    [{ token: { contract_addr: airiCw20Adress } }, 1]
-  ])("test-findMappedTargetedAssetInfo", (info, expectedListLength) => {
-    // setup
-
-    // act
-    const result = findMappedTargetedAssetInfo(info);
-
-    // assert
-    expect(result.length).toEqual(expectedListLength);
-  });
-
-  it.each<[AssetInfo, number]>([
-    [{ token: { contract_addr: usdtCw20Address } }, 1],
-    [{ native_token: { denom: "orai" } }, 2],
-    [{ token: { contract_addr: airiCw20Adress } }, 3],
-    [{ token: { contract_addr: milkyCw20Address } }, 2],
-    [{ token: { contract_addr: scAtomCw20Address } }, 4]
-  ])("test-findAssetInfoPathToUsdt", (info, expectedListLength) => {
-    // setup
-
-    // act
-    const result = findAssetInfoPathToUsdt(info);
-
-    // assert
-    expect(result.length).toEqual(expectedListLength);
-  });
-
   it.each<[AssetInfo, string | undefined]>([
     [{ token: { contract_addr: usdtCw20Address } }, "orai1c5s03c3l336dgesne7dylnmhszw8554tsyy9yt"],
     [{ token: { contract_addr: "foo" } }, undefined]
@@ -259,6 +227,11 @@ describe("test-helper", () => {
         asset_infos: [{ token: { contract_addr: injAddress } }, { native_token: { denom: ORAI } }],
         lp_token: pairLpTokens.INJ_ORAI,
         symbols: ["INJ", "ORAI"]
+      },
+      {
+        asset_infos: [{ token: { contract_addr: usdcCw20Address } }, { token: { contract_addr: oraixCw20Address } }],
+        lp_token: pairLpTokens.USDC_ORAIX,
+        symbols: ["ORAIX", "USDC"]
       }
     ]);
   });
diff --git a/packages/oraidex-sync/tests/pool-helper.spec.ts b/packages/oraidex-sync/tests/pool-helper.spec.ts
index c82e0a4e..ec99740f 100644
--- a/packages/oraidex-sync/tests/pool-helper.spec.ts
+++ b/packages/oraidex-sync/tests/pool-helper.spec.ts
@@ -17,7 +17,7 @@ import { PairInfoData, PairMapping, PoolAmountHistory, ProvideLiquidityOperation
 import { Tx } from "@oraichain/cosmos-rpc-sync";
 import { Tx as CosmosTx } from "cosmjs-types/cosmos/tx/v1beta1/tx";
 import * as txParsing from "../src/tx-parsing";
-import { pairLpTokens } from "../src/pairs";
+import { pairLpTokens } from "@oraichain/oraidex-common";
 describe("test-pool-helper", () => {
   let duckDb: DuckDb;
   beforeAll(async () => {