@ape.swap/bonds-sdk 5.1.1-test.2 → 5.1.1-test.4
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/dist/hooks/useModal.js +1 -1
- package/dist/hooks/useModal.js.map +1 -1
- package/dist/hooks/useSortedZapList.js +1 -1
- package/dist/hooks/useSortedZapList.js.map +1 -1
- package/dist/state/bonds/utils.js +1 -1
- package/dist/state/bonds/utils.js.map +1 -1
- package/dist/utils/multicall.js +2 -2
- package/dist/utils/multicall.js.map +1 -1
- package/dist/views/ProjectView/components/BondStats/index.js +1 -1
- package/package.json +7 -6
package/dist/hooks/useModal.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useContext, useCallback, useEffect } from 'react';
|
|
2
|
-
import get from 'lodash/get';
|
|
2
|
+
import get from 'lodash-es/get.js';
|
|
3
3
|
import { Context } from '../contexts/ModalContext.js';
|
|
4
4
|
|
|
5
5
|
const useModal = (modal, closeOnOverlayClick = true, updateOnPropsChange = false, modalId = 'defaultNodeId', clearModalStack = false) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModal.js","sources":["../../src/hooks/useModal.ts"],"sourcesContent":["import React, { useCallback, useContext, useEffect } from 'react'\nimport get from 'lodash/get'\nimport { Context } from '../contexts/ModalContext'\n\nconst useModal = (\n modal: React.ReactNode,\n closeOnOverlayClick = true,\n updateOnPropsChange = false,\n modalId = 'defaultNodeId',\n clearModalStack = false,\n): [() => void, () => void] => {\n // Clear modal stack will not update props if the parent modal gets unmounted\n const { nodeId, modalNode, setModalNode, onPresent, handleClose, setCloseOnOverlayClick } = useContext(Context)\n const nodeIdIndex = nodeId.indexOf(modalId)\n const onPresentCallback = useCallback(() => {\n if (nodeIdIndex !== -1) {\n console.error('Modal is already open.', modalId)\n return\n } else {\n onPresent(modal, modalId, clearModalStack)\n }\n }, [modal, modalId, clearModalStack, onPresent, nodeIdIndex])\n\n useEffect(() => {\n if (updateOnPropsChange) {\n const modalProps = get(modal, 'props')\n const oldModalProps = get(modalNode[nodeIdIndex], 'props')\n\n if (modalProps && oldModalProps && JSON.stringify(modalProps) !== JSON.stringify(oldModalProps)) {\n setModalNode((prev) => [...prev.filter((_, i) => i !== nodeIdIndex), modal])\n }\n }\n }, [updateOnPropsChange, nodeId, modalId, modal, nodeIdIndex, modalNode, setModalNode])\n\n useEffect(() => {\n setCloseOnOverlayClick(closeOnOverlayClick)\n }, [closeOnOverlayClick, setCloseOnOverlayClick])\n\n return [onPresentCallback, handleClose]\n}\n\nexport default useModal\n"],"names":[],"mappings":";;;;AAIA,MAAM,QAAQ,GAAG,CACf,KAAsB,EACtB,mBAAmB,GAAG,IAAI,EAC1B,mBAAmB,GAAG,KAAK,EAC3B,OAAO,GAAG,eAAe,EACzB,eAAe,GAAG,KAAK,KACK;;AAE5B,IAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;IAC/G,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3C,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAK;AACzC,QAAA,IAAI,WAAW,KAAK,EAAE,EAAE;AACtB,YAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC;YAChD;QACF;aAAO;AACL,YAAA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC;QAC5C;AACF,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAE7D,SAAS,CAAC,MAAK;QACb,IAAI,mBAAmB,EAAE;YACvB,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;YACtC,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;AAE1D,YAAA,IAAI,UAAU,IAAI,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;gBAC/F,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;YAC9E;QACF;AACF,IAAA,CAAC,EAAE,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAEvF,SAAS,CAAC,MAAK;QACb,sBAAsB,CAAC,mBAAmB,CAAC;AAC7C,IAAA,CAAC,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;AAEjD,IAAA,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC;AACzC;;;;"}
|
|
1
|
+
{"version":3,"file":"useModal.js","sources":["../../src/hooks/useModal.ts"],"sourcesContent":["import React, { useCallback, useContext, useEffect } from 'react'\nimport get from 'lodash-es/get.js'\nimport { Context } from '../contexts/ModalContext'\n\nconst useModal = (\n modal: React.ReactNode,\n closeOnOverlayClick = true,\n updateOnPropsChange = false,\n modalId = 'defaultNodeId',\n clearModalStack = false,\n): [() => void, () => void] => {\n // Clear modal stack will not update props if the parent modal gets unmounted\n const { nodeId, modalNode, setModalNode, onPresent, handleClose, setCloseOnOverlayClick } = useContext(Context)\n const nodeIdIndex = nodeId.indexOf(modalId)\n const onPresentCallback = useCallback(() => {\n if (nodeIdIndex !== -1) {\n console.error('Modal is already open.', modalId)\n return\n } else {\n onPresent(modal, modalId, clearModalStack)\n }\n }, [modal, modalId, clearModalStack, onPresent, nodeIdIndex])\n\n useEffect(() => {\n if (updateOnPropsChange) {\n const modalProps = get(modal, 'props')\n const oldModalProps = get(modalNode[nodeIdIndex], 'props')\n\n if (modalProps && oldModalProps && JSON.stringify(modalProps) !== JSON.stringify(oldModalProps)) {\n setModalNode((prev) => [...prev.filter((_, i) => i !== nodeIdIndex), modal])\n }\n }\n }, [updateOnPropsChange, nodeId, modalId, modal, nodeIdIndex, modalNode, setModalNode])\n\n useEffect(() => {\n setCloseOnOverlayClick(closeOnOverlayClick)\n }, [closeOnOverlayClick, setCloseOnOverlayClick])\n\n return [onPresentCallback, handleClose]\n}\n\nexport default useModal\n"],"names":[],"mappings":";;;;AAIA,MAAM,QAAQ,GAAG,CACf,KAAsB,EACtB,mBAAmB,GAAG,IAAI,EAC1B,mBAAmB,GAAG,KAAK,EAC3B,OAAO,GAAG,eAAe,EACzB,eAAe,GAAG,KAAK,KACK;;AAE5B,IAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;IAC/G,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;AAC3C,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAK;AACzC,QAAA,IAAI,WAAW,KAAK,EAAE,EAAE;AACtB,YAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC;YAChD;QACF;aAAO;AACL,YAAA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC;QAC5C;AACF,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAE7D,SAAS,CAAC,MAAK;QACb,IAAI,mBAAmB,EAAE;YACvB,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;YACtC,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;AAE1D,YAAA,IAAI,UAAU,IAAI,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;gBAC/F,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;YAC9E;QACF;AACF,IAAA,CAAC,EAAE,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAEvF,SAAS,CAAC,MAAK;QACb,sBAAsB,CAAC,mBAAmB,CAAC;AAC7C,IAAA,CAAC,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;AAEjD,IAAA,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC;AACzC;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { zapInputTokens, WNATIVE } from '@ape.swap/apeswap-lists';
|
|
2
2
|
import useTokenPrices from '../state/tokenPrices/useTokenPrices.js';
|
|
3
|
-
import uniqBy from 'lodash/uniqBy';
|
|
3
|
+
import uniqBy from 'lodash-es/uniqBy.js';
|
|
4
4
|
import useUserTokensBalance from '../state/balance/useUserTokensBalance.js';
|
|
5
5
|
|
|
6
6
|
const useSortedZapList = (chainId, principalToken) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSortedZapList.js","sources":["../../src/hooks/useSortedZapList.ts"],"sourcesContent":["import { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { WNATIVE, zapInputTokens } from '../config/constants/tokens'\nimport useTokenPrices from '../state/tokenPrices/useTokenPrices'\nimport uniqBy from 'lodash/uniqBy'\nimport useUserTokensBalance from '../state/balance/useUserTokensBalance'\n\nexport interface SortedZapList {\n token: 'NATIVE' | Token\n price: number\n balance?: string\n usdValue: number\n}\nconst useSortedZapList = (\n chainId?: ChainId,\n principalToken?: Token,\n): { sortedZapList: SortedZapList[]; isFetched: boolean } => {\n const zapList = [...(zapInputTokens[chainId as ChainId] ?? []), principalToken]\n\n //@ts-ignore\n const uniqueTokensList: ('NATIVE' | Token)[] = getUniqueTokensList(zapList, chainId as ChainId, principalToken)\n const { data: tokenPrices, isFetched: tokensFetched } = useTokenPrices()\n const { data: balances, isFetched: balancesFetched } = useUserTokensBalance(uniqueTokensList, chainId as ChainId)\n\n //@ts-ignore\n const sortedZapList: SortedZapList[] = uniqueTokensList\n .map((list: 'NATIVE' | Token) => {\n const token: Token = list === 'NATIVE' && chainId ? (WNATIVE[chainId] as Token) : (list as Token)\n const findPrice = tokenPrices?.[chainId!]?.find(\n (tokenPrice) =>\n tokenPrice.chainId === chainId &&\n tokenPrice?.tokenAddress?.toLowerCase() === token?.address?.[chainId as ChainId]?.toLowerCase(),\n )\n const price = isNaN(Number(findPrice?.price)) ? 0 : Number(findPrice?.price)\n const balance = balances?.find((balance) =>\n list === 'NATIVE'\n ? balance.address === 'NATIVE'\n : balance.address.toLowerCase() === token?.address?.[chainId as ChainId]?.toLowerCase(),\n )?.balance\n return {\n token: list === 'NATIVE' ? 'NATIVE' : token,\n price,\n balance,\n usdValue: Number(balance) * price,\n }\n })\n .sort((a, b) => {\n return b.usdValue - a.usdValue\n })\n\n return { sortedZapList, isFetched: tokensFetched && balancesFetched }\n}\n\nconst getUniqueTokensList = (zapList: Token[], chainId: ChainId, principalToken?: Token): ('NATIVE' | Token)[] => {\n const parsedList =\n zapList?.filter((token) => {\n return token?.address?.[chainId]?.toLowerCase() !== principalToken?.address?.[chainId]?.toLowerCase()\n }) ?? []\n\n const inputTokenList: (Token | 'NATIVE')[] = principalToken\n ? [principalToken, 'NATIVE', ...parsedList]\n : ['NATIVE', ...parsedList]\n\n return uniqBy(inputTokenList, `address.[${chainId}]`)\n}\n\nexport default useSortedZapList\n"],"names":[],"mappings":";;;;;AAYA,MAAM,gBAAgB,GAAG,CACvB,OAAiB,EACjB,cAAsB,KACoC;AAC1D,IAAA,MAAM,OAAO,GAAG,CAAC,IAAI,cAAc,CAAC,OAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC;;IAG/E,MAAM,gBAAgB,GAAyB,mBAAmB,CAAC,OAAO,EAAE,OAAkB,EAAE,cAAc,CAAC;AAC/G,IAAA,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,cAAc,EAAE;AACxE,IAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,OAAkB,CAAC;;IAGjH,MAAM,aAAa,GAAoB;AACpC,SAAA,GAAG,CAAC,CAAC,IAAsB,KAAI;AAC9B,QAAA,MAAM,KAAK,GAAU,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAI,OAAO,CAAC,OAAO,CAAW,GAAI,IAAc;AACjG,QAAA,MAAM,SAAS,GAAG,WAAW,GAAG,OAAQ,CAAC,EAAE,IAAI,CAC7C,CAAC,UAAU,KACT,UAAU,CAAC,OAAO,KAAK,OAAO;AAC9B,YAAA,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,KAAK,EAAE,OAAO,GAAG,OAAkB,CAAC,EAAE,WAAW,EAAE,CAClG;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;AAC5E,QAAA,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,KACrC,IAAI,KAAK;AACP,cAAE,OAAO,CAAC,OAAO,KAAK;cACpB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,OAAO,GAAG,OAAkB,CAAC,EAAE,WAAW,EAAE,CAC1F,EAAE,OAAO;QACV,OAAO;YACL,KAAK,EAAE,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,KAAK;YAC3C,KAAK;YACL,OAAO;AACP,YAAA,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK;SAClC;AACH,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,QAAA,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;AAChC,IAAA,CAAC,CAAC;IAEJ,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,IAAI,eAAe,EAAE;AACvE;AAEA,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,OAAgB,EAAE,cAAsB,KAA0B;IAC/G,MAAM,UAAU,GACd,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,KAAI;QACxB,OAAO,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE;IACvG,CAAC,CAAC,IAAI,EAAE;IAEV,MAAM,cAAc,GAAyB;UACzC,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,UAAU;AAC1C,UAAE,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE7B,OAAO,MAAM,CAAC,cAAc,EAAE,YAAY,OAAO,CAAA,CAAA,CAAG,CAAC;AACvD,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"useSortedZapList.js","sources":["../../src/hooks/useSortedZapList.ts"],"sourcesContent":["import { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { WNATIVE, zapInputTokens } from '../config/constants/tokens'\nimport useTokenPrices from '../state/tokenPrices/useTokenPrices'\nimport uniqBy from 'lodash-es/uniqBy.js'\nimport useUserTokensBalance from '../state/balance/useUserTokensBalance'\n\nexport interface SortedZapList {\n token: 'NATIVE' | Token\n price: number\n balance?: string\n usdValue: number\n}\nconst useSortedZapList = (\n chainId?: ChainId,\n principalToken?: Token,\n): { sortedZapList: SortedZapList[]; isFetched: boolean } => {\n const zapList = [...(zapInputTokens[chainId as ChainId] ?? []), principalToken]\n\n //@ts-ignore\n const uniqueTokensList: ('NATIVE' | Token)[] = getUniqueTokensList(zapList, chainId as ChainId, principalToken)\n const { data: tokenPrices, isFetched: tokensFetched } = useTokenPrices()\n const { data: balances, isFetched: balancesFetched } = useUserTokensBalance(uniqueTokensList, chainId as ChainId)\n\n //@ts-ignore\n const sortedZapList: SortedZapList[] = uniqueTokensList\n .map((list: 'NATIVE' | Token) => {\n const token: Token = list === 'NATIVE' && chainId ? (WNATIVE[chainId] as Token) : (list as Token)\n const findPrice = tokenPrices?.[chainId!]?.find(\n (tokenPrice) =>\n tokenPrice.chainId === chainId &&\n tokenPrice?.tokenAddress?.toLowerCase() === token?.address?.[chainId as ChainId]?.toLowerCase(),\n )\n const price = isNaN(Number(findPrice?.price)) ? 0 : Number(findPrice?.price)\n const balance = balances?.find((balance) =>\n list === 'NATIVE'\n ? balance.address === 'NATIVE'\n : balance.address.toLowerCase() === token?.address?.[chainId as ChainId]?.toLowerCase(),\n )?.balance\n return {\n token: list === 'NATIVE' ? 'NATIVE' : token,\n price,\n balance,\n usdValue: Number(balance) * price,\n }\n })\n .sort((a, b) => {\n return b.usdValue - a.usdValue\n })\n\n return { sortedZapList, isFetched: tokensFetched && balancesFetched }\n}\n\nconst getUniqueTokensList = (zapList: Token[], chainId: ChainId, principalToken?: Token): ('NATIVE' | Token)[] => {\n const parsedList =\n zapList?.filter((token) => {\n return token?.address?.[chainId]?.toLowerCase() !== principalToken?.address?.[chainId]?.toLowerCase()\n }) ?? []\n\n const inputTokenList: (Token | 'NATIVE')[] = principalToken\n ? [principalToken, 'NATIVE', ...parsedList]\n : ['NATIVE', ...parsedList]\n\n return uniqBy(inputTokenList, `address.[${chainId}]`)\n}\n\nexport default useSortedZapList\n"],"names":[],"mappings":";;;;;AAYA,MAAM,gBAAgB,GAAG,CACvB,OAAiB,EACjB,cAAsB,KACoC;AAC1D,IAAA,MAAM,OAAO,GAAG,CAAC,IAAI,cAAc,CAAC,OAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC;;IAG/E,MAAM,gBAAgB,GAAyB,mBAAmB,CAAC,OAAO,EAAE,OAAkB,EAAE,cAAc,CAAC;AAC/G,IAAA,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,cAAc,EAAE;AACxE,IAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,OAAkB,CAAC;;IAGjH,MAAM,aAAa,GAAoB;AACpC,SAAA,GAAG,CAAC,CAAC,IAAsB,KAAI;AAC9B,QAAA,MAAM,KAAK,GAAU,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAI,OAAO,CAAC,OAAO,CAAW,GAAI,IAAc;AACjG,QAAA,MAAM,SAAS,GAAG,WAAW,GAAG,OAAQ,CAAC,EAAE,IAAI,CAC7C,CAAC,UAAU,KACT,UAAU,CAAC,OAAO,KAAK,OAAO;AAC9B,YAAA,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,KAAK,EAAE,OAAO,GAAG,OAAkB,CAAC,EAAE,WAAW,EAAE,CAClG;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;AAC5E,QAAA,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,KACrC,IAAI,KAAK;AACP,cAAE,OAAO,CAAC,OAAO,KAAK;cACpB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,OAAO,GAAG,OAAkB,CAAC,EAAE,WAAW,EAAE,CAC1F,EAAE,OAAO;QACV,OAAO;YACL,KAAK,EAAE,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,KAAK;YAC3C,KAAK;YACL,OAAO;AACP,YAAA,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK;SAClC;AACH,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,QAAA,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;AAChC,IAAA,CAAC,CAAC;IAEJ,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,IAAI,eAAe,EAAE;AACvE;AAEA,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,OAAgB,EAAE,cAAsB,KAA0B;IAC/G,MAAM,UAAU,GACd,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,KAAI;QACxB,OAAO,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE;IACvG,CAAC,CAAC,IAAI,EAAE;IAEV,MAAM,cAAc,GAAyB;UACzC,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,UAAU;AAC1C,UAAE,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC;IAE7B,OAAO,MAAM,CAAC,cAAc,EAAE,YAAY,OAAO,CAAA,CAAA,CAAG,CAAC;AACvD,CAAC;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getBalanceNumber } from '../../utils/getBalanceNumber.js';
|
|
2
2
|
import { ChainId, BillVersion } from '@ape.swap/apeswap-lists';
|
|
3
3
|
import multicall from '../../utils/multicall.js';
|
|
4
|
-
import chunk from 'lodash/chunk';
|
|
4
|
+
import chunk from 'lodash-es/chunk.js';
|
|
5
5
|
import launchBondsABI_V2_2_0 from '../../config/abi/launchBond_v2_4_1.json.js';
|
|
6
6
|
import { solanaMulticall } from '../../utils/solanaMulticall.js';
|
|
7
7
|
import { PublicKey } from '@solana/web3.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/state/bonds/utils.ts"],"sourcesContent":["import { BondsData, TrueBondPrices } from '../../types/bonds'\nimport { getBalanceNumber } from '../../utils/getBalanceNumber'\nimport { BillsConfig, BillVersion, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport multicall from '../../utils/multicall'\nimport chunk from 'lodash/chunk'\nimport launchBondsABI_V2_4_1 from '../../config/abi/launchBond_v2_4_1.json'\nimport { SolanaCall, solanaMulticall } from '../../utils/solanaMulticall'\nimport { PublicKey } from '@solana/web3.js'\nimport { derivePda } from '../../utils/derivePda'\nimport { PROGRAM_ID } from '../../constants/solanaConstants'\nimport { BondIssuance, SolanaBondData, SolanaBondsResult } from '../../types/solanaBonds'\nimport BOND_2_4_0 from '../../config/abi/BOND_2_4_0.json'\nimport ERC20ABI from '../../config/abi/erc20.json'\nimport { reportError } from '../../utils/reportError'\nimport BigNumber from 'bignumber.js'\nimport { calculateTrueBondPrice } from '../../utils/calculateSolanaTrueBillPrice'\nimport axios from 'axios'\n\nexport const fetchBondsDataPreTGE = async (\n chain: number,\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n preTGEBonds: PreTGEConfig[],\n apiUrl?: string,\n): Promise<BondsData[]> => {\n try {\n if (!preTGEBonds?.length) return []\n const data = []\n const chainId = chain as ChainId\n\n const preTGEBondsIds: number[] = []\n const launchBondsCalls = preTGEBonds.flatMap((bond) => {\n preTGEBondsIds.push(bond.index)\n const bill = bond\n return [\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'trueBillPrice',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'terms',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'totalPrincipalBilled',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'finalized',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'minPoints',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'maxPoints',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'startVestingTimestamp',\n },\n ]\n })\n const vals = await multicall(chainId, launchBondsABI_V2_4_1, launchBondsCalls)\n const chunkSize = vals.length / preTGEBonds.length\n const chunkedBills = chunk(vals, chunkSize)\n const returnedBills = chunkedBills?.map((chunk: any, index) => {\n const bondConfig = preTGEBonds?.find((bill) => bill?.index === preTGEBondsIds[index])!\n\n const [trueBillPrice, terms, totalPrincipalBilled, finalized, minPoints, maxPoints, startVestingTimestamp] = chunk\n const [, , vestingTerm, , , initialRelease, totalRaise, maxTotalPayout] = terms\n\n const initPrice = getBalanceNumber(\n trueBillPrice,\n bondConfig?.lpToken?.decimals?.[bondConfig?.chainId as ChainId] ?? 18,\n )\n\n const lpPrice =\n tokenPrices?.[bondConfig?.chainId]?.find(\n (tokenPrice) =>\n tokenPrice?.tokenAddress?.toLowerCase() ===\n bondConfig?.lpToken?.address?.[bondConfig?.chainId]?.toLowerCase(),\n )?.price ?? 0\n const earnTokenPrice =\n tokenPrices?.[bondConfig?.chainId]?.find(\n (tokenPrice) =>\n tokenPrice?.tokenAddress?.toLowerCase() ===\n bondConfig?.earnToken?.address?.[bondConfig?.chainId]?.toLowerCase(),\n )?.price ?? 0\n\n const principalTokenPrice = lpPrice?.toString() ?? '0'\n const payoutTokenPrice = earnTokenPrice ? earnTokenPrice?.toString() : initPrice?.toString()\n\n const bonus = Math.round((bondConfig.tgePrice! / initPrice) * 100 - 100)\n\n const data: BondsData = {\n ...bondConfig,\n initialRelease: initialRelease / 10000,\n vestingTerm: vestingTerm?.toNumber(),\n trueBondPrices: [\n {\n points: '0',\n trueBondPrice: trueBillPrice?.toString(),\n bonus,\n bonusWithFee: bonus, // placeholder, wont be used\n },\n ],\n maxTotalPayout: maxTotalPayout?.toString(),\n totalPrincipalBilled: totalPrincipalBilled?.toString(),\n payoutTokenPrice,\n principalTokenPrice,\n totalRaise: totalRaise?.toString(),\n finalized: finalized[0],\n minPoints: minPoints.toString(),\n maxPoints: maxPoints.toString(),\n startVestingTimestamp: startVestingTimestamp?.toString(),\n initTime: { [bondConfig.chainId]: terms.startTime.toNumber() },\n finishTime: terms.endTime.toNumber(),\n initPrice,\n soldOut: finalized[0] || (terms.endTime.toNumber() ?? 0) < Date.now() / 1000 || bondConfig.soldOut,\n }\n return data\n })\n data.push(returnedBills)\n return data.flat()\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'getLaunchBondsPublicData', preTGEBonds, chain, e },\n })\n return []\n }\n}\n\nexport const fetchBondsData = async (\n chainId: number,\n bills: BillsConfig[],\n apiUrl: string,\n tokenPrices?: TokenPrices[],\n priceApiUrl?: string,\n) => {\n if (!tokenPrices) return []\n try {\n if (chainId === ChainId.SOL) {\n const solanaCalls: SolanaCall[] = []\n const solanaBillIds: number[] = []\n for (const bill of bills) {\n const bondIssuanceAddress = bill.contractAddress[ChainId.SOL]\n if (!bondIssuanceAddress) continue\n\n solanaBillIds.push(bill.index)\n const bondIssuancePubkey = new PublicKey(bondIssuanceAddress)\n const bondTermPda = derivePda('bond_term', bondIssuancePubkey, PROGRAM_ID)\n const bondPricingPda = derivePda('bond_pricing', bondIssuancePubkey, PROGRAM_ID)\n solanaCalls.push(\n { accountAddress: bondIssuanceAddress, accountType: 'bondIssuance' },\n { accountAddress: bondTermPda.toBase58(), accountType: 'bondTerm' },\n { accountAddress: bondPricingPda.toBase58(), accountType: 'bondPricing' },\n )\n }\n // Fetch Solana bills\n const solanaResults = (await solanaMulticall(solanaCalls)) as SolanaBondsResult\n\n const solanaBills =\n solanaResults?.bondIssuance\n ?.map((bondIssuance: BondIssuance, index: number) => {\n const vestingTermDuration = Number(solanaResults.bondTerm[index]?.vestingEnd.toString())\n const bill = {\n ...bondIssuance,\n ...solanaResults.bondPricing[index],\n terms: solanaResults.bondTerm[index],\n } as SolanaBondData\n\n return [\n bill.trueBillPrice,\n bill.totalPayoutGiven,\n [bill.terms.controlVariable, vestingTermDuration, bill.terms.minimumDebt, bill.terms.maxPayout],\n bill.terms.maxTotalPayout,\n parseFloat(bill.feeInPayout.toString()),\n parseFloat(bill.feeInPrincipal.toString()) / 10000,\n false,\n undefined,\n undefined,\n solanaResults.bondPricing[index],\n solanaResults.bondTerm[index],\n ] // Map to reflect evm structure\n })\n .filter((bill: any) => typeof bill !== 'undefined') ?? []\n const allBillsIds = []\n const allBillsData = []\n if (solanaBills.length > 0) {\n allBillsIds.push(...solanaBillIds)\n allBillsData.push(...solanaBills)\n }\n return await cleanBillsData(allBillsIds, allBillsData, chainId, bills, tokenPrices, priceApiUrl)\n } else {\n const billIds: number[] = []\n const billCalls = bills.flatMap((bill) => {\n billIds.push(bill.index)\n return [\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: bill.billVersion === BillVersion.V4 ? 'trueBondPrices' : 'trueBillPrice()',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'totalPayoutGiven',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'terms',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: bill.billVersion !== BillVersion.V1 ? 'getMaxTotalPayout' : 'maxTotalPayout',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'feeInPayout',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'feeInPrincipal',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'paused',\n },\n // keep custom treasury at the very last position\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'customTreasury',\n },\n ]\n })\n const vals = await multicall(chainId, BOND_2_4_0, billCalls)\n\n // The following lines basically grab the values from customTreasury returned from bills contract and then,\n // appends the treasury contract's balance to the chunk that will be passed to cleanBillsData\n\n // appendIndex value assumes customTreasury will be at the end of the billCalls array\n const appendIndex = billCalls.length / bills.length\n const treasuryAddresses = vals\n .filter((_: any, i: number) => (i % appendIndex) + 1 === appendIndex)\n .map((customTreasury: string[]) => customTreasury[0])\n const treasuryBalanceCalls = treasuryAddresses.map((treasuryAddress: string, i: number) => ({\n address: bills?.[i]?.earnToken?.address?.[chainId as ChainId] ?? '',\n name: 'balanceOf',\n params: [treasuryAddress],\n }))\n const treasuryBalances = await multicall(chainId, ERC20ABI, treasuryBalanceCalls)\n const updatedVals = vals.reduce((acc: any, val: any, index: number) => {\n acc.push(val)\n if ((index + 1) % appendIndex === 0) {\n const pos = (index + 1) / appendIndex\n acc.push(treasuryBalances[pos - 1])\n }\n return acc\n }, [])\n\n //\n const chunkSize = updatedVals?.length / bills?.length\n const chunkedBills = chunk(updatedVals, chunkSize)\n\n return await cleanBillsData(billIds, chunkedBills, chainId, bills, tokenPrices, priceApiUrl)\n }\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'getBondsData', e },\n })\n return []\n }\n}\n\nconst cleanBillsData = async (\n billIds: number[],\n chunkedBills: any[],\n chainId: ChainId,\n bills: BillsConfig[],\n tokenPrices?: TokenPrices[],\n priceApiUrl?: string,\n): Promise<BondsData[]> => {\n const data: BondsData[] = await Promise.all(\n chunkedBills?.map(async (chunk, index) => {\n const bill = bills?.find((bill) => bill?.index === billIds[index]) as BillsConfig\n\n let lpPrice = tokenPrices?.find(\n (tokenPrice) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bill?.lpToken?.address?.[bill?.chainId]?.toLowerCase() &&\n tokenPrice?.chainId === chainId,\n )?.price\n\n if (lpPrice === undefined) {\n try {\n // Missing token price, therefor make a single call to api to fetch it\n const res = await axios.get(\n `${priceApiUrl}/realtime/price?token=${bill?.lpToken?.address?.[bill?.chainId]}&chain=${bill?.chainId}`,\n )\n console.log('Individual call for: ', bill.lpToken.symbol, '. Price: ', res.data.price)\n lpPrice = parseFloat(res.data.price ?? '0')\n } catch {\n lpPrice = 0\n }\n }\n\n let earnTokenPrice = tokenPrices?.find(\n (tokenPrice) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bill?.earnToken?.address?.[bill?.chainId]?.toLowerCase() &&\n tokenPrice?.chainId === chainId,\n )?.price\n\n if (earnTokenPrice === undefined) {\n try {\n // Missing token price, therefor make a single call to api to fetch it\n const res = await axios.get(\n `${priceApiUrl}/realtime/price?token=${bill?.earnToken?.address?.[bill?.chainId]}&chain=${bill?.chainId}`,\n )\n console.log('Individual call for: ', bill.earnToken.symbol, '. Price: ', res.data.price)\n earnTokenPrice = parseFloat(res.data.price ?? '0')\n } catch {\n earnTokenPrice = 0\n }\n }\n\n const [\n trueBillPriceFromChunk,\n totalPayoutGiven,\n terms,\n maxTotalPayout,\n fee,\n feeInPrincipal,\n paused,\n ,\n customTreasuryBalance,\n bondPricing,\n bondTerms,\n ] = chunk\n let trueBillPrice = trueBillPriceFromChunk\n\n const feeInPayout = Number(fee / 10000)\n const [, vestingTerm, , maxPayout] = terms\n const tokensRemaining = new BigNumber(maxTotalPayout ?? '0')\n .minus(new BigNumber(totalPayoutGiven))\n .div(new BigNumber(10).pow(bill?.earnToken.decimals[bill?.chainId] ?? 18))\n .toNumber()\n const treasuryBalance = getBalanceNumber(customTreasuryBalance, bill?.earnToken?.decimals?.[bill?.chainId] ?? 18)\n\n if (chainId === ChainId.SOL) {\n const principalDecimals = bill?.lpToken.decimals[ChainId.SOL] as number\n const payoutDecimals = bill?.earnToken.decimals[ChainId.SOL] as number\n const timeStamp = Math.floor(Date.now() / 1000)\n trueBillPrice = calculateTrueBondPrice(\n bondPricing,\n bondTerms,\n timeStamp,\n principalDecimals,\n payoutDecimals,\n feeInPrincipal,\n )\n }\n\n let trueBondPrices: TrueBondPrices[] = []\n if (bill?.billVersion === BillVersion.V4) {\n trueBondPrices = trueBillPrice[0].map((data: any) => {\n return {\n points: data[2].toString(),\n trueBondPrice: data[0].toString(),\n bonus: getRawBonus(data[0].toString(), lpPrice, earnTokenPrice),\n bonusWithFee: getBonusWithFee(feeInPayout, data[0].toString(), lpPrice, earnTokenPrice),\n }\n })\n } else {\n const bonus: number = getRawBonus(trueBillPrice, lpPrice, earnTokenPrice)\n const bonusWithFee = getBonusWithFee(feeInPayout, trueBillPrice, lpPrice, earnTokenPrice)\n trueBondPrices = [\n {\n points: '0',\n trueBondPrice: trueBillPrice.toString(),\n bonus,\n bonusWithFee,\n },\n ]\n }\n const cleanedData: BondsData = {\n ...bill,\n soldOut: paused[0] ? true : bill.soldOut,\n feeInPayout,\n feeInPrincipal,\n showcaseTokenName: bill?.showcaseToken?.symbol ?? bill?.earnToken.symbol ?? '',\n trueBondPrices,\n principalTokenPrice: lpPrice?.toString(),\n payoutTokenPrice: earnTokenPrice?.toString(),\n tokensRemaining: treasuryBalance\n ? Math.min(treasuryBalance, tokensRemaining).toString()\n : tokensRemaining.toString(),\n maxTotalPayout: maxTotalPayout?.toString(),\n maxPayout: maxPayout?.toString(),\n totalPayoutGiven: totalPayoutGiven?.toString(),\n vestingTerm: typeof vestingTerm === 'number' ? vestingTerm : vestingTerm.toNumber(),\n }\n return cleanedData\n }),\n )\n return data\n}\n\nexport const getBonusWithFee = (\n feeInPayout: number,\n trueBillPrice: string,\n lpPrice: number,\n earnTokenPrice: number,\n) => {\n const fee = feeInPayout ?? 0\n const reverseFee = new BigNumber(fee / 100 / (1 - fee / 100))\n const trueBondPrice = new BigNumber(trueBillPrice).plus(new BigNumber(trueBillPrice).times(reverseFee))\n const priceUSDMinusFee = getBalanceNumber(trueBondPrice) * lpPrice\n const discountWithoutFee = ((earnTokenPrice - priceUSDMinusFee) / earnTokenPrice) * 100\n return discountWithoutFee > 0 ? (discountWithoutFee / (100 - discountWithoutFee)) * 100 : 0\n}\n\nconst getRawBonus = (trueBillPrice: any, lpPrice: number, earnTokenPrice: number) => {\n const priceUsd = getBalanceNumber(trueBillPrice.toString()) * lpPrice\n const discount: number = ((earnTokenPrice - priceUsd) / earnTokenPrice) * 100\n return discount > 0 ? (discount / (100 - discount)) * 100 : 0\n}\n"],"names":["launchBondsABI_V2_4_1","BOND_2_4_0","ERC20ABI"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/state/bonds/utils.ts"],"sourcesContent":["import { BondsData, TrueBondPrices } from '../../types/bonds'\nimport { getBalanceNumber } from '../../utils/getBalanceNumber'\nimport { BillsConfig, BillVersion, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport multicall from '../../utils/multicall'\nimport chunk from 'lodash-es/chunk.js'\nimport launchBondsABI_V2_4_1 from '../../config/abi/launchBond_v2_4_1.json'\nimport { SolanaCall, solanaMulticall } from '../../utils/solanaMulticall'\nimport { PublicKey } from '@solana/web3.js'\nimport { derivePda } from '../../utils/derivePda'\nimport { PROGRAM_ID } from '../../constants/solanaConstants'\nimport { BondIssuance, SolanaBondData, SolanaBondsResult } from '../../types/solanaBonds'\nimport BOND_2_4_0 from '../../config/abi/BOND_2_4_0.json'\nimport ERC20ABI from '../../config/abi/erc20.json'\nimport { reportError } from '../../utils/reportError'\nimport BigNumber from 'bignumber.js'\nimport { calculateTrueBondPrice } from '../../utils/calculateSolanaTrueBillPrice'\nimport axios from 'axios'\n\nexport const fetchBondsDataPreTGE = async (\n chain: number,\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n preTGEBonds: PreTGEConfig[],\n apiUrl?: string,\n): Promise<BondsData[]> => {\n try {\n if (!preTGEBonds?.length) return []\n const data = []\n const chainId = chain as ChainId\n\n const preTGEBondsIds: number[] = []\n const launchBondsCalls = preTGEBonds.flatMap((bond) => {\n preTGEBondsIds.push(bond.index)\n const bill = bond\n return [\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'trueBillPrice',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'terms',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'totalPrincipalBilled',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'finalized',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'minPoints',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'maxPoints',\n },\n {\n address: bill.contractAddress[bill.chainId] as string,\n name: 'startVestingTimestamp',\n },\n ]\n })\n const vals = await multicall(chainId, launchBondsABI_V2_4_1, launchBondsCalls)\n const chunkSize = vals.length / preTGEBonds.length\n const chunkedBills = chunk(vals, chunkSize)\n const returnedBills = chunkedBills?.map((chunk: any, index) => {\n const bondConfig = preTGEBonds?.find((bill) => bill?.index === preTGEBondsIds[index])!\n\n const [trueBillPrice, terms, totalPrincipalBilled, finalized, minPoints, maxPoints, startVestingTimestamp] = chunk\n const [, , vestingTerm, , , initialRelease, totalRaise, maxTotalPayout] = terms\n\n const initPrice = getBalanceNumber(\n trueBillPrice,\n bondConfig?.lpToken?.decimals?.[bondConfig?.chainId as ChainId] ?? 18,\n )\n\n const lpPrice =\n tokenPrices?.[bondConfig?.chainId]?.find(\n (tokenPrice) =>\n tokenPrice?.tokenAddress?.toLowerCase() ===\n bondConfig?.lpToken?.address?.[bondConfig?.chainId]?.toLowerCase(),\n )?.price ?? 0\n const earnTokenPrice =\n tokenPrices?.[bondConfig?.chainId]?.find(\n (tokenPrice) =>\n tokenPrice?.tokenAddress?.toLowerCase() ===\n bondConfig?.earnToken?.address?.[bondConfig?.chainId]?.toLowerCase(),\n )?.price ?? 0\n\n const principalTokenPrice = lpPrice?.toString() ?? '0'\n const payoutTokenPrice = earnTokenPrice ? earnTokenPrice?.toString() : initPrice?.toString()\n\n const bonus = Math.round((bondConfig.tgePrice! / initPrice) * 100 - 100)\n\n const data: BondsData = {\n ...bondConfig,\n initialRelease: initialRelease / 10000,\n vestingTerm: vestingTerm?.toNumber(),\n trueBondPrices: [\n {\n points: '0',\n trueBondPrice: trueBillPrice?.toString(),\n bonus,\n bonusWithFee: bonus, // placeholder, wont be used\n },\n ],\n maxTotalPayout: maxTotalPayout?.toString(),\n totalPrincipalBilled: totalPrincipalBilled?.toString(),\n payoutTokenPrice,\n principalTokenPrice,\n totalRaise: totalRaise?.toString(),\n finalized: finalized[0],\n minPoints: minPoints.toString(),\n maxPoints: maxPoints.toString(),\n startVestingTimestamp: startVestingTimestamp?.toString(),\n initTime: { [bondConfig.chainId]: terms.startTime.toNumber() },\n finishTime: terms.endTime.toNumber(),\n initPrice,\n soldOut: finalized[0] || (terms.endTime.toNumber() ?? 0) < Date.now() / 1000 || bondConfig.soldOut,\n }\n return data\n })\n data.push(returnedBills)\n return data.flat()\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'getLaunchBondsPublicData', preTGEBonds, chain, e },\n })\n return []\n }\n}\n\nexport const fetchBondsData = async (\n chainId: number,\n bills: BillsConfig[],\n apiUrl: string,\n tokenPrices?: TokenPrices[],\n priceApiUrl?: string,\n) => {\n if (!tokenPrices) return []\n try {\n if (chainId === ChainId.SOL) {\n const solanaCalls: SolanaCall[] = []\n const solanaBillIds: number[] = []\n for (const bill of bills) {\n const bondIssuanceAddress = bill.contractAddress[ChainId.SOL]\n if (!bondIssuanceAddress) continue\n\n solanaBillIds.push(bill.index)\n const bondIssuancePubkey = new PublicKey(bondIssuanceAddress)\n const bondTermPda = derivePda('bond_term', bondIssuancePubkey, PROGRAM_ID)\n const bondPricingPda = derivePda('bond_pricing', bondIssuancePubkey, PROGRAM_ID)\n solanaCalls.push(\n { accountAddress: bondIssuanceAddress, accountType: 'bondIssuance' },\n { accountAddress: bondTermPda.toBase58(), accountType: 'bondTerm' },\n { accountAddress: bondPricingPda.toBase58(), accountType: 'bondPricing' },\n )\n }\n // Fetch Solana bills\n const solanaResults = (await solanaMulticall(solanaCalls)) as SolanaBondsResult\n\n const solanaBills =\n solanaResults?.bondIssuance\n ?.map((bondIssuance: BondIssuance, index: number) => {\n const vestingTermDuration = Number(solanaResults.bondTerm[index]?.vestingEnd.toString())\n const bill = {\n ...bondIssuance,\n ...solanaResults.bondPricing[index],\n terms: solanaResults.bondTerm[index],\n } as SolanaBondData\n\n return [\n bill.trueBillPrice,\n bill.totalPayoutGiven,\n [bill.terms.controlVariable, vestingTermDuration, bill.terms.minimumDebt, bill.terms.maxPayout],\n bill.terms.maxTotalPayout,\n parseFloat(bill.feeInPayout.toString()),\n parseFloat(bill.feeInPrincipal.toString()) / 10000,\n false,\n undefined,\n undefined,\n solanaResults.bondPricing[index],\n solanaResults.bondTerm[index],\n ] // Map to reflect evm structure\n })\n .filter((bill: any) => typeof bill !== 'undefined') ?? []\n const allBillsIds = []\n const allBillsData = []\n if (solanaBills.length > 0) {\n allBillsIds.push(...solanaBillIds)\n allBillsData.push(...solanaBills)\n }\n return await cleanBillsData(allBillsIds, allBillsData, chainId, bills, tokenPrices, priceApiUrl)\n } else {\n const billIds: number[] = []\n const billCalls = bills.flatMap((bill) => {\n billIds.push(bill.index)\n return [\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: bill.billVersion === BillVersion.V4 ? 'trueBondPrices' : 'trueBillPrice()',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'totalPayoutGiven',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'terms',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: bill.billVersion !== BillVersion.V1 ? 'getMaxTotalPayout' : 'maxTotalPayout',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'feeInPayout',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'feeInPrincipal',\n },\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'paused',\n },\n // keep custom treasury at the very last position\n {\n address: bill.contractAddress[bill.chainId] ?? '',\n name: 'customTreasury',\n },\n ]\n })\n const vals = await multicall(chainId, BOND_2_4_0, billCalls)\n\n // The following lines basically grab the values from customTreasury returned from bills contract and then,\n // appends the treasury contract's balance to the chunk that will be passed to cleanBillsData\n\n // appendIndex value assumes customTreasury will be at the end of the billCalls array\n const appendIndex = billCalls.length / bills.length\n const treasuryAddresses = vals\n .filter((_: any, i: number) => (i % appendIndex) + 1 === appendIndex)\n .map((customTreasury: string[]) => customTreasury[0])\n const treasuryBalanceCalls = treasuryAddresses.map((treasuryAddress: string, i: number) => ({\n address: bills?.[i]?.earnToken?.address?.[chainId as ChainId] ?? '',\n name: 'balanceOf',\n params: [treasuryAddress],\n }))\n const treasuryBalances = await multicall(chainId, ERC20ABI, treasuryBalanceCalls)\n const updatedVals = vals.reduce((acc: any, val: any, index: number) => {\n acc.push(val)\n if ((index + 1) % appendIndex === 0) {\n const pos = (index + 1) / appendIndex\n acc.push(treasuryBalances[pos - 1])\n }\n return acc\n }, [])\n\n //\n const chunkSize = updatedVals?.length / bills?.length\n const chunkedBills = chunk(updatedVals, chunkSize)\n\n return await cleanBillsData(billIds, chunkedBills, chainId, bills, tokenPrices, priceApiUrl)\n }\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'getBondsData', e },\n })\n return []\n }\n}\n\nconst cleanBillsData = async (\n billIds: number[],\n chunkedBills: any[],\n chainId: ChainId,\n bills: BillsConfig[],\n tokenPrices?: TokenPrices[],\n priceApiUrl?: string,\n): Promise<BondsData[]> => {\n const data: BondsData[] = await Promise.all(\n chunkedBills?.map(async (chunk, index) => {\n const bill = bills?.find((bill) => bill?.index === billIds[index]) as BillsConfig\n\n let lpPrice = tokenPrices?.find(\n (tokenPrice) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bill?.lpToken?.address?.[bill?.chainId]?.toLowerCase() &&\n tokenPrice?.chainId === chainId,\n )?.price\n\n if (lpPrice === undefined) {\n try {\n // Missing token price, therefor make a single call to api to fetch it\n const res = await axios.get(\n `${priceApiUrl}/realtime/price?token=${bill?.lpToken?.address?.[bill?.chainId]}&chain=${bill?.chainId}`,\n )\n console.log('Individual call for: ', bill.lpToken.symbol, '. Price: ', res.data.price)\n lpPrice = parseFloat(res.data.price ?? '0')\n } catch {\n lpPrice = 0\n }\n }\n\n let earnTokenPrice = tokenPrices?.find(\n (tokenPrice) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bill?.earnToken?.address?.[bill?.chainId]?.toLowerCase() &&\n tokenPrice?.chainId === chainId,\n )?.price\n\n if (earnTokenPrice === undefined) {\n try {\n // Missing token price, therefor make a single call to api to fetch it\n const res = await axios.get(\n `${priceApiUrl}/realtime/price?token=${bill?.earnToken?.address?.[bill?.chainId]}&chain=${bill?.chainId}`,\n )\n console.log('Individual call for: ', bill.earnToken.symbol, '. Price: ', res.data.price)\n earnTokenPrice = parseFloat(res.data.price ?? '0')\n } catch {\n earnTokenPrice = 0\n }\n }\n\n const [\n trueBillPriceFromChunk,\n totalPayoutGiven,\n terms,\n maxTotalPayout,\n fee,\n feeInPrincipal,\n paused,\n ,\n customTreasuryBalance,\n bondPricing,\n bondTerms,\n ] = chunk\n let trueBillPrice = trueBillPriceFromChunk\n\n const feeInPayout = Number(fee / 10000)\n const [, vestingTerm, , maxPayout] = terms\n const tokensRemaining = new BigNumber(maxTotalPayout ?? '0')\n .minus(new BigNumber(totalPayoutGiven))\n .div(new BigNumber(10).pow(bill?.earnToken.decimals[bill?.chainId] ?? 18))\n .toNumber()\n const treasuryBalance = getBalanceNumber(customTreasuryBalance, bill?.earnToken?.decimals?.[bill?.chainId] ?? 18)\n\n if (chainId === ChainId.SOL) {\n const principalDecimals = bill?.lpToken.decimals[ChainId.SOL] as number\n const payoutDecimals = bill?.earnToken.decimals[ChainId.SOL] as number\n const timeStamp = Math.floor(Date.now() / 1000)\n trueBillPrice = calculateTrueBondPrice(\n bondPricing,\n bondTerms,\n timeStamp,\n principalDecimals,\n payoutDecimals,\n feeInPrincipal,\n )\n }\n\n let trueBondPrices: TrueBondPrices[] = []\n if (bill?.billVersion === BillVersion.V4) {\n trueBondPrices = trueBillPrice[0].map((data: any) => {\n return {\n points: data[2].toString(),\n trueBondPrice: data[0].toString(),\n bonus: getRawBonus(data[0].toString(), lpPrice, earnTokenPrice),\n bonusWithFee: getBonusWithFee(feeInPayout, data[0].toString(), lpPrice, earnTokenPrice),\n }\n })\n } else {\n const bonus: number = getRawBonus(trueBillPrice, lpPrice, earnTokenPrice)\n const bonusWithFee = getBonusWithFee(feeInPayout, trueBillPrice, lpPrice, earnTokenPrice)\n trueBondPrices = [\n {\n points: '0',\n trueBondPrice: trueBillPrice.toString(),\n bonus,\n bonusWithFee,\n },\n ]\n }\n const cleanedData: BondsData = {\n ...bill,\n soldOut: paused[0] ? true : bill.soldOut,\n feeInPayout,\n feeInPrincipal,\n showcaseTokenName: bill?.showcaseToken?.symbol ?? bill?.earnToken.symbol ?? '',\n trueBondPrices,\n principalTokenPrice: lpPrice?.toString(),\n payoutTokenPrice: earnTokenPrice?.toString(),\n tokensRemaining: treasuryBalance\n ? Math.min(treasuryBalance, tokensRemaining).toString()\n : tokensRemaining.toString(),\n maxTotalPayout: maxTotalPayout?.toString(),\n maxPayout: maxPayout?.toString(),\n totalPayoutGiven: totalPayoutGiven?.toString(),\n vestingTerm: typeof vestingTerm === 'number' ? vestingTerm : vestingTerm.toNumber(),\n }\n return cleanedData\n }),\n )\n return data\n}\n\nexport const getBonusWithFee = (\n feeInPayout: number,\n trueBillPrice: string,\n lpPrice: number,\n earnTokenPrice: number,\n) => {\n const fee = feeInPayout ?? 0\n const reverseFee = new BigNumber(fee / 100 / (1 - fee / 100))\n const trueBondPrice = new BigNumber(trueBillPrice).plus(new BigNumber(trueBillPrice).times(reverseFee))\n const priceUSDMinusFee = getBalanceNumber(trueBondPrice) * lpPrice\n const discountWithoutFee = ((earnTokenPrice - priceUSDMinusFee) / earnTokenPrice) * 100\n return discountWithoutFee > 0 ? (discountWithoutFee / (100 - discountWithoutFee)) * 100 : 0\n}\n\nconst getRawBonus = (trueBillPrice: any, lpPrice: number, earnTokenPrice: number) => {\n const priceUsd = getBalanceNumber(trueBillPrice.toString()) * lpPrice\n const discount: number = ((earnTokenPrice - priceUsd) / earnTokenPrice) * 100\n return discount > 0 ? (discount / (100 - discount)) * 100 : 0\n}\n"],"names":["launchBondsABI_V2_4_1","BOND_2_4_0","ERC20ABI"],"mappings":"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"}
|
package/dist/utils/multicall.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Interface } from '@ethersproject/abi';
|
|
2
2
|
import multicallV2Abi from '../config/abi/multicallv2.json.js';
|
|
3
3
|
import { ethers } from 'ethers';
|
|
4
|
-
import chunk from 'lodash/chunk';
|
|
5
|
-
import flatten from 'lodash/flatten';
|
|
4
|
+
import chunk from 'lodash-es/chunk.js';
|
|
5
|
+
import flatten from 'lodash-es/flatten.js';
|
|
6
6
|
import { PUBLIC_RPC_URLS } from '../config/constants/networks.js';
|
|
7
7
|
import { MULTICALL_V2 } from '../config/constants/addresses.js';
|
|
8
8
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multicall.js","sources":["../../src/utils/multicall.ts"],"sourcesContent":["import { Interface } from '@ethersproject/abi'\nimport multicallV2Abi from '../config/abi/multicallv2.json'\nimport { ethers } from 'ethers'\nimport chunk from 'lodash/chunk'\nimport flatten from 'lodash/flatten'\nimport { PUBLIC_RPC_URLS } from '../config/constants/networks'\nimport { MULTICALL_V2 } from '../config/constants/addresses'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\nexport interface Call {\n address: string // Address of the contract\n name: string // Function name on the contract (exemple: balanceOf)\n params?: any[] // Function params\n}\n\n// This is the legacy multicall\n// Try to use multicall hooks\nconst multicall = async (chainId: number, abi: any[], calls: Call[], batch?: boolean, batchSize?: number) => {\n try {\n if (chainId === ChainId.SOL) {\n return\n }\n const multicallAddress = MULTICALL_V2[chainId]\n const provider = new ethers.providers.JsonRpcProvider(PUBLIC_RPC_URLS[chainId as ChainId]?.[0], chainId)\n const multi = new ethers.Contract(multicallAddress, multicallV2Abi, provider)\n const itf = new Interface(abi)\n const calldata = calls.map((call) => [call.address.toLowerCase(), itf.encodeFunctionData(call.name, call.params)])\n if (batch) {\n const chunkedCalls = chunk(calldata, batchSize)\n const chunkedCallNames = chunk(calls, batchSize)\n const chunkedData = chunkedCalls.flatMap(async (chunkedCallSet, i) => {\n const { returnData } = await multi.aggregate(chunkedCallSet)\n return returnData.map((call: any, j: number) => itf.decodeFunctionResult(chunkedCallNames[i][j].name, call))\n })\n const resolveCall = await Promise.all(chunkedData)\n const flattenCalls = flatten(resolveCall)\n return flattenCalls\n } else {\n const { returnData } = await multi.aggregate(calldata)\n return returnData.map((call: any, i: number) => itf.decodeFunctionResult(calls[i].name, call))\n }\n } catch (e) {\n console.error(e)\n console.error(chainId)\n console.error(calls)\n }\n}\n\nexport default multicall\n"],"names":[],"mappings":";;;;;;;;;AAeA;AACA;AACA,MAAM,SAAS,GAAG,OAAO,OAAe,EAAE,GAAU,EAAE,KAAa,EAAE,KAAe,EAAE,SAAkB,KAAI;AAC1G,IAAA,IAAI;AACF,QAAA,IAAI,OAAO,KAAK,OAAO,CAAC,GAAG,EAAE;YAC3B;QACF;AACA,QAAA,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,eAAe,CAAC,OAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AACxG,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,EAAE,QAAQ,CAAC;AAC7E,QAAA,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC;AAC9B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAClH,IAAI,KAAK,EAAE;YACT,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC/C,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;AAChD,YAAA,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,cAAc,EAAE,CAAC,KAAI;gBACnE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;AAC5D,gBAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,CAAS,KAAK,GAAG,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9G,YAAA,CAAC,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAClD,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;AACzC,YAAA,OAAO,YAAY;QACrB;aAAO;YACL,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,CAAS,KAAK,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChG;IACF;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAChB,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;AACtB,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IACtB;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"multicall.js","sources":["../../src/utils/multicall.ts"],"sourcesContent":["import { Interface } from '@ethersproject/abi'\nimport multicallV2Abi from '../config/abi/multicallv2.json'\nimport { ethers } from 'ethers'\nimport chunk from 'lodash-es/chunk.js'\nimport flatten from 'lodash-es/flatten.js'\nimport { PUBLIC_RPC_URLS } from '../config/constants/networks'\nimport { MULTICALL_V2 } from '../config/constants/addresses'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\nexport interface Call {\n address: string // Address of the contract\n name: string // Function name on the contract (exemple: balanceOf)\n params?: any[] // Function params\n}\n\n// This is the legacy multicall\n// Try to use multicall hooks\nconst multicall = async (chainId: number, abi: any[], calls: Call[], batch?: boolean, batchSize?: number) => {\n try {\n if (chainId === ChainId.SOL) {\n return\n }\n const multicallAddress = MULTICALL_V2[chainId]\n const provider = new ethers.providers.JsonRpcProvider(PUBLIC_RPC_URLS[chainId as ChainId]?.[0], chainId)\n const multi = new ethers.Contract(multicallAddress, multicallV2Abi, provider)\n const itf = new Interface(abi)\n const calldata = calls.map((call) => [call.address.toLowerCase(), itf.encodeFunctionData(call.name, call.params)])\n if (batch) {\n const chunkedCalls = chunk(calldata, batchSize)\n const chunkedCallNames = chunk(calls, batchSize)\n const chunkedData = chunkedCalls.flatMap(async (chunkedCallSet, i) => {\n const { returnData } = await multi.aggregate(chunkedCallSet)\n return returnData.map((call: any, j: number) => itf.decodeFunctionResult(chunkedCallNames[i][j].name, call))\n })\n const resolveCall = await Promise.all(chunkedData)\n const flattenCalls = flatten(resolveCall)\n return flattenCalls\n } else {\n const { returnData } = await multi.aggregate(calldata)\n return returnData.map((call: any, i: number) => itf.decodeFunctionResult(calls[i].name, call))\n }\n } catch (e) {\n console.error(e)\n console.error(chainId)\n console.error(calls)\n }\n}\n\nexport default multicall\n"],"names":[],"mappings":";;;;;;;;;AAeA;AACA;AACA,MAAM,SAAS,GAAG,OAAO,OAAe,EAAE,GAAU,EAAE,KAAa,EAAE,KAAe,EAAE,SAAkB,KAAI;AAC1G,IAAA,IAAI;AACF,QAAA,IAAI,OAAO,KAAK,OAAO,CAAC,GAAG,EAAE;YAC3B;QACF;AACA,QAAA,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,eAAe,CAAC,OAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AACxG,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,EAAE,QAAQ,CAAC;AAC7E,QAAA,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC;AAC9B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAClH,IAAI,KAAK,EAAE;YACT,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC/C,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;AAChD,YAAA,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,cAAc,EAAE,CAAC,KAAI;gBACnE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;AAC5D,gBAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,CAAS,KAAK,GAAG,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9G,YAAA,CAAC,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAClD,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;AACzC,YAAA,OAAO,YAAY;QACrB;aAAO;YACL,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,CAAS,KAAK,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChG;IACF;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAChB,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;AACtB,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IACtB;AACF;;;;"}
|
|
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'theme-ui/jsx-runtime';
|
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import { stripDate } from './utils.js';
|
|
4
4
|
import { chartOptions, options } from './types.js';
|
|
5
|
-
import { Knob } from 'primereact/knob';
|
|
5
|
+
import { Knob } from 'primereact/knob/knob.esm.js';
|
|
6
6
|
import { Chart, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend } from 'chart.js';
|
|
7
7
|
import { Line } from 'react-chartjs-2';
|
|
8
8
|
import BigNumber from 'bignumber.js';
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Ape Bond SDK",
|
|
4
4
|
"author": "Ape Bond",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "5.1.1-test.
|
|
6
|
+
"version": "5.1.1-test.4",
|
|
7
7
|
"module": "dist/main.js",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"types": "dist/main.d.ts",
|
|
@@ -95,6 +95,9 @@
|
|
|
95
95
|
]
|
|
96
96
|
},
|
|
97
97
|
"peerDependencies": {
|
|
98
|
+
"@bigmi/react": "^0.6.5",
|
|
99
|
+
"@lifi/widget": "^3.40.6",
|
|
100
|
+
"@mysten/dapp-kit": "^0.19.11",
|
|
98
101
|
"@rainbow-me/rainbowkit": "^2.1.7",
|
|
99
102
|
"@solana/kit": "2.3.0",
|
|
100
103
|
"@solana/spl-token": "^0.4.14",
|
|
@@ -105,10 +108,7 @@
|
|
|
105
108
|
"axios": "^1.8.2",
|
|
106
109
|
"react": ">=17 <19",
|
|
107
110
|
"react-dom": ">=17 <19",
|
|
108
|
-
"wagmi": "^2.14.16"
|
|
109
|
-
"@lifi/widget": "^3.40.6",
|
|
110
|
-
"@bigmi/react": "^0.6.5",
|
|
111
|
-
"@mysten/dapp-kit": "^0.19.11"
|
|
111
|
+
"wagmi": "^2.14.16"
|
|
112
112
|
},
|
|
113
113
|
"devDependencies": {
|
|
114
114
|
"@eslint/js": "^9.28.0",
|
|
@@ -123,6 +123,7 @@
|
|
|
123
123
|
"@tanstack/react-query-devtools": "5.90.2",
|
|
124
124
|
"@types/dom-to-image": "^2.6.7",
|
|
125
125
|
"@types/lodash": "^4.17.6",
|
|
126
|
+
"@types/lodash-es": "^4.17.12",
|
|
126
127
|
"@types/node": "^24.0.13",
|
|
127
128
|
"@types/react": "^18.3.3",
|
|
128
129
|
"@types/react-dom": "^18.3.0",
|
|
@@ -155,7 +156,7 @@
|
|
|
155
156
|
"dom-to-image": "2.6.0",
|
|
156
157
|
"framer-motion": "11.18.2",
|
|
157
158
|
"lightweight-charts": "4.2.3",
|
|
158
|
-
"lodash": "4.17.23",
|
|
159
|
+
"lodash-es": "4.17.23",
|
|
159
160
|
"primereact": "10.9.7",
|
|
160
161
|
"react-chartjs-2": "5.3.0",
|
|
161
162
|
"swiper": "11.2.10",
|