@scallop-io/sui-scallop-sdk 1.4.1 → 1.4.2-rc.1

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 (80) hide show
  1. package/dist/constants/common.d.ts +1 -1
  2. package/dist/constants/poolAddress.d.ts +16 -4
  3. package/dist/constants/queryKeys.d.ts +2 -2
  4. package/dist/constants/tokenBucket.d.ts +2 -2
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.js +1270 -588
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.mjs +1225 -544
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/models/scallopBuilder.d.ts +2 -1
  11. package/dist/models/scallopCache.d.ts +2 -0
  12. package/dist/models/scallopQuery.d.ts +38 -20
  13. package/dist/models/scallopUtils.d.ts +4 -2
  14. package/dist/queries/borrowIncentiveQuery.d.ts +12 -0
  15. package/dist/queries/coreQuery.d.ts +18 -19
  16. package/dist/queries/index.d.ts +2 -0
  17. package/dist/queries/isolatedAssetQuery.d.ts +2 -2
  18. package/dist/queries/objectsQuery.d.ts +3 -0
  19. package/dist/queries/poolAddressesQuery.d.ts +18 -0
  20. package/dist/queries/spoolQuery.d.ts +6 -2
  21. package/dist/test.d.ts +1 -0
  22. package/dist/types/builder/borrowIncentive.d.ts +5 -5
  23. package/dist/types/builder/core.d.ts +20 -16
  24. package/dist/types/builder/loyaltyProgram.d.ts +1 -1
  25. package/dist/types/builder/referral.d.ts +4 -4
  26. package/dist/types/builder/sCoin.d.ts +2 -2
  27. package/dist/types/builder/spool.d.ts +4 -4
  28. package/dist/types/builder/vesca.d.ts +6 -6
  29. package/dist/types/query/core.d.ts +22 -5
  30. package/dist/types/query/spool.d.ts +20 -0
  31. package/dist/types/utils.d.ts +7 -2
  32. package/dist/utils/core.d.ts +2 -0
  33. package/dist/utils/index.d.ts +2 -0
  34. package/dist/utils/query.d.ts +1 -1
  35. package/dist/utils/util.d.ts +1 -0
  36. package/package.json +7 -7
  37. package/src/builders/borrowIncentiveBuilder.ts +28 -15
  38. package/src/builders/coreBuilder.ts +76 -49
  39. package/src/builders/loyaltyProgramBuilder.ts +4 -3
  40. package/src/builders/referralBuilder.ts +23 -10
  41. package/src/builders/sCoinBuilder.ts +8 -6
  42. package/src/builders/spoolBuilder.ts +21 -14
  43. package/src/builders/vescaBuilder.ts +23 -13
  44. package/src/constants/common.ts +1 -12
  45. package/src/constants/poolAddress.ts +336 -10
  46. package/src/constants/queryKeys.ts +9 -5
  47. package/src/constants/testAddress.ts +42 -0
  48. package/src/constants/tokenBucket.ts +2 -2
  49. package/src/index.ts +1 -0
  50. package/src/models/scallopBuilder.ts +59 -2
  51. package/src/models/scallopCache.ts +171 -19
  52. package/src/models/scallopClient.ts +16 -10
  53. package/src/models/scallopQuery.ts +36 -28
  54. package/src/models/scallopUtils.ts +11 -4
  55. package/src/queries/borrowIncentiveQuery.ts +6 -8
  56. package/src/queries/borrowLimitQuery.ts +1 -0
  57. package/src/queries/coreQuery.ts +408 -258
  58. package/src/queries/index.ts +2 -0
  59. package/src/queries/isolatedAssetQuery.ts +37 -31
  60. package/src/queries/objectsQuery.ts +20 -0
  61. package/src/queries/poolAddressesQuery.ts +146 -0
  62. package/src/queries/portfolioQuery.ts +31 -13
  63. package/src/queries/priceQuery.ts +3 -1
  64. package/src/queries/spoolQuery.ts +189 -122
  65. package/src/test.ts +17 -0
  66. package/src/types/builder/borrowIncentive.ts +8 -5
  67. package/src/types/builder/core.ts +23 -17
  68. package/src/types/builder/loyaltyProgram.ts +1 -1
  69. package/src/types/builder/referral.ts +6 -4
  70. package/src/types/builder/sCoin.ts +2 -2
  71. package/src/types/builder/spool.ts +4 -4
  72. package/src/types/builder/vesca.ts +9 -6
  73. package/src/types/query/core.ts +21 -5
  74. package/src/types/query/spool.ts +21 -0
  75. package/src/types/utils.ts +8 -3
  76. package/src/utils/core.ts +18 -0
  77. package/src/utils/index.ts +2 -0
  78. package/src/utils/query.ts +21 -5
  79. package/src/utils/tokenBucket.ts +9 -29
  80. package/src/utils/util.ts +8 -0
package/dist/index.js CHANGED
@@ -71,9 +71,11 @@ __export(src_exports, {
71
71
  ScallopQuery: () => ScallopQuery,
72
72
  ScallopUtils: () => ScallopUtils,
73
73
  TEST_ADDRESSES: () => TEST_ADDRESSES,
74
+ TokenBucket: () => TokenBucket,
74
75
  UNLOCK_ROUND_DURATION: () => UNLOCK_ROUND_DURATION,
75
76
  USE_TEST_ADDRESS: () => USE_TEST_ADDRESS,
76
77
  assetCoins: () => assetCoins,
78
+ callWithRateLimit: () => callWithRateLimit,
77
79
  coinDecimals: () => coinDecimals,
78
80
  coinIds: () => coinIds,
79
81
  marketCoins: () => marketCoins,
@@ -206,18 +208,7 @@ var SUPPORT_WORMHOLE = [
206
208
  "wsol"
207
209
  ];
208
210
  var SUPPORT_SPOOLS_REWARDS = ["sui"];
209
- var SUPPORT_BORROW_INCENTIVE_POOLS = [
210
- "sui",
211
- "wusdc",
212
- "wusdt",
213
- "afsui",
214
- "hasui",
215
- "vsui",
216
- "weth",
217
- "sbeth",
218
- "sca",
219
- "usdc"
220
- ];
211
+ var SUPPORT_BORROW_INCENTIVE_POOLS = [...SUPPORT_POOLS];
221
212
  var SUPPORT_BORROW_INCENTIVE_REWARDS = [
222
213
  ...SUPPORT_POOLS,
223
214
  ...SUPPORT_SCOIN
@@ -433,65 +424,243 @@ var FlashLoanFeeObjectMap = {
433
424
  var POOL_ADDRESSES = {
434
425
  usdc: {
435
426
  lendingPoolAddress: "0xd3be98bf540f7603eeb550c0c0a19dbfc78822f25158b5fa84ebd9609def415f",
436
- collateralPoolAddress: "0x8f0d529ba179c5b3d508213003eab813aaae31f78226099639b9a69d1aec17af"
427
+ collateralPoolAddress: "0x8f0d529ba179c5b3d508213003eab813aaae31f78226099639b9a69d1aec17af",
428
+ borrowDynamic: "0x77837ecd4f26fac9a410fff594f2c0bd3288904a15492ca77cb8a52684dbb866",
429
+ interestModel: "0xaae3f179d63009380cbdcb9acb12907afc9c3cb79cc3460be296a9c6d28f3ff3",
430
+ riskModel: "0x198b24db213bfeb8b3c80ae63dde92e32fd24984d25da8233ff777b851edd574",
431
+ borrowFeeKey: "0xd37c5316cfe0a5967d14264fa6b423f880518b294a1ee6581ccbb49ccc401fb8",
432
+ supplyLimitKey: "0x4be9ae54ac4d320f4f9c14cae78cb85c8e0e67791dd9bdba6d2db20614a28a24",
433
+ borrowLimitKey: "0x6b01093cba95b835181f00e3a2c31ed8dfc8d64fe3db0fb80933a09f66e1ccf1",
434
+ isolatedAssetKey: void 0,
435
+ spool: "0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",
436
+ spoolReward: "0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166",
437
+ sCoinTreasury: "0xbe6b63021f3d82e0e7e977cdd718ed7c019cf2eba374b7b546220402452f938e",
438
+ coinDecimalId: "0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6"
437
439
  },
438
440
  sbeth: {
439
- lendingPoolAddress: "0x5f08c4f71d56dd3342c452cc70ffc47f2f4180146d821941b0b9c04761bb42e7",
440
- collateralPoolAddress: "0xce0549a1cbe952e734f56646988e6b02bbae14667889a60e24d0d03540a6119f"
441
+ lendingPoolAddress: "0xaa34c938e0394e5186c7dc626ad69be96af2194b23fdc6ac1c63090e399f5ba4",
442
+ collateralPoolAddress: "0xce0549a1cbe952e734f56646988e6b02bbae14667889a60e24d0d03540a6119f",
443
+ borrowDynamic: "0x7bbe75e8b924229f2f2110838ff612ea66e670fa3766759515dee78f617b1ea3",
444
+ interestModel: "0x9e6cae260d05155785a1904d24e6abc98368509c5752c8a9cec15a35aabc1512",
445
+ riskModel: "0xcf10334cfee675ecea2d2fee37b0f7cd2835c84b8b5692a853021debe6af80ab",
446
+ borrowFeeKey: "0x4298c8b6afe7a42a8e3ff93773fb9769529fe6d37e085ab411acf2ba2a44a931",
447
+ supplyLimitKey: "0x812fe508b78d3e0817149c0b39976221ddb267b5cc9514e81679f9b9a2f3624c",
448
+ borrowLimitKey: "0x165c274c67eda2b0d13563124741fffd0ce7d643f4c1c4b59d7e53a83796ae25",
449
+ isolatedAssetKey: void 0,
450
+ spool: void 0,
451
+ spoolReward: void 0,
452
+ sCoinTreasury: "0xfd0f02def6358a1f266acfa1493d4707ee8387460d434fb667d63d755ff907ed",
453
+ coinDecimalId: "0x89b04ba87f8832d4d76e17a1c9dce72eb3e64d372cf02012b8d2de5384faeef0"
441
454
  },
442
455
  weth: {
443
456
  lendingPoolAddress: "0xc8fcdff48efc265740ae0b74aae3faccae9ec00034039a113f3339798035108c",
444
- collateralPoolAddress: "0xad7ced91ed6e7f2b81805561eee27fa6f3e72fdae561077334c7248583db4dbf"
457
+ collateralPoolAddress: "0xad7ced91ed6e7f2b81805561eee27fa6f3e72fdae561077334c7248583db4dbf",
458
+ borrowDynamic: "0xd1578e1d1c9c82eb4c5bf14beece8142a67a683b2647d7276e92984119fc1445",
459
+ interestModel: "0xa1dc08541cd2cb7cfb4e56272292d5c6a4780e80fd210c58abffae98268b5ed9",
460
+ riskModel: "0x9f05a25fd33a9e8cf33962126b175d038e184f0ee1b87dc41d4cedbe6abebbe5",
461
+ borrowFeeKey: "0x29672ba8ab4625b8181d8ed739e5344de22a97d417748c4d1276c7379283d7a3",
462
+ supplyLimitKey: "0x2b957941bdc9432bbc83ab74dc194b6ebb7c927bc4c6926a5492b5503499e509",
463
+ borrowLimitKey: "0x51f256d87e51a7ca2b1c482923096f4b6dac6beac89d8ecf4c65b7d5764115d6",
464
+ isolatedAssetKey: void 0,
465
+ spool: "0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",
466
+ spoolReward: "0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077",
467
+ sCoinTreasury: "0x4b7f5da0e306c9d52490a0c1d4091e653d6b89778b9b4f23c877e534e4d9cd21",
468
+ coinDecimalId: "0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f"
445
469
  },
446
470
  wbtc: {
447
471
  lendingPoolAddress: "0x65cc08a5aca0a0b8d72e1993ded8d145f06dd102fd0d8f285b92934faed564ab",
448
- collateralPoolAddress: "0x1aa4e5cf743cd797b4eb8bf1e614f80ae2cf556ced426cddaaf190ffcd0e59c3"
472
+ collateralPoolAddress: "0x1aa4e5cf743cd797b4eb8bf1e614f80ae2cf556ced426cddaaf190ffcd0e59c3",
473
+ borrowDynamic: "0x6f97dcf54158a5d08f359a213a41e347bc1e6316414288dc1e1b674dc008742e",
474
+ interestModel: "0x582b915cca0ffca9576a7cedd505d0fd7cb146e9521ccf10e7453ed93705684d",
475
+ riskModel: "0x1d0a242bf1682e259112239720da19d3155dd99d70b1f4b3b973eecbab858911",
476
+ borrowFeeKey: "0x654ab7e8ff6d9ef04da697e1f12ca21eaf72ebb495daf877e0776e65187dcb92",
477
+ supplyLimitKey: "0xac3b0d17df9f98aa2798c54405cf1d8d5356ef22f76f02d150cbe5195e9f3a36",
478
+ borrowLimitKey: "0x231e13ba6b1eb26c562f4a125778d3152f9a77e31f124bd6012e234a73012169",
479
+ isolatedAssetKey: void 0,
480
+ spool: void 0,
481
+ spoolReward: void 0,
482
+ sCoinTreasury: "0xe2883934ea42c99bc998bbe0f01dd6d27aa0e27a56455707b1b34e6a41c20baa",
483
+ coinDecimalId: "0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd"
449
484
  },
450
485
  wusdc: {
451
- lendingPoolAddress: "0x9c9077abf7a29eebce41e33addbcd6f5246a5221dd733e56ea0f00ae1b25c9e8",
452
- collateralPoolAddress: "0x75aacfb7dcbf92ee0111fc1bf975b12569e4ba632e81ed7ae5ac090d40cd3acb"
486
+ lendingPoolAddress: "0x2f4df5e1368fbbdaa5c712d28b837b3d41c2d3872979ccededcdfdac55ff8a93",
487
+ collateralPoolAddress: "0x94cf69158114c5b242d2ee5d0149a335bddf3b9c9a6ba919cca58097a4814980",
488
+ borrowDynamic: "0x0464d117908b52fc75f7f85322a47caa078ef56f48681bcfdcb630a66f2591e6",
489
+ interestModel: "0xd72e2b5ba486752939d6dfb86a67b86ce9a60c83cb8fb893caac54a0f112577f",
490
+ riskModel: "0xb74035de8f70c1531ceb8e2e8c152d6b8db24c8a9fe7bbf6f75dbf7c6700a0a3",
491
+ borrowFeeKey: "0x76dcf1acbd9951fe3d1a3fe28403fec089ffe53a7c7d6c77e3ea97033a63581a",
492
+ supplyLimitKey: "0x7b302196907e87c5d5872f2e6f40628d110170f994e0e08bc607bded001958c3",
493
+ borrowLimitKey: "0x97f1502ce994db0bcb15aac1760d174def9e88e97cd2262eed54521ee2c19f81",
494
+ isolatedAssetKey: void 0,
495
+ spool: "0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0",
496
+ spoolReward: "0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8",
497
+ sCoinTreasury: "0x50c5cfcbcca3aaacab0984e4d7ad9a6ad034265bebb440f0d1cd688ec20b2548",
498
+ coinDecimalId: "0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189"
453
499
  },
454
500
  wusdt: {
455
501
  lendingPoolAddress: "0xfbc056f126dd35adc1f8fe985e2cedc8010e687e8e851e1c5b99fdf63cd1c879",
456
- collateralPoolAddress: "0x2260cb5b24929dd20a1742f37a61ff3ce4fde5cdb023e2d3ce2e0ce2d90719e3"
502
+ collateralPoolAddress: "0x2260cb5b24929dd20a1742f37a61ff3ce4fde5cdb023e2d3ce2e0ce2d90719e3",
503
+ borrowDynamic: "0xb524030cc8f7cdbf13f1925a0a2b5e77cc52bab73b070f42c5e510f6083da1ba",
504
+ interestModel: "0x92f93c4431b4c51774d6d964da516af2def18b78f49dbbf519e58449a8ba4659",
505
+ riskModel: "0xdf89d66988cb506ddeff46f5dfd1d11aaece345e9a05a0c6a18a0788647de2a7",
506
+ borrowFeeKey: "0xda8f8b3522fc4086eae4ae7ce8844d60aa0dc3eab8ffc91fe93e922a72639b2d",
507
+ supplyLimitKey: "0xa9cb5ebb90ca6e808a2bd7728cca4a6fa8b565d4deeda96eb23c8322c477c24e",
508
+ borrowLimitKey: "0xa3278564fc613680a69c10972a0299965bf6e12e9ac171388842fc958de0f90e",
509
+ isolatedAssetKey: void 0,
510
+ spool: "0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f",
511
+ spoolReward: "0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080",
512
+ sCoinTreasury: "0x1f02e2fed702b477732d4ad6044aaed04f2e8e586a169153694861a901379df0",
513
+ coinDecimalId: "0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c"
457
514
  },
458
515
  sui: {
459
516
  lendingPoolAddress: "0x9c9077abf7a29eebce41e33addbcd6f5246a5221dd733e56ea0f00ae1b25c9e8",
460
- collateralPoolAddress: "0x75aacfb7dcbf92ee0111fc1bf975b12569e4ba632e81ed7ae5ac090d40cd3acb"
517
+ collateralPoolAddress: "0x75aacfb7dcbf92ee0111fc1bf975b12569e4ba632e81ed7ae5ac090d40cd3acb",
518
+ borrowDynamic: "0xbf68e6159c99dcaf87717385f1143d2891c2d19663bd51f0bc9b6909e4bb7c27",
519
+ interestModel: "0x0dad9baa89b863c15a0487575de7cc428b01f1aa3998ad7a9e9752d96e83ffa9",
520
+ riskModel: "0xcd6675864690b5648a6e309f2f02a66914b2b2bd9c31936f4e0f7fc0f792bc86",
521
+ borrowFeeKey: "0xda5ede87a05c0677b17511c859b22d0a2b0229ee374d5d7a1274cb836b9fe5f8",
522
+ supplyLimitKey: "0x0602418e66fb7a73fa997077bd66f248ad5b090d43344a14b9f1db598ecc1d47",
523
+ borrowLimitKey: "0x2b33a7efdcf6a6df24f4d8a356dd52f58d75bc023c3f171d99502d4d008b53f0",
524
+ isolatedAssetKey: void 0,
525
+ spool: "0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4",
526
+ spoolReward: "0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9",
527
+ sCoinTreasury: "0x5c1678c8261ac9eec024d4d630006a9f55c80dc0b1aa38a003fcb1d425818c6b",
528
+ coinDecimalId: "0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3"
461
529
  },
462
530
  wapt: {
463
531
  lendingPoolAddress: "0xca8c14a24e0c32b198eaf479a3317461e3cc339097ce88eaf296a15df8dcfdf5",
464
- collateralPoolAddress: "0xde33f9ac5bb0ed34598da4e64b4983832716ced65f172fbf267bcfe859c4ad9c"
532
+ collateralPoolAddress: "0xde33f9ac5bb0ed34598da4e64b4983832716ced65f172fbf267bcfe859c4ad9c",
533
+ borrowDynamic: "0xadda873fb6bf68e1ba3f2dfaa51cf75d4a1bef73d9627bd36e77d2baecb1f2dc",
534
+ interestModel: "0xa4a29d07beecea5eb0c59745bb89d7a1380c6f206a7f1ca37046e05db6025c43",
535
+ riskModel: "0x7ada83b473af30aed50d187de82a0912878b53ade7ac30e11ce23953cf739d84",
536
+ borrowFeeKey: "0x768735df587c7e0f141dcd035fbbcbf9d2149a7b23888baed4e2baa160fa2eeb",
537
+ supplyLimitKey: void 0,
538
+ borrowLimitKey: void 0,
539
+ isolatedAssetKey: void 0,
540
+ spool: void 0,
541
+ spoolReward: void 0,
542
+ sCoinTreasury: void 0,
543
+ coinDecimalId: "0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8"
465
544
  },
466
545
  wsol: {
467
546
  lendingPoolAddress: "0x985682c42984cdfb03f9ff7d8923344c2fe096b1ae4b82ea17721af19d22a21f",
468
- collateralPoolAddress: "0xdc1cc2c371a043ae8e3c3fe2d013c35f1346960b7dbb4c072982c5b794ed144f"
547
+ collateralPoolAddress: "0xdc1cc2c371a043ae8e3c3fe2d013c35f1346960b7dbb4c072982c5b794ed144f",
548
+ borrowDynamic: "0xe3f301e16d4f1273ea659dd82c5c3f124ca5a5883a5726c7ec0f77bf43b70895",
549
+ interestModel: "0xd95affaee077006b8dbb4b108c1b087e95fc6e5143ef0682da345d5b35bc6356",
550
+ riskModel: "0x8e0da6358073144ec3557400c87f04991ba3a13ca7e0d0a19daed45260b32f16",
551
+ borrowFeeKey: "0x604bffbc817e8e12db15f2373a9e15b2c7adbc510649cdf2cc62a594af90671c",
552
+ supplyLimitKey: "0xbd419b536b3f9c9d4adfc20372ca6feedc53cc31798ac860dbfc847bcf05f54b",
553
+ borrowLimitKey: "0x77d453c51948f32564c810bc73f9ba7abde880657b7f89e1c8a3bc28fa36ee87",
554
+ isolatedAssetKey: void 0,
555
+ spool: void 0,
556
+ spoolReward: void 0,
557
+ sCoinTreasury: "0x760fd66f5be869af4382fa32b812b3c67f0eca1bb1ed7a5578b21d56e1848819",
558
+ coinDecimalId: "0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e"
469
559
  },
470
560
  cetus: {
471
561
  lendingPoolAddress: "0xc09858f60e74a1b671635bec4e8a2c84a0ff313eb87f525fba3258e88c6b6282",
472
- collateralPoolAddress: "0xe363967e29b7b9c1245d6d46d63e719de8f90b37e3358c545b55d945ea0b676a"
562
+ collateralPoolAddress: "0xe363967e29b7b9c1245d6d46d63e719de8f90b37e3358c545b55d945ea0b676a",
563
+ borrowDynamic: "0xcc725fd5d71990cdccc7e16c88a2abde6dbcd0bf6e805ccc1c0cb83a106bbf4e",
564
+ interestModel: "0x2f1258aab89d04d11834121599ab1317dfecb582b4246f106df399911125845a",
565
+ riskModel: "0x03fed312dbba624dff5edaf4736891a1c7d864445fd268e7572b42ec7381132e",
566
+ borrowFeeKey: "0xdf5fb0cc4ebbf5eebfae23dfa5b266f6a58c18a894a13054ae60c0eb6e79c382",
567
+ supplyLimitKey: "0xa5ea3d4bf663d7bc667e82b40a98923590ff3851b9ea8e7afbc26c588c7007d3",
568
+ borrowLimitKey: "0xf44218a5f0feb128e6fbe74b91d1e7e9ef859bd23a576ff0de151829e015a157",
569
+ isolatedAssetKey: void 0,
570
+ spool: "0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",
571
+ spoolReward: "0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f",
572
+ sCoinTreasury: "0xa283c63488773c916cb3d6c64109536160d5eb496caddc721eb39aad2977d735",
573
+ coinDecimalId: "0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da"
473
574
  },
474
575
  afsui: {
475
576
  lendingPoolAddress: "0x9b942a24ce390b7f5016d34a0217057bf9487b92aa6d7cc9894271dbbe62471a",
476
- collateralPoolAddress: "0xe5e56f5c0e3072760b21f9d49a5cc793f37d736c412a9065c16e1265c74e6341"
577
+ collateralPoolAddress: "0xe5e56f5c0e3072760b21f9d49a5cc793f37d736c412a9065c16e1265c74e6341",
578
+ borrowDynamic: "0x1c76d4df9506154a117bbac0f5e005d8a9c0d9ca60e3fe0c9d080006f6f54e81",
579
+ interestModel: "0xb155c536b37c9601baaa734ad1dd0ef335b2b597aceb8d3ecee41a43f94dcd70",
580
+ riskModel: "0x75371b1d04b5bebc0738af548ba64ea658e74f78228ec8014336d8eebb992312",
581
+ borrowFeeKey: "0xabc6422db2d4ee01635ddaeaa44ba68370eebd785d2c4632515f841ae9bc47d9",
582
+ supplyLimitKey: "0x61a2054eb37f543c0d774da57f2c9542aad8d79a197f748ac08ef5df6cc47028",
583
+ borrowLimitKey: "0x4459498a043872cd107ea917493fee0baf2d37a273c7538e1d6581cc61b92af8",
584
+ isolatedAssetKey: void 0,
585
+ spool: "0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800",
586
+ spoolReward: "0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e",
587
+ sCoinTreasury: "0x55f4dfe9e40bc4cc11c70fcb1f3daefa2bdc330567c58d4f0792fbd9f9175a62",
588
+ coinDecimalId: "0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d"
477
589
  },
478
590
  hasui: {
479
591
  lendingPoolAddress: "0x7ebc607f6bdeb659fb6506cb91c5cc1d47bb365cfd5d2e637ea765346ec84ed4",
480
- collateralPoolAddress: "0xad9ed40d6486e4c26cec7370dffce8dc4821eb79178250b5938a34ccafd61e6d"
592
+ collateralPoolAddress: "0xad9ed40d6486e4c26cec7370dffce8dc4821eb79178250b5938a34ccafd61e6d",
593
+ borrowDynamic: "0x13ec1220b41c6e0f11dd6113199a2aff8e4cf2223047b5bd06d7a3ed5d23e1d2",
594
+ interestModel: "0x987c58cbe48096618f4d9d83e0bde2ff638ce4753aba40dab7c302ac3e4b4519",
595
+ riskModel: "0xe42d8497d423eca0d8df89850c2d77d3644e7f54a2d28f59c315903ea5ec8dec",
596
+ borrowFeeKey: "0xef885c382d461c4fb14d1f3b3758c380c78a1a4b2a3d2fafe6e8649a60fdd7ab",
597
+ supplyLimitKey: "0xc7385b1703693cbbc9c97227fe3fd5c91d7afda00e0da69d942c3260d78e45e0",
598
+ borrowLimitKey: "0x65333e606eead786a999c8267bc9886b0fdbc298a8a8635a48a9c9b8838d9395",
599
+ isolatedAssetKey: void 0,
600
+ spool: "0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa",
601
+ spoolReward: "0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66",
602
+ sCoinTreasury: "0x404ccc1404d74a90eb6f9c9d4b6cda6d417fb03189f80d9070a35e5dab1df0f5",
603
+ coinDecimalId: "0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24"
481
604
  },
482
605
  vsui: {
483
606
  lendingPoolAddress: "0xda9257c0731d8822e8a438ebced13415850d705b779c79958dcf2aeb21fcb43d",
484
- collateralPoolAddress: "0x4435e8b8ec2a04094d863aa52deb6ab6f8f47ed8778f4d9f1b27afc4a6e85f1e"
607
+ collateralPoolAddress: "0x4435e8b8ec2a04094d863aa52deb6ab6f8f47ed8778f4d9f1b27afc4a6e85f1e",
608
+ borrowDynamic: "0x8eae703505246f975e83f5af24780e5f1b89ef403d5a80ea15534624d6f1a503",
609
+ interestModel: "0xaf6a52b5eaaa5af4d9e49d83de0d504c295ae21f3a37560c3f48e0e15a1d4625",
610
+ riskModel: "0x1e862f27a6bd47c3041159a5cf392f549485c6605ed9aa937f16ecc951e82e65",
611
+ borrowFeeKey: "0x5230de0f41a5e4c05b3d1187a90a9eeab491cec97b08b71512d9785e8af36aa6",
612
+ supplyLimitKey: "0x1d40e34d1f365ec431fff020bd75c16b14b340b3ed6c139803cc15c2384621b2",
613
+ borrowLimitKey: "0x4eb206b4417642cfc1b02f80bb5f5e366af2af2f9fb4ea4f4e898ae82367f8a0",
614
+ isolatedAssetKey: void 0,
615
+ spool: "0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670",
616
+ spoolReward: "0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a",
617
+ sCoinTreasury: "0xc06688ee1af25abc286ffb1d18ce273d1d5907cd1064c25f4e8ca61ea989c1d1",
618
+ coinDecimalId: "0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd"
485
619
  },
486
620
  sca: {
487
621
  lendingPoolAddress: "0x6fc7d4211fc7018b6c75e7b908b88f2e0536443239804a3d32af547637bd28d7",
488
- collateralPoolAddress: "0xff677a5d9e9dc8f08f0a8681ebfc7481d1c7d57bc441f2881974adcdd7b13c31"
622
+ collateralPoolAddress: "0xff677a5d9e9dc8f08f0a8681ebfc7481d1c7d57bc441f2881974adcdd7b13c31",
623
+ borrowDynamic: "0x4e24f52edd739dab59ca4c6353ca430b7ce57e7f333abd0957958570a7cd09ca",
624
+ interestModel: "0xbdcd48cf5b1a814911dc2d5c72d393a980c87820199fe5d799289ce94f4c47df",
625
+ riskModel: "0xc437c24b67b8e2676907700fa395af337ad6463d2c0b4f4fa2e9276414026089",
626
+ borrowFeeKey: "0xee55ba0f9800a62d9e7aef667f87e658258f41814d2c9fa02e25590671b4e5ad",
627
+ supplyLimitKey: "0x8dd938856b972a10ea27ecab2af7ed78e48fc5f6ccedaf2b2119959f747dc2e3",
628
+ borrowLimitKey: "0x04c7de61c5b42972f9bf6a8b1848e5fea2d037ee8deba81741ecd4a70aa80d30",
629
+ isolatedAssetKey: void 0,
630
+ spool: void 0,
631
+ spoolReward: void 0,
632
+ sCoinTreasury: "0xe04bfc95e00252bd654ee13c08edef9ac5e4b6ae4074e8390db39e9a0109c529",
633
+ coinDecimalId: "0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844"
489
634
  },
490
635
  fud: {
491
- lendingPoolAddress: "0x14367ddca30e2860cb89ed4eaca20c7ece260c5d59dd9990d2c85a8321326acb"
636
+ lendingPoolAddress: "0xefed2cbe76b344792ac724523c8b2236740d1cea2100d46a0ed0dc760c7f4231",
637
+ collateralPoolAddress: void 0,
638
+ borrowDynamic: "0x14367ddca30e2860cb89ed4eaca20c7ece260c5d59dd9990d2c85a8321326acb",
639
+ interestModel: "0x2600ac100ef154eb2329ffd3aad47aca308ff9f9348de3e8e94aaeb906ec2303",
640
+ riskModel: void 0,
641
+ borrowFeeKey: "0xa87e8b26e07ff35ac9fb57adcc779be2883080fc7d12de2d9e7e16d8d8d5e529",
642
+ supplyLimitKey: "0xf98419aecc37a3c5de716f8ec590f8991a5be34da72ce1a2da09531ff45adf7d",
643
+ borrowLimitKey: "0x3d928a001c453c50004baa54e14b0a0e1b0907d9c613dfd76064fd7ed4e8beb8",
644
+ isolatedAssetKey: "0xfcb533e9e4e31f9c9f32d6cbf7fbb3425f1d60474e229a363a2dc7f835d587e2",
645
+ spool: void 0,
646
+ spoolReward: void 0,
647
+ sCoinTreasury: "0xf25212f11d182decff7a86165699a73e3d5787aced203ca539f43cfbc10db867",
648
+ coinDecimalId: "0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e"
492
649
  },
493
650
  deep: {
494
- lendingPoolAddress: "0xf4a67ffb43da1e1c61c049f188f19463ea8dbbf2d5ef4722d6df854ff1b1cc03"
651
+ lendingPoolAddress: "0xf4a67ffb43da1e1c61c049f188f19463ea8dbbf2d5ef4722d6df854ff1b1cc03",
652
+ collateralPoolAddress: void 0,
653
+ borrowDynamic: "0x95e00d7466f97a100e70f08bd37788dc49335796f6f49fab996d40dd0681c6d3",
654
+ interestModel: "0x4143c298506a332d92ea8a995e6f3991ee3215f58f6fc6441752835d275b9a69",
655
+ riskModel: void 0,
656
+ borrowFeeKey: "0xb14ee43f4ad2a2c40bac8c4406a401690e93c982e289cf3802fedf74a159cab2",
657
+ supplyLimitKey: "0x599528fdfdc253e90dfd0acf4f4a166b391e2aac1ca6528abbff63225b548fee",
658
+ borrowLimitKey: "0xf4217e8ef9d9c32e8992092e910a77535a8124c19b8a762a673f227f5f765a4e",
659
+ isolatedAssetKey: "0x208d3a24ba369dcfc8f0387333d1512b98199eb150d2f2a69359ff708cf761e3",
660
+ spool: void 0,
661
+ spoolReward: void 0,
662
+ sCoinTreasury: "0xc63838fabe37b25ad897392d89876d920f5e0c6a406bf3abcb84753d2829bc88",
663
+ coinDecimalId: "0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0"
495
664
  }
496
665
  };
497
666
 
@@ -542,7 +711,11 @@ var queryKeys = {
542
711
  typeArgs: !typeArgs ? void 0 : JSON.stringify(typeArgs)
543
712
  }
544
713
  ],
545
- getObject: (objectId, walletAddress, options) => ["rpc", "getObject", { walletAddress, options, objectId }],
714
+ getObject: (objectId, options) => [
715
+ "rpc",
716
+ "getObject",
717
+ { options, objectId }
718
+ ],
546
719
  getObjects: (objectIds, walletAddress, options) => [
547
720
  "rpc",
548
721
  "getObjects",
@@ -592,7 +765,10 @@ var queryKeys = {
592
765
  "rpc",
593
766
  "getAllCoinBalances",
594
767
  { owner }
595
- ]
768
+ ],
769
+ getNormalizedMoveFunction: (target) => {
770
+ return ["rpc", "getNormalizedMoveCall", target];
771
+ }
596
772
  },
597
773
  oracle: {
598
774
  getPythLatestPriceFeeds: () => ["oracle", "getPythPriceIds"]
@@ -816,6 +992,32 @@ var TEST_ADDRESSES = {
816
992
  feedObject: "0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"
817
993
  }
818
994
  }
995
+ },
996
+ deep: {
997
+ id: "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",
998
+ metaData: "0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",
999
+ treasury: "",
1000
+ oracle: {
1001
+ supra: "",
1002
+ switchboard: "",
1003
+ pyth: {
1004
+ feed: "29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",
1005
+ feedObject: "0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed"
1006
+ }
1007
+ }
1008
+ },
1009
+ fud: {
1010
+ id: "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1",
1011
+ metaData: "0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",
1012
+ treasury: "",
1013
+ oracle: {
1014
+ supra: "",
1015
+ switchboard: "",
1016
+ pyth: {
1017
+ feed: "6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",
1018
+ feedObject: "0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2"
1019
+ }
1020
+ }
819
1021
  }
820
1022
  },
821
1023
  oracles: {
@@ -1035,14 +1237,22 @@ var TEST_ADDRESSES = {
1035
1237
  ssbeth: {
1036
1238
  coinType: "0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",
1037
1239
  treasury: "0xfd0f02def6358a1f266acfa1493d4707ee8387460d434fb667d63d755ff907ed"
1240
+ },
1241
+ sdeep: {
1242
+ coinType: "0xeb7a05a3224837c5e5503575aed0be73c091d1ce5e43aa3c3e716e0ae614608f::scallop_deep::SCALLOP_DEEP",
1243
+ treasury: "0xc63838fabe37b25ad897392d89876d920f5e0c6a406bf3abcb84753d2829bc88"
1244
+ },
1245
+ sfud: {
1246
+ coinType: "0xe56d5167f427cbe597da9e8150ef5c337839aaf46891d62468dcf80bdd8e10d1::scallop_fud::SCALLOP_FUD",
1247
+ treasury: "0xf25212f11d182decff7a86165699a73e3d5787aced203ca539f43cfbc10db867"
1038
1248
  }
1039
1249
  }
1040
1250
  }
1041
1251
  };
1042
1252
 
1043
1253
  // src/constants/tokenBucket.ts
1044
- var DEFAULT_TOKENS_PER_INTERVAL = 50;
1045
- var DEFAULT_INTERVAL_IN_MS = 100;
1254
+ var DEFAULT_TOKENS_PER_INTERVAL = 10;
1255
+ var DEFAULT_INTERVAL_IN_MS = 250;
1046
1256
 
1047
1257
  // src/constants/vesca.ts
1048
1258
  var UNLOCK_ROUND_DURATION = 60 * 60 * 24;
@@ -1186,7 +1396,10 @@ var parseOriginMarketPoolData = (originMarketPoolData) => {
1186
1396
  borrowRateOnMidKink: Number(originMarketPoolData.borrowRateOnMidKink.value) / 2 ** 32,
1187
1397
  highKink: Number(originMarketPoolData.highKink.value) / 2 ** 32,
1188
1398
  midKink: Number(originMarketPoolData.midKink.value) / 2 ** 32,
1189
- minBorrowAmount: Number(originMarketPoolData.minBorrowAmount)
1399
+ minBorrowAmount: Number(originMarketPoolData.minBorrowAmount),
1400
+ isIsolated: originMarketPoolData.isIsolated,
1401
+ supplyLimit: Number(originMarketPoolData.supplyLimit),
1402
+ borrowLimit: Number(originMarketPoolData.borrowLimit)
1190
1403
  };
1191
1404
  };
1192
1405
  var calculateMarketPoolData = (utils, parsedMarketPoolData) => {
@@ -1238,6 +1451,7 @@ var calculateMarketPoolData = (utils, parsedMarketPoolData) => {
1238
1451
  borrowApyOnHighKink: utils.parseAprToApy(borrowAprOnHighKink),
1239
1452
  borrowAprOnMidKink,
1240
1453
  borrowApyOnMidKink: utils.parseAprToApy(borrowAprOnMidKink),
1454
+ coinDecimal,
1241
1455
  maxBorrowApr,
1242
1456
  maxBorrowApy: utils.parseAprToApy(maxBorrowApr),
1243
1457
  borrowApr: Math.min(borrowApr, maxBorrowApr),
@@ -1256,17 +1470,21 @@ var calculateMarketPoolData = (utils, parsedMarketPoolData) => {
1256
1470
  utilizationRate: utilizationRate.toNumber(),
1257
1471
  supplyApr: supplyApr.toNumber(),
1258
1472
  supplyApy: utils.parseAprToApy(supplyApr.toNumber()),
1259
- conversionRate: conversionRate.toNumber()
1473
+ conversionRate: conversionRate.toNumber(),
1474
+ isIsolated: parsedMarketPoolData.isIsolated,
1475
+ maxSupplyCoin: (0, import_bignumber.default)(parsedMarketPoolData.supplyLimit).shiftedBy(coinDecimal).toNumber(),
1476
+ maxBorrowCoin: (0, import_bignumber.default)(parsedMarketPoolData.borrowLimit).shiftedBy(coinDecimal).toNumber()
1260
1477
  };
1261
1478
  };
1262
1479
  var parseOriginMarketCollateralData = (originMarketCollateralData) => {
1263
1480
  const divisor = 2 ** 32;
1264
1481
  return {
1265
1482
  coinType: (0, import_utils.normalizeStructTag)(originMarketCollateralData.type.name),
1483
+ isIsolated: originMarketCollateralData.isIsolated,
1266
1484
  collateralFactor: Number(originMarketCollateralData.collateralFactor.value) / divisor,
1267
1485
  liquidationFactor: Number(originMarketCollateralData.liquidationFactor.value) / divisor,
1268
1486
  liquidationDiscount: Number(originMarketCollateralData.liquidationDiscount.value) / divisor,
1269
- liquidationPanelty: Number(originMarketCollateralData.liquidationPanelty.value) / divisor,
1487
+ liquidationPenalty: Number(originMarketCollateralData.liquidationPenalty.value) / divisor,
1270
1488
  liquidationReserveFactor: Number(originMarketCollateralData.liquidationReserveFactor.value) / divisor,
1271
1489
  maxCollateralAmount: Number(originMarketCollateralData.maxCollateralAmount),
1272
1490
  totalCollateralAmount: Number(
@@ -1286,6 +1504,8 @@ var calculateMarketCollateralData = (utils, parsedMarketCollateralData) => {
1286
1504
  parsedMarketCollateralData.totalCollateralAmount
1287
1505
  ).shiftedBy(-1 * coinDecimal);
1288
1506
  return {
1507
+ coinDecimal,
1508
+ isIsolated: parsedMarketCollateralData.isIsolated,
1289
1509
  maxDepositAmount: parsedMarketCollateralData.maxCollateralAmount,
1290
1510
  maxDepositCoin: maxCollateralCoin.toNumber(),
1291
1511
  depositAmount: parsedMarketCollateralData.totalCollateralAmount,
@@ -1418,7 +1638,7 @@ var parseOriginBorrowIncentivesPoolPointData = (originBorrowIncentivePoolPointDa
1418
1638
  createdAt: Number(originBorrowIncentivePoolPointData.created_at)
1419
1639
  };
1420
1640
  };
1421
- var parseOriginBorrowIncentivePoolData = (originBorrowIncentivePoolData) => {
1641
+ var parseOriginBorrowIncentivePoolData = (utils, originBorrowIncentivePoolData) => {
1422
1642
  return {
1423
1643
  poolType: (0, import_utils.normalizeStructTag)(originBorrowIncentivePoolData.pool_type.name),
1424
1644
  minStakes: Number(originBorrowIncentivePoolData.min_stakes),
@@ -1427,9 +1647,9 @@ var parseOriginBorrowIncentivePoolData = (originBorrowIncentivePoolData) => {
1427
1647
  poolPoints: originBorrowIncentivePoolData.points.reduce(
1428
1648
  (acc, point) => {
1429
1649
  const parsed = parseOriginBorrowIncentivesPoolPointData(point);
1430
- const name = (0, import_utils.parseStructTag)(
1431
- parsed.pointType
1432
- ).name.toLowerCase();
1650
+ const name = utils.parseSCoinTypeNameToMarketCoinName(
1651
+ (0, import_utils.parseStructTag)(parsed.pointType).name.toLowerCase()
1652
+ );
1433
1653
  acc[name] = parsed;
1434
1654
  return acc;
1435
1655
  },
@@ -1616,6 +1836,13 @@ var findClosestUnlockRound = (unlockAtInSecondTimestamp) => {
1616
1836
  }
1617
1837
  return Math.floor(closestTwelveAM.getTime() / 1e3);
1618
1838
  };
1839
+ var partitionArray = (array, chunkSize) => {
1840
+ const result = [];
1841
+ for (let i = 0; i < array.length; i += chunkSize) {
1842
+ result.push(array.slice(i, i + chunkSize));
1843
+ }
1844
+ return result;
1845
+ };
1619
1846
 
1620
1847
  // src/utils/tokenBucket.ts
1621
1848
  var TokenBucket = class {
@@ -1628,10 +1855,10 @@ var TokenBucket = class {
1628
1855
  refill() {
1629
1856
  const now = Date.now();
1630
1857
  const elapsed = now - this.lastRefill;
1631
- if (elapsed > this.interval) {
1858
+ if (elapsed >= this.interval) {
1632
1859
  const tokensToAdd = Math.floor(elapsed / this.interval) * this.tokensPerInterval;
1633
1860
  this.tokens = Math.min(this.tokens + tokensToAdd, this.tokensPerInterval);
1634
- this.lastRefill = now;
1861
+ this.lastRefill += Math.floor(elapsed / this.interval) * this.interval;
1635
1862
  }
1636
1863
  }
1637
1864
  removeTokens(count) {
@@ -1643,27 +1870,12 @@ var TokenBucket = class {
1643
1870
  return false;
1644
1871
  }
1645
1872
  };
1646
- var callWithRateLimit = async (tokenBucket, fn, retryDelayInMs = DEFAULT_INTERVAL_IN_MS, maxRetries = 15, backoffFactor = 2) => {
1873
+ var callWithRateLimit = async (tokenBucket, fn, retryDelayInMs = DEFAULT_INTERVAL_IN_MS, maxRetries = 15, backoffFactor = 1.25) => {
1647
1874
  let retries = 0;
1648
1875
  const tryRequest = async () => {
1649
1876
  if (tokenBucket.removeTokens(1)) {
1650
- try {
1651
- const result = await fn();
1652
- if (result && result.status === 429) {
1653
- throw new Error("Unexpected status code: 429");
1654
- }
1655
- return result;
1656
- } catch (error) {
1657
- if (error.message === "Unexpected status code: 429" && retries < maxRetries) {
1658
- retries++;
1659
- const delay = retryDelayInMs * Math.pow(backoffFactor, retries);
1660
- await new Promise((resolve) => setTimeout(resolve, delay));
1661
- return tryRequest();
1662
- } else {
1663
- console.error("An error occurred:", error.message);
1664
- return null;
1665
- }
1666
- }
1877
+ const result = await fn();
1878
+ return result;
1667
1879
  } else if (retries < maxRetries) {
1668
1880
  retries++;
1669
1881
  const delay = retryDelayInMs * Math.pow(backoffFactor, retries);
@@ -1702,6 +1914,22 @@ function withIndexerFallback(method) {
1702
1914
  };
1703
1915
  }
1704
1916
 
1917
+ // src/utils/core.ts
1918
+ var parseObjectAs = (object) => {
1919
+ if (!(object && object.content && "fields" in object.content))
1920
+ throw new Error(`Failed to parse object`);
1921
+ const fields = object.content.fields;
1922
+ if (typeof fields === "object" && "value" in fields) {
1923
+ const value = fields.value;
1924
+ if (typeof value === "object" && "fields" in value)
1925
+ return value.fields;
1926
+ return value;
1927
+ } else if (typeof fields === "object") {
1928
+ return fields;
1929
+ }
1930
+ return fields;
1931
+ };
1932
+
1705
1933
  // src/models/scallopCache.ts
1706
1934
  var ScallopCache = class {
1707
1935
  constructor(suiKit, walletAddress, cacheOptions, tokenBucket, queryClient) {
@@ -1736,6 +1964,13 @@ var ScallopCache = class {
1736
1964
  })
1737
1965
  );
1738
1966
  }
1967
+ retryFn(errCount, e) {
1968
+ if (errCount === 5)
1969
+ return false;
1970
+ if (e.status === 429)
1971
+ return true;
1972
+ return false;
1973
+ }
1739
1974
  /**
1740
1975
  * @description Provides cache for inspectTxn of the SuiKit.
1741
1976
  * @param QueryInspectTxnParams
@@ -1748,18 +1983,64 @@ var ScallopCache = class {
1748
1983
  typeArgs
1749
1984
  }) {
1750
1985
  const txBlock = new import_sui_kit.SuiTxBlock();
1751
- txBlock.moveCall(queryTarget, args, typeArgs);
1986
+ const resolvedQueryTarget = await this.queryGetNormalizedMoveFunction(queryTarget);
1987
+ if (!resolvedQueryTarget)
1988
+ throw new Error("Invalid query target");
1989
+ const { parameters } = resolvedQueryTarget;
1990
+ const resolvedArgs = await Promise.all(
1991
+ (args ?? []).map(async (arg, idx) => {
1992
+ if (typeof arg !== "string")
1993
+ return arg;
1994
+ const cachedData = (await this.queryGetObject(arg))?.data;
1995
+ if (!cachedData)
1996
+ return arg;
1997
+ const owner = cachedData.owner;
1998
+ if (!owner || typeof owner !== "object" || !("Shared" in owner))
1999
+ return {
2000
+ objectId: cachedData.objectId,
2001
+ version: cachedData.version,
2002
+ digest: cachedData.digest
2003
+ };
2004
+ const parameter = parameters[idx];
2005
+ if (typeof parameter !== "object" || !("MutableReference" in parameter || "Reference" in parameter))
2006
+ return arg;
2007
+ return {
2008
+ objectId: cachedData.objectId,
2009
+ initialSharedVersion: owner.Shared.initial_shared_version,
2010
+ mutable: "MutableReference" in parameter
2011
+ };
2012
+ })
2013
+ );
2014
+ txBlock.moveCall(queryTarget, resolvedArgs, typeArgs);
1752
2015
  const query = await this.queryClient.fetchQuery({
2016
+ retry: this.retryFn,
2017
+ retryDelay: 1e3,
1753
2018
  queryKey: queryKeys.rpc.getInspectTxn(queryTarget, args, typeArgs),
1754
2019
  queryFn: async () => {
1755
2020
  return await callWithRateLimit(
1756
2021
  this.tokenBucket,
1757
- () => this.suiKit.inspectTxn(txBlock)
2022
+ async () => await this.suiKit.inspectTxn(txBlock)
1758
2023
  );
1759
2024
  }
1760
2025
  });
1761
2026
  return query;
1762
2027
  }
2028
+ async queryGetNormalizedMoveFunction(target) {
2029
+ const { address, module: module2, name } = (0, import_sui_kit.parseStructTag)(target);
2030
+ return this.queryClient.fetchQuery({
2031
+ queryKey: queryKeys.rpc.getNormalizedMoveFunction(target),
2032
+ queryFn: async () => {
2033
+ return await callWithRateLimit(
2034
+ this.tokenBucket,
2035
+ async () => await this.suiKit.client().getNormalizedMoveFunction({
2036
+ package: address,
2037
+ module: module2,
2038
+ function: name
2039
+ })
2040
+ );
2041
+ }
2042
+ });
2043
+ }
1763
2044
  /**
1764
2045
  * @description Provides cache for getObject of the SuiKit.
1765
2046
  * @param objectId
@@ -1767,12 +2048,19 @@ var ScallopCache = class {
1767
2048
  * @returns Promise<SuiObjectResponse>
1768
2049
  */
1769
2050
  async queryGetObject(objectId, options) {
2051
+ options = {
2052
+ ...options,
2053
+ showOwner: true,
2054
+ showContent: true
2055
+ };
1770
2056
  return this.queryClient.fetchQuery({
1771
- queryKey: queryKeys.rpc.getObject(objectId, this.walletAddress, options),
2057
+ retry: this.retryFn,
2058
+ retryDelay: 1e3,
2059
+ queryKey: queryKeys.rpc.getObject(objectId, options),
1772
2060
  queryFn: async () => {
1773
2061
  return await callWithRateLimit(
1774
2062
  this.tokenBucket,
1775
- () => this.client.getObject({
2063
+ async () => await this.client.getObject({
1776
2064
  id: objectId,
1777
2065
  options
1778
2066
  })
@@ -1791,16 +2079,36 @@ var ScallopCache = class {
1791
2079
  if (objectIds.length === 0)
1792
2080
  return [];
1793
2081
  return this.queryClient.fetchQuery({
2082
+ retry: this.retryFn,
2083
+ retryDelay: 1e3,
1794
2084
  queryKey: queryKeys.rpc.getObjects(
1795
2085
  objectIds,
1796
2086
  this.walletAddress,
1797
2087
  options
1798
2088
  ),
1799
2089
  queryFn: async () => {
1800
- return await callWithRateLimit(
2090
+ const results = await callWithRateLimit(
1801
2091
  this.tokenBucket,
1802
- () => this.suiKit.getObjects(objectIds, options)
2092
+ async () => await this.suiKit.getObjects(objectIds, options)
1803
2093
  );
2094
+ if (results) {
2095
+ results.forEach((result) => {
2096
+ this.queryClient.setQueriesData(
2097
+ {
2098
+ exact: false,
2099
+ queryKey: queryKeys.rpc.getObject(result.objectId, options)
2100
+ },
2101
+ {
2102
+ data: result,
2103
+ error: null
2104
+ },
2105
+ {
2106
+ updatedAt: Date.now()
2107
+ }
2108
+ );
2109
+ });
2110
+ }
2111
+ return results;
1804
2112
  }
1805
2113
  });
1806
2114
  }
@@ -1811,44 +2119,94 @@ var ScallopCache = class {
1811
2119
  */
1812
2120
  async queryGetOwnedObjects(input) {
1813
2121
  return this.queryClient.fetchQuery({
2122
+ retry: this.retryFn,
2123
+ retryDelay: 1e3,
1814
2124
  queryKey: queryKeys.rpc.getOwnedObjects(input),
1815
2125
  queryFn: async () => {
1816
- return await callWithRateLimit(
2126
+ const results = await callWithRateLimit(
1817
2127
  this.tokenBucket,
1818
- () => this.client.getOwnedObjects(input)
2128
+ async () => await this.client.getOwnedObjects(input)
1819
2129
  );
2130
+ if (results && results.data.length > 0) {
2131
+ results.data.filter(
2132
+ (result) => !!result.data
2133
+ ).forEach((result) => {
2134
+ this.queryClient.setQueriesData(
2135
+ {
2136
+ exact: false,
2137
+ queryKey: queryKeys.rpc.getObject(
2138
+ result.data.objectId,
2139
+ input.options ?? {}
2140
+ )
2141
+ },
2142
+ {
2143
+ data: result.data,
2144
+ error: null
2145
+ },
2146
+ {
2147
+ updatedAt: Date.now()
2148
+ }
2149
+ );
2150
+ });
2151
+ }
2152
+ return results;
1820
2153
  }
1821
2154
  });
1822
2155
  }
1823
2156
  async queryGetDynamicFields(input) {
1824
2157
  return this.queryClient.fetchQuery({
2158
+ retry: this.retryFn,
2159
+ retryDelay: 1e3,
1825
2160
  queryKey: queryKeys.rpc.getDynamicFields(input),
1826
2161
  queryFn: async () => {
1827
2162
  return await callWithRateLimit(
1828
2163
  this.tokenBucket,
1829
- () => this.client.getDynamicFields(input)
2164
+ async () => await this.client.getDynamicFields(input)
1830
2165
  );
1831
2166
  }
1832
2167
  });
1833
2168
  }
1834
2169
  async queryGetDynamicFieldObject(input) {
1835
2170
  return this.queryClient.fetchQuery({
2171
+ retry: this.retryFn,
2172
+ retryDelay: (attemptIndex) => Math.min(1e3 * attemptIndex, 8e3),
1836
2173
  queryKey: queryKeys.rpc.getDynamicFieldObject(input),
1837
2174
  queryFn: async () => {
1838
- return await callWithRateLimit(
2175
+ const result = await callWithRateLimit(
1839
2176
  this.tokenBucket,
1840
2177
  () => this.client.getDynamicFieldObject(input)
1841
2178
  );
2179
+ if (result?.data) {
2180
+ this.queryClient.setQueriesData(
2181
+ {
2182
+ exact: false,
2183
+ queryKey: queryKeys.rpc.getObject(result?.data.objectId, {
2184
+ showContent: true,
2185
+ showOwner: true
2186
+ })
2187
+ },
2188
+ {
2189
+ data: result.data,
2190
+ error: null
2191
+ },
2192
+ {
2193
+ updatedAt: Date.now()
2194
+ }
2195
+ );
2196
+ }
2197
+ return result;
1842
2198
  }
1843
2199
  });
1844
2200
  }
1845
2201
  async queryGetAllCoinBalances(owner) {
1846
2202
  return this.queryClient.fetchQuery({
2203
+ retry: this.retryFn,
2204
+ retryDelay: 1e3,
1847
2205
  queryKey: queryKeys.rpc.getAllCoinBalances(owner),
1848
2206
  queryFn: async () => {
1849
2207
  const allBalances = await callWithRateLimit(
1850
2208
  this.tokenBucket,
1851
- () => this.client.getAllBalances({ owner })
2209
+ async () => await this.client.getAllBalances({ owner })
1852
2210
  );
1853
2211
  if (!allBalances)
1854
2212
  return {};
@@ -2536,10 +2894,10 @@ var ScallopAddress = class {
2536
2894
  };
2537
2895
 
2538
2896
  // src/models/scallopClient.ts
2539
- var import_utils25 = require("@mysten/sui/utils");
2897
+ var import_utils26 = require("@mysten/sui/utils");
2540
2898
 
2541
2899
  // src/models/scallopUtils.ts
2542
- var import_utils10 = require("@mysten/sui/utils");
2900
+ var import_utils11 = require("@mysten/sui/utils");
2543
2901
  var import_pyth_sui_js = require("@pythnetwork/pyth-sui-js");
2544
2902
 
2545
2903
  // src/queries/borrowIncentiveQuery.ts
@@ -2561,7 +2919,7 @@ var getBorrowIncentivePools = async (query, borrowIncentiveCoinNames = [
2561
2919
  ...SUPPORT_BORROW_INCENTIVE_POOLS
2562
2920
  ], indexer = false, marketPools, coinPrices) => {
2563
2921
  const borrowIncentivePools = {};
2564
- marketPools = marketPools ?? await query.getMarketPools(void 0, { coinPrices, indexer });
2922
+ marketPools = marketPools ?? (await query.getMarketPools(void 0, { coinPrices, indexer })).pools;
2565
2923
  coinPrices = coinPrices ?? await query.getAllCoinPrices({ marketPools });
2566
2924
  if (indexer) {
2567
2925
  const borrowIncentivePoolsIndexer = await query.indexer.getBorrowIncentivePools();
@@ -2586,7 +2944,10 @@ var getBorrowIncentivePools = async (query, borrowIncentiveCoinNames = [
2586
2944
  );
2587
2945
  for (const pool of borrowIncentivePoolsQueryData?.incentive_pools ?? []) {
2588
2946
  const borrowIncentivePoolPoints = {};
2589
- const parsedBorrowIncentivePoolData = parseOriginBorrowIncentivePoolData(pool);
2947
+ const parsedBorrowIncentivePoolData = parseOriginBorrowIncentivePoolData(
2948
+ query.utils,
2949
+ pool
2950
+ );
2590
2951
  const poolCoinType = (0, import_utils3.normalizeStructTag)(pool.pool_type.name);
2591
2952
  const poolCoinName = query.utils.parseCoinNameFromType(
2592
2953
  poolCoinType
@@ -2600,12 +2961,9 @@ var getBorrowIncentivePools = async (query, borrowIncentiveCoinNames = [
2600
2961
  parsedBorrowIncentivePoolData.poolPoints
2601
2962
  )) {
2602
2963
  const rewardCoinType = poolPoint.pointType;
2603
- let rewardCoinName = query.utils.parseCoinNameFromType(
2964
+ const rewardCoinName = query.utils.parseCoinNameFromType(
2604
2965
  rewardCoinType
2605
2966
  );
2606
- if (sCoinRawNameToName[rewardCoinName]) {
2607
- rewardCoinName = sCoinRawNameToName[rewardCoinName];
2608
- }
2609
2967
  const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
2610
2968
  const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
2611
2969
  const symbol = query.utils.parseSymbol(rewardCoinName);
@@ -2734,7 +3092,7 @@ var getBindedVeScaKey = async ({
2734
3092
  };
2735
3093
 
2736
3094
  // src/queries/coreQuery.ts
2737
- var import_utils5 = require("@mysten/sui/utils");
3095
+ var import_utils6 = require("@mysten/sui/utils");
2738
3096
  var import_bignumber3 = __toESM(require("bignumber.js"));
2739
3097
 
2740
3098
  // src/queries/supplyLimitQuery.ts
@@ -2794,9 +3152,14 @@ var isolatedAssetZod = import_zod2.z.object({
2794
3152
  })
2795
3153
  });
2796
3154
  var isolatedAssetKeyType = `0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey`;
2797
- var getIsolatedAssets = async (address) => {
3155
+ var getIsolatedAssets = async (query) => {
3156
+ if (SUPPORT_POOLS.every((t) => !!POOL_ADDRESSES[t])) {
3157
+ return SUPPORT_POOLS.filter(
3158
+ (t) => !!POOL_ADDRESSES[t]?.isolatedAssetKey && !!POOL_ADDRESSES[t]?.coinType
3159
+ ).map((t) => POOL_ADDRESSES[t]?.coinType);
3160
+ }
2798
3161
  try {
2799
- const marketObject = address.get("core.market");
3162
+ const marketObject = query.address.get("core.market");
2800
3163
  const isolatedAssets = [];
2801
3164
  if (!marketObject)
2802
3165
  return isolatedAssets;
@@ -2806,7 +3169,7 @@ var getIsolatedAssets = async (address) => {
2806
3169
  return dynamicField.name.type === isolatedAssetKeyType;
2807
3170
  };
2808
3171
  do {
2809
- const response = await address.cache.queryGetDynamicFields({
3172
+ const response = await query.cache.queryGetDynamicFields({
2810
3173
  parentId: marketObject,
2811
3174
  cursor: nextCursor,
2812
3175
  limit: 10
@@ -2829,32 +3192,30 @@ var getIsolatedAssets = async (address) => {
2829
3192
  }
2830
3193
  };
2831
3194
  var isIsolatedAsset = async (utils, coinName) => {
2832
- try {
2833
- const marketObject = utils.address.get("core.market");
2834
- const cachedData = utils.address.cache.queryClient.getQueryData([
2835
- "getDynamicFields",
2836
- marketObject
2837
- ]);
2838
- if (cachedData) {
2839
- const coinType2 = utils.parseCoinType(coinName);
2840
- return cachedData.includes(coinType2);
3195
+ if (POOL_ADDRESSES[coinName]) {
3196
+ return !!POOL_ADDRESSES[coinName].isolatedAssetKey;
3197
+ }
3198
+ const marketObject = utils.address.get("core.market");
3199
+ const cachedData = utils.address.cache.queryClient.getQueryData([
3200
+ "getDynamicFields",
3201
+ marketObject
3202
+ ]);
3203
+ if (cachedData) {
3204
+ const coinType2 = utils.parseCoinType(coinName);
3205
+ return cachedData.includes(coinType2);
3206
+ }
3207
+ const coinType = utils.parseCoinType(coinName).slice(2);
3208
+ const object = await utils.cache.queryGetDynamicFieldObject({
3209
+ parentId: marketObject,
3210
+ name: {
3211
+ type: isolatedAssetKeyType,
3212
+ value: coinType
2841
3213
  }
2842
- const coinType = utils.parseCoinType(coinName).slice(2);
2843
- const object = await utils.cache.queryGetDynamicFieldObject({
2844
- parentId: marketObject,
2845
- name: {
2846
- type: isolatedAssetKeyType,
2847
- value: coinType
2848
- }
2849
- });
2850
- const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
2851
- if (!parsedData.success)
2852
- return false;
2853
- return parsedData.data.fields.value;
2854
- } catch (e) {
2855
- console.error(e);
3214
+ });
3215
+ const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
3216
+ if (!parsedData.success)
2856
3217
  return false;
2857
- }
3218
+ return parsedData.data.fields.value;
2858
3219
  };
2859
3220
 
2860
3221
  // src/queries/borrowLimitQuery.ts
@@ -2897,6 +3258,17 @@ var getBorrowLimit = async (utils, poolName) => {
2897
3258
  }
2898
3259
  };
2899
3260
 
3261
+ // src/queries/objectsQuery.ts
3262
+ var queryMultipleObjects = async (cache, objectIds, options, partitionSize = 50) => {
3263
+ const objectIdsPartition = partitionArray(objectIds, partitionSize);
3264
+ const objects = [];
3265
+ for (const objectIds2 of objectIdsPartition) {
3266
+ const result = await cache.queryGetObjects(objectIds2, options);
3267
+ objects.push(...result);
3268
+ }
3269
+ return objects;
3270
+ };
3271
+
2900
3272
  // src/queries/coreQuery.ts
2901
3273
  var queryMarket = async (query, indexer = false, coinPrices) => {
2902
3274
  coinPrices = coinPrices ?? await query.utils.getCoinPrices() ?? {};
@@ -2928,7 +3300,7 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2928
3300
  const queryResult = await query.cache.queryInspectTxn({ queryTarget, args });
2929
3301
  const marketData = queryResult?.events[0]?.parsedJson;
2930
3302
  for (const pool of marketData?.pools ?? []) {
2931
- const coinType = (0, import_utils5.normalizeStructTag)(pool.type.name);
3303
+ const coinType = (0, import_utils6.normalizeStructTag)(pool.type.name);
2932
3304
  const poolCoinName = query.utils.parseCoinNameFromType(coinType);
2933
3305
  const coinPrice = coinPrices[poolCoinName] ?? 0;
2934
3306
  if (!SUPPORT_POOLS.includes(poolCoinName)) {
@@ -2953,19 +3325,15 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2953
3325
  borrowRateOnMidKink: pool.borrowRateOnMidKink,
2954
3326
  highKink: pool.highKink,
2955
3327
  midKink: pool.midKink,
2956
- minBorrowAmount: pool.minBorrowAmount
3328
+ minBorrowAmount: pool.minBorrowAmount,
3329
+ isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
3330
+ supplyLimit: await getSupplyLimit(query.utils, poolCoinName) ?? "0",
3331
+ borrowLimit: await getBorrowLimit(query.utils, poolCoinName) ?? "0"
2957
3332
  });
2958
3333
  const calculatedMarketPoolData = calculateMarketPoolData(
2959
3334
  query.utils,
2960
3335
  parsedMarketPoolData
2961
3336
  );
2962
- const coinDecimal = query.utils.getCoinDecimal(poolCoinName);
2963
- const maxSupplyCoin = (0, import_bignumber3.default)(
2964
- await getSupplyLimit(query.utils, poolCoinName) ?? "0"
2965
- ).shiftedBy(-coinDecimal).toNumber();
2966
- const maxBorrowCoin = (0, import_bignumber3.default)(
2967
- await getBorrowLimit(query.utils, poolCoinName) ?? "0"
2968
- ).shiftedBy(-coinDecimal).toNumber();
2969
3337
  pools[poolCoinName] = {
2970
3338
  coinName: poolCoinName,
2971
3339
  symbol: query.utils.parseSymbol(poolCoinName),
@@ -2975,7 +3343,6 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2975
3343
  query.utils.parseMarketCoinName(poolCoinName)
2976
3344
  ),
2977
3345
  coinWrappedType: query.utils.getCoinWrappedType(poolCoinName),
2978
- coinDecimal,
2979
3346
  coinPrice,
2980
3347
  highKink: parsedMarketPoolData.highKink,
2981
3348
  midKink: parsedMarketPoolData.midKink,
@@ -2984,15 +3351,11 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
2984
3351
  borrowFee: parsedMarketPoolData.borrowFee,
2985
3352
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2986
3353
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2987
- isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2988
- // isIsolated: false,
2989
- maxSupplyCoin,
2990
- maxBorrowCoin,
2991
3354
  ...calculatedMarketPoolData
2992
3355
  };
2993
3356
  }
2994
3357
  for (const collateral of marketData?.collaterals ?? []) {
2995
- const coinType = (0, import_utils5.normalizeStructTag)(collateral.type.name);
3358
+ const coinType = (0, import_utils6.normalizeStructTag)(collateral.type.name);
2996
3359
  const collateralCoinName = query.utils.parseCoinNameFromType(coinType);
2997
3360
  const coinPrice = coinPrices[collateralCoinName] ?? 0;
2998
3361
  if (!SUPPORT_COLLATERALS.includes(collateralCoinName)) {
@@ -3003,10 +3366,11 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
3003
3366
  collateralFactor: collateral.collateralFactor,
3004
3367
  liquidationFactor: collateral.liquidationFactor,
3005
3368
  liquidationDiscount: collateral.liquidationDiscount,
3006
- liquidationPanelty: collateral.liquidationPanelty,
3369
+ liquidationPenalty: collateral.liquidationPanelty,
3007
3370
  liquidationReserveFactor: collateral.liquidationReserveFactor,
3008
3371
  maxCollateralAmount: collateral.maxCollateralAmount,
3009
- totalCollateralAmount: collateral.totalCollateralAmount
3372
+ totalCollateralAmount: collateral.totalCollateralAmount,
3373
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName)
3010
3374
  });
3011
3375
  const calculatedMarketCollateralData = calculateMarketCollateralData(
3012
3376
  query.utils,
@@ -3018,14 +3382,12 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
3018
3382
  coinType,
3019
3383
  marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
3020
3384
  coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
3021
- coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
3022
3385
  coinPrice,
3023
3386
  collateralFactor: parsedMarketCollateralData.collateralFactor,
3024
3387
  liquidationFactor: parsedMarketCollateralData.liquidationFactor,
3025
3388
  liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
3026
- liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
3389
+ liquidationPenalty: parsedMarketCollateralData.liquidationPenalty,
3027
3390
  liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
3028
- isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
3029
3391
  ...calculatedMarketCollateralData
3030
3392
  };
3031
3393
  }
@@ -3035,44 +3397,216 @@ var queryMarket = async (query, indexer = false, coinPrices) => {
3035
3397
  // data: marketData,
3036
3398
  };
3037
3399
  };
3038
- var getMarketPools = async (query, poolCoinNames = [...SUPPORT_POOLS], indexer = false, coinPrices) => {
3039
- const marketId = query.address.get("core.market");
3040
- const marketObjectResponse = await query.cache.queryGetObject(marketId, {
3041
- showContent: true
3042
- });
3400
+ var queryRequiredMarketObjects = async (query, poolCoinNames) => {
3401
+ const tasks = poolCoinNames.map((t) => ({
3402
+ poolCoinName: t,
3403
+ balanceSheet: POOL_ADDRESSES[t]?.lendingPoolAddress,
3404
+ collateralStat: POOL_ADDRESSES[t]?.collateralPoolAddress,
3405
+ borrowDynamic: POOL_ADDRESSES[t]?.borrowDynamic,
3406
+ interestModel: POOL_ADDRESSES[t]?.interestModel,
3407
+ riskModel: POOL_ADDRESSES[t]?.riskModel,
3408
+ borrowFeeKey: POOL_ADDRESSES[t]?.borrowFeeKey,
3409
+ supplyLimitKey: POOL_ADDRESSES[t]?.supplyLimitKey,
3410
+ borrowLimitKey: POOL_ADDRESSES[t]?.borrowLimitKey,
3411
+ isolatedAssetKey: POOL_ADDRESSES[t]?.isolatedAssetKey
3412
+ }));
3413
+ const [
3414
+ balanceSheetObjects,
3415
+ collateralStatObjects,
3416
+ borrowDynamicObjects,
3417
+ interestModelObjects,
3418
+ riskModelObjects,
3419
+ borrowFeeObjects,
3420
+ supplyLimitObjects,
3421
+ borrowLimitObjects,
3422
+ isolatedAssetObjects
3423
+ ] = await Promise.all([
3424
+ queryMultipleObjects(
3425
+ query.cache,
3426
+ tasks.map((task) => task.balanceSheet).filter((t) => !!t)
3427
+ ),
3428
+ queryMultipleObjects(
3429
+ query.cache,
3430
+ tasks.map((task) => task.collateralStat).filter((t) => !!t)
3431
+ ),
3432
+ queryMultipleObjects(
3433
+ query.cache,
3434
+ tasks.map((task) => task.borrowDynamic).filter((t) => !!t)
3435
+ ),
3436
+ queryMultipleObjects(
3437
+ query.cache,
3438
+ tasks.map((task) => task.interestModel).filter((t) => !!t)
3439
+ ),
3440
+ queryMultipleObjects(
3441
+ query.cache,
3442
+ tasks.map((task) => task.riskModel).filter((t) => !!t)
3443
+ ),
3444
+ queryMultipleObjects(
3445
+ query.cache,
3446
+ tasks.map((task) => task.borrowFeeKey).filter((t) => !!t)
3447
+ ),
3448
+ queryMultipleObjects(
3449
+ query.cache,
3450
+ tasks.map((task) => task.supplyLimitKey).filter((t) => !!t)
3451
+ ),
3452
+ queryMultipleObjects(
3453
+ query.cache,
3454
+ tasks.map((task) => task.borrowLimitKey).filter((t) => !!t)
3455
+ ),
3456
+ queryMultipleObjects(
3457
+ query.cache,
3458
+ tasks.map((task) => task.isolatedAssetKey).filter((t) => !!t)
3459
+ )
3460
+ ]);
3461
+ const mapObjects = (tasks2, fetchedObjects) => {
3462
+ const resultMap = {};
3463
+ let fetchedIndex = 0;
3464
+ for (const task of tasks2) {
3465
+ const key = task[Object.keys(task)[1]];
3466
+ if (key) {
3467
+ resultMap[task.poolCoinName] = fetchedObjects[fetchedIndex];
3468
+ fetchedIndex++;
3469
+ }
3470
+ }
3471
+ return resultMap;
3472
+ };
3473
+ const balanceSheetMap = mapObjects(tasks, balanceSheetObjects);
3474
+ const collateralStatMap = mapObjects(tasks, collateralStatObjects);
3475
+ const borrowDynamicMap = mapObjects(tasks, borrowDynamicObjects);
3476
+ const interestModelMap = mapObjects(tasks, interestModelObjects);
3477
+ const riskModelMap = mapObjects(tasks, riskModelObjects);
3478
+ const borrowFeeMap = mapObjects(tasks, borrowFeeObjects);
3479
+ const supplyLimitMap = mapObjects(tasks, supplyLimitObjects);
3480
+ const borrowLimitMap = mapObjects(tasks, borrowLimitObjects);
3481
+ const isolatedAssetMap = mapObjects(tasks, isolatedAssetObjects);
3482
+ return poolCoinNames.reduce(
3483
+ (acc, name) => {
3484
+ acc[name] = {
3485
+ balanceSheet: balanceSheetMap[name],
3486
+ collateralStat: collateralStatMap[name],
3487
+ borrowDynamic: borrowDynamicMap[name],
3488
+ interestModel: interestModelMap[name],
3489
+ riskModel: riskModelMap[name],
3490
+ borrowFeeKey: borrowFeeMap[name],
3491
+ supplyLimitKey: supplyLimitMap[name],
3492
+ borrowLimitKey: borrowLimitMap[name],
3493
+ isolatedAssetKey: isolatedAssetMap[name]
3494
+ };
3495
+ return acc;
3496
+ },
3497
+ {}
3498
+ );
3499
+ };
3500
+ var getMarketPools = async (query, poolCoinNames, indexer = false, coinPrices) => {
3043
3501
  coinPrices = coinPrices ?? await query.utils.getCoinPrices();
3044
- const marketPools = {};
3502
+ const pools = {};
3503
+ const collaterals = {};
3045
3504
  if (indexer) {
3046
- const marketPoolsIndexer = await query.indexer.getMarketPools();
3047
- const updateMarketPool = (marketPool) => {
3048
- if (!poolCoinNames.includes(marketPool.coinName))
3049
- return;
3050
- marketPool.coinPrice = coinPrices[marketPool.coinName] ?? marketPool.coinPrice;
3051
- marketPool.coinWrappedType = query.utils.getCoinWrappedType(
3052
- marketPool.coinName
3053
- );
3054
- marketPools[marketPool.coinName] = marketPool;
3505
+ const marketIndexer = await query.indexer.getMarket();
3506
+ const updatePools = (item) => {
3507
+ item.coinPrice = coinPrices[item.coinName] ?? item.coinPrice;
3508
+ item.coinWrappedType = query.utils.getCoinWrappedType(item.coinName);
3509
+ pools[item.coinName] = item;
3510
+ };
3511
+ const updateCollaterals = (item) => {
3512
+ item.coinPrice = coinPrices[item.coinName] ?? item.coinPrice;
3513
+ item.coinWrappedType = query.utils.getCoinWrappedType(item.coinName);
3514
+ collaterals[item.coinName] = item;
3515
+ };
3516
+ Object.values(marketIndexer.pools).forEach(updatePools);
3517
+ Object.values(marketIndexer.collaterals).forEach(updateCollaterals);
3518
+ return {
3519
+ pools,
3520
+ collaterals
3055
3521
  };
3056
- Object.values(marketPoolsIndexer).forEach(updateMarketPool);
3057
- return marketPools;
3058
3522
  }
3523
+ const requiredObjects = await queryRequiredMarketObjects(
3524
+ query,
3525
+ poolCoinNames
3526
+ );
3059
3527
  await Promise.allSettled(
3060
3528
  poolCoinNames.map(async (poolCoinName) => {
3061
- const marketPool = await getMarketPool(
3062
- query,
3063
- poolCoinName,
3064
- indexer,
3065
- marketObjectResponse?.data,
3066
- coinPrices?.[poolCoinName]
3067
- );
3068
- if (marketPool) {
3069
- marketPools[poolCoinName] = marketPool;
3529
+ try {
3530
+ const result = await getMarketPool(
3531
+ query,
3532
+ poolCoinName,
3533
+ indexer,
3534
+ coinPrices?.[poolCoinName] ?? 0,
3535
+ requiredObjects[poolCoinName]
3536
+ );
3537
+ if (result?.marketPool) {
3538
+ pools[poolCoinName] = result?.marketPool;
3539
+ }
3540
+ if (result?.collateral) {
3541
+ collaterals[poolCoinName] = result.collateral;
3542
+ }
3543
+ } catch (e) {
3544
+ console.error(e);
3070
3545
  }
3071
3546
  })
3072
3547
  );
3073
- return marketPools;
3548
+ return {
3549
+ pools,
3550
+ collaterals
3551
+ };
3074
3552
  };
3075
- var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, coinPrice) => {
3553
+ var parseMarketPoolObjects = ({
3554
+ balanceSheet,
3555
+ borrowDynamic,
3556
+ collateralStat,
3557
+ interestModel,
3558
+ riskModel,
3559
+ borrowFeeKey,
3560
+ supplyLimitKey,
3561
+ borrowLimitKey,
3562
+ isolatedAssetKey
3563
+ }) => {
3564
+ const _balanceSheet = parseObjectAs(balanceSheet);
3565
+ const _interestModel = parseObjectAs(interestModel);
3566
+ const _borrowDynamic = parseObjectAs(borrowDynamic);
3567
+ const _borrowFee = parseObjectAs(borrowFeeKey);
3568
+ const _supplyLimit = supplyLimitKey ? parseObjectAs(supplyLimitKey) : "0";
3569
+ const _borrowLimit = borrowLimitKey ? parseObjectAs(borrowLimitKey) : "0";
3570
+ const _riskModel = riskModel ? parseObjectAs(riskModel) : void 0;
3571
+ const _collateralStat = collateralStat ? parseObjectAs(collateralStat) : void 0;
3572
+ const parsedOriginMarketCollateral = _riskModel && _collateralStat ? {
3573
+ type: _interestModel.type.fields,
3574
+ isIsolated: !!isolatedAssetKey,
3575
+ collateralFactor: _riskModel.collateral_factor.fields,
3576
+ liquidationFactor: _riskModel.liquidation_factor.fields,
3577
+ liquidationPenalty: _riskModel.liquidation_penalty.fields,
3578
+ liquidationDiscount: _riskModel.liquidation_discount.fields,
3579
+ liquidationReserveFactor: _riskModel.liquidation_revenue_factor.fields,
3580
+ maxCollateralAmount: _riskModel.max_collateral_amount,
3581
+ totalCollateralAmount: _collateralStat.amount
3582
+ } : void 0;
3583
+ return {
3584
+ type: _interestModel.type.fields,
3585
+ maxBorrowRate: _interestModel.max_borrow_rate.fields,
3586
+ interestRate: _borrowDynamic.interest_rate.fields,
3587
+ interestRateScale: _borrowDynamic.interest_rate_scale,
3588
+ borrowIndex: _borrowDynamic.borrow_index,
3589
+ lastUpdated: _borrowDynamic.last_updated,
3590
+ cash: _balanceSheet.cash,
3591
+ debt: _balanceSheet.debt,
3592
+ marketCoinSupply: _balanceSheet.market_coin_supply,
3593
+ reserve: _balanceSheet.revenue,
3594
+ reserveFactor: _interestModel.revenue_factor.fields,
3595
+ borrowWeight: _interestModel.borrow_weight.fields,
3596
+ borrowFeeRate: _borrowFee,
3597
+ baseBorrowRatePerSec: _interestModel.base_borrow_rate_per_sec.fields,
3598
+ borrowRateOnHighKink: _interestModel.borrow_rate_on_high_kink.fields,
3599
+ borrowRateOnMidKink: _interestModel.borrow_rate_on_mid_kink.fields,
3600
+ highKink: _interestModel.high_kink.fields,
3601
+ midKink: _interestModel.mid_kink.fields,
3602
+ minBorrowAmount: _interestModel.min_borrow_amount,
3603
+ isIsolated: !!isolatedAssetKey,
3604
+ supplyLimit: _supplyLimit,
3605
+ borrowLimit: _borrowLimit,
3606
+ parsedOriginMarketCollateral
3607
+ };
3608
+ };
3609
+ var getMarketPool = async (query, poolCoinName, indexer = false, coinPrice, requiredObjects) => {
3076
3610
  coinPrice = coinPrice ?? (await query.utils.getCoinPrices())?.[poolCoinName];
3077
3611
  if (indexer) {
3078
3612
  const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
@@ -3083,135 +3617,70 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
3083
3617
  marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
3084
3618
  marketPoolIndexer.coinName
3085
3619
  );
3086
- return marketPoolIndexer;
3087
- }
3088
- const marketId = query.address.get("core.market");
3089
- marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
3090
- showContent: true
3091
- }))?.data;
3092
- if (!(marketObject && marketObject.content?.dataType === "moveObject"))
3093
- throw new Error(`Failed to fetch marketObject`);
3094
- const fields = marketObject.content.fields;
3095
- const coinType = query.utils.parseCoinType(poolCoinName);
3096
- const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
3097
- const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3098
- parentId: balanceSheetParentId,
3099
- name: {
3100
- type: "0x1::type_name::TypeName",
3101
- value: {
3102
- name: coinType.substring(2)
3103
- }
3104
- }
3105
- });
3106
- const balanceSheetDynamicFieldObject = balanceSheetDynamicFieldObjectResponse?.data;
3107
- if (!(balanceSheetDynamicFieldObject && balanceSheetDynamicFieldObject.content && "fields" in balanceSheetDynamicFieldObject.content))
3108
- throw new Error(
3109
- `Failed to fetch balanceSheetDynamicFieldObject for ${poolCoinName}: ${balanceSheetDynamicFieldObjectResponse?.error?.code.toString()}`
3110
- );
3111
- const balanceSheet = balanceSheetDynamicFieldObject.content.fields.value.fields;
3112
- const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
3113
- const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3114
- parentId: borrowIndexParentId,
3115
- name: {
3116
- type: "0x1::type_name::TypeName",
3117
- value: {
3118
- name: coinType.substring(2)
3119
- }
3120
- }
3121
- });
3122
- const borrowIndexDynamicFieldObject = borrowIndexDynamicFieldObjectResponse?.data;
3123
- if (!(borrowIndexDynamicFieldObject && borrowIndexDynamicFieldObject.content && "fields" in borrowIndexDynamicFieldObject.content))
3124
- throw new Error(
3125
- `Failed to fetch borrowIndexDynamicFieldObject for ${poolCoinName}`
3126
- );
3127
- const borrowIndex = borrowIndexDynamicFieldObject.content.fields.value.fields;
3128
- const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
3129
- const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3130
- parentId: interestModelParentId,
3131
- name: {
3132
- type: "0x1::type_name::TypeName",
3133
- value: {
3134
- name: coinType.substring(2)
3135
- }
3620
+ let marketCollateralIndexer = void 0;
3621
+ if (SUPPORT_COLLATERALS.includes(poolCoinName)) {
3622
+ marketCollateralIndexer = await query.indexer.getMarketCollateral(
3623
+ poolCoinName
3624
+ );
3625
+ marketCollateralIndexer.coinPrice = coinPrice ?? marketCollateralIndexer.coinPrice;
3626
+ marketCollateralIndexer.coinWrappedType = query.utils.getCoinWrappedType(
3627
+ marketCollateralIndexer.coinName
3628
+ );
3136
3629
  }
3137
- });
3138
- const interestModelDynamicFieldObject = interestModelDynamicFieldObjectResponse?.data;
3139
- if (!(interestModelDynamicFieldObject && interestModelDynamicFieldObject.content && "fields" in interestModelDynamicFieldObject.content))
3140
- throw new Error(
3141
- `Failed to fetch interestModelDynamicFieldObject for ${poolCoinName}: ${interestModelDynamicFieldObject}`
3142
- );
3143
- const interestModel = interestModelDynamicFieldObject.content.fields.value.fields;
3144
- const getBorrowFee = async () => {
3145
- const borrowFeeDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
3146
- parentId: marketId,
3147
- name: {
3148
- type: `${BORROW_FEE_PROTOCOL_ID}::market_dynamic_keys::BorrowFeeKey`,
3149
- value: {
3150
- type: {
3151
- name: coinType.substring(2)
3152
- }
3153
- }
3154
- }
3155
- });
3156
- const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse?.data;
3157
- if (!(borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content))
3158
- return { value: "0" };
3159
- return borrowFeeDynamicFieldObject.content.fields.value.fields;
3160
- };
3161
- const parsedMarketPoolData = parseOriginMarketPoolData({
3162
- type: interestModel.type.fields,
3163
- maxBorrowRate: interestModel.max_borrow_rate.fields,
3164
- interestRate: borrowIndex.interest_rate.fields,
3165
- interestRateScale: borrowIndex.interest_rate_scale,
3166
- borrowIndex: borrowIndex.borrow_index,
3167
- lastUpdated: borrowIndex.last_updated,
3168
- cash: balanceSheet.cash,
3169
- debt: balanceSheet.debt,
3170
- marketCoinSupply: balanceSheet.market_coin_supply,
3171
- reserve: balanceSheet.revenue,
3172
- reserveFactor: interestModel.revenue_factor.fields,
3173
- borrowWeight: interestModel.borrow_weight.fields,
3174
- borrowFeeRate: await getBorrowFee(),
3175
- baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
3176
- borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
3177
- borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
3178
- highKink: interestModel.high_kink.fields,
3179
- midKink: interestModel.mid_kink.fields,
3180
- minBorrowAmount: interestModel.min_borrow_amount
3181
- });
3630
+ return {
3631
+ marketPool: marketPoolIndexer,
3632
+ collateral: marketCollateralIndexer
3633
+ };
3634
+ }
3635
+ requiredObjects ?? (requiredObjects = (await queryRequiredMarketObjects(query, [poolCoinName]))[poolCoinName]);
3636
+ const parsedMarketPoolObjects = parseMarketPoolObjects(requiredObjects);
3637
+ const parsedMarketPoolData = parseOriginMarketPoolData(
3638
+ parsedMarketPoolObjects
3639
+ );
3182
3640
  const calculatedMarketPoolData = calculateMarketPoolData(
3183
3641
  query.utils,
3184
3642
  parsedMarketPoolData
3185
3643
  );
3186
- const coinDecimal = query.utils.getCoinDecimal(poolCoinName);
3187
- const maxSupplyCoin = (0, import_bignumber3.default)(
3188
- await getSupplyLimit(query.utils, poolCoinName) ?? "0"
3189
- ).shiftedBy(-coinDecimal).toNumber();
3190
- const maxBorrowCoin = (0, import_bignumber3.default)(
3191
- await getBorrowLimit(query.utils, poolCoinName) ?? "0"
3192
- ).shiftedBy(-coinDecimal).toNumber();
3193
- return {
3644
+ const parsedMarketCollateralData = parsedMarketPoolObjects.parsedOriginMarketCollateral ? parseOriginMarketCollateralData(
3645
+ parsedMarketPoolObjects.parsedOriginMarketCollateral
3646
+ ) : void 0;
3647
+ const basePoolData = () => ({
3194
3648
  coinName: poolCoinName,
3195
3649
  symbol: query.utils.parseSymbol(poolCoinName),
3196
- coinType: query.utils.parseCoinType(poolCoinName),
3197
3650
  marketCoinType: query.utils.parseMarketCoinType(poolCoinName),
3198
- sCoinType: query.utils.parseSCoinType(
3199
- query.utils.parseMarketCoinName(poolCoinName)
3200
- ),
3201
- coinWrappedType: query.utils.getCoinWrappedType(poolCoinName),
3202
- coinDecimal,
3203
- coinPrice: coinPrice ?? 0,
3204
- highKink: parsedMarketPoolData.highKink,
3205
- midKink: parsedMarketPoolData.midKink,
3206
- reserveFactor: parsedMarketPoolData.reserveFactor,
3207
- borrowWeight: parsedMarketPoolData.borrowWeight,
3208
- borrowFee: parsedMarketPoolData.borrowFee,
3209
- marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
3210
- minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
3211
- maxSupplyCoin,
3212
- maxBorrowCoin,
3213
- isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
3214
- ...calculatedMarketPoolData
3651
+ coinType: query.utils.parseCoinType(poolCoinName)
3652
+ });
3653
+ return {
3654
+ marketPool: {
3655
+ ...basePoolData(),
3656
+ sCoinType: query.utils.parseSCoinType(
3657
+ query.utils.parseMarketCoinName(poolCoinName)
3658
+ ),
3659
+ coinWrappedType: query.utils.getCoinWrappedType(poolCoinName),
3660
+ coinPrice: coinPrice ?? 0,
3661
+ highKink: parsedMarketPoolData.highKink,
3662
+ midKink: parsedMarketPoolData.midKink,
3663
+ reserveFactor: parsedMarketPoolData.reserveFactor,
3664
+ borrowWeight: parsedMarketPoolData.borrowWeight,
3665
+ borrowFee: parsedMarketPoolData.borrowFee,
3666
+ marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
3667
+ minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
3668
+ ...calculatedMarketPoolData
3669
+ },
3670
+ collateral: parsedMarketCollateralData ? {
3671
+ ...basePoolData(),
3672
+ coinWrappedType: query.utils.getCoinWrappedType(poolCoinName),
3673
+ coinPrice,
3674
+ collateralFactor: parsedMarketCollateralData.collateralFactor,
3675
+ liquidationFactor: parsedMarketCollateralData.liquidationFactor,
3676
+ liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
3677
+ liquidationPenalty: parsedMarketCollateralData.liquidationPenalty,
3678
+ liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
3679
+ ...calculateMarketCollateralData(
3680
+ query.utils,
3681
+ parsedMarketCollateralData
3682
+ )
3683
+ } : void 0
3215
3684
  };
3216
3685
  };
3217
3686
  var getMarketCollaterals = async (query, collateralCoinNames = [...SUPPORT_COLLATERALS], indexer = false) => {
@@ -3306,10 +3775,11 @@ var getMarketCollateral = async (query, collateralCoinName, indexer = false, mar
3306
3775
  collateralFactor: riskModel.collateral_factor.fields,
3307
3776
  liquidationFactor: riskModel.liquidation_factor.fields,
3308
3777
  liquidationDiscount: riskModel.liquidation_discount.fields,
3309
- liquidationPanelty: riskModel.liquidation_penalty.fields,
3778
+ liquidationPenalty: riskModel.liquidation_penalty.fields,
3310
3779
  liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
3311
3780
  maxCollateralAmount: riskModel.max_collateral_amount,
3312
- totalCollateralAmount: collateralStat.amount
3781
+ totalCollateralAmount: collateralStat.amount,
3782
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName)
3313
3783
  });
3314
3784
  const calculatedMarketCollateralData = calculateMarketCollateralData(
3315
3785
  query.utils,
@@ -3321,14 +3791,12 @@ var getMarketCollateral = async (query, collateralCoinName, indexer = false, mar
3321
3791
  coinType: query.utils.parseCoinType(collateralCoinName),
3322
3792
  marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
3323
3793
  coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
3324
- coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
3325
3794
  coinPrice: coinPrice ?? 0,
3326
3795
  collateralFactor: parsedMarketCollateralData.collateralFactor,
3327
3796
  liquidationFactor: parsedMarketCollateralData.liquidationFactor,
3328
3797
  liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
3329
- liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
3798
+ liquidationPenalty: parsedMarketCollateralData.liquidationPenalty,
3330
3799
  liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
3331
- isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
3332
3800
  ...calculatedMarketCollateralData
3333
3801
  };
3334
3802
  };
@@ -3364,14 +3832,26 @@ var getObligations = async ({
3364
3832
  } while (hasNextPage);
3365
3833
  const keyObjects = keyObjectsResponse.filter((ref) => !!ref.data);
3366
3834
  const obligations = [];
3835
+ const obligationsObjects = await queryMultipleObjects(
3836
+ address.cache,
3837
+ keyObjects.map((ref) => ref.data?.content).filter(
3838
+ (content) => content?.dataType === "moveObject"
3839
+ ).map((content) => content.fields.ownership.fields.of),
3840
+ {
3841
+ showContent: true
3842
+ }
3843
+ );
3367
3844
  await Promise.allSettled(
3368
- keyObjects.map(async ({ data }) => {
3845
+ keyObjects.map(async ({ data }, idx) => {
3369
3846
  const keyId = data?.objectId;
3370
3847
  const content = data?.content;
3371
3848
  if (keyId && content && "fields" in content) {
3372
3849
  const fields = content.fields;
3373
3850
  const obligationId = String(fields.ownership.fields.of);
3374
- const locked = await getObligationLocked(address.cache, obligationId);
3851
+ const locked = await getObligationLocked(
3852
+ address.cache,
3853
+ obligationsObjects[idx]
3854
+ );
3375
3855
  obligations.push({ id: obligationId, keyId, locked });
3376
3856
  }
3377
3857
  })
@@ -3379,14 +3859,12 @@ var getObligations = async ({
3379
3859
  return obligations;
3380
3860
  };
3381
3861
  var getObligationLocked = async (cache, obligation) => {
3382
- const obligationObjectResponse = typeof obligation === "string" ? (await cache.queryGetObject(obligation, {
3862
+ const obligationObjectData = typeof obligation === "string" ? (await cache.queryGetObject(obligation, {
3383
3863
  showContent: true
3384
3864
  }))?.data : obligation;
3385
3865
  let obligationLocked = false;
3386
- if (obligationObjectResponse && obligationObjectResponse?.content?.dataType === "moveObject" && "lock_key" in obligationObjectResponse.content.fields) {
3387
- obligationLocked = Boolean(
3388
- obligationObjectResponse.content.fields.lock_key
3389
- );
3866
+ if (obligationObjectData && obligationObjectData?.content?.dataType === "moveObject" && "lock_key" in obligationObjectData.content.fields) {
3867
+ obligationLocked = Boolean(obligationObjectData.content.fields.lock_key);
3390
3868
  }
3391
3869
  return obligationLocked;
3392
3870
  };
@@ -3569,10 +4047,10 @@ var getLendings = async (query, poolCoinNames = [...SUPPORT_POOLS], ownerAddress
3569
4047
  (marketCoinName) => SUPPORT_SPOOLS.includes(marketCoinName)
3570
4048
  );
3571
4049
  const coinPrices = await query.utils.getCoinPrices();
3572
- const marketPools = await query.getMarketPools(poolCoinNames, {
4050
+ const marketPools = (await query.getMarketPools(poolCoinNames, {
3573
4051
  indexer,
3574
4052
  coinPrices
3575
- });
4053
+ })).pools;
3576
4054
  const spools = await query.getSpools(stakeMarketCoinNames, {
3577
4055
  indexer,
3578
4056
  marketPools,
@@ -3740,8 +4218,10 @@ var getLending = async (query, poolCoinName, ownerAddress, indexer = false, mark
3740
4218
  return lending;
3741
4219
  };
3742
4220
  var getObligationAccounts = async (query, ownerAddress, indexer = false) => {
3743
- const coinPrices = await query.utils.getCoinPrices();
3744
- const market = await query.queryMarket({ indexer, coinPrices });
4221
+ const market = await query.queryMarket({ indexer });
4222
+ const coinPrices = await query.getAllCoinPrices({
4223
+ marketPools: market.pools
4224
+ });
3745
4225
  const [coinAmounts, obligations] = await Promise.all([
3746
4226
  query.getCoinAmounts(void 0, ownerAddress),
3747
4227
  query.getObligations(ownerAddress)
@@ -3763,17 +4243,21 @@ var getObligationAccounts = async (query, ownerAddress, indexer = false) => {
3763
4243
  return obligationAccounts;
3764
4244
  };
3765
4245
  var getObligationAccount = async (query, obligationId, ownerAddress, indexer = false, market, coinPrices, coinAmounts) => {
4246
+ const coinNames = Array.from(
4247
+ /* @__PURE__ */ new Set([...SUPPORT_POOLS, ...SUPPORT_COLLATERALS])
4248
+ );
3766
4249
  const collateralAssetCoinNames = [
3767
4250
  ...SUPPORT_COLLATERALS
3768
4251
  ];
3769
- market = market ?? await query.queryMarket({ indexer });
4252
+ market = market ?? await query.getMarketPools(void 0, { indexer });
3770
4253
  coinPrices = coinPrices ?? await query.getAllCoinPrices({ marketPools: market.pools });
3771
- coinAmounts = coinAmounts || await query.getCoinAmounts(collateralAssetCoinNames, ownerAddress);
4254
+ coinAmounts = coinAmounts ?? await query.getCoinAmounts(coinNames, ownerAddress);
3772
4255
  const [obligationQuery, borrowIncentivePools, borrowIncentiveAccounts] = await Promise.all([
3773
4256
  query.queryObligation(obligationId),
3774
4257
  query.getBorrowIncentivePools(void 0, {
3775
4258
  coinPrices,
3776
- indexer
4259
+ indexer,
4260
+ marketPools: market.pools
3777
4261
  }),
3778
4262
  query.getBorrowIncentiveAccounts(obligationId)
3779
4263
  ]);
@@ -3911,7 +4395,7 @@ var getObligationAccount = async (query, obligationId, ownerAddress, indexer = f
3911
4395
  const rewards = [];
3912
4396
  Object.entries(borrowIncentiveAccount.pointList).forEach(
3913
4397
  ([key, accountPoint]) => {
3914
- const poolPoint = borrowIncentivePool.points[key];
4398
+ const poolPoint = borrowIncentivePool.points[query.utils.parseSCoinTypeNameToMarketCoinName(key)];
3915
4399
  if (accountPoint && poolPoint) {
3916
4400
  let availableClaimAmount = (0, import_bignumber5.default)(0);
3917
4401
  let availableClaimCoin = (0, import_bignumber5.default)(0);
@@ -4056,7 +4540,7 @@ var getObligationAccount = async (query, obligationId, ownerAddress, indexer = f
4056
4540
  return obligationAccount;
4057
4541
  };
4058
4542
  var getTotalValueLocked = async (query, indexer = false) => {
4059
- const market = await query.queryMarket({ indexer });
4543
+ const market = await query.getMarketPools(void 0, { indexer });
4060
4544
  let supplyValue = (0, import_bignumber5.default)(0);
4061
4545
  let borrowValue = (0, import_bignumber5.default)(0);
4062
4546
  if (indexer) {
@@ -4177,7 +4661,7 @@ var getPythPrices = async ({
4177
4661
  };
4178
4662
  var getAllCoinPrices = async (query, marketPools, coinPrices) => {
4179
4663
  coinPrices = coinPrices ?? await query.utils.getCoinPrices();
4180
- marketPools = marketPools ?? await query.getMarketPools(void 0, { coinPrices });
4664
+ marketPools = marketPools ?? (await query.getMarketPools(void 0, { coinPrices })).pools;
4181
4665
  if (!marketPools) {
4182
4666
  throw new Error(`Failed to fetch market pool for getAllCoinPrices`);
4183
4667
  }
@@ -4302,13 +4786,81 @@ var getSCoinSwapRate = async (query, fromSCoin, toSCoin, underlyingCoinPrice) =>
4302
4786
  };
4303
4787
 
4304
4788
  // src/queries/spoolQuery.ts
4305
- var import_utils8 = require("@mysten/sui/utils");
4789
+ var import_utils9 = require("@mysten/sui/utils");
4790
+ var queryRequiredSpoolObjects = async (query, stakePoolCoinNames) => {
4791
+ const tasks = stakePoolCoinNames.map((t, idx) => ({
4792
+ poolCoinName: stakePoolCoinNames[idx],
4793
+ spool: POOL_ADDRESSES[t]?.spool,
4794
+ spoolReward: POOL_ADDRESSES[t]?.spoolReward,
4795
+ sCoinTreasury: POOL_ADDRESSES[t]?.sCoinTreasury
4796
+ }));
4797
+ const [spoolObjects, spoolRewardObjects, sCoinTreasuryObjects] = await Promise.all([
4798
+ queryMultipleObjects(
4799
+ query.cache,
4800
+ tasks.map((task) => task.spool).filter((t) => !!t)
4801
+ ),
4802
+ queryMultipleObjects(
4803
+ query.cache,
4804
+ tasks.map((task) => task.spoolReward).filter((t) => !!t)
4805
+ ),
4806
+ queryMultipleObjects(
4807
+ query.cache,
4808
+ tasks.map((task) => task.sCoinTreasury).filter((t) => !!t)
4809
+ )
4810
+ ]);
4811
+ const mapObjects = (tasks2, fetchedObjects) => {
4812
+ const resultMap = {};
4813
+ let fetchedIndex = 0;
4814
+ for (const task of tasks2) {
4815
+ const key = task[Object.keys(task)[1]];
4816
+ if (key) {
4817
+ resultMap[task.poolCoinName] = fetchedObjects[fetchedIndex];
4818
+ fetchedIndex++;
4819
+ }
4820
+ }
4821
+ return resultMap;
4822
+ };
4823
+ const spoolMap = mapObjects(tasks, spoolObjects);
4824
+ const spoolRewardMap = mapObjects(tasks, spoolRewardObjects);
4825
+ const sCoinTreasuryMap = mapObjects(tasks, sCoinTreasuryObjects);
4826
+ return stakePoolCoinNames.reduce(
4827
+ (acc, name) => {
4828
+ acc[name] = {
4829
+ spool: spoolMap[name],
4830
+ spoolReward: spoolRewardMap[name],
4831
+ sCoinTreasury: sCoinTreasuryMap[name]
4832
+ };
4833
+ return acc;
4834
+ },
4835
+ {}
4836
+ );
4837
+ };
4838
+ var parseSpoolObjects = ({
4839
+ spool,
4840
+ spoolReward
4841
+ }) => {
4842
+ const _spool = parseObjectAs(spool);
4843
+ const _spoolReward = parseObjectAs(spoolReward);
4844
+ return {
4845
+ stakeType: _spool.stake_type,
4846
+ maxDistributedPoint: _spool.max_distributed_point,
4847
+ distributedPoint: _spool.distributed_point,
4848
+ distributedPointPerPeriod: _spool.distributed_point_per_period,
4849
+ pointDistributionTime: _spool.point_distribution_time,
4850
+ maxStake: _spool.max_stakes,
4851
+ stakes: _spool.stakes,
4852
+ index: _spool.index,
4853
+ createdAt: _spool.created_at,
4854
+ lastUpdate: _spool.last_update,
4855
+ ..._spoolReward
4856
+ };
4857
+ };
4306
4858
  var getSpools = async (query, stakeMarketCoinNames = [...SUPPORT_SPOOLS], indexer = false, marketPools, coinPrices) => {
4307
4859
  const stakeCoinNames = stakeMarketCoinNames.map(
4308
4860
  (stakeMarketCoinName) => query.utils.parseCoinName(stakeMarketCoinName)
4309
4861
  );
4310
- coinPrices = coinPrices ?? await query.utils.getCoinPrices() ?? {};
4311
- marketPools = marketPools ?? await query.getMarketPools(stakeCoinNames, { indexer });
4862
+ marketPools = marketPools ?? (await query.getMarketPools(stakeCoinNames, { indexer })).pools;
4863
+ coinPrices = coinPrices ?? await query.getAllCoinPrices({ marketPools }) ?? {};
4312
4864
  if (!marketPools)
4313
4865
  throw new Error(`Fail to fetch marketPools for ${stakeCoinNames}`);
4314
4866
  const spools = {};
@@ -4323,126 +4875,93 @@ var getSpools = async (query, stakeMarketCoinNames = [...SUPPORT_SPOOLS], indexe
4323
4875
  const rewardCoinName = query.utils.getSpoolRewardCoinName(
4324
4876
  spool.marketCoinName
4325
4877
  );
4326
- const marketPool = marketPools[coinName];
4327
4878
  spool.coinPrice = coinPrices[coinName] ?? spool.coinPrice;
4328
- spool.marketCoinPrice = coinPrices[coinName] ? (coinPrices[coinName] ?? 0) * (marketPool ? marketPool.conversionRate : 0) : spool.marketCoinPrice;
4879
+ spool.marketCoinPrice = coinPrices[spool.marketCoinName] ?? spool.marketCoinPrice;
4329
4880
  spool.rewardCoinPrice = coinPrices[rewardCoinName] ?? spool.rewardCoinPrice;
4330
4881
  spools[spool.marketCoinName] = spool;
4331
4882
  };
4332
4883
  Object.values(spoolsIndexer).forEach(updateSpools);
4333
4884
  return spools;
4334
4885
  }
4335
- for (const stakeMarketCoinName of stakeMarketCoinNames) {
4336
- const stakeCoinName = query.utils.parseCoinName(stakeMarketCoinName);
4337
- const spool = await getSpool(
4338
- query,
4339
- stakeMarketCoinName,
4340
- indexer,
4341
- marketPools[stakeCoinName],
4342
- coinPrices
4343
- );
4344
- if (spool) {
4345
- spools[stakeMarketCoinName] = spool;
4346
- }
4347
- }
4886
+ const requiredObjects = await queryRequiredSpoolObjects(
4887
+ query,
4888
+ stakeCoinNames
4889
+ );
4890
+ await Promise.allSettled(
4891
+ stakeMarketCoinNames.map(async (stakeMarketCoinName, idx) => {
4892
+ try {
4893
+ const stakeCoinName = stakeCoinNames[idx];
4894
+ const spool = await getSpool(
4895
+ query,
4896
+ stakeMarketCoinName,
4897
+ indexer,
4898
+ coinPrices,
4899
+ requiredObjects[stakeCoinName]
4900
+ );
4901
+ if (spool) {
4902
+ spools[stakeMarketCoinName] = spool;
4903
+ }
4904
+ } catch (e) {
4905
+ console.error(e);
4906
+ }
4907
+ })
4908
+ );
4348
4909
  return spools;
4349
4910
  };
4350
- var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPrices) => {
4911
+ var getSpool = async (query, marketCoinName, indexer = false, coinPrices, requiredObjects) => {
4351
4912
  const coinName = query.utils.parseCoinName(marketCoinName);
4352
- marketPool = marketPool || await query.getMarketPool(coinName, { indexer });
4353
- if (!marketPool) {
4354
- throw new Error(`Failed to fetch marketPool for ${marketCoinName}`);
4355
- }
4356
- const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
4357
- const rewardPoolId = query.address.get(
4358
- `spool.pools.${marketCoinName}.rewardPoolId`
4359
- );
4360
- let spool = void 0;
4361
- coinPrices = coinPrices || await query.utils.getCoinPrices();
4913
+ coinPrices = coinPrices || await query.getAllCoinPrices();
4362
4914
  if (indexer) {
4363
4915
  const spoolIndexer = await query.indexer.getSpool(marketCoinName);
4364
4916
  const coinName2 = query.utils.parseCoinName(marketCoinName);
4365
4917
  const rewardCoinName2 = query.utils.getSpoolRewardCoinName(marketCoinName);
4366
- spoolIndexer.coinPrice = coinPrices?.[coinName2] || spoolIndexer.coinPrice;
4367
- spoolIndexer.marketCoinPrice = (coinPrices?.[coinName2] ?? 0) * (marketPool ? marketPool.conversionRate : 0) || spoolIndexer.marketCoinPrice;
4368
- spoolIndexer.rewardCoinPrice = coinPrices?.[rewardCoinName2] || spoolIndexer.rewardCoinPrice;
4918
+ spoolIndexer.coinPrice = coinPrices?.[coinName2] ?? spoolIndexer.coinPrice;
4919
+ spoolIndexer.marketCoinPrice = coinPrices?.[marketCoinName] ?? spoolIndexer.marketCoinPrice;
4920
+ spoolIndexer.rewardCoinPrice = coinPrices?.[rewardCoinName2] ?? spoolIndexer.rewardCoinPrice;
4369
4921
  return spoolIndexer;
4370
4922
  }
4371
- const spoolObjectResponse = await query.cache.queryGetObjects(
4372
- [poolId, rewardPoolId],
4373
- {
4374
- showContent: true
4375
- }
4376
- );
4377
- if (!(spoolObjectResponse[0] && spoolObjectResponse[1])) {
4378
- throw new Error("Fail to fetch spoolObjectResponse!");
4379
- }
4923
+ requiredObjects ?? (requiredObjects = (await queryRequiredSpoolObjects(query, [coinName]))[coinName]);
4380
4924
  const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
4381
4925
  coinPrices = coinPrices || await query.utils.getCoinPrices();
4382
- const spoolObject = spoolObjectResponse[0];
4383
- const rewardPoolObject = spoolObjectResponse[1];
4384
- if (spoolObject.content && "fields" in spoolObject.content) {
4385
- const spoolFields = spoolObject.content.fields;
4386
- const parsedSpoolData = parseOriginSpoolData({
4387
- stakeType: spoolFields.stake_type,
4388
- maxDistributedPoint: spoolFields.max_distributed_point,
4389
- distributedPoint: spoolFields.distributed_point,
4390
- distributedPointPerPeriod: spoolFields.distributed_point_per_period,
4391
- pointDistributionTime: spoolFields.point_distribution_time,
4392
- maxStake: spoolFields.max_stakes,
4393
- stakes: spoolFields.stakes,
4394
- index: spoolFields.index,
4395
- createdAt: spoolFields.created_at,
4396
- lastUpdate: spoolFields.last_update
4397
- });
4398
- const marketCoinPrice = (coinPrices?.[coinName] ?? 0) * marketPool.conversionRate;
4399
- const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
4400
- const calculatedSpoolData = calculateSpoolData(
4401
- parsedSpoolData,
4402
- marketCoinPrice,
4403
- marketCoinDecimal
4404
- );
4405
- if (rewardPoolObject.content && "fields" in rewardPoolObject.content) {
4406
- const rewardPoolFields = rewardPoolObject.content.fields;
4407
- const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData({
4408
- claimed_rewards: rewardPoolFields.claimed_rewards,
4409
- exchange_rate_numerator: rewardPoolFields.exchange_rate_numerator,
4410
- exchange_rate_denominator: rewardPoolFields.exchange_rate_denominator,
4411
- rewards: rewardPoolFields.rewards,
4412
- spool_id: rewardPoolFields.spool_id
4413
- });
4414
- const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
4415
- const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
4416
- const calculatedRewardPoolData = calculateSpoolRewardPoolData(
4417
- parsedSpoolData,
4418
- parsedSpoolRewardPoolData,
4419
- calculatedSpoolData,
4420
- rewardCoinPrice,
4421
- rewardCoinDecimal
4422
- );
4423
- spool = {
4424
- marketCoinName,
4425
- symbol: query.utils.parseSymbol(marketCoinName),
4426
- coinType: query.utils.parseCoinType(coinName),
4427
- marketCoinType: query.utils.parseMarketCoinType(coinName),
4428
- rewardCoinType: isMarketCoin(rewardCoinName) ? query.utils.parseMarketCoinType(rewardCoinName) : query.utils.parseCoinType(rewardCoinName),
4429
- sCoinType: marketPool.sCoinType,
4430
- coinDecimal: query.utils.getCoinDecimal(coinName),
4431
- rewardCoinDecimal: query.utils.getCoinDecimal(rewardCoinName),
4432
- coinPrice: coinPrices?.[coinName] ?? 0,
4433
- marketCoinPrice,
4434
- rewardCoinPrice,
4435
- maxPoint: parsedSpoolData.maxPoint,
4436
- distributedPoint: parsedSpoolData.distributedPoint,
4437
- maxStake: parsedSpoolData.maxStake,
4438
- ...calculatedSpoolData,
4439
- exchangeRateNumerator: parsedSpoolRewardPoolData.exchangeRateNumerator,
4440
- exchangeRateDenominator: parsedSpoolRewardPoolData.exchangeRateDenominator,
4441
- ...calculatedRewardPoolData
4442
- };
4443
- }
4444
- }
4445
- return spool;
4926
+ const parsedSpoolObjects = parseSpoolObjects(requiredObjects);
4927
+ const parsedSpoolData = parseOriginSpoolData(parsedSpoolObjects);
4928
+ const marketCoinPrice = coinPrices?.[marketCoinName] ?? 0;
4929
+ const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
4930
+ const calculatedSpoolData = calculateSpoolData(
4931
+ parsedSpoolData,
4932
+ marketCoinPrice,
4933
+ marketCoinDecimal
4934
+ );
4935
+ const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData(parsedSpoolObjects);
4936
+ const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
4937
+ const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
4938
+ const calculatedRewardPoolData = calculateSpoolRewardPoolData(
4939
+ parsedSpoolData,
4940
+ parsedSpoolRewardPoolData,
4941
+ calculatedSpoolData,
4942
+ rewardCoinPrice,
4943
+ rewardCoinDecimal
4944
+ );
4945
+ return {
4946
+ marketCoinName,
4947
+ symbol: query.utils.parseSymbol(marketCoinName),
4948
+ coinType: query.utils.parseCoinType(coinName),
4949
+ marketCoinType: query.utils.parseMarketCoinType(coinName),
4950
+ rewardCoinType: isMarketCoin(rewardCoinName) ? query.utils.parseMarketCoinType(rewardCoinName) : query.utils.parseCoinType(rewardCoinName),
4951
+ sCoinType: query.utils.parseSCoinType(marketCoinName),
4952
+ coinDecimal: query.utils.getCoinDecimal(coinName),
4953
+ rewardCoinDecimal: query.utils.getCoinDecimal(rewardCoinName),
4954
+ coinPrice: coinPrices?.[coinName] ?? 0,
4955
+ marketCoinPrice,
4956
+ rewardCoinPrice,
4957
+ maxPoint: parsedSpoolData.maxPoint,
4958
+ distributedPoint: parsedSpoolData.distributedPoint,
4959
+ maxStake: parsedSpoolData.maxStake,
4960
+ ...calculatedSpoolData,
4961
+ exchangeRateNumerator: parsedSpoolRewardPoolData.exchangeRateNumerator,
4962
+ exchangeRateDenominator: parsedSpoolRewardPoolData.exchangeRateDenominator,
4963
+ ...calculatedRewardPoolData
4964
+ };
4446
4965
  };
4447
4966
  var getStakeAccounts = async ({
4448
4967
  utils
@@ -4519,14 +5038,14 @@ var getStakeAccounts = async ({
4519
5038
  svsui: stakeAccounts.svsui,
4520
5039
  susdc: stakeAccounts.susdc
4521
5040
  };
4522
- const normalizedType = (0, import_utils8.normalizeStructTag)(type);
5041
+ const normalizedType = (0, import_utils9.normalizeStructTag)(type);
4523
5042
  const stakeAccountArray = stakeMarketCoinTypeMap[reversedStakeMarketCoinTypes[normalizedType]];
4524
5043
  if (stakeAccountArray) {
4525
5044
  stakeAccountArray.push({
4526
5045
  id,
4527
5046
  type: normalizedType,
4528
5047
  stakePoolId,
4529
- stakeType: (0, import_utils8.normalizeStructTag)(stakeType),
5048
+ stakeType: (0, import_utils9.normalizeStructTag)(stakeType),
4530
5049
  staked,
4531
5050
  index,
4532
5051
  points,
@@ -4564,13 +5083,13 @@ var getStakePool = async ({
4564
5083
  const lastUpdate = Number(fields.last_update);
4565
5084
  stakePool = {
4566
5085
  id,
4567
- type: (0, import_utils8.normalizeStructTag)(type),
5086
+ type: (0, import_utils9.normalizeStructTag)(type),
4568
5087
  maxPoint,
4569
5088
  distributedPoint,
4570
5089
  pointPerPeriod,
4571
5090
  period,
4572
5091
  maxStake,
4573
- stakeType: (0, import_utils8.normalizeStructTag)(stakeType),
5092
+ stakeType: (0, import_utils9.normalizeStructTag)(stakeType),
4574
5093
  totalStaked,
4575
5094
  index,
4576
5095
  createdAt,
@@ -4609,7 +5128,7 @@ var getStakeRewardPool = async ({
4609
5128
  const claimedRewards = Number(rewardPoolFields.claimed_rewards);
4610
5129
  stakeRewardPool = {
4611
5130
  id,
4612
- type: (0, import_utils8.normalizeStructTag)(type),
5131
+ type: (0, import_utils9.normalizeStructTag)(type),
4613
5132
  stakePoolId,
4614
5133
  ratioNumerator,
4615
5134
  ratioDenominator,
@@ -4792,6 +5311,105 @@ var getVeScaTreasuryInfo = async (utils) => {
4792
5311
  };
4793
5312
  };
4794
5313
 
5314
+ // src/queries/poolAddressesQuery.ts
5315
+ var getAllAddresses = async (query) => {
5316
+ const results = {};
5317
+ const marketId = query.address.get("core.market");
5318
+ const marketObject = (await query.cache.queryGetObject(marketId, {
5319
+ showContent: true
5320
+ }))?.data;
5321
+ if (!(marketObject && marketObject.content?.dataType === "moveObject"))
5322
+ throw new Error(`Failed to fetch marketObject`);
5323
+ const fields = marketObject.content.fields;
5324
+ const coinTypesPairs = SUPPORT_POOLS.reduce(
5325
+ (acc, pool) => {
5326
+ acc.push([pool, query.utils.parseCoinType(pool).substring(2)]);
5327
+ return acc;
5328
+ },
5329
+ []
5330
+ );
5331
+ const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
5332
+ const collateralStatsParentId = fields.collateral_stats.fields.table.fields.id.id;
5333
+ const borrowDynamicsParentid = fields.borrow_dynamics.fields.table.fields.id.id;
5334
+ const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
5335
+ const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
5336
+ const ADDRESS_TYPE = `0x1::type_name::TypeName`;
5337
+ const BORROW_FEE_TYPE = `0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey`;
5338
+ const SUPPLY_LIMIT_TYPE = `0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey`;
5339
+ const BORROW_LIMIT_TYPE = `0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey`;
5340
+ const ISOLATED_ASSET_KEY = `0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey`;
5341
+ const fetchDynamicObject = async (parentId, type, value) => {
5342
+ try {
5343
+ return (await query.cache.queryGetDynamicFieldObject({
5344
+ parentId,
5345
+ name: {
5346
+ type,
5347
+ value
5348
+ }
5349
+ }))?.data?.objectId;
5350
+ } catch (_e) {
5351
+ return void 0;
5352
+ }
5353
+ };
5354
+ await Promise.all(
5355
+ coinTypesPairs.map(async ([coinName, coinType]) => {
5356
+ const addresses = await Promise.all([
5357
+ fetchDynamicObject(balanceSheetParentId, ADDRESS_TYPE, {
5358
+ name: coinType
5359
+ }),
5360
+ fetchDynamicObject(collateralStatsParentId, ADDRESS_TYPE, {
5361
+ name: coinType
5362
+ }),
5363
+ fetchDynamicObject(borrowDynamicsParentid, ADDRESS_TYPE, {
5364
+ name: coinType
5365
+ }),
5366
+ fetchDynamicObject(interestModelParentId, ADDRESS_TYPE, {
5367
+ name: coinType
5368
+ }),
5369
+ fetchDynamicObject(riskModelParentId, ADDRESS_TYPE, {
5370
+ name: coinType
5371
+ }),
5372
+ fetchDynamicObject(marketId, BORROW_FEE_TYPE, coinType),
5373
+ fetchDynamicObject(marketId, SUPPLY_LIMIT_TYPE, coinType),
5374
+ fetchDynamicObject(marketId, BORROW_LIMIT_TYPE, coinType),
5375
+ fetchDynamicObject(marketId, ISOLATED_ASSET_KEY, coinType)
5376
+ ]);
5377
+ const spool = query.address.get(
5378
+ // @ts-ignore
5379
+ `spool.pools.s${coinName}.id`
5380
+ );
5381
+ const rewardPool = query.address.get(
5382
+ // @ts-ignore
5383
+ `spool.pools.s${coinName}.rewardPoolId`
5384
+ );
5385
+ const sCoinTreasury = query.address.get(
5386
+ // @ts-ignore
5387
+ `scoin.coins.s${coinName}.treasury`
5388
+ );
5389
+ const coinDecimalId = query.address.get(
5390
+ `core.coins.${coinName}.metaData`
5391
+ );
5392
+ results[coinName] = {
5393
+ lendingPoolAddress: addresses[0],
5394
+ collateralPoolAddress: addresses[1],
5395
+ borrowDynamic: addresses[2],
5396
+ interestModel: addresses[3],
5397
+ riskModel: addresses[4],
5398
+ borrowFeeKey: addresses[5],
5399
+ supplyLimitKey: addresses[6],
5400
+ borrowLimitKey: addresses[7],
5401
+ isolatedAssetKey: addresses[8],
5402
+ spool,
5403
+ spoolReward: rewardPool,
5404
+ sCoinTreasury,
5405
+ coinDecimalId
5406
+ };
5407
+ await new Promise((resolve) => setTimeout(resolve, 200));
5408
+ })
5409
+ );
5410
+ return results;
5411
+ };
5412
+
4795
5413
  // src/models/suiKit.ts
4796
5414
  var import_sui_kit4 = require("@scallop-io/sui-kit");
4797
5415
  var newSuiKit = (params) => {
@@ -4894,7 +5512,7 @@ var ScallopUtils = class {
4894
5512
  throw Error(`Coin ${coinName} is not supported`);
4895
5513
  }
4896
5514
  if (coinName === "sui")
4897
- return (0, import_utils10.normalizeStructTag)(`${coinPackageId}::sui::SUI`);
5515
+ return (0, import_utils11.normalizeStructTag)(`${coinPackageId}::sui::SUI`);
4898
5516
  const wormHolePackageIds = [
4899
5517
  this.address.get("core.coins.wusdc.id") ?? wormholeCoinIds.wusdc,
4900
5518
  this.address.get("core.coins.wusdt.id") ?? wormholeCoinIds.wusdt,
@@ -4943,13 +5561,14 @@ var ScallopUtils = class {
4943
5561
  }
4944
5562
  }
4945
5563
  /**
4946
- * Convert sCoin name to coin name.
5564
+ * Convert sCoin name to market coin name.
4947
5565
  * This function will parse new sCoin name `scallop_...` to its old market coin name which is shorter
4948
5566
  * e.g: `scallop_sui -> ssui
5567
+ * if no `scallop_...` is encountered, return coinName
4949
5568
  * @return sCoin name
4950
5569
  */
4951
- parseCoinNameFromSCoinName(coinName) {
4952
- return sCoinRawNameToName[coinName];
5570
+ parseSCoinTypeNameToMarketCoinName(coinName) {
5571
+ return sCoinRawNameToName[coinName] ?? coinName;
4953
5572
  }
4954
5573
  /**
4955
5574
  * Convert sCoin name into sCoin type
@@ -4997,7 +5616,10 @@ var ScallopUtils = class {
4997
5616
  return `${protocolObjectId}::reserve::MarketCoin<${coinType}>`;
4998
5617
  }
4999
5618
  parseCoinNameFromType(coinType) {
5000
- coinType = (0, import_utils10.normalizeStructTag)(coinType);
5619
+ coinType = (0, import_utils11.normalizeStructTag)(coinType);
5620
+ if (sCoinTypeToName[coinType]) {
5621
+ return sCoinTypeToName[coinType];
5622
+ }
5001
5623
  const coinTypeRegex = new RegExp(`((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)`);
5002
5624
  const coinTypeMatch = coinType.match(coinTypeRegex);
5003
5625
  const isMarketCoinType = coinType.includes("reserve::MarketCoin");
@@ -5078,7 +5700,7 @@ var ScallopUtils = class {
5078
5700
  * @param coinType - The coin type, default is 0x2::SUI::SUI.
5079
5701
  * @return The selected transaction coin arguments.
5080
5702
  */
5081
- async selectCoins(amount, coinType = import_utils10.SUI_TYPE_ARG, ownerAddress) {
5703
+ async selectCoins(amount, coinType = import_utils11.SUI_TYPE_ARG, ownerAddress) {
5082
5704
  ownerAddress = ownerAddress ?? this.suiKit.currentAddress();
5083
5705
  const coins = await this.suiKit.suiInteractor.selectCoins(
5084
5706
  ownerAddress,
@@ -5167,7 +5789,7 @@ var ScallopUtils = class {
5167
5789
  );
5168
5790
  const priceIds = priceIdPairs.map(([_2, priceId]) => priceId);
5169
5791
  const pythConnection = new import_pyth_sui_js.SuiPriceServiceConnection(endpoint, {
5170
- timeout: 2e3
5792
+ timeout: 4e3
5171
5793
  });
5172
5794
  try {
5173
5795
  const feeds = await this.cache.queryClient.fetchQuery({
@@ -5276,15 +5898,15 @@ var ScallopUtils = class {
5276
5898
  };
5277
5899
 
5278
5900
  // src/models/scallopBuilder.ts
5279
- var import_utils24 = require("@mysten/sui/utils");
5901
+ var import_utils25 = require("@mysten/sui/utils");
5280
5902
 
5281
5903
  // src/builders/coreBuilder.ts
5282
5904
  var import_transactions = require("@mysten/sui/transactions");
5283
- var import_utils13 = require("@mysten/sui/utils");
5905
+ var import_utils14 = require("@mysten/sui/utils");
5284
5906
  var import_sui_kit5 = require("@scallop-io/sui-kit");
5285
5907
 
5286
5908
  // src/builders/oracle.ts
5287
- var import_utils12 = require("@mysten/sui/utils");
5909
+ var import_utils13 = require("@mysten/sui/utils");
5288
5910
  var import_pyth_sui_js2 = require("@pythnetwork/pyth-sui-js");
5289
5911
  var updateOracles = async (builder, txBlock, assetCoinNames, options = { usePythPullModel: true }) => {
5290
5912
  const usePythPullModel = builder.params.usePythPullModel ?? options.usePythPullModel;
@@ -5400,27 +6022,27 @@ var priceUpdateRequest = (txBlock, packageId, xOracleId, coinType) => {
5400
6022
  var confirmPriceUpdateRequest = (txBlock, packageId, xOracleId, request, coinType) => {
5401
6023
  const target = `${packageId}::x_oracle::confirm_price_update_request`;
5402
6024
  const typeArgs = [coinType];
5403
- txBlock.moveCall(target, [xOracleId, request, import_utils12.SUI_CLOCK_OBJECT_ID], typeArgs);
6025
+ txBlock.moveCall(target, [xOracleId, request, import_utils13.SUI_CLOCK_OBJECT_ID], typeArgs);
5404
6026
  return txBlock;
5405
6027
  };
5406
6028
  var updateSupraPrice = (txBlock, packageId, request, holderId, registryId, coinType) => {
5407
6029
  txBlock.moveCall(
5408
6030
  `${packageId}::rule::set_price`,
5409
- [request, holderId, registryId, import_utils12.SUI_CLOCK_OBJECT_ID],
6031
+ [request, holderId, registryId, import_utils13.SUI_CLOCK_OBJECT_ID],
5410
6032
  [coinType]
5411
6033
  );
5412
6034
  };
5413
6035
  var updateSwitchboardPrice = (txBlock, packageId, request, aggregatorId, registryId, coinType) => {
5414
6036
  txBlock.moveCall(
5415
6037
  `${packageId}::rule::set_price`,
5416
- [request, aggregatorId, registryId, import_utils12.SUI_CLOCK_OBJECT_ID],
6038
+ [request, aggregatorId, registryId, import_utils13.SUI_CLOCK_OBJECT_ID],
5417
6039
  [coinType]
5418
6040
  );
5419
6041
  };
5420
6042
  var updatePythPrice = (txBlock, packageId, request, stateId, feedObjectId, registryId, coinType) => {
5421
6043
  txBlock.moveCall(
5422
6044
  `${packageId}::rule::set_price`,
5423
- [request, stateId, feedObjectId, registryId, import_utils12.SUI_CLOCK_OBJECT_ID],
6045
+ [request, stateId, feedObjectId, registryId, import_utils13.SUI_CLOCK_OBJECT_ID],
5424
6046
  [coinType]
5425
6047
  );
5426
6048
  };
@@ -5456,32 +6078,41 @@ var generateCoreNormalMethod = ({
5456
6078
  const referralPkgId = builder.address.get("referral.id");
5457
6079
  const referralWitnessType = `${referralPkgId}::scallop_referral_program::REFERRAL_WITNESS`;
5458
6080
  return {
5459
- openObligation: () => {
5460
- const [obligation, obligationKey, obligationHotPotato] = txBlock.moveCall(
6081
+ openObligation: async () => {
6082
+ const [obligation, obligationKey, obligationHotPotato] = await builder.moveCall(
6083
+ txBlock,
5461
6084
  `${coreIds.protocolPkg}::open_obligation::open_obligation`,
5462
6085
  [coreIds.version]
5463
6086
  );
5464
6087
  return [obligation, obligationKey, obligationHotPotato];
5465
6088
  },
5466
- returnObligation: (obligation, obligationHotPotato) => txBlock.moveCall(
5467
- `${coreIds.protocolPkg}::open_obligation::return_obligation`,
5468
- [coreIds.version, obligation, obligationHotPotato]
5469
- ),
5470
- openObligationEntry: () => txBlock.moveCall(
5471
- `${coreIds.protocolPkg}::open_obligation::open_obligation_entry`,
5472
- [coreIds.version]
5473
- ),
5474
- addCollateral: (obligation, coin, collateralCoinName) => {
6089
+ returnObligation: async (obligation, obligationHotPotato) => {
6090
+ await builder.moveCall(
6091
+ txBlock,
6092
+ `${coreIds.protocolPkg}::open_obligation::return_obligation`,
6093
+ [coreIds.version, obligation, obligationHotPotato]
6094
+ );
6095
+ },
6096
+ openObligationEntry: async () => {
6097
+ await builder.moveCall(
6098
+ txBlock,
6099
+ `${coreIds.protocolPkg}::open_obligation::open_obligation_entry`,
6100
+ [coreIds.version]
6101
+ );
6102
+ },
6103
+ addCollateral: async (obligation, coin, collateralCoinName) => {
5475
6104
  const coinType = builder.utils.parseCoinType(collateralCoinName);
5476
- return txBlock.moveCall(
6105
+ await builder.moveCall(
6106
+ txBlock,
5477
6107
  `${coreIds.protocolPkg}::deposit_collateral::deposit_collateral`,
5478
6108
  [coreIds.version, obligation, coreIds.market, coin],
5479
6109
  [coinType]
5480
6110
  );
5481
6111
  },
5482
- takeCollateral: (obligation, obligationKey, amount, collateralCoinName) => {
6112
+ takeCollateral: async (obligation, obligationKey, amount, collateralCoinName) => {
5483
6113
  const coinType = builder.utils.parseCoinType(collateralCoinName);
5484
- return txBlock.moveCall(
6114
+ return await builder.moveCall(
6115
+ txBlock,
5485
6116
  `${coreIds.protocolPkg}::withdraw_collateral::withdraw_collateral`,
5486
6117
  [
5487
6118
  coreIds.version,
@@ -5491,46 +6122,51 @@ var generateCoreNormalMethod = ({
5491
6122
  coreIds.coinDecimalsRegistry,
5492
6123
  txBlock.pure.u64(amount),
5493
6124
  coreIds.xOracle,
5494
- import_utils13.SUI_CLOCK_OBJECT_ID
6125
+ import_utils14.SUI_CLOCK_OBJECT_ID
5495
6126
  ],
5496
6127
  [coinType]
5497
6128
  );
5498
6129
  },
5499
- deposit: (coin, poolCoinName) => {
6130
+ deposit: async (coin, poolCoinName) => {
5500
6131
  const coinType = builder.utils.parseCoinType(poolCoinName);
5501
- return txBlock.moveCall(
6132
+ return await builder.moveCall(
6133
+ txBlock,
5502
6134
  `${coreIds.protocolPkg}::mint::mint`,
5503
- [coreIds.version, coreIds.market, coin, import_utils13.SUI_CLOCK_OBJECT_ID],
6135
+ [coreIds.version, coreIds.market, coin, import_utils14.SUI_CLOCK_OBJECT_ID],
5504
6136
  [coinType]
5505
6137
  );
5506
6138
  },
5507
- depositEntry: (coin, poolCoinName) => {
6139
+ depositEntry: async (coin, poolCoinName) => {
5508
6140
  const coinType = builder.utils.parseCoinType(poolCoinName);
5509
- return txBlock.moveCall(
6141
+ return await builder.moveCall(
6142
+ txBlock,
5510
6143
  `${coreIds.protocolPkg}::mint::mint_entry`,
5511
- [coreIds.version, coreIds.market, coin, import_utils13.SUI_CLOCK_OBJECT_ID],
6144
+ [coreIds.version, coreIds.market, coin, import_utils14.SUI_CLOCK_OBJECT_ID],
5512
6145
  [coinType]
5513
6146
  );
5514
6147
  },
5515
- withdraw: (marketCoin, poolCoinName) => {
6148
+ withdraw: async (marketCoin, poolCoinName) => {
5516
6149
  const coinType = builder.utils.parseCoinType(poolCoinName);
5517
- return txBlock.moveCall(
6150
+ return await builder.moveCall(
6151
+ txBlock,
5518
6152
  `${coreIds.protocolPkg}::redeem::redeem`,
5519
- [coreIds.version, coreIds.market, marketCoin, import_utils13.SUI_CLOCK_OBJECT_ID],
6153
+ [coreIds.version, coreIds.market, marketCoin, import_utils14.SUI_CLOCK_OBJECT_ID],
5520
6154
  [coinType]
5521
6155
  );
5522
6156
  },
5523
- withdrawEntry: (marketCoin, poolCoinName) => {
6157
+ withdrawEntry: async (marketCoin, poolCoinName) => {
5524
6158
  const coinType = builder.utils.parseCoinType(poolCoinName);
5525
- return txBlock.moveCall(
6159
+ return await builder.moveCall(
6160
+ txBlock,
5526
6161
  `${coreIds.protocolPkg}::redeem::redeem_entry`,
5527
- [coreIds.version, coreIds.market, marketCoin, import_utils13.SUI_CLOCK_OBJECT_ID],
6162
+ [coreIds.version, coreIds.market, marketCoin, import_utils14.SUI_CLOCK_OBJECT_ID],
5528
6163
  [coinType]
5529
6164
  );
5530
6165
  },
5531
- borrow: (obligation, obligationKey, amount, poolCoinName) => {
6166
+ borrow: async (obligation, obligationKey, amount, poolCoinName) => {
5532
6167
  const coinType = builder.utils.parseCoinType(poolCoinName);
5533
- return txBlock.moveCall(
6168
+ return await builder.moveCall(
6169
+ txBlock,
5534
6170
  `${coreIds.protocolPkg}::borrow::borrow`,
5535
6171
  [
5536
6172
  coreIds.version,
@@ -5540,14 +6176,15 @@ var generateCoreNormalMethod = ({
5540
6176
  coreIds.coinDecimalsRegistry,
5541
6177
  amount,
5542
6178
  coreIds.xOracle,
5543
- import_utils13.SUI_CLOCK_OBJECT_ID
6179
+ import_utils14.SUI_CLOCK_OBJECT_ID
5544
6180
  ],
5545
6181
  [coinType]
5546
6182
  );
5547
6183
  },
5548
- borrowWithReferral: (obligation, obligationKey, borrowReferral, amount, poolCoinName) => {
6184
+ borrowWithReferral: async (obligation, obligationKey, borrowReferral, amount, poolCoinName) => {
5549
6185
  const coinType = builder.utils.parseCoinType(poolCoinName);
5550
- return txBlock.moveCall(
6186
+ return await builder.moveCall(
6187
+ txBlock,
5551
6188
  `${coreIds.protocolPkg}::borrow::borrow_with_referral`,
5552
6189
  [
5553
6190
  coreIds.version,
@@ -5556,16 +6193,17 @@ var generateCoreNormalMethod = ({
5556
6193
  coreIds.market,
5557
6194
  coreIds.coinDecimalsRegistry,
5558
6195
  borrowReferral,
5559
- txBlock.pure.u64(amount),
6196
+ typeof amount === "number" ? txBlock.pure.u64(amount) : amount,
5560
6197
  coreIds.xOracle,
5561
- import_utils13.SUI_CLOCK_OBJECT_ID
6198
+ import_utils14.SUI_CLOCK_OBJECT_ID
5562
6199
  ],
5563
6200
  [coinType, referralWitnessType]
5564
6201
  );
5565
6202
  },
5566
- borrowEntry: (obligation, obligationKey, amount, poolCoinName) => {
6203
+ borrowEntry: async (obligation, obligationKey, amount, poolCoinName) => {
5567
6204
  const coinType = builder.utils.parseCoinType(poolCoinName);
5568
- return txBlock.moveCall(
6205
+ return await builder.moveCall(
6206
+ txBlock,
5569
6207
  `${coreIds.protocolPkg}::borrow::borrow_entry`,
5570
6208
  [
5571
6209
  coreIds.version,
@@ -5575,36 +6213,39 @@ var generateCoreNormalMethod = ({
5575
6213
  coreIds.coinDecimalsRegistry,
5576
6214
  txBlock.pure.u64(amount),
5577
6215
  coreIds.xOracle,
5578
- import_utils13.SUI_CLOCK_OBJECT_ID
6216
+ import_utils14.SUI_CLOCK_OBJECT_ID
5579
6217
  ],
5580
6218
  [coinType]
5581
6219
  );
5582
6220
  },
5583
- repay: (obligation, coin, poolCoinName) => {
6221
+ repay: async (obligation, coin, poolCoinName) => {
5584
6222
  const coinType = builder.utils.parseCoinType(poolCoinName);
5585
- return txBlock.moveCall(
6223
+ await builder.moveCall(
6224
+ txBlock,
5586
6225
  `${coreIds.protocolPkg}::repay::repay`,
5587
6226
  [
5588
6227
  coreIds.version,
5589
6228
  obligation,
5590
6229
  coreIds.market,
5591
6230
  coin,
5592
- import_utils13.SUI_CLOCK_OBJECT_ID
6231
+ import_utils14.SUI_CLOCK_OBJECT_ID
5593
6232
  ],
5594
6233
  [coinType]
5595
6234
  );
5596
6235
  },
5597
- borrowFlashLoan: (amount, poolCoinName) => {
6236
+ borrowFlashLoan: async (amount, poolCoinName) => {
5598
6237
  const coinType = builder.utils.parseCoinType(poolCoinName);
5599
- return txBlock.moveCall(
6238
+ return await builder.moveCall(
6239
+ txBlock,
5600
6240
  `${coreIds.protocolPkg}::flash_loan::borrow_flash_loan`,
5601
6241
  [coreIds.version, coreIds.market, amount],
5602
6242
  [coinType]
5603
6243
  );
5604
6244
  },
5605
- repayFlashLoan: (coin, loan, poolCoinName) => {
6245
+ repayFlashLoan: async (coin, loan, poolCoinName) => {
5606
6246
  const coinType = builder.utils.parseCoinType(poolCoinName);
5607
- return txBlock.moveCall(
6247
+ await builder.moveCall(
6248
+ txBlock,
5608
6249
  `${coreIds.protocolPkg}::flash_loan::repay_flash_loan`,
5609
6250
  [coreIds.version, coreIds.market, coin, loan],
5610
6251
  [coinType]
@@ -5626,7 +6267,7 @@ var generateCoreQuickMethod = ({
5626
6267
  );
5627
6268
  if (collateralCoinName === "sui") {
5628
6269
  const [suiCoin] = txBlock.splitSUIFromGas([amount]);
5629
- txBlock.addCollateral(obligationArg, suiCoin, collateralCoinName);
6270
+ await txBlock.addCollateral(obligationArg, suiCoin, collateralCoinName);
5630
6271
  } else {
5631
6272
  const { leftCoin, takeCoin } = await builder.selectCoin(
5632
6273
  txBlock,
@@ -5634,7 +6275,11 @@ var generateCoreQuickMethod = ({
5634
6275
  amount,
5635
6276
  sender
5636
6277
  );
5637
- txBlock.addCollateral(obligationArg, takeCoin, collateralCoinName);
6278
+ await txBlock.addCollateral(
6279
+ obligationArg,
6280
+ takeCoin,
6281
+ collateralCoinName
6282
+ );
5638
6283
  txBlock.transferObjects([leftCoin], sender);
5639
6284
  }
5640
6285
  },
@@ -5649,7 +6294,7 @@ var generateCoreQuickMethod = ({
5649
6294
  obligationInfo.obligationId
5650
6295
  );
5651
6296
  await updateOracles(builder, txBlock, updateCoinNames);
5652
- return txBlock.takeCollateral(
6297
+ return await txBlock.takeCollateral(
5653
6298
  obligationInfo.obligationId,
5654
6299
  obligationInfo.obligationKey,
5655
6300
  amount,
@@ -5661,7 +6306,7 @@ var generateCoreQuickMethod = ({
5661
6306
  let marketCoinDeposit;
5662
6307
  if (poolCoinName === "sui") {
5663
6308
  const [suiCoin] = txBlock.splitSUIFromGas([amount]);
5664
- marketCoinDeposit = txBlock.deposit(suiCoin, poolCoinName);
6309
+ marketCoinDeposit = await txBlock.deposit(suiCoin, poolCoinName);
5665
6310
  } else {
5666
6311
  const { leftCoin, takeCoin } = await builder.selectCoin(
5667
6312
  txBlock,
@@ -5670,9 +6315,9 @@ var generateCoreQuickMethod = ({
5670
6315
  sender
5671
6316
  );
5672
6317
  txBlock.transferObjects([leftCoin], sender);
5673
- marketCoinDeposit = txBlock.deposit(takeCoin, poolCoinName);
6318
+ marketCoinDeposit = await txBlock.deposit(takeCoin, poolCoinName);
5674
6319
  }
5675
- return returnSCoin ? txBlock.mintSCoin(
6320
+ return returnSCoin ? await txBlock.mintSCoin(
5676
6321
  builder.utils.parseMarketCoinName(poolCoinName),
5677
6322
  marketCoinDeposit
5678
6323
  ) : marketCoinDeposit;
@@ -5690,7 +6335,7 @@ var generateCoreQuickMethod = ({
5690
6335
  totalAmount
5691
6336
  } = await builder.selectSCoin(txBlock, sCoinName, amount, sender);
5692
6337
  txBlock.transferObjects([leftCoin], sender);
5693
- const marketCoins2 = txBlock.burnSCoin(sCoinName, sCoins2);
6338
+ const marketCoins2 = await txBlock.burnSCoin(sCoinName, sCoins2);
5694
6339
  amount -= totalAmount;
5695
6340
  try {
5696
6341
  if (amount > 0) {
@@ -5714,7 +6359,7 @@ var generateCoreQuickMethod = ({
5714
6359
  sender
5715
6360
  );
5716
6361
  txBlock.transferObjects([leftCoin], sender);
5717
- return txBlock.withdraw(walletMarketCoins, poolCoinName);
6362
+ return await txBlock.withdraw(walletMarketCoins, poolCoinName);
5718
6363
  }
5719
6364
  },
5720
6365
  borrowQuick: async (amount, poolCoinName, obligationId, obligationKey) => {
@@ -5729,7 +6374,7 @@ var generateCoreQuickMethod = ({
5729
6374
  ) ?? [];
5730
6375
  const updateCoinNames = [...obligationCoinNames, poolCoinName];
5731
6376
  await updateOracles(builder, txBlock, updateCoinNames);
5732
- return txBlock.borrow(
6377
+ return await txBlock.borrow(
5733
6378
  obligationInfo.obligationId,
5734
6379
  obligationInfo.obligationKey,
5735
6380
  amount,
@@ -5748,7 +6393,7 @@ var generateCoreQuickMethod = ({
5748
6393
  ) ?? [];
5749
6394
  const updateCoinNames = [...obligationCoinNames, poolCoinName];
5750
6395
  await updateOracles(builder, txBlock, updateCoinNames);
5751
- return txBlock.borrowWithReferral(
6396
+ return await txBlock.borrowWithReferral(
5752
6397
  obligationInfo.obligationId,
5753
6398
  obligationInfo.obligationKey,
5754
6399
  borrowReferral,
@@ -5765,7 +6410,7 @@ var generateCoreQuickMethod = ({
5765
6410
  );
5766
6411
  if (poolCoinName === "sui") {
5767
6412
  const [suiCoin] = txBlock.splitSUIFromGas([amount]);
5768
- return txBlock.repay(
6413
+ return await txBlock.repay(
5769
6414
  obligationInfo.obligationId,
5770
6415
  suiCoin,
5771
6416
  poolCoinName
@@ -5778,7 +6423,7 @@ var generateCoreQuickMethod = ({
5778
6423
  sender
5779
6424
  );
5780
6425
  txBlock.transferObjects([leftCoin], sender);
5781
- return txBlock.repay(
6426
+ return await txBlock.repay(
5782
6427
  obligationInfo.obligationId,
5783
6428
  takeCoin,
5784
6429
  poolCoinName
@@ -5786,7 +6431,7 @@ var generateCoreQuickMethod = ({
5786
6431
  }
5787
6432
  },
5788
6433
  updateAssetPricesQuick: async (assetCoinNames) => {
5789
- return updateOracles(builder, txBlock, assetCoinNames);
6434
+ return await updateOracles(builder, txBlock, assetCoinNames);
5790
6435
  }
5791
6436
  };
5792
6437
  };
@@ -5820,7 +6465,7 @@ var newCoreTxBlock = (builder, initTxBlock) => {
5820
6465
 
5821
6466
  // src/builders/spoolBuilder.ts
5822
6467
  var import_transactions2 = require("@mysten/sui/transactions");
5823
- var import_utils15 = require("@mysten/sui/utils");
6468
+ var import_utils16 = require("@mysten/sui/utils");
5824
6469
  var import_sui_kit6 = require("@scallop-io/sui-kit");
5825
6470
  var requireStakeAccountIds = async (...params) => {
5826
6471
  const [builder, txBlock, stakeMarketCoinName, stakeAccountId] = params;
@@ -5849,10 +6494,10 @@ var stakeHelper = async (builder, txBlock, stakeAccount, coinName, amount, sende
5849
6494
  try {
5850
6495
  const { takeCoin, leftCoin, totalAmount } = isSCoin ? await builder.selectSCoin(txBlock, coinName, amount, sender) : await builder.selectMarketCoin(txBlock, coinName, amount, sender);
5851
6496
  if (isSCoin) {
5852
- const marketCoin = txBlock.burnSCoin(coinName, takeCoin);
5853
- txBlock.stake(stakeAccount, marketCoin, coinName);
6497
+ const marketCoin = await txBlock.burnSCoin(coinName, takeCoin);
6498
+ await txBlock.stake(stakeAccount, marketCoin, coinName);
5854
6499
  } else {
5855
- txBlock.stake(stakeAccount, takeCoin, coinName);
6500
+ await txBlock.stake(stakeAccount, takeCoin, coinName);
5856
6501
  }
5857
6502
  txBlock.transferObjects([leftCoin], sender);
5858
6503
  return totalAmount;
@@ -5868,40 +6513,43 @@ var generateSpoolNormalMethod = ({
5868
6513
  spoolPkg: builder.address.get("spool.id")
5869
6514
  };
5870
6515
  return {
5871
- createStakeAccount: (stakeMarketCoinName) => {
6516
+ createStakeAccount: async (stakeMarketCoinName) => {
5872
6517
  const marketCoinType = builder.utils.parseMarketCoinType(stakeMarketCoinName);
5873
6518
  const stakePoolId = builder.address.get(
5874
6519
  `spool.pools.${stakeMarketCoinName}.id`
5875
6520
  );
5876
- return txBlock.moveCall(
6521
+ return await builder.moveCall(
6522
+ txBlock,
5877
6523
  `${spoolIds.spoolPkg}::user::new_spool_account`,
5878
- [stakePoolId, import_utils15.SUI_CLOCK_OBJECT_ID],
6524
+ [stakePoolId, import_utils16.SUI_CLOCK_OBJECT_ID],
5879
6525
  [marketCoinType]
5880
6526
  );
5881
6527
  },
5882
- stake: (stakeAccount, coin, stakeMarketCoinName) => {
6528
+ stake: async (stakeAccount, coin, stakeMarketCoinName) => {
5883
6529
  const marketCoinType = builder.utils.parseMarketCoinType(stakeMarketCoinName);
5884
6530
  const stakePoolId = builder.address.get(
5885
6531
  `spool.pools.${stakeMarketCoinName}.id`
5886
6532
  );
5887
- txBlock.moveCall(
6533
+ await builder.moveCall(
6534
+ txBlock,
5888
6535
  `${spoolIds.spoolPkg}::user::stake`,
5889
- [stakePoolId, stakeAccount, coin, import_utils15.SUI_CLOCK_OBJECT_ID],
6536
+ [stakePoolId, stakeAccount, coin, import_utils16.SUI_CLOCK_OBJECT_ID],
5890
6537
  [marketCoinType]
5891
6538
  );
5892
6539
  },
5893
- unstake: (stakeAccount, amount, stakeMarketCoinName) => {
6540
+ unstake: async (stakeAccount, amount, stakeMarketCoinName) => {
5894
6541
  const marketCoinType = builder.utils.parseMarketCoinType(stakeMarketCoinName);
5895
6542
  const stakePoolId = builder.address.get(
5896
6543
  `spool.pools.${stakeMarketCoinName}.id`
5897
6544
  );
5898
- return txBlock.moveCall(
6545
+ return await builder.moveCall(
6546
+ txBlock,
5899
6547
  `${spoolIds.spoolPkg}::user::unstake`,
5900
- [stakePoolId, stakeAccount, amount, import_utils15.SUI_CLOCK_OBJECT_ID],
6548
+ [stakePoolId, stakeAccount, amount, import_utils16.SUI_CLOCK_OBJECT_ID],
5901
6549
  [marketCoinType]
5902
6550
  );
5903
6551
  },
5904
- claim: (stakeAccount, stakeMarketCoinName) => {
6552
+ claim: async (stakeAccount, stakeMarketCoinName) => {
5905
6553
  const stakePoolId = builder.address.get(
5906
6554
  `spool.pools.${stakeMarketCoinName}.id`
5907
6555
  );
@@ -5911,9 +6559,10 @@ var generateSpoolNormalMethod = ({
5911
6559
  const marketCoinType = builder.utils.parseMarketCoinType(stakeMarketCoinName);
5912
6560
  const rewardCoinName = spoolRewardCoins[stakeMarketCoinName];
5913
6561
  const rewardCoinType = builder.utils.parseCoinType(rewardCoinName);
5914
- return txBlock.moveCall(
6562
+ return await builder.moveCall(
6563
+ txBlock,
5915
6564
  `${spoolIds.spoolPkg}::user::redeem_rewards`,
5916
- [stakePoolId, rewardPoolId, stakeAccount, import_utils15.SUI_CLOCK_OBJECT_ID],
6565
+ [stakePoolId, rewardPoolId, stakeAccount, import_utils16.SUI_CLOCK_OBJECT_ID],
5917
6566
  [marketCoinType, rewardCoinType]
5918
6567
  );
5919
6568
  }
@@ -5976,13 +6625,16 @@ var generateSpoolQuickMethod = ({
5976
6625
  if (account.staked === 0)
5977
6626
  continue;
5978
6627
  const amountToUnstake = Math.min(amount, account.staked);
5979
- const marketCoin = txBlock.unstake(
6628
+ const marketCoin = await txBlock.unstake(
5980
6629
  account.id,
5981
6630
  amountToUnstake,
5982
6631
  stakeMarketCoinName
5983
6632
  );
5984
6633
  if (returnSCoin) {
5985
- const sCoin = txBlock.mintSCoin(stakeMarketCoinName, marketCoin);
6634
+ const sCoin = await txBlock.mintSCoin(
6635
+ stakeMarketCoinName,
6636
+ marketCoin
6637
+ );
5986
6638
  toTransfer.push(sCoin);
5987
6639
  } else {
5988
6640
  toTransfer.push(marketCoin);
@@ -6008,7 +6660,7 @@ var generateSpoolQuickMethod = ({
6008
6660
  );
6009
6661
  const rewardCoins = [];
6010
6662
  for (const accountId of stakeAccountIds) {
6011
- const rewardCoin = txBlock.claim(accountId, stakeMarketCoinName);
6663
+ const rewardCoin = await txBlock.claim(accountId, stakeMarketCoinName);
6012
6664
  rewardCoins.push(rewardCoin);
6013
6665
  }
6014
6666
  return rewardCoins;
@@ -6045,7 +6697,7 @@ var newSpoolTxBlock = (builder, initTxBlock) => {
6045
6697
 
6046
6698
  // src/builders/borrowIncentiveBuilder.ts
6047
6699
  var import_transactions3 = require("@mysten/sui/transactions");
6048
- var import_utils17 = require("@mysten/sui/utils");
6700
+ var import_utils18 = require("@mysten/sui/utils");
6049
6701
  var import_sui_kit7 = require("@scallop-io/sui-kit");
6050
6702
  var requireObligationInfo2 = async (...params) => {
6051
6703
  const [builder, txBlock, obligationId, obligationKey] = params;
@@ -6087,8 +6739,9 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
6087
6739
  config: builder.address.get("vesca.config")
6088
6740
  };
6089
6741
  return {
6090
- stakeObligation: (obligationId, obligationKey) => {
6091
- txBlock.moveCall(
6742
+ stakeObligation: async (obligationId, obligationKey) => {
6743
+ await builder.moveCall(
6744
+ txBlock,
6092
6745
  `${borrowIncentiveIds.borrowIncentivePkg}::user::stake`,
6093
6746
  [
6094
6747
  borrowIncentiveIds.config,
@@ -6097,12 +6750,13 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
6097
6750
  obligationKey,
6098
6751
  obligationId,
6099
6752
  borrowIncentiveIds.obligationAccessStore,
6100
- import_utils17.SUI_CLOCK_OBJECT_ID
6753
+ import_utils18.SUI_CLOCK_OBJECT_ID
6101
6754
  ]
6102
6755
  );
6103
6756
  },
6104
- stakeObligationWithVesca: (obligationId, obligationKey, veScaKey) => {
6105
- txBlock.moveCall(
6757
+ stakeObligationWithVesca: async (obligationId, obligationKey, veScaKey) => {
6758
+ await builder.moveCall(
6759
+ txBlock,
6106
6760
  `${borrowIncentiveIds.borrowIncentivePkg}::user::stake_with_ve_sca`,
6107
6761
  [
6108
6762
  borrowIncentiveIds.config,
@@ -6115,13 +6769,14 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
6115
6769
  veScaIds.treasury,
6116
6770
  veScaIds.table,
6117
6771
  veScaKey,
6118
- import_utils17.SUI_CLOCK_OBJECT_ID
6772
+ import_utils18.SUI_CLOCK_OBJECT_ID
6119
6773
  ],
6120
6774
  []
6121
6775
  );
6122
6776
  },
6123
- unstakeObligation: (obligationId, obligationKey) => {
6124
- txBlock.moveCall(
6777
+ unstakeObligation: async (obligationId, obligationKey) => {
6778
+ await builder.moveCall(
6779
+ txBlock,
6125
6780
  `${borrowIncentiveIds.borrowIncentivePkg}::user::unstake`,
6126
6781
  [
6127
6782
  borrowIncentiveIds.config,
@@ -6129,13 +6784,14 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
6129
6784
  borrowIncentiveIds.incentiveAccounts,
6130
6785
  obligationKey,
6131
6786
  obligationId,
6132
- import_utils17.SUI_CLOCK_OBJECT_ID
6787
+ import_utils18.SUI_CLOCK_OBJECT_ID
6133
6788
  ]
6134
6789
  );
6135
6790
  },
6136
- claimBorrowIncentive: (obligationId, obligationKey, rewardCoinName) => {
6791
+ claimBorrowIncentive: async (obligationId, obligationKey, rewardCoinName) => {
6137
6792
  const rewardType = builder.utils.parseCoinType(rewardCoinName);
6138
- return txBlock.moveCall(
6793
+ return await builder.moveCall(
6794
+ txBlock,
6139
6795
  `${borrowIncentiveIds.borrowIncentivePkg}::user::redeem_rewards`,
6140
6796
  [
6141
6797
  borrowIncentiveIds.config,
@@ -6143,13 +6799,14 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
6143
6799
  borrowIncentiveIds.incentiveAccounts,
6144
6800
  obligationKey,
6145
6801
  obligationId,
6146
- import_utils17.SUI_CLOCK_OBJECT_ID
6802
+ import_utils18.SUI_CLOCK_OBJECT_ID
6147
6803
  ],
6148
6804
  [rewardType]
6149
6805
  );
6150
6806
  },
6151
- deactivateBoost: (obligation, veScaKey) => {
6152
- return txBlock.moveCall(
6807
+ deactivateBoost: async (obligation, veScaKey) => {
6808
+ await builder.moveCall(
6809
+ txBlock,
6153
6810
  `${borrowIncentiveIds.borrowIncentivePkg}::user::deactivate_boost`,
6154
6811
  [
6155
6812
  borrowIncentiveIds.config,
@@ -6157,7 +6814,7 @@ var generateBorrowIncentiveNormalMethod = ({ builder, txBlock }) => {
6157
6814
  borrowIncentiveIds.incentiveAccounts,
6158
6815
  obligation,
6159
6816
  veScaKey,
6160
- import_utils17.SUI_CLOCK_OBJECT_ID
6817
+ import_utils18.SUI_CLOCK_OBJECT_ID
6161
6818
  ]
6162
6819
  );
6163
6820
  }
@@ -6180,7 +6837,7 @@ var generateBorrowIncentiveQuickMethod = ({ builder, txBlock }) => {
6180
6837
  (txn) => txn.kind === "MoveCall" && (txn.target === `${OLD_BORROW_INCENTIVE_PROTOCOL_ID}::user::unstake` || txn.target === `${builder.address.get("borrowIncentive.id")}::user::unstake`)
6181
6838
  );
6182
6839
  if (!obligationLocked || unstakeObligationBeforeStake) {
6183
- txBlock.stakeObligation(obligationArg, obligationKeyArg);
6840
+ await txBlock.stakeObligation(obligationArg, obligationKeyArg);
6184
6841
  }
6185
6842
  },
6186
6843
  stakeObligationWithVeScaQuick: async (obligation, obligationKey, veScaKey) => {
@@ -6201,9 +6858,9 @@ var generateBorrowIncentiveQuickMethod = ({ builder, txBlock }) => {
6201
6858
  const bindedVeScaKey = await builder.query.getBindedVeScaKey(obligationArg);
6202
6859
  const _veScaKey = bindedVeScaKey ?? veScaKey;
6203
6860
  if (!_veScaKey) {
6204
- txBlock.stakeObligation(obligationArg, obligationKeyArg);
6861
+ await txBlock.stakeObligation(obligationArg, obligationKeyArg);
6205
6862
  } else {
6206
- txBlock.stakeObligationWithVesca(
6863
+ await txBlock.stakeObligationWithVesca(
6207
6864
  obligationArg,
6208
6865
  obligationKeyArg,
6209
6866
  _veScaKey
@@ -6223,7 +6880,7 @@ var generateBorrowIncentiveQuickMethod = ({ builder, txBlock }) => {
6223
6880
  obligationKey
6224
6881
  );
6225
6882
  if (obligationLocked) {
6226
- txBlock.unstakeObligation(obligationArg, obligationKeyArg);
6883
+ await txBlock.unstakeObligation(obligationArg, obligationKeyArg);
6227
6884
  }
6228
6885
  },
6229
6886
  claimBorrowIncentiveQuick: async (rewardCoinName, obligation, obligationKey) => {
@@ -6233,7 +6890,7 @@ var generateBorrowIncentiveQuickMethod = ({ builder, txBlock }) => {
6233
6890
  obligation,
6234
6891
  obligationKey
6235
6892
  );
6236
- return txBlock.claimBorrowIncentive(
6893
+ return await txBlock.claimBorrowIncentive(
6237
6894
  obligationArg,
6238
6895
  obligationKeyArg,
6239
6896
  rewardCoinName
@@ -6298,8 +6955,9 @@ var generateNormalVeScaMethod = ({
6298
6955
  config: builder.address.get("vesca.config")
6299
6956
  };
6300
6957
  return {
6301
- lockSca: (scaCoin, unlockAtInSecondTimestamp) => {
6302
- return txBlock.moveCall(
6958
+ lockSca: async (scaCoin, unlockAtInSecondTimestamp) => {
6959
+ return await builder.moveCall(
6960
+ txBlock,
6303
6961
  `${veScaIds.pkgId}::ve_sca::mint_ve_sca_key`,
6304
6962
  [
6305
6963
  veScaIds.config,
@@ -6312,8 +6970,9 @@ var generateNormalVeScaMethod = ({
6312
6970
  []
6313
6971
  );
6314
6972
  },
6315
- extendLockPeriod: (veScaKey, newUnlockAtInSecondTimestamp) => {
6316
- txBlock.moveCall(
6973
+ extendLockPeriod: async (veScaKey, newUnlockAtInSecondTimestamp) => {
6974
+ await builder.moveCall(
6975
+ txBlock,
6317
6976
  `${veScaIds.pkgId}::ve_sca::extend_lock_period`,
6318
6977
  [
6319
6978
  veScaIds.config,
@@ -6326,8 +6985,9 @@ var generateNormalVeScaMethod = ({
6326
6985
  []
6327
6986
  );
6328
6987
  },
6329
- extendLockAmount: (veScaKey, scaCoin) => {
6330
- txBlock.moveCall(
6988
+ extendLockAmount: async (veScaKey, scaCoin) => {
6989
+ await builder.moveCall(
6990
+ txBlock,
6331
6991
  `${veScaIds.pkgId}::ve_sca::lock_more_sca`,
6332
6992
  [
6333
6993
  veScaIds.config,
@@ -6340,8 +7000,9 @@ var generateNormalVeScaMethod = ({
6340
7000
  []
6341
7001
  );
6342
7002
  },
6343
- renewExpiredVeSca: (veScaKey, scaCoin, newUnlockAtInSecondTimestamp) => {
6344
- txBlock.moveCall(
7003
+ renewExpiredVeSca: async (veScaKey, scaCoin, newUnlockAtInSecondTimestamp) => {
7004
+ await builder.moveCall(
7005
+ txBlock,
6345
7006
  `${veScaIds.pkgId}::ve_sca::renew_expired_ve_sca`,
6346
7007
  [
6347
7008
  veScaIds.config,
@@ -6355,8 +7016,9 @@ var generateNormalVeScaMethod = ({
6355
7016
  []
6356
7017
  );
6357
7018
  },
6358
- redeemSca: (veScaKey) => {
6359
- return txBlock.moveCall(
7019
+ redeemSca: async (veScaKey) => {
7020
+ return await builder.moveCall(
7021
+ txBlock,
6360
7022
  `${veScaIds.pkgId}::ve_sca::redeem`,
6361
7023
  [
6362
7024
  veScaIds.config,
@@ -6368,8 +7030,9 @@ var generateNormalVeScaMethod = ({
6368
7030
  []
6369
7031
  );
6370
7032
  },
6371
- mintEmptyVeSca: () => {
6372
- return txBlock.moveCall(
7033
+ mintEmptyVeSca: async () => {
7034
+ return await builder.moveCall(
7035
+ txBlock,
6373
7036
  `${veScaIds.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,
6374
7037
  [veScaIds.config, veScaIds.table],
6375
7038
  []
@@ -6507,7 +7170,7 @@ var generateQuickVeScaMethod = ({
6507
7170
  const veSca = await requireVeSca(builder, txBlock, veScaKey);
6508
7171
  checkVesca(veSca?.unlockAt);
6509
7172
  if (veSca) {
6510
- const sca = txBlock.redeemSca(veSca.keyId);
7173
+ const sca = await txBlock.redeemSca(veSca.keyId);
6511
7174
  if (transferSca) {
6512
7175
  txBlock.transferObjects([sca], sender);
6513
7176
  return;
@@ -6563,8 +7226,9 @@ var generateReferralNormalMethod = ({
6563
7226
  };
6564
7227
  const veScaTable = builder.address.get("vesca.table");
6565
7228
  return {
6566
- bindToReferral: (veScaKeyId) => {
6567
- return txBlock.moveCall(
7229
+ bindToReferral: async (veScaKeyId) => {
7230
+ await builder.moveCall(
7231
+ txBlock,
6568
7232
  `${referralIds.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,
6569
7233
  [
6570
7234
  referralIds.referralBindings,
@@ -6575,9 +7239,10 @@ var generateReferralNormalMethod = ({
6575
7239
  []
6576
7240
  );
6577
7241
  },
6578
- claimReferralTicket: (poolCoinName) => {
7242
+ claimReferralTicket: async (poolCoinName) => {
6579
7243
  const coinType = builder.utils.parseCoinType(poolCoinName);
6580
- return txBlock.moveCall(
7244
+ return await builder.moveCall(
7245
+ txBlock,
6581
7246
  `${referralIds.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,
6582
7247
  [
6583
7248
  referralIds.version,
@@ -6590,9 +7255,10 @@ var generateReferralNormalMethod = ({
6590
7255
  [coinType]
6591
7256
  );
6592
7257
  },
6593
- burnReferralTicket: (ticket, poolCoinName) => {
7258
+ burnReferralTicket: async (ticket, poolCoinName) => {
6594
7259
  const coinType = builder.utils.parseCoinType(poolCoinName);
6595
- return txBlock.moveCall(
7260
+ await builder.moveCall(
7261
+ txBlock,
6596
7262
  `${referralIds.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,
6597
7263
  [
6598
7264
  referralIds.version,
@@ -6603,9 +7269,10 @@ var generateReferralNormalMethod = ({
6603
7269
  [coinType]
6604
7270
  );
6605
7271
  },
6606
- claimReferralRevenue: (veScaKey, poolCoinName) => {
7272
+ claimReferralRevenue: async (veScaKey, poolCoinName) => {
6607
7273
  const coinType = builder.utils.parseCoinType(poolCoinName);
6608
- return txBlock.moveCall(
7274
+ return await builder.moveCall(
7275
+ txBlock,
6609
7276
  `${referralIds.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,
6610
7277
  [
6611
7278
  referralIds.version,
@@ -6628,10 +7295,16 @@ var generateReferralQuickMethod = ({
6628
7295
  const objToTransfer = [];
6629
7296
  for (const coinName of coinNames) {
6630
7297
  if (coinName === "sui") {
6631
- const rewardCoin = txBlock.claimReferralRevenue(veScaKey, coinName);
7298
+ const rewardCoin = await txBlock.claimReferralRevenue(
7299
+ veScaKey,
7300
+ coinName
7301
+ );
6632
7302
  objToTransfer.push(rewardCoin);
6633
7303
  } else {
6634
- const rewardCoin = txBlock.claimReferralRevenue(veScaKey, coinName);
7304
+ const rewardCoin = await txBlock.claimReferralRevenue(
7305
+ veScaKey,
7306
+ coinName
7307
+ );
6635
7308
  try {
6636
7309
  const coins = await builder.suiKit.suiInteractor.selectCoins(
6637
7310
  sender,
@@ -6691,8 +7364,9 @@ var generateLoyaltyProgramNormalMethod = ({ builder, txBlock }) => {
6691
7364
  )
6692
7365
  };
6693
7366
  return {
6694
- claimLoyaltyRevenue: (veScaKey) => {
6695
- return txBlock.moveCall(
7367
+ claimLoyaltyRevenue: async (veScaKey) => {
7368
+ return await builder.moveCall(
7369
+ txBlock,
6696
7370
  `${loyaltyProgramIds.loyaltyProgramPkgId}::reward_pool::redeem_reward`,
6697
7371
  [loyaltyProgramIds.rewardPool, veScaKey]
6698
7372
  );
@@ -6709,7 +7383,7 @@ var generateLoyaltyProgramQuickMethod = ({
6709
7383
  const sender = requireSender(txBlock);
6710
7384
  if (!veScaKey)
6711
7385
  throw new Error(`No veScaKey found for user ${sender}`);
6712
- const rewardCoin = txBlock.claimLoyaltyRevenue(veScaKey);
7386
+ const rewardCoin = await txBlock.claimLoyaltyRevenue(veScaKey);
6713
7387
  await builder.utils.mergeSimilarCoins(
6714
7388
  txBlock,
6715
7389
  rewardCoin,
@@ -6758,8 +7432,9 @@ var generateSCoinNormalMethod = ({
6758
7432
  pkgId: builder.address.get("scoin.id")
6759
7433
  };
6760
7434
  return {
6761
- mintSCoin: (marketCoinName, marketCoin) => {
6762
- return txBlock.moveCall(
7435
+ mintSCoin: async (marketCoinName, marketCoin) => {
7436
+ return await builder.moveCall(
7437
+ txBlock,
6763
7438
  `${sCoinPkgIds.pkgId}::s_coin_converter::mint_s_coin`,
6764
7439
  [builder.utils.getSCoinTreasury(marketCoinName), marketCoin],
6765
7440
  [
@@ -6768,8 +7443,9 @@ var generateSCoinNormalMethod = ({
6768
7443
  ]
6769
7444
  );
6770
7445
  },
6771
- burnSCoin: (sCoinName, sCoin) => {
6772
- return txBlock.moveCall(
7446
+ burnSCoin: async (sCoinName, sCoin) => {
7447
+ return await builder.moveCall(
7448
+ txBlock,
6773
7449
  `${sCoinPkgIds.pkgId}::s_coin_converter::burn_s_coin`,
6774
7450
  [builder.utils.getSCoinTreasury(sCoinName), sCoin],
6775
7451
  [
@@ -6794,7 +7470,7 @@ var generateSCoinQuickMethod = ({
6794
7470
  sender
6795
7471
  );
6796
7472
  txBlock.transferObjects([leftCoin], sender);
6797
- return txBlock.mintSCoin(marketCoinName, takeCoin);
7473
+ return await txBlock.mintSCoin(marketCoinName, takeCoin);
6798
7474
  },
6799
7475
  burnSCoinQuick: async (sCoinName, amount) => {
6800
7476
  const sender = requireSender(txBlock);
@@ -6805,7 +7481,7 @@ var generateSCoinQuickMethod = ({
6805
7481
  sender
6806
7482
  );
6807
7483
  txBlock.transferObjects([leftCoin], sender);
6808
- return txBlock.burnSCoin(sCoinName, takeCoin);
7484
+ return await txBlock.burnSCoin(sCoinName, takeCoin);
6809
7485
  }
6810
7486
  };
6811
7487
  };
@@ -7047,12 +7723,12 @@ var ScallopIndexer = class {
7047
7723
  };
7048
7724
 
7049
7725
  // src/models/scallopQuery.ts
7050
- var import_utils23 = require("@mysten/sui/utils");
7726
+ var import_utils24 = require("@mysten/sui/utils");
7051
7727
  var ScallopQuery = class {
7052
7728
  constructor(params, instance) {
7053
7729
  this.params = params;
7054
7730
  this.suiKit = instance?.suiKit ?? instance?.utils?.suiKit ?? newSuiKit(params);
7055
- this.walletAddress = (0, import_utils23.normalizeSuiAddress)(
7731
+ this.walletAddress = (0, import_utils24.normalizeSuiAddress)(
7056
7732
  params.walletAddress ?? this.suiKit.currentAddress()
7057
7733
  );
7058
7734
  if (instance?.utils) {
@@ -7127,6 +7803,7 @@ var ScallopQuery = class {
7127
7803
  }
7128
7804
  /* ==================== Core Query Methods ==================== */
7129
7805
  /**
7806
+ * @deprecated use getMarketPools
7130
7807
  * Query market data.
7131
7808
  * @param indexer - Whether to use indexer.
7132
7809
  * @return Market data.
@@ -7145,7 +7822,7 @@ var ScallopQuery = class {
7145
7822
  * @param indexer - Whether to use indexer.
7146
7823
  * @return Market pools data.
7147
7824
  */
7148
- async getMarketPools(poolCoinNames, args) {
7825
+ async getMarketPools(poolCoinNames = [...SUPPORT_POOLS], args) {
7149
7826
  return await getMarketPools(
7150
7827
  this,
7151
7828
  poolCoinNames,
@@ -7161,13 +7838,8 @@ var ScallopQuery = class {
7161
7838
  * @return Market pool data.
7162
7839
  */
7163
7840
  async getMarketPool(poolCoinName, args) {
7164
- return await getMarketPool(
7165
- this,
7166
- poolCoinName,
7167
- args?.indexer,
7168
- args?.marketObject,
7169
- args?.coinPrice
7170
- );
7841
+ const marketPools = await this.getMarketPools(void 0, args);
7842
+ return marketPools.pools[poolCoinName];
7171
7843
  }
7172
7844
  /**
7173
7845
  * Get market collaterals.
@@ -7294,13 +7966,8 @@ var ScallopQuery = class {
7294
7966
  * @return Spool data.
7295
7967
  */
7296
7968
  async getSpool(stakeMarketCoinName, args) {
7297
- return await getSpool(
7298
- this,
7299
- stakeMarketCoinName,
7300
- args?.indexer,
7301
- args?.marketPool,
7302
- args?.coinPrices
7303
- );
7969
+ const spools = await this.getSpools(void 0, args);
7970
+ return spools[stakeMarketCoinName];
7304
7971
  }
7305
7972
  /**
7306
7973
  * Get stake accounts data for all stake pools (spools).
@@ -7466,11 +8133,9 @@ var ScallopQuery = class {
7466
8133
  * @return Borrowing and collateral information.
7467
8134
  */
7468
8135
  async getObligationAccount(obligationId, ownerAddress = this.walletAddress, args) {
7469
- return await getObligationAccount(
7470
- this,
7471
- obligationId,
7472
- ownerAddress,
7473
- args?.indexer
8136
+ const results = await this.getObligationAccounts(ownerAddress, args);
8137
+ return Object.values(results).find(
8138
+ (obligation) => obligation?.obligationId === obligationId
7474
8139
  );
7475
8140
  }
7476
8141
  /**
@@ -7605,7 +8270,7 @@ var ScallopQuery = class {
7605
8270
  * Get list of isolated assets
7606
8271
  */
7607
8272
  async getIsolatedAssets() {
7608
- return await getIsolatedAssets(this.address);
8273
+ return await getIsolatedAssets(this);
7609
8274
  }
7610
8275
  /**
7611
8276
  * Check if asset is an isolated asset
@@ -7628,6 +8293,13 @@ var ScallopQuery = class {
7628
8293
  async getAllCoinPrices(args) {
7629
8294
  return getAllCoinPrices(this, args?.marketPools, args?.coinPrices);
7630
8295
  }
8296
+ /**
8297
+ * Query all address (lending pool, collateral pool, borrow dynamics, interest models) of all pool
8298
+ * @returns
8299
+ */
8300
+ async getPoolAddresses() {
8301
+ return getAllAddresses(this);
8302
+ }
7631
8303
  };
7632
8304
 
7633
8305
  // src/models/scallopBuilder.ts
@@ -7635,7 +8307,7 @@ var ScallopBuilder = class {
7635
8307
  constructor(params, instance) {
7636
8308
  this.suiKit = instance?.suiKit ?? newSuiKit(params);
7637
8309
  this.params = params;
7638
- this.walletAddress = (0, import_utils24.normalizeSuiAddress)(
8310
+ this.walletAddress = (0, import_utils25.normalizeSuiAddress)(
7639
8311
  params?.walletAddress ?? this.suiKit.currentAddress()
7640
8312
  );
7641
8313
  if (instance?.query) {
@@ -7686,7 +8358,6 @@ var ScallopBuilder = class {
7686
8358
  await this.address.read();
7687
8359
  }
7688
8360
  await this.query.init(force, this.address);
7689
- await this.utils.init(force, this.address);
7690
8361
  }
7691
8362
  /**
7692
8363
  * Create a scallop txBlock instance that enhances transaction block.
@@ -7775,6 +8446,9 @@ var ScallopBuilder = class {
7775
8446
  txBlock
7776
8447
  );
7777
8448
  }
8449
+ moveCall(txb, target, args, typeArgs) {
8450
+ return txb.moveCall(target, args, typeArgs);
8451
+ }
7778
8452
  };
7779
8453
 
7780
8454
  // src/models/scallopClient.ts
@@ -7782,7 +8456,7 @@ var ScallopClient = class {
7782
8456
  constructor(params, instance) {
7783
8457
  this.params = params;
7784
8458
  this.suiKit = instance?.suiKit ?? instance?.builder?.suiKit ?? newSuiKit(params);
7785
- this.walletAddress = (0, import_utils25.normalizeSuiAddress)(
8459
+ this.walletAddress = (0, import_utils26.normalizeSuiAddress)(
7786
8460
  params?.walletAddress ?? this.suiKit.currentAddress()
7787
8461
  );
7788
8462
  if (instance?.builder) {
@@ -7921,7 +8595,7 @@ var ScallopClient = class {
7921
8595
  }
7922
8596
  async openObligation(sign = true) {
7923
8597
  const txBlock = this.builder.createTxBlock();
7924
- txBlock.openObligationEntry();
8598
+ await txBlock.openObligationEntry();
7925
8599
  if (sign) {
7926
8600
  return await this.suiKit.signAndSendTxn(
7927
8601
  txBlock
@@ -7943,9 +8617,9 @@ var ScallopClient = class {
7943
8617
  specificObligationId
7944
8618
  );
7945
8619
  } else {
7946
- const [obligation, obligationKey, hotPotato] = txBlock.openObligation();
8620
+ const [obligation, obligationKey, hotPotato] = await txBlock.openObligation();
7947
8621
  await txBlock.addCollateralQuick(amount, collateralCoinName, obligation);
7948
- txBlock.returnObligation(obligation, hotPotato);
8622
+ await txBlock.returnObligation(obligation, hotPotato);
7949
8623
  txBlock.transferObjects([obligationKey], sender);
7950
8624
  }
7951
8625
  if (sign) {
@@ -8015,7 +8689,7 @@ var ScallopClient = class {
8015
8689
  targetStakeAccount
8016
8690
  );
8017
8691
  } else {
8018
- const account = txBlock.createStakeAccount(stakeMarketCoinName);
8692
+ const account = await txBlock.createStakeAccount(stakeMarketCoinName);
8019
8693
  await txBlock.stakeQuick(marketCoin, stakeMarketCoinName, account);
8020
8694
  txBlock.transferObjects([account], sender);
8021
8695
  }
@@ -8112,8 +8786,12 @@ var ScallopClient = class {
8112
8786
  const txBlock = this.builder.createTxBlock();
8113
8787
  const sender = walletAddress ?? this.walletAddress;
8114
8788
  txBlock.setSender(sender);
8115
- const [coin, loan] = txBlock.borrowFlashLoan(amount, poolCoinName);
8116
- txBlock.repayFlashLoan(await callback(txBlock, coin), loan, poolCoinName);
8789
+ const [coin, loan] = await txBlock.borrowFlashLoan(amount, poolCoinName);
8790
+ await txBlock.repayFlashLoan(
8791
+ await callback(txBlock, coin),
8792
+ loan,
8793
+ poolCoinName
8794
+ );
8117
8795
  if (sign) {
8118
8796
  return await this.suiKit.signAndSendTxn(
8119
8797
  txBlock
@@ -8126,7 +8804,7 @@ var ScallopClient = class {
8126
8804
  const txBlock = this.builder.createTxBlock();
8127
8805
  const sender = walletAddress ?? this.walletAddress;
8128
8806
  txBlock.setSender(sender);
8129
- const stakeAccount = txBlock.createStakeAccount(marketCoinName);
8807
+ const stakeAccount = await txBlock.createStakeAccount(marketCoinName);
8130
8808
  txBlock.transferObjects([stakeAccount], sender);
8131
8809
  if (sign) {
8132
8810
  return await this.suiKit.signAndSendTxn(
@@ -8145,7 +8823,7 @@ var ScallopClient = class {
8145
8823
  if (targetStakeAccount) {
8146
8824
  await txBlock.stakeQuick(amount, stakeMarketCoinName, targetStakeAccount);
8147
8825
  } else {
8148
- const account = txBlock.createStakeAccount(stakeMarketCoinName);
8826
+ const account = await txBlock.createStakeAccount(stakeMarketCoinName);
8149
8827
  await txBlock.stakeQuick(amount, stakeMarketCoinName, account);
8150
8828
  txBlock.transferObjects([account], sender);
8151
8829
  }
@@ -8195,7 +8873,7 @@ var ScallopClient = class {
8195
8873
  );
8196
8874
  const stakeCoinName = this.utils.parseCoinName(stakeMarketCoinName);
8197
8875
  if (stakeMarketCoin) {
8198
- const coin = txBlock.withdraw(stakeMarketCoin, stakeCoinName);
8876
+ const coin = await txBlock.withdraw(stakeMarketCoin, stakeCoinName);
8199
8877
  await this.utils.mergeSimilarCoins(
8200
8878
  txBlock,
8201
8879
  coin,
@@ -8292,6 +8970,8 @@ var ScallopClient = class {
8292
8970
  txBlock.setSender(sender);
8293
8971
  const rewardCoinsCollection = {};
8294
8972
  const obligationAccount = await this.query.getObligationAccount(obligationId);
8973
+ if (!obligationAccount)
8974
+ throw new Error("Obligation not found");
8295
8975
  const rewardCoinNames = Object.values(obligationAccount.borrowIncentives).flatMap(
8296
8976
  ({ rewards }) => rewards.filter(({ availableClaimAmount }) => availableClaimAmount > 0)
8297
8977
  ).flatMap(({ coinName }) => coinName);
@@ -8354,7 +9034,7 @@ var ScallopClient = class {
8354
9034
  throw e;
8355
9035
  }
8356
9036
  if (toDestroyMarketCoin) {
8357
- const sCoin = txBlock.mintSCoin(
9037
+ const sCoin = await txBlock.mintSCoin(
8358
9038
  sCoinName,
8359
9039
  toDestroyMarketCoin
8360
9040
  );
@@ -8623,9 +9303,11 @@ var Scallop = class {
8623
9303
  ScallopQuery,
8624
9304
  ScallopUtils,
8625
9305
  TEST_ADDRESSES,
9306
+ TokenBucket,
8626
9307
  UNLOCK_ROUND_DURATION,
8627
9308
  USE_TEST_ADDRESS,
8628
9309
  assetCoins,
9310
+ callWithRateLimit,
8629
9311
  coinDecimals,
8630
9312
  coinIds,
8631
9313
  marketCoins,