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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/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
@@ -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",
@@ -153,6 +157,8 @@ var coinDecimals = {
153
157
  hasui: 9,
154
158
  vsui: 9,
155
159
  sca: 9,
160
+ deep: 6,
161
+ fud: 5,
156
162
  susdc: 6,
157
163
  sweth: 8,
158
164
  ssbeth: 8,
@@ -166,7 +172,9 @@ var coinDecimals = {
166
172
  safsui: 9,
167
173
  shasui: 9,
168
174
  svsui: 9,
169
- ssca: 9
175
+ ssca: 9,
176
+ sdeep: 6,
177
+ sfud: 5
170
178
  };
171
179
  var assetCoins = {
172
180
  usdc: "usdc",
@@ -182,7 +190,9 @@ var assetCoins = {
182
190
  afsui: "afsui",
183
191
  hasui: "hasui",
184
192
  vsui: "vsui",
185
- sca: "sca"
193
+ sca: "sca",
194
+ deep: "deep",
195
+ fud: "fud"
186
196
  };
187
197
  var marketCoins = {
188
198
  susdc: "susdc",
@@ -198,7 +208,9 @@ var marketCoins = {
198
208
  safsui: "safsui",
199
209
  shasui: "shasui",
200
210
  svsui: "svsui",
201
- ssca: "ssca"
211
+ ssca: "ssca",
212
+ sdeep: "sdeep",
213
+ sfud: "sfud"
202
214
  };
203
215
  var sCoins = {
204
216
  susdc: "susdc",
@@ -266,7 +278,10 @@ var coinIds = {
266
278
  afsui: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",
267
279
  hasui: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",
268
280
  vsui: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",
269
- sca: IS_VE_SCA_TEST ? "0x6cd813061a3adf3602b76545f076205f0c8e7ec1d3b1eab9a1da7992c18c0524" : "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6"
281
+ sca: IS_VE_SCA_TEST ? "0x6cd813061a3adf3602b76545f076205f0c8e7ec1d3b1eab9a1da7992c18c0524" : "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",
282
+ // isolated assets
283
+ deep: "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",
284
+ fud: "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD"
270
285
  };
271
286
  var wormholeCoinIds = {
272
287
  weth: "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",
@@ -282,11 +297,27 @@ var voloCoinIds = {
282
297
  var sCoinIds = {
283
298
  susdc: "0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC",
284
299
  ssbeth: "0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",
285
- ssui: "0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b::scallop_sui::SCALLOP_SUI",
300
+ ssui: (
301
+ // TODO: use prod value
302
+ // '0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b::scallop_sui::SCALLOP_SUI',
303
+ "0xf569919046f19a0c40b519ecfbb6ca0319698cd5908716c29b62ef56541f298b::scallop_sui::SCALLOP_SUI"
304
+ ),
286
305
  scetus: "0xea346ce428f91ab007210443efcea5f5cdbbb3aae7e9affc0ca93f9203c31f0c::scallop_cetus::SCALLOP_CETUS",
287
- ssca: "0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e::scallop_sca::SCALLOP_SCA",
288
- swusdc: "0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
289
- swusdt: "0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
306
+ ssca: (
307
+ // TODO: use prod value
308
+ // '0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e::scallop_sca::SCALLOP_SCA',
309
+ "0x958428555e778e55918a59eb1c92c77f32b5c554fa3a5e56cd0815086b5072e7::scallop_sca::SCALLOP_SCA"
310
+ ),
311
+ swusdc: (
312
+ // TODO: use prod value
313
+ // '0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC',
314
+ "0xf5447c4305a486d8c8557559887c2c39449ddb5e748f15d33946d02a1663c158::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC"
315
+ ),
316
+ swusdt: (
317
+ // TODO: use prod value
318
+ // '0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT',
319
+ "0xac781d9f73058ff5e69f9bf8dde32f2e8c71c66d7fe8497fc83b2d9182254b22::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT"
320
+ ),
290
321
  sweth: "0x67540ceb850d418679e69f1fb6b2093d6df78a2a699ffc733f7646096d552e9b::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",
291
322
  safsui: "0x00671b1fa2a124f5be8bdae8b91ee711462c5d9e31bda232e70fd9607b523c88::scallop_af_sui::SCALLOP_AF_SUI",
292
323
  shasui: "0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",
@@ -375,6 +406,12 @@ var POOL_ADDRESSES = {
375
406
  sca: {
376
407
  lendingPoolAddress: "0x6fc7d4211fc7018b6c75e7b908b88f2e0536443239804a3d32af547637bd28d7",
377
408
  collateralPoolAddress: "0xff677a5d9e9dc8f08f0a8681ebfc7481d1c7d57bc441f2881974adcdd7b13c31"
409
+ },
410
+ fud: {
411
+ lendingPoolAddress: ""
412
+ },
413
+ deep: {
414
+ lendingPoolAddress: ""
378
415
  }
379
416
  };
380
417
 
@@ -397,7 +434,9 @@ var PYTH_FEED_IDS = {
397
434
  afsui: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
398
435
  hasui: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
399
436
  vsui: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
400
- sca: "7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc"
437
+ sca: "7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",
438
+ deep: "29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",
439
+ fud: "6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75"
401
440
  };
402
441
 
403
442
  // src/constants/queryKeys.ts
@@ -502,20 +541,33 @@ var TEST_ADDRESSES = {
502
541
  core: {
503
542
  // version:
504
543
  // '0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7',
505
- version: "0x6156d5cd1538bec8a167a40fe1209a4ec9cf8137921fe0a697f191ac561f0b09",
544
+ version: "0xd318de9b0f6873879a82cbfcc2daa1d1591a8b54e7cea9f4b567da63c692a52b",
506
545
  versionCap: "0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",
507
546
  // object:
508
547
  // '0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf',
509
- object: "0x87ddec2984645dbbe2403a509cc6edf393a43acdba9b77d45da2bcbefcf733c1",
548
+ object: "0x6c23585e940a989588432509107e98bae06dbca4e333f26d0635d401b3c7c76d",
510
549
  // market:
511
550
  // '0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9',
512
- market: "0x8606ed145cc887985b8ed793f7753ff5dc762a42c379dac035f568e1bac58490",
551
+ market: "0x9d6434e97f3f98fd9b0c0e1dca22632073985abcd22541feae7ee1e34cbe3af2",
513
552
  adminCap: "0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",
514
553
  coinDecimalsRegistry: "0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",
515
554
  // obligationAccessStore:
516
555
  // '0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9',
517
- obligationAccessStore: "0x48b472d68ca910c45f7f3b6c26836b6aa6d2569810d94b1b939023da05ae0a23",
556
+ obligationAccessStore: "0x46e9b44a77ee9c9d33cc2689ecdfbb8f681935cbc6bdf6ac3df048e396c36c82",
518
557
  coins: {
558
+ usdc: {
559
+ id: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",
560
+ metaData: "0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",
561
+ treasury: "",
562
+ oracle: {
563
+ supra: "",
564
+ switchboard: "",
565
+ pyth: {
566
+ feed: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
567
+ feedObject: "0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"
568
+ }
569
+ }
570
+ },
519
571
  cetus: {
520
572
  id: "0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",
521
573
  metaData: "0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",
@@ -671,6 +723,19 @@ var TEST_ADDRESSES = {
671
723
  feedObject: "0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"
672
724
  }
673
725
  }
726
+ },
727
+ sbeth: {
728
+ id: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29",
729
+ metaData: "0x89b04ba87f8832d4d76e17a1c9dce72eb3e64d372cf02012b8d2de5384faeef0",
730
+ treasury: "",
731
+ oracle: {
732
+ supra: "",
733
+ switchboard: "",
734
+ pyth: {
735
+ feed: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",
736
+ feedObject: "0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"
737
+ }
738
+ }
674
739
  }
675
740
  },
676
741
  oracles: {
@@ -704,7 +769,7 @@ var TEST_ADDRESSES = {
704
769
  upgradeCap: "0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"
705
770
  },
706
771
  protocol: {
707
- id: "0x87ddec2984645dbbe2403a509cc6edf393a43acdba9b77d45da2bcbefcf733c1",
772
+ id: "0xb784ea287d944e478a3ceaa071f8885072cce6b7224cf245914dc2f9963f460e",
708
773
  upgradeCap: "0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"
709
774
  },
710
775
  // protocol: {
@@ -722,7 +787,7 @@ var TEST_ADDRESSES = {
722
787
  // '0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f',
723
788
  // },
724
789
  query: {
725
- id: "0xe4f9d62d17746d5b9dbf0d5557747430021a71575780b515161210cdba0a4c1c",
790
+ id: "0x89706958f43fb170de134579e3fbc53972b946ee78bd2442d8e1adc36074fbdc",
726
791
  upgradeCap: "0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"
727
792
  },
728
793
  supra: { id: "", upgradeCap: "" },
@@ -758,6 +823,10 @@ var TEST_ADDRESSES = {
758
823
  "0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"
759
824
  )
760
825
  },
826
+ susdc: {
827
+ id: "0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",
828
+ rewardPoolId: "0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"
829
+ },
761
830
  swusdc: {
762
831
  // id: '0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0',
763
832
  id: "0xf1b383b9cf2e9f515fc69567df1053098f273849d09cd84b0278a773429bd2b2",
@@ -806,37 +875,37 @@ var TEST_ADDRESSES = {
806
875
  config: ""
807
876
  },
808
877
  borrowIncentive: {
809
- id: "0x6152f696fc3a658f33c4b891764731a59153125ffedfa8bff7167c42823f58a9",
810
- adminCap: "0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",
811
- object: "0x002875153e09f8145ab63527bc85c00f2bd102e12f9573c47f8cdf1a1cb62934",
812
- query: "0x529edc54a3dce2207703ceebbccb0ac14133f7825c1f528775ba0d85a4063489",
813
- incentivePools: "0x6547e143d406b5ccd5f46aae482497de279cc1a68c406f701df70a05f9212ab4",
814
- incentiveAccounts: "0xc4701fdbc1c92f9a636d334d66012b3027659e9fb8aff27279a82edfb6b77d02",
815
- config: "0xdf5d04b4691cc67e82fd4db8394d89ff44823a9de29716c924f74bb4f11cc1f7"
878
+ id: "0x85769d63565ce99c7622f8e336ca1460926ddf29738ad2a39407b5cac29f61fe",
879
+ adminCap: "0x56ac8e6f2b360b2b35c0168d72cc6cd17d9592afb83709865cb87af24bb2025b",
880
+ object: "0x85769d63565ce99c7622f8e336ca1460926ddf29738ad2a39407b5cac29f61fe",
881
+ query: "0x8e0d00f8ff1199d7c5fe56cea0e901a525daeefff0445a1635ace8282ae3302c",
882
+ incentivePools: "0x9d564c93128c6ab0c0d3e050a47f11df0b91494f3bb779bdc1301c1c637f15eb",
883
+ incentiveAccounts: "0x09e6040e798246de04941bc79a3ba62d3eca6d7a218cc30f21fb07f478fa2926",
884
+ config: "0x43d4ca1dfc90b161c4240facd119e74e4b850cca2957f88c2ec289c9380da064"
816
885
  },
817
886
  referral: {
818
- id: "0xa3654ebb63eb06c0f4ff52f8aa6512df9f164f7772bdf15dac3709bd3798dda9",
887
+ id: "0x1bf5a8ce77050d8052549d743e16b469f15aa6b81b752b78b6ebb65179665f5a",
819
888
  object: "0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",
820
889
  adminCap: "0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",
821
- referralBindings: "0xf63299d58789d99de94092b9011323466e55ca0c1ea1a7a3786a589af46e1c09",
822
- bindingTableId: "0x1c8202b17267ec8d6cf97ca013615354181a04f179570e42601ff2dae19294b1",
823
- referralRevenuePool: "0x6abd852caf90769c1b185cdf636d841673fa95528f0550f018b8a138bd283c07",
890
+ referralBindings: "0xcf184487782bed962bf678001efe775d31fb94b9992333a57594cf15d79d5ced",
891
+ bindingTableId: "0x41a50e258c0a266ce84e0e1a618dbf70b878cc943909e613089a50afcceb2bc0",
892
+ referralRevenuePool: "0xc24e3e5e37032f29a3dd91a9a1f057af8821b7e6c148e9683900ac8b6d30f0c6",
824
893
  revenueTableId: "0x595baa3654c297bff84ab7786a2d250f019cefc66e8df8e89fd9d41e02bd30dd",
825
- referralTiers: "0x962cb903d8d7346190c5204785ccbb91b61086aa764f674c8145df82335cf83e",
894
+ referralTiers: "0x144350f3db9b46d11b140084cd54e6de0b9c3b8d265ce8059b51d0ef58ea464b",
826
895
  tiersTableId: "0xeac755a7a8b7798530905ac79e8c114f19d0f130f6eab012954f08faac29c75d",
827
896
  // authorizedWitnessList:
828
897
  // '0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e',
829
898
  authorizedWitnessList: "0x9d6223dc52015b8a3986a573590ef2af8f1b8f3e4685513888c052f001b87e7f",
830
- version: "0x1bd4b7285f72e11c316b828c7c47b3f4da18dcec9f9b3dba6d8629cbb6f93e5e"
899
+ version: "0x3545849eb97723e676a476ec9d4fe5f2eb0eb2c6b78972851114fd4c7ed4639f"
831
900
  },
832
901
  vesca: {
833
- id: "0xb15b6e0cdd85afb5028bea851dd249405e734d800a259147bbc24980629723a4",
834
- object: "0xb15b6e0cdd85afb5028bea851dd249405e734d800a259147bbc24980629723a4",
902
+ id: "0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",
903
+ object: "0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",
835
904
  adminCap: "0x8ffa76135c5b85c5fbd73a6448a4a733d826cb63a267ab817656acb77c72d4a5",
836
- tableId: "0xe3153b2bf124be0b86cb8bd468346a861efd0da52fc42197b54d2f616488a311",
837
- table: "0x611cb8d9d4d90867467b5ebdf4cc447a0047ed5b01334a28a29fcfe733e3d609",
838
- treasury: "0xe8c112c09b88158dc6c8e23d1fbae5b3c7136cdee54b7dafc08e65db28c4a5bc",
839
- config: "0xe0a2ff281e73c1d53cfa85807080f87e833e4f1a7f93dcf8800b3865269a76b9"
905
+ tableId: "0x0a0b7f749baeb61e3dfee2b42245e32d0e6b484063f0a536b33e771d573d7246",
906
+ table: "0xd3a4632b1080f7d96e1c2487d4dabf2c1196916937c505a69954ac9f393be8d0",
907
+ treasury: "0xafa4b6231e49c15a22d641ce33fda761baaf650fa21899dfa2eb1716146e7306",
908
+ config: "0x7cbcb0a342179577a117dfdff974cf1ab765d3b571067bf22ddf5f9e3a667922"
840
909
  },
841
910
  loyaltyProgram: {
842
911
  id: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
@@ -845,27 +914,27 @@ var TEST_ADDRESSES = {
845
914
  userRewardTableId: "0x748a80395849ed37db1b0e14f2ab5d1d96458d2359ab3a84eb079d0f4ac7cf2e"
846
915
  },
847
916
  scoin: {
848
- id: "0xad2ca2aa5089df94bb2d444d5eb3520378c2f2dfb3a0bd2a2c994145ac4b0a53",
917
+ id: "0x773dab39c90fe05439b06a2d061795e52a974ff92c2aef90b2ee467acf7f33c8",
849
918
  coins: {
850
919
  ssui: {
851
- coinType: "0xfac769100bccc0caebcf4f4e2d00ac2f8883f07f724be28940df90605f5e7e9a::scallop_sui::SCALLOP_SUI",
852
- treasury: "0x9cb4551b36c17d37e19d700147fa819ea1c487ff8bcf18374de2cceb2e9d4845"
920
+ coinType: "0xf569919046f19a0c40b519ecfbb6ca0319698cd5908716c29b62ef56541f298b::scallop_sui::SCALLOP_SUI",
921
+ treasury: "0x0e499640a12c38dd9cc44532f5bc5fd1b6da86d2f9a8810357250f4b26e9e5c7"
853
922
  },
854
923
  scetus: {
855
924
  coinType: "0x8b71e6d323ed78515af2bead13bf3d0da1562ba4a99234eb7c4f14fd39ef0427::scallop_cetus::SCALLOP_CETUS",
856
925
  treasury: "0xd786f4b2d26278cc7911a3445b1b085eab60f269ef9dbb6b87e803d52f155003"
857
926
  },
858
927
  ssca: {
859
- coinType: "0x0a9d3c6c9af9f6e8def82921541bcbd17f73ed31bed3adcb684f2a4c267e42f0::scallop_sca::SCALLOP_SCA",
860
- treasury: "0xe818636d1d6c46d6ea1a2dce9d94696d7cbc18ce27451b603eeaa47aba8d75e0"
928
+ coinType: "0x958428555e778e55918a59eb1c92c77f32b5c554fa3a5e56cd0815086b5072e7::scallop_sca::SCALLOP_SCA",
929
+ treasury: "0x5f1c5de1df7341075d119570269b7b452af50afe8363080638f1ae29a554c038"
861
930
  },
862
931
  swusdc: {
863
- coinType: "0xaedc3ab75db8680b81a755015fa90124d217be93457b893c05bac033817defaf::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
864
- treasury: "0xfc6971648f867f7fd6928d1b873af71577e2eaf2c7543ef8bc82c431d833ae78"
932
+ coinType: "0xf5447c4305a486d8c8557559887c2c39449ddb5e748f15d33946d02a1663c158::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
933
+ treasury: "0x471fbab72578bab577263006fe32543b6e76153fffa2bef69affe4bc4934258f"
865
934
  },
866
935
  swusdt: {
867
- coinType: "0xbf02fc87ddc104b342ad8414c85ceadf5b0c823c055a06fb0ed776272c01a52a::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
868
- treasury: "0xb9593e2c3a0ba796ee815012b75ae46468ea78cda0188b9ac6816efe65503521"
936
+ coinType: "0xac781d9f73058ff5e69f9bf8dde32f2e8c71c66d7fe8497fc83b2d9182254b22::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
937
+ treasury: "0x921a4ed4bb4b4f11f51a462c83f4c0f6b60a90e441d1bc0d26d6fd893146bf4d"
869
938
  },
870
939
  sweth: {
871
940
  coinType: "0x27d54f43e3eda701be56b82e5756e41c84467cd202f5cf713d5f9e45a9f1b6bc::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",
@@ -881,7 +950,11 @@ var TEST_ADDRESSES = {
881
950
  },
882
951
  svsui: {
883
952
  coinType: "0x97023a317320c4498cc4cd239dd02fd30c28246e5e8f81325d63f2bd8d70f6b3::scallop_v_sui::SCALLOP_V_SUI",
884
- treasury: "0x327114f0bf3559d7e2de10282147ed76a236c7c6775029165c4db09a6062ead6\u0192"
953
+ treasury: "0x327114f0bf3559d7e2de10282147ed76a236c7c6775029165c4db09a6062ead6"
954
+ },
955
+ ssbeth: {
956
+ coinType: "0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",
957
+ treasury: "0xfd0f02def6358a1f266acfa1493d4707ee8387460d434fb667d63d755ff907ed"
885
958
  }
886
959
  }
887
960
  }
@@ -2588,23 +2661,148 @@ var supplyLimitZod = zod.object({
2588
2661
  value: zod.string()
2589
2662
  })
2590
2663
  });
2591
- var SUPPLY_LIMIT_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey";
2664
+ var supplyLimitKeyType = `0x6c23585e940a989588432509107e98bae06dbca4e333f26d0635d401b3c7c76d::market_dynamic_keys::SupplyLimitKey`;
2592
2665
  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
2666
+ try {
2667
+ const poolCoinType = utils.parseCoinType(poolName).slice(2);
2668
+ const marketObject = utils.address.get("core.market");
2669
+ if (!marketObject)
2670
+ return null;
2671
+ const object = await utils.cache.queryGetDynamicFieldObject({
2672
+ parentId: marketObject,
2673
+ name: {
2674
+ type: supplyLimitKeyType,
2675
+ value: poolCoinType
2676
+ }
2677
+ });
2678
+ const parsedData = supplyLimitZod.safeParse(object?.data?.content);
2679
+ if (!parsedData.success)
2680
+ return null;
2681
+ return parsedData.data.fields.value;
2682
+ } catch (e) {
2683
+ console.error(`Error in getSupplyLimit for ${poolName}: ${e.message}`);
2684
+ return "0";
2685
+ }
2686
+ };
2687
+
2688
+ // src/queries/isolatedAssetQuery.ts
2689
+ import { z as zod2 } from "zod";
2690
+ var isolatedAssetZod = zod2.object({
2691
+ dataType: zod2.string(),
2692
+ type: zod2.string(),
2693
+ hasPublicTransfer: zod2.boolean(),
2694
+ fields: zod2.object({
2695
+ id: zod2.object({
2696
+ id: zod2.string()
2697
+ }),
2698
+ name: zod2.object({
2699
+ type: zod2.string()
2700
+ }),
2701
+ value: zod2.boolean()
2702
+ })
2703
+ });
2704
+ var isolatedAssetKeyType = `0x6c23585e940a989588432509107e98bae06dbca4e333f26d0635d401b3c7c76d::market_dynamic_keys::IsolatedAssetKey`;
2705
+ var getIsolatedAssets = async (address) => {
2706
+ try {
2707
+ const marketObject = address.get("core.market");
2708
+ const isolatedAssets = [];
2709
+ if (!marketObject)
2710
+ return isolatedAssets;
2711
+ let hasNextPage = false;
2712
+ let nextCursor = null;
2713
+ const isIsolatedDynamicField = (dynamicField) => {
2714
+ return dynamicField.name.type === isolatedAssetKeyType;
2715
+ };
2716
+ do {
2717
+ const response = await address.cache.queryGetDynamicFields({
2718
+ parentId: marketObject,
2719
+ cursor: nextCursor,
2720
+ limit: 10
2721
+ });
2722
+ if (!response)
2723
+ break;
2724
+ const isolatedAssetCoinTypes = response.data.filter(isIsolatedDynamicField).map(({ name }) => `0x${name.value.type.name}`);
2725
+ isolatedAssets.push(...isolatedAssetCoinTypes);
2726
+ if (response && response.hasNextPage && response.nextCursor) {
2727
+ hasNextPage = true;
2728
+ nextCursor = response.nextCursor;
2729
+ } else {
2730
+ hasNextPage = false;
2731
+ }
2732
+ } while (hasNextPage);
2733
+ return isolatedAssets;
2734
+ } catch (e) {
2735
+ console.error(e);
2736
+ return [];
2737
+ }
2738
+ };
2739
+ var isIsolatedAsset = async (utils, coinName) => {
2740
+ try {
2741
+ const marketObject = utils.address.get("core.market");
2742
+ const cachedData = utils.address.cache.queryClient.getQueryData([
2743
+ "getDynamicFields",
2744
+ marketObject
2745
+ ]);
2746
+ if (cachedData) {
2747
+ const coinType2 = utils.parseCoinType(coinName);
2748
+ return cachedData.includes(coinType2);
2602
2749
  }
2603
- });
2604
- const parsedData = supplyLimitZod.safeParse(object?.data?.content);
2605
- if (!parsedData.success)
2606
- return null;
2607
- return parsedData.data.fields.value;
2750
+ const coinType = utils.parseCoinType(coinName).slice(2);
2751
+ const object = await utils.cache.queryGetDynamicFieldObject({
2752
+ parentId: marketObject,
2753
+ name: {
2754
+ type: isolatedAssetKeyType,
2755
+ value: coinType
2756
+ }
2757
+ });
2758
+ const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
2759
+ if (!parsedData.success)
2760
+ return false;
2761
+ return parsedData.data.fields.value;
2762
+ } catch (e) {
2763
+ console.error(e);
2764
+ return false;
2765
+ }
2766
+ };
2767
+
2768
+ // src/queries/borrowLimitQuery.ts
2769
+ import { z as zod3 } from "zod";
2770
+ var borrowLimitZod = zod3.object({
2771
+ dataType: zod3.string(),
2772
+ type: zod3.string(),
2773
+ hasPublicTransfer: zod3.boolean(),
2774
+ fields: zod3.object({
2775
+ id: zod3.object({
2776
+ id: zod3.string()
2777
+ }),
2778
+ name: zod3.object({
2779
+ type: zod3.string()
2780
+ }),
2781
+ value: zod3.string()
2782
+ })
2783
+ });
2784
+ var borrowLimitKeyType = `0xb784ea287d944e478a3ceaa071f8885072cce6b7224cf245914dc2f9963f460e::market_dynamic_keys::BorrowLimitKey`;
2785
+ var getBorrowLimit = async (utils, poolName) => {
2786
+ try {
2787
+ const poolCoinType = utils.parseCoinType(poolName).slice(2);
2788
+ const marketObject = utils.address.get("core.market");
2789
+ if (!marketObject)
2790
+ return null;
2791
+ const object = await utils.cache.queryGetDynamicFieldObject({
2792
+ parentId: marketObject,
2793
+ name: {
2794
+ type: borrowLimitKeyType,
2795
+ value: poolCoinType
2796
+ }
2797
+ });
2798
+ const parsedData = borrowLimitZod.safeParse(object?.data?.content);
2799
+ if (!parsedData.success)
2800
+ return null;
2801
+ return parsedData.data.fields.value;
2802
+ } catch (e) {
2803
+ console.error(`Error in getBorrowLimit for ${poolName}: ${e.message}`);
2804
+ return "0";
2805
+ }
2608
2806
  };
2609
2807
 
2610
2808
  // src/queries/coreQuery.ts
@@ -2673,6 +2871,9 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2673
2871
  const maxSupplyCoin = BigNumber3(
2674
2872
  await getSupplyLimit(query.utils, poolCoinName) ?? "0"
2675
2873
  ).shiftedBy(-coinDecimal).toNumber();
2874
+ const maxBorrowCoin = BigNumber3(
2875
+ await getBorrowLimit(query.utils, poolCoinName) ?? "0"
2876
+ ).shiftedBy(-coinDecimal).toNumber();
2676
2877
  pools[poolCoinName] = {
2677
2878
  coinName: poolCoinName,
2678
2879
  symbol: query.utils.parseSymbol(poolCoinName),
@@ -2691,9 +2892,10 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2691
2892
  borrowFee: parsedMarketPoolData.borrowFee,
2692
2893
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2693
2894
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2694
- // isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2695
- isIsolated: false,
2895
+ isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2896
+ // isIsolated: false,
2696
2897
  maxSupplyCoin,
2898
+ maxBorrowCoin,
2697
2899
  ...calculatedMarketPoolData
2698
2900
  };
2699
2901
  }
@@ -2731,6 +2933,7 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2731
2933
  liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
2732
2934
  liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
2733
2935
  liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
2936
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
2734
2937
  ...calculatedMarketCollateralData
2735
2938
  };
2736
2939
  }
@@ -2778,85 +2981,76 @@ var getMarketPools = async (query, poolCoinNames = [...SUPPORT_POOLS], indexer =
2778
2981
  return marketPools;
2779
2982
  };
2780
2983
  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
- }
2984
+ try {
2985
+ coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2986
+ if (indexer) {
2987
+ const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
2988
+ if (!marketPoolIndexer) {
2989
+ return void 0;
2990
+ }
2991
+ marketPoolIndexer.coinPrice = coinPrice ?? marketPoolIndexer.coinPrice;
2992
+ marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
2993
+ marketPoolIndexer.coinName
2994
+ );
2995
+ return marketPoolIndexer;
2996
+ }
2997
+ const marketId = query.address.get("core.market");
2998
+ marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2999
+ showContent: true
3000
+ }))?.data;
3001
+ if (!(marketObject && marketObject.content?.dataType === "moveObject"))
3002
+ throw new Error(`Failed to fetch marketObject`);
3003
+ const fields = marketObject.content.fields;
3004
+ const coinType = query.utils.parseCoinType(poolCoinName);
3005
+ const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
3006
+ const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3007
+ parentId: balanceSheetParentId,
3008
+ name: {
3009
+ type: "0x1::type_name::TypeName",
3010
+ value: {
3011
+ name: coinType.substring(2)
2811
3012
  }
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
3013
  }
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
- }
3014
+ });
3015
+ const balanceSheetDynamicFieldObject = balanceSheetDynamicFieldObjectResponse?.data;
3016
+ if (!(balanceSheetDynamicFieldObject && balanceSheetDynamicFieldObject.content && "fields" in balanceSheetDynamicFieldObject.content))
3017
+ throw new Error(
3018
+ `Failed to fetch balanceSheetDynamicFieldObject for ${poolCoinName}: ${balanceSheetDynamicFieldObjectResponse?.error?.code.toString()}`
3019
+ );
3020
+ const balanceSheet = balanceSheetDynamicFieldObject.content.fields.value.fields;
3021
+ const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
3022
+ const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3023
+ parentId: borrowIndexParentId,
3024
+ name: {
3025
+ type: "0x1::type_name::TypeName",
3026
+ value: {
3027
+ name: coinType.substring(2)
2830
3028
  }
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
3029
  }
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
- }
3030
+ });
3031
+ const borrowIndexDynamicFieldObject = borrowIndexDynamicFieldObjectResponse?.data;
3032
+ if (!(borrowIndexDynamicFieldObject && borrowIndexDynamicFieldObject.content && "fields" in borrowIndexDynamicFieldObject.content))
3033
+ throw new Error(
3034
+ `Failed to fetch borrowIndexDynamicFieldObject for ${poolCoinName}`
3035
+ );
3036
+ const borrowIndex = borrowIndexDynamicFieldObject.content.fields.value.fields;
3037
+ const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
3038
+ const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3039
+ parentId: interestModelParentId,
3040
+ name: {
3041
+ type: "0x1::type_name::TypeName",
3042
+ value: {
3043
+ name: coinType.substring(2)
2849
3044
  }
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
3045
  }
3046
+ });
3047
+ const interestModelDynamicFieldObject = interestModelDynamicFieldObjectResponse?.data;
3048
+ if (!(interestModelDynamicFieldObject && interestModelDynamicFieldObject.content && "fields" in interestModelDynamicFieldObject.content))
3049
+ throw new Error(
3050
+ `Failed to fetch interestModelDynamicFieldObject for ${poolCoinName}: ${interestModelDynamicFieldObject}`
3051
+ );
3052
+ const interestModel = interestModelDynamicFieldObject.content.fields.value.fields;
3053
+ const getBorrowFee = async () => {
2860
3054
  const borrowFeeDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2861
3055
  parentId: marketId,
2862
3056
  name: {
@@ -2868,18 +3062,11 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2868
3062
  }
2869
3063
  }
2870
3064
  });
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)) {
3065
+ const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse?.data;
3066
+ if (!(borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content))
3067
+ return { value: "0" };
3068
+ return borrowFeeDynamicFieldObject.content.fields.value.fields;
3069
+ };
2883
3070
  const parsedMarketPoolData = parseOriginMarketPoolData({
2884
3071
  type: interestModel.type.fields,
2885
3072
  maxBorrowRate: interestModel.max_borrow_rate.fields,
@@ -2893,7 +3080,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2893
3080
  reserve: balanceSheet.revenue,
2894
3081
  reserveFactor: interestModel.revenue_factor.fields,
2895
3082
  borrowWeight: interestModel.borrow_weight.fields,
2896
- borrowFeeRate: borrowFeeRate ?? { value: "0" },
3083
+ borrowFeeRate: await getBorrowFee(),
2897
3084
  baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
2898
3085
  borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
2899
3086
  borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
@@ -2909,7 +3096,10 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2909
3096
  const maxSupplyCoin = BigNumber3(
2910
3097
  await getSupplyLimit(query.utils, poolCoinName) ?? "0"
2911
3098
  ).shiftedBy(-coinDecimal).toNumber();
2912
- marketPool = {
3099
+ const maxBorrowCoin = BigNumber3(
3100
+ await getBorrowLimit(query.utils, poolCoinName) ?? "0"
3101
+ ).shiftedBy(-coinDecimal).toNumber();
3102
+ return {
2913
3103
  coinName: poolCoinName,
2914
3104
  symbol: query.utils.parseSymbol(poolCoinName),
2915
3105
  coinType: query.utils.parseCoinType(poolCoinName),
@@ -2928,12 +3118,13 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2928
3118
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2929
3119
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2930
3120
  maxSupplyCoin,
2931
- // isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2932
- isIsolated: false,
3121
+ maxBorrowCoin,
3122
+ isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2933
3123
  ...calculatedMarketPoolData
2934
3124
  };
3125
+ } catch (e) {
3126
+ console.error(e.message);
2935
3127
  }
2936
- return marketPool;
2937
3128
  };
2938
3129
  var getMarketCollaterals = async (query, collateralCoinNames = [...SUPPORT_COLLATERALS], indexer = false) => {
2939
3130
  const marketId = query.address.get("core.market");
@@ -2982,85 +3173,76 @@ var getMarketCollateral = async (query, collateralCoinName, indexer = false, mar
2982
3173
  );
2983
3174
  return marketCollateralIndexer;
2984
3175
  }
2985
- let marketCollateral;
2986
- let riskModel;
2987
- let collateralStat;
2988
3176
  const marketId = query.address.get("core.market");
2989
3177
  marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2990
3178
  showContent: true
2991
3179
  }))?.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;
3180
+ if (!(marketObject && marketObject.content?.dataType === "moveObject"))
3181
+ throw new Error(`Failed to fetch marketObject`);
3182
+ const fields = marketObject.content.fields;
3183
+ const coinType = query.utils.parseCoinType(collateralCoinName);
3184
+ const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
3185
+ const riskModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3186
+ parentId: riskModelParentId,
3187
+ name: {
3188
+ type: "0x1::type_name::TypeName",
3189
+ value: {
3190
+ name: coinType.substring(2)
3012
3191
  }
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;
3192
+ }
3193
+ });
3194
+ const riskModelDynamicFieldObject = riskModelDynamicFieldObjectResponse?.data;
3195
+ if (!(riskModelDynamicFieldObject && riskModelDynamicFieldObject.content && "fields" in riskModelDynamicFieldObject.content))
3196
+ throw new Error(
3197
+ `Failed to fetch riskModelDynamicFieldObject for ${riskModelDynamicFieldObjectResponse?.error?.code.toString()}: `
3198
+ );
3199
+ const riskModel = riskModelDynamicFieldObject.content.fields.value.fields;
3200
+ const collateralStatParentId = fields.collateral_stats.fields.table.fields.id.id;
3201
+ const collateralStatDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3202
+ parentId: collateralStatParentId,
3203
+ name: {
3204
+ type: "0x1::type_name::TypeName",
3205
+ value: {
3206
+ name: coinType.substring(2)
3029
3207
  }
3030
3208
  }
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
3209
+ });
3210
+ const collateralStatDynamicFieldObject = collateralStatDynamicFieldObjectResponse?.data;
3211
+ if (!(collateralStatDynamicFieldObject && collateralStatDynamicFieldObject.content && "fields" in collateralStatDynamicFieldObject.content))
3212
+ throw new Error(
3213
+ `Failed to fetch collateralStatDynamicFieldObject for ${collateralCoinName}: ${collateralStatDynamicFieldObjectResponse?.error?.code.toString()}`
3046
3214
  );
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;
3215
+ const collateralStat = collateralStatDynamicFieldObject.content.fields.value.fields;
3216
+ const parsedMarketCollateralData = parseOriginMarketCollateralData({
3217
+ type: riskModel.type.fields,
3218
+ collateralFactor: riskModel.collateral_factor.fields,
3219
+ liquidationFactor: riskModel.liquidation_factor.fields,
3220
+ liquidationDiscount: riskModel.liquidation_discount.fields,
3221
+ liquidationPanelty: riskModel.liquidation_penalty.fields,
3222
+ liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
3223
+ maxCollateralAmount: riskModel.max_collateral_amount,
3224
+ totalCollateralAmount: collateralStat.amount
3225
+ });
3226
+ const calculatedMarketCollateralData = calculateMarketCollateralData(
3227
+ query.utils,
3228
+ parsedMarketCollateralData
3229
+ );
3230
+ return {
3231
+ coinName: collateralCoinName,
3232
+ symbol: query.utils.parseSymbol(collateralCoinName),
3233
+ coinType: query.utils.parseCoinType(collateralCoinName),
3234
+ marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
3235
+ coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
3236
+ coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
3237
+ coinPrice: coinPrice ?? 0,
3238
+ collateralFactor: parsedMarketCollateralData.collateralFactor,
3239
+ liquidationFactor: parsedMarketCollateralData.liquidationFactor,
3240
+ liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
3241
+ liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
3242
+ liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
3243
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
3244
+ ...calculatedMarketCollateralData
3245
+ };
3064
3246
  };
3065
3247
  var getObligations = async ({
3066
3248
  address
@@ -3238,98 +3420,18 @@ var getFlashLoanFees = async (query, assetNames) => {
3238
3420
  );
3239
3421
  };
3240
3422
 
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
3423
  // src/queries/loyaltyProgramQuery.ts
3322
3424
  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()
3425
+ import { z as zod4 } from "zod";
3426
+ var rewardPoolFieldsZod = zod4.object({
3427
+ balance: zod4.string(),
3428
+ enable_claim: zod4.boolean()
3327
3429
  }).transform((value) => ({
3328
3430
  totalPoolReward: BigNumber4(value.balance).shiftedBy(-9).toNumber(),
3329
3431
  isClaimEnabled: value.enable_claim
3330
3432
  }));
3331
- var userRewardFieldsZod = zod3.object({
3332
- value: zod3.string()
3433
+ var userRewardFieldsZod = zod4.object({
3434
+ value: zod4.string()
3333
3435
  }).transform((value) => BigNumber4(value.value).shiftedBy(-9).toNumber());
3334
3436
  var getLoyaltyProgramInformations = async (query, veScaKey) => {
3335
3437
  const rewardPool = query.address.get("loyaltyProgram.rewardPool");
@@ -4138,7 +4240,7 @@ var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPr
4138
4240
  const coinName = query.utils.parseCoinName(marketCoinName);
4139
4241
  marketPool = marketPool || await query.getMarketPool(coinName, indexer);
4140
4242
  if (!marketPool) {
4141
- throw new Error(`Fail to fetch marketPool for ${coinName}`);
4243
+ throw new Error(`Failed to fetch marketPool for ${marketCoinName}`);
4142
4244
  }
4143
4245
  const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
4144
4246
  const rewardPoolId = query.address.get(
@@ -4412,7 +4514,7 @@ var getStakeRewardPool = async ({
4412
4514
  import BigNumber7 from "bignumber.js";
4413
4515
  import { SUI_CLOCK_OBJECT_ID, SuiTxBlock as SuiTxBlock2 } from "@scallop-io/sui-kit";
4414
4516
  import { bcs as bcs2 } from "@mysten/sui/bcs";
4415
- import { z as zod4 } from "zod";
4517
+ import { z as zod5 } from "zod";
4416
4518
  import assert2 from "assert";
4417
4519
  var getVescaKeys = async (utils, ownerAddress) => {
4418
4520
  const owner = ownerAddress || utils.suiKit.currentAddress();
@@ -4461,10 +4563,10 @@ var getVeScas = async ({
4461
4563
  }
4462
4564
  return result;
4463
4565
  };
4464
- var SuiObjectRefZod = zod4.object({
4465
- objectId: zod4.string(),
4466
- digest: zod4.string(),
4467
- version: zod4.string()
4566
+ var SuiObjectRefZod = zod5.object({
4567
+ objectId: zod5.string(),
4568
+ digest: zod5.string(),
4569
+ version: zod5.string()
4468
4570
  });
4469
4571
  var getVeSca = async (utils, veScaKey) => {
4470
4572
  const tableId = utils.address.get(`vesca.tableId`);
@@ -4654,10 +4756,10 @@ var ScallopUtils = class {
4654
4756
  * @param address - ScallopAddress instance.
4655
4757
  */
4656
4758
  async init(force = false, address) {
4657
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
4658
- await this.address.read();
4659
- } else {
4759
+ if (address && !this.address)
4660
4760
  this.address = address;
4761
+ if (force || !this.address.getAddresses()) {
4762
+ await this.address.read();
4661
4763
  }
4662
4764
  }
4663
4765
  /**
@@ -4943,9 +5045,7 @@ var ScallopUtils = class {
4943
5045
  for (const endpoint of endpoints) {
4944
5046
  const priceIdPairs = Array.from(failedRequests.values()).reduce(
4945
5047
  (acc, coinName) => {
4946
- const priceId = this.address.get(
4947
- `core.coins.${coinName}.oracle.pyth.feed`
4948
- );
5048
+ const priceId = this.address.get(`core.coins.${coinName}.oracle.pyth.feed`) ?? PYTH_FEED_IDS[coinName];
4949
5049
  acc.push([coinName, priceId]);
4950
5050
  return acc;
4951
5051
  },
@@ -6919,11 +7019,12 @@ var ScallopQuery = class {
6919
7019
  * @param address - ScallopAddress instance.
6920
7020
  */
6921
7021
  async init(force = false, address) {
6922
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
6923
- await this.address.read();
6924
- } else {
7022
+ if (address && !this.address) {
6925
7023
  this.address = address;
6926
7024
  }
7025
+ if (force || !this.address.getAddresses()) {
7026
+ await this.address.read();
7027
+ }
6927
7028
  await this.utils.init(force, this.address);
6928
7029
  }
6929
7030
  /* ==================== Core Query Methods ==================== */
@@ -7385,11 +7486,17 @@ var ScallopQuery = class {
7385
7486
  return await getFlashLoanFees(this, assetCoinNames);
7386
7487
  }
7387
7488
  /**
7388
- * Get supply limit of supply pool
7489
+ * Get supply limit of lending pool
7389
7490
  */
7390
7491
  async getPoolSupplyLimit(poolName) {
7391
7492
  return await getSupplyLimit(this.utils, poolName);
7392
7493
  }
7494
+ /**
7495
+ * Get borrow limit of borrow pool
7496
+ */
7497
+ async getPoolBorrowLimit(poolName) {
7498
+ return await getBorrowLimit(this.utils, poolName);
7499
+ }
7393
7500
  /**
7394
7501
  * Get list of isolated assets
7395
7502
  */
@@ -7462,10 +7569,10 @@ var ScallopBuilder = class {
7462
7569
  * @param address - ScallopAddress instance.
7463
7570
  */
7464
7571
  async init(force = false, address) {
7465
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
7466
- await this.address.read();
7467
- } else {
7572
+ if (address && !this.address)
7468
7573
  this.address = address;
7574
+ if (force || !this.address.getAddresses()) {
7575
+ await this.address.read();
7469
7576
  }
7470
7577
  await this.query.init(force, this.address);
7471
7578
  await this.utils.init(force, this.address);