@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.mjs CHANGED
@@ -10,11 +10,11 @@ var DEFAULT_CACHE_OPTIONS = {
10
10
 
11
11
  // src/constants/coinGecko.ts
12
12
  var COIN_GECKGO_IDS = {
13
- usdc: "usdc-coin",
13
+ usdc: "usdc",
14
14
  sbeth: "ethereum",
15
15
  weth: "ethereum",
16
16
  wbtc: "bitcoin",
17
- wusdc: "usdc-coin",
17
+ wusdc: "usdc",
18
18
  wusdt: "tether",
19
19
  sui: "sui",
20
20
  wapt: "aptos",
@@ -23,7 +23,9 @@ var COIN_GECKGO_IDS = {
23
23
  afsui: "sui",
24
24
  hasui: "sui",
25
25
  vsui: "sui",
26
- sca: "scallop-2"
26
+ sca: "scallop-2",
27
+ deep: "deepbook",
28
+ fud: "fud-the-pug"
27
29
  };
28
30
 
29
31
  // src/constants/common.ts
@@ -31,7 +33,7 @@ var API_BASE_URL = "https://sui.apis.scallop.io";
31
33
  var SDK_API_BASE_URL = "https://sdk.api.scallop.io";
32
34
  var IS_VE_SCA_TEST = false;
33
35
  var USE_TEST_ADDRESS = false;
34
- var ADDRESSES_ID = IS_VE_SCA_TEST || USE_TEST_ADDRESS ? "65fb07c39c845425d71d7b18" : "66f8e7ed9bb9e07fdfb86bbb";
36
+ var ADDRESSES_ID = IS_VE_SCA_TEST || USE_TEST_ADDRESS ? "65fb07c39c845425d71d7b18" : "675c65cd301dd817ea262e76";
35
37
  var PROTOCOL_OBJECT_ID = IS_VE_SCA_TEST ? "0xc9f859f98ca352a11b97a038c4b4162bee437b8df8caa047990fe9cb03d4f778" : "0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";
36
38
  var BORROW_FEE_PROTOCOL_ID = IS_VE_SCA_TEST ? "0xc9f859f98ca352a11b97a038c4b4162bee437b8df8caa047990fe9cb03d4f778" : "0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da";
37
39
  var SCA_COIN_TYPE = IS_VE_SCA_TEST ? `0x6cd813061a3adf3602b76545f076205f0c8e7ec1d3b1eab9a1da7992c18c0524::sca::SCA` : "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA";
@@ -52,7 +54,9 @@ var SUPPORT_POOLS = [
52
54
  "afsui",
53
55
  "hasui",
54
56
  "vsui",
55
- "sca"
57
+ "sca",
58
+ "fud",
59
+ "deep"
56
60
  ];
57
61
  var SUPPORT_COLLATERALS = [
58
62
  "usdc",
@@ -96,7 +100,9 @@ var SUPPORT_SCOIN = [
96
100
  "ssca",
97
101
  "scetus",
98
102
  "swsol",
99
- "swbtc"
103
+ "swbtc",
104
+ "sdeep",
105
+ "sfud"
100
106
  ];
101
107
  var SUPPORT_SUI_BRIDGE = ["sbeth"];
102
108
  var SUPPORT_WORMHOLE = [
@@ -153,6 +159,8 @@ var coinDecimals = {
153
159
  hasui: 9,
154
160
  vsui: 9,
155
161
  sca: 9,
162
+ deep: 6,
163
+ fud: 5,
156
164
  susdc: 6,
157
165
  sweth: 8,
158
166
  ssbeth: 8,
@@ -166,7 +174,9 @@ var coinDecimals = {
166
174
  safsui: 9,
167
175
  shasui: 9,
168
176
  svsui: 9,
169
- ssca: 9
177
+ ssca: 9,
178
+ sdeep: 6,
179
+ sfud: 5
170
180
  };
171
181
  var assetCoins = {
172
182
  usdc: "usdc",
@@ -182,7 +192,9 @@ var assetCoins = {
182
192
  afsui: "afsui",
183
193
  hasui: "hasui",
184
194
  vsui: "vsui",
185
- sca: "sca"
195
+ sca: "sca",
196
+ deep: "deep",
197
+ fud: "fud"
186
198
  };
187
199
  var marketCoins = {
188
200
  susdc: "susdc",
@@ -198,7 +210,9 @@ var marketCoins = {
198
210
  safsui: "safsui",
199
211
  shasui: "shasui",
200
212
  svsui: "svsui",
201
- ssca: "ssca"
213
+ ssca: "ssca",
214
+ sdeep: "sdeep",
215
+ sfud: "sfud"
202
216
  };
203
217
  var sCoins = {
204
218
  susdc: "susdc",
@@ -213,7 +227,9 @@ var sCoins = {
213
227
  svsui: "svsui",
214
228
  ssca: "ssca",
215
229
  swsol: "swsol",
216
- swbtc: "swbtc"
230
+ swbtc: "swbtc",
231
+ sfud: "sfud",
232
+ sdeep: "sdeep"
217
233
  };
218
234
  var stakeMarketCoins = {
219
235
  susdc: "susdc",
@@ -266,7 +282,10 @@ var coinIds = {
266
282
  afsui: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",
267
283
  hasui: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",
268
284
  vsui: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",
269
- sca: IS_VE_SCA_TEST ? "0x6cd813061a3adf3602b76545f076205f0c8e7ec1d3b1eab9a1da7992c18c0524" : "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6"
285
+ sca: IS_VE_SCA_TEST ? "0x6cd813061a3adf3602b76545f076205f0c8e7ec1d3b1eab9a1da7992c18c0524" : "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",
286
+ // isolated assets
287
+ deep: "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",
288
+ fud: "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1"
270
289
  };
271
290
  var wormholeCoinIds = {
272
291
  weth: "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",
@@ -292,7 +311,9 @@ var sCoinIds = {
292
311
  shasui: "0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",
293
312
  svsui: "0xe1a1cc6bcf0001a015eab84bcc6713393ce20535f55b8b6f35c142e057a25fbe::scallop_v_sui::SCALLOP_V_SUI",
294
313
  swsol: "0x1392650f2eca9e3f6ffae3ff89e42a3590d7102b80e2b430f674730bc30d3259::scallop_wormhole_sol::SCALLOP_WORMHOLE_SOL",
295
- swbtc: "0x2cf76a9cf5d3337961d1154283234f94da2dcff18544dfe5cbdef65f319591b5::scallop_wormhole_btc::SCALLOP_WORMHOLE_BTC"
314
+ swbtc: "0x2cf76a9cf5d3337961d1154283234f94da2dcff18544dfe5cbdef65f319591b5::scallop_wormhole_btc::SCALLOP_WORMHOLE_BTC",
315
+ sdeep: "0xeb7a05a3224837c5e5503575aed0be73c091d1ce5e43aa3c3e716e0ae614608f::scallop_deep::SCALLOP_DEEP",
316
+ sfud: "0xe56d5167f427cbe597da9e8150ef5c337839aaf46891d62468dcf80bdd8e10d1::scallop_fud::SCALLOP_FUD"
296
317
  };
297
318
  var sCoinTypeToName = Object.entries(sCoinIds).reduce(
298
319
  (acc, [coinName, coinType]) => {
@@ -375,6 +396,12 @@ var POOL_ADDRESSES = {
375
396
  sca: {
376
397
  lendingPoolAddress: "0x6fc7d4211fc7018b6c75e7b908b88f2e0536443239804a3d32af547637bd28d7",
377
398
  collateralPoolAddress: "0xff677a5d9e9dc8f08f0a8681ebfc7481d1c7d57bc441f2881974adcdd7b13c31"
399
+ },
400
+ fud: {
401
+ lendingPoolAddress: ""
402
+ },
403
+ deep: {
404
+ lendingPoolAddress: ""
378
405
  }
379
406
  };
380
407
 
@@ -397,7 +424,9 @@ var PYTH_FEED_IDS = {
397
424
  afsui: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
398
425
  hasui: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
399
426
  vsui: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
400
- sca: "7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc"
427
+ sca: "7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",
428
+ deep: "29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",
429
+ fud: "6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75"
401
430
  };
402
431
 
403
432
  // src/constants/queryKeys.ts
@@ -502,20 +531,33 @@ var TEST_ADDRESSES = {
502
531
  core: {
503
532
  // version:
504
533
  // '0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7',
505
- version: "0x6156d5cd1538bec8a167a40fe1209a4ec9cf8137921fe0a697f191ac561f0b09",
534
+ version: "0xd318de9b0f6873879a82cbfcc2daa1d1591a8b54e7cea9f4b567da63c692a52b",
506
535
  versionCap: "0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",
507
536
  // object:
508
537
  // '0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf',
509
- object: "0x87ddec2984645dbbe2403a509cc6edf393a43acdba9b77d45da2bcbefcf733c1",
538
+ object: "0x6c23585e940a989588432509107e98bae06dbca4e333f26d0635d401b3c7c76d",
510
539
  // market:
511
540
  // '0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9',
512
- market: "0x8606ed145cc887985b8ed793f7753ff5dc762a42c379dac035f568e1bac58490",
541
+ market: "0x9d6434e97f3f98fd9b0c0e1dca22632073985abcd22541feae7ee1e34cbe3af2",
513
542
  adminCap: "0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",
514
543
  coinDecimalsRegistry: "0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",
515
544
  // obligationAccessStore:
516
545
  // '0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9',
517
- obligationAccessStore: "0x48b472d68ca910c45f7f3b6c26836b6aa6d2569810d94b1b939023da05ae0a23",
546
+ obligationAccessStore: "0x46e9b44a77ee9c9d33cc2689ecdfbb8f681935cbc6bdf6ac3df048e396c36c82",
518
547
  coins: {
548
+ usdc: {
549
+ id: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",
550
+ metaData: "0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",
551
+ treasury: "",
552
+ oracle: {
553
+ supra: "",
554
+ switchboard: "",
555
+ pyth: {
556
+ feed: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
557
+ feedObject: "0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"
558
+ }
559
+ }
560
+ },
519
561
  cetus: {
520
562
  id: "0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",
521
563
  metaData: "0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",
@@ -671,6 +713,19 @@ var TEST_ADDRESSES = {
671
713
  feedObject: "0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"
672
714
  }
673
715
  }
716
+ },
717
+ sbeth: {
718
+ id: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29",
719
+ metaData: "0x89b04ba87f8832d4d76e17a1c9dce72eb3e64d372cf02012b8d2de5384faeef0",
720
+ treasury: "",
721
+ oracle: {
722
+ supra: "",
723
+ switchboard: "",
724
+ pyth: {
725
+ feed: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",
726
+ feedObject: "0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"
727
+ }
728
+ }
674
729
  }
675
730
  },
676
731
  oracles: {
@@ -704,7 +759,7 @@ var TEST_ADDRESSES = {
704
759
  upgradeCap: "0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"
705
760
  },
706
761
  protocol: {
707
- id: "0x87ddec2984645dbbe2403a509cc6edf393a43acdba9b77d45da2bcbefcf733c1",
762
+ id: "0xb784ea287d944e478a3ceaa071f8885072cce6b7224cf245914dc2f9963f460e",
708
763
  upgradeCap: "0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"
709
764
  },
710
765
  // protocol: {
@@ -722,7 +777,7 @@ var TEST_ADDRESSES = {
722
777
  // '0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f',
723
778
  // },
724
779
  query: {
725
- id: "0xe4f9d62d17746d5b9dbf0d5557747430021a71575780b515161210cdba0a4c1c",
780
+ id: "0x89706958f43fb170de134579e3fbc53972b946ee78bd2442d8e1adc36074fbdc",
726
781
  upgradeCap: "0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"
727
782
  },
728
783
  supra: { id: "", upgradeCap: "" },
@@ -758,6 +813,10 @@ var TEST_ADDRESSES = {
758
813
  "0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"
759
814
  )
760
815
  },
816
+ susdc: {
817
+ id: "0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",
818
+ rewardPoolId: "0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"
819
+ },
761
820
  swusdc: {
762
821
  // id: '0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0',
763
822
  id: "0xf1b383b9cf2e9f515fc69567df1053098f273849d09cd84b0278a773429bd2b2",
@@ -806,37 +865,37 @@ var TEST_ADDRESSES = {
806
865
  config: ""
807
866
  },
808
867
  borrowIncentive: {
809
- id: "0x6152f696fc3a658f33c4b891764731a59153125ffedfa8bff7167c42823f58a9",
810
- adminCap: "0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",
811
- object: "0x002875153e09f8145ab63527bc85c00f2bd102e12f9573c47f8cdf1a1cb62934",
812
- query: "0x529edc54a3dce2207703ceebbccb0ac14133f7825c1f528775ba0d85a4063489",
813
- incentivePools: "0x6547e143d406b5ccd5f46aae482497de279cc1a68c406f701df70a05f9212ab4",
814
- incentiveAccounts: "0xc4701fdbc1c92f9a636d334d66012b3027659e9fb8aff27279a82edfb6b77d02",
815
- config: "0xdf5d04b4691cc67e82fd4db8394d89ff44823a9de29716c924f74bb4f11cc1f7"
868
+ id: "0x85769d63565ce99c7622f8e336ca1460926ddf29738ad2a39407b5cac29f61fe",
869
+ adminCap: "0x56ac8e6f2b360b2b35c0168d72cc6cd17d9592afb83709865cb87af24bb2025b",
870
+ object: "0x85769d63565ce99c7622f8e336ca1460926ddf29738ad2a39407b5cac29f61fe",
871
+ query: "0x8e0d00f8ff1199d7c5fe56cea0e901a525daeefff0445a1635ace8282ae3302c",
872
+ incentivePools: "0x9d564c93128c6ab0c0d3e050a47f11df0b91494f3bb779bdc1301c1c637f15eb",
873
+ incentiveAccounts: "0x09e6040e798246de04941bc79a3ba62d3eca6d7a218cc30f21fb07f478fa2926",
874
+ config: "0x43d4ca1dfc90b161c4240facd119e74e4b850cca2957f88c2ec289c9380da064"
816
875
  },
817
876
  referral: {
818
- id: "0xa3654ebb63eb06c0f4ff52f8aa6512df9f164f7772bdf15dac3709bd3798dda9",
877
+ id: "0x1bf5a8ce77050d8052549d743e16b469f15aa6b81b752b78b6ebb65179665f5a",
819
878
  object: "0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",
820
879
  adminCap: "0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",
821
- referralBindings: "0xf63299d58789d99de94092b9011323466e55ca0c1ea1a7a3786a589af46e1c09",
822
- bindingTableId: "0x1c8202b17267ec8d6cf97ca013615354181a04f179570e42601ff2dae19294b1",
823
- referralRevenuePool: "0x6abd852caf90769c1b185cdf636d841673fa95528f0550f018b8a138bd283c07",
880
+ referralBindings: "0xcf184487782bed962bf678001efe775d31fb94b9992333a57594cf15d79d5ced",
881
+ bindingTableId: "0x41a50e258c0a266ce84e0e1a618dbf70b878cc943909e613089a50afcceb2bc0",
882
+ referralRevenuePool: "0xc24e3e5e37032f29a3dd91a9a1f057af8821b7e6c148e9683900ac8b6d30f0c6",
824
883
  revenueTableId: "0x595baa3654c297bff84ab7786a2d250f019cefc66e8df8e89fd9d41e02bd30dd",
825
- referralTiers: "0x962cb903d8d7346190c5204785ccbb91b61086aa764f674c8145df82335cf83e",
884
+ referralTiers: "0x144350f3db9b46d11b140084cd54e6de0b9c3b8d265ce8059b51d0ef58ea464b",
826
885
  tiersTableId: "0xeac755a7a8b7798530905ac79e8c114f19d0f130f6eab012954f08faac29c75d",
827
886
  // authorizedWitnessList:
828
887
  // '0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e',
829
888
  authorizedWitnessList: "0x9d6223dc52015b8a3986a573590ef2af8f1b8f3e4685513888c052f001b87e7f",
830
- version: "0x1bd4b7285f72e11c316b828c7c47b3f4da18dcec9f9b3dba6d8629cbb6f93e5e"
889
+ version: "0x3545849eb97723e676a476ec9d4fe5f2eb0eb2c6b78972851114fd4c7ed4639f"
831
890
  },
832
891
  vesca: {
833
- id: "0xb15b6e0cdd85afb5028bea851dd249405e734d800a259147bbc24980629723a4",
834
- object: "0xb15b6e0cdd85afb5028bea851dd249405e734d800a259147bbc24980629723a4",
892
+ id: "0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",
893
+ object: "0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",
835
894
  adminCap: "0x8ffa76135c5b85c5fbd73a6448a4a733d826cb63a267ab817656acb77c72d4a5",
836
- tableId: "0xe3153b2bf124be0b86cb8bd468346a861efd0da52fc42197b54d2f616488a311",
837
- table: "0x611cb8d9d4d90867467b5ebdf4cc447a0047ed5b01334a28a29fcfe733e3d609",
838
- treasury: "0xe8c112c09b88158dc6c8e23d1fbae5b3c7136cdee54b7dafc08e65db28c4a5bc",
839
- config: "0xe0a2ff281e73c1d53cfa85807080f87e833e4f1a7f93dcf8800b3865269a76b9"
895
+ tableId: "0x0a0b7f749baeb61e3dfee2b42245e32d0e6b484063f0a536b33e771d573d7246",
896
+ table: "0xd3a4632b1080f7d96e1c2487d4dabf2c1196916937c505a69954ac9f393be8d0",
897
+ treasury: "0xafa4b6231e49c15a22d641ce33fda761baaf650fa21899dfa2eb1716146e7306",
898
+ config: "0x7cbcb0a342179577a117dfdff974cf1ab765d3b571067bf22ddf5f9e3a667922"
840
899
  },
841
900
  loyaltyProgram: {
842
901
  id: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
@@ -845,27 +904,27 @@ var TEST_ADDRESSES = {
845
904
  userRewardTableId: "0x748a80395849ed37db1b0e14f2ab5d1d96458d2359ab3a84eb079d0f4ac7cf2e"
846
905
  },
847
906
  scoin: {
848
- id: "0xad2ca2aa5089df94bb2d444d5eb3520378c2f2dfb3a0bd2a2c994145ac4b0a53",
907
+ id: "0x773dab39c90fe05439b06a2d061795e52a974ff92c2aef90b2ee467acf7f33c8",
849
908
  coins: {
850
909
  ssui: {
851
- coinType: "0xfac769100bccc0caebcf4f4e2d00ac2f8883f07f724be28940df90605f5e7e9a::scallop_sui::SCALLOP_SUI",
852
- treasury: "0x9cb4551b36c17d37e19d700147fa819ea1c487ff8bcf18374de2cceb2e9d4845"
910
+ coinType: "0xf569919046f19a0c40b519ecfbb6ca0319698cd5908716c29b62ef56541f298b::scallop_sui::SCALLOP_SUI",
911
+ treasury: "0x0e499640a12c38dd9cc44532f5bc5fd1b6da86d2f9a8810357250f4b26e9e5c7"
853
912
  },
854
913
  scetus: {
855
914
  coinType: "0x8b71e6d323ed78515af2bead13bf3d0da1562ba4a99234eb7c4f14fd39ef0427::scallop_cetus::SCALLOP_CETUS",
856
915
  treasury: "0xd786f4b2d26278cc7911a3445b1b085eab60f269ef9dbb6b87e803d52f155003"
857
916
  },
858
917
  ssca: {
859
- coinType: "0x0a9d3c6c9af9f6e8def82921541bcbd17f73ed31bed3adcb684f2a4c267e42f0::scallop_sca::SCALLOP_SCA",
860
- treasury: "0xe818636d1d6c46d6ea1a2dce9d94696d7cbc18ce27451b603eeaa47aba8d75e0"
918
+ coinType: "0x958428555e778e55918a59eb1c92c77f32b5c554fa3a5e56cd0815086b5072e7::scallop_sca::SCALLOP_SCA",
919
+ treasury: "0x5f1c5de1df7341075d119570269b7b452af50afe8363080638f1ae29a554c038"
861
920
  },
862
921
  swusdc: {
863
- coinType: "0xaedc3ab75db8680b81a755015fa90124d217be93457b893c05bac033817defaf::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
864
- treasury: "0xfc6971648f867f7fd6928d1b873af71577e2eaf2c7543ef8bc82c431d833ae78"
922
+ coinType: "0xf5447c4305a486d8c8557559887c2c39449ddb5e748f15d33946d02a1663c158::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
923
+ treasury: "0x471fbab72578bab577263006fe32543b6e76153fffa2bef69affe4bc4934258f"
865
924
  },
866
925
  swusdt: {
867
- coinType: "0xbf02fc87ddc104b342ad8414c85ceadf5b0c823c055a06fb0ed776272c01a52a::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
868
- treasury: "0xb9593e2c3a0ba796ee815012b75ae46468ea78cda0188b9ac6816efe65503521"
926
+ coinType: "0xac781d9f73058ff5e69f9bf8dde32f2e8c71c66d7fe8497fc83b2d9182254b22::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
927
+ treasury: "0x921a4ed4bb4b4f11f51a462c83f4c0f6b60a90e441d1bc0d26d6fd893146bf4d"
869
928
  },
870
929
  sweth: {
871
930
  coinType: "0x27d54f43e3eda701be56b82e5756e41c84467cd202f5cf713d5f9e45a9f1b6bc::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",
@@ -881,7 +940,11 @@ var TEST_ADDRESSES = {
881
940
  },
882
941
  svsui: {
883
942
  coinType: "0x97023a317320c4498cc4cd239dd02fd30c28246e5e8f81325d63f2bd8d70f6b3::scallop_v_sui::SCALLOP_V_SUI",
884
- treasury: "0x327114f0bf3559d7e2de10282147ed76a236c7c6775029165c4db09a6062ead6\u0192"
943
+ treasury: "0x327114f0bf3559d7e2de10282147ed76a236c7c6775029165c4db09a6062ead6"
944
+ },
945
+ ssbeth: {
946
+ coinType: "0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",
947
+ treasury: "0xfd0f02def6358a1f266acfa1493d4707ee8387460d434fb667d63d755ff907ed"
885
948
  }
886
949
  }
887
950
  }
@@ -2588,23 +2651,148 @@ var supplyLimitZod = zod.object({
2588
2651
  value: zod.string()
2589
2652
  })
2590
2653
  });
2591
- var SUPPLY_LIMIT_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey";
2654
+ var supplyLimitKeyType = `0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey`;
2592
2655
  var getSupplyLimit = async (utils, poolName) => {
2593
- const poolCoinType = utils.parseCoinType(poolName).slice(2);
2594
- const marketObject = utils.address.get("core.market");
2595
- if (!marketObject)
2596
- return null;
2597
- const object = await utils.cache.queryGetDynamicFieldObject({
2598
- parentId: marketObject,
2599
- name: {
2600
- type: SUPPLY_LIMIT_KEY,
2601
- value: poolCoinType
2656
+ try {
2657
+ const poolCoinType = utils.parseCoinType(poolName).slice(2);
2658
+ const marketObject = utils.address.get("core.market");
2659
+ if (!marketObject)
2660
+ return null;
2661
+ const object = await utils.cache.queryGetDynamicFieldObject({
2662
+ parentId: marketObject,
2663
+ name: {
2664
+ type: supplyLimitKeyType,
2665
+ value: poolCoinType
2666
+ }
2667
+ });
2668
+ const parsedData = supplyLimitZod.safeParse(object?.data?.content);
2669
+ if (!parsedData.success)
2670
+ return null;
2671
+ return parsedData.data.fields.value;
2672
+ } catch (e) {
2673
+ console.error(`Error in getSupplyLimit for ${poolName}: ${e.message}`);
2674
+ return "0";
2675
+ }
2676
+ };
2677
+
2678
+ // src/queries/isolatedAssetQuery.ts
2679
+ import { z as zod2 } from "zod";
2680
+ var isolatedAssetZod = zod2.object({
2681
+ dataType: zod2.string(),
2682
+ type: zod2.string(),
2683
+ hasPublicTransfer: zod2.boolean(),
2684
+ fields: zod2.object({
2685
+ id: zod2.object({
2686
+ id: zod2.string()
2687
+ }),
2688
+ name: zod2.object({
2689
+ type: zod2.string()
2690
+ }),
2691
+ value: zod2.boolean()
2692
+ })
2693
+ });
2694
+ var isolatedAssetKeyType = `0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey`;
2695
+ var getIsolatedAssets = async (address) => {
2696
+ try {
2697
+ const marketObject = address.get("core.market");
2698
+ const isolatedAssets = [];
2699
+ if (!marketObject)
2700
+ return isolatedAssets;
2701
+ let hasNextPage = false;
2702
+ let nextCursor = null;
2703
+ const isIsolatedDynamicField = (dynamicField) => {
2704
+ return dynamicField.name.type === isolatedAssetKeyType;
2705
+ };
2706
+ do {
2707
+ const response = await address.cache.queryGetDynamicFields({
2708
+ parentId: marketObject,
2709
+ cursor: nextCursor,
2710
+ limit: 10
2711
+ });
2712
+ if (!response)
2713
+ break;
2714
+ const isolatedAssetCoinTypes = response.data.filter(isIsolatedDynamicField).map(({ name }) => `0x${name.value.type.name}`);
2715
+ isolatedAssets.push(...isolatedAssetCoinTypes);
2716
+ if (response && response.hasNextPage && response.nextCursor) {
2717
+ hasNextPage = true;
2718
+ nextCursor = response.nextCursor;
2719
+ } else {
2720
+ hasNextPage = false;
2721
+ }
2722
+ } while (hasNextPage);
2723
+ return isolatedAssets;
2724
+ } catch (e) {
2725
+ console.error(e);
2726
+ return [];
2727
+ }
2728
+ };
2729
+ var isIsolatedAsset = async (utils, coinName) => {
2730
+ try {
2731
+ const marketObject = utils.address.get("core.market");
2732
+ const cachedData = utils.address.cache.queryClient.getQueryData([
2733
+ "getDynamicFields",
2734
+ marketObject
2735
+ ]);
2736
+ if (cachedData) {
2737
+ const coinType2 = utils.parseCoinType(coinName);
2738
+ return cachedData.includes(coinType2);
2602
2739
  }
2603
- });
2604
- const parsedData = supplyLimitZod.safeParse(object?.data?.content);
2605
- if (!parsedData.success)
2606
- return null;
2607
- return parsedData.data.fields.value;
2740
+ const coinType = utils.parseCoinType(coinName).slice(2);
2741
+ const object = await utils.cache.queryGetDynamicFieldObject({
2742
+ parentId: marketObject,
2743
+ name: {
2744
+ type: isolatedAssetKeyType,
2745
+ value: coinType
2746
+ }
2747
+ });
2748
+ const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
2749
+ if (!parsedData.success)
2750
+ return false;
2751
+ return parsedData.data.fields.value;
2752
+ } catch (e) {
2753
+ console.error(e);
2754
+ return false;
2755
+ }
2756
+ };
2757
+
2758
+ // src/queries/borrowLimitQuery.ts
2759
+ import { z as zod3 } from "zod";
2760
+ var borrowLimitZod = zod3.object({
2761
+ dataType: zod3.string(),
2762
+ type: zod3.string(),
2763
+ hasPublicTransfer: zod3.boolean(),
2764
+ fields: zod3.object({
2765
+ id: zod3.object({
2766
+ id: zod3.string()
2767
+ }),
2768
+ name: zod3.object({
2769
+ type: zod3.string()
2770
+ }),
2771
+ value: zod3.string()
2772
+ })
2773
+ });
2774
+ var borrowLimitKeyType = `0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey`;
2775
+ var getBorrowLimit = async (utils, poolName) => {
2776
+ try {
2777
+ const poolCoinType = utils.parseCoinType(poolName).slice(2);
2778
+ const marketObject = utils.address.get("core.market");
2779
+ if (!marketObject)
2780
+ return null;
2781
+ const object = await utils.cache.queryGetDynamicFieldObject({
2782
+ parentId: marketObject,
2783
+ name: {
2784
+ type: borrowLimitKeyType,
2785
+ value: poolCoinType
2786
+ }
2787
+ });
2788
+ const parsedData = borrowLimitZod.safeParse(object?.data?.content);
2789
+ if (!parsedData.success)
2790
+ return null;
2791
+ return parsedData.data.fields.value;
2792
+ } catch (e) {
2793
+ console.error(`Error in getBorrowLimit for ${poolName}: ${e.message}`);
2794
+ return "0";
2795
+ }
2608
2796
  };
2609
2797
 
2610
2798
  // src/queries/coreQuery.ts
@@ -2673,6 +2861,9 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2673
2861
  const maxSupplyCoin = BigNumber3(
2674
2862
  await getSupplyLimit(query.utils, poolCoinName) ?? "0"
2675
2863
  ).shiftedBy(-coinDecimal).toNumber();
2864
+ const maxBorrowCoin = BigNumber3(
2865
+ await getBorrowLimit(query.utils, poolCoinName) ?? "0"
2866
+ ).shiftedBy(-coinDecimal).toNumber();
2676
2867
  pools[poolCoinName] = {
2677
2868
  coinName: poolCoinName,
2678
2869
  symbol: query.utils.parseSymbol(poolCoinName),
@@ -2691,9 +2882,10 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2691
2882
  borrowFee: parsedMarketPoolData.borrowFee,
2692
2883
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2693
2884
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2694
- // isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2695
- isIsolated: false,
2885
+ isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2886
+ // isIsolated: false,
2696
2887
  maxSupplyCoin,
2888
+ maxBorrowCoin,
2697
2889
  ...calculatedMarketPoolData
2698
2890
  };
2699
2891
  }
@@ -2731,6 +2923,7 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2731
2923
  liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
2732
2924
  liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
2733
2925
  liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
2926
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
2734
2927
  ...calculatedMarketCollateralData
2735
2928
  };
2736
2929
  }
@@ -2778,85 +2971,76 @@ var getMarketPools = async (query, poolCoinNames = [...SUPPORT_POOLS], indexer =
2778
2971
  return marketPools;
2779
2972
  };
2780
2973
  var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, coinPrice) => {
2781
- let marketPool;
2782
- let balanceSheet;
2783
- let borrowIndex;
2784
- let interestModel;
2785
- let borrowFeeRate;
2786
- coinPrice = coinPrice ?? (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2787
- if (indexer) {
2788
- const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
2789
- marketPoolIndexer.coinPrice = coinPrice ?? marketPoolIndexer.coinPrice;
2790
- marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
2791
- marketPoolIndexer.coinName
2792
- );
2793
- return marketPoolIndexer;
2794
- }
2795
- const marketId = query.address.get("core.market");
2796
- marketObject = marketObject ?? (await query.cache.queryGetObject(marketId, {
2797
- showContent: true
2798
- }))?.data;
2799
- if (marketObject) {
2800
- if (marketObject.content && "fields" in marketObject.content) {
2801
- const fields = marketObject.content.fields;
2802
- const coinType = query.utils.parseCoinType(poolCoinName);
2803
- const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
2804
- const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2805
- parentId: balanceSheetParentId,
2806
- name: {
2807
- type: "0x1::type_name::TypeName",
2808
- value: {
2809
- name: coinType.substring(2)
2810
- }
2974
+ try {
2975
+ coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2976
+ if (indexer) {
2977
+ const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
2978
+ if (!marketPoolIndexer) {
2979
+ return void 0;
2980
+ }
2981
+ marketPoolIndexer.coinPrice = coinPrice ?? marketPoolIndexer.coinPrice;
2982
+ marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
2983
+ marketPoolIndexer.coinName
2984
+ );
2985
+ return marketPoolIndexer;
2986
+ }
2987
+ const marketId = query.address.get("core.market");
2988
+ marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2989
+ showContent: true
2990
+ }))?.data;
2991
+ if (!(marketObject && marketObject.content?.dataType === "moveObject"))
2992
+ throw new Error(`Failed to fetch marketObject`);
2993
+ const fields = marketObject.content.fields;
2994
+ const coinType = query.utils.parseCoinType(poolCoinName);
2995
+ const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
2996
+ const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2997
+ parentId: balanceSheetParentId,
2998
+ name: {
2999
+ type: "0x1::type_name::TypeName",
3000
+ value: {
3001
+ name: coinType.substring(2)
2811
3002
  }
2812
- });
2813
- if (!balanceSheetDynamicFieldObjectResponse)
2814
- throw new Error(
2815
- `Failed to fetch balanceSheetDynamicFieldObjectResponse for ${poolCoinName}`
2816
- );
2817
- const balanceSheetDynamicFieldObject = balanceSheetDynamicFieldObjectResponse.data;
2818
- if (balanceSheetDynamicFieldObject && balanceSheetDynamicFieldObject.content && "fields" in balanceSheetDynamicFieldObject.content) {
2819
- const dynamicFields = balanceSheetDynamicFieldObject.content.fields;
2820
- balanceSheet = dynamicFields.value.fields;
2821
3003
  }
2822
- const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
2823
- const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2824
- parentId: borrowIndexParentId,
2825
- name: {
2826
- type: "0x1::type_name::TypeName",
2827
- value: {
2828
- name: coinType.substring(2)
2829
- }
3004
+ });
3005
+ const balanceSheetDynamicFieldObject = balanceSheetDynamicFieldObjectResponse?.data;
3006
+ if (!(balanceSheetDynamicFieldObject && balanceSheetDynamicFieldObject.content && "fields" in balanceSheetDynamicFieldObject.content))
3007
+ throw new Error(
3008
+ `Failed to fetch balanceSheetDynamicFieldObject for ${poolCoinName}: ${balanceSheetDynamicFieldObjectResponse?.error?.code.toString()}`
3009
+ );
3010
+ const balanceSheet = balanceSheetDynamicFieldObject.content.fields.value.fields;
3011
+ const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
3012
+ const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3013
+ parentId: borrowIndexParentId,
3014
+ name: {
3015
+ type: "0x1::type_name::TypeName",
3016
+ value: {
3017
+ name: coinType.substring(2)
2830
3018
  }
2831
- });
2832
- if (!borrowIndexDynamicFieldObjectResponse)
2833
- throw new Error(
2834
- `Failed to fetch borrowIndexDynamicFieldObjectResponse for ${poolCoinName}`
2835
- );
2836
- const borrowIndexDynamicFieldObject = borrowIndexDynamicFieldObjectResponse.data;
2837
- if (borrowIndexDynamicFieldObject && borrowIndexDynamicFieldObject.content && "fields" in borrowIndexDynamicFieldObject.content) {
2838
- const dynamicFields = borrowIndexDynamicFieldObject.content.fields;
2839
- borrowIndex = dynamicFields.value.fields;
2840
3019
  }
2841
- const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
2842
- const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2843
- parentId: interestModelParentId,
2844
- name: {
2845
- type: "0x1::type_name::TypeName",
2846
- value: {
2847
- name: coinType.substring(2)
2848
- }
3020
+ });
3021
+ const borrowIndexDynamicFieldObject = borrowIndexDynamicFieldObjectResponse?.data;
3022
+ if (!(borrowIndexDynamicFieldObject && borrowIndexDynamicFieldObject.content && "fields" in borrowIndexDynamicFieldObject.content))
3023
+ throw new Error(
3024
+ `Failed to fetch borrowIndexDynamicFieldObject for ${poolCoinName}`
3025
+ );
3026
+ const borrowIndex = borrowIndexDynamicFieldObject.content.fields.value.fields;
3027
+ const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
3028
+ const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3029
+ parentId: interestModelParentId,
3030
+ name: {
3031
+ type: "0x1::type_name::TypeName",
3032
+ value: {
3033
+ name: coinType.substring(2)
2849
3034
  }
2850
- });
2851
- if (!interestModelDynamicFieldObjectResponse)
2852
- throw new Error(
2853
- `Failed to fetch interestModelDynamicFieldObjectResponse for ${poolCoinName}`
2854
- );
2855
- const interestModelDynamicFieldObject = interestModelDynamicFieldObjectResponse.data;
2856
- if (interestModelDynamicFieldObject && interestModelDynamicFieldObject.content && "fields" in interestModelDynamicFieldObject.content) {
2857
- const dynamicFields = interestModelDynamicFieldObject.content.fields;
2858
- interestModel = dynamicFields.value.fields;
2859
3035
  }
3036
+ });
3037
+ const interestModelDynamicFieldObject = interestModelDynamicFieldObjectResponse?.data;
3038
+ if (!(interestModelDynamicFieldObject && interestModelDynamicFieldObject.content && "fields" in interestModelDynamicFieldObject.content))
3039
+ throw new Error(
3040
+ `Failed to fetch interestModelDynamicFieldObject for ${poolCoinName}: ${interestModelDynamicFieldObject}`
3041
+ );
3042
+ const interestModel = interestModelDynamicFieldObject.content.fields.value.fields;
3043
+ const getBorrowFee = async () => {
2860
3044
  const borrowFeeDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2861
3045
  parentId: marketId,
2862
3046
  name: {
@@ -2868,18 +3052,11 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2868
3052
  }
2869
3053
  }
2870
3054
  });
2871
- if (!borrowFeeDynamicFieldObjectResponse)
2872
- throw new Error(
2873
- `Failed to fetch borrowFeeDynamicFieldObjectResponse for ${poolCoinName}`
2874
- );
2875
- const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse.data;
2876
- if (borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content) {
2877
- const dynamicFields = borrowFeeDynamicFieldObject.content.fields;
2878
- borrowFeeRate = dynamicFields.value.fields;
2879
- }
2880
- }
2881
- }
2882
- if (balanceSheet && borrowIndex && interestModel && (USE_TEST_ADDRESS || borrowFeeRate)) {
3055
+ const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse?.data;
3056
+ if (!(borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content))
3057
+ return { value: "0" };
3058
+ return borrowFeeDynamicFieldObject.content.fields.value.fields;
3059
+ };
2883
3060
  const parsedMarketPoolData = parseOriginMarketPoolData({
2884
3061
  type: interestModel.type.fields,
2885
3062
  maxBorrowRate: interestModel.max_borrow_rate.fields,
@@ -2893,7 +3070,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2893
3070
  reserve: balanceSheet.revenue,
2894
3071
  reserveFactor: interestModel.revenue_factor.fields,
2895
3072
  borrowWeight: interestModel.borrow_weight.fields,
2896
- borrowFeeRate: borrowFeeRate ?? { value: "0" },
3073
+ borrowFeeRate: await getBorrowFee(),
2897
3074
  baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
2898
3075
  borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
2899
3076
  borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
@@ -2909,7 +3086,10 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2909
3086
  const maxSupplyCoin = BigNumber3(
2910
3087
  await getSupplyLimit(query.utils, poolCoinName) ?? "0"
2911
3088
  ).shiftedBy(-coinDecimal).toNumber();
2912
- marketPool = {
3089
+ const maxBorrowCoin = BigNumber3(
3090
+ await getBorrowLimit(query.utils, poolCoinName) ?? "0"
3091
+ ).shiftedBy(-coinDecimal).toNumber();
3092
+ return {
2913
3093
  coinName: poolCoinName,
2914
3094
  symbol: query.utils.parseSymbol(poolCoinName),
2915
3095
  coinType: query.utils.parseCoinType(poolCoinName),
@@ -2928,12 +3108,13 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2928
3108
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2929
3109
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2930
3110
  maxSupplyCoin,
2931
- // isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2932
- isIsolated: false,
3111
+ maxBorrowCoin,
3112
+ isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2933
3113
  ...calculatedMarketPoolData
2934
3114
  };
3115
+ } catch (e) {
3116
+ console.error(e.message);
2935
3117
  }
2936
- return marketPool;
2937
3118
  };
2938
3119
  var getMarketCollaterals = async (query, collateralCoinNames = [...SUPPORT_COLLATERALS], indexer = false) => {
2939
3120
  const marketId = query.address.get("core.market");
@@ -2982,85 +3163,76 @@ var getMarketCollateral = async (query, collateralCoinName, indexer = false, mar
2982
3163
  );
2983
3164
  return marketCollateralIndexer;
2984
3165
  }
2985
- let marketCollateral;
2986
- let riskModel;
2987
- let collateralStat;
2988
3166
  const marketId = query.address.get("core.market");
2989
3167
  marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2990
3168
  showContent: true
2991
3169
  }))?.data;
2992
- if (marketObject) {
2993
- if (marketObject.content && "fields" in marketObject.content) {
2994
- const fields = marketObject.content.fields;
2995
- const coinType = query.utils.parseCoinType(collateralCoinName);
2996
- const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
2997
- const riskModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2998
- parentId: riskModelParentId,
2999
- name: {
3000
- type: "0x1::type_name::TypeName",
3001
- value: {
3002
- name: coinType.substring(2)
3003
- }
3004
- }
3005
- });
3006
- if (!riskModelDynamicFieldObjectResponse)
3007
- return void 0;
3008
- const riskModelDynamicFieldObject = riskModelDynamicFieldObjectResponse.data;
3009
- if (riskModelDynamicFieldObject && riskModelDynamicFieldObject.content && "fields" in riskModelDynamicFieldObject.content) {
3010
- const dynamicFields = riskModelDynamicFieldObject.content.fields;
3011
- riskModel = dynamicFields.value.fields;
3170
+ if (!(marketObject && marketObject.content?.dataType === "moveObject"))
3171
+ throw new Error(`Failed to fetch marketObject`);
3172
+ const fields = marketObject.content.fields;
3173
+ const coinType = query.utils.parseCoinType(collateralCoinName);
3174
+ const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
3175
+ const riskModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3176
+ parentId: riskModelParentId,
3177
+ name: {
3178
+ type: "0x1::type_name::TypeName",
3179
+ value: {
3180
+ name: coinType.substring(2)
3012
3181
  }
3013
- const collateralStatParentId = fields.collateral_stats.fields.table.fields.id.id;
3014
- const collateralStatDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3015
- parentId: collateralStatParentId,
3016
- name: {
3017
- type: "0x1::type_name::TypeName",
3018
- value: {
3019
- name: coinType.substring(2)
3020
- }
3021
- }
3022
- });
3023
- if (!collateralStatDynamicFieldObjectResponse)
3024
- return void 0;
3025
- const collateralStatDynamicFieldObject = collateralStatDynamicFieldObjectResponse.data;
3026
- if (collateralStatDynamicFieldObject && collateralStatDynamicFieldObject.content && "fields" in collateralStatDynamicFieldObject.content) {
3027
- const dynamicFields = collateralStatDynamicFieldObject.content.fields;
3028
- collateralStat = dynamicFields.value.fields;
3182
+ }
3183
+ });
3184
+ const riskModelDynamicFieldObject = riskModelDynamicFieldObjectResponse?.data;
3185
+ if (!(riskModelDynamicFieldObject && riskModelDynamicFieldObject.content && "fields" in riskModelDynamicFieldObject.content))
3186
+ throw new Error(
3187
+ `Failed to fetch riskModelDynamicFieldObject for ${riskModelDynamicFieldObjectResponse?.error?.code.toString()}: `
3188
+ );
3189
+ const riskModel = riskModelDynamicFieldObject.content.fields.value.fields;
3190
+ const collateralStatParentId = fields.collateral_stats.fields.table.fields.id.id;
3191
+ const collateralStatDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3192
+ parentId: collateralStatParentId,
3193
+ name: {
3194
+ type: "0x1::type_name::TypeName",
3195
+ value: {
3196
+ name: coinType.substring(2)
3029
3197
  }
3030
3198
  }
3031
- }
3032
- if (riskModel && collateralStat) {
3033
- const parsedMarketCollateralData = parseOriginMarketCollateralData({
3034
- type: riskModel.type.fields,
3035
- collateralFactor: riskModel.collateral_factor.fields,
3036
- liquidationFactor: riskModel.liquidation_factor.fields,
3037
- liquidationDiscount: riskModel.liquidation_discount.fields,
3038
- liquidationPanelty: riskModel.liquidation_penalty.fields,
3039
- liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
3040
- maxCollateralAmount: riskModel.max_collateral_amount,
3041
- totalCollateralAmount: collateralStat.amount
3042
- });
3043
- const calculatedMarketCollateralData = calculateMarketCollateralData(
3044
- query.utils,
3045
- parsedMarketCollateralData
3199
+ });
3200
+ const collateralStatDynamicFieldObject = collateralStatDynamicFieldObjectResponse?.data;
3201
+ if (!(collateralStatDynamicFieldObject && collateralStatDynamicFieldObject.content && "fields" in collateralStatDynamicFieldObject.content))
3202
+ throw new Error(
3203
+ `Failed to fetch collateralStatDynamicFieldObject for ${collateralCoinName}: ${collateralStatDynamicFieldObjectResponse?.error?.code.toString()}`
3046
3204
  );
3047
- marketCollateral = {
3048
- coinName: collateralCoinName,
3049
- symbol: query.utils.parseSymbol(collateralCoinName),
3050
- coinType: query.utils.parseCoinType(collateralCoinName),
3051
- marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
3052
- coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
3053
- coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
3054
- coinPrice: coinPrice ?? 0,
3055
- collateralFactor: parsedMarketCollateralData.collateralFactor,
3056
- liquidationFactor: parsedMarketCollateralData.liquidationFactor,
3057
- liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
3058
- liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
3059
- liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
3060
- ...calculatedMarketCollateralData
3061
- };
3062
- }
3063
- return marketCollateral;
3205
+ const collateralStat = collateralStatDynamicFieldObject.content.fields.value.fields;
3206
+ const parsedMarketCollateralData = parseOriginMarketCollateralData({
3207
+ type: riskModel.type.fields,
3208
+ collateralFactor: riskModel.collateral_factor.fields,
3209
+ liquidationFactor: riskModel.liquidation_factor.fields,
3210
+ liquidationDiscount: riskModel.liquidation_discount.fields,
3211
+ liquidationPanelty: riskModel.liquidation_penalty.fields,
3212
+ liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
3213
+ maxCollateralAmount: riskModel.max_collateral_amount,
3214
+ totalCollateralAmount: collateralStat.amount
3215
+ });
3216
+ const calculatedMarketCollateralData = calculateMarketCollateralData(
3217
+ query.utils,
3218
+ parsedMarketCollateralData
3219
+ );
3220
+ return {
3221
+ coinName: collateralCoinName,
3222
+ symbol: query.utils.parseSymbol(collateralCoinName),
3223
+ coinType: query.utils.parseCoinType(collateralCoinName),
3224
+ marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
3225
+ coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
3226
+ coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
3227
+ coinPrice: coinPrice ?? 0,
3228
+ collateralFactor: parsedMarketCollateralData.collateralFactor,
3229
+ liquidationFactor: parsedMarketCollateralData.liquidationFactor,
3230
+ liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
3231
+ liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
3232
+ liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
3233
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
3234
+ ...calculatedMarketCollateralData
3235
+ };
3064
3236
  };
3065
3237
  var getObligations = async ({
3066
3238
  address
@@ -3238,98 +3410,18 @@ var getFlashLoanFees = async (query, assetNames) => {
3238
3410
  );
3239
3411
  };
3240
3412
 
3241
- // src/queries/isolatedAssetQuery.ts
3242
- import { z as zod2 } from "zod";
3243
- var isolatedAssetZod = zod2.object({
3244
- dataType: zod2.string(),
3245
- type: zod2.string(),
3246
- hasPublicTransfer: zod2.boolean(),
3247
- fields: zod2.object({
3248
- id: zod2.object({
3249
- id: zod2.string()
3250
- }),
3251
- name: zod2.object({
3252
- type: zod2.string()
3253
- }),
3254
- value: zod2.boolean()
3255
- })
3256
- });
3257
- var ISOLATED_ASSET_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::IsolatedAssetKey";
3258
- var getIsolatedAssets = async (address) => {
3259
- try {
3260
- const marketObject = address.get("core.market");
3261
- const isolatedAssets = [];
3262
- if (!marketObject)
3263
- return isolatedAssets;
3264
- let hasNextPage = false;
3265
- let nextCursor = null;
3266
- const isIsolatedDynamicField = (dynamicField) => {
3267
- return dynamicField.name.type === ISOLATED_ASSET_KEY;
3268
- };
3269
- do {
3270
- const response = await address.cache.queryGetDynamicFields({
3271
- parentId: marketObject,
3272
- cursor: nextCursor,
3273
- limit: 10
3274
- });
3275
- if (!response)
3276
- break;
3277
- const isolatedAssetCoinTypes = response.data.filter(isIsolatedDynamicField).map(({ name }) => `0x${name.value.type.name}`);
3278
- isolatedAssets.push(...isolatedAssetCoinTypes);
3279
- if (response && response.hasNextPage && response.nextCursor) {
3280
- hasNextPage = true;
3281
- nextCursor = response.nextCursor;
3282
- } else {
3283
- hasNextPage = false;
3284
- }
3285
- } while (hasNextPage);
3286
- return isolatedAssets;
3287
- } catch (e) {
3288
- console.error(e);
3289
- return [];
3290
- }
3291
- };
3292
- var isIsolatedAsset = async (utils, coinName) => {
3293
- try {
3294
- const marketObject = utils.address.get("core.market");
3295
- const cachedData = utils.address.cache.queryClient.getQueryData([
3296
- "getDynamicFields",
3297
- marketObject
3298
- ]);
3299
- if (cachedData) {
3300
- const coinType2 = utils.parseCoinType(coinName);
3301
- return cachedData.includes(coinType2);
3302
- }
3303
- const coinType = utils.parseCoinType(coinName).slice(2);
3304
- const object = await utils.cache.queryGetDynamicFieldObject({
3305
- parentId: marketObject,
3306
- name: {
3307
- type: ISOLATED_ASSET_KEY,
3308
- value: coinType
3309
- }
3310
- });
3311
- const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
3312
- if (!parsedData.success)
3313
- return false;
3314
- return parsedData.data.fields.value;
3315
- } catch (e) {
3316
- console.error(e);
3317
- return false;
3318
- }
3319
- };
3320
-
3321
3413
  // src/queries/loyaltyProgramQuery.ts
3322
3414
  import BigNumber4 from "bignumber.js";
3323
- import { z as zod3 } from "zod";
3324
- var rewardPoolFieldsZod = zod3.object({
3325
- balance: zod3.string(),
3326
- enable_claim: zod3.boolean()
3415
+ import { z as zod4 } from "zod";
3416
+ var rewardPoolFieldsZod = zod4.object({
3417
+ balance: zod4.string(),
3418
+ enable_claim: zod4.boolean()
3327
3419
  }).transform((value) => ({
3328
3420
  totalPoolReward: BigNumber4(value.balance).shiftedBy(-9).toNumber(),
3329
3421
  isClaimEnabled: value.enable_claim
3330
3422
  }));
3331
- var userRewardFieldsZod = zod3.object({
3332
- value: zod3.string()
3423
+ var userRewardFieldsZod = zod4.object({
3424
+ value: zod4.string()
3333
3425
  }).transform((value) => BigNumber4(value.value).shiftedBy(-9).toNumber());
3334
3426
  var getLoyaltyProgramInformations = async (query, veScaKey) => {
3335
3427
  const rewardPool = query.address.get("loyaltyProgram.rewardPool");
@@ -3937,10 +4029,12 @@ var getPythPrices = async ({
3937
4029
  const pythPriceFeed = address.get(
3938
4030
  `core.coins.${assetCoinName}.oracle.pyth.feedObject`
3939
4031
  );
3940
- if (!prev[pythPriceFeed]) {
3941
- prev[pythPriceFeed] = [assetCoinName];
3942
- } else {
3943
- prev[pythPriceFeed].push(assetCoinName);
4032
+ if (pythPriceFeed) {
4033
+ if (!prev[pythPriceFeed]) {
4034
+ prev[pythPriceFeed] = [assetCoinName];
4035
+ } else {
4036
+ prev[pythPriceFeed].push(assetCoinName);
4037
+ }
3944
4038
  }
3945
4039
  return prev;
3946
4040
  },
@@ -4138,7 +4232,7 @@ var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPr
4138
4232
  const coinName = query.utils.parseCoinName(marketCoinName);
4139
4233
  marketPool = marketPool || await query.getMarketPool(coinName, indexer);
4140
4234
  if (!marketPool) {
4141
- throw new Error(`Fail to fetch marketPool for ${coinName}`);
4235
+ throw new Error(`Failed to fetch marketPool for ${marketCoinName}`);
4142
4236
  }
4143
4237
  const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
4144
4238
  const rewardPoolId = query.address.get(
@@ -4412,7 +4506,7 @@ var getStakeRewardPool = async ({
4412
4506
  import BigNumber7 from "bignumber.js";
4413
4507
  import { SUI_CLOCK_OBJECT_ID, SuiTxBlock as SuiTxBlock2 } from "@scallop-io/sui-kit";
4414
4508
  import { bcs as bcs2 } from "@mysten/sui/bcs";
4415
- import { z as zod4 } from "zod";
4509
+ import { z as zod5 } from "zod";
4416
4510
  import assert2 from "assert";
4417
4511
  var getVescaKeys = async (utils, ownerAddress) => {
4418
4512
  const owner = ownerAddress || utils.suiKit.currentAddress();
@@ -4461,10 +4555,10 @@ var getVeScas = async ({
4461
4555
  }
4462
4556
  return result;
4463
4557
  };
4464
- var SuiObjectRefZod = zod4.object({
4465
- objectId: zod4.string(),
4466
- digest: zod4.string(),
4467
- version: zod4.string()
4558
+ var SuiObjectRefZod = zod5.object({
4559
+ objectId: zod5.string(),
4560
+ digest: zod5.string(),
4561
+ version: zod5.string()
4468
4562
  });
4469
4563
  var getVeSca = async (utils, veScaKey) => {
4470
4564
  const tableId = utils.address.get(`vesca.tableId`);
@@ -4654,10 +4748,10 @@ var ScallopUtils = class {
4654
4748
  * @param address - ScallopAddress instance.
4655
4749
  */
4656
4750
  async init(force = false, address) {
4657
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
4658
- await this.address.read();
4659
- } else {
4751
+ if (address && !this.address)
4660
4752
  this.address = address;
4753
+ if (force || !this.address.getAddresses()) {
4754
+ await this.address.read();
4661
4755
  }
4662
4756
  }
4663
4757
  /**
@@ -4943,9 +5037,7 @@ var ScallopUtils = class {
4943
5037
  for (const endpoint of endpoints) {
4944
5038
  const priceIdPairs = Array.from(failedRequests.values()).reduce(
4945
5039
  (acc, coinName) => {
4946
- const priceId = this.address.get(
4947
- `core.coins.${coinName}.oracle.pyth.feed`
4948
- );
5040
+ const priceId = this.address.get(`core.coins.${coinName}.oracle.pyth.feed`) ?? PYTH_FEED_IDS[coinName];
4949
5041
  acc.push([coinName, priceId]);
4950
5042
  return acc;
4951
5043
  },
@@ -6919,11 +7011,12 @@ var ScallopQuery = class {
6919
7011
  * @param address - ScallopAddress instance.
6920
7012
  */
6921
7013
  async init(force = false, address) {
6922
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
6923
- await this.address.read();
6924
- } else {
7014
+ if (address && !this.address) {
6925
7015
  this.address = address;
6926
7016
  }
7017
+ if (force || !this.address.getAddresses()) {
7018
+ await this.address.read();
7019
+ }
6927
7020
  await this.utils.init(force, this.address);
6928
7021
  }
6929
7022
  /* ==================== Core Query Methods ==================== */
@@ -7385,11 +7478,17 @@ var ScallopQuery = class {
7385
7478
  return await getFlashLoanFees(this, assetCoinNames);
7386
7479
  }
7387
7480
  /**
7388
- * Get supply limit of supply pool
7481
+ * Get supply limit of lending pool
7389
7482
  */
7390
7483
  async getPoolSupplyLimit(poolName) {
7391
7484
  return await getSupplyLimit(this.utils, poolName);
7392
7485
  }
7486
+ /**
7487
+ * Get borrow limit of borrow pool
7488
+ */
7489
+ async getPoolBorrowLimit(poolName) {
7490
+ return await getBorrowLimit(this.utils, poolName);
7491
+ }
7393
7492
  /**
7394
7493
  * Get list of isolated assets
7395
7494
  */
@@ -7462,10 +7561,10 @@ var ScallopBuilder = class {
7462
7561
  * @param address - ScallopAddress instance.
7463
7562
  */
7464
7563
  async init(force = false, address) {
7465
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
7466
- await this.address.read();
7467
- } else {
7564
+ if (address && !this.address)
7468
7565
  this.address = address;
7566
+ if (force || !this.address.getAddresses()) {
7567
+ await this.address.read();
7469
7568
  }
7470
7569
  await this.query.init(force, this.address);
7471
7570
  await this.utils.init(force, this.address);