@ape.swap/bonds-sdk 5.1.49-test.2 → 5.1.49-test.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/config/constants/chains.js +1 -1
  2. package/dist/config/constants/chains.js.map +1 -1
  3. package/dist/config/constants/suiZapTokens.js +19 -7
  4. package/dist/config/constants/suiZapTokens.js.map +1 -1
  5. package/dist/constants/suiConstants.d.ts +1 -7
  6. package/dist/constants/suiConstants.js +6 -34
  7. package/dist/constants/suiConstants.js.map +1 -1
  8. package/dist/state/bonds/discoverSuiBonds.d.ts +6 -0
  9. package/dist/state/bonds/fetchBondsDataSui.js +38 -11
  10. package/dist/state/bonds/fetchBondsDataSui.js.map +1 -1
  11. package/dist/state/bonds/useBondsData.js +17 -9
  12. package/dist/state/bonds/useBondsData.js.map +1 -1
  13. package/dist/state/bonds/useBondsList.js +22 -22
  14. package/dist/state/bonds/useBondsList.js.map +1 -1
  15. package/dist/state/tokenPrices/useTokenPrices.js +1 -13
  16. package/dist/state/tokenPrices/useTokenPrices.js.map +1 -1
  17. package/dist/state/useSDKConfig.d.ts +1 -0
  18. package/dist/state/useSDKConfig.js.map +1 -1
  19. package/dist/state/zap/useSuiZapQuote.js +5 -28
  20. package/dist/state/zap/useSuiZapQuote.js.map +1 -1
  21. package/dist/utils/suiHelpers.d.ts +1 -1
  22. package/dist/utils/suiHelpers.js +5 -5
  23. package/dist/utils/suiHelpers.js.map +1 -1
  24. package/dist/views/BuyBond/BuyComponentSui.js +134 -50
  25. package/dist/views/BuyBond/BuyComponentSui.js.map +1 -1
  26. package/dist/views/BuyBond/utils.js +3 -0
  27. package/dist/views/BuyBond/utils.js.map +1 -1
  28. package/dist/views/YourBonds/components/UserBondRow/UserBondRowSui.js +2 -2
  29. package/dist/views/YourBonds/components/UserBondRow/UserBondRowSui.js.map +1 -1
  30. package/dist/views/YourBondsModal/components/Actions/ActionsSui.js +2 -2
  31. package/dist/views/YourBondsModal/components/Actions/ActionsSui.js.map +1 -1
  32. package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionSui.d.ts +9 -0
  33. package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionSui.js +71 -0
  34. package/dist/views/YourBondsModal/components/TransferBondModal/TransferActionSui.js.map +1 -0
  35. package/dist/views/YourBondsModal/components/TransferBondModal/index.js +2 -1
  36. package/dist/views/YourBondsModal/components/TransferBondModal/index.js.map +1 -1
  37. package/package.json +1 -1
  38. package/dist/state/bonds/aptosBondsConfig.js +0 -183
  39. package/dist/state/bonds/aptosBondsConfig.js.map +0 -1
  40. package/dist/state/bonds/suiBondsConfig.d.ts +0 -4
  41. package/dist/state/bonds/suiBondsConfig.js +0 -227
  42. package/dist/state/bonds/suiBondsConfig.js.map +0 -1
@@ -143,7 +143,7 @@ const BLOCK_EXPLORER = {
143
143
  [ChainId.MEGAETH_TESTNET]: 'https://megaexplorer.xyz',
144
144
  [ChainId.HYPEREVM]: 'https://hyperevmscan.io',
145
145
  [ChainId.APTOS]: 'https://explorer.aptoslabs.com',
146
- [ChainId.SUI]: 'https://suiscan.xyz/testnet',
146
+ [ChainId.SUI]: 'https://suiscan.xyz/mainnet',
147
147
  };
148
148
 
149
149
  export { BLOCK_EXPLORER, MAINNET_CHAINS, NETWORK_ICONS, NETWORK_LABEL, SHORT_NETWORK_LABEL, TESTNET_CHAINS };
@@ -1 +1 @@
1
- {"version":3,"file":"chains.js","sources":["../../../src/config/constants/chains.ts"],"sourcesContent":["// Network chain ids\nimport { icons } from '../../components/uikit-sdk/Svg/types'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n// Ensure the ChainId.APTOS and ChainId.SUI runtime patches run before the maps below evaluate\nimport '../../constants/aptosConstants'\nimport '../../constants/suiConstants'\n\n// These are the lists we will display to the user\nexport const MAINNET_CHAINS = [\n ChainId.MAINNET,\n ChainId.BSC,\n ChainId.MATIC,\n ChainId.BASE,\n ChainId.IOTA,\n ChainId.LINEA,\n ChainId.ARBITRUM,\n ChainId.APTOS,\n ChainId.SUI,\n ChainId.LIGHTLINK,\n ChainId.GRAPHLINQ,\n ChainId.AVAX,\n ChainId.BLAST,\n ChainId.CROSSFI,\n ChainId.SONIC,\n ChainId.MONAD,\n ChainId.BERACHAIN,\n ChainId.SOL,\n ChainId.KATANA,\n ChainId.UNICHAIN,\n ChainId.MEGAETH_TESTNET,\n ChainId.HYPEREVM,\n]\n\nexport const TESTNET_CHAINS = [ChainId.MEGAETH_TESTNET]\n\n// Network Icons\nexport const NETWORK_ICONS: Partial<Record<number, icons>> = {\n [ChainId.BSC]: icons.BNB_TOKEN,\n [ChainId.MATIC]: icons.POLYGON_TOKEN,\n [ChainId.MAINNET]: icons.ETH_TOKEN,\n [ChainId.TLOS]: icons.TLOS_TOKEN,\n [ChainId.ARBITRUM]: icons.ARBITRUM_TOKEN,\n [ChainId.INEVM]: icons.INEVM,\n [ChainId.SEPOLIA]: icons.ETH_TOKEN,\n [ChainId.LINEA]: icons.LINEA,\n [ChainId.LIGHTLINK]: icons.LIGHTLINK,\n [ChainId.IOTA]: icons.IOTA,\n [ChainId.BASE]: icons.BASE,\n [ChainId.GRAPHLINQ]: icons.GRAPHLINQ,\n [ChainId.AVAX]: icons.AVAX_TOKEN,\n [ChainId.BLAST]: icons.BLAST,\n [ChainId.CROSSFI]: icons.CROSSFI,\n [ChainId.MONAD_TESTNET]: icons.MONAD,\n [ChainId.MONAD]: icons.MONAD,\n [ChainId.SONIC]: icons.SONIC,\n [ChainId.BERACHAIN]: icons.BERA,\n [ChainId.SOL]: icons.SOL,\n [ChainId.KATANA]: icons.KATANA,\n [ChainId.UNICHAIN]: icons.UNICHAIN,\n [ChainId.MEGAETH_TESTNET]: icons.MEGAETH,\n [ChainId.HYPEREVM]: icons.HYPEREVM,\n [ChainId.APTOS]: icons.APTOS,\n [ChainId.SUI]: icons.SUI,\n}\n\n// Network labels\nexport const NETWORK_LABEL: Record<number, string> = {\n [ChainId.BSC]: 'BNB',\n [ChainId.BSC_TESTNET]: 'BNB Testnet',\n [ChainId.MATIC]: 'Polygon',\n [ChainId.MAINNET]: 'Ethereum',\n [ChainId.TLOS]: 'Telos',\n [ChainId.ARBITRUM]: 'Arbitrum',\n [ChainId.INEVM]: 'inEVM',\n [ChainId.SEPOLIA]: 'Sepolia',\n [ChainId.LINEA]: 'Linea',\n [ChainId.LIGHTLINK]: 'Lightlink',\n [ChainId.IOTA]: 'Iota',\n [ChainId.IOTA_TESTNET]: 'Iota Testnet',\n [ChainId.BASE]: 'Base',\n [ChainId.GRAPHLINQ]: 'GraphLinq',\n [ChainId.AVAX]: 'Avalanche',\n [ChainId.BLAST]: 'Blast',\n [ChainId.CROSSFI]: 'Crossfi',\n [ChainId.MONAD_TESTNET]: 'Monad Testnet',\n [ChainId.MONAD]: 'Monad',\n [ChainId.SONIC]: 'Sonic',\n [ChainId.BERACHAIN]: 'Berachain',\n [ChainId.SOL]: 'Solana',\n [ChainId.KATANA]: 'Katana',\n [ChainId.UNICHAIN]: 'Unichain',\n [ChainId.MEGAETH_TESTNET]: 'MegaETH Testnet',\n [ChainId.HYPEREVM]: 'HyperEVM',\n [ChainId.APTOS]: 'Aptos',\n [ChainId.SUI]: 'Sui',\n}\n\nexport const SHORT_NETWORK_LABEL: Record<number, string> = {\n [ChainId.BSC]: 'BNB',\n [ChainId.MATIC]: 'Pol',\n [ChainId.MAINNET]: 'Eth',\n [ChainId.TLOS]: 'Telo',\n [ChainId.ARBITRUM]: 'Arb',\n [ChainId.LINEA]: 'Line',\n [ChainId.LIGHTLINK]: 'Ligh',\n [ChainId.IOTA]: 'Iota',\n [ChainId.BASE]: 'Base',\n [ChainId.GRAPHLINQ]: 'Grap',\n [ChainId.AVAX]: 'Avax',\n [ChainId.BLAST]: 'Bla',\n [ChainId.CROSSFI]: 'Cro',\n [ChainId.MONAD]: 'Mona',\n [ChainId.SONIC]: 'Son',\n [ChainId.BERACHAIN]: 'Bera',\n [ChainId.SOL]: 'Sol',\n [ChainId.KATANA]: 'Kat',\n [ChainId.UNICHAIN]: 'Unic',\n [ChainId.HYPEREVM]: 'Hyp',\n [ChainId.APTOS]: 'Apt',\n [ChainId.SUI]: 'Sui',\n}\n\n// Network block explorers\nexport const BLOCK_EXPLORER: Record<number, string> = {\n [ChainId.MAINNET]: 'https://etherscan.io',\n [ChainId.ARBITRUM]: 'https://arbiscan.io',\n [ChainId.MATIC]: 'https://polygonscan.com',\n [ChainId.BSC]: 'https://bscscan.com',\n [ChainId.BSC_TESTNET]: 'https://testnet.bscscan.com',\n [ChainId.TLOS]: 'https://www.teloscan.io',\n [ChainId.INEVM]: 'https://explorer.inevm.com',\n [ChainId.SEPOLIA]: 'https://sepolia.etherscan.io',\n [ChainId.LINEA]: 'https://lineascan.build',\n [ChainId.LIGHTLINK]: 'https://phoenix.lightlink.io',\n [ChainId.IOTA]: 'https://explorer.evm.iota.org',\n [ChainId.IOTA_TESTNET]: 'https://explorer.evm.testnet.iotaledger.net/',\n [ChainId.BASE]: 'https://basescan.org',\n [ChainId.GRAPHLINQ]: 'https://graphlinq.dex.guru',\n [ChainId.AVAX]: 'https://snowtrace.io/',\n [ChainId.BLAST]: 'https://blastscan.io',\n [ChainId.CROSSFI]: 'https://xfiscan.com',\n [ChainId.MONAD_TESTNET]: 'https://testnet.monadexplorer.com/',\n [ChainId.MONAD]: 'https://monadvision.com/',\n [ChainId.SONIC]: 'https://sonicscan.org',\n [ChainId.BERACHAIN]: 'https://berascan.com',\n [ChainId.SOL]: 'https://solscan.io',\n [ChainId.KATANA]: 'https://explorer.katanarpc.com',\n [ChainId.UNICHAIN]: 'https://uniscan.xyz',\n [ChainId.MEGAETH_TESTNET]: 'https://megaexplorer.xyz',\n [ChainId.HYPEREVM]: 'https://hyperevmscan.io',\n [ChainId.APTOS]: 'https://explorer.aptoslabs.com',\n [ChainId.SUI]: 'https://suiscan.xyz/testnet',\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chains.js","sources":["../../../src/config/constants/chains.ts"],"sourcesContent":["// Network chain ids\nimport { icons } from '../../components/uikit-sdk/Svg/types'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n// Ensure the ChainId.APTOS and ChainId.SUI runtime patches run before the maps below evaluate\nimport '../../constants/aptosConstants'\nimport '../../constants/suiConstants'\n\n// These are the lists we will display to the user\nexport const MAINNET_CHAINS = [\n ChainId.MAINNET,\n ChainId.BSC,\n ChainId.MATIC,\n ChainId.BASE,\n ChainId.IOTA,\n ChainId.LINEA,\n ChainId.ARBITRUM,\n ChainId.APTOS,\n ChainId.SUI,\n ChainId.LIGHTLINK,\n ChainId.GRAPHLINQ,\n ChainId.AVAX,\n ChainId.BLAST,\n ChainId.CROSSFI,\n ChainId.SONIC,\n ChainId.MONAD,\n ChainId.BERACHAIN,\n ChainId.SOL,\n ChainId.KATANA,\n ChainId.UNICHAIN,\n ChainId.MEGAETH_TESTNET,\n ChainId.HYPEREVM,\n]\n\nexport const TESTNET_CHAINS = [ChainId.MEGAETH_TESTNET]\n\n// Network Icons\nexport const NETWORK_ICONS: Partial<Record<number, icons>> = {\n [ChainId.BSC]: icons.BNB_TOKEN,\n [ChainId.MATIC]: icons.POLYGON_TOKEN,\n [ChainId.MAINNET]: icons.ETH_TOKEN,\n [ChainId.TLOS]: icons.TLOS_TOKEN,\n [ChainId.ARBITRUM]: icons.ARBITRUM_TOKEN,\n [ChainId.INEVM]: icons.INEVM,\n [ChainId.SEPOLIA]: icons.ETH_TOKEN,\n [ChainId.LINEA]: icons.LINEA,\n [ChainId.LIGHTLINK]: icons.LIGHTLINK,\n [ChainId.IOTA]: icons.IOTA,\n [ChainId.BASE]: icons.BASE,\n [ChainId.GRAPHLINQ]: icons.GRAPHLINQ,\n [ChainId.AVAX]: icons.AVAX_TOKEN,\n [ChainId.BLAST]: icons.BLAST,\n [ChainId.CROSSFI]: icons.CROSSFI,\n [ChainId.MONAD_TESTNET]: icons.MONAD,\n [ChainId.MONAD]: icons.MONAD,\n [ChainId.SONIC]: icons.SONIC,\n [ChainId.BERACHAIN]: icons.BERA,\n [ChainId.SOL]: icons.SOL,\n [ChainId.KATANA]: icons.KATANA,\n [ChainId.UNICHAIN]: icons.UNICHAIN,\n [ChainId.MEGAETH_TESTNET]: icons.MEGAETH,\n [ChainId.HYPEREVM]: icons.HYPEREVM,\n [ChainId.APTOS]: icons.APTOS,\n [ChainId.SUI]: icons.SUI,\n}\n\n// Network labels\nexport const NETWORK_LABEL: Record<number, string> = {\n [ChainId.BSC]: 'BNB',\n [ChainId.BSC_TESTNET]: 'BNB Testnet',\n [ChainId.MATIC]: 'Polygon',\n [ChainId.MAINNET]: 'Ethereum',\n [ChainId.TLOS]: 'Telos',\n [ChainId.ARBITRUM]: 'Arbitrum',\n [ChainId.INEVM]: 'inEVM',\n [ChainId.SEPOLIA]: 'Sepolia',\n [ChainId.LINEA]: 'Linea',\n [ChainId.LIGHTLINK]: 'Lightlink',\n [ChainId.IOTA]: 'Iota',\n [ChainId.IOTA_TESTNET]: 'Iota Testnet',\n [ChainId.BASE]: 'Base',\n [ChainId.GRAPHLINQ]: 'GraphLinq',\n [ChainId.AVAX]: 'Avalanche',\n [ChainId.BLAST]: 'Blast',\n [ChainId.CROSSFI]: 'Crossfi',\n [ChainId.MONAD_TESTNET]: 'Monad Testnet',\n [ChainId.MONAD]: 'Monad',\n [ChainId.SONIC]: 'Sonic',\n [ChainId.BERACHAIN]: 'Berachain',\n [ChainId.SOL]: 'Solana',\n [ChainId.KATANA]: 'Katana',\n [ChainId.UNICHAIN]: 'Unichain',\n [ChainId.MEGAETH_TESTNET]: 'MegaETH Testnet',\n [ChainId.HYPEREVM]: 'HyperEVM',\n [ChainId.APTOS]: 'Aptos',\n [ChainId.SUI]: 'Sui',\n}\n\nexport const SHORT_NETWORK_LABEL: Record<number, string> = {\n [ChainId.BSC]: 'BNB',\n [ChainId.MATIC]: 'Pol',\n [ChainId.MAINNET]: 'Eth',\n [ChainId.TLOS]: 'Telo',\n [ChainId.ARBITRUM]: 'Arb',\n [ChainId.LINEA]: 'Line',\n [ChainId.LIGHTLINK]: 'Ligh',\n [ChainId.IOTA]: 'Iota',\n [ChainId.BASE]: 'Base',\n [ChainId.GRAPHLINQ]: 'Grap',\n [ChainId.AVAX]: 'Avax',\n [ChainId.BLAST]: 'Bla',\n [ChainId.CROSSFI]: 'Cro',\n [ChainId.MONAD]: 'Mona',\n [ChainId.SONIC]: 'Son',\n [ChainId.BERACHAIN]: 'Bera',\n [ChainId.SOL]: 'Sol',\n [ChainId.KATANA]: 'Kat',\n [ChainId.UNICHAIN]: 'Unic',\n [ChainId.HYPEREVM]: 'Hyp',\n [ChainId.APTOS]: 'Apt',\n [ChainId.SUI]: 'Sui',\n}\n\n// Network block explorers\nexport const BLOCK_EXPLORER: Record<number, string> = {\n [ChainId.MAINNET]: 'https://etherscan.io',\n [ChainId.ARBITRUM]: 'https://arbiscan.io',\n [ChainId.MATIC]: 'https://polygonscan.com',\n [ChainId.BSC]: 'https://bscscan.com',\n [ChainId.BSC_TESTNET]: 'https://testnet.bscscan.com',\n [ChainId.TLOS]: 'https://www.teloscan.io',\n [ChainId.INEVM]: 'https://explorer.inevm.com',\n [ChainId.SEPOLIA]: 'https://sepolia.etherscan.io',\n [ChainId.LINEA]: 'https://lineascan.build',\n [ChainId.LIGHTLINK]: 'https://phoenix.lightlink.io',\n [ChainId.IOTA]: 'https://explorer.evm.iota.org',\n [ChainId.IOTA_TESTNET]: 'https://explorer.evm.testnet.iotaledger.net/',\n [ChainId.BASE]: 'https://basescan.org',\n [ChainId.GRAPHLINQ]: 'https://graphlinq.dex.guru',\n [ChainId.AVAX]: 'https://snowtrace.io/',\n [ChainId.BLAST]: 'https://blastscan.io',\n [ChainId.CROSSFI]: 'https://xfiscan.com',\n [ChainId.MONAD_TESTNET]: 'https://testnet.monadexplorer.com/',\n [ChainId.MONAD]: 'https://monadvision.com/',\n [ChainId.SONIC]: 'https://sonicscan.org',\n [ChainId.BERACHAIN]: 'https://berascan.com',\n [ChainId.SOL]: 'https://solscan.io',\n [ChainId.KATANA]: 'https://explorer.katanarpc.com',\n [ChainId.UNICHAIN]: 'https://uniscan.xyz',\n [ChainId.MEGAETH_TESTNET]: 'https://megaexplorer.xyz',\n [ChainId.HYPEREVM]: 'https://hyperevmscan.io',\n [ChainId.APTOS]: 'https://explorer.aptoslabs.com',\n [ChainId.SUI]: 'https://suiscan.xyz/mainnet',\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { SUI_PACKAGE_ID } from '../../constants/suiConstants.js';
1
+ import '../../constants/suiConstants.js';
2
2
 
3
3
  // =============================================================================
4
4
  // Sui zap tokens — static list of tokens available for zap on Sui
@@ -12,16 +12,28 @@ import { SUI_PACKAGE_ID } from '../../constants/suiConstants.js';
12
12
  // Including it would cause a duplicate in the token selector.
13
13
  //
14
14
  // TODO(sui): Move to @ape.swap/apeswap-lists when it supports Sui.
15
- // TODO(sui): Replace testnet coin types with mainnet addresses before launch.
16
- const SUI_ZAP_TOKENS_LIST = [
15
+ // MAINNET-TODO: Verify these coin type addresses match your mainnet tokens.
16
+ const SUI_ZAP_TOKENS_MAINNET = [
17
17
  {
18
- symbol: 'tUSDC',
19
- name: 'Test USDC',
20
- address: `${SUI_PACKAGE_ID}::test_principal_token::TEST_PRINCIPAL_TOKEN`,
18
+ symbol: 'USDC',
19
+ name: 'USD Coin',
20
+ address: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC',
21
21
  decimals: 6,
22
22
  },
23
+ {
24
+ symbol: 'USDT',
25
+ name: 'Tether USD',
26
+ address: '0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN',
27
+ decimals: 6,
28
+ },
29
+ {
30
+ symbol: 'wETH',
31
+ name: 'Wrapped Ether',
32
+ address: '0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN',
33
+ decimals: 8,
34
+ },
23
35
  ];
24
- const SUI_ZAP_TOKENS = SUI_ZAP_TOKENS_LIST;
36
+ const SUI_ZAP_TOKENS = SUI_ZAP_TOKENS_MAINNET ;
25
37
  // SUI entry used only by findSuiZapToken for zap quote resolution.
26
38
  // Not in SUI_ZAP_TOKENS to avoid duplicate in the selector (NATIVE covers it).
27
39
  const SUI_TOKEN = { symbol: 'SUI', name: 'Sui', address: '0x2::sui::SUI', decimals: 9 };
@@ -1 +1 @@
1
- {"version":3,"file":"suiZapTokens.js","sources":["../../../src/config/constants/suiZapTokens.ts"],"sourcesContent":["// =============================================================================\n// Sui zap tokens — static list of tokens available for zap on Sui\n// =============================================================================\n//\n// Equivalent to zapInputTokens[ChainId.SOL] from @ape.swap/apeswap-lists.\n// Until that package supports Sui, we maintain this local list.\n//\n// SUI native is NOT included here — it is covered by the 'NATIVE' entry that\n// useSortedZapList injects automatically (via WNATIVE[ChainId.SUI]).\n// Including it would cause a duplicate in the token selector.\n//\n// TODO(sui): Move to @ape.swap/apeswap-lists when it supports Sui.\n\nimport { SUI_PACKAGE_ID } from '../../constants/suiConstants'\n\nexport interface SuiZapToken {\n symbol: string\n name: string\n address: string\n decimals: number\n logoUrl?: string\n}\n\n// TODO(sui): Replace testnet coin types with mainnet addresses before launch.\nconst SUI_ZAP_TOKENS_LIST: SuiZapToken[] = [\n {\n symbol: 'tUSDC',\n name: 'Test USDC',\n address: `${SUI_PACKAGE_ID}::test_principal_token::TEST_PRINCIPAL_TOKEN`,\n decimals: 6,\n },\n]\n\nexport const SUI_ZAP_TOKENS: SuiZapToken[] = SUI_ZAP_TOKENS_LIST\n\nexport const getSuiZapTokens = (): SuiZapToken[] => SUI_ZAP_TOKENS\n\n// SUI entry used only by findSuiZapToken for zap quote resolution.\n// Not in SUI_ZAP_TOKENS to avoid duplicate in the selector (NATIVE covers it).\nconst SUI_TOKEN: SuiZapToken = { symbol: 'SUI', name: 'Sui', address: '0x2::sui::SUI', decimals: 9 }\n\n/**\n * Find a zap token by its address. Includes SUI even though it's not in the\n * selector list (NATIVE resolves to SUI for quote purposes).\n */\nexport const findSuiZapToken = (address: string | undefined): SuiZapToken | undefined => {\n if (!address) return undefined\n if (address.toLowerCase() === '0x2::sui::sui') return SUI_TOKEN\n return SUI_ZAP_TOKENS.find((t) => t.address.toLowerCase() === address.toLowerCase())\n}\n"],"names":[],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA,MAAM,mBAAmB,GAAkB;AACzC,IAAA;AACE,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,CAAA,EAAG,cAAc,CAAA,4CAAA,CAA8C;AACxE,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;CACF;AAEM,MAAM,cAAc,GAAkB;AAI7C;AACA;AACA,MAAM,SAAS,GAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,EAAE;AAEpG;;;AAGG;AACI,MAAM,eAAe,GAAG,CAAC,OAA2B,KAA6B;AACtF,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,SAAS;AAC9B,IAAA,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,eAAe;AAAE,QAAA,OAAO,SAAS;IAC/D,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;AACtF;;;;"}
1
+ {"version":3,"file":"suiZapTokens.js","sources":["../../../src/config/constants/suiZapTokens.ts"],"sourcesContent":["// =============================================================================\n// Sui zap tokens — static list of tokens available for zap on Sui\n// =============================================================================\n//\n// Equivalent to zapInputTokens[ChainId.SOL] from @ape.swap/apeswap-lists.\n// Until that package supports Sui, we maintain this local list.\n//\n// SUI native is NOT included here — it is covered by the 'NATIVE' entry that\n// useSortedZapList injects automatically (via WNATIVE[ChainId.SUI]).\n// Including it would cause a duplicate in the token selector.\n//\n// TODO(sui): Move to @ape.swap/apeswap-lists when it supports Sui.\n\nimport { IS_SUI_MAINNET, SUI_PACKAGE_ID } from '../../constants/suiConstants'\n\nexport interface SuiZapToken {\n symbol: string\n name: string\n address: string\n decimals: number\n logoUrl?: string\n}\n\nconst SUI_ZAP_TOKENS_TESTNET: SuiZapToken[] = [\n {\n symbol: 'tUSDC',\n name: 'Test USDC',\n address: `${SUI_PACKAGE_ID}::test_principal_token::TEST_PRINCIPAL_TOKEN`,\n decimals: 6,\n },\n]\n\n// MAINNET-TODO: Verify these coin type addresses match your mainnet tokens.\nconst SUI_ZAP_TOKENS_MAINNET: SuiZapToken[] = [\n {\n symbol: 'USDC',\n name: 'USD Coin',\n address: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC',\n decimals: 6,\n },\n {\n symbol: 'USDT',\n name: 'Tether USD',\n address: '0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN',\n decimals: 6,\n },\n {\n symbol: 'wETH',\n name: 'Wrapped Ether',\n address: '0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN',\n decimals: 8,\n },\n]\n\nexport const SUI_ZAP_TOKENS: SuiZapToken[] = IS_SUI_MAINNET ? SUI_ZAP_TOKENS_MAINNET : SUI_ZAP_TOKENS_TESTNET\n\nexport const getSuiZapTokens = (): SuiZapToken[] => SUI_ZAP_TOKENS\n\n// SUI entry used only by findSuiZapToken for zap quote resolution.\n// Not in SUI_ZAP_TOKENS to avoid duplicate in the selector (NATIVE covers it).\nconst SUI_TOKEN: SuiZapToken = { symbol: 'SUI', name: 'Sui', address: '0x2::sui::SUI', decimals: 9 }\n\n/**\n * Find a zap token by its address. Includes SUI even though it's not in the\n * selector list (NATIVE resolves to SUI for quote purposes).\n */\nexport const findSuiZapToken = (address: string | undefined): SuiZapToken | undefined => {\n if (!address) return undefined\n if (address.toLowerCase() === '0x2::sui::sui') return SUI_TOKEN\n return SUI_ZAP_TOKENS.find((t) => t.address.toLowerCase() === address.toLowerCase())\n}\n"],"names":[],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAqBA;AACA,MAAM,sBAAsB,GAAkB;AAC5C,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,OAAO,EAAE,gFAAgF;AACzF,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,OAAO,EAAE,gFAAgF;AACzF,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA;AACE,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,OAAO,EAAE,gFAAgF;AACzF,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;CACF;AAEM,MAAM,cAAc,GAAmC,sBAAsB;AAIpF;AACA;AACA,MAAM,SAAS,GAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,EAAE;AAEpG;;;AAGG;AACI,MAAM,eAAe,GAAG,CAAC,OAA2B,KAA6B;AACtF,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,SAAS;AAC9B,IAAA,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,eAAe;AAAE,QAAA,OAAO,SAAS;IAC/D,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;AACtF;;;;"}
@@ -1,11 +1,7 @@
1
- export declare const IS_SUI_MAINNET: boolean;
1
+ export declare const IS_SUI_MAINNET = true;
2
2
  export declare const SUI_NETWORK: 'mainnet' | 'testnet';
3
3
  export declare const SUI_PACKAGE_ID: string;
4
- export declare const SUI_BOND_NFT_REGISTRY: string;
5
- export declare const SUI_BOND_MARKET: string;
6
- export declare const SUI_TREASURY: string;
7
4
  export declare const SUI_FULLNODE_URL: string;
8
- export declare const SUI_EXPLORER_URL: string;
9
5
  export declare const SUI_BOND_MODULE: string;
10
6
  export declare const SUI_DEPOSIT_FUNCTION: string;
11
7
  export declare const SUI_CLAIM_FUNCTION: string;
@@ -13,6 +9,4 @@ export declare const SUI_VIEW_MARKET_INFO: string;
13
9
  export declare const SUI_VIEW_BILL_INFO: string;
14
10
  export declare const SUI_VIEW_VESTING_PROGRESS: string;
15
11
  export declare const SUI_VIEW_USER_BILLS: string;
16
- export declare const SUI_PRINCIPAL_TOKEN_ADMIN_TESTNET = "0x8fddf5d4465b5e9562686b1becba04d233d47626f9a82e20c6383a600f93270f";
17
- export declare const SUI_MINT_PRINCIPAL_FUNCTION: string;
18
12
  export declare const SUI_PLACEHOLDER_BILL_IMAGE = "https://www.ape.bond/images/bills/hidden-bill.jpg";
@@ -3,16 +3,9 @@
3
3
  // Defaults to testnet until mainnet contracts are deployed and verified.
4
4
  // Set NEXT_PUBLIC_SUI_NETWORK=mainnet to switch to mainnet.
5
5
  // ---------------------------------------------------------------------------
6
- const IS_SUI_MAINNET = typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_SUI_NETWORK === 'mainnet';
7
- // ---------------------------------------------------------------------------
8
- // Package ID (single Move package containing bond, factory, treasury modules)
9
- // ---------------------------------------------------------------------------
10
- // Testnet address is the current apebond-move-sui deployment.
11
- // Mainnet is a placeholder until a mainnet deploy lands.
12
- // TODO(sui): Replace SUI_PACKAGE_ID_MAINNET when mainnet is deployed.
13
- const SUI_PACKAGE_ID_TESTNET = '0x50c08fbf9c330f7658e1400f847f46b76165c8a68630e09a2d5ade0ceaa47264';
14
- const SUI_PACKAGE_ID_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000';
15
- const SUI_PACKAGE_ID = IS_SUI_MAINNET ? SUI_PACKAGE_ID_MAINNET : SUI_PACKAGE_ID_TESTNET;
6
+ const IS_SUI_MAINNET = true;
7
+ const SUI_PACKAGE_ID_MAINNET = '0x802ed2854f6523fc106644da079e0758ca759f63d9d577774b79c51b91f1a460';
8
+ const SUI_PACKAGE_ID = SUI_PACKAGE_ID_MAINNET ;
16
9
  // Warn loudly if we ever end up in production with the placeholder address —
17
10
  // that would silently break every Sui interaction.
18
11
  if (typeof window !== 'undefined' &&
@@ -23,39 +16,18 @@ if (typeof window !== 'undefined' &&
23
16
  'Replace SUI_PACKAGE_ID_MAINNET in src/constants/suiConstants.ts before shipping.');
24
17
  }
25
18
  // ---------------------------------------------------------------------------
26
- // Shared object IDs (testnet / mainnet)
27
- // ---------------------------------------------------------------------------
28
- const SUI_BOND_NFT_REGISTRY_TESTNET = '0x8e9a26ff170e0bd42aaa6c4a8d05c49e9a3f68ce086590a35e49abb7c9e98ee3';
29
- const SUI_BOND_NFT_REGISTRY_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000';
30
- const SUI_BOND_MARKET_TESTNET = '0x09b35be15cf3567d9a19a7aa35de08264549dc84d81fe30c5953c9d7fa5abaa3';
31
- const SUI_BOND_MARKET_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000';
32
- const SUI_TREASURY_TESTNET = '0xde1e50b1ce7ca0effe23cfe1bfd46e438f53887db0417fb653f1033501ce056f';
33
- const SUI_TREASURY_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000';
34
- const SUI_BOND_NFT_REGISTRY = IS_SUI_MAINNET ? SUI_BOND_NFT_REGISTRY_MAINNET : SUI_BOND_NFT_REGISTRY_TESTNET;
35
- const SUI_BOND_MARKET = IS_SUI_MAINNET ? SUI_BOND_MARKET_MAINNET : SUI_BOND_MARKET_TESTNET;
36
- const SUI_TREASURY = IS_SUI_MAINNET ? SUI_TREASURY_MAINNET : SUI_TREASURY_TESTNET;
37
- // ---------------------------------------------------------------------------
38
19
  // Network endpoints (fullnode + explorer)
39
20
  // ---------------------------------------------------------------------------
40
21
  // Sui public RPC does not require API keys.
41
- const SUI_FULLNODE_URL = IS_SUI_MAINNET
42
- ? 'https://fullnode.mainnet.sui.io:443'
43
- : 'https://fullnode.testnet.sui.io:443';
22
+ const SUI_FULLNODE_URL = 'https://fullnode.mainnet.sui.io:443'
23
+ ;
44
24
  // Entry functions (write path)
45
25
  const SUI_DEPOSIT_FUNCTION = `${SUI_PACKAGE_ID}::bond::deposit`;
46
26
  const SUI_CLAIM_FUNCTION = `${SUI_PACKAGE_ID}::bond::claim`;
47
27
  // ---------------------------------------------------------------------------
48
- // Testnet-only: shared object IDs for test token minting (zap mock)
49
- // ---------------------------------------------------------------------------
50
- // PrincipalTokenAdmin is a shared object created during package publish.
51
- // On testnet, the zap flow calls test_principal_token::mint instead of a DEX
52
- // aggregator. On mainnet this is unused — real DEX swap via Aftermath.
53
- const SUI_PRINCIPAL_TOKEN_ADMIN_TESTNET = '0x8fddf5d4465b5e9562686b1becba04d233d47626f9a82e20c6383a600f93270f';
54
- const SUI_MINT_PRINCIPAL_FUNCTION = `${SUI_PACKAGE_ID}::test_principal_token::mint`;
55
- // ---------------------------------------------------------------------------
56
28
  // Placeholder bill image (shown until backend enrichment is available)
57
29
  // ---------------------------------------------------------------------------
58
30
  const SUI_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg';
59
31
 
60
- export { IS_SUI_MAINNET, SUI_BOND_MARKET, SUI_BOND_NFT_REGISTRY, SUI_CLAIM_FUNCTION, SUI_DEPOSIT_FUNCTION, SUI_FULLNODE_URL, SUI_MINT_PRINCIPAL_FUNCTION, SUI_PACKAGE_ID, SUI_PLACEHOLDER_BILL_IMAGE, SUI_PRINCIPAL_TOKEN_ADMIN_TESTNET, SUI_TREASURY };
32
+ export { IS_SUI_MAINNET, SUI_CLAIM_FUNCTION, SUI_DEPOSIT_FUNCTION, SUI_FULLNODE_URL, SUI_PACKAGE_ID, SUI_PLACEHOLDER_BILL_IMAGE };
61
33
  //# sourceMappingURL=suiConstants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"suiConstants.js","sources":["../../src/constants/suiConstants.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Env gating — use NEXT_PUBLIC_SUI_NETWORK to control mainnet vs testnet.\n// Defaults to testnet until mainnet contracts are deployed and verified.\n// Set NEXT_PUBLIC_SUI_NETWORK=mainnet to switch to mainnet.\n// ---------------------------------------------------------------------------\nexport const IS_SUI_MAINNET = typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_SUI_NETWORK === 'mainnet'\n\nexport const SUI_NETWORK: 'mainnet' | 'testnet' = IS_SUI_MAINNET ? 'mainnet' : 'testnet'\n\n// ---------------------------------------------------------------------------\n// Package ID (single Move package containing bond, factory, treasury modules)\n// ---------------------------------------------------------------------------\n// Testnet address is the current apebond-move-sui deployment.\n// Mainnet is a placeholder until a mainnet deploy lands.\n// TODO(sui): Replace SUI_PACKAGE_ID_MAINNET when mainnet is deployed.\nconst SUI_PACKAGE_ID_TESTNET = '0x50c08fbf9c330f7658e1400f847f46b76165c8a68630e09a2d5ade0ceaa47264'\nconst SUI_PACKAGE_ID_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nexport const SUI_PACKAGE_ID = IS_SUI_MAINNET ? SUI_PACKAGE_ID_MAINNET : SUI_PACKAGE_ID_TESTNET\n\n// Warn loudly if we ever end up in production with the placeholder address —\n// that would silently break every Sui interaction.\nif (\n typeof window !== 'undefined' &&\n IS_SUI_MAINNET &&\n SUI_PACKAGE_ID === SUI_PACKAGE_ID_MAINNET &&\n SUI_PACKAGE_ID_MAINNET.startsWith('0x0000')\n) {\n console.warn(\n '[ApeBond SDK] SUI_PACKAGE_ID is still the placeholder in production. ' +\n 'Replace SUI_PACKAGE_ID_MAINNET in src/constants/suiConstants.ts before shipping.',\n )\n}\n\n// ---------------------------------------------------------------------------\n// Shared object IDs (testnet / mainnet)\n// ---------------------------------------------------------------------------\nconst SUI_BOND_NFT_REGISTRY_TESTNET = '0x8e9a26ff170e0bd42aaa6c4a8d05c49e9a3f68ce086590a35e49abb7c9e98ee3'\nconst SUI_BOND_NFT_REGISTRY_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nconst SUI_BOND_MARKET_TESTNET = '0x09b35be15cf3567d9a19a7aa35de08264549dc84d81fe30c5953c9d7fa5abaa3'\nconst SUI_BOND_MARKET_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nconst SUI_TREASURY_TESTNET = '0xde1e50b1ce7ca0effe23cfe1bfd46e438f53887db0417fb653f1033501ce056f'\nconst SUI_TREASURY_MAINNET = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nexport const SUI_BOND_NFT_REGISTRY = IS_SUI_MAINNET ? SUI_BOND_NFT_REGISTRY_MAINNET : SUI_BOND_NFT_REGISTRY_TESTNET\nexport const SUI_BOND_MARKET = IS_SUI_MAINNET ? SUI_BOND_MARKET_MAINNET : SUI_BOND_MARKET_TESTNET\nexport const SUI_TREASURY = IS_SUI_MAINNET ? SUI_TREASURY_MAINNET : SUI_TREASURY_TESTNET\n\n// ---------------------------------------------------------------------------\n// Network endpoints (fullnode + explorer)\n// ---------------------------------------------------------------------------\n// Sui public RPC does not require API keys.\nexport const SUI_FULLNODE_URL = IS_SUI_MAINNET\n ? 'https://fullnode.mainnet.sui.io:443'\n : 'https://fullnode.testnet.sui.io:443'\n\nexport const SUI_EXPLORER_URL = IS_SUI_MAINNET ? 'https://suiscan.xyz/mainnet' : 'https://suiscan.xyz/testnet'\n\n// ---------------------------------------------------------------------------\n// Module / entry function paths (stable across networks)\n// ---------------------------------------------------------------------------\n// Built directly from `SUI_PACKAGE_ID` so each path follows the\n// `package::module::function` convention used by the Sui Move VM.\nexport const SUI_BOND_MODULE = `${SUI_PACKAGE_ID}::bond`\n\n// Entry functions (write path)\nexport const SUI_DEPOSIT_FUNCTION = `${SUI_PACKAGE_ID}::bond::deposit`\nexport const SUI_CLAIM_FUNCTION = `${SUI_PACKAGE_ID}::bond::claim`\n\n// View / read functions\nexport const SUI_VIEW_MARKET_INFO = `${SUI_PACKAGE_ID}::bond::market_info`\nexport const SUI_VIEW_BILL_INFO = `${SUI_PACKAGE_ID}::bond::bill_info`\nexport const SUI_VIEW_VESTING_PROGRESS = `${SUI_PACKAGE_ID}::bond::vesting_progress`\nexport const SUI_VIEW_USER_BILLS = `${SUI_PACKAGE_ID}::bond_nft::user_bills`\n\n// ---------------------------------------------------------------------------\n// Testnet-only: shared object IDs for test token minting (zap mock)\n// ---------------------------------------------------------------------------\n// PrincipalTokenAdmin is a shared object created during package publish.\n// On testnet, the zap flow calls test_principal_token::mint instead of a DEX\n// aggregator. On mainnet this is unused — real DEX swap via Aftermath.\nexport const SUI_PRINCIPAL_TOKEN_ADMIN_TESTNET = '0x8fddf5d4465b5e9562686b1becba04d233d47626f9a82e20c6383a600f93270f'\nexport const SUI_MINT_PRINCIPAL_FUNCTION = `${SUI_PACKAGE_ID}::test_principal_token::mint`\n\n// ---------------------------------------------------------------------------\n// Placeholder bill image (shown until backend enrichment is available)\n// ---------------------------------------------------------------------------\nexport const SUI_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg'\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,uBAAuB,KAAK;AAIzG;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,GAAG,oEAAoE;AACnG,MAAM,sBAAsB,GAAG,oEAAoE;AAE5F,MAAM,cAAc,GAAG,cAAc,GAAG,sBAAsB,GAAG;AAExE;AACA;AACA,IACE,OAAO,MAAM,KAAK,WAAW;IAC7B,cAAc;AACd,IAAA,cAAc,KAAK,sBAAsB;AACzC,IAAA,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC3C;IACA,OAAO,CAAC,IAAI,CACV,uEAAuE;AACrE,QAAA,kFAAkF,CACrF;AACH;AAEA;AACA;AACA;AACA,MAAM,6BAA6B,GAAG,oEAAoE;AAC1G,MAAM,6BAA6B,GAAG,oEAAoE;AAE1G,MAAM,uBAAuB,GAAG,oEAAoE;AACpG,MAAM,uBAAuB,GAAG,oEAAoE;AAEpG,MAAM,oBAAoB,GAAG,oEAAoE;AACjG,MAAM,oBAAoB,GAAG,oEAAoE;AAE1F,MAAM,qBAAqB,GAAG,cAAc,GAAG,6BAA6B,GAAG;AAC/E,MAAM,eAAe,GAAG,cAAc,GAAG,uBAAuB,GAAG;AACnE,MAAM,YAAY,GAAG,cAAc,GAAG,oBAAoB,GAAG;AAEpE;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GAAG;AAC9B,MAAE;MACA;AAWJ;AACO,MAAM,oBAAoB,GAAG,CAAA,EAAG,cAAc;AAC9C,MAAM,kBAAkB,GAAG,CAAA,EAAG,cAAc;AAQnD;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iCAAiC,GAAG;AAC1C,MAAM,2BAA2B,GAAG,CAAA,EAAG,cAAc;AAE5D;AACA;AACA;AACO,MAAM,0BAA0B,GAAG;;;;"}
1
+ {"version":3,"file":"suiConstants.js","sources":["../../src/constants/suiConstants.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Env gating — use NEXT_PUBLIC_SUI_NETWORK to control mainnet vs testnet.\n// Defaults to testnet until mainnet contracts are deployed and verified.\n// Set NEXT_PUBLIC_SUI_NETWORK=mainnet to switch to mainnet.\n// ---------------------------------------------------------------------------\nexport const IS_SUI_MAINNET = true\n\nexport const SUI_NETWORK: 'mainnet' | 'testnet' = IS_SUI_MAINNET ? 'mainnet' : 'testnet'\n\n// ---------------------------------------------------------------------------\n// Package ID (single Move package containing bond, factory, treasury modules)\n// ---------------------------------------------------------------------------\n// Testnet address is the current apebond-move-sui deployment.\n// MAINNET-TODO: Replace with your mainnet package ID after deploying contracts.\nconst SUI_PACKAGE_ID_TESTNET = '0x50c08fbf9c330f7658e1400f847f46b76165c8a68630e09a2d5ade0ceaa47264'\nconst SUI_PACKAGE_ID_MAINNET = '0x802ed2854f6523fc106644da079e0758ca759f63d9d577774b79c51b91f1a460'\n\nexport const SUI_PACKAGE_ID = IS_SUI_MAINNET ? SUI_PACKAGE_ID_MAINNET : SUI_PACKAGE_ID_TESTNET\n\n// Warn loudly if we ever end up in production with the placeholder address —\n// that would silently break every Sui interaction.\nif (\n typeof window !== 'undefined' &&\n IS_SUI_MAINNET &&\n SUI_PACKAGE_ID === SUI_PACKAGE_ID_MAINNET &&\n SUI_PACKAGE_ID_MAINNET.startsWith('0x0000')\n) {\n console.warn(\n '[ApeBond SDK] SUI_PACKAGE_ID is still the placeholder in production. ' +\n 'Replace SUI_PACKAGE_ID_MAINNET in src/constants/suiConstants.ts before shipping.',\n )\n}\n\n// ---------------------------------------------------------------------------\n// Network endpoints (fullnode + explorer)\n// ---------------------------------------------------------------------------\n// Sui public RPC does not require API keys.\nexport const SUI_FULLNODE_URL = IS_SUI_MAINNET\n ? 'https://fullnode.mainnet.sui.io:443'\n : 'https://fullnode.testnet.sui.io:443'\n\n// ---------------------------------------------------------------------------\n// Module / entry function paths (stable across networks)\n// ---------------------------------------------------------------------------\n// Built directly from `SUI_PACKAGE_ID` so each path follows the\n// `package::module::function` convention used by the Sui Move VM.\nexport const SUI_BOND_MODULE = `${SUI_PACKAGE_ID}::bond`\n\n// Entry functions (write path)\nexport const SUI_DEPOSIT_FUNCTION = `${SUI_PACKAGE_ID}::bond::deposit`\nexport const SUI_CLAIM_FUNCTION = `${SUI_PACKAGE_ID}::bond::claim`\n\n// View / read functions\nexport const SUI_VIEW_MARKET_INFO = `${SUI_PACKAGE_ID}::bond::market_info`\nexport const SUI_VIEW_BILL_INFO = `${SUI_PACKAGE_ID}::bond::bill_info`\nexport const SUI_VIEW_VESTING_PROGRESS = `${SUI_PACKAGE_ID}::bond::vesting_progress`\nexport const SUI_VIEW_USER_BILLS = `${SUI_PACKAGE_ID}::bond_nft::user_bills`\n\n// ---------------------------------------------------------------------------\n// Placeholder bill image (shown until backend enrichment is available)\n// ---------------------------------------------------------------------------\nexport const SUI_PLACEHOLDER_BILL_IMAGE = 'https://www.ape.bond/images/bills/hidden-bill.jpg'\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG;AAU9B,MAAM,sBAAsB,GAAG,oEAAoE;AAE5F,MAAM,cAAc,GAAoB,sBAAsB;AAErE;AACA;AACA,IACE,OAAO,MAAM,KAAK,WAAW;IAC7B,cAAc;AACd,IAAA,cAAc,KAAK,sBAAsB;AACzC,IAAA,sBAAsB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC3C;IACA,OAAO,CAAC,IAAI,CACV,uEAAuE;AACrE,QAAA,kFAAkF,CACrF;AACH;AAEA;AACA;AACA;AACA;AACO,MAAM,gBAAgB,GACzB;;AAUJ;AACO,MAAM,oBAAoB,GAAG,CAAA,EAAG,cAAc;AAC9C,MAAM,kBAAkB,GAAG,CAAA,EAAG,cAAc;AAQnD;AACA;AACA;AACO,MAAM,0BAA0B,GAAG;;;;"}
@@ -0,0 +1,6 @@
1
+ import { BillsConfig } from '@ape.swap/apeswap-lists';
2
+ /**
3
+ * Discover Sui bonds by reading treasury bond_contracts tables on-chain.
4
+ * Returns BillsConfig[] ready for the enrichment pipeline (enrichSuiBonds).
5
+ */
6
+ export declare function discoverSuiBonds(treasuryAddresses?: string[]): Promise<BillsConfig[]>;
@@ -59,6 +59,7 @@ const extractMarketFields = (content) => {
59
59
  total_principal_billed: String(f.total_principal_billed ?? '0'),
60
60
  total_payout_given: String(f.total_payout_given ?? '0'),
61
61
  total_debt: String(f.total_debt ?? '0'),
62
+ last_decay: Number(f.last_decay ?? 0),
62
63
  payout_token_initial_supply: String(f.payout_token_initial_supply ?? '0'),
63
64
  payout_decimals: Number(f.payout_decimals ?? 9),
64
65
  principal_decimals: Number(f.principal_decimals ?? 9),
@@ -111,6 +112,7 @@ const enrichSuiBonds = async (bonds, prices, priceApiUrl) => {
111
112
  const payoutAddr = bond.earnToken.address[SUI_KEY]?.toLowerCase();
112
113
  let principalPrice = prices?.find((t) => t.tokenAddress.toLowerCase() === principalAddr)?.price;
113
114
  if (principalPrice === undefined) {
115
+ // principalPrice = 1
114
116
  try {
115
117
  const res = await axios.get(`${priceApiUrl}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`);
116
118
  principalPrice = res.data.price ?? 0;
@@ -122,20 +124,41 @@ const enrichSuiBonds = async (bonds, prices, priceApiUrl) => {
122
124
  }
123
125
  let payoutPrice = prices?.find((t) => t.tokenAddress.toLowerCase() === payoutAddr)?.price;
124
126
  if (payoutPrice === undefined) {
125
- try {
126
- // Missing token price, therefor make a single call to api to fetch it
127
- const res = await axios.get(`${priceApiUrl}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`);
128
- payoutPrice = res.data.price ?? 0;
129
- }
130
- catch {
131
- console.error('Failed to fetch price for: ', bond.earnToken.symbol);
132
- payoutPrice = 0;
133
- }
127
+ payoutPrice = 1;
128
+ // try {
129
+ // // Missing token price, therefor make a single call to api to fetch it
130
+ // const res = await axios.get(
131
+ // `${priceApiUrl}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,
132
+ // )
133
+ // payoutPrice = res.data.price ?? 0
134
+ // } catch {
135
+ // console.error('Failed to fetch price for: ', bond.earnToken.symbol)
136
+ // payoutPrice = 0
137
+ // }
134
138
  }
135
139
  // ---------- Compute true_bill_price client-side ----------
136
140
  const payoutDecimals = bond.earnToken.decimals[SUI_KEY] ?? fields.payout_decimals;
137
141
  const principalDecimals = bond.lpToken.decimals?.[SUI_KEY] ?? fields.principal_decimals;
138
- const totalDebt = BigInt(fields.total_debt);
142
+ // Apply debt decay to match on-chain behavior (bond_math::calculate_decay).
143
+ // The contract decays debt inside deposit(), but getObject returns the stale
144
+ // total_debt from the last interaction. Without this, the SDK shows a worse
145
+ // discount than the user actually gets.
146
+ const rawTotalDebt = BigInt(fields.total_debt);
147
+ const vestingTermSec = Number(fields.terms.fields.vesting_term);
148
+ const nowSec = Math.floor(Date.now() / 1000);
149
+ const elapsed = Math.max(0, nowSec - fields.last_decay);
150
+ let totalDebt = rawTotalDebt;
151
+ if (vestingTermSec > 0 && elapsed > 0 && rawTotalDebt > 0n) {
152
+ if (elapsed >= vestingTermSec) {
153
+ totalDebt = 0n;
154
+ }
155
+ else {
156
+ // decay = total_debt * elapsed / vesting_term, capped at 90%
157
+ const decay = (rawTotalDebt * BigInt(elapsed)) / BigInt(vestingTermSec);
158
+ const maxDecay = (rawTotalDebt * 90n) / 100n;
159
+ totalDebt = rawTotalDebt - (decay > maxDecay ? maxDecay : decay);
160
+ }
161
+ }
139
162
  const payoutInitialSupply = BigInt(fields.payout_token_initial_supply);
140
163
  const controlVariable = BigInt(fields.terms.fields.control_variable);
141
164
  const minimumPrice = BigInt(fields.terms.fields.minimum_price);
@@ -169,7 +192,11 @@ const enrichSuiBonds = async (bonds, prices, priceApiUrl) => {
169
192
  return {
170
193
  ...bond,
171
194
  suiTreasuryId: fields.treasury_id || undefined,
172
- soldOut: fields.paused || fields.emergency_paused ? true : bond.soldOut,
195
+ soldOut: fields.paused ||
196
+ fields.emergency_paused ||
197
+ new BigNumber(fields.total_payout_given).gte(fields.terms.fields.max_total_payout)
198
+ ? true
199
+ : bond.soldOut,
173
200
  maxTotalPayout: fields.terms.fields.max_total_payout,
174
201
  totalPayoutGiven: fields.total_payout_given,
175
202
  maxPayout: fields.terms.fields.max_payout,
@@ -1 +1 @@
1
- {"version":3,"file":"fetchBondsDataSui.js","sources":["../../../src/state/bonds/fetchBondsDataSui.ts"],"sourcesContent":["// =============================================================================\n// Sui bond enrichment — builds BondsData[] from BillsConfig[] + prices\n// =============================================================================\n//\n// On-chain first: reads BondMarket objects directly via getObject for each\n// config and projects the fields onto BondsData. No backend dependency\n// (realtime-api does not support Sui).\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 { getSuiClient } from '../../utils/suiHelpers'\nimport axios from 'axios'\n\nconst SUI_KEY = ChainId.SUI\n\n// Contract constants — must match the Move source\nconst PRICE_DECIMALS = 100_000_000n // 1e8\nconst PERCENTAGE_BASE = 1_000_000n // 1e6\n\n// ---------------------------------------------------------------------------\n// Helpers — replicate bond_math on the client so we can compute true_price\n// from the raw object fields without needing a view function call.\n// ---------------------------------------------------------------------------\n\nconst pow10 = (n: number): bigint => 10n ** BigInt(n)\n\n/** debt_ratio = (current_debt * payout_scale) / payout_initial_supply */\nconst calculateDebtRatio = (currentDebt: bigint, payoutInitialSupply: bigint, payoutScale: bigint): bigint => {\n if (payoutInitialSupply === 0n) return 0n\n return (currentDebt * payoutScale) / payoutInitialSupply\n}\n\n/** value_of_token — convert amount from one decimal basis to another */\nconst valueOfToken = (fromDecimals: number, toDecimals: number, amount: bigint): bigint => {\n if (toDecimals >= fromDecimals) {\n return amount * pow10(toDecimals - fromDecimals)\n }\n return amount / pow10(fromDecimals - toDecimals)\n}\n\n/** bond_price = (control_variable * debt_ratio * token_scale) / PRICE_DECIMALS */\nconst calculateBondPrice = (controlVariable: bigint, debtRatio: bigint, tokenScale: bigint): bigint => {\n const temp = controlVariable * debtRatio\n return (temp * tokenScale) / PRICE_DECIMALS\n}\n\n/** true_price = (base_price * PERCENTAGE_BASE) / (PERCENTAGE_BASE - fee_in_principal) */\nconst calculateTruePrice = (basePrice: bigint, feeInPrincipal: bigint, minimumPrice: bigint): bigint => {\n const denominator = PERCENTAGE_BASE - feeInPrincipal\n if (denominator === 0n) return basePrice\n const truePrice = (basePrice * PERCENTAGE_BASE) / denominator\n return truePrice < minimumPrice ? minimumPrice : truePrice\n}\n\n// ---------------------------------------------------------------------------\n// Object field extraction — Sui getObject returns nested content.fields\n// ---------------------------------------------------------------------------\n\ninterface SuiMarketFields {\n paused: boolean\n emergency_paused: boolean\n treasury_id: string\n total_principal_billed: string\n total_payout_given: string\n total_debt: string\n payout_token_initial_supply: string\n payout_decimals: number\n principal_decimals: number\n fee_in_principal: string\n fee_in_payout: string\n cliff_period: number\n terms: {\n fields: {\n control_variable: string\n vesting_term: string\n minimum_price: string\n max_payout: string\n max_debt: string\n max_total_payout: string\n }\n }\n}\n\nconst extractMarketFields = (content: any): SuiMarketFields | null => {\n if (!content?.fields) return null\n const f = content.fields\n const terms = f.terms?.fields ?? f.terms\n if (!terms) return null\n return {\n paused: Boolean(f.paused),\n emergency_paused: Boolean(f.emergency_paused),\n treasury_id: String(f.treasury_id ?? ''),\n total_principal_billed: String(f.total_principal_billed ?? '0'),\n total_payout_given: String(f.total_payout_given ?? '0'),\n total_debt: String(f.total_debt ?? '0'),\n payout_token_initial_supply: String(f.payout_token_initial_supply ?? '0'),\n payout_decimals: Number(f.payout_decimals ?? 9),\n principal_decimals: Number(f.principal_decimals ?? 9),\n fee_in_principal: String(f.fee_in_principal ?? '0'),\n fee_in_payout: String(f.fee_in_payout ?? '0'),\n cliff_period: f.vesting_config?.variant === 'CliffLinear' ? Number(f.vesting_config?.fields?.cliff_period ?? 0) : 0,\n terms: {\n fields: {\n control_variable: String(terms.control_variable ?? '0'),\n vesting_term: String(terms.vesting_term ?? '0'),\n minimum_price: String(terms.minimum_price ?? '0'),\n max_payout: String(terms.max_payout ?? '0'),\n max_debt: String(terms.max_debt ?? '0'),\n max_total_payout: String(terms.max_total_payout ?? '0'),\n },\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main enrichment function\n// ---------------------------------------------------------------------------\n\n/**\n * Enrich Sui bond configs into full BondsData objects.\n *\n * Reads each BondMarket object directly via `getObject` and computes\n * true_bill_price client-side using the same bond_math formulas as the\n * Move contract. Scale conversion: computed `true_bill_price` is u64\n * scaled by PRICE_DECIMALS = 1e8; the SDK stores `trueBondPrice` scaled\n * by 1e18 (legacy EVM format) → multiply by 1e10.\n */\nexport const enrichSuiBonds = async (\n bonds?: BillsConfig[],\n prices?: TokenPrices[],\n priceApiUrl?: string,\n): Promise<BondsData[]> => {\n if (!bonds || bonds?.length === 0) return []\n\n const client = getSuiClient()\n\n const enriched = await Promise.all(\n bonds.map(async (bond): Promise<BondsData | null> => {\n const marketAddr = bond.contractAddress[SUI_KEY]\n if (!marketAddr) return null\n try {\n const obj = await client.getObject({\n id: marketAddr,\n options: { showContent: true },\n })\n\n const fields = extractMarketFields(obj.data?.content)\n if (!fields) {\n console.warn(`[Sui] No content fields for market ${marketAddr}`)\n return null\n }\n\n const principalAddr = bond.lpToken.address[SUI_KEY]?.toLowerCase()\n const payoutAddr = bond.earnToken.address[SUI_KEY]?.toLowerCase()\n\n let principalPrice = prices?.find((t) => t.tokenAddress.toLowerCase() === principalAddr)?.price!\n if (principalPrice === undefined) {\n try {\n const res = await axios.get(\n `${priceApiUrl}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n principalPrice = res.data.price ?? 0\n } catch {\n console.error('Failed to fetch price for: ', bond.lpToken.symbol)\n principalPrice = 0\n }\n }\n\n let payoutPrice = prices?.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 `${priceApiUrl}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n payoutPrice = res.data.price ?? 0\n } catch {\n console.error('Failed to fetch price for: ', bond.earnToken.symbol)\n payoutPrice = 0\n }\n }\n\n // ---------- Compute true_bill_price client-side ----------\n const payoutDecimals = bond.earnToken.decimals[SUI_KEY] ?? fields.payout_decimals\n const principalDecimals = bond.lpToken.decimals?.[SUI_KEY] ?? fields.principal_decimals\n\n const totalDebt = BigInt(fields.total_debt)\n const payoutInitialSupply = BigInt(fields.payout_token_initial_supply)\n const controlVariable = BigInt(fields.terms.fields.control_variable)\n const minimumPrice = BigInt(fields.terms.fields.minimum_price)\n const feeInPrincipalRaw = BigInt(fields.fee_in_principal)\n\n // Replicate calculate_current_debt → calculate_price → calculate_true_price\n const currentDebtPayout = valueOfToken(principalDecimals, payoutDecimals, totalDebt)\n const payoutScale = pow10(payoutDecimals)\n const principalScale = pow10(principalDecimals)\n\n const debtRatio = calculateDebtRatio(currentDebtPayout, payoutInitialSupply, payoutScale)\n const basePrice = calculateBondPrice(controlVariable, debtRatio, principalScale)\n const trueBillPriceU64 = calculateTruePrice(basePrice, feeInPrincipalRaw, minimumPrice)\n\n // Convert on-chain u64 to SDK formats.\n // The on-chain price is used as: payout = value * 10^payoutDec / price\n // So \"principal per payout\" in human terms = price / 10^payoutDec.\n // The SDK's legacy format scales to 1e18: trueBondPriceScaled = price * 10^(18-payoutDec).\n const trueBondPriceScaled = (trueBillPriceU64 * pow10(18 - payoutDecimals)).toString()\n const trueBondPriceHuman = Number(trueBillPriceU64) / Math.pow(10, payoutDecimals)\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(fields.fee_in_payout) / 10_000\n const feeInPrincipal = Number(fields.fee_in_principal) / 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 tokensRemaining = new BigNumber(fields.terms.fields.max_total_payout)\n .minus(new BigNumber(fields.total_payout_given))\n .div(new BigNumber(10).pow(payoutDecimals))\n .toString()\n\n return {\n ...bond,\n suiTreasuryId: fields.treasury_id || undefined,\n soldOut: fields.paused || fields.emergency_paused ? true : bond.soldOut,\n maxTotalPayout: fields.terms.fields.max_total_payout,\n totalPayoutGiven: fields.total_payout_given,\n maxPayout: fields.terms.fields.max_payout,\n tokensRemaining,\n showcaseTokenName: bond.earnToken.symbol,\n vestingTerm: Number(fields.terms.fields.vesting_term),\n vestingCliff: fields.cliff_period || undefined,\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(`[Sui] Failed to read BondMarket 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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"}
1
+ {"version":3,"file":"fetchBondsDataSui.js","sources":["../../../src/state/bonds/fetchBondsDataSui.ts"],"sourcesContent":["// =============================================================================\n// Sui bond enrichment — builds BondsData[] from BillsConfig[] + prices\n// =============================================================================\n//\n// On-chain first: reads BondMarket objects directly via getObject for each\n// config and projects the fields onto BondsData. No backend dependency\n// (realtime-api does not support Sui).\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 { getSuiClient } from '../../utils/suiHelpers'\nimport axios from 'axios'\n\nconst SUI_KEY = ChainId.SUI\n\n// Contract constants — must match the Move source\nconst PRICE_DECIMALS = 100_000_000n // 1e8\nconst PERCENTAGE_BASE = 1_000_000n // 1e6\n\n// ---------------------------------------------------------------------------\n// Helpers — replicate bond_math on the client so we can compute true_price\n// from the raw object fields without needing a view function call.\n// ---------------------------------------------------------------------------\n\nconst pow10 = (n: number): bigint => 10n ** BigInt(n)\n\n/** debt_ratio = (current_debt * payout_scale) / payout_initial_supply */\nconst calculateDebtRatio = (currentDebt: bigint, payoutInitialSupply: bigint, payoutScale: bigint): bigint => {\n if (payoutInitialSupply === 0n) return 0n\n return (currentDebt * payoutScale) / payoutInitialSupply\n}\n\n/** value_of_token — convert amount from one decimal basis to another */\nconst valueOfToken = (fromDecimals: number, toDecimals: number, amount: bigint): bigint => {\n if (toDecimals >= fromDecimals) {\n return amount * pow10(toDecimals - fromDecimals)\n }\n return amount / pow10(fromDecimals - toDecimals)\n}\n\n/** bond_price = (control_variable * debt_ratio * token_scale) / PRICE_DECIMALS */\nconst calculateBondPrice = (controlVariable: bigint, debtRatio: bigint, tokenScale: bigint): bigint => {\n const temp = controlVariable * debtRatio\n return (temp * tokenScale) / PRICE_DECIMALS\n}\n\n/** true_price = (base_price * PERCENTAGE_BASE) / (PERCENTAGE_BASE - fee_in_principal) */\nconst calculateTruePrice = (basePrice: bigint, feeInPrincipal: bigint, minimumPrice: bigint): bigint => {\n const denominator = PERCENTAGE_BASE - feeInPrincipal\n if (denominator === 0n) return basePrice\n const truePrice = (basePrice * PERCENTAGE_BASE) / denominator\n return truePrice < minimumPrice ? minimumPrice : truePrice\n}\n\n// ---------------------------------------------------------------------------\n// Object field extraction — Sui getObject returns nested content.fields\n// ---------------------------------------------------------------------------\n\ninterface SuiMarketFields {\n paused: boolean\n emergency_paused: boolean\n treasury_id: string\n total_principal_billed: string\n total_payout_given: string\n total_debt: string\n last_decay: number\n payout_token_initial_supply: string\n payout_decimals: number\n principal_decimals: number\n fee_in_principal: string\n fee_in_payout: string\n cliff_period: number\n terms: {\n fields: {\n control_variable: string\n vesting_term: string\n minimum_price: string\n max_payout: string\n max_debt: string\n max_total_payout: string\n }\n }\n}\n\nconst extractMarketFields = (content: any): SuiMarketFields | null => {\n if (!content?.fields) return null\n const f = content.fields\n const terms = f.terms?.fields ?? f.terms\n if (!terms) return null\n return {\n paused: Boolean(f.paused),\n emergency_paused: Boolean(f.emergency_paused),\n treasury_id: String(f.treasury_id ?? ''),\n total_principal_billed: String(f.total_principal_billed ?? '0'),\n total_payout_given: String(f.total_payout_given ?? '0'),\n total_debt: String(f.total_debt ?? '0'),\n last_decay: Number(f.last_decay ?? 0),\n payout_token_initial_supply: String(f.payout_token_initial_supply ?? '0'),\n payout_decimals: Number(f.payout_decimals ?? 9),\n principal_decimals: Number(f.principal_decimals ?? 9),\n fee_in_principal: String(f.fee_in_principal ?? '0'),\n fee_in_payout: String(f.fee_in_payout ?? '0'),\n cliff_period: f.vesting_config?.variant === 'CliffLinear' ? Number(f.vesting_config?.fields?.cliff_period ?? 0) : 0,\n terms: {\n fields: {\n control_variable: String(terms.control_variable ?? '0'),\n vesting_term: String(terms.vesting_term ?? '0'),\n minimum_price: String(terms.minimum_price ?? '0'),\n max_payout: String(terms.max_payout ?? '0'),\n max_debt: String(terms.max_debt ?? '0'),\n max_total_payout: String(terms.max_total_payout ?? '0'),\n },\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main enrichment function\n// ---------------------------------------------------------------------------\n\n/**\n * Enrich Sui bond configs into full BondsData objects.\n *\n * Reads each BondMarket object directly via `getObject` and computes\n * true_bill_price client-side using the same bond_math formulas as the\n * Move contract. Scale conversion: computed `true_bill_price` is u64\n * scaled by PRICE_DECIMALS = 1e8; the SDK stores `trueBondPrice` scaled\n * by 1e18 (legacy EVM format) → multiply by 1e10.\n */\nexport const enrichSuiBonds = async (\n bonds?: BillsConfig[],\n prices?: TokenPrices[],\n priceApiUrl?: string,\n): Promise<BondsData[]> => {\n if (!bonds || bonds?.length === 0) return []\n\n const client = getSuiClient()\n\n const enriched = await Promise.all(\n bonds.map(async (bond): Promise<BondsData | null> => {\n const marketAddr = bond.contractAddress[SUI_KEY]\n if (!marketAddr) return null\n try {\n const obj = await client.getObject({\n id: marketAddr,\n options: { showContent: true },\n })\n\n const fields = extractMarketFields(obj.data?.content)\n if (!fields) {\n console.warn(`[Sui] No content fields for market ${marketAddr}`)\n return null\n }\n\n const principalAddr = bond.lpToken.address[SUI_KEY]?.toLowerCase()\n const payoutAddr = bond.earnToken.address[SUI_KEY]?.toLowerCase()\n\n let principalPrice = prices?.find((t) => t.tokenAddress.toLowerCase() === principalAddr)?.price!\n if (principalPrice === undefined) {\n // principalPrice = 1\n try {\n const res = await axios.get(\n `${priceApiUrl}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n principalPrice = res.data.price ?? 0\n } catch {\n console.error('Failed to fetch price for: ', bond.lpToken.symbol)\n principalPrice = 0\n }\n }\n\n let payoutPrice = prices?.find((t) => t.tokenAddress.toLowerCase() === payoutAddr)?.price!\n if (payoutPrice === undefined) {\n payoutPrice = 1\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=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n // )\n // payoutPrice = res.data.price ?? 0\n // } catch {\n // console.error('Failed to fetch price for: ', bond.earnToken.symbol)\n // payoutPrice = 0\n // }\n }\n\n // ---------- Compute true_bill_price client-side ----------\n const payoutDecimals = bond.earnToken.decimals[SUI_KEY] ?? fields.payout_decimals\n const principalDecimals = bond.lpToken.decimals?.[SUI_KEY] ?? fields.principal_decimals\n\n // Apply debt decay to match on-chain behavior (bond_math::calculate_decay).\n // The contract decays debt inside deposit(), but getObject returns the stale\n // total_debt from the last interaction. Without this, the SDK shows a worse\n // discount than the user actually gets.\n const rawTotalDebt = BigInt(fields.total_debt)\n const vestingTermSec = Number(fields.terms.fields.vesting_term)\n const nowSec = Math.floor(Date.now() / 1000)\n const elapsed = Math.max(0, nowSec - fields.last_decay)\n let totalDebt = rawTotalDebt\n if (vestingTermSec > 0 && elapsed > 0 && rawTotalDebt > 0n) {\n if (elapsed >= vestingTermSec) {\n totalDebt = 0n\n } else {\n // decay = total_debt * elapsed / vesting_term, capped at 90%\n const decay = (rawTotalDebt * BigInt(elapsed)) / BigInt(vestingTermSec)\n const maxDecay = (rawTotalDebt * 90n) / 100n\n totalDebt = rawTotalDebt - (decay > maxDecay ? maxDecay : decay)\n }\n }\n\n const payoutInitialSupply = BigInt(fields.payout_token_initial_supply)\n const controlVariable = BigInt(fields.terms.fields.control_variable)\n const minimumPrice = BigInt(fields.terms.fields.minimum_price)\n const feeInPrincipalRaw = BigInt(fields.fee_in_principal)\n\n // Replicate calculate_current_debt → calculate_price → calculate_true_price\n const currentDebtPayout = valueOfToken(principalDecimals, payoutDecimals, totalDebt)\n const payoutScale = pow10(payoutDecimals)\n const principalScale = pow10(principalDecimals)\n\n const debtRatio = calculateDebtRatio(currentDebtPayout, payoutInitialSupply, payoutScale)\n const basePrice = calculateBondPrice(controlVariable, debtRatio, principalScale)\n const trueBillPriceU64 = calculateTruePrice(basePrice, feeInPrincipalRaw, minimumPrice)\n\n // Convert on-chain u64 to SDK formats.\n // The on-chain price is used as: payout = value * 10^payoutDec / price\n // So \"principal per payout\" in human terms = price / 10^payoutDec.\n // The SDK's legacy format scales to 1e18: trueBondPriceScaled = price * 10^(18-payoutDec).\n const trueBondPriceScaled = (trueBillPriceU64 * pow10(18 - payoutDecimals)).toString()\n const trueBondPriceHuman = Number(trueBillPriceU64) / Math.pow(10, payoutDecimals)\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(fields.fee_in_payout) / 10_000\n const feeInPrincipal = Number(fields.fee_in_principal) / 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 tokensRemaining = new BigNumber(fields.terms.fields.max_total_payout)\n .minus(new BigNumber(fields.total_payout_given))\n .div(new BigNumber(10).pow(payoutDecimals))\n .toString()\n\n return {\n ...bond,\n suiTreasuryId: fields.treasury_id || undefined,\n soldOut:\n fields.paused ||\n fields.emergency_paused ||\n new BigNumber(fields.total_payout_given).gte(fields.terms.fields.max_total_payout)\n ? true\n : bond.soldOut,\n maxTotalPayout: fields.terms.fields.max_total_payout,\n totalPayoutGiven: fields.total_payout_given,\n maxPayout: fields.terms.fields.max_payout,\n tokensRemaining,\n showcaseTokenName: bond.earnToken.symbol,\n vestingTerm: Number(fields.terms.fields.vesting_term),\n vestingCliff: fields.cliff_period || undefined,\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(`[Sui] Failed to read BondMarket 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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"}
@@ -83,15 +83,23 @@ const calculateBondsData = async (queryClient) => {
83
83
  let aptosBonds = [];
84
84
  let suiBonds = [];
85
85
  try {
86
- if (reducedBonds &&
87
- tokenPrices &&
88
- (chains.includes(ChainId.APTOS) || chains.includes(ChainId.SUI))) {
89
- const [aptos, sui] = await Promise.all([
90
- enrichAptosBonds(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS], priceApiUrl),
91
- enrichSuiBonds(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI], priceApiUrl),
92
- ]);
93
- aptosBonds = aptos;
94
- suiBonds = sui;
86
+ if (reducedBonds && tokenPrices) {
87
+ const includesAptos = chains.includes(ChainId.APTOS);
88
+ const includesSui = chains.includes(ChainId.SUI);
89
+ if (includesAptos && includesSui) {
90
+ const [aptos, sui] = await Promise.all([
91
+ enrichAptosBonds(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS], priceApiUrl),
92
+ enrichSuiBonds(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI], priceApiUrl),
93
+ ]);
94
+ aptosBonds = aptos;
95
+ suiBonds = sui;
96
+ }
97
+ else if (includesAptos) {
98
+ aptosBonds = await enrichAptosBonds(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS], priceApiUrl);
99
+ }
100
+ else if (includesSui) {
101
+ suiBonds = await enrichSuiBonds(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI], priceApiUrl);
102
+ }
95
103
  }
96
104
  }
97
105
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\nimport { SDKProps } from '../useSDKConfig'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useBondsList from './useBondsList'\nimport { BillsConfig, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport useBondsListPreTGE from '../bonds/useBondsListPreTGE'\nimport { fetchBondsData, fetchBondsDataPreTGE } from './utils'\nimport { enrichAptosBonds } from './fetchBondsDataAptos'\nimport { enrichSuiBonds } from './fetchBondsDataSui'\n\nexport default function useBondsData(): UseQueryResult<BondsData[]> {\n const { data: bondList } = useBondsList()\n const { data: preTGEList } = useBondsListPreTGE()\n const { data: tokenPrices } = useTokenPrices()\n const tokenPricesKey = Object.keys(tokenPrices ?? {})?.length\n const queryClient = useQueryClient()\n\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_DATA],\n queryFn: () => calculateBondsData(queryClient),\n refetchInterval: 25000, // i.e. 25 sec\n enabled: !!bondList && !!preTGEList && !!tokenPricesKey,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: 0,\n staleTime: 25000, // i.e. 25 sec\n })\n}\n\nexport const calculateBondsData = async (queryClient: QueryClient): Promise<BondsData[]> => {\n // Firstly, we fetch some necessary data and prepare the ground to then fetch on.chain bonds data.\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiUrl = urls['realTimeApi']\n const apiUrl = urls['apiV2']\n const priceApiUrl = urls['priceApi']\n const bondList: BillsConfig[] = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as BillsConfig[]\n const preTGEList: PreTGEConfig[] = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]) as PreTGEConfig[]\n const tokenPrices: Partial<Record<ChainId, TokenPrices[]>> | undefined = queryClient?.getQueryData([\n QUERY_KEYS.TOKEN_PRICES,\n ])\n if (!tokenPrices) return []\n const reducedBonds = bondList?.reduce<Record<number, BillsConfig[]>>((acc, bill) => {\n const chainId = bill.chainId\n if (!acc[chainId]) {\n acc[chainId] = []\n }\n if (bill.contractAddress?.[chainId]?.toLowerCase() !== ACF_TO_ABOND.toLowerCase() && !bill.soldOut) {\n acc[chainId].push(bill)\n }\n return acc\n }, {})\n\n // Secondly we fetch EVM & SOL data from realtime\n let evmSolBondsData: BondsData[] = []\n\n try {\n // For EVM & SOL we first try to fetch from realtime, if it fails we trigger the fallback strategy.\n const realTimeApiResponse = await axios.get(`${realTimeApiUrl}/bonds`)\n evmSolBondsData = realTimeApiResponse.data.bonds.filter((bond: BondsData) => chains.includes(bond.chainId))\n } catch {\n // Fallback strategy\n if (bondList) {\n console.time('Fallback BondsData')\n const billData = await Promise.all([\n ...chains\n .filter((c) => c !== ChainId.APTOS && c !== ChainId.SUI)\n .map(async (chainId: ChainId) => {\n if (!reducedBonds[chainId]) return []\n return (\n (await fetchBondsData(chainId, reducedBonds[chainId], apiUrl, tokenPrices?.[chainId], priceApiUrl)) ?? []\n )\n }),\n ...chains.map(async (chainId: ChainId) => {\n const filteredBonds = preTGEList?.filter((bond) => bond.chainId === chainId) ?? []\n return await fetchBondsDataPreTGE(chainId, tokenPrices, filteredBonds, apiUrl)\n }),\n ])\n console.timeEnd('Fallback BondsData')\n evmSolBondsData = billData.flat()\n }\n }\n\n // Lastly, we fetch Aptos & Sui Bonds data\n let aptosBonds: BondsData[] = []\n let suiBonds: BondsData[] = []\n\n try {\n if (\n reducedBonds &&\n tokenPrices &&\n (chains.includes(ChainId.APTOS) || chains.includes(ChainId.SUI))\n ) {\n const [aptos, sui] = await Promise.all([\n enrichAptosBonds(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS], priceApiUrl),\n enrichSuiBonds(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI], priceApiUrl),\n ])\n aptosBonds = aptos\n suiBonds = sui\n }\n } catch (e) {\n console.error(e)\n }\n\n return [...evmSolBondsData, ...aptosBonds, ...suiBonds]\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\nimport { SDKProps } from '../useSDKConfig'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useBondsList from './useBondsList'\nimport { BillsConfig, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport useBondsListPreTGE from '../bonds/useBondsListPreTGE'\nimport { fetchBondsData, fetchBondsDataPreTGE } from './utils'\nimport { enrichAptosBonds } from './fetchBondsDataAptos'\nimport { enrichSuiBonds } from './fetchBondsDataSui'\n\nexport default function useBondsData(): UseQueryResult<BondsData[]> {\n const { data: bondList } = useBondsList()\n const { data: preTGEList } = useBondsListPreTGE()\n const { data: tokenPrices } = useTokenPrices()\n const tokenPricesKey = Object.keys(tokenPrices ?? {})?.length\n const queryClient = useQueryClient()\n\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_DATA],\n queryFn: () => calculateBondsData(queryClient),\n refetchInterval: 25000, // i.e. 25 sec\n enabled: !!bondList && !!preTGEList && !!tokenPricesKey,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: 0,\n staleTime: 25000, // i.e. 25 sec\n })\n}\n\nexport const calculateBondsData = async (queryClient: QueryClient): Promise<BondsData[]> => {\n // Firstly, we fetch some necessary data and prepare the ground to then fetch on.chain bonds data.\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiUrl = urls['realTimeApi']\n const apiUrl = urls['apiV2']\n const priceApiUrl = urls['priceApi']\n const bondList: BillsConfig[] = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as BillsConfig[]\n const preTGEList: PreTGEConfig[] = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]) as PreTGEConfig[]\n const tokenPrices: Partial<Record<ChainId, TokenPrices[]>> | undefined = queryClient?.getQueryData([\n QUERY_KEYS.TOKEN_PRICES,\n ])\n if (!tokenPrices) return []\n const reducedBonds = bondList?.reduce<Record<number, BillsConfig[]>>((acc, bill) => {\n const chainId = bill.chainId\n if (!acc[chainId]) {\n acc[chainId] = []\n }\n if (bill.contractAddress?.[chainId]?.toLowerCase() !== ACF_TO_ABOND.toLowerCase() && !bill.soldOut) {\n acc[chainId].push(bill)\n }\n return acc\n }, {})\n\n // Secondly we fetch EVM & SOL data from realtime\n let evmSolBondsData: BondsData[] = []\n\n try {\n // For EVM & SOL we first try to fetch from realtime, if it fails we trigger the fallback strategy.\n const realTimeApiResponse = await axios.get(`${realTimeApiUrl}/bonds`)\n evmSolBondsData = realTimeApiResponse.data.bonds.filter((bond: BondsData) => chains.includes(bond.chainId))\n } catch {\n // Fallback strategy\n if (bondList) {\n console.time('Fallback BondsData')\n const billData = await Promise.all([\n ...chains\n .filter((c) => c !== ChainId.APTOS && c !== ChainId.SUI)\n .map(async (chainId: ChainId) => {\n if (!reducedBonds[chainId]) return []\n return (\n (await fetchBondsData(chainId, reducedBonds[chainId], apiUrl, tokenPrices?.[chainId], priceApiUrl)) ?? []\n )\n }),\n ...chains.map(async (chainId: ChainId) => {\n const filteredBonds = preTGEList?.filter((bond) => bond.chainId === chainId) ?? []\n return await fetchBondsDataPreTGE(chainId, tokenPrices, filteredBonds, apiUrl)\n }),\n ])\n console.timeEnd('Fallback BondsData')\n evmSolBondsData = billData.flat()\n }\n }\n\n // Lastly, we fetch Aptos & Sui Bonds data\n let aptosBonds: BondsData[] = []\n let suiBonds: BondsData[] = []\n\n try {\n if (reducedBonds && tokenPrices) {\n const includesAptos = chains.includes(ChainId.APTOS)\n const includesSui = chains.includes(ChainId.SUI)\n\n if (includesAptos && includesSui) {\n const [aptos, sui] = await Promise.all([\n enrichAptosBonds(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS], priceApiUrl),\n enrichSuiBonds(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI], priceApiUrl),\n ])\n aptosBonds = aptos\n suiBonds = sui\n } else if (includesAptos) {\n aptosBonds = await enrichAptosBonds(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS], priceApiUrl)\n } else if (includesSui) {\n suiBonds = await enrichSuiBonds(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI], priceApiUrl)\n }\n }\n } catch (e) {\n console.error(e)\n }\n\n return [...evmSolBondsData, ...aptosBonds, ...suiBonds]\n}\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,6 @@
1
1
  import { useQueryClient, useQuery } from '@tanstack/react-query';
2
2
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
3
3
  import axios from 'axios';
4
- import { ChainId } from '@ape.swap/apeswap-lists';
5
- import { reportError } from '../../utils/reportError.js';
6
- import { getAptosBondsList } from './aptosBondsConfig.js';
7
- import { getSuiBondsList } from './suiBondsConfig.js';
8
4
 
9
5
  function useBondsList() {
10
6
  const queryClient = useQueryClient();
@@ -19,24 +15,28 @@ function useBondsList() {
19
15
  const getBondsList = async (queryClient) => {
20
16
  const { urls, customBranch } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]);
21
17
  const realTimeApiURL = urls['realTimeApi'];
22
- const apiUrl = urls['apiV2'];
23
- try {
24
- const response = await axios.get(`${realTimeApiURL}/utils/bonds${customBranch ? `?branch=${customBranch}` : ''}`);
25
- // TODO remove this fallback, from now on bonds should be fetched from list repo 'feat/sui-aptos' branch. Also remove try-catch
26
- // Always include static Aptos + Sui configs alongside API bonds
27
- const apiData = response.data ?? [];
28
- const aptosBonds = apiData.some((b) => b.chainId === ChainId.APTOS) ? [] : getAptosBondsList();
29
- const suiBonds = getSuiBondsList();
30
- return [...apiData, ...aptosBonds, ...suiBonds];
31
- }
32
- catch (e) {
33
- reportError({
34
- apiUrl,
35
- error: e,
36
- extraInfo: { type: 'getBondsList', e },
37
- });
38
- return [...getAptosBondsList(), ...getSuiBondsList()];
39
- }
18
+ const response = await axios.get(`${realTimeApiURL}/utils/bonds${customBranch ? `?branch=${customBranch}` : ''}`);
19
+ return response.data;
20
+ //
21
+ // try {
22
+ // const response = await axios.get(`${realTimeApiURL}/utils/bonds${customBranch ? `?branch=${customBranch}` : ''}`)
23
+ // // TODO remove this fallback, from now on bonds should be fetched from list repo 'feat/sui-aptos' branch. Also remove try-catch
24
+ //
25
+ // // Always include static Aptos + discovered Sui configs alongside API bonds
26
+ // const apiData: BillsConfig[] = response.data ?? []
27
+ // const nonSuiApiData = apiData.filter((b) => b.chainId !== ChainId.SUI)
28
+ // const aptosBonds = apiData.some((b) => b.chainId === ChainId.APTOS) ? [] : getAptosBondsList()
29
+ // const suiBonds = await discoverSuiBonds(suiTreasuryAddresses)
30
+ // return [...nonSuiApiData, ...aptosBonds, ...suiBonds]
31
+ // } catch (e) {
32
+ // reportError({
33
+ // apiUrl,
34
+ // error: e,
35
+ // extraInfo: { type: 'getBondsList', e },
36
+ // })
37
+ // const suiBonds = await discoverSuiBonds(suiTreasuryAddresses)
38
+ // return [...getAptosBondsList(), ...suiBonds]
39
+ // }
40
40
  };
41
41
 
42
42
  export { useBondsList as default, getBondsList };
@@ -1 +1 @@
1
- {"version":3,"file":"useBondsList.js","sources":["../../../src/state/bonds/useBondsList.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport axios from 'axios'\nimport { BillsConfig, ChainId } from '@ape.swap/apeswap-lists'\nimport { reportError } from '../../utils/reportError'\nimport { SDKProps } from '../useSDKConfig'\nimport { getAptosBondsList } from './aptosBondsConfig'\nimport { getSuiBondsList } from './suiBondsConfig'\n\nexport default function useBondsList(): UseQueryResult<BillsConfig[]> {\n const queryClient = useQueryClient()\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_LIST],\n queryFn: () => getBondsList(queryClient),\n staleTime: Infinity,\n refetchInterval: 300000, // 5 min\n refetchOnWindowFocus: false,\n })\n}\n\nexport const getBondsList = async (queryClient: QueryClient): Promise<BillsConfig[]> => {\n const { urls, customBranch } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiURL = urls['realTimeApi']\n const apiUrl = urls['apiV2']\n\n try {\n const response = await axios.get(`${realTimeApiURL}/utils/bonds${customBranch ? `?branch=${customBranch}` : ''}`)\n // TODO remove this fallback, from now on bonds should be fetched from list repo 'feat/sui-aptos' branch. Also remove try-catch\n\n // Always include static Aptos + Sui configs alongside API bonds\n const apiData: BillsConfig[] = response.data ?? []\n const aptosBonds = apiData.some((b) => b.chainId === ChainId.APTOS) ? [] : getAptosBondsList()\n const suiBonds = getSuiBondsList()\n return [...apiData, ...aptosBonds, ...suiBonds]\n } catch (e) {\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'getBondsList', e },\n })\n return [...getAptosBondsList(), ...getSuiBondsList()]\n }\n}\n"],"names":[],"mappings":";;;;;;;;AASc,SAAU,YAAY,GAAA;AAClC,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AACpC,IAAA,OAAO,QAAQ,CAAC;AACd,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;AACjC,QAAA,OAAO,EAAE,MAAM,YAAY,CAAC,WAAW,CAAC;AACxC,QAAA,SAAS,EAAE,QAAQ;QACnB,eAAe,EAAE,MAAM;AACvB,QAAA,oBAAoB,EAAE,KAAK;AAC5B,KAAA,CAAC;AACJ;MAEa,YAAY,GAAG,OAAO,WAAwB,KAA4B;AACrF,IAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAa;AAC7F,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;AAC1C,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAE5B,IAAA,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,cAAc,CAAA,YAAA,EAAe,YAAY,GAAG,CAAA,QAAA,EAAW,YAAY,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,CAAC;;;AAIjH,QAAA,MAAM,OAAO,GAAkB,QAAQ,CAAC,IAAI,IAAI,EAAE;AAClD,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,iBAAiB,EAAE;AAC9F,QAAA,MAAM,QAAQ,GAAG,eAAe,EAAE;QAClC,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAC;IACjD;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,WAAW,CAAC;YACV,MAAM;AACN,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE;AACvC,SAAA,CAAC;QACF,OAAO,CAAC,GAAG,iBAAiB,EAAE,EAAE,GAAG,eAAe,EAAE,CAAC;IACvD;AACF;;;;"}
1
+ {"version":3,"file":"useBondsList.js","sources":["../../../src/state/bonds/useBondsList.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport axios from 'axios'\nimport { BillsConfig } from '@ape.swap/apeswap-lists'\nimport { SDKProps } from '../useSDKConfig'\n\nexport default function useBondsList(): UseQueryResult<BillsConfig[]> {\n const queryClient = useQueryClient()\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_LIST],\n queryFn: () => getBondsList(queryClient),\n staleTime: Infinity,\n refetchInterval: 300000, // 5 min\n refetchOnWindowFocus: false,\n })\n}\n\nexport const getBondsList = async (queryClient: QueryClient): Promise<BillsConfig[]> => {\n const { urls, customBranch } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiURL = urls['realTimeApi']\n\n const response = await axios.get(`${realTimeApiURL}/utils/bonds${customBranch ? `?branch=${customBranch}` : ''}`)\n return response.data\n //\n // try {\n // const response = await axios.get(`${realTimeApiURL}/utils/bonds${customBranch ? `?branch=${customBranch}` : ''}`)\n // // TODO remove this fallback, from now on bonds should be fetched from list repo 'feat/sui-aptos' branch. Also remove try-catch\n //\n // // Always include static Aptos + discovered Sui configs alongside API bonds\n // const apiData: BillsConfig[] = response.data ?? []\n // const nonSuiApiData = apiData.filter((b) => b.chainId !== ChainId.SUI)\n // const aptosBonds = apiData.some((b) => b.chainId === ChainId.APTOS) ? [] : getAptosBondsList()\n // const suiBonds = await discoverSuiBonds(suiTreasuryAddresses)\n // return [...nonSuiApiData, ...aptosBonds, ...suiBonds]\n // } catch (e) {\n // reportError({\n // apiUrl,\n // error: e,\n // extraInfo: { type: 'getBondsList', e },\n // })\n // const suiBonds = await discoverSuiBonds(suiTreasuryAddresses)\n // return [...getAptosBondsList(), ...suiBonds]\n // }\n}\n"],"names":[],"mappings":";;;;AAMc,SAAU,YAAY,GAAA;AAClC,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AACpC,IAAA,OAAO,QAAQ,CAAC;AACd,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;AACjC,QAAA,OAAO,EAAE,MAAM,YAAY,CAAC,WAAW,CAAC;AACxC,QAAA,SAAS,EAAE,QAAQ;QACnB,eAAe,EAAE,MAAM;AACvB,QAAA,oBAAoB,EAAE,KAAK;AAC5B,KAAA,CAAC;AACJ;MAEa,YAAY,GAAG,OAAO,WAAwB,KAA4B;AACrF,IAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAa;AAC7F,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,cAAc,CAAA,YAAA,EAAe,YAAY,GAAG,CAAA,QAAA,EAAW,YAAY,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,CAAC;IACjH,OAAO,QAAQ,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;AAqBtB;;;;"}