@scallop-io/sui-scallop-sdk 1.3.4-alpha.7 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/constants/common.d.ts +3 -3
  2. package/dist/constants/enum.d.ts +1 -1
  3. package/dist/constants/index.d.ts +1 -0
  4. package/dist/constants/poolAddress.d.ts +1 -1
  5. package/dist/index.js +434 -335
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +434 -335
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/models/scallopQuery.d.ts +11 -3
  10. package/dist/models/scallopUtils.d.ts +1 -1
  11. package/dist/queries/borrowLimitQuery.d.ts +9 -0
  12. package/dist/queries/coreQuery.d.ts +2 -0
  13. package/dist/queries/index.d.ts +1 -0
  14. package/dist/queries/portfolioQuery.d.ts +2 -0
  15. package/dist/queries/sCoinQuery.d.ts +1 -1
  16. package/dist/queries/supplyLimitQuery.d.ts +2 -2
  17. package/dist/types/query/core.d.ts +2 -0
  18. package/dist/types/utils.d.ts +1 -1
  19. package/package.json +1 -1
  20. package/src/constants/coinGecko.ts +4 -2
  21. package/src/constants/common.ts +6 -1
  22. package/src/constants/enum.ts +20 -15
  23. package/src/constants/index.ts +1 -0
  24. package/src/constants/poolAddress.ts +7 -1
  25. package/src/constants/pyth.ts +2 -0
  26. package/src/constants/testAddress.ts +76 -35
  27. package/src/models/scallopBuilder.ts +2 -3
  28. package/src/models/scallopQuery.ts +26 -18
  29. package/src/models/scallopUtils.ts +5 -6
  30. package/src/queries/borrowLimitQuery.ts +52 -0
  31. package/src/queries/coreQuery.ts +238 -229
  32. package/src/queries/index.ts +1 -0
  33. package/src/queries/isolatedAssetQuery.ts +4 -5
  34. package/src/queries/priceQuery.ts +6 -4
  35. package/src/queries/referralQuery.ts +0 -1
  36. package/src/queries/spoolQuery.ts +1 -1
  37. package/src/queries/supplyLimitQuery.ts +22 -18
  38. package/src/types/query/core.ts +2 -0
  39. package/src/types/utils.ts +1 -1
package/dist/index.js CHANGED
@@ -102,11 +102,11 @@ var DEFAULT_CACHE_OPTIONS = {
102
102
 
103
103
  // src/constants/coinGecko.ts
104
104
  var COIN_GECKGO_IDS = {
105
- usdc: "usdc-coin",
105
+ usdc: "usdc",
106
106
  sbeth: "ethereum",
107
107
  weth: "ethereum",
108
108
  wbtc: "bitcoin",
109
- wusdc: "usdc-coin",
109
+ wusdc: "usdc",
110
110
  wusdt: "tether",
111
111
  sui: "sui",
112
112
  wapt: "aptos",
@@ -115,7 +115,9 @@ var COIN_GECKGO_IDS = {
115
115
  afsui: "sui",
116
116
  hasui: "sui",
117
117
  vsui: "sui",
118
- sca: "scallop-2"
118
+ sca: "scallop-2",
119
+ deep: "deepbook",
120
+ fud: "fud-the-pug"
119
121
  };
120
122
 
121
123
  // src/constants/common.ts
@@ -123,7 +125,7 @@ var API_BASE_URL = "https://sui.apis.scallop.io";
123
125
  var SDK_API_BASE_URL = "https://sdk.api.scallop.io";
124
126
  var IS_VE_SCA_TEST = false;
125
127
  var USE_TEST_ADDRESS = false;
126
- var ADDRESSES_ID = IS_VE_SCA_TEST || USE_TEST_ADDRESS ? "65fb07c39c845425d71d7b18" : "66f8e7ed9bb9e07fdfb86bbb";
128
+ var ADDRESSES_ID = IS_VE_SCA_TEST || USE_TEST_ADDRESS ? "65fb07c39c845425d71d7b18" : "675c65cd301dd817ea262e76";
127
129
  var PROTOCOL_OBJECT_ID = IS_VE_SCA_TEST ? "0xc9f859f98ca352a11b97a038c4b4162bee437b8df8caa047990fe9cb03d4f778" : "0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";
128
130
  var BORROW_FEE_PROTOCOL_ID = IS_VE_SCA_TEST ? "0xc9f859f98ca352a11b97a038c4b4162bee437b8df8caa047990fe9cb03d4f778" : "0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da";
129
131
  var SCA_COIN_TYPE = IS_VE_SCA_TEST ? `0x6cd813061a3adf3602b76545f076205f0c8e7ec1d3b1eab9a1da7992c18c0524::sca::SCA` : "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA";
@@ -144,7 +146,9 @@ var SUPPORT_POOLS = [
144
146
  "afsui",
145
147
  "hasui",
146
148
  "vsui",
147
- "sca"
149
+ "sca",
150
+ "fud",
151
+ "deep"
148
152
  ];
149
153
  var SUPPORT_COLLATERALS = [
150
154
  "usdc",
@@ -188,7 +192,9 @@ var SUPPORT_SCOIN = [
188
192
  "ssca",
189
193
  "scetus",
190
194
  "swsol",
191
- "swbtc"
195
+ "swbtc",
196
+ "sdeep",
197
+ "sfud"
192
198
  ];
193
199
  var SUPPORT_SUI_BRIDGE = ["sbeth"];
194
200
  var SUPPORT_WORMHOLE = [
@@ -245,6 +251,8 @@ var coinDecimals = {
245
251
  hasui: 9,
246
252
  vsui: 9,
247
253
  sca: 9,
254
+ deep: 6,
255
+ fud: 5,
248
256
  susdc: 6,
249
257
  sweth: 8,
250
258
  ssbeth: 8,
@@ -258,7 +266,9 @@ var coinDecimals = {
258
266
  safsui: 9,
259
267
  shasui: 9,
260
268
  svsui: 9,
261
- ssca: 9
269
+ ssca: 9,
270
+ sdeep: 6,
271
+ sfud: 5
262
272
  };
263
273
  var assetCoins = {
264
274
  usdc: "usdc",
@@ -274,7 +284,9 @@ var assetCoins = {
274
284
  afsui: "afsui",
275
285
  hasui: "hasui",
276
286
  vsui: "vsui",
277
- sca: "sca"
287
+ sca: "sca",
288
+ deep: "deep",
289
+ fud: "fud"
278
290
  };
279
291
  var marketCoins = {
280
292
  susdc: "susdc",
@@ -290,7 +302,9 @@ var marketCoins = {
290
302
  safsui: "safsui",
291
303
  shasui: "shasui",
292
304
  svsui: "svsui",
293
- ssca: "ssca"
305
+ ssca: "ssca",
306
+ sdeep: "sdeep",
307
+ sfud: "sfud"
294
308
  };
295
309
  var sCoins = {
296
310
  susdc: "susdc",
@@ -305,7 +319,9 @@ var sCoins = {
305
319
  svsui: "svsui",
306
320
  ssca: "ssca",
307
321
  swsol: "swsol",
308
- swbtc: "swbtc"
322
+ swbtc: "swbtc",
323
+ sfud: "sfud",
324
+ sdeep: "sdeep"
309
325
  };
310
326
  var stakeMarketCoins = {
311
327
  susdc: "susdc",
@@ -358,7 +374,10 @@ var coinIds = {
358
374
  afsui: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",
359
375
  hasui: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",
360
376
  vsui: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",
361
- sca: IS_VE_SCA_TEST ? "0x6cd813061a3adf3602b76545f076205f0c8e7ec1d3b1eab9a1da7992c18c0524" : "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6"
377
+ sca: IS_VE_SCA_TEST ? "0x6cd813061a3adf3602b76545f076205f0c8e7ec1d3b1eab9a1da7992c18c0524" : "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",
378
+ // isolated assets
379
+ deep: "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",
380
+ fud: "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1"
362
381
  };
363
382
  var wormholeCoinIds = {
364
383
  weth: "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",
@@ -384,7 +403,9 @@ var sCoinIds = {
384
403
  shasui: "0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",
385
404
  svsui: "0xe1a1cc6bcf0001a015eab84bcc6713393ce20535f55b8b6f35c142e057a25fbe::scallop_v_sui::SCALLOP_V_SUI",
386
405
  swsol: "0x1392650f2eca9e3f6ffae3ff89e42a3590d7102b80e2b430f674730bc30d3259::scallop_wormhole_sol::SCALLOP_WORMHOLE_SOL",
387
- swbtc: "0x2cf76a9cf5d3337961d1154283234f94da2dcff18544dfe5cbdef65f319591b5::scallop_wormhole_btc::SCALLOP_WORMHOLE_BTC"
406
+ swbtc: "0x2cf76a9cf5d3337961d1154283234f94da2dcff18544dfe5cbdef65f319591b5::scallop_wormhole_btc::SCALLOP_WORMHOLE_BTC",
407
+ sdeep: "0xeb7a05a3224837c5e5503575aed0be73c091d1ce5e43aa3c3e716e0ae614608f::scallop_deep::SCALLOP_DEEP",
408
+ sfud: "0xe56d5167f427cbe597da9e8150ef5c337839aaf46891d62468dcf80bdd8e10d1::scallop_fud::SCALLOP_FUD"
388
409
  };
389
410
  var sCoinTypeToName = Object.entries(sCoinIds).reduce(
390
411
  (acc, [coinName, coinType]) => {
@@ -467,6 +488,12 @@ var POOL_ADDRESSES = {
467
488
  sca: {
468
489
  lendingPoolAddress: "0x6fc7d4211fc7018b6c75e7b908b88f2e0536443239804a3d32af547637bd28d7",
469
490
  collateralPoolAddress: "0xff677a5d9e9dc8f08f0a8681ebfc7481d1c7d57bc441f2881974adcdd7b13c31"
491
+ },
492
+ fud: {
493
+ lendingPoolAddress: ""
494
+ },
495
+ deep: {
496
+ lendingPoolAddress: ""
470
497
  }
471
498
  };
472
499
 
@@ -489,7 +516,9 @@ var PYTH_FEED_IDS = {
489
516
  afsui: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
490
517
  hasui: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
491
518
  vsui: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
492
- sca: "7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc"
519
+ sca: "7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",
520
+ deep: "29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",
521
+ fud: "6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75"
493
522
  };
494
523
 
495
524
  // src/constants/queryKeys.ts
@@ -594,20 +623,33 @@ var TEST_ADDRESSES = {
594
623
  core: {
595
624
  // version:
596
625
  // '0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7',
597
- version: "0x6156d5cd1538bec8a167a40fe1209a4ec9cf8137921fe0a697f191ac561f0b09",
626
+ version: "0xd318de9b0f6873879a82cbfcc2daa1d1591a8b54e7cea9f4b567da63c692a52b",
598
627
  versionCap: "0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",
599
628
  // object:
600
629
  // '0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf',
601
- object: "0x87ddec2984645dbbe2403a509cc6edf393a43acdba9b77d45da2bcbefcf733c1",
630
+ object: "0x6c23585e940a989588432509107e98bae06dbca4e333f26d0635d401b3c7c76d",
602
631
  // market:
603
632
  // '0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9',
604
- market: "0x8606ed145cc887985b8ed793f7753ff5dc762a42c379dac035f568e1bac58490",
633
+ market: "0x9d6434e97f3f98fd9b0c0e1dca22632073985abcd22541feae7ee1e34cbe3af2",
605
634
  adminCap: "0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",
606
635
  coinDecimalsRegistry: "0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",
607
636
  // obligationAccessStore:
608
637
  // '0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9',
609
- obligationAccessStore: "0x48b472d68ca910c45f7f3b6c26836b6aa6d2569810d94b1b939023da05ae0a23",
638
+ obligationAccessStore: "0x46e9b44a77ee9c9d33cc2689ecdfbb8f681935cbc6bdf6ac3df048e396c36c82",
610
639
  coins: {
640
+ usdc: {
641
+ id: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",
642
+ metaData: "0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",
643
+ treasury: "",
644
+ oracle: {
645
+ supra: "",
646
+ switchboard: "",
647
+ pyth: {
648
+ feed: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
649
+ feedObject: "0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"
650
+ }
651
+ }
652
+ },
611
653
  cetus: {
612
654
  id: "0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",
613
655
  metaData: "0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",
@@ -763,6 +805,19 @@ var TEST_ADDRESSES = {
763
805
  feedObject: "0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"
764
806
  }
765
807
  }
808
+ },
809
+ sbeth: {
810
+ id: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29",
811
+ metaData: "0x89b04ba87f8832d4d76e17a1c9dce72eb3e64d372cf02012b8d2de5384faeef0",
812
+ treasury: "",
813
+ oracle: {
814
+ supra: "",
815
+ switchboard: "",
816
+ pyth: {
817
+ feed: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",
818
+ feedObject: "0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"
819
+ }
820
+ }
766
821
  }
767
822
  },
768
823
  oracles: {
@@ -796,7 +851,7 @@ var TEST_ADDRESSES = {
796
851
  upgradeCap: "0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"
797
852
  },
798
853
  protocol: {
799
- id: "0x87ddec2984645dbbe2403a509cc6edf393a43acdba9b77d45da2bcbefcf733c1",
854
+ id: "0xb784ea287d944e478a3ceaa071f8885072cce6b7224cf245914dc2f9963f460e",
800
855
  upgradeCap: "0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"
801
856
  },
802
857
  // protocol: {
@@ -814,7 +869,7 @@ var TEST_ADDRESSES = {
814
869
  // '0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f',
815
870
  // },
816
871
  query: {
817
- id: "0xe4f9d62d17746d5b9dbf0d5557747430021a71575780b515161210cdba0a4c1c",
872
+ id: "0x89706958f43fb170de134579e3fbc53972b946ee78bd2442d8e1adc36074fbdc",
818
873
  upgradeCap: "0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"
819
874
  },
820
875
  supra: { id: "", upgradeCap: "" },
@@ -850,6 +905,10 @@ var TEST_ADDRESSES = {
850
905
  "0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"
851
906
  )
852
907
  },
908
+ susdc: {
909
+ id: "0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",
910
+ rewardPoolId: "0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"
911
+ },
853
912
  swusdc: {
854
913
  // id: '0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0',
855
914
  id: "0xf1b383b9cf2e9f515fc69567df1053098f273849d09cd84b0278a773429bd2b2",
@@ -898,37 +957,37 @@ var TEST_ADDRESSES = {
898
957
  config: ""
899
958
  },
900
959
  borrowIncentive: {
901
- id: "0x6152f696fc3a658f33c4b891764731a59153125ffedfa8bff7167c42823f58a9",
902
- adminCap: "0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",
903
- object: "0x002875153e09f8145ab63527bc85c00f2bd102e12f9573c47f8cdf1a1cb62934",
904
- query: "0x529edc54a3dce2207703ceebbccb0ac14133f7825c1f528775ba0d85a4063489",
905
- incentivePools: "0x6547e143d406b5ccd5f46aae482497de279cc1a68c406f701df70a05f9212ab4",
906
- incentiveAccounts: "0xc4701fdbc1c92f9a636d334d66012b3027659e9fb8aff27279a82edfb6b77d02",
907
- config: "0xdf5d04b4691cc67e82fd4db8394d89ff44823a9de29716c924f74bb4f11cc1f7"
960
+ id: "0x85769d63565ce99c7622f8e336ca1460926ddf29738ad2a39407b5cac29f61fe",
961
+ adminCap: "0x56ac8e6f2b360b2b35c0168d72cc6cd17d9592afb83709865cb87af24bb2025b",
962
+ object: "0x85769d63565ce99c7622f8e336ca1460926ddf29738ad2a39407b5cac29f61fe",
963
+ query: "0x8e0d00f8ff1199d7c5fe56cea0e901a525daeefff0445a1635ace8282ae3302c",
964
+ incentivePools: "0x9d564c93128c6ab0c0d3e050a47f11df0b91494f3bb779bdc1301c1c637f15eb",
965
+ incentiveAccounts: "0x09e6040e798246de04941bc79a3ba62d3eca6d7a218cc30f21fb07f478fa2926",
966
+ config: "0x43d4ca1dfc90b161c4240facd119e74e4b850cca2957f88c2ec289c9380da064"
908
967
  },
909
968
  referral: {
910
- id: "0xa3654ebb63eb06c0f4ff52f8aa6512df9f164f7772bdf15dac3709bd3798dda9",
969
+ id: "0x1bf5a8ce77050d8052549d743e16b469f15aa6b81b752b78b6ebb65179665f5a",
911
970
  object: "0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",
912
971
  adminCap: "0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",
913
- referralBindings: "0xf63299d58789d99de94092b9011323466e55ca0c1ea1a7a3786a589af46e1c09",
914
- bindingTableId: "0x1c8202b17267ec8d6cf97ca013615354181a04f179570e42601ff2dae19294b1",
915
- referralRevenuePool: "0x6abd852caf90769c1b185cdf636d841673fa95528f0550f018b8a138bd283c07",
972
+ referralBindings: "0xcf184487782bed962bf678001efe775d31fb94b9992333a57594cf15d79d5ced",
973
+ bindingTableId: "0x41a50e258c0a266ce84e0e1a618dbf70b878cc943909e613089a50afcceb2bc0",
974
+ referralRevenuePool: "0xc24e3e5e37032f29a3dd91a9a1f057af8821b7e6c148e9683900ac8b6d30f0c6",
916
975
  revenueTableId: "0x595baa3654c297bff84ab7786a2d250f019cefc66e8df8e89fd9d41e02bd30dd",
917
- referralTiers: "0x962cb903d8d7346190c5204785ccbb91b61086aa764f674c8145df82335cf83e",
976
+ referralTiers: "0x144350f3db9b46d11b140084cd54e6de0b9c3b8d265ce8059b51d0ef58ea464b",
918
977
  tiersTableId: "0xeac755a7a8b7798530905ac79e8c114f19d0f130f6eab012954f08faac29c75d",
919
978
  // authorizedWitnessList:
920
979
  // '0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e',
921
980
  authorizedWitnessList: "0x9d6223dc52015b8a3986a573590ef2af8f1b8f3e4685513888c052f001b87e7f",
922
- version: "0x1bd4b7285f72e11c316b828c7c47b3f4da18dcec9f9b3dba6d8629cbb6f93e5e"
981
+ version: "0x3545849eb97723e676a476ec9d4fe5f2eb0eb2c6b78972851114fd4c7ed4639f"
923
982
  },
924
983
  vesca: {
925
- id: "0xb15b6e0cdd85afb5028bea851dd249405e734d800a259147bbc24980629723a4",
926
- object: "0xb15b6e0cdd85afb5028bea851dd249405e734d800a259147bbc24980629723a4",
984
+ id: "0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",
985
+ object: "0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",
927
986
  adminCap: "0x8ffa76135c5b85c5fbd73a6448a4a733d826cb63a267ab817656acb77c72d4a5",
928
- tableId: "0xe3153b2bf124be0b86cb8bd468346a861efd0da52fc42197b54d2f616488a311",
929
- table: "0x611cb8d9d4d90867467b5ebdf4cc447a0047ed5b01334a28a29fcfe733e3d609",
930
- treasury: "0xe8c112c09b88158dc6c8e23d1fbae5b3c7136cdee54b7dafc08e65db28c4a5bc",
931
- config: "0xe0a2ff281e73c1d53cfa85807080f87e833e4f1a7f93dcf8800b3865269a76b9"
987
+ tableId: "0x0a0b7f749baeb61e3dfee2b42245e32d0e6b484063f0a536b33e771d573d7246",
988
+ table: "0xd3a4632b1080f7d96e1c2487d4dabf2c1196916937c505a69954ac9f393be8d0",
989
+ treasury: "0xafa4b6231e49c15a22d641ce33fda761baaf650fa21899dfa2eb1716146e7306",
990
+ config: "0x7cbcb0a342179577a117dfdff974cf1ab765d3b571067bf22ddf5f9e3a667922"
932
991
  },
933
992
  loyaltyProgram: {
934
993
  id: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
@@ -937,27 +996,27 @@ var TEST_ADDRESSES = {
937
996
  userRewardTableId: "0x748a80395849ed37db1b0e14f2ab5d1d96458d2359ab3a84eb079d0f4ac7cf2e"
938
997
  },
939
998
  scoin: {
940
- id: "0xad2ca2aa5089df94bb2d444d5eb3520378c2f2dfb3a0bd2a2c994145ac4b0a53",
999
+ id: "0x773dab39c90fe05439b06a2d061795e52a974ff92c2aef90b2ee467acf7f33c8",
941
1000
  coins: {
942
1001
  ssui: {
943
- coinType: "0xfac769100bccc0caebcf4f4e2d00ac2f8883f07f724be28940df90605f5e7e9a::scallop_sui::SCALLOP_SUI",
944
- treasury: "0x9cb4551b36c17d37e19d700147fa819ea1c487ff8bcf18374de2cceb2e9d4845"
1002
+ coinType: "0xf569919046f19a0c40b519ecfbb6ca0319698cd5908716c29b62ef56541f298b::scallop_sui::SCALLOP_SUI",
1003
+ treasury: "0x0e499640a12c38dd9cc44532f5bc5fd1b6da86d2f9a8810357250f4b26e9e5c7"
945
1004
  },
946
1005
  scetus: {
947
1006
  coinType: "0x8b71e6d323ed78515af2bead13bf3d0da1562ba4a99234eb7c4f14fd39ef0427::scallop_cetus::SCALLOP_CETUS",
948
1007
  treasury: "0xd786f4b2d26278cc7911a3445b1b085eab60f269ef9dbb6b87e803d52f155003"
949
1008
  },
950
1009
  ssca: {
951
- coinType: "0x0a9d3c6c9af9f6e8def82921541bcbd17f73ed31bed3adcb684f2a4c267e42f0::scallop_sca::SCALLOP_SCA",
952
- treasury: "0xe818636d1d6c46d6ea1a2dce9d94696d7cbc18ce27451b603eeaa47aba8d75e0"
1010
+ coinType: "0x958428555e778e55918a59eb1c92c77f32b5c554fa3a5e56cd0815086b5072e7::scallop_sca::SCALLOP_SCA",
1011
+ treasury: "0x5f1c5de1df7341075d119570269b7b452af50afe8363080638f1ae29a554c038"
953
1012
  },
954
1013
  swusdc: {
955
- coinType: "0xaedc3ab75db8680b81a755015fa90124d217be93457b893c05bac033817defaf::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
956
- treasury: "0xfc6971648f867f7fd6928d1b873af71577e2eaf2c7543ef8bc82c431d833ae78"
1014
+ coinType: "0xf5447c4305a486d8c8557559887c2c39449ddb5e748f15d33946d02a1663c158::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
1015
+ treasury: "0x471fbab72578bab577263006fe32543b6e76153fffa2bef69affe4bc4934258f"
957
1016
  },
958
1017
  swusdt: {
959
- coinType: "0xbf02fc87ddc104b342ad8414c85ceadf5b0c823c055a06fb0ed776272c01a52a::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
960
- treasury: "0xb9593e2c3a0ba796ee815012b75ae46468ea78cda0188b9ac6816efe65503521"
1018
+ coinType: "0xac781d9f73058ff5e69f9bf8dde32f2e8c71c66d7fe8497fc83b2d9182254b22::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
1019
+ treasury: "0x921a4ed4bb4b4f11f51a462c83f4c0f6b60a90e441d1bc0d26d6fd893146bf4d"
961
1020
  },
962
1021
  sweth: {
963
1022
  coinType: "0x27d54f43e3eda701be56b82e5756e41c84467cd202f5cf713d5f9e45a9f1b6bc::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",
@@ -973,7 +1032,11 @@ var TEST_ADDRESSES = {
973
1032
  },
974
1033
  svsui: {
975
1034
  coinType: "0x97023a317320c4498cc4cd239dd02fd30c28246e5e8f81325d63f2bd8d70f6b3::scallop_v_sui::SCALLOP_V_SUI",
976
- treasury: "0x327114f0bf3559d7e2de10282147ed76a236c7c6775029165c4db09a6062ead6\u0192"
1035
+ treasury: "0x327114f0bf3559d7e2de10282147ed76a236c7c6775029165c4db09a6062ead6"
1036
+ },
1037
+ ssbeth: {
1038
+ coinType: "0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",
1039
+ treasury: "0xfd0f02def6358a1f266acfa1493d4707ee8387460d434fb667d63d755ff907ed"
977
1040
  }
978
1041
  }
979
1042
  }
@@ -2677,23 +2740,148 @@ var supplyLimitZod = import_zod.z.object({
2677
2740
  value: import_zod.z.string()
2678
2741
  })
2679
2742
  });
2680
- var SUPPLY_LIMIT_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey";
2743
+ var supplyLimitKeyType = `0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey`;
2681
2744
  var getSupplyLimit = async (utils, poolName) => {
2682
- const poolCoinType = utils.parseCoinType(poolName).slice(2);
2683
- const marketObject = utils.address.get("core.market");
2684
- if (!marketObject)
2685
- return null;
2686
- const object = await utils.cache.queryGetDynamicFieldObject({
2687
- parentId: marketObject,
2688
- name: {
2689
- type: SUPPLY_LIMIT_KEY,
2690
- value: poolCoinType
2745
+ try {
2746
+ const poolCoinType = utils.parseCoinType(poolName).slice(2);
2747
+ const marketObject = utils.address.get("core.market");
2748
+ if (!marketObject)
2749
+ return null;
2750
+ const object = await utils.cache.queryGetDynamicFieldObject({
2751
+ parentId: marketObject,
2752
+ name: {
2753
+ type: supplyLimitKeyType,
2754
+ value: poolCoinType
2755
+ }
2756
+ });
2757
+ const parsedData = supplyLimitZod.safeParse(object?.data?.content);
2758
+ if (!parsedData.success)
2759
+ return null;
2760
+ return parsedData.data.fields.value;
2761
+ } catch (e) {
2762
+ console.error(`Error in getSupplyLimit for ${poolName}: ${e.message}`);
2763
+ return "0";
2764
+ }
2765
+ };
2766
+
2767
+ // src/queries/isolatedAssetQuery.ts
2768
+ var import_zod2 = require("zod");
2769
+ var isolatedAssetZod = import_zod2.z.object({
2770
+ dataType: import_zod2.z.string(),
2771
+ type: import_zod2.z.string(),
2772
+ hasPublicTransfer: import_zod2.z.boolean(),
2773
+ fields: import_zod2.z.object({
2774
+ id: import_zod2.z.object({
2775
+ id: import_zod2.z.string()
2776
+ }),
2777
+ name: import_zod2.z.object({
2778
+ type: import_zod2.z.string()
2779
+ }),
2780
+ value: import_zod2.z.boolean()
2781
+ })
2782
+ });
2783
+ var isolatedAssetKeyType = `0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey`;
2784
+ var getIsolatedAssets = async (address) => {
2785
+ try {
2786
+ const marketObject = address.get("core.market");
2787
+ const isolatedAssets = [];
2788
+ if (!marketObject)
2789
+ return isolatedAssets;
2790
+ let hasNextPage = false;
2791
+ let nextCursor = null;
2792
+ const isIsolatedDynamicField = (dynamicField) => {
2793
+ return dynamicField.name.type === isolatedAssetKeyType;
2794
+ };
2795
+ do {
2796
+ const response = await address.cache.queryGetDynamicFields({
2797
+ parentId: marketObject,
2798
+ cursor: nextCursor,
2799
+ limit: 10
2800
+ });
2801
+ if (!response)
2802
+ break;
2803
+ const isolatedAssetCoinTypes = response.data.filter(isIsolatedDynamicField).map(({ name }) => `0x${name.value.type.name}`);
2804
+ isolatedAssets.push(...isolatedAssetCoinTypes);
2805
+ if (response && response.hasNextPage && response.nextCursor) {
2806
+ hasNextPage = true;
2807
+ nextCursor = response.nextCursor;
2808
+ } else {
2809
+ hasNextPage = false;
2810
+ }
2811
+ } while (hasNextPage);
2812
+ return isolatedAssets;
2813
+ } catch (e) {
2814
+ console.error(e);
2815
+ return [];
2816
+ }
2817
+ };
2818
+ var isIsolatedAsset = async (utils, coinName) => {
2819
+ try {
2820
+ const marketObject = utils.address.get("core.market");
2821
+ const cachedData = utils.address.cache.queryClient.getQueryData([
2822
+ "getDynamicFields",
2823
+ marketObject
2824
+ ]);
2825
+ if (cachedData) {
2826
+ const coinType2 = utils.parseCoinType(coinName);
2827
+ return cachedData.includes(coinType2);
2691
2828
  }
2692
- });
2693
- const parsedData = supplyLimitZod.safeParse(object?.data?.content);
2694
- if (!parsedData.success)
2695
- return null;
2696
- return parsedData.data.fields.value;
2829
+ const coinType = utils.parseCoinType(coinName).slice(2);
2830
+ const object = await utils.cache.queryGetDynamicFieldObject({
2831
+ parentId: marketObject,
2832
+ name: {
2833
+ type: isolatedAssetKeyType,
2834
+ value: coinType
2835
+ }
2836
+ });
2837
+ const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
2838
+ if (!parsedData.success)
2839
+ return false;
2840
+ return parsedData.data.fields.value;
2841
+ } catch (e) {
2842
+ console.error(e);
2843
+ return false;
2844
+ }
2845
+ };
2846
+
2847
+ // src/queries/borrowLimitQuery.ts
2848
+ var import_zod3 = require("zod");
2849
+ var borrowLimitZod = import_zod3.z.object({
2850
+ dataType: import_zod3.z.string(),
2851
+ type: import_zod3.z.string(),
2852
+ hasPublicTransfer: import_zod3.z.boolean(),
2853
+ fields: import_zod3.z.object({
2854
+ id: import_zod3.z.object({
2855
+ id: import_zod3.z.string()
2856
+ }),
2857
+ name: import_zod3.z.object({
2858
+ type: import_zod3.z.string()
2859
+ }),
2860
+ value: import_zod3.z.string()
2861
+ })
2862
+ });
2863
+ var borrowLimitKeyType = `0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey`;
2864
+ var getBorrowLimit = async (utils, poolName) => {
2865
+ try {
2866
+ const poolCoinType = utils.parseCoinType(poolName).slice(2);
2867
+ const marketObject = utils.address.get("core.market");
2868
+ if (!marketObject)
2869
+ return null;
2870
+ const object = await utils.cache.queryGetDynamicFieldObject({
2871
+ parentId: marketObject,
2872
+ name: {
2873
+ type: borrowLimitKeyType,
2874
+ value: poolCoinType
2875
+ }
2876
+ });
2877
+ const parsedData = borrowLimitZod.safeParse(object?.data?.content);
2878
+ if (!parsedData.success)
2879
+ return null;
2880
+ return parsedData.data.fields.value;
2881
+ } catch (e) {
2882
+ console.error(`Error in getBorrowLimit for ${poolName}: ${e.message}`);
2883
+ return "0";
2884
+ }
2697
2885
  };
2698
2886
 
2699
2887
  // src/queries/coreQuery.ts
@@ -2762,6 +2950,9 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2762
2950
  const maxSupplyCoin = (0, import_bignumber3.default)(
2763
2951
  await getSupplyLimit(query.utils, poolCoinName) ?? "0"
2764
2952
  ).shiftedBy(-coinDecimal).toNumber();
2953
+ const maxBorrowCoin = (0, import_bignumber3.default)(
2954
+ await getBorrowLimit(query.utils, poolCoinName) ?? "0"
2955
+ ).shiftedBy(-coinDecimal).toNumber();
2765
2956
  pools[poolCoinName] = {
2766
2957
  coinName: poolCoinName,
2767
2958
  symbol: query.utils.parseSymbol(poolCoinName),
@@ -2780,9 +2971,10 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2780
2971
  borrowFee: parsedMarketPoolData.borrowFee,
2781
2972
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2782
2973
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2783
- // isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2784
- isIsolated: false,
2974
+ isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2975
+ // isIsolated: false,
2785
2976
  maxSupplyCoin,
2977
+ maxBorrowCoin,
2786
2978
  ...calculatedMarketPoolData
2787
2979
  };
2788
2980
  }
@@ -2820,6 +3012,7 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2820
3012
  liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
2821
3013
  liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
2822
3014
  liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
3015
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
2823
3016
  ...calculatedMarketCollateralData
2824
3017
  };
2825
3018
  }
@@ -2867,85 +3060,76 @@ var getMarketPools = async (query, poolCoinNames = [...SUPPORT_POOLS], indexer =
2867
3060
  return marketPools;
2868
3061
  };
2869
3062
  var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, coinPrice) => {
2870
- let marketPool;
2871
- let balanceSheet;
2872
- let borrowIndex;
2873
- let interestModel;
2874
- let borrowFeeRate;
2875
- coinPrice = coinPrice ?? (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2876
- if (indexer) {
2877
- const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
2878
- marketPoolIndexer.coinPrice = coinPrice ?? marketPoolIndexer.coinPrice;
2879
- marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
2880
- marketPoolIndexer.coinName
2881
- );
2882
- return marketPoolIndexer;
2883
- }
2884
- const marketId = query.address.get("core.market");
2885
- marketObject = marketObject ?? (await query.cache.queryGetObject(marketId, {
2886
- showContent: true
2887
- }))?.data;
2888
- if (marketObject) {
2889
- if (marketObject.content && "fields" in marketObject.content) {
2890
- const fields = marketObject.content.fields;
2891
- const coinType = query.utils.parseCoinType(poolCoinName);
2892
- const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
2893
- const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2894
- parentId: balanceSheetParentId,
2895
- name: {
2896
- type: "0x1::type_name::TypeName",
2897
- value: {
2898
- name: coinType.substring(2)
2899
- }
3063
+ try {
3064
+ coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
3065
+ if (indexer) {
3066
+ const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
3067
+ if (!marketPoolIndexer) {
3068
+ return void 0;
3069
+ }
3070
+ marketPoolIndexer.coinPrice = coinPrice ?? marketPoolIndexer.coinPrice;
3071
+ marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
3072
+ marketPoolIndexer.coinName
3073
+ );
3074
+ return marketPoolIndexer;
3075
+ }
3076
+ const marketId = query.address.get("core.market");
3077
+ marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
3078
+ showContent: true
3079
+ }))?.data;
3080
+ if (!(marketObject && marketObject.content?.dataType === "moveObject"))
3081
+ throw new Error(`Failed to fetch marketObject`);
3082
+ const fields = marketObject.content.fields;
3083
+ const coinType = query.utils.parseCoinType(poolCoinName);
3084
+ const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
3085
+ const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3086
+ parentId: balanceSheetParentId,
3087
+ name: {
3088
+ type: "0x1::type_name::TypeName",
3089
+ value: {
3090
+ name: coinType.substring(2)
2900
3091
  }
2901
- });
2902
- if (!balanceSheetDynamicFieldObjectResponse)
2903
- throw new Error(
2904
- `Failed to fetch balanceSheetDynamicFieldObjectResponse for ${poolCoinName}`
2905
- );
2906
- const balanceSheetDynamicFieldObject = balanceSheetDynamicFieldObjectResponse.data;
2907
- if (balanceSheetDynamicFieldObject && balanceSheetDynamicFieldObject.content && "fields" in balanceSheetDynamicFieldObject.content) {
2908
- const dynamicFields = balanceSheetDynamicFieldObject.content.fields;
2909
- balanceSheet = dynamicFields.value.fields;
2910
3092
  }
2911
- const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
2912
- const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2913
- parentId: borrowIndexParentId,
2914
- name: {
2915
- type: "0x1::type_name::TypeName",
2916
- value: {
2917
- name: coinType.substring(2)
2918
- }
3093
+ });
3094
+ const balanceSheetDynamicFieldObject = balanceSheetDynamicFieldObjectResponse?.data;
3095
+ if (!(balanceSheetDynamicFieldObject && balanceSheetDynamicFieldObject.content && "fields" in balanceSheetDynamicFieldObject.content))
3096
+ throw new Error(
3097
+ `Failed to fetch balanceSheetDynamicFieldObject for ${poolCoinName}: ${balanceSheetDynamicFieldObjectResponse?.error?.code.toString()}`
3098
+ );
3099
+ const balanceSheet = balanceSheetDynamicFieldObject.content.fields.value.fields;
3100
+ const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
3101
+ const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3102
+ parentId: borrowIndexParentId,
3103
+ name: {
3104
+ type: "0x1::type_name::TypeName",
3105
+ value: {
3106
+ name: coinType.substring(2)
2919
3107
  }
2920
- });
2921
- if (!borrowIndexDynamicFieldObjectResponse)
2922
- throw new Error(
2923
- `Failed to fetch borrowIndexDynamicFieldObjectResponse for ${poolCoinName}`
2924
- );
2925
- const borrowIndexDynamicFieldObject = borrowIndexDynamicFieldObjectResponse.data;
2926
- if (borrowIndexDynamicFieldObject && borrowIndexDynamicFieldObject.content && "fields" in borrowIndexDynamicFieldObject.content) {
2927
- const dynamicFields = borrowIndexDynamicFieldObject.content.fields;
2928
- borrowIndex = dynamicFields.value.fields;
2929
3108
  }
2930
- const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
2931
- const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2932
- parentId: interestModelParentId,
2933
- name: {
2934
- type: "0x1::type_name::TypeName",
2935
- value: {
2936
- name: coinType.substring(2)
2937
- }
3109
+ });
3110
+ const borrowIndexDynamicFieldObject = borrowIndexDynamicFieldObjectResponse?.data;
3111
+ if (!(borrowIndexDynamicFieldObject && borrowIndexDynamicFieldObject.content && "fields" in borrowIndexDynamicFieldObject.content))
3112
+ throw new Error(
3113
+ `Failed to fetch borrowIndexDynamicFieldObject for ${poolCoinName}`
3114
+ );
3115
+ const borrowIndex = borrowIndexDynamicFieldObject.content.fields.value.fields;
3116
+ const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
3117
+ const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3118
+ parentId: interestModelParentId,
3119
+ name: {
3120
+ type: "0x1::type_name::TypeName",
3121
+ value: {
3122
+ name: coinType.substring(2)
2938
3123
  }
2939
- });
2940
- if (!interestModelDynamicFieldObjectResponse)
2941
- throw new Error(
2942
- `Failed to fetch interestModelDynamicFieldObjectResponse for ${poolCoinName}`
2943
- );
2944
- const interestModelDynamicFieldObject = interestModelDynamicFieldObjectResponse.data;
2945
- if (interestModelDynamicFieldObject && interestModelDynamicFieldObject.content && "fields" in interestModelDynamicFieldObject.content) {
2946
- const dynamicFields = interestModelDynamicFieldObject.content.fields;
2947
- interestModel = dynamicFields.value.fields;
2948
3124
  }
3125
+ });
3126
+ const interestModelDynamicFieldObject = interestModelDynamicFieldObjectResponse?.data;
3127
+ if (!(interestModelDynamicFieldObject && interestModelDynamicFieldObject.content && "fields" in interestModelDynamicFieldObject.content))
3128
+ throw new Error(
3129
+ `Failed to fetch interestModelDynamicFieldObject for ${poolCoinName}: ${interestModelDynamicFieldObject}`
3130
+ );
3131
+ const interestModel = interestModelDynamicFieldObject.content.fields.value.fields;
3132
+ const getBorrowFee = async () => {
2949
3133
  const borrowFeeDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2950
3134
  parentId: marketId,
2951
3135
  name: {
@@ -2957,18 +3141,11 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2957
3141
  }
2958
3142
  }
2959
3143
  });
2960
- if (!borrowFeeDynamicFieldObjectResponse)
2961
- throw new Error(
2962
- `Failed to fetch borrowFeeDynamicFieldObjectResponse for ${poolCoinName}`
2963
- );
2964
- const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse.data;
2965
- if (borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content) {
2966
- const dynamicFields = borrowFeeDynamicFieldObject.content.fields;
2967
- borrowFeeRate = dynamicFields.value.fields;
2968
- }
2969
- }
2970
- }
2971
- if (balanceSheet && borrowIndex && interestModel && (USE_TEST_ADDRESS || borrowFeeRate)) {
3144
+ const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse?.data;
3145
+ if (!(borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content))
3146
+ return { value: "0" };
3147
+ return borrowFeeDynamicFieldObject.content.fields.value.fields;
3148
+ };
2972
3149
  const parsedMarketPoolData = parseOriginMarketPoolData({
2973
3150
  type: interestModel.type.fields,
2974
3151
  maxBorrowRate: interestModel.max_borrow_rate.fields,
@@ -2982,7 +3159,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2982
3159
  reserve: balanceSheet.revenue,
2983
3160
  reserveFactor: interestModel.revenue_factor.fields,
2984
3161
  borrowWeight: interestModel.borrow_weight.fields,
2985
- borrowFeeRate: borrowFeeRate ?? { value: "0" },
3162
+ borrowFeeRate: await getBorrowFee(),
2986
3163
  baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
2987
3164
  borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
2988
3165
  borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
@@ -2998,7 +3175,10 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2998
3175
  const maxSupplyCoin = (0, import_bignumber3.default)(
2999
3176
  await getSupplyLimit(query.utils, poolCoinName) ?? "0"
3000
3177
  ).shiftedBy(-coinDecimal).toNumber();
3001
- marketPool = {
3178
+ const maxBorrowCoin = (0, import_bignumber3.default)(
3179
+ await getBorrowLimit(query.utils, poolCoinName) ?? "0"
3180
+ ).shiftedBy(-coinDecimal).toNumber();
3181
+ return {
3002
3182
  coinName: poolCoinName,
3003
3183
  symbol: query.utils.parseSymbol(poolCoinName),
3004
3184
  coinType: query.utils.parseCoinType(poolCoinName),
@@ -3017,12 +3197,13 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
3017
3197
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
3018
3198
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
3019
3199
  maxSupplyCoin,
3020
- // isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
3021
- isIsolated: false,
3200
+ maxBorrowCoin,
3201
+ isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
3022
3202
  ...calculatedMarketPoolData
3023
3203
  };
3204
+ } catch (e) {
3205
+ console.error(e.message);
3024
3206
  }
3025
- return marketPool;
3026
3207
  };
3027
3208
  var getMarketCollaterals = async (query, collateralCoinNames = [...SUPPORT_COLLATERALS], indexer = false) => {
3028
3209
  const marketId = query.address.get("core.market");
@@ -3071,85 +3252,76 @@ var getMarketCollateral = async (query, collateralCoinName, indexer = false, mar
3071
3252
  );
3072
3253
  return marketCollateralIndexer;
3073
3254
  }
3074
- let marketCollateral;
3075
- let riskModel;
3076
- let collateralStat;
3077
3255
  const marketId = query.address.get("core.market");
3078
3256
  marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
3079
3257
  showContent: true
3080
3258
  }))?.data;
3081
- if (marketObject) {
3082
- if (marketObject.content && "fields" in marketObject.content) {
3083
- const fields = marketObject.content.fields;
3084
- const coinType = query.utils.parseCoinType(collateralCoinName);
3085
- const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
3086
- const riskModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3087
- parentId: riskModelParentId,
3088
- name: {
3089
- type: "0x1::type_name::TypeName",
3090
- value: {
3091
- name: coinType.substring(2)
3092
- }
3093
- }
3094
- });
3095
- if (!riskModelDynamicFieldObjectResponse)
3096
- return void 0;
3097
- const riskModelDynamicFieldObject = riskModelDynamicFieldObjectResponse.data;
3098
- if (riskModelDynamicFieldObject && riskModelDynamicFieldObject.content && "fields" in riskModelDynamicFieldObject.content) {
3099
- const dynamicFields = riskModelDynamicFieldObject.content.fields;
3100
- riskModel = dynamicFields.value.fields;
3259
+ if (!(marketObject && marketObject.content?.dataType === "moveObject"))
3260
+ throw new Error(`Failed to fetch marketObject`);
3261
+ const fields = marketObject.content.fields;
3262
+ const coinType = query.utils.parseCoinType(collateralCoinName);
3263
+ const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
3264
+ const riskModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3265
+ parentId: riskModelParentId,
3266
+ name: {
3267
+ type: "0x1::type_name::TypeName",
3268
+ value: {
3269
+ name: coinType.substring(2)
3101
3270
  }
3102
- const collateralStatParentId = fields.collateral_stats.fields.table.fields.id.id;
3103
- const collateralStatDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3104
- parentId: collateralStatParentId,
3105
- name: {
3106
- type: "0x1::type_name::TypeName",
3107
- value: {
3108
- name: coinType.substring(2)
3109
- }
3110
- }
3111
- });
3112
- if (!collateralStatDynamicFieldObjectResponse)
3113
- return void 0;
3114
- const collateralStatDynamicFieldObject = collateralStatDynamicFieldObjectResponse.data;
3115
- if (collateralStatDynamicFieldObject && collateralStatDynamicFieldObject.content && "fields" in collateralStatDynamicFieldObject.content) {
3116
- const dynamicFields = collateralStatDynamicFieldObject.content.fields;
3117
- collateralStat = dynamicFields.value.fields;
3271
+ }
3272
+ });
3273
+ const riskModelDynamicFieldObject = riskModelDynamicFieldObjectResponse?.data;
3274
+ if (!(riskModelDynamicFieldObject && riskModelDynamicFieldObject.content && "fields" in riskModelDynamicFieldObject.content))
3275
+ throw new Error(
3276
+ `Failed to fetch riskModelDynamicFieldObject for ${riskModelDynamicFieldObjectResponse?.error?.code.toString()}: `
3277
+ );
3278
+ const riskModel = riskModelDynamicFieldObject.content.fields.value.fields;
3279
+ const collateralStatParentId = fields.collateral_stats.fields.table.fields.id.id;
3280
+ const collateralStatDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3281
+ parentId: collateralStatParentId,
3282
+ name: {
3283
+ type: "0x1::type_name::TypeName",
3284
+ value: {
3285
+ name: coinType.substring(2)
3118
3286
  }
3119
3287
  }
3120
- }
3121
- if (riskModel && collateralStat) {
3122
- const parsedMarketCollateralData = parseOriginMarketCollateralData({
3123
- type: riskModel.type.fields,
3124
- collateralFactor: riskModel.collateral_factor.fields,
3125
- liquidationFactor: riskModel.liquidation_factor.fields,
3126
- liquidationDiscount: riskModel.liquidation_discount.fields,
3127
- liquidationPanelty: riskModel.liquidation_penalty.fields,
3128
- liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
3129
- maxCollateralAmount: riskModel.max_collateral_amount,
3130
- totalCollateralAmount: collateralStat.amount
3131
- });
3132
- const calculatedMarketCollateralData = calculateMarketCollateralData(
3133
- query.utils,
3134
- parsedMarketCollateralData
3288
+ });
3289
+ const collateralStatDynamicFieldObject = collateralStatDynamicFieldObjectResponse?.data;
3290
+ if (!(collateralStatDynamicFieldObject && collateralStatDynamicFieldObject.content && "fields" in collateralStatDynamicFieldObject.content))
3291
+ throw new Error(
3292
+ `Failed to fetch collateralStatDynamicFieldObject for ${collateralCoinName}: ${collateralStatDynamicFieldObjectResponse?.error?.code.toString()}`
3135
3293
  );
3136
- marketCollateral = {
3137
- coinName: collateralCoinName,
3138
- symbol: query.utils.parseSymbol(collateralCoinName),
3139
- coinType: query.utils.parseCoinType(collateralCoinName),
3140
- marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
3141
- coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
3142
- coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
3143
- coinPrice: coinPrice ?? 0,
3144
- collateralFactor: parsedMarketCollateralData.collateralFactor,
3145
- liquidationFactor: parsedMarketCollateralData.liquidationFactor,
3146
- liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
3147
- liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
3148
- liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
3149
- ...calculatedMarketCollateralData
3150
- };
3151
- }
3152
- return marketCollateral;
3294
+ const collateralStat = collateralStatDynamicFieldObject.content.fields.value.fields;
3295
+ const parsedMarketCollateralData = parseOriginMarketCollateralData({
3296
+ type: riskModel.type.fields,
3297
+ collateralFactor: riskModel.collateral_factor.fields,
3298
+ liquidationFactor: riskModel.liquidation_factor.fields,
3299
+ liquidationDiscount: riskModel.liquidation_discount.fields,
3300
+ liquidationPanelty: riskModel.liquidation_penalty.fields,
3301
+ liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
3302
+ maxCollateralAmount: riskModel.max_collateral_amount,
3303
+ totalCollateralAmount: collateralStat.amount
3304
+ });
3305
+ const calculatedMarketCollateralData = calculateMarketCollateralData(
3306
+ query.utils,
3307
+ parsedMarketCollateralData
3308
+ );
3309
+ return {
3310
+ coinName: collateralCoinName,
3311
+ symbol: query.utils.parseSymbol(collateralCoinName),
3312
+ coinType: query.utils.parseCoinType(collateralCoinName),
3313
+ marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
3314
+ coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
3315
+ coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
3316
+ coinPrice: coinPrice ?? 0,
3317
+ collateralFactor: parsedMarketCollateralData.collateralFactor,
3318
+ liquidationFactor: parsedMarketCollateralData.liquidationFactor,
3319
+ liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
3320
+ liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
3321
+ liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
3322
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
3323
+ ...calculatedMarketCollateralData
3324
+ };
3153
3325
  };
3154
3326
  var getObligations = async ({
3155
3327
  address
@@ -3327,98 +3499,18 @@ var getFlashLoanFees = async (query, assetNames) => {
3327
3499
  );
3328
3500
  };
3329
3501
 
3330
- // src/queries/isolatedAssetQuery.ts
3331
- var import_zod2 = require("zod");
3332
- var isolatedAssetZod = import_zod2.z.object({
3333
- dataType: import_zod2.z.string(),
3334
- type: import_zod2.z.string(),
3335
- hasPublicTransfer: import_zod2.z.boolean(),
3336
- fields: import_zod2.z.object({
3337
- id: import_zod2.z.object({
3338
- id: import_zod2.z.string()
3339
- }),
3340
- name: import_zod2.z.object({
3341
- type: import_zod2.z.string()
3342
- }),
3343
- value: import_zod2.z.boolean()
3344
- })
3345
- });
3346
- var ISOLATED_ASSET_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::IsolatedAssetKey";
3347
- var getIsolatedAssets = async (address) => {
3348
- try {
3349
- const marketObject = address.get("core.market");
3350
- const isolatedAssets = [];
3351
- if (!marketObject)
3352
- return isolatedAssets;
3353
- let hasNextPage = false;
3354
- let nextCursor = null;
3355
- const isIsolatedDynamicField = (dynamicField) => {
3356
- return dynamicField.name.type === ISOLATED_ASSET_KEY;
3357
- };
3358
- do {
3359
- const response = await address.cache.queryGetDynamicFields({
3360
- parentId: marketObject,
3361
- cursor: nextCursor,
3362
- limit: 10
3363
- });
3364
- if (!response)
3365
- break;
3366
- const isolatedAssetCoinTypes = response.data.filter(isIsolatedDynamicField).map(({ name }) => `0x${name.value.type.name}`);
3367
- isolatedAssets.push(...isolatedAssetCoinTypes);
3368
- if (response && response.hasNextPage && response.nextCursor) {
3369
- hasNextPage = true;
3370
- nextCursor = response.nextCursor;
3371
- } else {
3372
- hasNextPage = false;
3373
- }
3374
- } while (hasNextPage);
3375
- return isolatedAssets;
3376
- } catch (e) {
3377
- console.error(e);
3378
- return [];
3379
- }
3380
- };
3381
- var isIsolatedAsset = async (utils, coinName) => {
3382
- try {
3383
- const marketObject = utils.address.get("core.market");
3384
- const cachedData = utils.address.cache.queryClient.getQueryData([
3385
- "getDynamicFields",
3386
- marketObject
3387
- ]);
3388
- if (cachedData) {
3389
- const coinType2 = utils.parseCoinType(coinName);
3390
- return cachedData.includes(coinType2);
3391
- }
3392
- const coinType = utils.parseCoinType(coinName).slice(2);
3393
- const object = await utils.cache.queryGetDynamicFieldObject({
3394
- parentId: marketObject,
3395
- name: {
3396
- type: ISOLATED_ASSET_KEY,
3397
- value: coinType
3398
- }
3399
- });
3400
- const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
3401
- if (!parsedData.success)
3402
- return false;
3403
- return parsedData.data.fields.value;
3404
- } catch (e) {
3405
- console.error(e);
3406
- return false;
3407
- }
3408
- };
3409
-
3410
3502
  // src/queries/loyaltyProgramQuery.ts
3411
3503
  var import_bignumber4 = __toESM(require("bignumber.js"));
3412
- var import_zod3 = require("zod");
3413
- var rewardPoolFieldsZod = import_zod3.z.object({
3414
- balance: import_zod3.z.string(),
3415
- enable_claim: import_zod3.z.boolean()
3504
+ var import_zod4 = require("zod");
3505
+ var rewardPoolFieldsZod = import_zod4.z.object({
3506
+ balance: import_zod4.z.string(),
3507
+ enable_claim: import_zod4.z.boolean()
3416
3508
  }).transform((value) => ({
3417
3509
  totalPoolReward: (0, import_bignumber4.default)(value.balance).shiftedBy(-9).toNumber(),
3418
3510
  isClaimEnabled: value.enable_claim
3419
3511
  }));
3420
- var userRewardFieldsZod = import_zod3.z.object({
3421
- value: import_zod3.z.string()
3512
+ var userRewardFieldsZod = import_zod4.z.object({
3513
+ value: import_zod4.z.string()
3422
3514
  }).transform((value) => (0, import_bignumber4.default)(value.value).shiftedBy(-9).toNumber());
3423
3515
  var getLoyaltyProgramInformations = async (query, veScaKey) => {
3424
3516
  const rewardPool = query.address.get("loyaltyProgram.rewardPool");
@@ -4026,10 +4118,12 @@ var getPythPrices = async ({
4026
4118
  const pythPriceFeed = address.get(
4027
4119
  `core.coins.${assetCoinName}.oracle.pyth.feedObject`
4028
4120
  );
4029
- if (!prev[pythPriceFeed]) {
4030
- prev[pythPriceFeed] = [assetCoinName];
4031
- } else {
4032
- prev[pythPriceFeed].push(assetCoinName);
4121
+ if (pythPriceFeed) {
4122
+ if (!prev[pythPriceFeed]) {
4123
+ prev[pythPriceFeed] = [assetCoinName];
4124
+ } else {
4125
+ prev[pythPriceFeed].push(assetCoinName);
4126
+ }
4033
4127
  }
4034
4128
  return prev;
4035
4129
  },
@@ -4227,7 +4321,7 @@ var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPr
4227
4321
  const coinName = query.utils.parseCoinName(marketCoinName);
4228
4322
  marketPool = marketPool || await query.getMarketPool(coinName, indexer);
4229
4323
  if (!marketPool) {
4230
- throw new Error(`Fail to fetch marketPool for ${coinName}`);
4324
+ throw new Error(`Failed to fetch marketPool for ${marketCoinName}`);
4231
4325
  }
4232
4326
  const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
4233
4327
  const rewardPoolId = query.address.get(
@@ -4501,7 +4595,7 @@ var getStakeRewardPool = async ({
4501
4595
  var import_bignumber7 = __toESM(require("bignumber.js"));
4502
4596
  var import_sui_kit3 = require("@scallop-io/sui-kit");
4503
4597
  var import_bcs2 = require("@mysten/sui/bcs");
4504
- var import_zod4 = require("zod");
4598
+ var import_zod5 = require("zod");
4505
4599
  var import_assert2 = __toESM(require("assert"));
4506
4600
  var getVescaKeys = async (utils, ownerAddress) => {
4507
4601
  const owner = ownerAddress || utils.suiKit.currentAddress();
@@ -4550,10 +4644,10 @@ var getVeScas = async ({
4550
4644
  }
4551
4645
  return result;
4552
4646
  };
4553
- var SuiObjectRefZod = import_zod4.z.object({
4554
- objectId: import_zod4.z.string(),
4555
- digest: import_zod4.z.string(),
4556
- version: import_zod4.z.string()
4647
+ var SuiObjectRefZod = import_zod5.z.object({
4648
+ objectId: import_zod5.z.string(),
4649
+ digest: import_zod5.z.string(),
4650
+ version: import_zod5.z.string()
4557
4651
  });
4558
4652
  var getVeSca = async (utils, veScaKey) => {
4559
4653
  const tableId = utils.address.get(`vesca.tableId`);
@@ -4743,10 +4837,10 @@ var ScallopUtils = class {
4743
4837
  * @param address - ScallopAddress instance.
4744
4838
  */
4745
4839
  async init(force = false, address) {
4746
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
4747
- await this.address.read();
4748
- } else {
4840
+ if (address && !this.address)
4749
4841
  this.address = address;
4842
+ if (force || !this.address.getAddresses()) {
4843
+ await this.address.read();
4750
4844
  }
4751
4845
  }
4752
4846
  /**
@@ -5032,9 +5126,7 @@ var ScallopUtils = class {
5032
5126
  for (const endpoint of endpoints) {
5033
5127
  const priceIdPairs = Array.from(failedRequests.values()).reduce(
5034
5128
  (acc, coinName) => {
5035
- const priceId = this.address.get(
5036
- `core.coins.${coinName}.oracle.pyth.feed`
5037
- );
5129
+ const priceId = this.address.get(`core.coins.${coinName}.oracle.pyth.feed`) ?? PYTH_FEED_IDS[coinName];
5038
5130
  acc.push([coinName, priceId]);
5039
5131
  return acc;
5040
5132
  },
@@ -6997,11 +7089,12 @@ var ScallopQuery = class {
6997
7089
  * @param address - ScallopAddress instance.
6998
7090
  */
6999
7091
  async init(force = false, address) {
7000
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
7001
- await this.address.read();
7002
- } else {
7092
+ if (address && !this.address) {
7003
7093
  this.address = address;
7004
7094
  }
7095
+ if (force || !this.address.getAddresses()) {
7096
+ await this.address.read();
7097
+ }
7005
7098
  await this.utils.init(force, this.address);
7006
7099
  }
7007
7100
  /* ==================== Core Query Methods ==================== */
@@ -7463,11 +7556,17 @@ var ScallopQuery = class {
7463
7556
  return await getFlashLoanFees(this, assetCoinNames);
7464
7557
  }
7465
7558
  /**
7466
- * Get supply limit of supply pool
7559
+ * Get supply limit of lending pool
7467
7560
  */
7468
7561
  async getPoolSupplyLimit(poolName) {
7469
7562
  return await getSupplyLimit(this.utils, poolName);
7470
7563
  }
7564
+ /**
7565
+ * Get borrow limit of borrow pool
7566
+ */
7567
+ async getPoolBorrowLimit(poolName) {
7568
+ return await getBorrowLimit(this.utils, poolName);
7569
+ }
7471
7570
  /**
7472
7571
  * Get list of isolated assets
7473
7572
  */
@@ -7540,10 +7639,10 @@ var ScallopBuilder = class {
7540
7639
  * @param address - ScallopAddress instance.
7541
7640
  */
7542
7641
  async init(force = false, address) {
7543
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
7544
- await this.address.read();
7545
- } else {
7642
+ if (address && !this.address)
7546
7643
  this.address = address;
7644
+ if (force || !this.address.getAddresses()) {
7645
+ await this.address.read();
7547
7646
  }
7548
7647
  await this.query.init(force, this.address);
7549
7648
  await this.utils.init(force, this.address);