@ape.swap/bonds-sdk 6.2.2 → 6.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/components/TokenSelectorModal/TokenRow.js +2 -2
  2. package/dist/components/TokenSelectorModal/TokenRow.js.map +1 -1
  3. package/dist/components/TokenSelectorPanel/index.js +3 -3
  4. package/dist/components/TokenSelectorPanel/index.js.map +1 -1
  5. package/dist/providers/index.d.ts +11 -0
  6. package/dist/providers/index.js +0 -6
  7. package/dist/providers/index.js.map +1 -1
  8. package/dist/state/allowance/useAllowance.js +2 -3
  9. package/dist/state/allowance/useAllowance.js.map +1 -1
  10. package/dist/state/balance/useCurrencyBalance.js +2 -3
  11. package/dist/state/balance/useCurrencyBalance.js.map +1 -1
  12. package/dist/state/balance/useCurrencyBalanceAptos.js +5 -5
  13. package/dist/state/balance/useCurrencyBalanceAptos.js.map +1 -1
  14. package/dist/state/balance/useCurrencyBalanceSolana.js +3 -5
  15. package/dist/state/balance/useCurrencyBalanceSolana.js.map +1 -1
  16. package/dist/state/balance/useCurrencyBalanceSui.js +2 -2
  17. package/dist/state/balance/useCurrencyBalanceSui.js.map +1 -1
  18. package/dist/state/balance/useUserTokensBalance.js +3 -5
  19. package/dist/state/balance/useUserTokensBalance.js.map +1 -1
  20. package/dist/state/bonds/fetchBondsData/cleanBillsData.js +16 -13
  21. package/dist/state/bonds/fetchBondsData/cleanBillsData.js.map +1 -1
  22. package/dist/state/bonds/fetchBondsData/fetchBondsDataAptos.d.ts +1 -1
  23. package/dist/state/bonds/fetchBondsData/fetchBondsDataAptos.js +4 -6
  24. package/dist/state/bonds/fetchBondsData/fetchBondsDataAptos.js.map +1 -1
  25. package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.d.ts +1 -1
  26. package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.js +4 -3
  27. package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.js.map +1 -1
  28. package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.d.ts +1 -1
  29. package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.js +2 -3
  30. package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.js.map +1 -1
  31. package/dist/state/bonds/fetchBondsData/fetchBondsDataSui.d.ts +1 -1
  32. package/dist/state/bonds/fetchBondsData/fetchBondsDataSui.js +5 -7
  33. package/dist/state/bonds/fetchBondsData/fetchBondsDataSui.js.map +1 -1
  34. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.js +1 -4
  35. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.js.map +1 -1
  36. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.js +2 -5
  37. package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.js.map +1 -1
  38. package/dist/state/bonds/useUserBondsPreTGE.js +3 -6
  39. package/dist/state/bonds/useUserBondsPreTGE.js.map +1 -1
  40. package/dist/state/tiers/useTierPoints.js +15 -16
  41. package/dist/state/tiers/useTierPoints.js.map +1 -1
  42. package/dist/state/zap/useAptosZapQuote.js +4 -4
  43. package/dist/state/zap/useAptosZapQuote.js.map +1 -1
  44. package/dist/state/zap/useJupiterSolanaQuote.js +4 -11
  45. package/dist/state/zap/useJupiterSolanaQuote.js.map +1 -1
  46. package/dist/state/zap/useSoulZapBondQuote.js +12 -20
  47. package/dist/state/zap/useSoulZapBondQuote.js.map +1 -1
  48. package/dist/state/zap/useSuiZapQuote.js +9 -14
  49. package/dist/state/zap/useSuiZapQuote.js.map +1 -1
  50. package/dist/utils/bondPriceHelpers.d.ts +1 -1
  51. package/dist/utils/bondPriceHelpers.js +5 -11
  52. package/dist/utils/bondPriceHelpers.js.map +1 -1
  53. package/dist/utils/calculateSolanaTrueBillPrice.d.ts +0 -3
  54. package/dist/utils/calculateSolanaTrueBillPrice.js +33 -27
  55. package/dist/utils/calculateSolanaTrueBillPrice.js.map +1 -1
  56. package/dist/utils/convertToBigish.js +2 -17
  57. package/dist/utils/convertToBigish.js.map +1 -1
  58. package/dist/utils/displayHelpers.d.ts +3 -3
  59. package/dist/utils/displayHelpers.js +62 -46
  60. package/dist/utils/displayHelpers.js.map +1 -1
  61. package/dist/utils/fixedPoint.d.ts +28 -0
  62. package/dist/utils/fixedPoint.js +239 -0
  63. package/dist/utils/fixedPoint.js.map +1 -0
  64. package/dist/utils/formatNumber.js +5 -11
  65. package/dist/utils/formatNumber.js.map +1 -1
  66. package/dist/utils/getBalanceNumber.d.ts +1 -2
  67. package/dist/utils/getBalanceNumber.js +5 -3
  68. package/dist/utils/getBalanceNumber.js.map +1 -1
  69. package/dist/views/Bonds/components/BondRows/ActiveBondRows.js +2 -3
  70. package/dist/views/Bonds/components/BondRows/ActiveBondRows.js.map +1 -1
  71. package/dist/views/Bonds/components/BonusComponents/BonusComponent.js +1 -2
  72. package/dist/views/Bonds/components/BonusComponents/BonusComponent.js.map +1 -1
  73. package/dist/views/Bonds/components/BonusComponents/BonusTable.js +1 -2
  74. package/dist/views/Bonds/components/BonusComponents/BonusTable.js.map +1 -1
  75. package/dist/views/Bonds/components/BuyAgainRow/index.js +2 -4
  76. package/dist/views/Bonds/components/BuyAgainRow/index.js.map +1 -1
  77. package/dist/views/Bonds/utils.js +2 -3
  78. package/dist/views/Bonds/utils.js.map +1 -1
  79. package/dist/views/BuyBond/BuyComponent.js +16 -17
  80. package/dist/views/BuyBond/BuyComponent.js.map +1 -1
  81. package/dist/views/BuyBond/BuyComponentAptos.js +20 -33
  82. package/dist/views/BuyBond/BuyComponentAptos.js.map +1 -1
  83. package/dist/views/BuyBond/BuyComponentPreTGE.js +6 -8
  84. package/dist/views/BuyBond/BuyComponentPreTGE.js.map +1 -1
  85. package/dist/views/BuyBond/BuyComponentSolana.js +20 -27
  86. package/dist/views/BuyBond/BuyComponentSolana.js.map +1 -1
  87. package/dist/views/BuyBond/BuyComponentSui.js +15 -28
  88. package/dist/views/BuyBond/BuyComponentSui.js.map +1 -1
  89. package/dist/views/BuyBond/components/NewRateModal/NewRateModal.js +2 -2
  90. package/dist/views/BuyBond/components/NewRateModal/NewRateModal.js.map +1 -1
  91. package/dist/views/BuyBond/components/PointsLeftForNextTier/PointsLeftForNextTier.js +6 -9
  92. package/dist/views/BuyBond/components/PointsLeftForNextTier/PointsLeftForNextTier.js.map +1 -1
  93. package/dist/views/ProjectView/components/BondStats/index.js +2 -4
  94. package/dist/views/ProjectView/components/BondStats/index.js.map +1 -1
  95. package/dist/views/YourBonds/components/UserBondRow/UserBondRowPreTGE.js +4 -5
  96. package/dist/views/YourBonds/components/UserBondRow/UserBondRowPreTGE.js.map +1 -1
  97. package/dist/views/YourBondsModal/components/LinkShare/htmlToJpeg.d.ts +8 -0
  98. package/dist/views/YourBondsModal/components/LinkShare/htmlToJpeg.js +43 -0
  99. package/dist/views/YourBondsModal/components/LinkShare/htmlToJpeg.js.map +1 -0
  100. package/dist/views/YourBondsModal/components/LinkShare/templateImageShare.d.ts +8 -1
  101. package/dist/views/YourBondsModal/components/LinkShare/templateImageShare.js +172 -15
  102. package/dist/views/YourBondsModal/components/LinkShare/templateImageShare.js.map +1 -1
  103. package/dist/views/YourBondsModal/components/LinkShare/utils.js +19 -10
  104. package/dist/views/YourBondsModal/components/LinkShare/utils.js.map +1 -1
  105. package/dist/views/YourBondsModal/components/TransferBondModal/index.js +1 -2
  106. package/dist/views/YourBondsModal/components/TransferBondModal/index.js.map +1 -1
  107. package/package.json +1 -4
@@ -1 +1 @@
1
- {"version":3,"file":"fetchUsersBondsSOL.js","sources":["../../../../src/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.ts"],"sourcesContent":["import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists'\nimport { UserBill, UserOwnedBillsData } from '../../../types/yourbonds'\nimport { Connection, PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js'\nimport { TokenPrices } from '../../tokenPrices/useTokenPrices'\nimport { HeliusApiResponse, HeliusAsset } from '../../../types/helius'\nimport { getBondAccountSolana } from '../../../utils/getSolanaAccount'\nimport { getU64Codec } from '@solana/kit'\nimport { BigNumber } from 'bignumber.js'\nimport { CLAIMABLE_PAYOUT_DISCRIMINATOR, PROGRAM_ID } from '../../../constants/solanaConstants'\nimport { Buffer } from 'buffer'\nimport { getRPC, HELIUS_SOL_RPC } from '../../../config/constants/networks'\nimport axios from 'axios'\nimport { PRICE_API_URL } from '../../../config/constants/variables'\n\nexport async function fetchUsersBondsSOL(\n user: string,\n bondData: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n): Promise<UserOwnedBillsData[]> {\n if (!user) return []\n try {\n console.time('fetchUserBondsSOL')\n const results: UserOwnedBillsData[] = []\n\n const userBase58 = new PublicKey(user).toBase58()\n\n const connection = new Connection(getRPC(ChainId.SOL), 'confirmed')\n\n const collections: string[] = bondData.map((bond) => bond.billNnftAddress[ChainId.SOL]!)\n\n const allOptions = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: '1',\n method: 'searchAssets',\n params: {\n ownerAddress: userBase58,\n collections,\n },\n }),\n }\n const allResponse = await fetch(HELIUS_SOL_RPC, allOptions)\n const allData: HeliusApiResponse = await allResponse.json()\n const allUserAssets: HeliusAsset[] = allData.result.items\n\n for (const bond of bondData) {\n if (bond.chainId !== ChainId.SOL || !bond.contractAddress[ChainId.SOL]) continue\n const bondIssuancePda = new PublicKey(bond.contractAddress[ChainId.SOL])\n const userBills: UserBill[] = []\n const collection = bond.billNnftAddress[ChainId.SOL]\n\n let principalTokenPrice = tokenPrices?.[ChainId.SOL]?.find?.(\n (t) => t?.tokenAddress?.toLowerCase() === bond?.lpToken?.address?.[ChainId.SOL]?.toLowerCase(),\n )?.price\n let payoutTokenPrice = tokenPrices?.[ChainId.SOL]?.find?.(\n (t) => t?.tokenAddress?.toLowerCase() === bond?.earnToken?.address?.[ChainId.SOL]?.toLowerCase(),\n )?.price\n\n if (principalTokenPrice === undefined) {\n const res = await axios.get(\n `${PRICE_API_URL}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.lpToken.symbol, '. Price: ', res.data.price)\n principalTokenPrice = parseFloat(res.data.price ?? '0')\n }\n if (payoutTokenPrice === undefined) {\n const res = await axios.get(\n `${PRICE_API_URL}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.earnToken.symbol, '. Price: ', res.data.price)\n payoutTokenPrice = parseFloat(res.data.price ?? '0')\n }\n\n const userAssets = allUserAssets.filter((asset) => {\n return asset.authorities[0].address.toLowerCase() === bond.contractAddress[ChainId.SOL]?.toLowerCase()\n })\n\n for (const asset of userAssets) {\n const nftMint = new PublicKey(asset.id)\n\n const [bondPda] = PublicKey.findProgramAddressSync(\n [new TextEncoder().encode('bond'), bondIssuancePda.toBuffer(), nftMint.toBuffer()],\n PROGRAM_ID,\n )\n\n if (!bondPda) {\n console.error(`Could not fetch bond PDA for mint ${nftMint.toBase58()}`)\n continue\n }\n\n try {\n const [bondTermPda] = PublicKey.findProgramAddressSync(\n [new TextEncoder().encode('bond_term'), bondIssuancePda.toBuffer()],\n PROGRAM_ID,\n )\n\n const [bondAccounts, pendingRewards] = await Promise.all([\n getBondAccountSolana([bondPda.toBase58()]),\n calculatePendingRewards(connection, bondPda, bondTermPda, bondIssuancePda, nftMint),\n ])\n\n if (!bondAccounts?.length) {\n console.error(`Could not fetch bond account for mint ${nftMint.toBase58()}`)\n continue\n }\n\n const bondAccount = bondAccounts[0]\n const id = asset.content.metadata.name\n const idTrimmed: string = id.split('-')[1]?.trim()\n userBills.push({\n address: bondPda.toBase58(),\n id: idTrimmed,\n asset: nftMint.toBase58(),\n // vesting: bondAccount.vesting.toString(),\n vestingTerm: bondAccount.vestingTerm.toString(),\n payout: (Number(bondAccount.payout) - Number(bondAccount.payoutClaimed)).toString(),\n totalPayout: bondAccount.payout.toString(),\n truePricePaid: bondAccount.truePricePaid.toString(),\n lastBlockTimestamp: bondAccount.lastClaimTimestamp.toString(),\n vestingStartTimestamp: bondAccount.vestingStartTimestamp.toString(),\n pendingRewards,\n billNftAddress: collection as string,\n payoutClaimed: bondAccount.payoutClaimed.toString(),\n bond: {\n ...bond,\n payoutTokenPrice: payoutTokenPrice?.toString(),\n principalTokenPrice: principalTokenPrice?.toString(),\n },\n })\n // ULTRA HOT FIX :( until we can figure out a multicall strategy\n await new Promise((r) => setTimeout(r, 10))\n } catch (e) {\n console.log(e)\n console.error(`Could not fetch bond PDA for mint ${nftMint.toBase58()}`)\n }\n }\n results.push({\n index: bond.index,\n userOwnedBills: userBills,\n })\n }\n console.timeEnd('fetchUserBondsSOL')\n return results\n } catch (err) {\n console.error('Error fetching assets by collection:', err)\n return []\n }\n}\n\nasync function calculatePendingRewards(\n connection: Connection,\n bondPda: PublicKey,\n bondTermPda: PublicKey,\n bondIssuancePda: PublicKey,\n nftMint: PublicKey,\n): Promise<string> {\n try {\n const u64Codec = getU64Codec()\n\n const currentTimestamp = Math.floor(Date.now() / 1000)\n\n // Use BigNumber\n const encodedTimestamp = u64Codec.encode(BigInt(currentTimestamp))\n\n // Instruction data\n const instructionData = Buffer.concat([CLAIMABLE_PAYOUT_DISCRIMINATOR, Buffer.from(encodedTimestamp)])\n\n // Accounts\n const keys = [\n { pubkey: bondPda, isSigner: false, isWritable: true },\n { pubkey: bondTermPda, isSigner: false, isWritable: false },\n { pubkey: bondIssuancePda, isSigner: false, isWritable: false },\n { pubkey: nftMint, isSigner: false, isWritable: false },\n ]\n\n // Instruction\n const instruction = new TransactionInstruction({\n keys,\n programId: PROGRAM_ID,\n data: instructionData,\n })\n\n // Transaction\n const transaction = new Transaction()\n const userPublicKey = new PublicKey('11111111111111111111111111111112') // Dummy public key for fee payer\n transaction.feePayer = userPublicKey\n transaction.add(instruction)\n\n // Simulate\n const simulation = await connection.simulateTransaction(transaction)\n\n // Extract return value\n const returnData = simulation.value.returnData\n if (returnData) {\n const [data, encoding] = returnData.data\n if (encoding !== 'base64') {\n throw new Error(`Unexpected return data encoding: ${encoding}`)\n }\n\n const decodedData = Buffer.from(data, 'base64')\n const returnValue = new BigNumber(decodedData.readBigUInt64LE(0).toString())\n return returnValue.toString()\n }\n\n // Fallback\n return '0'\n } catch (error) {\n console.error('Error calculating pending rewards:', error)\n return '0'\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetchUsersBondsSOL.js","sources":["../../../../src/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.ts"],"sourcesContent":["import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists'\nimport { UserBill, UserOwnedBillsData } from '../../../types/yourbonds'\nimport { Connection, PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js'\nimport { TokenPrices } from '../../tokenPrices/useTokenPrices'\nimport { HeliusApiResponse, HeliusAsset } from '../../../types/helius'\nimport { getBondAccountSolana } from '../../../utils/getSolanaAccount'\nimport { getU64Codec } from '@solana/kit'\nimport { CLAIMABLE_PAYOUT_DISCRIMINATOR, PROGRAM_ID } from '../../../constants/solanaConstants'\nimport { Buffer } from 'buffer'\nimport { getRPC, HELIUS_SOL_RPC } from '../../../config/constants/networks'\nimport axios from 'axios'\nimport { PRICE_API_URL } from '../../../config/constants/variables'\n\nexport async function fetchUsersBondsSOL(\n user: string,\n bondData: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n): Promise<UserOwnedBillsData[]> {\n if (!user) return []\n try {\n console.time('fetchUserBondsSOL')\n const results: UserOwnedBillsData[] = []\n\n const userBase58 = new PublicKey(user).toBase58()\n\n const connection = new Connection(getRPC(ChainId.SOL), 'confirmed')\n\n const collections: string[] = bondData.map((bond) => bond.billNnftAddress[ChainId.SOL]!)\n\n const allOptions = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: '1',\n method: 'searchAssets',\n params: {\n ownerAddress: userBase58,\n collections,\n },\n }),\n }\n const allResponse = await fetch(HELIUS_SOL_RPC, allOptions)\n const allData: HeliusApiResponse = await allResponse.json()\n const allUserAssets: HeliusAsset[] = allData.result.items\n\n for (const bond of bondData) {\n if (bond.chainId !== ChainId.SOL || !bond.contractAddress[ChainId.SOL]) continue\n const bondIssuancePda = new PublicKey(bond.contractAddress[ChainId.SOL])\n const userBills: UserBill[] = []\n const collection = bond.billNnftAddress[ChainId.SOL]\n\n let principalTokenPrice = tokenPrices?.[ChainId.SOL]?.find?.(\n (t) => t?.tokenAddress?.toLowerCase() === bond?.lpToken?.address?.[ChainId.SOL]?.toLowerCase(),\n )?.price\n let payoutTokenPrice = tokenPrices?.[ChainId.SOL]?.find?.(\n (t) => t?.tokenAddress?.toLowerCase() === bond?.earnToken?.address?.[ChainId.SOL]?.toLowerCase(),\n )?.price\n\n if (principalTokenPrice === undefined) {\n const res = await axios.get(\n `${PRICE_API_URL}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.lpToken.symbol, '. Price: ', res.data.price)\n principalTokenPrice = parseFloat(res.data.price ?? '0')\n }\n if (payoutTokenPrice === undefined) {\n const res = await axios.get(\n `${PRICE_API_URL}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.earnToken.symbol, '. Price: ', res.data.price)\n payoutTokenPrice = parseFloat(res.data.price ?? '0')\n }\n\n const userAssets = allUserAssets.filter((asset) => {\n return asset.authorities[0].address.toLowerCase() === bond.contractAddress[ChainId.SOL]?.toLowerCase()\n })\n\n for (const asset of userAssets) {\n const nftMint = new PublicKey(asset.id)\n\n const [bondPda] = PublicKey.findProgramAddressSync(\n [new TextEncoder().encode('bond'), bondIssuancePda.toBuffer(), nftMint.toBuffer()],\n PROGRAM_ID,\n )\n\n if (!bondPda) {\n console.error(`Could not fetch bond PDA for mint ${nftMint.toBase58()}`)\n continue\n }\n\n try {\n const [bondTermPda] = PublicKey.findProgramAddressSync(\n [new TextEncoder().encode('bond_term'), bondIssuancePda.toBuffer()],\n PROGRAM_ID,\n )\n\n const [bondAccounts, pendingRewards] = await Promise.all([\n getBondAccountSolana([bondPda.toBase58()]),\n calculatePendingRewards(connection, bondPda, bondTermPda, bondIssuancePda, nftMint),\n ])\n\n if (!bondAccounts?.length) {\n console.error(`Could not fetch bond account for mint ${nftMint.toBase58()}`)\n continue\n }\n\n const bondAccount = bondAccounts[0]\n const id = asset.content.metadata.name\n const idTrimmed: string = id.split('-')[1]?.trim()\n userBills.push({\n address: bondPda.toBase58(),\n id: idTrimmed,\n asset: nftMint.toBase58(),\n // vesting: bondAccount.vesting.toString(),\n vestingTerm: bondAccount.vestingTerm.toString(),\n payout: (bondAccount.payout - bondAccount.payoutClaimed).toString(),\n totalPayout: bondAccount.payout.toString(),\n truePricePaid: bondAccount.truePricePaid.toString(),\n lastBlockTimestamp: bondAccount.lastClaimTimestamp.toString(),\n vestingStartTimestamp: bondAccount.vestingStartTimestamp.toString(),\n pendingRewards,\n billNftAddress: collection as string,\n payoutClaimed: bondAccount.payoutClaimed.toString(),\n bond: {\n ...bond,\n payoutTokenPrice: payoutTokenPrice?.toString(),\n principalTokenPrice: principalTokenPrice?.toString(),\n },\n })\n // ULTRA HOT FIX :( until we can figure out a multicall strategy\n await new Promise((r) => setTimeout(r, 10))\n } catch (e) {\n console.log(e)\n console.error(`Could not fetch bond PDA for mint ${nftMint.toBase58()}`)\n }\n }\n results.push({\n index: bond.index,\n userOwnedBills: userBills,\n })\n }\n console.timeEnd('fetchUserBondsSOL')\n return results\n } catch (err) {\n console.error('Error fetching assets by collection:', err)\n return []\n }\n}\n\nasync function calculatePendingRewards(\n connection: Connection,\n bondPda: PublicKey,\n bondTermPda: PublicKey,\n bondIssuancePda: PublicKey,\n nftMint: PublicKey,\n): Promise<string> {\n try {\n const u64Codec = getU64Codec()\n\n const currentTimestamp = Math.floor(Date.now() / 1000)\n\n const encodedTimestamp = u64Codec.encode(BigInt(currentTimestamp))\n\n // Instruction data\n const instructionData = Buffer.concat([CLAIMABLE_PAYOUT_DISCRIMINATOR, Buffer.from(encodedTimestamp)])\n\n // Accounts\n const keys = [\n { pubkey: bondPda, isSigner: false, isWritable: true },\n { pubkey: bondTermPda, isSigner: false, isWritable: false },\n { pubkey: bondIssuancePda, isSigner: false, isWritable: false },\n { pubkey: nftMint, isSigner: false, isWritable: false },\n ]\n\n // Instruction\n const instruction = new TransactionInstruction({\n keys,\n programId: PROGRAM_ID,\n data: instructionData,\n })\n\n // Transaction\n const transaction = new Transaction()\n const userPublicKey = new PublicKey('11111111111111111111111111111112') // Dummy public key for fee payer\n transaction.feePayer = userPublicKey\n transaction.add(instruction)\n\n // Simulate\n const simulation = await connection.simulateTransaction(transaction)\n\n // Extract return value\n const returnData = simulation.value.returnData\n if (returnData) {\n const [data, encoding] = returnData.data\n if (encoding !== 'base64') {\n throw new Error(`Unexpected return data encoding: ${encoding}`)\n }\n\n const decodedData = Buffer.from(data, 'base64')\n return decodedData.readBigUInt64LE(0).toString()\n }\n\n // Fallback\n return '0'\n } catch (error) {\n console.error('Error calculating pending rewards:', error)\n return '0'\n }\n}\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,6 @@ import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
3
3
  import multicall from '../../utils/multicall.js';
4
4
  import LaunchBondABI_V_2_4_1 from '../../config/abi/launchBond_v2_4_1.json.js';
5
5
  import Vault_Shares_ABI from '../../config/abi/Vault_Shares.json.js';
6
- import BigNumber from 'bignumber.js';
7
6
  import { reportError } from '../../utils/reportError.js';
8
7
  import { useURLByEnvironment, useSDKConfig } from '../useSDKConfig.js';
9
8
  import useBondsListPreTGE from './useBondsListPreTGE.js';
@@ -83,9 +82,7 @@ const fetchPreTGEUserBonds = async (chains, tokenPrices, preTGEList, account, ap
83
82
  userOwnedBillsData = {
84
83
  address: bond.contractAddress[bond.chainId] ?? '',
85
84
  id: billId,
86
- payout: new BigNumber(billData[0][0]?.payout.toString())
87
- .minus(billData[0][0]?.payoutClaimed.toString())
88
- .toString(),
85
+ payout: (BigInt(billData[0][0]?.payout.toString()) - BigInt(billData[0][0]?.payoutClaimed.toString())).toString(),
89
86
  payoutClaimed: billData[0][0]?.payoutClaimed.toString(),
90
87
  billNftAddress: billData[1][0]?.toString(),
91
88
  // vesting: billData[0][0]?.vesting?.toString(),
@@ -112,8 +109,8 @@ const fetchPreTGEUserBonds = async (chains, tokenPrices, preTGEList, account, ap
112
109
  const endTime = parseInt(terms[0]);
113
110
  const startTime = parseInt(terms[1]);
114
111
  const vestingTerm = parseInt(res[4][2]);
115
- const trueBillPrice = parseInt(res[5]?.[0]);
116
- const initPrice = getBalanceNumber(new BigNumber(trueBillPrice.toString()), bond?.lpToken?.decimals?.[bond?.chainId]);
112
+ const trueBillPrice = res[5]?.[0]?.toString();
113
+ const initPrice = getBalanceNumber(trueBillPrice, bond?.lpToken?.decimals?.[bond?.chainId]);
117
114
  const initialRelease = terms?.[5];
118
115
  const earnTokenAddress = bond.yieldBond
119
116
  ? bond.underlyingEarnToken?.address[bond.chainId]?.toLowerCase()
@@ -1 +1 @@
1
- {"version":3,"file":"useUserBondsPreTGE.js","sources":["../../../src/state/bonds/useUserBondsPreTGE.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport multicall from '../../utils/multicall'\nimport launchBondsABI_V2_4_1 from '../../config/abi/launchBond_v2_4_1.json'\nimport Vault_Shares_ABI from '../../config/abi/Vault_Shares.json'\nimport { UserBill } from '../../types/yourbonds'\nimport BigNumber from 'bignumber.js'\nimport { reportError } from '../../utils/reportError'\nimport { useSDKConfig, useURLByEnvironment } from '../useSDKConfig'\nimport useBondsListPreTGE from './useBondsListPreTGE'\nimport { getBalanceNumber } from '../../utils/getBalanceNumber'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport { YieldData } from '../../types/bonds'\n\ninterface AccountInfo {\n hasRedeemed: boolean\n hasRefunded?: boolean\n payout: string\n depositAmount: string\n payoutClaimed: string\n vesting: string\n vestingTerm: string\n vestingStartTimestamp: string\n lastClaimTimestamp: string\n truePricePaid: string\n}\n\nexport interface PreTGEUserBonds extends PreTGEConfig {\n accountInfo?: AccountInfo\n userOwnedBillsData?: UserBill\n finalized?: boolean\n initPrice?: number\n initialRelease?: number\n earnTokenPrice?: number\n yieldData?: YieldData\n endTime?: number\n}\n\nexport default function useUserBondsPreTGE(): UseQueryResult<PreTGEUserBonds[]> {\n const { data: preTGEList } = useBondsListPreTGE()\n const { data: tokenPrices } = useTokenPrices()\n const { address } = useEVMAccount()\n const apiUrl = useURLByEnvironment('apiV2')\n const { chains } = useSDKConfig()\n\n return useQuery({\n queryKey: [QUERY_KEYS.PRE_TGE_USER_BONDS, preTGEList?.length ?? '', address, Object.keys(tokenPrices ?? {})],\n queryFn: () => fetchPreTGEUserBonds(chains!, tokenPrices!, preTGEList!, address as string, apiUrl),\n refetchInterval: 30000,\n refetchOnWindowFocus: false,\n enabled: !!preTGEList && preTGEList.length > 0 && !!address && !!tokenPrices,\n })\n}\n\nconst fetchPreTGEUserBonds = async (\n chains: number[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n preTGEList: PreTGEConfig[],\n account: string,\n apiUrl: string,\n): Promise<PreTGEUserBonds[]> => {\n try {\n const preTGEBonds = preTGEList.filter((bond) => chains.includes(bond.chainId))\n const results: (PreTGEUserBonds | undefined)[] = await Promise.all(\n preTGEBonds.map(async (bond): Promise<PreTGEUserBonds | undefined> => {\n try {\n const calls = [\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'getBillIds',\n params: [account],\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'accountInfo',\n params: [account],\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'hasRedeemed',\n params: [account],\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'finalized',\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'terms',\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'trueBillPrice',\n },\n ]\n\n const res = await multicall(bond.chainId, launchBondsABI_V2_4_1, calls)\n const billId = res?.[0]?.[0]?.[0]?.toString()\n\n let userOwnedBillsData\n if (billId) {\n const billDataCalls: any = [\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'getBillInfo',\n params: [billId],\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'billNft',\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'claimablePayout',\n params: [billId],\n },\n ]\n const billData = await multicall(bond.chainId, launchBondsABI_V2_4_1, billDataCalls)\n userOwnedBillsData = {\n address: bond.contractAddress[bond.chainId] ?? '',\n id: billId,\n payout: new BigNumber(billData[0][0]?.payout.toString())\n .minus(billData[0][0]?.payoutClaimed.toString())\n .toString(),\n payoutClaimed: billData[0][0]?.payoutClaimed.toString(),\n billNftAddress: billData[1][0]?.toString(),\n // vesting: billData[0][0]?.vesting?.toString(),\n vestingTerm: billData[0][0]?.vestingTerm?.toString(),\n lastBlockTimestamp: billData[0][0]?.lastClaimTimestamp?.toString(),\n vestingStartTimestamp: billData[0][0]?.vestingStartTimestamp?.toString(),\n truePricePaid: billData[0][0]?.truePricePaid?.toString(),\n pendingRewards: billData[2][0]?.toString(),\n }\n }\n const accountInfo: AccountInfo = {\n hasRedeemed: res[2][0],\n payout: res[1][0].toString(),\n depositAmount: res[1][1].toString(),\n payoutClaimed: res[1][2].toString(),\n vesting: res[1][3].toString(),\n vestingTerm: res[1][4].toString(),\n vestingStartTimestamp: res[1][5].toString(),\n lastClaimTimestamp: res[1][6].toString(),\n truePricePaid: res[1][7].toString(),\n }\n\n const finalized: boolean = res[3][0]\n const terms = res[4]\n const endTime = parseInt(terms[0])\n const startTime = parseInt(terms[1])\n const vestingTerm = parseInt(res[4][2])\n const trueBillPrice = parseInt(res[5]?.[0])\n const initPrice = getBalanceNumber(\n new BigNumber(trueBillPrice.toString()),\n bond?.lpToken?.decimals?.[bond?.chainId] as number,\n )\n const initialRelease = terms?.[5]\n const earnTokenAddress = bond.yieldBond\n ? bond.underlyingEarnToken?.address[bond.chainId]?.toLowerCase()\n : bond.earnToken.address[bond.chainId]?.toLowerCase()\n const earnTokenPrice = tokenPrices?.[bond?.chainId]?.find(\n (tokenPrice) => tokenPrice.tokenAddress?.toLowerCase() === earnTokenAddress,\n )?.price\n\n const now = Math.floor(Date.now() / 1000)\n const progress = Math.min(1, Math.max(0, (now - startTime) / (endTime - startTime)))\n const currentAPR =\n bond.startAPR != null && bond.endAPR != null && endTime > startTime\n ? bond.startAPR + (bond.endAPR - bond.startAPR) * progress\n : 0\n const apr = bond.finalAPR || currentAPR\n\n let depositedAssets = 0\n let claimableRewards = '0'\n let futureRewards = 0\n let rewardDistributionEnd = 0\n let claimed = 0\n let vaultTokenBalance = '0'\n if (bond.yieldBond) {\n const calls = [\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'maxWithdraw',\n params: [account],\n },\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'pendingRewards',\n params: [account],\n },\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'claimedAssets',\n params: [account],\n },\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'vestingEnd',\n },\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'balanceOf',\n params: [account],\n },\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'earned',\n params: [account],\n },\n ]\n const res = await multicall(bond.chainId, Vault_Shares_ABI, calls)\n depositedAssets = getBalanceNumber(res[0][0].toString())\n futureRewards = getBalanceNumber(res[1][0].toString())\n claimed = getBalanceNumber(res[2][0].toString())\n rewardDistributionEnd = parseInt(res[3][0])\n vaultTokenBalance = res[4][0].toString()\n claimableRewards = res[5][0].toString()\n }\n\n return {\n ...bond,\n accountInfo,\n userOwnedBillsData,\n endTime,\n finalized,\n vestingTerm,\n initPrice,\n initialRelease: initialRelease / 10000,\n earnTokenPrice: bond.yieldBond\n ? earnTokenPrice\n : !earnTokenPrice || earnTokenPrice === 0\n ? initPrice\n : earnTokenPrice,\n yieldData: {\n apr,\n claimableRewards: accountInfo.hasRedeemed ? claimableRewards : '0',\n rewardDistributionEnd,\n claimed,\n depositedAssets,\n vaultTokenBalance,\n futureRewards,\n },\n }\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'fetchPreTGEUserBonds', bond, e },\n account,\n chainId: bond.chainId,\n })\n return undefined\n }\n }),\n )\n\n return results.filter((bond) => bond !== undefined)\n } catch (e) {\n console.log(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'fetchPreTGEUserBonds', e },\n account,\n })\n return []\n }\n}\n"],"names":["launchBondsABI_V2_4_1"],"mappings":"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"}
1
+ {"version":3,"file":"useUserBondsPreTGE.js","sources":["../../../src/state/bonds/useUserBondsPreTGE.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport multicall from '../../utils/multicall'\nimport launchBondsABI_V2_4_1 from '../../config/abi/launchBond_v2_4_1.json'\nimport Vault_Shares_ABI from '../../config/abi/Vault_Shares.json'\nimport { UserBill } from '../../types/yourbonds'\nimport { reportError } from '../../utils/reportError'\nimport { useSDKConfig, useURLByEnvironment } from '../useSDKConfig'\nimport useBondsListPreTGE from './useBondsListPreTGE'\nimport { getBalanceNumber } from '../../utils/getBalanceNumber'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport { YieldData } from '../../types/bonds'\n\ninterface AccountInfo {\n hasRedeemed: boolean\n hasRefunded?: boolean\n payout: string\n depositAmount: string\n payoutClaimed: string\n vesting: string\n vestingTerm: string\n vestingStartTimestamp: string\n lastClaimTimestamp: string\n truePricePaid: string\n}\n\nexport interface PreTGEUserBonds extends PreTGEConfig {\n accountInfo?: AccountInfo\n userOwnedBillsData?: UserBill\n finalized?: boolean\n initPrice?: number\n initialRelease?: number\n earnTokenPrice?: number\n yieldData?: YieldData\n endTime?: number\n}\n\nexport default function useUserBondsPreTGE(): UseQueryResult<PreTGEUserBonds[]> {\n const { data: preTGEList } = useBondsListPreTGE()\n const { data: tokenPrices } = useTokenPrices()\n const { address } = useEVMAccount()\n const apiUrl = useURLByEnvironment('apiV2')\n const { chains } = useSDKConfig()\n\n return useQuery({\n queryKey: [QUERY_KEYS.PRE_TGE_USER_BONDS, preTGEList?.length ?? '', address, Object.keys(tokenPrices ?? {})],\n queryFn: () => fetchPreTGEUserBonds(chains!, tokenPrices!, preTGEList!, address as string, apiUrl),\n refetchInterval: 30000,\n refetchOnWindowFocus: false,\n enabled: !!preTGEList && preTGEList.length > 0 && !!address && !!tokenPrices,\n })\n}\n\nconst fetchPreTGEUserBonds = async (\n chains: number[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n preTGEList: PreTGEConfig[],\n account: string,\n apiUrl: string,\n): Promise<PreTGEUserBonds[]> => {\n try {\n const preTGEBonds = preTGEList.filter((bond) => chains.includes(bond.chainId))\n const results: (PreTGEUserBonds | undefined)[] = await Promise.all(\n preTGEBonds.map(async (bond): Promise<PreTGEUserBonds | undefined> => {\n try {\n const calls = [\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'getBillIds',\n params: [account],\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'accountInfo',\n params: [account],\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'hasRedeemed',\n params: [account],\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'finalized',\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'terms',\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'trueBillPrice',\n },\n ]\n\n const res = await multicall(bond.chainId, launchBondsABI_V2_4_1, calls)\n const billId = res?.[0]?.[0]?.[0]?.toString()\n\n let userOwnedBillsData\n if (billId) {\n const billDataCalls: any = [\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'getBillInfo',\n params: [billId],\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'billNft',\n },\n {\n address: bond.contractAddress[bond.chainId] ?? '',\n name: 'claimablePayout',\n params: [billId],\n },\n ]\n const billData = await multicall(bond.chainId, launchBondsABI_V2_4_1, billDataCalls)\n userOwnedBillsData = {\n address: bond.contractAddress[bond.chainId] ?? '',\n id: billId,\n payout: (\n BigInt(billData[0][0]?.payout.toString()) - BigInt(billData[0][0]?.payoutClaimed.toString())\n ).toString(),\n payoutClaimed: billData[0][0]?.payoutClaimed.toString(),\n billNftAddress: billData[1][0]?.toString(),\n // vesting: billData[0][0]?.vesting?.toString(),\n vestingTerm: billData[0][0]?.vestingTerm?.toString(),\n lastBlockTimestamp: billData[0][0]?.lastClaimTimestamp?.toString(),\n vestingStartTimestamp: billData[0][0]?.vestingStartTimestamp?.toString(),\n truePricePaid: billData[0][0]?.truePricePaid?.toString(),\n pendingRewards: billData[2][0]?.toString(),\n }\n }\n const accountInfo: AccountInfo = {\n hasRedeemed: res[2][0],\n payout: res[1][0].toString(),\n depositAmount: res[1][1].toString(),\n payoutClaimed: res[1][2].toString(),\n vesting: res[1][3].toString(),\n vestingTerm: res[1][4].toString(),\n vestingStartTimestamp: res[1][5].toString(),\n lastClaimTimestamp: res[1][6].toString(),\n truePricePaid: res[1][7].toString(),\n }\n\n const finalized: boolean = res[3][0]\n const terms = res[4]\n const endTime = parseInt(terms[0])\n const startTime = parseInt(terms[1])\n const vestingTerm = parseInt(res[4][2])\n const trueBillPrice = res[5]?.[0]?.toString()\n const initPrice = getBalanceNumber(trueBillPrice, bond?.lpToken?.decimals?.[bond?.chainId] as number)\n const initialRelease = terms?.[5]\n const earnTokenAddress = bond.yieldBond\n ? bond.underlyingEarnToken?.address[bond.chainId]?.toLowerCase()\n : bond.earnToken.address[bond.chainId]?.toLowerCase()\n const earnTokenPrice = tokenPrices?.[bond?.chainId]?.find(\n (tokenPrice) => tokenPrice.tokenAddress?.toLowerCase() === earnTokenAddress,\n )?.price\n\n const now = Math.floor(Date.now() / 1000)\n const progress = Math.min(1, Math.max(0, (now - startTime) / (endTime - startTime)))\n const currentAPR =\n bond.startAPR != null && bond.endAPR != null && endTime > startTime\n ? bond.startAPR + (bond.endAPR - bond.startAPR) * progress\n : 0\n const apr = bond.finalAPR || currentAPR\n\n let depositedAssets = 0\n let claimableRewards = '0'\n let futureRewards = 0\n let rewardDistributionEnd = 0\n let claimed = 0\n let vaultTokenBalance = '0'\n if (bond.yieldBond) {\n const calls = [\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'maxWithdraw',\n params: [account],\n },\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'pendingRewards',\n params: [account],\n },\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'claimedAssets',\n params: [account],\n },\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'vestingEnd',\n },\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'balanceOf',\n params: [account],\n },\n {\n address: bond.earnToken.address[bond.chainId] ?? '',\n name: 'earned',\n params: [account],\n },\n ]\n const res = await multicall(bond.chainId, Vault_Shares_ABI, calls)\n depositedAssets = getBalanceNumber(res[0][0].toString())\n futureRewards = getBalanceNumber(res[1][0].toString())\n claimed = getBalanceNumber(res[2][0].toString())\n rewardDistributionEnd = parseInt(res[3][0])\n vaultTokenBalance = res[4][0].toString()\n claimableRewards = res[5][0].toString()\n }\n\n return {\n ...bond,\n accountInfo,\n userOwnedBillsData,\n endTime,\n finalized,\n vestingTerm,\n initPrice,\n initialRelease: initialRelease / 10000,\n earnTokenPrice: bond.yieldBond\n ? earnTokenPrice\n : !earnTokenPrice || earnTokenPrice === 0\n ? initPrice\n : earnTokenPrice,\n yieldData: {\n apr,\n claimableRewards: accountInfo.hasRedeemed ? claimableRewards : '0',\n rewardDistributionEnd,\n claimed,\n depositedAssets,\n vaultTokenBalance,\n futureRewards,\n },\n }\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'fetchPreTGEUserBonds', bond, e },\n account,\n chainId: bond.chainId,\n })\n return undefined\n }\n }),\n )\n\n return results.filter((bond) => bond !== undefined)\n } catch (e) {\n console.log(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'fetchPreTGEUserBonds', e },\n account,\n })\n return []\n }\n}\n"],"names":["launchBondsABI_V2_4_1"],"mappings":"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"}
@@ -3,7 +3,6 @@ import lensContractABI from '../../config/abi/lensContract.json.js';
3
3
  import { LENS_CONTRACT } from '../../config/constants/addresses.js';
4
4
  import { ChainId, LaunchBondTiers } from '@ape.swap/apeswap-lists';
5
5
  import multicall from '../../utils/multicall.js';
6
- import BigNumber from 'bignumber.js';
7
6
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
8
7
  import { useSDKConfig } from '../useSDKConfig.js';
9
8
  import { reportError } from '../../utils/reportError.js';
@@ -72,25 +71,25 @@ const TIERS_NAMES = {
72
71
  const getUserTier = (weight) => {
73
72
  if (!weight)
74
73
  return null;
75
- const weightBG = new BigNumber(weight);
76
- const silver = new BigNumber(TIERS_WEIGHT[LaunchBondTiers.Silver]);
77
- const gold = new BigNumber(TIERS_WEIGHT[LaunchBondTiers.Gold]);
78
- const diamond = new BigNumber(TIERS_WEIGHT[LaunchBondTiers.Diamond]);
79
- const legend = new BigNumber(TIERS_WEIGHT[LaunchBondTiers.Legend]);
80
- const mythical = new BigNumber(TIERS_WEIGHT[LaunchBondTiers.Mythical]);
81
- if (weightBG.gte(mythical)) {
74
+ const weightBI = BigInt(weight);
75
+ const silver = BigInt(TIERS_WEIGHT[LaunchBondTiers.Silver]);
76
+ const gold = BigInt(TIERS_WEIGHT[LaunchBondTiers.Gold]);
77
+ const diamond = BigInt(TIERS_WEIGHT[LaunchBondTiers.Diamond]);
78
+ const legend = BigInt(TIERS_WEIGHT[LaunchBondTiers.Legend]);
79
+ const mythical = BigInt(TIERS_WEIGHT[LaunchBondTiers.Mythical]);
80
+ if (weightBI >= mythical) {
82
81
  return LaunchBondTiers.Mythical;
83
82
  }
84
- else if (weightBG.gte(legend)) {
83
+ else if (weightBI >= legend) {
85
84
  return LaunchBondTiers.Legend;
86
85
  }
87
- else if (weightBG.gte(diamond)) {
86
+ else if (weightBI >= diamond) {
88
87
  return LaunchBondTiers.Diamond;
89
88
  }
90
- else if (weightBG.gte(gold)) {
89
+ else if (weightBI >= gold) {
91
90
  return LaunchBondTiers.Gold;
92
91
  }
93
- else if (weightBG.gte(silver)) {
92
+ else if (weightBI >= silver) {
94
93
  return LaunchBondTiers.Silver;
95
94
  }
96
95
  return null;
@@ -106,7 +105,7 @@ const fetchUserPoints = async (account, useTiers, apiUrl) => {
106
105
  params: [account],
107
106
  },
108
107
  ]);
109
- const onChainPoints = new BigNumber(res[0][0].toString()).times(2);
108
+ const onChainPoints = BigInt(res[0][0].toString()) * 2n;
110
109
  const promotionsData = await fetch(`${apiUrl}/tier-promotion?user=${account}`)
111
110
  .then((res) => res.json())
112
111
  .then((data) => data)
@@ -115,13 +114,13 @@ const fetchUserPoints = async (account, useTiers, apiUrl) => {
115
114
  return {};
116
115
  });
117
116
  const promotionalTier = promotionsData?.bestPromotion?.tier;
118
- const bestPromotionPoints = new BigNumber(promotionalTier ? TIERS_WEIGHT[promotionalTier] : 0);
117
+ const bestPromotionPoints = BigInt(promotionalTier ? TIERS_WEIGHT[promotionalTier] : 0);
119
118
  return {
120
119
  onChainPoints: onChainPoints.toString(),
121
- promotionalPoints: bestPromotionPoints.gt(onChainPoints)
120
+ promotionalPoints: bestPromotionPoints > onChainPoints
122
121
  ? bestPromotionPoints.toString()
123
122
  : onChainPoints.toString(),
124
- promotion: bestPromotionPoints.gt(onChainPoints) ? promotionsData?.bestPromotion?.promotion : null,
123
+ promotion: bestPromotionPoints > onChainPoints ? promotionsData?.bestPromotion?.promotion : null,
125
124
  // promotion: Promotions.WelcomeBonus,
126
125
  eligibleChains: promotionsData?.bestPromotion?.eligibleChains || undefined,
127
126
  // eligibleChains: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"useTierPoints.js","sources":["../../../src/state/tiers/useTierPoints.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport lensContractABI from '../../config/abi/lensContract.json'\nimport { LENS_CONTRACT } from '../../config/constants/addresses'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport multicall from '../../utils/multicall'\nimport { LaunchBondTiers } from '@ape.swap/apeswap-lists'\nimport BigNumber from 'bignumber.js'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { useSDKConfig } from '../useSDKConfig'\nimport { reportError } from '../../utils/reportError'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport GiftBoxPlain from '../../components/uikit-sdk/Svg/Icons/GiftBoxPlain'\n\nexport enum NewTiers {\n Silver = 1,\n Gold = 2,\n Diamond = 3,\n Legend = 4,\n Mythical = 5,\n}\n\nexport enum Promotions {\n WelcomeBonus = 'welcome bonus',\n BonusWeek = 'bonus week',\n}\n\nexport const promotionDataMapping = {\n [Promotions.WelcomeBonus]: {\n icon: GiftBoxPlain,\n tooltip: 'Your first purchase is eligible for a Welcome Bonus boost of 5%!',\n },\n [Promotions.BonusWeek]: {\n icon: GiftBoxPlain,\n tooltip: 'Get an extra 5% Bonus on one Bond purchase from this chain during Bonus Week.',\n },\n}\n\nexport const TIERS_COLORS = {\n [NewTiers.Silver]: '#7c7c7c',\n [NewTiers.Gold]: '#cc9d60',\n [NewTiers.Diamond]: '#427b9e',\n [NewTiers.Legend]: '#8984E8',\n [NewTiers.Mythical]: '#891F3F',\n}\n\nexport const TIERS_BG = {\n [NewTiers.Silver]: 'linear-gradient(90deg, #3A3A3C 0%, #2C2C2F 100%)',\n [NewTiers.Gold]: 'linear-gradient(90deg, #BC933F 0%, #56431D 100%)',\n [NewTiers.Diamond]: 'linear-gradient(90deg, #1174A2 0%, #062B3C 100%)',\n [NewTiers.Legend]: 'linear-gradient(90deg, #6B43D7 0%, #382371 100%)',\n [NewTiers.Mythical]: 'linear-gradient(90deg, #DFA9D2 -13.84%, #790524 10.35%, #DFA9D2 38.05%, #790524 76.31%)',\n}\n\nexport const TIERS_WEIGHT = {\n [NewTiers.Silver]: '10000000000000000000000',\n [NewTiers.Gold]: '50000000000000000000000',\n [NewTiers.Diamond]: '200000000000000000000000',\n [NewTiers.Legend]: '500000000000000000000000',\n [NewTiers.Mythical]: '1000000000000000000000000',\n}\n\nexport const TIER_MAPPING = {\n '10000000000000000000000': NewTiers.Silver,\n '50000000000000000000000': NewTiers.Gold,\n '200000000000000000000000': NewTiers.Diamond,\n '500000000000000000000000': NewTiers.Legend,\n '1000000000000000000000000': NewTiers.Mythical,\n}\n\nexport const TIERS_NAMES = {\n null: 'No Tier',\n [NewTiers.Silver]: 'Silver',\n [NewTiers.Gold]: 'Gold',\n [NewTiers.Diamond]: 'Diamond',\n [NewTiers.Legend]: 'Legend',\n [NewTiers.Mythical]: 'Mythical',\n}\n\nexport const getUserTier = (weight?: string | null): LaunchBondTiers | null => {\n if (!weight) return null\n const weightBG = new BigNumber(weight)\n const silver = new BigNumber(TIERS_WEIGHT[LaunchBondTiers.Silver])\n const gold = new BigNumber(TIERS_WEIGHT[LaunchBondTiers.Gold])\n const diamond = new BigNumber(TIERS_WEIGHT[LaunchBondTiers.Diamond])\n const legend = new BigNumber(TIERS_WEIGHT[LaunchBondTiers.Legend])\n const mythical = new BigNumber(TIERS_WEIGHT[LaunchBondTiers.Mythical])\n\n if (weightBG.gte(mythical)) {\n return LaunchBondTiers.Mythical\n } else if (weightBG.gte(legend)) {\n return LaunchBondTiers.Legend\n } else if (weightBG.gte(diamond)) {\n return LaunchBondTiers.Diamond\n } else if (weightBG.gte(gold)) {\n return LaunchBondTiers.Gold\n } else if (weightBG.gte(silver)) {\n return LaunchBondTiers.Silver\n }\n return null\n}\n\nconst fetchUserPoints = async (\n account?: string,\n useTiers?: boolean,\n apiUrl?: string,\n): Promise<{\n onChainPoints: string\n promotionalPoints: string\n promotion: Promotions | null\n eligibleChains: ChainId[] | undefined\n} | null> => {\n const lensContractAddress = LENS_CONTRACT[ChainId.BSC]\n if (account && useTiers) {\n try {\n const res = await multicall(ChainId.BSC, lensContractABI, [\n {\n address: lensContractAddress,\n name: 'getEscrowWeight',\n params: [account],\n },\n ])\n const onChainPoints = new BigNumber(res[0][0].toString()).times(2)\n\n const promotionsData = await fetch(`${apiUrl}/tier-promotion?user=${account}`)\n .then((res) => res.json())\n .then((data) => data)\n .catch((err) => {\n console.error('Error fetching promotions:', err)\n return {}\n })\n const promotionalTier: LaunchBondTiers | null = promotionsData?.bestPromotion?.tier\n\n const bestPromotionPoints = new BigNumber(promotionalTier ? TIERS_WEIGHT[promotionalTier] : 0)\n\n return {\n onChainPoints: onChainPoints.toString(),\n promotionalPoints: bestPromotionPoints.gt(onChainPoints)\n ? bestPromotionPoints.toString()\n : onChainPoints.toString(),\n promotion: bestPromotionPoints.gt(onChainPoints) ? promotionsData?.bestPromotion?.promotion : null,\n // promotion: Promotions.WelcomeBonus,\n eligibleChains: promotionsData?.bestPromotion?.eligibleChains || undefined,\n // eligibleChains: undefined,\n }\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'fetchUserPoints', e },\n account,\n })\n return {\n onChainPoints: '0',\n promotionalPoints: '0',\n promotion: null,\n eligibleChains: undefined,\n }\n }\n } else\n return {\n onChainPoints: '0',\n promotionalPoints: '0',\n promotion: null,\n eligibleChains: undefined,\n }\n}\n\nexport default function useTierPoints() {\n const { address: account } = useEVMAccount()\n const SDKConfig = useSDKConfig()\n const apiUrl = SDKConfig?.urls?.apiV2\n return useQuery({\n queryKey: [QUERY_KEYS.TIERS, account],\n queryFn: () => fetchUserPoints(account, SDKConfig.useTiers, apiUrl),\n refetchInterval: 120000, // i.e. 2 mins\n staleTime: 120000, // i.e. 2 mins\n refetchOnWindowFocus: false,\n })\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useTierPoints.js","sources":["../../../src/state/tiers/useTierPoints.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport lensContractABI from '../../config/abi/lensContract.json'\nimport { LENS_CONTRACT } from '../../config/constants/addresses'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport multicall from '../../utils/multicall'\nimport { LaunchBondTiers } from '@ape.swap/apeswap-lists'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { useSDKConfig } from '../useSDKConfig'\nimport { reportError } from '../../utils/reportError'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport GiftBoxPlain from '../../components/uikit-sdk/Svg/Icons/GiftBoxPlain'\n\nexport enum NewTiers {\n Silver = 1,\n Gold = 2,\n Diamond = 3,\n Legend = 4,\n Mythical = 5,\n}\n\nexport enum Promotions {\n WelcomeBonus = 'welcome bonus',\n BonusWeek = 'bonus week',\n}\n\nexport const promotionDataMapping = {\n [Promotions.WelcomeBonus]: {\n icon: GiftBoxPlain,\n tooltip: 'Your first purchase is eligible for a Welcome Bonus boost of 5%!',\n },\n [Promotions.BonusWeek]: {\n icon: GiftBoxPlain,\n tooltip: 'Get an extra 5% Bonus on one Bond purchase from this chain during Bonus Week.',\n },\n}\n\nexport const TIERS_COLORS = {\n [NewTiers.Silver]: '#7c7c7c',\n [NewTiers.Gold]: '#cc9d60',\n [NewTiers.Diamond]: '#427b9e',\n [NewTiers.Legend]: '#8984E8',\n [NewTiers.Mythical]: '#891F3F',\n}\n\nexport const TIERS_BG = {\n [NewTiers.Silver]: 'linear-gradient(90deg, #3A3A3C 0%, #2C2C2F 100%)',\n [NewTiers.Gold]: 'linear-gradient(90deg, #BC933F 0%, #56431D 100%)',\n [NewTiers.Diamond]: 'linear-gradient(90deg, #1174A2 0%, #062B3C 100%)',\n [NewTiers.Legend]: 'linear-gradient(90deg, #6B43D7 0%, #382371 100%)',\n [NewTiers.Mythical]: 'linear-gradient(90deg, #DFA9D2 -13.84%, #790524 10.35%, #DFA9D2 38.05%, #790524 76.31%)',\n}\n\nexport const TIERS_WEIGHT = {\n [NewTiers.Silver]: '10000000000000000000000',\n [NewTiers.Gold]: '50000000000000000000000',\n [NewTiers.Diamond]: '200000000000000000000000',\n [NewTiers.Legend]: '500000000000000000000000',\n [NewTiers.Mythical]: '1000000000000000000000000',\n}\n\nexport const TIER_MAPPING = {\n '10000000000000000000000': NewTiers.Silver,\n '50000000000000000000000': NewTiers.Gold,\n '200000000000000000000000': NewTiers.Diamond,\n '500000000000000000000000': NewTiers.Legend,\n '1000000000000000000000000': NewTiers.Mythical,\n}\n\nexport const TIERS_NAMES = {\n null: 'No Tier',\n [NewTiers.Silver]: 'Silver',\n [NewTiers.Gold]: 'Gold',\n [NewTiers.Diamond]: 'Diamond',\n [NewTiers.Legend]: 'Legend',\n [NewTiers.Mythical]: 'Mythical',\n}\n\nexport const getUserTier = (weight?: string | null): LaunchBondTiers | null => {\n if (!weight) return null\n const weightBI = BigInt(weight)\n const silver = BigInt(TIERS_WEIGHT[LaunchBondTiers.Silver])\n const gold = BigInt(TIERS_WEIGHT[LaunchBondTiers.Gold])\n const diamond = BigInt(TIERS_WEIGHT[LaunchBondTiers.Diamond])\n const legend = BigInt(TIERS_WEIGHT[LaunchBondTiers.Legend])\n const mythical = BigInt(TIERS_WEIGHT[LaunchBondTiers.Mythical])\n\n if (weightBI >= mythical) {\n return LaunchBondTiers.Mythical\n } else if (weightBI >= legend) {\n return LaunchBondTiers.Legend\n } else if (weightBI >= diamond) {\n return LaunchBondTiers.Diamond\n } else if (weightBI >= gold) {\n return LaunchBondTiers.Gold\n } else if (weightBI >= silver) {\n return LaunchBondTiers.Silver\n }\n return null\n}\n\nconst fetchUserPoints = async (\n account?: string,\n useTiers?: boolean,\n apiUrl?: string,\n): Promise<{\n onChainPoints: string\n promotionalPoints: string\n promotion: Promotions | null\n eligibleChains: ChainId[] | undefined\n} | null> => {\n const lensContractAddress = LENS_CONTRACT[ChainId.BSC]\n if (account && useTiers) {\n try {\n const res = await multicall(ChainId.BSC, lensContractABI, [\n {\n address: lensContractAddress,\n name: 'getEscrowWeight',\n params: [account],\n },\n ])\n const onChainPoints = BigInt(res[0][0].toString()) * 2n\n\n const promotionsData = await fetch(`${apiUrl}/tier-promotion?user=${account}`)\n .then((res) => res.json())\n .then((data) => data)\n .catch((err) => {\n console.error('Error fetching promotions:', err)\n return {}\n })\n const promotionalTier: LaunchBondTiers | null = promotionsData?.bestPromotion?.tier\n\n const bestPromotionPoints = BigInt(promotionalTier ? TIERS_WEIGHT[promotionalTier] : 0)\n\n return {\n onChainPoints: onChainPoints.toString(),\n promotionalPoints: bestPromotionPoints > onChainPoints\n ? bestPromotionPoints.toString()\n : onChainPoints.toString(),\n promotion: bestPromotionPoints > onChainPoints ? promotionsData?.bestPromotion?.promotion : null,\n // promotion: Promotions.WelcomeBonus,\n eligibleChains: promotionsData?.bestPromotion?.eligibleChains || undefined,\n // eligibleChains: undefined,\n }\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'fetchUserPoints', e },\n account,\n })\n return {\n onChainPoints: '0',\n promotionalPoints: '0',\n promotion: null,\n eligibleChains: undefined,\n }\n }\n } else\n return {\n onChainPoints: '0',\n promotionalPoints: '0',\n promotion: null,\n eligibleChains: undefined,\n }\n}\n\nexport default function useTierPoints() {\n const { address: account } = useEVMAccount()\n const SDKConfig = useSDKConfig()\n const apiUrl = SDKConfig?.urls?.apiV2\n return useQuery({\n queryKey: [QUERY_KEYS.TIERS, account],\n queryFn: () => fetchUserPoints(account, SDKConfig.useTiers, apiUrl),\n refetchInterval: 120000, // i.e. 2 mins\n staleTime: 120000, // i.e. 2 mins\n refetchOnWindowFocus: false,\n })\n}\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { useMemo } from 'react';
2
- import BigNumber from 'bignumber.js';
3
2
  import { ChainId } from '@ape.swap/apeswap-lists';
4
3
  import { useQuery } from '@tanstack/react-query';
5
4
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
6
5
  import useDebounce from '../../hooks/useDebounce.js';
7
6
  import axios from 'axios';
7
+ import { toFixedString } from '../../utils/fixedPoint.js';
8
8
 
9
9
  // =============================================================================
10
10
  // useAptosZapQuote — Panora DEX aggregator quote for Aptos zap
@@ -25,7 +25,7 @@ const useAptosZapQuote = (typedValue, inputToken, bond, account, slippage = 0.5)
25
25
  const principalTokenAddress = bond?.lpToken?.address?.[ChainId.APTOS];
26
26
  const inputTokenAddress = inputToken?.faAddress;
27
27
  // Panora uses human-readable amounts (no decimals conversion needed)
28
- const inputAmount = new BigNumber(debouncedInput ?? '0').toString();
28
+ const inputAmount = Number(debouncedInput ?? '0').toString();
29
29
  const queryParams = useMemo(() => {
30
30
  if (!inputTokenAddress ||
31
31
  !principalTokenAddress ||
@@ -70,10 +70,10 @@ const useAptosZapQuote = (typedValue, inputToken, bond, account, slippage = 0.5)
70
70
  const principalDecimals = bond?.lpToken?.decimals?.[ChainId.APTOS] ?? 6;
71
71
  // Panora returns amounts in human-readable format (no decimal conversion needed)
72
72
  const estimatedDepositAmount = quoteData?.toTokenAmount
73
- ? new BigNumber(quoteData.toTokenAmount).toFixed(principalDecimals)
73
+ ? toFixedString(quoteData.toTokenAmount, principalDecimals)
74
74
  : '0';
75
75
  const minimumDepositAmount = quoteData?.minToTokenAmount
76
- ? new BigNumber(quoteData.minToTokenAmount).toFixed(principalDecimals)
76
+ ? toFixedString(quoteData.minToTokenAmount, principalDecimals)
77
77
  : '0';
78
78
  const zapLoading = isLoading || isFetching;
79
79
  return [zapLoading, quoteData ?? null, estimatedDepositAmount, zapError, minimumDepositAmount];
@@ -1 +1 @@
1
- {"version":3,"file":"useAptosZapQuote.js","sources":["../../../src/state/zap/useAptosZapQuote.ts"],"sourcesContent":["// =============================================================================\n// useAptosZapQuote — Panora DEX aggregator quote for Aptos zap\n// =============================================================================\n//\n// Mirrors useJupiterSolanaQuote.ts: fetches a swap quote from Panora\n// (Aptos DEX aggregator) when the user selects an input token different\n// from the bond's principal token.\n//\n// Panora API: POST https://api.panora.exchange/swap\n// Docs: https://docs.panora.exchange/developer/swap/api\n\nimport { useMemo } from 'react'\nimport BigNumber from 'bignumber.js'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport useDebounce from '../../hooks/useDebounce'\nimport axios from 'axios'\nimport type { AptosZapToken } from '../../config/constants/aptosZapTokens'\n\nconst PANORA_API_URL = 'https://api.panora.exchange/swap'\n// TODO(aptos): Move to environment variable or SDK config. This is Panora's\n// public API key — monitor usage and rotate if needed for production.\nconst PANORA_PUBLIC_API_KEY = 'a4^KV_EaTf4MW#ZdvgGKX#HUD^3IFEAOV_kzpIE^3BQGA8pDnrkT7JcIy#HNlLGi'\n\ninterface PanoraQuote {\n toTokenAmount: string\n toTokenAmountUSD: string | null\n priceImpact: string | null\n slippagePercentage: string\n minToTokenAmount: string\n feeTokenAmount: string\n txData: Record<string, unknown>\n}\n\n// Panora /swap returns the quote at the top level (not inside a `quotes` array).\ninterface PanoraSwapResponse extends PanoraQuote {\n fromToken: { address: string; decimals: number; current_price: string }\n toToken: { address: string; decimals: number; current_price: string }\n fromTokenAmount: string\n fromTokenAmountUSD: string | null\n quotes?: PanoraQuote[] // legacy — may not exist\n}\n\nconst useAptosZapQuote = (\n typedValue: string,\n inputToken: AptosZapToken | undefined,\n bond: BondsData | undefined,\n account?: string,\n slippage = 0.5,\n): [\n loading: boolean,\n response: PanoraQuote | null,\n depositAmount: string,\n error: boolean,\n minimumDepositAmount: string,\n] => {\n const debouncedInput = useDebounce(typedValue, 400)\n\n const principalTokenAddress = bond?.lpToken?.address?.[ChainId.APTOS]\n const inputTokenAddress = inputToken?.faAddress\n\n // Panora uses human-readable amounts (no decimals conversion needed)\n const inputAmount = new BigNumber(debouncedInput ?? '0').toString()\n\n const queryParams = useMemo(() => {\n if (\n !inputTokenAddress ||\n !principalTokenAddress ||\n inputAmount === '0' ||\n inputAmount === 'NaN' ||\n !account ||\n inputTokenAddress.toLowerCase() === principalTokenAddress.toLowerCase()\n ) {\n return null\n }\n\n return {\n fromTokenAddress: inputTokenAddress,\n toTokenAddress: principalTokenAddress,\n fromTokenAmount: inputAmount,\n toWalletAddress: account,\n slippagePercentage: slippage.toString(),\n }\n }, [inputTokenAddress, principalTokenAddress, inputAmount, account, slippage])\n\n const fetchPanoraQuote = async (): Promise<PanoraQuote | null> => {\n if (!queryParams) return null\n\n const params = new URLSearchParams(queryParams)\n const response = await axios.post<PanoraSwapResponse>(`${PANORA_API_URL}?${params.toString()}`, null, {\n headers: { 'x-api-key': PANORA_PUBLIC_API_KEY },\n })\n\n const data = response.data\n // Panora returns the quote at the top level. Fall back to quotes[] if present.\n if (data?.quotes?.length) return data.quotes[0]\n if (data?.txData) return data as PanoraQuote\n return null\n }\n\n const {\n data: quoteData,\n isLoading,\n isFetching,\n error,\n } = useQuery({\n queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, 'panora-aptos', queryParams],\n queryFn: fetchPanoraQuote,\n refetchInterval: 60000,\n enabled: !!queryParams,\n retry: 1,\n staleTime: 30000,\n })\n\n const zapError = !!error\n\n const principalDecimals = bond?.lpToken?.decimals?.[ChainId.APTOS] ?? 6\n\n // Panora returns amounts in human-readable format (no decimal conversion needed)\n const estimatedDepositAmount = quoteData?.toTokenAmount\n ? new BigNumber(quoteData.toTokenAmount).toFixed(principalDecimals)\n : '0'\n\n const minimumDepositAmount = quoteData?.minToTokenAmount\n ? new BigNumber(quoteData.minToTokenAmount).toFixed(principalDecimals)\n : '0'\n\n const zapLoading = isLoading || isFetching\n\n return [zapLoading, quoteData ?? null, estimatedDepositAmount, zapError, minimumDepositAmount]\n}\n\nexport default useAptosZapQuote\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAptosZapQuote.js","sources":["../../../src/state/zap/useAptosZapQuote.ts"],"sourcesContent":["// =============================================================================\n// useAptosZapQuote — Panora DEX aggregator quote for Aptos zap\n// =============================================================================\n//\n// Mirrors useJupiterSolanaQuote.ts: fetches a swap quote from Panora\n// (Aptos DEX aggregator) when the user selects an input token different\n// from the bond's principal token.\n//\n// Panora API: POST https://api.panora.exchange/swap\n// Docs: https://docs.panora.exchange/developer/swap/api\n\nimport { useMemo } from 'react'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport useDebounce from '../../hooks/useDebounce'\nimport axios from 'axios'\nimport type { AptosZapToken } from '../../config/constants/aptosZapTokens'\nimport { toFixedString } from '../../utils/fixedPoint'\n\nconst PANORA_API_URL = 'https://api.panora.exchange/swap'\n// TODO(aptos): Move to environment variable or SDK config. This is Panora's\n// public API key — monitor usage and rotate if needed for production.\nconst PANORA_PUBLIC_API_KEY = 'a4^KV_EaTf4MW#ZdvgGKX#HUD^3IFEAOV_kzpIE^3BQGA8pDnrkT7JcIy#HNlLGi'\n\ninterface PanoraQuote {\n toTokenAmount: string\n toTokenAmountUSD: string | null\n priceImpact: string | null\n slippagePercentage: string\n minToTokenAmount: string\n feeTokenAmount: string\n txData: Record<string, unknown>\n}\n\n// Panora /swap returns the quote at the top level (not inside a `quotes` array).\ninterface PanoraSwapResponse extends PanoraQuote {\n fromToken: { address: string; decimals: number; current_price: string }\n toToken: { address: string; decimals: number; current_price: string }\n fromTokenAmount: string\n fromTokenAmountUSD: string | null\n quotes?: PanoraQuote[] // legacy — may not exist\n}\n\nconst useAptosZapQuote = (\n typedValue: string,\n inputToken: AptosZapToken | undefined,\n bond: BondsData | undefined,\n account?: string,\n slippage = 0.5,\n): [\n loading: boolean,\n response: PanoraQuote | null,\n depositAmount: string,\n error: boolean,\n minimumDepositAmount: string,\n] => {\n const debouncedInput = useDebounce(typedValue, 400)\n\n const principalTokenAddress = bond?.lpToken?.address?.[ChainId.APTOS]\n const inputTokenAddress = inputToken?.faAddress\n\n // Panora uses human-readable amounts (no decimals conversion needed)\n const inputAmount = Number(debouncedInput ?? '0').toString()\n\n const queryParams = useMemo(() => {\n if (\n !inputTokenAddress ||\n !principalTokenAddress ||\n inputAmount === '0' ||\n inputAmount === 'NaN' ||\n !account ||\n inputTokenAddress.toLowerCase() === principalTokenAddress.toLowerCase()\n ) {\n return null\n }\n\n return {\n fromTokenAddress: inputTokenAddress,\n toTokenAddress: principalTokenAddress,\n fromTokenAmount: inputAmount,\n toWalletAddress: account,\n slippagePercentage: slippage.toString(),\n }\n }, [inputTokenAddress, principalTokenAddress, inputAmount, account, slippage])\n\n const fetchPanoraQuote = async (): Promise<PanoraQuote | null> => {\n if (!queryParams) return null\n\n const params = new URLSearchParams(queryParams)\n const response = await axios.post<PanoraSwapResponse>(`${PANORA_API_URL}?${params.toString()}`, null, {\n headers: { 'x-api-key': PANORA_PUBLIC_API_KEY },\n })\n\n const data = response.data\n // Panora returns the quote at the top level. Fall back to quotes[] if present.\n if (data?.quotes?.length) return data.quotes[0]\n if (data?.txData) return data as PanoraQuote\n return null\n }\n\n const {\n data: quoteData,\n isLoading,\n isFetching,\n error,\n } = useQuery({\n queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, 'panora-aptos', queryParams],\n queryFn: fetchPanoraQuote,\n refetchInterval: 60000,\n enabled: !!queryParams,\n retry: 1,\n staleTime: 30000,\n })\n\n const zapError = !!error\n\n const principalDecimals = bond?.lpToken?.decimals?.[ChainId.APTOS] ?? 6\n\n // Panora returns amounts in human-readable format (no decimal conversion needed)\n const estimatedDepositAmount = quoteData?.toTokenAmount\n ? toFixedString(quoteData.toTokenAmount, principalDecimals)\n : '0'\n\n const minimumDepositAmount = quoteData?.minToTokenAmount\n ? toFixedString(quoteData.minToTokenAmount, principalDecimals)\n : '0'\n\n const zapLoading = isLoading || isFetching\n\n return [zapLoading, quoteData ?? null, estimatedDepositAmount, zapError, minimumDepositAmount]\n}\n\nexport default useAptosZapQuote\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { useMemo } from 'react';
2
- import BigNumber from 'bignumber.js';
3
2
  import { ChainId } from '@ape.swap/apeswap-lists';
4
3
  import { useQuery } from '@tanstack/react-query';
5
4
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
6
5
  import useDebounce from '../../hooks/useDebounce.js';
7
6
  import { createJupiterApiClient } from '@jup-ag/api';
7
+ import { parseUnits, formatUnits } from '../../utils/fixedPoint.js';
8
8
 
9
9
  // Create Jupiter API client
10
10
  const jupiterQuoteApi = createJupiterApiClient();
@@ -21,10 +21,7 @@ slippage = 0.5) => {
21
21
  const inputCurrencyDecimals = inputCurrency === 'NATIVE' ? 9 : inputCurrency?.decimals[chainId];
22
22
  const wrapAndUnwrapSol = inputCurrency === 'NATIVE'; // true for native SOL, false for wSOL token
23
23
  // Calculate amount in smallest unit (lamports for SOL, or token's base unit)
24
- const validated18DecimalAmount = new BigNumber(debouncedInput ?? '0').toFixed(18, 5);
25
- const amountInSmallestUnit = new BigNumber(validated18DecimalAmount ?? '0')
26
- .times(new BigNumber(10).pow(inputCurrencyDecimals ?? 9))
27
- .toFixed(0);
24
+ const amountInSmallestUnit = parseUnits(debouncedInput ?? '0', inputCurrencyDecimals ?? 9).toString();
28
25
  // Build query params for Jupiter - try direct routes first
29
26
  const directQueryParams = useMemo(() => {
30
27
  if (!inputTokenAddress ||
@@ -104,14 +101,10 @@ slippage = 0.5) => {
104
101
  const estimatedOutputAmount = quoteData?.outAmount;
105
102
  const minimumOutputAmount = quoteData?.otherAmountThreshold;
106
103
  const estimatedDepositAmount = estimatedOutputAmount
107
- ? new BigNumber(estimatedOutputAmount.toString())
108
- .div(new BigNumber(10).pow(principalToken?.decimals[chainId] ?? 9))
109
- .toString()
104
+ ? formatUnits(estimatedOutputAmount.toString(), principalToken?.decimals[chainId] ?? 9)
110
105
  : '0';
111
106
  const minimumDepositAmount = minimumOutputAmount
112
- ? new BigNumber(minimumOutputAmount.toString())
113
- .div(new BigNumber(10).pow(principalToken?.decimals[chainId] ?? 9))
114
- .toString()
107
+ ? formatUnits(minimumOutputAmount.toString(), principalToken?.decimals[chainId] ?? 9)
115
108
  : '0';
116
109
  const zapLoading = isLoading || isFetching;
117
110
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"useJupiterSolanaQuote.js","sources":["../../../src/state/zap/useJupiterSolanaQuote.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport BigNumber from 'bignumber.js'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport useDebounce from '../../hooks/useDebounce'\nimport { createJupiterApiClient, QuoteGetRequest, QuoteResponse } from '@jup-ag/api'\n\n// Create Jupiter API client\nconst jupiterQuoteApi = createJupiterApiClient()\n\nconst useJupiterSolanaQuote = (\n typedValue: string,\n inputCurrency: 'NATIVE' | Token | undefined,\n bond: BondsData | undefined,\n account?: string,\n preferDirectRoutes = true, // Try direct routes first for smaller tx size\n slippage = 0.5, // Slippage tolerance percentage (e.g., 0.5 = 0.5%)\n): [\n loading: boolean,\n response: QuoteResponse | null,\n depositAmount: string,\n error: boolean,\n isDirect: boolean,\n minimumDepositAmount: string,\n wrapAndUnwrapSol: boolean,\n] => {\n const debouncedInput = useDebounce(typedValue, 400)\n\n const principalToken = bond?.lpToken as Token\n const chainId = ChainId.SOL\n\n // Get token addresses\n const inputTokenAddress =\n inputCurrency === 'NATIVE'\n ? 'So11111111111111111111111111111111111111112' // Native SOL (wrapped SOL)\n : inputCurrency?.address[chainId]\n const principalTokenAddress = principalToken?.address[chainId]\n const inputCurrencyDecimals = inputCurrency === 'NATIVE' ? 9 : inputCurrency?.decimals![chainId]\n\n const wrapAndUnwrapSol = inputCurrency === 'NATIVE' // true for native SOL, false for wSOL token\n\n // Calculate amount in smallest unit (lamports for SOL, or token's base unit)\n const validated18DecimalAmount = new BigNumber(debouncedInput ?? '0').toFixed(18, 5)\n const amountInSmallestUnit = new BigNumber(validated18DecimalAmount ?? '0')\n .times(new BigNumber(10).pow(inputCurrencyDecimals ?? 9))\n .toFixed(0)\n\n // Build query params for Jupiter - try direct routes first\n const directQueryParams: QuoteGetRequest | null = useMemo(() => {\n if (\n !inputTokenAddress ||\n !principalTokenAddress ||\n amountInSmallestUnit === '0' ||\n amountInSmallestUnit === 'NaN' ||\n !account ||\n inputTokenAddress === principalTokenAddress\n ) {\n return null\n }\n\n return {\n inputMint: inputTokenAddress,\n outputMint: principalTokenAddress,\n amount: parseInt(amountInSmallestUnit),\n slippageBps: Math.round(slippage * 100), // Convert percentage to basis points (0.5% = 50 bps)\n onlyDirectRoutes: true, // Try direct route first\n asLegacyTransaction: false,\n dexes: ['Raydium'],\n maxAccounts: 24,\n useWsol: inputCurrency !== 'NATIVE',\n }\n }, [inputTokenAddress, principalTokenAddress, amountInSmallestUnit, account, slippage, inputCurrency])\n\n // Fallback params with multi-hop routing\n const multiHopQueryParams: QuoteGetRequest | null = useMemo(() => {\n if (!directQueryParams) return null\n return {\n ...directQueryParams,\n onlyDirectRoutes: false, // Allow multi-hop for better pricing\n }\n }, [directQueryParams])\n\n const fetchJupiterQuote = async (): Promise<{ quote: QuoteResponse | null; isDirect: boolean }> => {\n if (!directQueryParams) return { quote: null, isDirect: false }\n\n try {\n // STEP 1: Try direct route first (smaller transaction size)\n if (preferDirectRoutes) {\n try {\n console.log('Trying direct route on Jupiter')\n console.log(directQueryParams)\n const directQuote = await jupiterQuoteApi.quoteGet(directQueryParams)\n if (directQuote) {\n console.log('Got direct route quote from Jupiter')\n console.log('Test Tx Size Log | Route Plan:', directQuote.routePlan)\n console.log('Test Tx Size Log | Route Plan details:', JSON.stringify(directQuote.routePlan, null, 2))\n return { quote: directQuote, isDirect: true }\n }\n } catch (directError) {\n console.error('Direct route error:', directError)\n }\n }\n\n // STEP 2: Fallback to multi-hop routing (better pricing, larger tx)\n if (multiHopQueryParams) {\n const multiHopQuote = await jupiterQuoteApi.quoteGet(multiHopQueryParams)\n console.log('Got multi-hop route quote from Jupiter')\n return { quote: multiHopQuote, isDirect: false }\n }\n\n return { quote: null, isDirect: false }\n } catch (error) {\n console.error('Jupiter quote error:', error)\n throw error\n }\n }\n\n const {\n data: response,\n isLoading,\n isFetching,\n error,\n } = useQuery({\n queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, 'jupiter-solana', directQueryParams, preferDirectRoutes, slippage],\n queryFn: fetchJupiterQuote,\n refetchInterval: 60000,\n enabled: !!directQueryParams,\n retry: 1,\n staleTime: 30000,\n })\n\n const zapError = !!error\n\n const quoteData = response?.quote\n const isDirect = response?.isDirect ?? false\n\n const estimatedOutputAmount = quoteData?.outAmount\n const minimumOutputAmount = quoteData?.otherAmountThreshold\n\n const estimatedDepositAmount = estimatedOutputAmount\n ? new BigNumber(estimatedOutputAmount.toString())\n .div(new BigNumber(10).pow(principalToken?.decimals![chainId] ?? 9))\n .toString()\n : '0'\n\n const minimumDepositAmount = minimumOutputAmount\n ? new BigNumber(minimumOutputAmount.toString())\n .div(new BigNumber(10).pow(principalToken?.decimals![chainId] ?? 9))\n .toString()\n : '0'\n\n const zapLoading = isLoading || isFetching\n\n return [\n zapLoading,\n quoteData ?? null,\n estimatedDepositAmount,\n zapError,\n isDirect,\n minimumDepositAmount,\n wrapAndUnwrapSol,\n ]\n}\n\nexport default useJupiterSolanaQuote\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useJupiterSolanaQuote.js","sources":["../../../src/state/zap/useJupiterSolanaQuote.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport useDebounce from '../../hooks/useDebounce'\nimport { createJupiterApiClient, QuoteGetRequest, QuoteResponse } from '@jup-ag/api'\nimport { formatUnits, parseUnits } from '../../utils/fixedPoint'\n\n// Create Jupiter API client\nconst jupiterQuoteApi = createJupiterApiClient()\n\nconst useJupiterSolanaQuote = (\n typedValue: string,\n inputCurrency: 'NATIVE' | Token | undefined,\n bond: BondsData | undefined,\n account?: string,\n preferDirectRoutes = true, // Try direct routes first for smaller tx size\n slippage = 0.5, // Slippage tolerance percentage (e.g., 0.5 = 0.5%)\n): [\n loading: boolean,\n response: QuoteResponse | null,\n depositAmount: string,\n error: boolean,\n isDirect: boolean,\n minimumDepositAmount: string,\n wrapAndUnwrapSol: boolean,\n] => {\n const debouncedInput = useDebounce(typedValue, 400)\n\n const principalToken = bond?.lpToken as Token\n const chainId = ChainId.SOL\n\n // Get token addresses\n const inputTokenAddress =\n inputCurrency === 'NATIVE'\n ? 'So11111111111111111111111111111111111111112' // Native SOL (wrapped SOL)\n : inputCurrency?.address[chainId]\n const principalTokenAddress = principalToken?.address[chainId]\n const inputCurrencyDecimals = inputCurrency === 'NATIVE' ? 9 : inputCurrency?.decimals![chainId]\n\n const wrapAndUnwrapSol = inputCurrency === 'NATIVE' // true for native SOL, false for wSOL token\n\n // Calculate amount in smallest unit (lamports for SOL, or token's base unit)\n const amountInSmallestUnit = parseUnits(debouncedInput ?? '0', inputCurrencyDecimals ?? 9).toString()\n\n // Build query params for Jupiter - try direct routes first\n const directQueryParams: QuoteGetRequest | null = useMemo(() => {\n if (\n !inputTokenAddress ||\n !principalTokenAddress ||\n amountInSmallestUnit === '0' ||\n amountInSmallestUnit === 'NaN' ||\n !account ||\n inputTokenAddress === principalTokenAddress\n ) {\n return null\n }\n\n return {\n inputMint: inputTokenAddress,\n outputMint: principalTokenAddress,\n amount: parseInt(amountInSmallestUnit),\n slippageBps: Math.round(slippage * 100), // Convert percentage to basis points (0.5% = 50 bps)\n onlyDirectRoutes: true, // Try direct route first\n asLegacyTransaction: false,\n dexes: ['Raydium'],\n maxAccounts: 24,\n useWsol: inputCurrency !== 'NATIVE',\n }\n }, [inputTokenAddress, principalTokenAddress, amountInSmallestUnit, account, slippage, inputCurrency])\n\n // Fallback params with multi-hop routing\n const multiHopQueryParams: QuoteGetRequest | null = useMemo(() => {\n if (!directQueryParams) return null\n return {\n ...directQueryParams,\n onlyDirectRoutes: false, // Allow multi-hop for better pricing\n }\n }, [directQueryParams])\n\n const fetchJupiterQuote = async (): Promise<{ quote: QuoteResponse | null; isDirect: boolean }> => {\n if (!directQueryParams) return { quote: null, isDirect: false }\n\n try {\n // STEP 1: Try direct route first (smaller transaction size)\n if (preferDirectRoutes) {\n try {\n console.log('Trying direct route on Jupiter')\n console.log(directQueryParams)\n const directQuote = await jupiterQuoteApi.quoteGet(directQueryParams)\n if (directQuote) {\n console.log('Got direct route quote from Jupiter')\n console.log('Test Tx Size Log | Route Plan:', directQuote.routePlan)\n console.log('Test Tx Size Log | Route Plan details:', JSON.stringify(directQuote.routePlan, null, 2))\n return { quote: directQuote, isDirect: true }\n }\n } catch (directError) {\n console.error('Direct route error:', directError)\n }\n }\n\n // STEP 2: Fallback to multi-hop routing (better pricing, larger tx)\n if (multiHopQueryParams) {\n const multiHopQuote = await jupiterQuoteApi.quoteGet(multiHopQueryParams)\n console.log('Got multi-hop route quote from Jupiter')\n return { quote: multiHopQuote, isDirect: false }\n }\n\n return { quote: null, isDirect: false }\n } catch (error) {\n console.error('Jupiter quote error:', error)\n throw error\n }\n }\n\n const {\n data: response,\n isLoading,\n isFetching,\n error,\n } = useQuery({\n queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, 'jupiter-solana', directQueryParams, preferDirectRoutes, slippage],\n queryFn: fetchJupiterQuote,\n refetchInterval: 60000,\n enabled: !!directQueryParams,\n retry: 1,\n staleTime: 30000,\n })\n\n const zapError = !!error\n\n const quoteData = response?.quote\n const isDirect = response?.isDirect ?? false\n\n const estimatedOutputAmount = quoteData?.outAmount\n const minimumOutputAmount = quoteData?.otherAmountThreshold\n\n const estimatedDepositAmount = estimatedOutputAmount\n ? formatUnits(estimatedOutputAmount.toString(), principalToken?.decimals![chainId] ?? 9)\n : '0'\n\n const minimumDepositAmount = minimumOutputAmount\n ? formatUnits(minimumOutputAmount.toString(), principalToken?.decimals![chainId] ?? 9)\n : '0'\n\n const zapLoading = isLoading || isFetching\n\n return [\n zapLoading,\n quoteData ?? null,\n estimatedDepositAmount,\n zapError,\n isDirect,\n minimumDepositAmount,\n wrapAndUnwrapSol,\n ]\n}\n\nexport default useJupiterSolanaQuote\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { useMemo } from 'react';
2
- import BigNumber from 'bignumber.js';
3
2
  import { dexFactories, Wrappers, BillVersion, zapInputTokens, WNATIVE } from '@ape.swap/apeswap-lists';
4
3
  import { getChainParam, getLpType } from './getChainParam.js';
5
4
  import axios from 'axios';
@@ -10,6 +9,7 @@ import { useSlippage } from '../slippage/useSlippage.js';
10
9
  import useDebounce from '../../hooks/useDebounce.js';
11
10
  import { zapSupported, SOUL_ZAP_API } from '../../config/constants/variables.js';
12
11
  import { useSDKConfig } from '../useSDKConfig.js';
12
+ import { parseUnits, formatUnits } from '../../utils/fixedPoint.js';
13
13
 
14
14
  const useSoulZapBondQuote = (typedValue, inputCurrency, bond, account, tierProofSig) => {
15
15
  const isZapSupported = zapSupported.includes(bond?.chainId);
@@ -31,11 +31,7 @@ const useSoulZapBondQuote = (typedValue, inputCurrency, bond, account, tierProof
31
31
  const ichiUnderlyingDex = principalToken?.ichiUnderlyingDex;
32
32
  const vault = principalToken?.address?.[chainId];
33
33
  const router = dexFactories[chainId]?.[liquidityDex]?.router;
34
- // Validates that the user did not pass an amount with 19 decimals or more
35
- const validated18DecimalAmount = new BigNumber(debouncedInput ?? '0').toFixed(18, 5);
36
- const bigishInputAmount = new BigNumber(validated18DecimalAmount ?? '0')
37
- .times(new BigNumber(10).pow(inputCurrencyDecimals ?? 18))
38
- .toString();
34
+ const bigishInputAmount = parseUnits(debouncedInput ?? '0', inputCurrencyDecimals ?? 18).toString();
39
35
  const zapInputData = useMemo(() => {
40
36
  if (inputCurrencyString &&
41
37
  inputCurrencyDecimals &&
@@ -171,34 +167,30 @@ const useSoulZapBondQuote = (typedValue, inputCurrency, bond, account, tierProof
171
167
  const toToken1Estimate = response?.lpQuote?.token1?.fromAmountEstimate;
172
168
  const toToken1 = zapInputTokens[chainId]?.find((token) => token.address[chainId]?.toLowerCase() === response?.lpQuote?.token1?.address?.toLowerCase());
173
169
  const toToken1Price = useCurrencyPrice(toToken1 ?? null, chainId);
174
- let toToken0USD = new BigNumber(toToken0Estimate ?? '0')
175
- ?.div(new BigNumber(10).pow(toToken0?.decimals[chainId] ?? 18)) // this is amount of swap output
176
- ?.times(new BigNumber(toToken0Price?.price ?? 0)); // convert it to usd price
170
+ let toToken0USD = Number(formatUnits(toToken0Estimate ?? '0', toToken0?.decimals[chainId] ?? 18)) * (toToken0Price?.price ?? 0); // this is amount of swap output, converted to usd price
177
171
  if (response?.lpQuote?.token0?.fromAmountUSD) {
178
- toToken0USD = new BigNumber(response?.lpQuote?.token0?.fromAmountUSD);
172
+ toToken0USD = Number(response?.lpQuote?.token0?.fromAmountUSD);
179
173
  }
180
- let toToken1USD = new BigNumber(toToken1Estimate ?? '0')
181
- ?.div(new BigNumber(10).pow(toToken1?.decimals[chainId] ?? 18)) // this is amount of swap output
182
- ?.times(new BigNumber(toToken1Price?.price ?? 0)); // convert it to usd price
174
+ let toToken1USD = Number(formatUnits(toToken1Estimate ?? '0', toToken1?.decimals[chainId] ?? 18)) * (toToken1Price?.price ?? 0); // this is amount of swap output, converted to usd price
183
175
  if (response?.lpQuote?.token1?.fromAmountUSD) {
184
- toToken1USD = new BigNumber(response?.lpQuote?.token1?.fromAmountUSD);
176
+ toToken1USD = Number(response?.lpQuote?.token1?.fromAmountUSD);
185
177
  }
186
- const youSpendUSD = toToken0USD.plus(toToken1USD); // youSpendUSD
187
- const estimatedDepositAmount = youSpendUSD.div(bond?.principalTokenPrice ?? '0');
178
+ const youSpendUSD = toToken0USD + toToken1USD; // youSpendUSD
179
+ const estimatedDepositAmount = youSpendUSD / Number(bond?.principalTokenPrice ?? '0');
188
180
  const isWrap = inputCurrency === 'NATIVE' &&
189
181
  bond?.lpToken?.address?.[chainId]?.toLowerCase() === WNATIVE[chainId]?.address?.[chainId]?.toLowerCase();
190
182
  const isPrincipalToken = inputCurrency !== 'NATIVE' && inputCurrency?.address[chainId] === principalToken.address[chainId];
191
183
  const estimatedDepositAmountToReturn = isWrap || isPrincipalToken
192
- ? new BigNumber(typedValue || '0').times((100 - bond?.tierBoostRate) / 100).toString()
184
+ ? (Number(typedValue || '0') * ((100 - bond?.tierBoostRate) / 100)).toString()
193
185
  : estimatedDepositAmount.toString();
194
186
  const trueBondPrice = response?.protocolQuote?.trueBondPrice;
195
187
  // DEBUG: log tierOptimization when present
196
188
  if (response?.protocolQuote?.tierOptimization) {
197
189
  const tier = response.protocolQuote.tierOptimization;
198
190
  const decimals = principalToken?.decimals?.[chainId] ?? 18;
199
- const cost = new BigNumber(tier.tierCost).div(new BigNumber(10).pow(decimals));
200
- const input = new BigNumber(tier.bondInput).div(new BigNumber(10).pow(decimals));
201
- const profit = new BigNumber(tier.profit).div(new BigNumber(10).pow(decimals));
191
+ const cost = Number(formatUnits(tier.tierCost, decimals));
192
+ const input = Number(formatUnits(tier.bondInput, decimals));
193
+ const profit = Number(formatUnits(tier.profit, decimals));
202
194
  console.log('[ZAP] tierOptimization:', {
203
195
  tier: `${tier.previousTier} → ${tier.newTier}`,
204
196
  cost: cost.toFixed(6),