@ape.swap/bonds-sdk 6.0.5 → 6.0.7
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/components/uikit-sdk/Svg/Icons/ShortSupply.js +0 -1
- package/dist/components/uikit-sdk/Svg/Icons/ShortSupply.js.map +1 -1
- package/dist/config/constants/variables.d.ts +1 -0
- package/dist/config/constants/variables.js +2 -1
- package/dist/config/constants/variables.js.map +1 -1
- package/dist/state/bonds/fetchBondsData/cleanBillsData.d.ts +4 -0
- package/dist/state/bonds/fetchBondsData/cleanBillsData.js +139 -0
- package/dist/state/bonds/fetchBondsData/cleanBillsData.js.map +1 -0
- package/dist/state/bonds/{fetchBondsDataAptos.d.ts → fetchBondsData/fetchBondsDataAptos.d.ts} +3 -3
- package/dist/state/bonds/{fetchBondsDataAptos.js → fetchBondsData/fetchBondsDataAptos.js} +6 -5
- package/dist/state/bonds/fetchBondsData/fetchBondsDataAptos.js.map +1 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.d.ts +3 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.js +90 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.js.map +1 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataPreTGE.d.ts +4 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataPreTGE.js +109 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataPreTGE.js.map +1 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.d.ts +3 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.js +69 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.js.map +1 -0
- package/dist/state/bonds/{fetchBondsDataSui.d.ts → fetchBondsData/fetchBondsDataSui.d.ts} +3 -3
- package/dist/state/bonds/{fetchBondsDataSui.js → fetchBondsData/fetchBondsDataSui.js} +3 -3
- package/dist/state/bonds/fetchBondsData/fetchBondsDataSui.js.map +1 -0
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsAptos.d.ts +4 -0
- package/dist/state/bonds/{fetchBillsUserAptos.js → fetchUsersBonds/fetchUsersBondsAptos.js} +10 -9
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsAptos.js.map +1 -0
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.d.ts +5 -0
- package/dist/state/bonds/{fetchBillsUser.js → fetchUsersBonds/fetchUsersBondsEVM.js} +5 -5
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.js.map +1 -0
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.d.ts +4 -0
- package/dist/state/bonds/{fetchBillsUserSolana.js → fetchUsersBonds/fetchUsersBondsSOL.js} +9 -8
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.js.map +1 -0
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSUI.d.ts +4 -0
- package/dist/state/bonds/{fetchBillsUserSui.js → fetchUsersBonds/fetchUsersBondsSUI.js} +10 -9
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSUI.js.map +1 -0
- package/dist/state/bonds/useBondsData.js +20 -15
- package/dist/state/bonds/useBondsData.js.map +1 -1
- package/dist/state/bonds/useUserBonds.js +20 -21
- package/dist/state/bonds/useUserBonds.js.map +1 -1
- package/dist/state/tokenPrices/useTokenPrices.d.ts +1 -1
- package/dist/state/tokenPrices/useTokenPrices.js +4 -4
- package/dist/state/tokenPrices/useTokenPrices.js.map +1 -1
- package/dist/state/useSDKConfig.d.ts +1 -1
- package/dist/state/useSDKConfig.js +0 -2
- package/dist/state/useSDKConfig.js.map +1 -1
- package/dist/styles.css +1 -0
- package/dist/views/YourBonds/components/YourBondsMenu/YourBondsMenu.js +1 -1
- package/dist/views/YourBonds/components/YourBondsMenu/YourBondsMenu.js.map +1 -1
- package/package.json +1 -1
- package/dist/state/bonds/discoverSuiBonds.d.ts +0 -6
- package/dist/state/bonds/fetchBillsUser.d.ts +0 -5
- package/dist/state/bonds/fetchBillsUser.js.map +0 -1
- package/dist/state/bonds/fetchBillsUserAptos.d.ts +0 -4
- package/dist/state/bonds/fetchBillsUserAptos.js.map +0 -1
- package/dist/state/bonds/fetchBillsUserSolana.d.ts +0 -4
- package/dist/state/bonds/fetchBillsUserSolana.js.map +0 -1
- package/dist/state/bonds/fetchBillsUserSui.d.ts +0 -4
- package/dist/state/bonds/fetchBillsUserSui.js.map +0 -1
- package/dist/state/bonds/fetchBondsDataAptos.js.map +0 -1
- package/dist/state/bonds/fetchBondsDataSui.js.map +0 -1
- package/dist/state/bonds/utils.d.ts +0 -6
- package/dist/state/bonds/utils.js +0 -384
- package/dist/state/bonds/utils.js.map +0 -1
- /package/dist/state/bonds/{getBillNftData.d.ts → fetchUsersBonds/getBillNftData.d.ts} +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'theme-ui/jsx-runtime';
|
|
2
2
|
|
|
3
3
|
const ShortSupply = ({ color = '#FCA384', width }) => {
|
|
4
|
-
console.log('asd!');
|
|
5
4
|
return (jsx("svg", { width: width || '19', height: width || '19', viewBox: "0 0 19 11", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M8.84452 0H9.24806L9.25514 0.000937879C9.3675 0.0152278 9.58589 0.0142304 9.71451 0.0234738C10.0504 0.0467924 10.3846 0.0889613 10.7157 0.149782C12.8006 0.534942 14.5692 1.6663 15.8757 3.33039C16.9772 4.73318 17.7527 6.4995 17.9577 8.27854C17.9935 8.63219 18.0159 9.00236 17.9863 9.35703C17.9715 9.53306 17.8323 9.87198 17.6886 9.97431C17.3251 10.2333 16.8271 10.1913 16.3984 10.1939L15.1321 10.197L10.972 10.2144L10.0997 10.2156C10.0449 10.2157 9.78061 10.2133 9.74156 10.221H1.06075C1.01539 10.2118 0.91833 10.2102 0.870703 10.2073C0.448318 10.181 0.0817454 9.98548 0.0184578 9.53153C0.00963163 9.46824 0.00729026 9.40284 0 9.33892V9.0231C0.00581431 8.99235 0.00690649 8.90775 0.00842751 8.87355C0.0122721 8.7797 0.0176132 8.68584 0.0244488 8.59212C0.0456951 8.31235 0.0796731 8.03367 0.126277 7.7569C0.401197 6.10711 1.07857 4.47226 2.11625 3.15633C3.43637 1.48223 5.2216 0.479963 7.31769 0.137084C7.64716 0.0837073 7.97899 0.046118 8.31197 0.0244458C8.41699 0.0179982 8.52207 0.013006 8.62721 0.00947067C8.68687 0.0076344 8.78174 0.00789184 8.83814 0.000858906L8.84452 0ZM10.6901 8.52487C10.944 8.3484 11.1373 7.98626 11.1919 7.68416C11.2584 7.31775 11.1766 6.93999 10.9646 6.63393C10.7533 6.33053 10.4302 6.12352 10.0662 6.05847C9.95109 6.03803 9.74444 6.02414 9.62998 6.04687C9.47328 6.07798 9.45739 6.07499 9.29279 6.06036L4.93606 5.67937L3.74433 5.57531C3.65862 5.56802 3.32899 5.53347 3.26352 5.53975C2.98302 5.59685 2.90602 5.94018 3.14158 6.09598C3.23922 6.16056 3.44382 6.22446 3.55742 6.2718L4.70304 6.74348L8.77676 8.41297C8.87291 8.4522 8.90775 8.50063 8.98794 8.55945C9.10617 8.64565 9.23696 8.71302 9.37573 8.75922C9.61741 8.83942 9.87638 8.85224 10.1248 8.79648C10.3037 8.75666 10.473 8.68195 10.6229 8.57649C10.6368 8.56654 10.6804 8.53559 10.6901 8.52487Z", fill: color }) }));
|
|
6
5
|
};
|
|
7
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShortSupply.js","sources":["../../../../../src/components/uikit-sdk/Svg/Icons/ShortSupply.tsx"],"sourcesContent":["import React from 'react'\nimport { SvgProps } from './types'\n\nconst ShortSupply: React.FC<SvgProps> = ({ color = '#FCA384', width }) => {\n
|
|
1
|
+
{"version":3,"file":"ShortSupply.js","sources":["../../../../../src/components/uikit-sdk/Svg/Icons/ShortSupply.tsx"],"sourcesContent":["import React from 'react'\nimport { SvgProps } from './types'\n\nconst ShortSupply: React.FC<SvgProps> = ({ color = '#FCA384', width }) => {\n return (\n <svg width={width || '19'} height={width || '19'} viewBox=\"0 0 19 11\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.84452 0H9.24806L9.25514 0.000937879C9.3675 0.0152278 9.58589 0.0142304 9.71451 0.0234738C10.0504 0.0467924 10.3846 0.0889613 10.7157 0.149782C12.8006 0.534942 14.5692 1.6663 15.8757 3.33039C16.9772 4.73318 17.7527 6.4995 17.9577 8.27854C17.9935 8.63219 18.0159 9.00236 17.9863 9.35703C17.9715 9.53306 17.8323 9.87198 17.6886 9.97431C17.3251 10.2333 16.8271 10.1913 16.3984 10.1939L15.1321 10.197L10.972 10.2144L10.0997 10.2156C10.0449 10.2157 9.78061 10.2133 9.74156 10.221H1.06075C1.01539 10.2118 0.91833 10.2102 0.870703 10.2073C0.448318 10.181 0.0817454 9.98548 0.0184578 9.53153C0.00963163 9.46824 0.00729026 9.40284 0 9.33892V9.0231C0.00581431 8.99235 0.00690649 8.90775 0.00842751 8.87355C0.0122721 8.7797 0.0176132 8.68584 0.0244488 8.59212C0.0456951 8.31235 0.0796731 8.03367 0.126277 7.7569C0.401197 6.10711 1.07857 4.47226 2.11625 3.15633C3.43637 1.48223 5.2216 0.479963 7.31769 0.137084C7.64716 0.0837073 7.97899 0.046118 8.31197 0.0244458C8.41699 0.0179982 8.52207 0.013006 8.62721 0.00947067C8.68687 0.0076344 8.78174 0.00789184 8.83814 0.000858906L8.84452 0ZM10.6901 8.52487C10.944 8.3484 11.1373 7.98626 11.1919 7.68416C11.2584 7.31775 11.1766 6.93999 10.9646 6.63393C10.7533 6.33053 10.4302 6.12352 10.0662 6.05847C9.95109 6.03803 9.74444 6.02414 9.62998 6.04687C9.47328 6.07798 9.45739 6.07499 9.29279 6.06036L4.93606 5.67937L3.74433 5.57531C3.65862 5.56802 3.32899 5.53347 3.26352 5.53975C2.98302 5.59685 2.90602 5.94018 3.14158 6.09598C3.23922 6.16056 3.44382 6.22446 3.55742 6.2718L4.70304 6.74348L8.77676 8.41297C8.87291 8.4522 8.90775 8.50063 8.98794 8.55945C9.10617 8.64565 9.23696 8.71302 9.37573 8.75922C9.61741 8.83942 9.87638 8.85224 10.1248 8.79648C10.3037 8.75666 10.473 8.68195 10.6229 8.57649C10.6368 8.56654 10.6804 8.53559 10.6901 8.52487Z\"\n fill={color}\n />\n </svg>\n )\n}\n\nexport default ShortSupply\n"],"names":["_jsx"],"mappings":";;AAGA,MAAM,WAAW,GAAuB,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,KAAI;AACvE,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,4BAA4B,EAAA,QAAA,EACtGA,cACE,CAAC,EAAC,ivDAAivD,EACnvD,IAAI,EAAE,KAAK,EAAA,CACX,EAAA,CACE;AAEV;;;;"}
|
|
@@ -5,5 +5,6 @@ export declare const zapSupported: readonly [ChainId.MAINNET, ChainId.MATIC, Cha
|
|
|
5
5
|
export type ZapSupportedChainId = (typeof zapSupported)[number];
|
|
6
6
|
export declare const STRAPI_URL = "https://strapi-api.ape.bond";
|
|
7
7
|
export declare const SOUL_ZAP_API = "https://zap-api.ape.bond/zap";
|
|
8
|
+
export declare const PRICE_API_URL = "https://price-api.ape.bond";
|
|
8
9
|
export declare const APEBOND = "https://ape.bond";
|
|
9
10
|
export declare const tierOptimizerUIEnabled = true;
|
|
@@ -37,8 +37,9 @@ const zapSupported = [
|
|
|
37
37
|
];
|
|
38
38
|
const STRAPI_URL = `https://strapi-api.ape.bond`;
|
|
39
39
|
const SOUL_ZAP_API = `https://zap-api.ape.bond/zap`;
|
|
40
|
+
const PRICE_API_URL = `https://price-api.ape.bond`;
|
|
40
41
|
const APEBOND = `https://ape.bond`;
|
|
41
42
|
const tierOptimizerUIEnabled = true;
|
|
42
43
|
|
|
43
|
-
export { APEBOND, LifiSupported, SOUL_ZAP_API, STRAPI_URL, tierOptimizerUIEnabled, zapSupported };
|
|
44
|
+
export { APEBOND, LifiSupported, PRICE_API_URL, SOUL_ZAP_API, STRAPI_URL, tierOptimizerUIEnabled, zapSupported };
|
|
44
45
|
//# sourceMappingURL=variables.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables.js","sources":["../../../src/config/constants/variables.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\n\nexport const LifiSupported = [\n ChainId.BASE,\n ChainId.MAINNET,\n ChainId.MATIC,\n ChainId.BSC,\n ChainId.ARBITRUM,\n ChainId.LINEA,\n ChainId.AVAX,\n ChainId.BLAST,\n ChainId.SONIC,\n ChainId.BERACHAIN,\n ChainId.UNICHAIN,\n ChainId.MONAD,\n ChainId.KATANA,\n ChainId.SOL,\n ChainId.HYPEREVM,\n]\n\nexport const zapSupported = [\n ChainId.MAINNET,\n ChainId.MATIC,\n ChainId.BSC,\n ChainId.ARBITRUM,\n ChainId.LINEA,\n ChainId.BASE,\n ChainId.AVAX,\n ChainId.BLAST,\n ChainId.SONIC,\n ChainId.BERACHAIN,\n // ChainId.UNICHAIN, not working atm\n ChainId.KATANA,\n ChainId.SOL,\n ChainId.HYPEREVM,\n ChainId.APTOS,\n ChainId.SUI,\n] as const\n\n/** Union of all chain IDs where zap is supported. Derived from `zapSupported`. */\nexport type ZapSupportedChainId = (typeof zapSupported)[number]\n\nexport const STRAPI_URL = `https://strapi-api.ape.bond`\nexport const SOUL_ZAP_API = `https://zap-api.ape.bond/zap`\nexport const APEBOND = `https://ape.bond`\n\nexport const tierOptimizerUIEnabled = true\n"],"names":[],"mappings":";;AAEO,MAAM,aAAa,GAAG;AAC3B,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,OAAO;AACf,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,SAAS;AACjB,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,MAAM;AACd,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;;AAGX,MAAM,YAAY,GAAG;AAC1B,IAAA,OAAO,CAAC,OAAO;AACf,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,SAAS;;AAEjB,IAAA,OAAO,CAAC,MAAM;AACd,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;;AAMN,MAAM,UAAU,GAAG;AACnB,MAAM,YAAY,GAAG;AACrB,MAAM,OAAO,GAAG;AAEhB,MAAM,sBAAsB,GAAG;;;;"}
|
|
1
|
+
{"version":3,"file":"variables.js","sources":["../../../src/config/constants/variables.ts"],"sourcesContent":["import { ChainId } from '@ape.swap/apeswap-lists'\n\nexport const LifiSupported = [\n ChainId.BASE,\n ChainId.MAINNET,\n ChainId.MATIC,\n ChainId.BSC,\n ChainId.ARBITRUM,\n ChainId.LINEA,\n ChainId.AVAX,\n ChainId.BLAST,\n ChainId.SONIC,\n ChainId.BERACHAIN,\n ChainId.UNICHAIN,\n ChainId.MONAD,\n ChainId.KATANA,\n ChainId.SOL,\n ChainId.HYPEREVM,\n]\n\nexport const zapSupported = [\n ChainId.MAINNET,\n ChainId.MATIC,\n ChainId.BSC,\n ChainId.ARBITRUM,\n ChainId.LINEA,\n ChainId.BASE,\n ChainId.AVAX,\n ChainId.BLAST,\n ChainId.SONIC,\n ChainId.BERACHAIN,\n // ChainId.UNICHAIN, not working atm\n ChainId.KATANA,\n ChainId.SOL,\n ChainId.HYPEREVM,\n ChainId.APTOS,\n ChainId.SUI,\n] as const\n\n/** Union of all chain IDs where zap is supported. Derived from `zapSupported`. */\nexport type ZapSupportedChainId = (typeof zapSupported)[number]\n\nexport const STRAPI_URL = `https://strapi-api.ape.bond`\nexport const SOUL_ZAP_API = `https://zap-api.ape.bond/zap`\nexport const PRICE_API_URL = `https://price-api.ape.bond`\nexport const APEBOND = `https://ape.bond`\n\nexport const tierOptimizerUIEnabled = true\n"],"names":[],"mappings":";;AAEO,MAAM,aAAa,GAAG;AAC3B,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,OAAO;AACf,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,SAAS;AACjB,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,MAAM;AACd,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;;AAGX,MAAM,YAAY,GAAG;AAC1B,IAAA,OAAO,CAAC,OAAO;AACf,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,IAAI;AACZ,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,SAAS;;AAEjB,IAAA,OAAO,CAAC,MAAM;AACd,IAAA,OAAO,CAAC,GAAG;AACX,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,KAAK;AACb,IAAA,OAAO,CAAC,GAAG;;AAMN,MAAM,UAAU,GAAG;AACnB,MAAM,YAAY,GAAG;AACrB,MAAM,aAAa,GAAG;AACtB,MAAM,OAAO,GAAG;AAEhB,MAAM,sBAAsB,GAAG;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists';
|
|
2
|
+
import { TokenPrices } from '../../tokenPrices/useTokenPrices';
|
|
3
|
+
import { BondsData } from '../../../types/bonds';
|
|
4
|
+
export declare const cleanBillsData: (billIds: number[], chunkedBills: any[], chainId: ChainId, bills: BillsConfig[], tokenPrices?: TokenPrices[]) => Promise<BondsData[]>;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { ChainId, BillVersion } from '@ape.swap/apeswap-lists';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { getBalanceNumber } from '../../../utils/getBalanceNumber.js';
|
|
4
|
+
import { calculateTrueBondPrice } from '../../../utils/calculateSolanaTrueBillPrice.js';
|
|
5
|
+
import { TIER_MAPPING } from '../../tiers/useTierPoints.js';
|
|
6
|
+
import BigNumber from 'bignumber.js';
|
|
7
|
+
import { PRICE_API_URL } from '../../../config/constants/variables.js';
|
|
8
|
+
|
|
9
|
+
const cleanBillsData = async (billIds, chunkedBills, chainId, bills, tokenPrices) => {
|
|
10
|
+
const data = await Promise.all(chunkedBills?.map(async (chunk, index) => {
|
|
11
|
+
const bill = bills?.find((bill) => bill?.index === billIds[index]);
|
|
12
|
+
let principalTokenPrice = tokenPrices?.find((tokenPrice) => tokenPrice?.tokenAddress?.toLowerCase() === bill?.lpToken?.address?.[bill?.chainId]?.toLowerCase() &&
|
|
13
|
+
tokenPrice?.chainId === chainId);
|
|
14
|
+
if (principalTokenPrice === undefined || !!principalTokenPrice.error) {
|
|
15
|
+
try {
|
|
16
|
+
// Missing token price, therefor make a single call to api to fetch it
|
|
17
|
+
const res = await axios.get(`${PRICE_API_URL}/realtime/price?token=${bill?.lpToken?.address?.[bill?.chainId]}&chain=${bill?.chainId}`);
|
|
18
|
+
console.log('Individual call for: ', bill.lpToken.symbol, '. Price: ', res.data.price);
|
|
19
|
+
principalTokenPrice = res.data;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
console.error('Failed to fetch price for: ', bill.lpToken.symbol);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
let payoutTokenPrice = tokenPrices?.find((tokenPrice) => tokenPrice?.tokenAddress?.toLowerCase() === bill?.earnToken?.address?.[bill?.chainId]?.toLowerCase() &&
|
|
26
|
+
tokenPrice?.chainId === chainId);
|
|
27
|
+
if (payoutTokenPrice === undefined || !!payoutTokenPrice.error) {
|
|
28
|
+
try {
|
|
29
|
+
// Missing token price, therefor make a single call to api to fetch it
|
|
30
|
+
const res = await axios.get(`${PRICE_API_URL}/realtime/price?token=${bill?.earnToken?.address?.[bill?.chainId]}&chain=${bill?.chainId}`);
|
|
31
|
+
console.log('Individual call for: ', bill.earnToken.symbol, '. Price: ', res.data.price);
|
|
32
|
+
payoutTokenPrice = res.data;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
console.error('Failed to fetch price for: ', bill.earnToken.symbol);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const lpPrice = principalTokenPrice?.price ?? 0;
|
|
39
|
+
const earnTokenPrice = payoutTokenPrice?.price ?? 0;
|
|
40
|
+
const [trueBillPriceFromChunk, totalPayoutGiven, terms, maxTotalPayout, feeInPayoutRaw, feeInPrincipalRaw, paused, , customTreasuryBalance, bondPricing, bondTerms,] = chunk;
|
|
41
|
+
let trueBillPrice = trueBillPriceFromChunk;
|
|
42
|
+
const feeInPayout = Number(feeInPayoutRaw / 10000);
|
|
43
|
+
const feeInPrincipal = Number(feeInPrincipalRaw / 10000);
|
|
44
|
+
const tierBoostRate = bill.tierBoostRate === undefined ? 1 : bill.tierBoostRate;
|
|
45
|
+
const [, vestingTerm, , maxPayout] = terms;
|
|
46
|
+
const tokensRemaining = new BigNumber(maxTotalPayout ?? '0')
|
|
47
|
+
.minus(new BigNumber(totalPayoutGiven))
|
|
48
|
+
.div(new BigNumber(10).pow(bill?.earnToken.decimals[bill?.chainId] ?? 18))
|
|
49
|
+
.toNumber();
|
|
50
|
+
const treasuryBalance = getBalanceNumber(customTreasuryBalance, bill?.earnToken?.decimals?.[bill?.chainId] ?? 18);
|
|
51
|
+
if (chainId === ChainId.SOL) {
|
|
52
|
+
const principalDecimals = bill?.lpToken.decimals[ChainId.SOL];
|
|
53
|
+
const payoutDecimals = bill?.earnToken.decimals[ChainId.SOL];
|
|
54
|
+
const timeStamp = Math.floor(Date.now() / 1000);
|
|
55
|
+
trueBillPrice = calculateTrueBondPrice(bondPricing, bondTerms, timeStamp, principalDecimals, payoutDecimals, feeInPrincipal);
|
|
56
|
+
}
|
|
57
|
+
let trueBondPrices = [];
|
|
58
|
+
if (bill?.billVersion === BillVersion.V4) {
|
|
59
|
+
trueBondPrices = trueBillPrice[0].map((data) => {
|
|
60
|
+
return {
|
|
61
|
+
points: data?.points?.toString(),
|
|
62
|
+
trueBondPrice: data?.trueBondPrice.toString(),
|
|
63
|
+
discount: getRawDiscount(data?.trueBondPrice.toString(), lpPrice, earnTokenPrice),
|
|
64
|
+
bonus: getRawBonus(data?.trueBondPrice.toString(), lpPrice, earnTokenPrice),
|
|
65
|
+
discountWithFee: getDiscountWithFee(feeInPayout, tierBoostRate, data?.trueBondPrice.toString(), lpPrice, earnTokenPrice),
|
|
66
|
+
bonusWithFee: getBonusWithFee(feeInPayout, tierBoostRate, data?.trueBondPrice.toString(), lpPrice, earnTokenPrice),
|
|
67
|
+
boost: TIER_MAPPING[data?.points?.toString()],
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const bonus = getRawBonus(trueBillPrice, lpPrice, earnTokenPrice);
|
|
73
|
+
const bonusWithFee = getBonusWithFee(feeInPayout, tierBoostRate, trueBillPrice, lpPrice, earnTokenPrice);
|
|
74
|
+
const discount = getRawDiscount(trueBillPrice, lpPrice, earnTokenPrice);
|
|
75
|
+
const discountWithFee = getDiscountWithFee(feeInPayout, tierBoostRate, trueBillPrice, lpPrice, earnTokenPrice);
|
|
76
|
+
trueBondPrices = [
|
|
77
|
+
{
|
|
78
|
+
points: '0',
|
|
79
|
+
boost: 0,
|
|
80
|
+
trueBondPrice: trueBillPrice.toString(),
|
|
81
|
+
bonus,
|
|
82
|
+
bonusWithFee,
|
|
83
|
+
discount,
|
|
84
|
+
discountWithFee,
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
const cleanedData = {
|
|
89
|
+
...bill,
|
|
90
|
+
soldOut: paused[0] ? true : bill.soldOut,
|
|
91
|
+
feeInPayout,
|
|
92
|
+
feeInPrincipal,
|
|
93
|
+
showcaseTokenName: bill?.showcaseToken?.symbol ?? bill?.earnToken.symbol ?? '',
|
|
94
|
+
trueBondPrices,
|
|
95
|
+
principalTokenPrice: lpPrice?.toString(),
|
|
96
|
+
payoutTokenPrice: earnTokenPrice?.toString(),
|
|
97
|
+
tokensRemaining: treasuryBalance
|
|
98
|
+
? Math.min(treasuryBalance, tokensRemaining).toString()
|
|
99
|
+
: tokensRemaining.toString(),
|
|
100
|
+
maxTotalPayout: maxTotalPayout?.toString(),
|
|
101
|
+
maxPayout: maxPayout?.toString(),
|
|
102
|
+
totalPayoutGiven: totalPayoutGiven?.toString(),
|
|
103
|
+
vestingTerm: typeof vestingTerm === 'number' ? vestingTerm : parseInt(vestingTerm),
|
|
104
|
+
tierBoostRate: bill.tierBoostRate === undefined ? 1 : bill.tierBoostRate,
|
|
105
|
+
};
|
|
106
|
+
return cleanedData;
|
|
107
|
+
}));
|
|
108
|
+
return data;
|
|
109
|
+
};
|
|
110
|
+
const getBonusWithFee = (feeInPayout, tierBoostRate, trueBillPrice, lpPrice, earnTokenPrice) => {
|
|
111
|
+
const fee = feeInPayout ?? 0;
|
|
112
|
+
const reverseFee = new BigNumber(fee / 100 / (1 - fee / 100));
|
|
113
|
+
const trueBondPrice = new BigNumber(trueBillPrice)
|
|
114
|
+
.times((100 + tierBoostRate) / 100)
|
|
115
|
+
.plus(new BigNumber(trueBillPrice).times(reverseFee));
|
|
116
|
+
const priceUSDMinusFee = getBalanceNumber(trueBondPrice) * lpPrice;
|
|
117
|
+
const bonusWithoutFee = ((earnTokenPrice - priceUSDMinusFee) / earnTokenPrice) * 100;
|
|
118
|
+
const validatedBonus = bonusWithoutFee > 0 ? (bonusWithoutFee / (100 - bonusWithoutFee)) * 100 : 0;
|
|
119
|
+
return validatedBonus;
|
|
120
|
+
};
|
|
121
|
+
const getRawBonus = (trueBillPrice, lpPrice, earnTokenPrice) => {
|
|
122
|
+
const priceUsd = getBalanceNumber(trueBillPrice.toString()) * lpPrice;
|
|
123
|
+
const discount = ((earnTokenPrice - priceUsd) / earnTokenPrice) * 100;
|
|
124
|
+
return discount > 0 ? (discount / (100 - discount)) * 100 : 0;
|
|
125
|
+
};
|
|
126
|
+
const getRawDiscount = (trueBillPrice, lpPrice, earnTokenPrice) => {
|
|
127
|
+
const trueBondPrice = getBalanceNumber(trueBillPrice.toString());
|
|
128
|
+
return ((earnTokenPrice - lpPrice * trueBondPrice) / earnTokenPrice) * 100;
|
|
129
|
+
};
|
|
130
|
+
const getDiscountWithFee = (feeInPayout, tierBoostRate, trueBillPrice, lpPrice, earnTokenPrice) => {
|
|
131
|
+
const trueBondPrice = getBalanceNumber(trueBillPrice.toString());
|
|
132
|
+
const trueBondPriceWithFee = trueBondPrice * (1 / ((100 - (feeInPayout ?? 0)) / 100));
|
|
133
|
+
const discount = ((earnTokenPrice - lpPrice * trueBondPriceWithFee) / earnTokenPrice) * 100;
|
|
134
|
+
const discountToReturn = 100 - ((100 - discount) / (100 - tierBoostRate)) * 100;
|
|
135
|
+
return discountToReturn;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export { cleanBillsData };
|
|
139
|
+
//# sourceMappingURL=cleanBillsData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanBillsData.js","sources":["../../../../src/state/bonds/fetchBondsData/cleanBillsData.ts"],"sourcesContent":["import { BillsConfig, BillVersion, ChainId } from '@ape.swap/apeswap-lists'\nimport { TokenPrices } from '../../tokenPrices/useTokenPrices'\nimport { BondsData, TrueBondPrices } from '../../../types/bonds'\nimport axios from 'axios'\nimport { getBalanceNumber } from '../../../utils/getBalanceNumber'\nimport { calculateTrueBondPrice } from '../../../utils/calculateSolanaTrueBillPrice'\nimport { TIER_MAPPING } from '../../tiers/useTierPoints'\nimport BigNumber from 'bignumber.js'\nimport { PRICE_API_URL } from '../../../config/constants/variables'\n\nexport const cleanBillsData = async (\n billIds: number[],\n chunkedBills: any[],\n chainId: ChainId,\n bills: BillsConfig[],\n tokenPrices?: TokenPrices[],\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 principalTokenPrice = tokenPrices?.find(\n (tokenPrice) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bill?.lpToken?.address?.[bill?.chainId]?.toLowerCase() &&\n tokenPrice?.chainId === chainId,\n )\n\n if (principalTokenPrice === undefined || !!principalTokenPrice.error) {\n try {\n // Missing token price, therefor make a single call to api to fetch it\n const res = await axios.get(\n `${PRICE_API_URL}/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 principalTokenPrice = res.data\n } catch {\n console.error('Failed to fetch price for: ', bill.lpToken.symbol)\n }\n }\n\n let payoutTokenPrice = tokenPrices?.find(\n (tokenPrice) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bill?.earnToken?.address?.[bill?.chainId]?.toLowerCase() &&\n tokenPrice?.chainId === chainId,\n )\n\n if (payoutTokenPrice === undefined || !!payoutTokenPrice.error) {\n try {\n // Missing token price, therefor make a single call to api to fetch it\n const res = await axios.get(\n `${PRICE_API_URL}/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 payoutTokenPrice = res.data\n } catch {\n console.error('Failed to fetch price for: ', bill.earnToken.symbol)\n }\n }\n const lpPrice = principalTokenPrice?.price ?? 0\n const earnTokenPrice = payoutTokenPrice?.price ?? 0\n\n const [\n trueBillPriceFromChunk,\n totalPayoutGiven,\n terms,\n maxTotalPayout,\n feeInPayoutRaw,\n feeInPrincipalRaw,\n paused,\n ,\n customTreasuryBalance,\n bondPricing,\n bondTerms,\n ] = chunk\n let trueBillPrice = trueBillPriceFromChunk\n\n const feeInPayout = Number(feeInPayoutRaw / 10000)\n const feeInPrincipal = Number(feeInPrincipalRaw / 10000)\n const tierBoostRate = bill.tierBoostRate === undefined ? 1 : bill.tierBoostRate\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?.points?.toString(),\n trueBondPrice: data?.trueBondPrice.toString(),\n discount: getRawDiscount(data?.trueBondPrice.toString(), lpPrice, earnTokenPrice),\n bonus: getRawBonus(data?.trueBondPrice.toString(), lpPrice, earnTokenPrice),\n discountWithFee: getDiscountWithFee(\n feeInPayout,\n tierBoostRate,\n data?.trueBondPrice.toString(),\n lpPrice,\n earnTokenPrice,\n ),\n bonusWithFee: getBonusWithFee(\n feeInPayout,\n tierBoostRate,\n data?.trueBondPrice.toString(),\n lpPrice,\n earnTokenPrice,\n ),\n boost: TIER_MAPPING[data?.points?.toString() as keyof typeof TIER_MAPPING],\n }\n })\n } else {\n const bonus = getRawBonus(trueBillPrice, lpPrice, earnTokenPrice)\n const bonusWithFee = getBonusWithFee(feeInPayout, tierBoostRate, trueBillPrice, lpPrice, earnTokenPrice)\n const discount = getRawDiscount(trueBillPrice, lpPrice, earnTokenPrice)\n const discountWithFee = getDiscountWithFee(feeInPayout, tierBoostRate, trueBillPrice, lpPrice, earnTokenPrice)\n trueBondPrices = [\n {\n points: '0',\n boost: 0,\n trueBondPrice: trueBillPrice.toString(),\n bonus,\n bonusWithFee,\n discount,\n discountWithFee,\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 : parseInt(vestingTerm),\n tierBoostRate: bill.tierBoostRate === undefined ? 1 : bill.tierBoostRate,\n }\n return cleanedData\n }),\n )\n return data\n}\n\nconst getBonusWithFee = (\n feeInPayout: number,\n tierBoostRate: 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)\n .times((100 + tierBoostRate) / 100)\n .plus(new BigNumber(trueBillPrice).times(reverseFee))\n const priceUSDMinusFee = getBalanceNumber(trueBondPrice) * lpPrice\n const bonusWithoutFee = ((earnTokenPrice - priceUSDMinusFee) / earnTokenPrice) * 100\n const validatedBonus = bonusWithoutFee > 0 ? (bonusWithoutFee / (100 - bonusWithoutFee)) * 100 : 0\n return validatedBonus\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\nconst getRawDiscount = (trueBillPrice: any, lpPrice: number, earnTokenPrice: number) => {\n const trueBondPrice = getBalanceNumber(trueBillPrice.toString())\n\n return ((earnTokenPrice - lpPrice * trueBondPrice) / earnTokenPrice) * 100\n}\n\nconst getDiscountWithFee = (\n feeInPayout: number,\n tierBoostRate: number,\n trueBillPrice: any,\n lpPrice: number,\n earnTokenPrice: number,\n) => {\n const trueBondPrice = getBalanceNumber(trueBillPrice.toString())\n const trueBondPriceWithFee = trueBondPrice * (1 / ((100 - (feeInPayout ?? 0)) / 100))\n const discount = ((earnTokenPrice - lpPrice * trueBondPriceWithFee) / earnTokenPrice) * 100\n const discountToReturn = 100 - ((100 - discount) / (100 - tierBoostRate)) * 100\n return discountToReturn\n}\n"],"names":[],"mappings":"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"}
|
package/dist/state/bonds/{fetchBondsDataAptos.d.ts → fetchBondsData/fetchBondsDataAptos.d.ts}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BillsConfig } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import { BondsData } from '
|
|
3
|
-
import { TokenPrices } from '
|
|
2
|
+
import { BondsData } from '../../../types/bonds';
|
|
3
|
+
import { TokenPrices } from '../../tokenPrices/useTokenPrices';
|
|
4
4
|
/**
|
|
5
5
|
* Enrich Aptos bond configs into full BondsData objects.
|
|
6
6
|
*
|
|
@@ -9,4 +9,4 @@ import { TokenPrices } from '../tokenPrices/useTokenPrices';
|
|
|
9
9
|
* scaled by PRICE_DECIMALS = 1e8; the SDK stores `trueBondPrice` scaled by
|
|
10
10
|
* 1e18 (legacy EVM format) → multiply by 1e10.
|
|
11
11
|
*/
|
|
12
|
-
export declare const
|
|
12
|
+
export declare const fetchBondsDataAptos: (aptosConfigs?: BillsConfig[], aptosPrices?: TokenPrices[]) => Promise<BondsData[]>;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import BigNumber from 'bignumber.js';
|
|
2
2
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
3
|
-
import { readAptosMarketInfo } from '
|
|
3
|
+
import { readAptosMarketInfo } from '../../../utils/aptosHelpers.js';
|
|
4
4
|
import axios from 'axios';
|
|
5
|
+
import { PRICE_API_URL } from '../../../config/constants/variables.js';
|
|
5
6
|
|
|
6
7
|
// =============================================================================
|
|
7
8
|
// Aptos bond enrichment — builds BondsData[] from BillsConfig[] + prices
|
|
@@ -19,7 +20,7 @@ const APTOS_KEY = ChainId.APTOS;
|
|
|
19
20
|
* scaled by PRICE_DECIMALS = 1e8; the SDK stores `trueBondPrice` scaled by
|
|
20
21
|
* 1e18 (legacy EVM format) → multiply by 1e10.
|
|
21
22
|
*/
|
|
22
|
-
const
|
|
23
|
+
const fetchBondsDataAptos = async (aptosConfigs, aptosPrices) => {
|
|
23
24
|
if (!aptosConfigs || aptosConfigs?.length === 0)
|
|
24
25
|
return [];
|
|
25
26
|
const enriched = await Promise.all(aptosConfigs.map(async (bond) => {
|
|
@@ -31,7 +32,7 @@ const enrichAptosBonds = async (aptosConfigs, aptosPrices, priceApiUrl) => {
|
|
|
31
32
|
let principalPrice = aptosPrices?.find((t) => t.tokenAddress.toLowerCase() === principalAddr)?.price;
|
|
32
33
|
if (principalPrice === undefined) {
|
|
33
34
|
try {
|
|
34
|
-
const res = await axios.get(`${
|
|
35
|
+
const res = await axios.get(`${PRICE_API_URL}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`);
|
|
35
36
|
principalPrice = res.data.price ?? 0;
|
|
36
37
|
}
|
|
37
38
|
catch {
|
|
@@ -42,7 +43,7 @@ const enrichAptosBonds = async (aptosConfigs, aptosPrices, priceApiUrl) => {
|
|
|
42
43
|
if (payoutPrice === undefined) {
|
|
43
44
|
try {
|
|
44
45
|
// Missing token price, therefor make a single call to api to fetch it
|
|
45
|
-
const res = await axios.get(`${
|
|
46
|
+
const res = await axios.get(`${PRICE_API_URL}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`);
|
|
46
47
|
payoutPrice = res.data.price ?? 0;
|
|
47
48
|
}
|
|
48
49
|
catch {
|
|
@@ -106,5 +107,5 @@ const enrichAptosBonds = async (aptosConfigs, aptosPrices, priceApiUrl) => {
|
|
|
106
107
|
return enriched.filter((b) => b !== null);
|
|
107
108
|
};
|
|
108
109
|
|
|
109
|
-
export {
|
|
110
|
+
export { fetchBondsDataAptos };
|
|
110
111
|
//# sourceMappingURL=fetchBondsDataAptos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchBondsDataAptos.js","sources":["../../../../src/state/bonds/fetchBondsData/fetchBondsDataAptos.ts"],"sourcesContent":["// =============================================================================\n// Aptos bond enrichment — builds BondsData[] from BillsConfig[] + prices\n// =============================================================================\n//\n// On-chain first: reads bond::market_info via view function for each config\n// and projects the tuple onto BondsData. No backend dependency (realtime-api\n// does not support Aptos).\n\nimport BigNumber from 'bignumber.js'\nimport { BillsConfig, ChainId } from '@ape.swap/apeswap-lists'\nimport { BondsData } from '../../../types/bonds'\nimport { TokenPrices } from '../../tokenPrices/useTokenPrices'\nimport { readAptosMarketInfo } from '../../../utils/aptosHelpers'\nimport axios from 'axios'\nimport { PRICE_API_URL } from '../../../config/constants/variables'\n\nconst APTOS_KEY = ChainId.APTOS\n\n/**\n * Enrich Aptos bond configs into full BondsData objects.\n *\n * Calls `bond::market_info(market)` for each config and projects the tuple\n * onto BondsData. Scale conversion: contract returns `true_bill_price` as u64\n * scaled by PRICE_DECIMALS = 1e8; the SDK stores `trueBondPrice` scaled by\n * 1e18 (legacy EVM format) → multiply by 1e10.\n */\nexport const fetchBondsDataAptos = async (\n aptosConfigs?: BillsConfig[],\n aptosPrices?: TokenPrices[],\n): Promise<BondsData[]> => {\n if (!aptosConfigs || aptosConfigs?.length === 0) return []\n\n const enriched = await Promise.all(\n aptosConfigs.map(async (bond): Promise<BondsData | null> => {\n const marketAddr = bond.contractAddress[APTOS_KEY]\n if (!marketAddr) return null\n try {\n // Firstly we fetch prices\n let principalPrice = aptosPrices?.find((t) => t.tokenAddress.toLowerCase() === principalAddr)?.price!\n if (principalPrice === undefined) {\n try {\n const res = await axios.get(\n `${PRICE_API_URL}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n principalPrice = res.data.price ?? 0\n } catch {\n principalPrice = 0\n }\n }\n\n let payoutPrice = aptosPrices?.find((t) => t.tokenAddress.toLowerCase() === payoutAddr)?.price!\n if (payoutPrice === undefined) {\n try {\n // Missing token price, therefor make a single call to api to fetch it\n const res = await axios.get(\n `${PRICE_API_URL}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n payoutPrice = res.data.price ?? 0\n } catch {\n payoutPrice = 0\n }\n }\n\n const info = await readAptosMarketInfo(marketAddr)\n const principalAddr = bond.lpToken.address[APTOS_KEY]?.toLowerCase()\n const payoutAddr = bond.earnToken.address[APTOS_KEY]?.toLowerCase()\n\n // Convert on-chain u64 (scaled 1e8) to the SDK's legacy 1e18 scale\n const trueBillPriceU64 = info[17]\n const trueBondPriceScaled = (BigInt(trueBillPriceU64) * 10n ** 10n).toString()\n const trueBondPriceHuman = Number(trueBillPriceU64) / 1e8\n\n // Same formula as getRawDiscount / getRawBonus in state/bonds/utils.ts\n const discount = payoutPrice > 0 ? ((payoutPrice - principalPrice * trueBondPriceHuman) / payoutPrice) * 100 : 0\n const bonus = discount > 0 && discount < 100 ? (discount / (100 - discount)) * 100 : 0\n\n // Fees: u64 in PERCENTAGE_BASE (1e6) → divide by 10_000 for human %\n const feeInPayout = Number(info[14]) / 10_000\n const feeInPrincipal = Number(info[13]) / 10_000\n const trueBondPriceWithFee =\n feeInPayout < 100 ? trueBondPriceHuman * (1 / ((100 - feeInPayout) / 100)) : trueBondPriceHuman\n const discountWithFee =\n payoutPrice > 0 ? ((payoutPrice - principalPrice * trueBondPriceWithFee) / payoutPrice) * 100 : 0\n const bonusWithFee =\n discountWithFee > 0 && discountWithFee < 100 ? (discountWithFee / (100 - discountWithFee)) * 100 : 0\n\n const payoutDecimals = bond.earnToken.decimals[APTOS_KEY] ?? 8\n const tokensRemaining = new BigNumber(info[23])\n .minus(new BigNumber(info[5]))\n .div(new BigNumber(10).pow(payoutDecimals))\n .toString()\n\n return {\n ...bond,\n soldOut: info[2] || info[3] ? true : bond.soldOut,\n maxTotalPayout: String(info[23]),\n totalPayoutGiven: String(info[5]),\n maxPayout: String(info[21]),\n tokensRemaining,\n showcaseTokenName: bond.earnToken.symbol,\n vestingTerm: Number(info[19]),\n feeInPayout,\n feeInPrincipal,\n trueBondPrices: [\n {\n trueBondPrice: trueBondPriceScaled,\n points: '0',\n discount,\n discountWithFee,\n bonus,\n bonusWithFee,\n boost: 0,\n },\n ],\n principalTokenPrice: principalPrice.toString(),\n payoutTokenPrice: payoutPrice.toString(),\n }\n } catch (e) {\n console.warn(`[Aptos] Failed to read market_info for ${marketAddr}`, e)\n // Hide the bond from the list when on-chain data is unavailable —\n // showing a card with all zeros is confusing for users.\n return null\n }\n }),\n )\n return enriched.filter((b): b is BondsData => b !== null)\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { BillsConfig } from '@ape.swap/apeswap-lists';
|
|
2
|
+
import { TokenPrices } from '../../tokenPrices/useTokenPrices';
|
|
3
|
+
export declare const fetchBondsDataEVM: (chainId: number, bills: BillsConfig[], apiUrl: string, tokenPrices?: TokenPrices[]) => Promise<import("../../../types/bonds").BondsData[]>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { BillVersion } from '@ape.swap/apeswap-lists';
|
|
2
|
+
import multicall from '../../../utils/multicall.js';
|
|
3
|
+
import BOND_ABI from '../../../config/abi/BOND_2_4_0.json.js';
|
|
4
|
+
import erc20ABI from '../../../config/abi/erc20.json.js';
|
|
5
|
+
import chunk from 'lodash-es/chunk.js';
|
|
6
|
+
import { cleanBillsData } from './cleanBillsData.js';
|
|
7
|
+
|
|
8
|
+
const fetchBondsDataEVM = async (chainId, bills, apiUrl, tokenPrices) => {
|
|
9
|
+
if (!tokenPrices)
|
|
10
|
+
return [];
|
|
11
|
+
try {
|
|
12
|
+
const billIds = [];
|
|
13
|
+
const billCalls = bills.flatMap((bill) => {
|
|
14
|
+
billIds.push(bill.index);
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
address: bill.contractAddress[bill.chainId] ?? '',
|
|
18
|
+
name: bill.billVersion === BillVersion.V4 ? 'trueBondPrices' : 'trueBillPrice()',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
address: bill.contractAddress[bill.chainId] ?? '',
|
|
22
|
+
name: 'totalPayoutGiven',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
address: bill.contractAddress[bill.chainId] ?? '',
|
|
26
|
+
name: 'terms',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
address: bill.contractAddress[bill.chainId] ?? '',
|
|
30
|
+
name: bill.billVersion !== BillVersion.V1 ? 'getMaxTotalPayout' : 'maxTotalPayout',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
address: bill.contractAddress[bill.chainId] ?? '',
|
|
34
|
+
name: 'feeInPayout',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
address: bill.contractAddress[bill.chainId] ?? '',
|
|
38
|
+
name: 'feeInPrincipal',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
address: bill.contractAddress[bill.chainId] ?? '',
|
|
42
|
+
name: 'paused',
|
|
43
|
+
},
|
|
44
|
+
// keep custom treasury at the very last position
|
|
45
|
+
{
|
|
46
|
+
address: bill.contractAddress[bill.chainId] ?? '',
|
|
47
|
+
name: 'customTreasury',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
});
|
|
51
|
+
const vals = await multicall(chainId, BOND_ABI, billCalls);
|
|
52
|
+
// The following lines basically grab the values from customTreasury returned from bills contract and then,
|
|
53
|
+
// appends the treasury contract's balance to the chunk that will be passed to cleanBillsData
|
|
54
|
+
// appendIndex value assumes customTreasury will be at the end of the billCalls array
|
|
55
|
+
const appendIndex = billCalls.length / bills.length;
|
|
56
|
+
const treasuryAddresses = vals
|
|
57
|
+
.filter((_, i) => (i % appendIndex) + 1 === appendIndex)
|
|
58
|
+
.map((customTreasury) => customTreasury[0]);
|
|
59
|
+
const treasuryBalanceCalls = treasuryAddresses.map((treasuryAddress, i) => ({
|
|
60
|
+
address: bills?.[i]?.earnToken?.address?.[chainId] ?? '',
|
|
61
|
+
name: 'balanceOf',
|
|
62
|
+
params: [treasuryAddress],
|
|
63
|
+
}));
|
|
64
|
+
const treasuryBalances = await multicall(chainId, erc20ABI, treasuryBalanceCalls);
|
|
65
|
+
const updatedVals = vals.reduce((acc, val, index) => {
|
|
66
|
+
acc.push(val);
|
|
67
|
+
if ((index + 1) % appendIndex === 0) {
|
|
68
|
+
const pos = (index + 1) / appendIndex;
|
|
69
|
+
acc.push(treasuryBalances[pos - 1]);
|
|
70
|
+
}
|
|
71
|
+
return acc;
|
|
72
|
+
}, []);
|
|
73
|
+
//
|
|
74
|
+
const chunkSize = updatedVals?.length / bills?.length;
|
|
75
|
+
const chunkedBills = chunk(updatedVals, chunkSize);
|
|
76
|
+
return await cleanBillsData(billIds, chunkedBills, chainId, bills, tokenPrices);
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
console.error(e);
|
|
80
|
+
reportError({
|
|
81
|
+
apiUrl,
|
|
82
|
+
error: e,
|
|
83
|
+
extraInfo: { type: 'getBondsData', e },
|
|
84
|
+
});
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export { fetchBondsDataEVM };
|
|
90
|
+
//# sourceMappingURL=fetchBondsDataEVM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchBondsDataEVM.js","sources":["../../../../src/state/bonds/fetchBondsData/fetchBondsDataEVM.ts"],"sourcesContent":["import { BillsConfig, BillVersion, ChainId } from '@ape.swap/apeswap-lists'\nimport { TokenPrices } from '../../tokenPrices/useTokenPrices'\nimport multicall from '../../../utils/multicall'\nimport BOND_2_4_0 from '../../../config/abi/BOND_2_4_0.json'\nimport ERC20ABI from '../../../config/abi/erc20.json'\nimport chunk from 'lodash-es/chunk.js'\nimport { cleanBillsData } from './cleanBillsData'\n\nexport const fetchBondsDataEVM = async (\n chainId: number,\n bills: BillsConfig[],\n apiUrl: string,\n tokenPrices?: TokenPrices[],\n) => {\n if (!tokenPrices) return []\n try {\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)\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"],"names":["BOND_2_4_0","ERC20ABI"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { BondsData } from '../../../types/bonds';
|
|
2
|
+
import { ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists';
|
|
3
|
+
import { TokenPrices } from '../../tokenPrices/useTokenPrices';
|
|
4
|
+
export declare const fetchBondsDataPreTGE: (chain: number, tokenPrices: Partial<Record<ChainId, TokenPrices[]>>, preTGEBonds: PreTGEConfig[], apiUrl?: string) => Promise<BondsData[]>;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { getBalanceNumber } from '../../../utils/getBalanceNumber.js';
|
|
2
|
+
import multicall from '../../../utils/multicall.js';
|
|
3
|
+
import chunk from 'lodash-es/chunk.js';
|
|
4
|
+
import LaunchBondABI_V_2_4_1 from '../../../config/abi/launchBond_v2_4_1.json.js';
|
|
5
|
+
import { reportError } from '../../../utils/reportError.js';
|
|
6
|
+
|
|
7
|
+
const fetchBondsDataPreTGE = async (chain, tokenPrices, preTGEBonds, apiUrl) => {
|
|
8
|
+
try {
|
|
9
|
+
if (!preTGEBonds?.length)
|
|
10
|
+
return [];
|
|
11
|
+
const data = [];
|
|
12
|
+
const chainId = chain;
|
|
13
|
+
const preTGEBondsIds = [];
|
|
14
|
+
const launchBondsCalls = preTGEBonds.flatMap((bond) => {
|
|
15
|
+
preTGEBondsIds.push(bond.index);
|
|
16
|
+
const bill = bond;
|
|
17
|
+
return [
|
|
18
|
+
{
|
|
19
|
+
address: bill.contractAddress[bill.chainId],
|
|
20
|
+
name: 'trueBillPrice',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
address: bill.contractAddress[bill.chainId],
|
|
24
|
+
name: 'terms',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
address: bill.contractAddress[bill.chainId],
|
|
28
|
+
name: 'totalPrincipalBilled',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
address: bill.contractAddress[bill.chainId],
|
|
32
|
+
name: 'finalized',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
address: bill.contractAddress[bill.chainId],
|
|
36
|
+
name: 'minPoints',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
address: bill.contractAddress[bill.chainId],
|
|
40
|
+
name: 'maxPoints',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
address: bill.contractAddress[bill.chainId],
|
|
44
|
+
name: 'startVestingTimestamp',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
});
|
|
48
|
+
const vals = await multicall(chainId, LaunchBondABI_V_2_4_1, launchBondsCalls);
|
|
49
|
+
const chunkSize = vals.length / preTGEBonds.length;
|
|
50
|
+
const chunkedBills = chunk(vals, chunkSize);
|
|
51
|
+
const returnedBills = chunkedBills?.map((chunk, index) => {
|
|
52
|
+
const bondConfig = preTGEBonds?.find((bill) => bill?.index === preTGEBondsIds[index]);
|
|
53
|
+
const [trueBillPrice, terms, totalPrincipalBilled, finalized, minPoints, maxPoints, startVestingTimestamp] = chunk;
|
|
54
|
+
const [, , vestingTerm, , , initialRelease, totalRaise, maxTotalPayout] = terms;
|
|
55
|
+
const initPrice = getBalanceNumber(trueBillPrice, bondConfig?.lpToken?.decimals?.[bondConfig?.chainId] ?? 18);
|
|
56
|
+
const lpPrice = tokenPrices?.[bondConfig?.chainId]?.find((tokenPrice) => tokenPrice?.tokenAddress?.toLowerCase() ===
|
|
57
|
+
bondConfig?.lpToken?.address?.[bondConfig?.chainId]?.toLowerCase())?.price ?? 0;
|
|
58
|
+
const earnTokenPrice = tokenPrices?.[bondConfig?.chainId]?.find((tokenPrice) => tokenPrice?.tokenAddress?.toLowerCase() ===
|
|
59
|
+
bondConfig?.earnToken?.address?.[bondConfig?.chainId]?.toLowerCase())?.price ?? 0;
|
|
60
|
+
const principalTokenPrice = lpPrice?.toString() ?? '0';
|
|
61
|
+
const payoutTokenPrice = earnTokenPrice ? earnTokenPrice?.toString() : initPrice?.toString();
|
|
62
|
+
const bonus = Math.round((bondConfig.tgePrice / initPrice) * 100 - 100);
|
|
63
|
+
const data = {
|
|
64
|
+
...bondConfig,
|
|
65
|
+
initialRelease: initialRelease / 10000,
|
|
66
|
+
vestingTerm: parseInt(vestingTerm),
|
|
67
|
+
trueBondPrices: [
|
|
68
|
+
{
|
|
69
|
+
points: '0',
|
|
70
|
+
boost: 0,
|
|
71
|
+
trueBondPrice: trueBillPrice?.toString(),
|
|
72
|
+
bonus,
|
|
73
|
+
bonusWithFee: bonus, // placeholder, wont be used
|
|
74
|
+
discount: bonus, // placeholder, wont be used
|
|
75
|
+
discountWithFee: bonus, // placeholder, wont be used
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
maxTotalPayout: maxTotalPayout?.toString(),
|
|
79
|
+
totalPrincipalBilled: totalPrincipalBilled?.toString(),
|
|
80
|
+
payoutTokenPrice,
|
|
81
|
+
principalTokenPrice,
|
|
82
|
+
totalRaise: totalRaise?.toString(),
|
|
83
|
+
finalized: finalized[0],
|
|
84
|
+
minPoints: minPoints.toString(),
|
|
85
|
+
maxPoints: maxPoints.toString(),
|
|
86
|
+
startVestingTimestamp: startVestingTimestamp?.toString(),
|
|
87
|
+
initTime: { [bondConfig.chainId]: parseInt(terms[1]) },
|
|
88
|
+
finishTime: parseInt(terms[0]),
|
|
89
|
+
initPrice,
|
|
90
|
+
soldOut: finalized[0] || (parseInt(terms[0]) ?? 0) < Date.now() / 1000 || bondConfig.soldOut,
|
|
91
|
+
};
|
|
92
|
+
return data;
|
|
93
|
+
});
|
|
94
|
+
data.push(returnedBills);
|
|
95
|
+
return data.flat();
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
console.error(e);
|
|
99
|
+
reportError({
|
|
100
|
+
apiUrl,
|
|
101
|
+
error: e,
|
|
102
|
+
extraInfo: { type: 'getLaunchBondsPublicData', preTGEBonds, chain, e },
|
|
103
|
+
});
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export { fetchBondsDataPreTGE };
|
|
109
|
+
//# sourceMappingURL=fetchBondsDataPreTGE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchBondsDataPreTGE.js","sources":["../../../../src/state/bonds/fetchBondsData/fetchBondsDataPreTGE.ts"],"sourcesContent":["import { BondsData } from '../../../types/bonds'\nimport { getBalanceNumber } from '../../../utils/getBalanceNumber'\nimport { 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 { reportError } from '../../../utils/reportError'\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: parseInt(vestingTerm),\n trueBondPrices: [\n {\n points: '0',\n boost: 0,\n trueBondPrice: trueBillPrice?.toString(),\n bonus,\n bonusWithFee: bonus, // placeholder, wont be used\n discount: bonus, // placeholder, wont be used\n discountWithFee: 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]: parseInt(terms[1]) },\n finishTime: parseInt(terms[0]),\n initPrice,\n soldOut: finalized[0] || (parseInt(terms[0]) ?? 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"],"names":["launchBondsABI_V2_4_1"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { BillsConfig } from '@ape.swap/apeswap-lists';
|
|
2
|
+
import { TokenPrices } from '../../tokenPrices/useTokenPrices';
|
|
3
|
+
export declare const fetchBondsDataSOL: (bills: BillsConfig[], apiUrl: string, tokenPrices?: TokenPrices[]) => Promise<import("../../../types/bonds").BondsData[]>;
|