@ape.swap/bonds-sdk 5.1.7 → 5.1.8-test.0
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.
- package/README.md +2 -2
- package/dist/components/TokenSelectorModal/index.js +1 -3
- package/dist/components/TokenSelectorModal/index.js.map +1 -1
- package/dist/config/constants/networks.js +1 -1
- package/dist/config/constants/networks.js.map +1 -1
- package/dist/hooks/useMonitorTx.d.ts +1 -0
- package/dist/state/allowance/useAllowance.js +3 -3
- package/dist/state/allowance/useAllowance.js.map +1 -1
- package/dist/state/bonds/fetchBillsUser.js +12 -9
- package/dist/state/bonds/fetchBillsUser.js.map +1 -1
- package/dist/state/bonds/useBondsData.js +2 -6
- package/dist/state/bonds/useBondsData.js.map +1 -1
- package/dist/state/bonds/useUserBondsPreTGE.js +11 -11
- package/dist/state/bonds/useUserBondsPreTGE.js.map +1 -1
- package/dist/state/bonds/utils.js +23 -19
- package/dist/state/bonds/utils.js.map +1 -1
- package/dist/state/tiers/useTierPoints.d.ts +7 -0
- package/dist/state/tiers/useTierPoints.js +8 -1
- package/dist/state/tiers/useTierPoints.js.map +1 -1
- package/dist/state/tokenPrices/useTokenPrices.d.ts +1 -0
- package/dist/state/tokenPrices/useTokenPrices.js.map +1 -1
- package/dist/state/useSDKConfig.js +0 -1
- package/dist/state/useSDKConfig.js.map +1 -1
- package/dist/types/bondCodec.js +1 -1
- package/dist/types/bondIssuanceCodec.js +1 -1
- package/dist/types/bondPricingCodec.js +1 -1
- package/dist/types/bondTermCodec.js +1 -1
- package/dist/utils/bondPriceHelpers.js.map +1 -1
- package/dist/utils/convertToBigish.d.ts +2 -0
- package/dist/utils/convertToBigish.js +25 -0
- package/dist/utils/convertToBigish.js.map +1 -0
- package/dist/utils/multicall.js +31 -19
- package/dist/utils/multicall.js.map +1 -1
- package/dist/views/Bonds/components/ChainBanner/ChainBanner.js +1 -1
- package/dist/views/BuyBond/BuyComponent.js +2 -3
- package/dist/views/BuyBond/BuyComponent.js.map +1 -1
- package/dist/views/BuyBond/components/GetUpToComponent/GetUpToComponent.js +8 -3
- package/dist/views/BuyBond/components/GetUpToComponent/GetUpToComponent.js.map +1 -1
- package/dist/views/ProjectView/components/BondLeaderboard/index.js +1 -1
- package/dist/views/ProjectView/components/BondLeaderboard/index.js.map +1 -1
- package/dist/views/YourBonds/components/UserBondRow/UserBondRow.js +1 -1
- package/dist/views/YourBonds/components/UserBondRow/UserBondRowSolana.js +1 -1
- package/dist/views/YourBondsModal/YourBondsModal.js +1 -1
- package/dist/views/YourBondsModal/components/TransferBondModal/index.js +1 -1
- package/package.json +2 -4
- package/dist/utils/convertToTokenValue.d.ts +0 -4
- package/dist/utils/convertToTokenValue.js +0 -27
- package/dist/utils/convertToTokenValue.js.map +0 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -16
- package/dist/utils/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -20,11 +20,11 @@ To install the package via npm or yarn, run the following command:
|
|
|
20
20
|
|
|
21
21
|
npm:
|
|
22
22
|
```bash
|
|
23
|
-
npm install "@ape.swap/bonds-sdk@solana" @bigmi/react@^0.6.5 @lifi/widget@^3.40.6 @mysten/dapp-kit@^0.19.11 @solana/kit@2.3.0 @solana/spl-token@^0.4.14 @solana/wallet-adapter-react@^0.15.39 @solana/wallet-adapter-react-ui@^0.9.39 @solana/web3.js@^1.98.4 @tanstack/react-query@^5.90.2 axios@^1.8.2 wagmi@^2.14.16 swiper
|
|
23
|
+
npm install "@ape.swap/bonds-sdk@solana" @bigmi/react@^0.6.5 @lifi/widget@^3.40.6 @mysten/dapp-kit@^0.19.11 @solana/kit@2.3.0 @solana/spl-token@^0.4.14 @solana/wallet-adapter-react@^0.15.39 @solana/wallet-adapter-react-ui@^0.9.39 @solana/web3.js@^1.98.4 @tanstack/react-query@^5.90.2 axios@^1.8.2 wagmi@^2.14.16 swiper
|
|
24
24
|
```
|
|
25
25
|
yarn:
|
|
26
26
|
```bash
|
|
27
|
-
yarn add "@ape.swap/bonds-sdk@solana" @bigmi/react@^0.6.5 @lifi/widget@^3.40.6 @mysten/dapp-kit@^0.19.11 @solana/kit@2.3.0 @solana/spl-token@^0.4.14 @solana/wallet-adapter-react@^0.15.39 @solana/wallet-adapter-react-ui@^0.9.39 @solana/web3.js@^1.98.4 @tanstack/react-query@^5.90.2 axios@^1.8.2 wagmi@^2.14.16 swiper
|
|
27
|
+
yarn add "@ape.swap/bonds-sdk@solana" @bigmi/react@^0.6.5 @lifi/widget@^3.40.6 @mysten/dapp-kit@^0.19.11 @solana/kit@2.3.0 @solana/spl-token@^0.4.14 @solana/wallet-adapter-react@^0.15.39 @solana/wallet-adapter-react-ui@^0.9.39 @solana/web3.js@^1.98.4 @tanstack/react-query@^5.90.2 axios@^1.8.2 wagmi@^2.14.16 swiper
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
---
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'theme-ui/jsx-runtime';
|
|
2
2
|
import { useState, useCallback } from 'react';
|
|
3
|
-
import { isAddress } from '../../utils/index.js';
|
|
4
3
|
import { WNATIVE } from '@ape.swap/apeswap-lists';
|
|
5
4
|
import TokenRow from './TokenRow.js';
|
|
6
5
|
import useSortedZapList from '../../hooks/useSortedZapList.js';
|
|
@@ -27,8 +26,7 @@ const TokenSelectorModal = ({ bondPrincipalToken, handleCurrencySelect, chainId,
|
|
|
27
26
|
}, [onDismiss, handleCurrencySelect, setSearchQuery]);
|
|
28
27
|
const handleInput = useCallback((event) => {
|
|
29
28
|
const input = event.target.value;
|
|
30
|
-
|
|
31
|
-
setSearchQuery(checksummedInput || input);
|
|
29
|
+
setSearchQuery(input);
|
|
32
30
|
}, [setSearchQuery]);
|
|
33
31
|
return (jsx(Modal, { onDismiss: onDismiss, title: "Tokens", className: "token-selector-modal", children: jsx(Flex, { sx: {
|
|
34
32
|
flexDirection: 'column',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/TokenSelectorModal/index.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react'\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/TokenSelectorModal/index.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react'\nimport { ChainId, Token, WNATIVE } from '@ape.swap/apeswap-lists'\nimport TokenRow from './TokenRow'\nimport useSortedZapList from '../../hooks/useSortedZapList'\nimport Modal from '../uikit-sdk/Modal'\nimport Flex from '../uikit-sdk/Flex'\nimport Input from '../uikit-sdk/Input/Input'\n\ninterface TokenSelectorModalProps {\n bondPrincipalToken?: Token // should be ADDED to the inputList\n handleCurrencySelect: (currency: string) => void\n chainId: ChainId\n onDismiss?: () => void\n}\n\nconst TokenSelectorModal: React.FC<TokenSelectorModalProps> = ({\n bondPrincipalToken,\n handleCurrencySelect,\n chainId,\n onDismiss,\n}) => {\n const [searchQuery, setSearchQuery] = useState<string>('')\n const { sortedZapList } = useSortedZapList(chainId, bondPrincipalToken)\n\n const parsedList =\n sortedZapList?.filter((token) => {\n // Search filter\n return !searchQuery\n ? true\n : token.token === 'NATIVE'\n ? WNATIVE[chainId as ChainId]?.symbol.toLowerCase().includes(searchQuery.toLowerCase())\n : token.token.symbol.toLowerCase().includes(searchQuery.toLowerCase())\n }) ?? []\n\n const handleTokenSelect = useCallback(\n (currency: string) => {\n handleCurrencySelect(currency)\n setSearchQuery('')\n if (onDismiss) onDismiss()\n },\n [onDismiss, handleCurrencySelect, setSearchQuery],\n )\n\n const handleInput = useCallback(\n (event: any) => {\n const input = event.target.value\n setSearchQuery(input)\n },\n [setSearchQuery],\n )\n\n return (\n <Modal onDismiss={onDismiss} title=\"Tokens\" className=\"token-selector-modal\">\n <Flex\n sx={{\n flexDirection: 'column',\n maxHeight: 'none',\n height: 'auto',\n width: 'auto',\n overflowY: 'auto',\n }}\n >\n <Flex sx={{ flexDirection: 'column' }}>\n <Flex sx={{ position: 'relative', margin: '10px 0px 15px 0px' }}>\n <Input\n id=\"token-search-input\"\n placeholder=\"Name or Address\"\n autoComplete=\"off\"\n value={searchQuery}\n onChange={handleInput}\n autoFocus\n />\n </Flex>\n <Flex\n sx={{\n borderRadius: 'normal',\n background: 'white3',\n flexDirection: 'column',\n height: '300px',\n overflowY: 'auto',\n }}\n >\n {parsedList.map((token) => {\n return (\n <TokenRow\n key={token.token === 'NATIVE' ? 'NATIVE' : token.token.address[chainId]}\n token={token.token}\n chainId={chainId}\n handleTokenSelect={handleTokenSelect}\n tokenBalance={token.balance}\n />\n )\n })}\n </Flex>\n </Flex>\n </Flex>\n </Modal>\n )\n}\n\nexport default TokenSelectorModal\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ const PUBLIC_RPC_URLS = {
|
|
|
9
9
|
[ChainId.ARBITRUM]: ['https://arb1.arbitrum.io/rpc'],
|
|
10
10
|
[ChainId.BSC_TESTNET]: ['https://data-seed-prebsc-2-s3.binance.org:8545/'],
|
|
11
11
|
[ChainId.MATIC]: [
|
|
12
|
-
'https://1rpc.io/matic',
|
|
13
12
|
'https://polygon.drpc.org',
|
|
13
|
+
'https://1rpc.io/matic',
|
|
14
14
|
'https://polygon-rpc.com/', // this is now freemium
|
|
15
15
|
'https://polygon-mainnet.public.blastapi.io/',
|
|
16
16
|
'https://rpc-mainnet.matic.network',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networks.js","sources":["../../../src/config/constants/networks.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\n\nexport const PUBLIC_RPC_URLS: Partial<Record<ChainId, string[]>> = {\n [ChainId.BSC]: [\n 'https://bsc-dataseed.binance.org/',\n 'https://bsc-dataseed1.defibit.io',\n 'https://endpoints.omniatech.io/v1/bsc/mainnet/public',\n ],\n [ChainId.ARBITRUM]: ['https://arb1.arbitrum.io/rpc'],\n [ChainId.BSC_TESTNET]: ['https://data-seed-prebsc-2-s3.binance.org:8545/'],\n [ChainId.MATIC]: [\n 'https://
|
|
1
|
+
{"version":3,"file":"networks.js","sources":["../../../src/config/constants/networks.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\n\nexport const PUBLIC_RPC_URLS: Partial<Record<ChainId, string[]>> = {\n [ChainId.BSC]: [\n 'https://bsc-dataseed.binance.org/',\n 'https://bsc-dataseed1.defibit.io',\n 'https://endpoints.omniatech.io/v1/bsc/mainnet/public',\n ],\n [ChainId.ARBITRUM]: ['https://arb1.arbitrum.io/rpc'],\n [ChainId.BSC_TESTNET]: ['https://data-seed-prebsc-2-s3.binance.org:8545/'],\n [ChainId.MATIC]: [\n 'https://polygon.drpc.org',\n 'https://1rpc.io/matic',\n 'https://polygon-rpc.com/', // this is now freemium\n 'https://polygon-mainnet.public.blastapi.io/',\n 'https://rpc-mainnet.matic.network',\n 'https://matic-mainnet.chainstacklabs.com',\n ],\n [ChainId.MAINNET]: [\n 'https://ethereum-rpc.publicnode.com',\n 'https://eth.drpc.org',\n 'https://eth-mainnet.public.blastapi.io',\n 'https://rpc.ankr.com/eth',\n ],\n [ChainId.TLOS]: ['https://mainnet.telos.net/evm'],\n [ChainId.INEVM]: ['https://mainnet.rpc.inevm.com/http'],\n [ChainId.SEPOLIA]: ['https://eth-sepolia-public.unifra.io'],\n [ChainId.LINEA]: [\n 'https://rpc.linea.build',\n 'https://linea.drpc.org',\n 'https://linea.blockpi.network/v1/rpc/public',\n 'https://linea.decubate.com',\n ],\n [ChainId.LIGHTLINK]: [\n 'https://replicator.phoenix.lightlink.io/rpc/v1',\n 'https://endpoints.omniatech.io/v1/lightlink/phoenix/public',\n ],\n [ChainId.IOTA]: ['https://json-rpc.evm.iotaledger.net/'],\n [ChainId.IOTA_TESTNET]: ['https://json-rpc.evm.testnet.iotaledger.net/'],\n [ChainId.BASE]: ['https://base-rpc.publicnode.com', 'https://mainnet.base.org'],\n [ChainId.GRAPHLINQ]: ['https://glq-dataseed.graphlinq.io'],\n [ChainId.AVAX]: ['https://avalanche-c-chain-rpc.publicnode.com', 'https://avax.meowrpc.com'],\n [ChainId.BLAST]: ['https://rpc.blast.io'],\n [ChainId.CROSSFI]: ['https://rpc.mainnet.ms'],\n [ChainId.MONAD_TESTNET]: ['https://testnet-rpc2.monad.xyz/52227f026fa8fac9e2014c58fbf5643369b3bfc6'],\n [ChainId.MONAD]: [\n 'https://rpc.monad.xyz',\n 'https://rpc1.monad.xyz',\n 'https://rpc2.monad.xyz',\n 'https://rpc3.monad.xyz',\n 'https://rpc4.monad.xyz',\n ],\n [ChainId.SONIC]: ['https://rpc.soniclabs.com'],\n [ChainId.BERACHAIN]: ['https://rpc.berachain.com', 'https://berachain.drpc.org'],\n [ChainId.KATANA]: ['https://rpc-katana.t.conduit.xyz/NRcSLqEG4Hw55GzTSu6Sratq94kKtUGfH'],\n [ChainId.UNICHAIN]: ['https://unichain-rpc.publicnode.com', 'https://unichain.drpc.org'],\n [ChainId.MEGAETH_TESTNET]: ['https://carrot.megaeth.com/rpc'],\n [ChainId.HYPEREVM]: ['https://rpc.hyperliquid.xyz/evm'],\n\n // SOL RPC is not public. Production URL (morning-autumn-dream) is domain-protected, development URL (ancient-cold-sailboat) is free, use with caution.\n [ChainId.SOL]:\n process.env.NODE_ENV === 'production'\n ? ['https://morning-autumn-dream.solana-mainnet.quiknode.pro/1ef6069950c798a43a112c0fe5eb157309427db8']\n : [\n 'https://ancient-cold-sailboat.solana-mainnet.quiknode.pro/da13400ad8d0035313f3e71c6a37c107d0d0334b',\n 'https://mainnet.helius-rpc.com/?api-key=d80b11e0-692f-4da0-91d6-830799c8c385',\n ], // mainnet\n // [ChainId.SOL]: ['https://devnet.helius-rpc.com/?api-key=095f6fc7-1be0-4d94-a737-4a5ee0d82ea5'], // devnet\n}\n\n// Multiple Helius SOL RPC endpoints for rotation\nexport const HELIUS_SOL_RPC_ENDPOINTS = [\n 'https://mainnet.helius-rpc.com/?api-key=d80b11e0-692f-4da0-91d6-830799c8c385', // apefede09@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=8631ce42-9000-490d-9ac3-f3a81de508b2', // apebond.design@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=c097651d-ae13-4ab4-ae4c-fef7e48d4561', // n0mbr3al3at0r10@gmail.com\n 'https://mainnet.helius-rpc.com/?api-key=a5c4ea36-fa6b-4bcc-a7a4-e10012b9ea7e', // RandomApe personal mail\n]\n\n// export const HELIUS_SOL_RPC_ENDPOINTS = ['https://devnet.helius-rpc.com/?api-key=095f6fc7-1be0-4d94-a737-4a5ee0d82ea5'] //devnet\n\n// Function to get a random Helius SOL RPC endpoint\nexport const getRandomHeliusRPC = (): string => {\n const randomIndex = Math.floor(Math.random() * HELIUS_SOL_RPC_ENDPOINTS.length)\n return HELIUS_SOL_RPC_ENDPOINTS[randomIndex]\n}\n\n// Keep the current export for backward compatibility\nexport const HELIUS_SOL_RPC = getRandomHeliusRPC()\n\n// Custom RPC registry — set by the consumer via the `customRPCS` prop\nlet _customRPCS: Partial<Record<ChainId, string[]>> = {}\n\nexport const setCustomRPCS = (urls: Partial<Record<ChainId, string[]>>) => {\n _customRPCS = urls\n}\n\nexport const getCustomRPCS = () => _customRPCS\n\nexport const getRPC = (chain: ChainId): string => {\n return _customRPCS?.[chain]?.[0] ?? (PUBLIC_RPC_URLS?.[chain]?.[0] as string)\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ export declare const useMonitorTx: (txHash?: string | null, chainId?: ChainId) =
|
|
|
7
7
|
blobGasUsed?: bigint | undefined;
|
|
8
8
|
blockHash: import("viem").Hash;
|
|
9
9
|
blockNumber: bigint;
|
|
10
|
+
blockTimestamp?: bigint | undefined;
|
|
10
11
|
contractAddress: import("abitype").Address | null | undefined;
|
|
11
12
|
cumulativeGasUsed: bigint;
|
|
12
13
|
effectiveGasPrice: bigint;
|
|
@@ -3,7 +3,7 @@ import BigNumber from 'bignumber.js';
|
|
|
3
3
|
import erc20ABI from '../../config/abi/erc20.json.js';
|
|
4
4
|
import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
|
|
5
5
|
import multicall from '../../utils/multicall.js';
|
|
6
|
-
import
|
|
6
|
+
import { convertToBigish } from '../../utils/convertToBigish.js';
|
|
7
7
|
import USDT_ETH_ABI from '../../config/abi/usdtETH.json.js';
|
|
8
8
|
import { useState, useEffect, useCallback } from 'react';
|
|
9
9
|
import { useWriteContract } from 'wagmi';
|
|
@@ -89,7 +89,7 @@ const useApproval = (amount, currency, spender, account, chainId) => {
|
|
|
89
89
|
if (!decimals || !tokenAddress)
|
|
90
90
|
return null;
|
|
91
91
|
try {
|
|
92
|
-
const bigishAmount =
|
|
92
|
+
const bigishAmount = convertToBigish(amount, decimals);
|
|
93
93
|
setConfirmingTxOnWallet(true);
|
|
94
94
|
const hash = await writeContractAsync({
|
|
95
95
|
address: tokenAddress,
|
|
@@ -134,5 +134,5 @@ const useApproval = (amount, currency, spender, account, chainId) => {
|
|
|
134
134
|
return [approvalState ?? ApprovalState.NOT_APPROVED, handleApprove];
|
|
135
135
|
};
|
|
136
136
|
|
|
137
|
-
export { ApprovalState,
|
|
137
|
+
export { ApprovalState, getTokenAllowance, useApproval };
|
|
138
138
|
//# sourceMappingURL=useAllowance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAllowance.js","sources":["../../../src/state/allowance/useAllowance.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport BigNumber from 'bignumber.js'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport erc20ABI from '../../config/abi/erc20.json'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport multicall, { Call } from '../../utils/multicall'\nimport
|
|
1
|
+
{"version":3,"file":"useAllowance.js","sources":["../../../src/state/allowance/useAllowance.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport BigNumber from 'bignumber.js'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport erc20ABI from '../../config/abi/erc20.json'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport multicall, { Call } from '../../utils/multicall'\nimport { convertToBigish } from '../../utils/convertToBigish'\nimport ERC_20_ABI from '../../config/abi/erc20.json'\nimport USDT_ETH_ABI from '../../config/abi/usdtETH.json'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useWriteContract } from 'wagmi'\nimport { useMonitorTx } from '../../hooks/useMonitorTx'\nimport { usePopups } from '../popups/usePopups'\nimport { reportError } from '../../utils/reportError'\nimport { useURLByEnvironment } from '../useSDKConfig'\n\n/**\n * useAllowance hook: fetches the amount approved by the user for a given token\n * useApproval hook: returns the approval state (not approved, pending or approved) and a function to approve on chain\n * getTokenAllowance function fetches the allowance on chain\n */\n\nexport enum ApprovalState {\n NOT_APPROVED = 'NOT_APPROVED',\n PENDING = 'PENDING',\n APPROVED = 'APPROVED',\n}\n\nexport default function useAllowance(\n currency: 'NATIVE' | Token | null,\n spender: string | null,\n account: string | null,\n chainId: ChainId | null,\n): UseQueryResult<number | null> {\n return useQuery({\n queryKey: [\n QUERY_KEYS.ALLOWANCE,\n account ?? '',\n chainId,\n currency === 'NATIVE' ? currency : currency?.symbol,\n spender,\n ],\n queryFn: () => getTokenAllowance(currency, spender, account, chainId),\n refetchInterval: 10000, // i.e. 10 sec\n refetchOnWindowFocus: false,\n retry: 1,\n })\n}\n\nexport const getTokenAllowance = async (\n currency: 'NATIVE' | Token | null,\n spender: string | null,\n account: string | null,\n chainId: ChainId | null,\n): Promise<number | null> => {\n if (currency === 'NATIVE') return null\n // if (!account) {\n // console.log('Account disconnected')\n // } else if (!currency) {\n // console.log('No currency selected')\n // } else if (!chainId) {\n // console.log('No chainId selected')\n // } else if (!spender) {\n // console.log('No spender selected')\n // }\n if (!account || !currency || !chainId || !spender) return null\n const calls: Call[] = [\n {\n address: currency.address[chainId]!,\n name: 'allowance',\n params: [account, spender],\n },\n ]\n const data = await multicall(chainId, erc20ABI, calls)\n const value = new BigNumber(data[0] ?? 0).div(new BigNumber(10).pow(currency.decimals![chainId]!))\n return value.toNumber()\n}\n\nexport const useApproval = (\n amount: string,\n currency: 'NATIVE' | Token | null,\n spender: string | null,\n account: string | null,\n chainId: ChainId | null,\n): [ApprovalState, () => Promise<string | null | undefined>] => {\n const apiUrl = useURLByEnvironment('apiV2')\n const [confirmingTxOnWallet, setConfirmingTxOnWallet] = useState(false)\n const { data: allowance, refetch } = useAllowance(currency, spender, account, chainId)\n\n const { writeContractAsync, data: txHash, reset } = useWriteContract()\n const { isLoading: isConfirming, isSuccess: isConfirmed } = useMonitorTx(txHash, chainId as ChainId)\n const { addToastError } = usePopups()\n const confirmingTxOnChain = isConfirming && !isConfirmed\n\n useEffect(() => {\n if (txHash && isConfirmed) {\n setTimeout(() => {\n refetch()\n console.log('refetch allowance')\n reset()\n }, 1500)\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [txHash, confirmingTxOnChain, isConfirmed])\n\n const handleApprove = useCallback(async () => {\n if (!chainId || !amount || currency === 'NATIVE' || !currency) return null\n const decimals = currency.decimals![chainId]\n const tokenAddress = currency.address[chainId] as `0x${string}`\n if (!decimals || !tokenAddress) return null\n try {\n const bigishAmount = convertToBigish(amount, decimals)\n setConfirmingTxOnWallet(true)\n const hash = await writeContractAsync({\n address: tokenAddress,\n abi:\n tokenAddress?.toLowerCase() === '0xdAC17F958D2ee523a2206206994597C13D831ec7'.toLowerCase()\n ? USDT_ETH_ABI\n : ERC_20_ABI,\n functionName: 'approve',\n args: [spender, bigishAmount],\n account: account as `0x${string}`,\n chain: chainId as any,\n })\n setConfirmingTxOnWallet(false)\n // Adding a delay as I suspect RPCs need to catch up as the txs are indexed onchain too fast\n await new Promise((resolve) => setTimeout(resolve, 1500))\n return hash\n } catch (error: any) {\n setConfirmingTxOnWallet(false)\n console.error('Approval failed:', error)\n addToastError(error?.shortMessage || error?.details || error?.message)\n reportError({\n apiUrl,\n error,\n extraInfo: { type: 'approval', tokenAddress: tokenAddress, spenderAddress: spender, error },\n chainId,\n account: account!,\n })\n throw error\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [amount, currency, chainId])\n\n let approvalState: ApprovalState = ApprovalState.NOT_APPROVED\n\n if (allowance && amount) {\n approvalState = allowance >= parseFloat(amount) ? ApprovalState.APPROVED : ApprovalState.NOT_APPROVED\n }\n if (currency === 'NATIVE') {\n approvalState = ApprovalState.APPROVED\n }\n if (confirmingTxOnChain || confirmingTxOnWallet) {\n approvalState = ApprovalState.PENDING\n }\n\n return [approvalState ?? ApprovalState.NOT_APPROVED, handleApprove]\n}\n"],"names":["ERC_20_ABI"],"mappings":"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"}
|
|
@@ -74,20 +74,23 @@ const fetchUserOwnedBills = async (chainId, account, bonds, tokenPrices, priceAp
|
|
|
74
74
|
});
|
|
75
75
|
const billDataCalls = [];
|
|
76
76
|
const billVersions = [];
|
|
77
|
-
billIds?.forEach((idArray, index) => idArray[0].forEach((id) =>
|
|
78
|
-
(
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
77
|
+
billIds?.forEach((idArray, index) => idArray[0].forEach((id) => {
|
|
78
|
+
if (id > 0) {
|
|
79
|
+
billDataCalls.push({
|
|
80
|
+
address: bonds[index].contractAddress[bonds[index].chainId],
|
|
81
|
+
name: bonds[index].billVersion !== BillVersion.V1 ? 'getBillInfo' : 'billInfo',
|
|
82
|
+
params: [id],
|
|
83
|
+
bond: bonds[index],
|
|
84
|
+
});
|
|
84
85
|
billDataCalls.push({
|
|
85
86
|
address: bonds[index].contractAddress[bonds[index].chainId],
|
|
86
87
|
name: bonds[index].billVersion !== BillVersion.V1 ? 'claimablePayout' : 'pendingPayoutFor',
|
|
87
88
|
params: [id],
|
|
88
89
|
bond: bonds[index],
|
|
89
|
-
})
|
|
90
|
-
billVersions.push(bonds[index].billVersion)
|
|
90
|
+
});
|
|
91
|
+
billVersions.push(bonds[index].billVersion);
|
|
92
|
+
}
|
|
93
|
+
}));
|
|
91
94
|
const billData = await multicall(chainId, billAbi, billDataCalls, true, 150);
|
|
92
95
|
const result = [];
|
|
93
96
|
for (let i = 0; i < billVersions.length; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchBillsUser.js","sources":["../../../src/state/bonds/fetchBillsUser.ts"],"sourcesContent":["import billAbi from '../../config/abi/BOND_2_0_0.json'\nimport BigNumber from 'bignumber.js'\nimport multicall from '../../utils/multicall'\nimport { UserBill, UserOwnedBillsData } from '../../types/yourbonds'\nimport { BillsConfig, BillVersion, ChainId } from '@ape.swap/apeswap-lists'\nimport { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\n\nexport const fetchUserOwnedBillsDataAsync = async (\n chainId: ChainId,\n account: string,\n bondData: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n priceApiUrl?: string,\n): Promise<UserOwnedBillsData[]> => {\n try {\n if (!account) {\n return []\n }\n const bonds: BillsConfig[] = bondData\n\n // Fetch and set user owned bill data without NFT Data\n const userOwnedBills = await fetchUserOwnedBills(chainId, account, bonds, tokenPrices, priceApiUrl)\n const mapUserOwnedBills = bonds.map((bill: BillsConfig) =>\n userOwnedBills.filter((b) => b.address.toLowerCase() === bill.contractAddress[bill.chainId]?.toLowerCase()),\n )\n const userOwnedBillsData = bonds.map((bill: BillsConfig, i: number) => ({\n index: bill.index,\n userOwnedBills: mapUserOwnedBills[i],\n }))\n\n const combinedData = userOwnedBillsData.map((data) => {\n const enrichedUserBills = data.userOwnedBills.map((bill) => {\n return {\n ...bill,\n }\n })\n return {\n ...data,\n userOwnedBills: enrichedUserBills,\n }\n })\n\n return Promise.resolve(combinedData)\n } catch (error) {\n console.error('Error fetching user owned bills data:', error)\n return Promise.reject(error)\n }\n}\n\nexport const fetchUserOwnedBills = async (\n chainId: ChainId,\n account: string,\n bonds: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n priceApiUrl?: string,\n): Promise<UserBill[]> => {\n // Maps all the bills in the list repo to make a call to each of them to get Bills Id and paused state (only for V4)\n const billIdAndPausedCalls = bonds.flatMap((b, index) => {\n const calls = [\n {\n address: b.contractAddress[b.chainId] ?? '',\n name: 'getBillIds',\n params: [account],\n bondIndex: index,\n },\n ]\n // Only add paused call for V4 bonds\n if (b.billVersion === BillVersion.V4) {\n calls.push({\n address: b.contractAddress[b.chainId] ?? '',\n name: 'paused',\n params: [],\n bondIndex: index,\n })\n }\n return calls\n })\n const billIdAndPausedResults = await multicall(chainId, billAbi, billIdAndPausedCalls, true, 15)\n\n // Separate billIds and pausedStates from results, tracking which bonds have paused calls\n const billIds: any[] = []\n const pausedStates: Map<string, boolean> = new Map()\n let resultIndex = 0\n\n bonds.forEach((b) => {\n // First result is always getBillIds\n billIds.push(billIdAndPausedResults?.[resultIndex])\n resultIndex++\n\n // Next result is paused only if V4\n if (b.billVersion === BillVersion.V4) {\n pausedStates.set(\n b.contractAddress[b.chainId]?.toLowerCase() as string,\n billIdAndPausedResults?.[resultIndex]?.[0] ?? false,\n )\n resultIndex++\n }\n })\n const billDataCalls: any = []\n const billVersions: any = []\n\n billIds?.forEach((idArray: any, index: number) =>\n idArray[0].forEach(\n (id: BigNumber) =>\n id.gt(0) &&\n (billDataCalls.push({\n address: bonds[index].contractAddress[bonds[index].chainId],\n name: bonds[index].billVersion !== BillVersion.V1 ? 'getBillInfo' : 'billInfo',\n params: [id],\n bond: bonds[index],\n }),\n billDataCalls.push({\n address: bonds[index].contractAddress[bonds[index].chainId],\n name: bonds[index].billVersion !== BillVersion.V1 ? 'claimablePayout' : 'pendingPayoutFor',\n params: [id],\n bond: bonds[index],\n }),\n billVersions.push(bonds[index].billVersion)),\n ),\n )\n const billData = await multicall(chainId, billAbi, billDataCalls, true, 150)\n const result = []\n\n for (let i = 0; i < billVersions.length; i++) {\n const billPos = i === 0 ? 0 : i * 2\n let bond: BondsData = billDataCalls[billPos].bond\n\n let principalTokenPrice = tokenPrices?.[bond.chainId]?.find(\n (tokenPrice) => tokenPrice.tokenAddress?.toLowerCase() === bond?.lpToken?.address?.[bond.chainId]?.toLowerCase(),\n )?.price\n\n let payoutTokenPrice = tokenPrices?.[bond.chainId]?.find(\n (tokenPrice: TokenPrices) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bond?.earnToken?.address?.[bond.chainId]?.toLowerCase(),\n )?.price\n\n if (principalTokenPrice === undefined) {\n try {\n const res = await axios.get(\n `${priceApiUrl}/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 } catch {\n principalTokenPrice = 0\n }\n }\n if (payoutTokenPrice === undefined) {\n try {\n const res = await axios.get(\n `${priceApiUrl}/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 } catch {\n payoutTokenPrice = 0\n }\n }\n\n bond = {\n ...bond,\n payoutTokenPrice: payoutTokenPrice?.toString(),\n principalTokenPrice: principalTokenPrice?.toString(),\n }\n const paused = pausedStates.get(bond.contractAddress[bond.chainId]?.toLowerCase() as string) ?? false\n\n const data =\n billVersions[i] !== BillVersion.V1\n ? {\n address: billDataCalls[billPos].address,\n id: billDataCalls[billPos].params[0].toString(),\n payout: new BigNumber(billData[billPos][0]?.payout.toString())\n .minus(billData[billPos][0]?.payoutClaimed.toString())\n .toString(),\n totalPayout: billData[billPos][0]?.payout.toString(),\n payoutClaimed: billData[billPos][0]?.payoutClaimed.toString(),\n billNftAddress: bond.billNnftAddress[bond.chainId] ?? '',\n vesting: billData[billPos][0]?.vesting.toString(),\n vestingTerm: billData[billPos][0]?.vestingTerm.toString(),\n lastBlockTimestamp: billData[billPos][0]?.lastClaimTimestamp.toString(),\n vestingStartTimestamp: billData[billPos][0]?.vestingStartTimestamp.toString(),\n truePricePaid: billData[billPos][0]?.truePricePaid.toString(),\n pendingRewards: billData[billPos + 1][0].toString(),\n paused,\n bond,\n }\n : {\n address: billDataCalls[billPos].address,\n id: billDataCalls[billPos].params[0].toString(),\n payoutClaimed: billData?.[billPos]?.[0]?.payoutClaimed?.toString(),\n payout: billData[billPos][0].toString(),\n billNftAddress: bond.billNnftAddress[bond.chainId] ?? '',\n vesting: billData[billPos][1].toString(),\n lastBlockTimestamp: billData[billPos][2].toString(),\n truePricePaid: billData[billPos][3].toString(),\n pendingRewards: billData[billPos + 1][0].toString(),\n paused,\n bond,\n }\n result.push(data)\n }\n\n return result\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fetchBillsUser.js","sources":["../../../src/state/bonds/fetchBillsUser.ts"],"sourcesContent":["import billAbi from '../../config/abi/BOND_2_0_0.json'\nimport BigNumber from 'bignumber.js'\nimport multicall from '../../utils/multicall'\nimport { UserBill, UserOwnedBillsData } from '../../types/yourbonds'\nimport { BillsConfig, BillVersion, ChainId } from '@ape.swap/apeswap-lists'\nimport { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\n\nexport const fetchUserOwnedBillsDataAsync = async (\n chainId: ChainId,\n account: string,\n bondData: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n priceApiUrl?: string,\n): Promise<UserOwnedBillsData[]> => {\n try {\n if (!account) {\n return []\n }\n const bonds: BillsConfig[] = bondData\n\n // Fetch and set user owned bill data without NFT Data\n const userOwnedBills = await fetchUserOwnedBills(chainId, account, bonds, tokenPrices, priceApiUrl)\n const mapUserOwnedBills = bonds.map((bill: BillsConfig) =>\n userOwnedBills.filter((b) => b.address.toLowerCase() === bill.contractAddress[bill.chainId]?.toLowerCase()),\n )\n const userOwnedBillsData = bonds.map((bill: BillsConfig, i: number) => ({\n index: bill.index,\n userOwnedBills: mapUserOwnedBills[i],\n }))\n\n const combinedData = userOwnedBillsData.map((data) => {\n const enrichedUserBills = data.userOwnedBills.map((bill) => {\n return {\n ...bill,\n }\n })\n return {\n ...data,\n userOwnedBills: enrichedUserBills,\n }\n })\n\n return Promise.resolve(combinedData)\n } catch (error) {\n console.error('Error fetching user owned bills data:', error)\n return Promise.reject(error)\n }\n}\n\nexport const fetchUserOwnedBills = async (\n chainId: ChainId,\n account: string,\n bonds: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n priceApiUrl?: string,\n): Promise<UserBill[]> => {\n // Maps all the bills in the list repo to make a call to each of them to get Bills Id and paused state (only for V4)\n const billIdAndPausedCalls = bonds.flatMap((b, index) => {\n const calls = [\n {\n address: b.contractAddress[b.chainId] ?? '',\n name: 'getBillIds',\n params: [account],\n bondIndex: index,\n },\n ]\n // Only add paused call for V4 bonds\n if (b.billVersion === BillVersion.V4) {\n calls.push({\n address: b.contractAddress[b.chainId] ?? '',\n name: 'paused',\n params: [],\n bondIndex: index,\n })\n }\n return calls\n })\n const billIdAndPausedResults = await multicall(chainId, billAbi, billIdAndPausedCalls, true, 15)\n\n // Separate billIds and pausedStates from results, tracking which bonds have paused calls\n const billIds: any[] = []\n const pausedStates: Map<string, boolean> = new Map()\n let resultIndex = 0\n\n bonds.forEach((b) => {\n // First result is always getBillIds\n billIds.push(billIdAndPausedResults?.[resultIndex])\n resultIndex++\n\n // Next result is paused only if V4\n if (b.billVersion === BillVersion.V4) {\n pausedStates.set(\n b.contractAddress[b.chainId]?.toLowerCase() as string,\n billIdAndPausedResults?.[resultIndex]?.[0] ?? false,\n )\n resultIndex++\n }\n })\n const billDataCalls: any = []\n const billVersions: any = []\n\n billIds?.forEach((idArray: any, index: number) =>\n idArray[0].forEach((id: bigint) => {\n if (id > 0) {\n billDataCalls.push({\n address: bonds[index].contractAddress[bonds[index].chainId],\n name: bonds[index].billVersion !== BillVersion.V1 ? 'getBillInfo' : 'billInfo',\n params: [id],\n bond: bonds[index],\n })\n billDataCalls.push({\n address: bonds[index].contractAddress[bonds[index].chainId],\n name: bonds[index].billVersion !== BillVersion.V1 ? 'claimablePayout' : 'pendingPayoutFor',\n params: [id],\n bond: bonds[index],\n })\n billVersions.push(bonds[index].billVersion)\n }\n }),\n )\n const billData = await multicall(chainId, billAbi, billDataCalls, true, 150)\n const result = []\n\n for (let i = 0; i < billVersions.length; i++) {\n const billPos = i === 0 ? 0 : i * 2\n let bond: BondsData = billDataCalls[billPos].bond\n\n let principalTokenPrice = tokenPrices?.[bond.chainId]?.find(\n (tokenPrice) => tokenPrice.tokenAddress?.toLowerCase() === bond?.lpToken?.address?.[bond.chainId]?.toLowerCase(),\n )?.price\n\n let payoutTokenPrice = tokenPrices?.[bond.chainId]?.find(\n (tokenPrice: TokenPrices) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bond?.earnToken?.address?.[bond.chainId]?.toLowerCase(),\n )?.price\n\n if (principalTokenPrice === undefined) {\n try {\n const res = await axios.get(\n `${priceApiUrl}/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 } catch {\n principalTokenPrice = 0\n }\n }\n if (payoutTokenPrice === undefined) {\n try {\n const res = await axios.get(\n `${priceApiUrl}/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 } catch {\n payoutTokenPrice = 0\n }\n }\n\n bond = {\n ...bond,\n payoutTokenPrice: payoutTokenPrice?.toString(),\n principalTokenPrice: principalTokenPrice?.toString(),\n }\n const paused = pausedStates.get(bond.contractAddress[bond.chainId]?.toLowerCase() as string) ?? false\n\n const data =\n billVersions[i] !== BillVersion.V1\n ? {\n address: billDataCalls[billPos].address,\n id: billDataCalls[billPos].params[0].toString(),\n payout: new BigNumber(billData[billPos][0]?.payout.toString())\n .minus(billData[billPos][0]?.payoutClaimed.toString())\n .toString(),\n totalPayout: billData[billPos][0]?.payout.toString(),\n payoutClaimed: billData[billPos][0]?.payoutClaimed.toString(),\n billNftAddress: bond.billNnftAddress[bond.chainId] ?? '',\n vesting: billData[billPos][0]?.vesting.toString(),\n vestingTerm: billData[billPos][0]?.vestingTerm.toString(),\n lastBlockTimestamp: billData[billPos][0]?.lastClaimTimestamp.toString(),\n vestingStartTimestamp: billData[billPos][0]?.vestingStartTimestamp.toString(),\n truePricePaid: billData[billPos][0]?.truePricePaid.toString(),\n pendingRewards: billData[billPos + 1][0].toString(),\n paused,\n bond,\n }\n : {\n address: billDataCalls[billPos].address,\n id: billDataCalls[billPos].params[0].toString(),\n payoutClaimed: billData?.[billPos]?.[0]?.payoutClaimed?.toString(),\n payout: billData[billPos][0].toString(),\n billNftAddress: bond.billNnftAddress[bond.chainId] ?? '',\n vesting: billData[billPos][1].toString(),\n lastBlockTimestamp: billData[billPos][2].toString(),\n truePricePaid: billData[billPos][3].toString(),\n pendingRewards: billData[billPos + 1][0].toString(),\n paused,\n bond,\n }\n result.push(data)\n }\n\n return result\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import { useQueryClient, useQuery } from '@tanstack/react-query';
|
|
|
2
2
|
import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
|
|
3
3
|
import axios from 'axios';
|
|
4
4
|
import useBondsList from './useBondsList.js';
|
|
5
|
-
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
6
5
|
import { ACF_TO_ABOND } from '../../config/constants/addresses.js';
|
|
7
6
|
import useBondsListPreTGE from './useBondsListPreTGE.js';
|
|
8
7
|
import { fetchBondsData, fetchBondsDataPreTGE } from './utils.js';
|
|
@@ -48,11 +47,8 @@ const calculateBondsData = async (queryClient) => {
|
|
|
48
47
|
}, {});
|
|
49
48
|
try {
|
|
50
49
|
// First, we try to fetch from realtime API
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
await axios.get(`${realTimeApiUrl}/bonds`),
|
|
54
|
-
]);
|
|
55
|
-
return [...solBonds, ...evmResponse.data.bonds].filter((bond) => chains.includes(bond.chainId));
|
|
50
|
+
const evmResponse = await axios.get(`${realTimeApiUrl}/bonds`);
|
|
51
|
+
return evmResponse.data.bonds.filter((bond) => chains.includes(bond.chainId));
|
|
56
52
|
}
|
|
57
53
|
catch {
|
|
58
54
|
// If realtime fails, we trigger the fallback strategy on the client
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\nimport { SDKProps } from '../useSDKConfig'\nimport { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useBondsList from './useBondsList'\nimport { BillsConfig, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport useBondsListPreTGE from '../bonds/useBondsListPreTGE'\nimport { fetchBondsData, fetchBondsDataPreTGE } from './utils'\n\nexport default function useBondsData(): UseQueryResult<BondsData[]> {\n const { data: bondList } = useBondsList()\n const { data: preTGEList } = useBondsListPreTGE()\n const queryClient = useQueryClient()\n\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_DATA, bondList?.length, preTGEList?.length],\n queryFn: () => calculateBondsData(queryClient),\n refetchInterval: 25000, // i.e. 25 sec\n enabled: !!bondList && !!preTGEList,\n refetchOnWindowFocus: true,\n refetchOnMount: false,\n refetchOnReconnect: true,\n retry: 0,\n initialData: [],\n })\n}\n\nexport const calculateBondsData = async (queryClient: QueryClient): Promise<BondsData[]> => {\n // Fetch state from queryClient\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiUrl = urls['realTimeApi']\n const apiUrl = urls['apiV2']\n const priceApiUrl = urls['priceApi']\n const bondList: BillsConfig[] = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as BillsConfig[]\n const preTGEList: PreTGEConfig[] = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]) as PreTGEConfig[]\n const tokenPrices: Partial<Record<ChainId, TokenPrices[]>> | undefined = queryClient?.getQueryData([\n QUERY_KEYS.TOKEN_PRICES,\n ])\n if (!tokenPrices) return []\n const reducedBonds = bondList?.reduce<Record<number, BillsConfig[]>>((acc, bill) => {\n const chainId = bill.chainId\n if (!acc[chainId]) {\n acc[chainId] = []\n }\n if (bill.contractAddress?.[chainId]?.toLowerCase() !== ACF_TO_ABOND.toLowerCase() && !bill.soldOut) {\n acc[chainId].push(bill)\n }\n return acc\n }, {})\n try {\n // First, we try to fetch from realtime API\n const
|
|
1
|
+
{"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\nimport { SDKProps } from '../useSDKConfig'\nimport { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useBondsList from './useBondsList'\nimport { BillsConfig, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport useBondsListPreTGE from '../bonds/useBondsListPreTGE'\nimport { fetchBondsData, fetchBondsDataPreTGE } from './utils'\n\nexport default function useBondsData(): UseQueryResult<BondsData[]> {\n const { data: bondList } = useBondsList()\n const { data: preTGEList } = useBondsListPreTGE()\n const queryClient = useQueryClient()\n\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_DATA, bondList?.length, preTGEList?.length],\n queryFn: () => calculateBondsData(queryClient),\n refetchInterval: 25000, // i.e. 25 sec\n enabled: !!bondList && !!preTGEList,\n refetchOnWindowFocus: true,\n refetchOnMount: false,\n refetchOnReconnect: true,\n retry: 0,\n initialData: [],\n })\n}\n\nexport const calculateBondsData = async (queryClient: QueryClient): Promise<BondsData[]> => {\n // Fetch state from queryClient\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiUrl = urls['realTimeApi']\n const apiUrl = urls['apiV2']\n const priceApiUrl = urls['priceApi']\n const bondList: BillsConfig[] = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as BillsConfig[]\n const preTGEList: PreTGEConfig[] = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]) as PreTGEConfig[]\n const tokenPrices: Partial<Record<ChainId, TokenPrices[]>> | undefined = queryClient?.getQueryData([\n QUERY_KEYS.TOKEN_PRICES,\n ])\n if (!tokenPrices) return []\n const reducedBonds = bondList?.reduce<Record<number, BillsConfig[]>>((acc, bill) => {\n const chainId = bill.chainId\n if (!acc[chainId]) {\n acc[chainId] = []\n }\n if (bill.contractAddress?.[chainId]?.toLowerCase() !== ACF_TO_ABOND.toLowerCase() && !bill.soldOut) {\n acc[chainId].push(bill)\n }\n return acc\n }, {})\n try {\n // First, we try to fetch from realtime API\n const evmResponse = await axios.get(`${realTimeApiUrl}/bonds`)\n return evmResponse.data.bonds.filter((bond: BondsData) => chains.includes(bond.chainId))\n } catch {\n // If realtime fails, we trigger the fallback strategy on the client\n if (bondList) {\n console.time('Fallback BondsData')\n const billData = await Promise.all([\n ...chains.map(async (chainId: ChainId) => {\n if (!reducedBonds[chainId]) return []\n return (\n (await fetchBondsData(chainId, reducedBonds[chainId], apiUrl, tokenPrices?.[chainId], priceApiUrl)) ?? []\n )\n }),\n ...chains.map(async (chainId: ChainId) => {\n const filteredBonds = preTGEList?.filter((bond) => bond.chainId === chainId) ?? []\n return await fetchBondsDataPreTGE(chainId, tokenPrices, filteredBonds, apiUrl)\n }),\n ])\n console.timeEnd('Fallback BondsData')\n return billData.flat()\n }\n return []\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -97,21 +97,21 @@ const fetchPreTGEUserBonds = async (chains, tokenPrices, preTGEList, account, ap
|
|
|
97
97
|
}
|
|
98
98
|
const accountInfo = {
|
|
99
99
|
hasRedeemed: res[2][0],
|
|
100
|
-
payout: res[1].
|
|
101
|
-
depositAmount: res[1].
|
|
102
|
-
payoutClaimed: res[1].
|
|
103
|
-
vesting: res[1].
|
|
104
|
-
vestingTerm: res[1].
|
|
105
|
-
vestingStartTimestamp: res[1].
|
|
106
|
-
lastClaimTimestamp: res[1].
|
|
107
|
-
truePricePaid: res[1].
|
|
100
|
+
payout: res[1][0].toString(),
|
|
101
|
+
depositAmount: res[1][1].toString(),
|
|
102
|
+
payoutClaimed: res[1][2].toString(),
|
|
103
|
+
vesting: res[1][3].toString(),
|
|
104
|
+
vestingTerm: res[1][4].toString(),
|
|
105
|
+
vestingStartTimestamp: res[1][5].toString(),
|
|
106
|
+
lastClaimTimestamp: res[1][6].toString(),
|
|
107
|
+
truePricePaid: res[1][7].toString(),
|
|
108
108
|
};
|
|
109
109
|
const finalized = res[3][0];
|
|
110
110
|
const terms = res[4];
|
|
111
|
-
const vestingTerm =
|
|
112
|
-
const trueBillPrice = res[5]?.[0];
|
|
111
|
+
const vestingTerm = parseInt(res[4][2]);
|
|
112
|
+
const trueBillPrice = parseInt(res[5]?.[0]);
|
|
113
113
|
const initPrice = getBalanceNumber(new BigNumber(trueBillPrice.toString()), bond?.lpToken?.decimals?.[bond?.chainId]);
|
|
114
|
-
const initialRelease = terms?.
|
|
114
|
+
const initialRelease = terms?.[5];
|
|
115
115
|
const earnTokenPrice = tokenPrices?.[bond?.chainId]?.find((tokenPrice) => tokenPrice.tokenAddress?.toLowerCase() === bond.earnToken.address[bond.chainId]?.toLowerCase())?.price;
|
|
116
116
|
return {
|
|
117
117
|
...bond,
|
|
@@ -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 { 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'\n\nexport interface 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}\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\nexport const 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\n const accountInfo: AccountInfo = {\n hasRedeemed: res[2][0],\n payout: res[1].payout.toString(),\n depositAmount: res[1].depositAmount.toString(),\n payoutClaimed: res[1].payoutClaimed.toString(),\n vesting: res[1].vesting.toString(),\n vestingTerm: res[1].vestingTerm.toString(),\n vestingStartTimestamp: res[1].vestingStartTimestamp.toString(),\n lastClaimTimestamp: res[1].lastClaimTimestamp.toString(),\n truePricePaid: res[1].truePricePaid.toString(),\n }\n\n const finalized: boolean = res[3][0]\n const terms = res[4]\n const vestingTerm = terms?.vestingTerm?.toNumber()\n const trueBillPrice = 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?.initialRelease\n const earnTokenPrice = tokenPrices?.[bond?.chainId]?.find(\n (tokenPrice) =>\n tokenPrice.tokenAddress?.toLowerCase() === bond.earnToken.address[bond.chainId]?.toLowerCase(),\n )?.price\n\n return {\n ...bond,\n accountInfo,\n userOwnedBillsData,\n finalized,\n vestingTerm,\n initPrice,\n initialRelease: initialRelease / 10000,\n earnTokenPrice: !earnTokenPrice || earnTokenPrice === 0 ? initPrice : earnTokenPrice,\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 { 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'\n\nexport interface 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}\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\nexport const 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\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 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 earnTokenPrice = tokenPrices?.[bond?.chainId]?.find(\n (tokenPrice) =>\n tokenPrice.tokenAddress?.toLowerCase() === bond.earnToken.address[bond.chainId]?.toLowerCase(),\n )?.price\n\n return {\n ...bond,\n accountInfo,\n userOwnedBillsData,\n finalized,\n vestingTerm,\n initPrice,\n initialRelease: initialRelease / 10000,\n earnTokenPrice: !earnTokenPrice || earnTokenPrice === 0 ? initPrice : earnTokenPrice,\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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"}
|
|
@@ -13,6 +13,7 @@ import { reportError } from '../../utils/reportError.js';
|
|
|
13
13
|
import BigNumber from 'bignumber.js';
|
|
14
14
|
import { calculateTrueBondPrice } from '../../utils/calculateSolanaTrueBillPrice.js';
|
|
15
15
|
import axios from 'axios';
|
|
16
|
+
import { TIER_MAPPING } from '../tiers/useTierPoints.js';
|
|
16
17
|
|
|
17
18
|
const fetchBondsDataPreTGE = async (chain, tokenPrices, preTGEBonds, apiUrl) => {
|
|
18
19
|
try {
|
|
@@ -73,7 +74,7 @@ const fetchBondsDataPreTGE = async (chain, tokenPrices, preTGEBonds, apiUrl) =>
|
|
|
73
74
|
const data = {
|
|
74
75
|
...bondConfig,
|
|
75
76
|
initialRelease: initialRelease / 10000,
|
|
76
|
-
vestingTerm: vestingTerm
|
|
77
|
+
vestingTerm: parseInt(vestingTerm),
|
|
77
78
|
trueBondPrices: [
|
|
78
79
|
{
|
|
79
80
|
points: '0',
|
|
@@ -91,10 +92,10 @@ const fetchBondsDataPreTGE = async (chain, tokenPrices, preTGEBonds, apiUrl) =>
|
|
|
91
92
|
minPoints: minPoints.toString(),
|
|
92
93
|
maxPoints: maxPoints.toString(),
|
|
93
94
|
startVestingTimestamp: startVestingTimestamp?.toString(),
|
|
94
|
-
initTime: { [bondConfig.chainId]: terms
|
|
95
|
-
finishTime: terms
|
|
95
|
+
initTime: { [bondConfig.chainId]: parseInt(terms[1]) },
|
|
96
|
+
finishTime: parseInt(terms[0]),
|
|
96
97
|
initPrice,
|
|
97
|
-
soldOut: finalized[0] || (terms
|
|
98
|
+
soldOut: finalized[0] || (parseInt(terms[0]) ?? 0) < Date.now() / 1000 || bondConfig.soldOut,
|
|
98
99
|
};
|
|
99
100
|
return data;
|
|
100
101
|
});
|
|
@@ -242,32 +243,34 @@ const fetchBondsData = async (chainId, bills, apiUrl, tokenPrices, priceApiUrl)
|
|
|
242
243
|
const cleanBillsData = async (billIds, chunkedBills, chainId, bills, tokenPrices, priceApiUrl) => {
|
|
243
244
|
const data = await Promise.all(chunkedBills?.map(async (chunk, index) => {
|
|
244
245
|
const bill = bills?.find((bill) => bill?.index === billIds[index]);
|
|
245
|
-
let
|
|
246
|
-
tokenPrice?.chainId === chainId)
|
|
247
|
-
if (
|
|
246
|
+
let principalTokenPrice = tokenPrices?.find((tokenPrice) => tokenPrice?.tokenAddress?.toLowerCase() === bill?.lpToken?.address?.[bill?.chainId]?.toLowerCase() &&
|
|
247
|
+
tokenPrice?.chainId === chainId);
|
|
248
|
+
if (principalTokenPrice === undefined || !!principalTokenPrice.error) {
|
|
248
249
|
try {
|
|
249
250
|
// Missing token price, therefor make a single call to api to fetch it
|
|
250
251
|
const res = await axios.get(`${priceApiUrl}/realtime/price?token=${bill?.lpToken?.address?.[bill?.chainId]}&chain=${bill?.chainId}`);
|
|
251
252
|
console.log('Individual call for: ', bill.lpToken.symbol, '. Price: ', res.data.price);
|
|
252
|
-
|
|
253
|
+
principalTokenPrice = res.data;
|
|
253
254
|
}
|
|
254
255
|
catch {
|
|
255
|
-
|
|
256
|
+
console.error('Failed to fetch price for: ', bill.lpToken.symbol);
|
|
256
257
|
}
|
|
257
258
|
}
|
|
258
|
-
let
|
|
259
|
-
tokenPrice?.chainId === chainId)
|
|
260
|
-
if (
|
|
259
|
+
let payoutTokenPrice = tokenPrices?.find((tokenPrice) => tokenPrice?.tokenAddress?.toLowerCase() === bill?.earnToken?.address?.[bill?.chainId]?.toLowerCase() &&
|
|
260
|
+
tokenPrice?.chainId === chainId);
|
|
261
|
+
if (payoutTokenPrice === undefined || !!payoutTokenPrice.error) {
|
|
261
262
|
try {
|
|
262
263
|
// Missing token price, therefor make a single call to api to fetch it
|
|
263
264
|
const res = await axios.get(`${priceApiUrl}/realtime/price?token=${bill?.earnToken?.address?.[bill?.chainId]}&chain=${bill?.chainId}`);
|
|
264
265
|
console.log('Individual call for: ', bill.earnToken.symbol, '. Price: ', res.data.price);
|
|
265
|
-
|
|
266
|
+
payoutTokenPrice = res.data;
|
|
266
267
|
}
|
|
267
268
|
catch {
|
|
268
|
-
|
|
269
|
+
console.error('Failed to fetch price for: ', bill.earnToken.symbol);
|
|
269
270
|
}
|
|
270
271
|
}
|
|
272
|
+
const lpPrice = principalTokenPrice?.price ?? 0;
|
|
273
|
+
const earnTokenPrice = payoutTokenPrice?.price ?? 0;
|
|
271
274
|
const [trueBillPriceFromChunk, totalPayoutGiven, terms, maxTotalPayout, fee, feeInPrincipal, paused, , customTreasuryBalance, bondPricing, bondTerms,] = chunk;
|
|
272
275
|
let trueBillPrice = trueBillPriceFromChunk;
|
|
273
276
|
const feeInPayout = Number(fee / 10000);
|
|
@@ -287,10 +290,11 @@ const cleanBillsData = async (billIds, chunkedBills, chainId, bills, tokenPrices
|
|
|
287
290
|
if (bill?.billVersion === BillVersion.V4) {
|
|
288
291
|
trueBondPrices = trueBillPrice[0].map((data) => {
|
|
289
292
|
return {
|
|
290
|
-
points: data
|
|
291
|
-
trueBondPrice: data
|
|
292
|
-
bonus: getRawBonus(data
|
|
293
|
-
bonusWithFee: getBonusWithFee(feeInPayout, data
|
|
293
|
+
points: data?.points?.toString(),
|
|
294
|
+
trueBondPrice: data?.trueBondPrice.toString(),
|
|
295
|
+
bonus: getRawBonus(data?.trueBondPrice.toString(), lpPrice, earnTokenPrice),
|
|
296
|
+
bonusWithFee: getBonusWithFee(feeInPayout, data?.trueBondPrice.toString(), lpPrice, earnTokenPrice),
|
|
297
|
+
boost: TIER_MAPPING[data?.points?.toString()],
|
|
294
298
|
};
|
|
295
299
|
});
|
|
296
300
|
}
|
|
@@ -321,7 +325,7 @@ const cleanBillsData = async (billIds, chunkedBills, chainId, bills, tokenPrices
|
|
|
321
325
|
maxTotalPayout: maxTotalPayout?.toString(),
|
|
322
326
|
maxPayout: maxPayout?.toString(),
|
|
323
327
|
totalPayoutGiven: totalPayoutGiven?.toString(),
|
|
324
|
-
vestingTerm: typeof vestingTerm === 'number' ? vestingTerm : vestingTerm
|
|
328
|
+
vestingTerm: typeof vestingTerm === 'number' ? vestingTerm : parseInt(vestingTerm),
|
|
325
329
|
};
|
|
326
330
|
return cleanedData;
|
|
327
331
|
}));
|