@scallop-io/sui-scallop-sdk 1.3.3-alpha.2 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/constants/index.d.ts +0 -1
  2. package/dist/constants/queryKeys.d.ts +1 -2
  3. package/dist/index.js +1011 -1022
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +1011 -1021
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/models/scallopIndexer.d.ts +6 -0
  8. package/dist/models/scallopPrice.d.ts +0 -0
  9. package/dist/models/scallopQuery.d.ts +6 -0
  10. package/dist/queries/vescaQuery.d.ts +2 -2
  11. package/dist/types/query/core.d.ts +0 -1
  12. package/dist/types/query/portfolio.d.ts +1 -1
  13. package/dist/types/query/spool.d.ts +1 -0
  14. package/dist/types/query/vesca.d.ts +1 -1
  15. package/package.json +1 -1
  16. package/src/builders/borrowIncentiveBuilder.ts +3 -2
  17. package/src/constants/enum.ts +4 -11
  18. package/src/constants/index.ts +0 -1
  19. package/src/constants/queryKeys.ts +2 -2
  20. package/src/constants/testAddress.ts +35 -76
  21. package/src/models/scallopBuilder.ts +3 -2
  22. package/src/models/scallopClient.ts +3 -3
  23. package/src/models/scallopIndexer.ts +9 -0
  24. package/src/models/scallopPrice.ts +0 -0
  25. package/src/models/scallopQuery.ts +12 -4
  26. package/src/models/scallopUtils.ts +28 -39
  27. package/src/queries/coreQuery.ts +225 -230
  28. package/src/queries/isolatedAsset.ts +4 -4
  29. package/src/queries/portfolioQuery.ts +10 -6
  30. package/src/queries/referralQuery.ts +1 -0
  31. package/src/queries/spoolQuery.ts +2 -1
  32. package/src/queries/vescaQuery.ts +4 -6
  33. package/src/types/query/core.ts +0 -1
  34. package/src/types/query/portfolio.ts +1 -0
  35. package/src/types/query/spool.ts +1 -0
  36. package/src/types/query/vesca.ts +1 -1
package/dist/index.js CHANGED
@@ -62,7 +62,6 @@ __export(src_exports, {
62
62
  ScallopIndexer: () => ScallopIndexer,
63
63
  ScallopQuery: () => ScallopQuery,
64
64
  ScallopUtils: () => ScallopUtils,
65
- TEST_ADDRESSES: () => TEST_ADDRESSES,
66
65
  UNLOCK_ROUND_DURATION: () => UNLOCK_ROUND_DURATION,
67
66
  USE_TEST_ADDRESS: () => USE_TEST_ADDRESS,
68
67
  assetCoins: () => assetCoins,
@@ -337,20 +336,11 @@ var voloCoinIds = {
337
336
  var sCoinIds = {
338
337
  susdc: "0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC",
339
338
  ssbeth: "0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",
340
- // TODO: Change this to the correct value on production release
341
- ssui: "0xf569919046f19a0c40b519ecfbb6ca0319698cd5908716c29b62ef56541f298b::scallop_sui::SCALLOP_SUI",
342
- // ssui: '0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b::scallop_sui::SCALLOP_SUI',
339
+ ssui: "0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b::scallop_sui::SCALLOP_SUI",
343
340
  scetus: "0xea346ce428f91ab007210443efcea5f5cdbbb3aae7e9affc0ca93f9203c31f0c::scallop_cetus::SCALLOP_CETUS",
344
- // TODO: Change this to the correct value on production release
345
- ssca: "0x958428555e778e55918a59eb1c92c77f32b5c554fa3a5e56cd0815086b5072e7::scallop_sca::SCALLOP_SCA",
346
- // '0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e::scallop_sca::SCALLOP_SCA',
347
- // TODO: Change this to the correct value on production release
348
- swusdc: "0xf5447c4305a486d8c8557559887c2c39449ddb5e748f15d33946d02a1663c158::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
349
- // '0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC',
350
- swusdt: (
351
- // '0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT',
352
- "0xac781d9f73058ff5e69f9bf8dde32f2e8c71c66d7fe8497fc83b2d9182254b22::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT"
353
- ),
341
+ ssca: "0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e::scallop_sca::SCALLOP_SCA",
342
+ swusdc: "0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
343
+ swusdt: "0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
354
344
  sweth: "0x67540ceb850d418679e69f1fb6b2093d6df78a2a699ffc733f7646096d552e9b::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",
355
345
  safsui: "0x00671b1fa2a124f5be8bdae8b91ee711462c5d9e31bda232e70fd9607b523c88::scallop_af_sui::SCALLOP_AF_SUI",
356
346
  shasui: "0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",
@@ -451,10 +441,10 @@ var queryKeys = {
451
441
  ]
452
442
  },
453
443
  oracle: {
454
- getPythLatestPriceFeed: (pythPriceId, endpoint) => [
444
+ getPythLatestPriceFeed: (pythPriceId) => [
455
445
  "oracle",
456
446
  "getPythPriceId",
457
- { pythPriceId, endpoint }
447
+ { pythPriceId }
458
448
  ]
459
449
  }
460
450
  };
@@ -466,430 +456,6 @@ var MAX_LOCK_DURATION = MAX_LOCK_ROUNDS * UNLOCK_ROUND_DURATION;
466
456
  var MIN_INITIAL_LOCK_AMOUNT = 1e10;
467
457
  var MIN_TOP_UP_AMOUNT = 1e9;
468
458
 
469
- // src/constants/testAddress.ts
470
- var TEST_ADDRESSES = {
471
- core: {
472
- // version:
473
- // '0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7',
474
- version: "0xd318de9b0f6873879a82cbfcc2daa1d1591a8b54e7cea9f4b567da63c692a52b",
475
- versionCap: "0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",
476
- // object:
477
- // '0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf',
478
- object: "0x6c23585e940a989588432509107e98bae06dbca4e333f26d0635d401b3c7c76d",
479
- // market:
480
- // '0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9',
481
- market: "0x9d6434e97f3f98fd9b0c0e1dca22632073985abcd22541feae7ee1e34cbe3af2",
482
- adminCap: "0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",
483
- coinDecimalsRegistry: "0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",
484
- // obligationAccessStore:
485
- // '0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9',
486
- obligationAccessStore: "0x46e9b44a77ee9c9d33cc2689ecdfbb8f681935cbc6bdf6ac3df048e396c36c82",
487
- coins: {
488
- usdc: {
489
- id: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",
490
- metaData: "0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",
491
- treasury: "",
492
- oracle: {
493
- supra: "",
494
- switchboard: "",
495
- pyth: {
496
- feed: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
497
- feedObject: "0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"
498
- }
499
- }
500
- },
501
- cetus: {
502
- id: "0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",
503
- metaData: "0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",
504
- treasury: "",
505
- oracle: {
506
- supra: "",
507
- switchboard: "",
508
- pyth: {
509
- feed: "e5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",
510
- feedObject: "0x24c0247fb22457a719efac7f670cdc79be321b521460bd6bd2ccfa9f80713b14"
511
- }
512
- }
513
- },
514
- wapt: {
515
- id: "0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",
516
- metaData: "0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8",
517
- treasury: "",
518
- oracle: {
519
- supra: "",
520
- switchboard: "",
521
- pyth: {
522
- feed: "03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5",
523
- feedObject: "0x7c5b7837c44a69b469325463ac0673ac1aa8435ff44ddb4191c9ae380463647f"
524
- }
525
- }
526
- },
527
- wsol: {
528
- id: "0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",
529
- metaData: "0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e",
530
- treasury: "",
531
- oracle: {
532
- supra: "",
533
- switchboard: "",
534
- pyth: {
535
- feed: "ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",
536
- feedObject: "0x9d0d275efbd37d8a8855f6f2c761fa5983293dd8ce202ee5196626de8fcd4469"
537
- }
538
- }
539
- },
540
- wbtc: {
541
- id: "0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",
542
- metaData: "0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd",
543
- treasury: "",
544
- oracle: {
545
- supra: "",
546
- switchboard: "",
547
- pyth: {
548
- feed: "e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
549
- feedObject: "0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"
550
- }
551
- }
552
- },
553
- weth: {
554
- id: "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",
555
- metaData: "0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f",
556
- treasury: "",
557
- oracle: {
558
- supra: "",
559
- switchboard: "",
560
- pyth: {
561
- feed: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",
562
- feedObject: "0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"
563
- }
564
- }
565
- },
566
- wusdc: {
567
- id: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",
568
- metaData: "0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189",
569
- treasury: "",
570
- oracle: {
571
- supra: "",
572
- switchboard: "",
573
- pyth: {
574
- feed: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
575
- feedObject: "0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"
576
- }
577
- }
578
- },
579
- wusdt: {
580
- id: "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",
581
- metaData: "0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c",
582
- treasury: "",
583
- oracle: {
584
- supra: "",
585
- switchboard: "",
586
- pyth: {
587
- feed: "2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",
588
- feedObject: "0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"
589
- }
590
- }
591
- },
592
- sui: {
593
- id: "0x0000000000000000000000000000000000000000000000000000000000000002",
594
- metaData: "0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",
595
- treasury: "",
596
- oracle: {
597
- supra: "",
598
- switchboard: "0xbca474133638352ba83ccf7b5c931d50f764b09550e16612c9f70f1e21f3f594",
599
- pyth: {
600
- feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
601
- feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
602
- }
603
- }
604
- },
605
- afsui: {
606
- id: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",
607
- metaData: "0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",
608
- treasury: "",
609
- oracle: {
610
- supra: "",
611
- switchboard: "",
612
- pyth: {
613
- feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
614
- feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
615
- }
616
- }
617
- },
618
- hasui: {
619
- id: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",
620
- metaData: "0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",
621
- treasury: "",
622
- oracle: {
623
- supra: "",
624
- switchboard: "",
625
- pyth: {
626
- feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
627
- feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
628
- }
629
- }
630
- },
631
- vsui: {
632
- id: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",
633
- metaData: "0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd",
634
- treasury: "",
635
- oracle: {
636
- supra: "",
637
- switchboard: "",
638
- pyth: {
639
- feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
640
- feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
641
- }
642
- }
643
- },
644
- sca: {
645
- id: "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",
646
- metaData: "0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",
647
- treasury: "",
648
- oracle: {
649
- supra: "",
650
- switchboard: "",
651
- pyth: {
652
- feed: "7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",
653
- feedObject: "0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"
654
- }
655
- }
656
- },
657
- sbeth: {
658
- id: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29",
659
- metaData: "0x89b04ba87f8832d4d76e17a1c9dce72eb3e64d372cf02012b8d2de5384faeef0",
660
- treasury: "",
661
- oracle: {
662
- supra: "",
663
- switchboard: "",
664
- pyth: {
665
- feed: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",
666
- feedObject: "0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"
667
- }
668
- }
669
- }
670
- },
671
- oracles: {
672
- xOracle: "0x93d5bf0936b71eb27255941e532fac33b5a5c7759e377b4923af0a1359ad494f",
673
- xOracleCap: "0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",
674
- supra: { registry: "", registryCap: "", holder: "" },
675
- switchboard: { registry: "", registryCap: "" },
676
- pyth: {
677
- registry: "0xedc293f9413a5a7a5d53bdba1fd889d0a4030894469228f0acdae4aa3c55a213",
678
- registryCap: "0xbcb07141eb1f7e01fbda4130ecf5f5adaeabb77f5d9c32158b7532bcd2197acd",
679
- state: "0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",
680
- wormhole: "0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",
681
- wormholeState: "0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"
682
- }
683
- },
684
- packages: {
685
- coinDecimalsRegistry: {
686
- id: "0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",
687
- upgradeCap: "0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"
688
- },
689
- math: {
690
- id: "0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",
691
- upgradeCap: "0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"
692
- },
693
- whitelist: {
694
- id: "0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",
695
- upgradeCap: "0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"
696
- },
697
- x: {
698
- id: "0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",
699
- upgradeCap: "0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"
700
- },
701
- protocol: {
702
- id: "0x6c23585e940a989588432509107e98bae06dbca4e333f26d0635d401b3c7c76d",
703
- upgradeCap: "0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"
704
- },
705
- // protocol: {
706
- // id: '0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e',
707
- // upgradeCap:
708
- // '0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a',
709
- // },
710
- protocolWhitelist: {
711
- id: "0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",
712
- upgradeCap: "0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"
713
- },
714
- // query: {
715
- // id: '0xb8d603a39114a5efef3dd0bf84df0bed1be1fbd39b78b7dd6e8a61ccc5e6006f',
716
- // upgradeCap:
717
- // '0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f',
718
- // },
719
- query: {
720
- id: "0x89706958f43fb170de134579e3fbc53972b946ee78bd2442d8e1adc36074fbdc",
721
- upgradeCap: "0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"
722
- },
723
- supra: { id: "", upgradeCap: "" },
724
- pyth: {
725
- id: "0x910f30cbc7f601f75a5141a01265cd47c62d468707c5e1aecb32a18f448cb25a",
726
- upgradeCap: "0xdf0ffbae1ea5bb25fbca5efba433dcf00c7cced65679af2f04728901275c6157"
727
- },
728
- switchboard: { id: "", upgradeCap: "" },
729
- xOracle: {
730
- id: "0x1478a432123e4b3d61878b629f2c692969fdb375644f1251cd278a4b1e7d7cd6",
731
- upgradeCap: "0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"
732
- },
733
- testCoin: { id: "", upgradeCap: "" }
734
- }
735
- },
736
- spool: {
737
- // id: '0x7c4fdabe81c31b19a45d1e572a52a539997a90903fbb5bfab71480abe0fa62c3',
738
- id: "0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",
739
- adminCap: "0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",
740
- // object:
741
- // '0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a',
742
- object: "0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",
743
- pools: {
744
- sweth: {
745
- id: "0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",
746
- rewardPoolId: "0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"
747
- },
748
- ssui: {
749
- // id: '0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4',
750
- id: "0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",
751
- rewardPoolId: (
752
- // '0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9',
753
- "0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"
754
- )
755
- },
756
- susdc: {
757
- id: "0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",
758
- rewardPoolId: "0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"
759
- },
760
- swusdc: {
761
- // id: '0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0',
762
- id: "0xf1b383b9cf2e9f515fc69567df1053098f273849d09cd84b0278a773429bd2b2",
763
- rewardPoolId: (
764
- // '0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8',
765
- "0xc71c53ee6505d928ba15bea4fe4f45d98c9c31eced94b72d00a7827d4b7ba3ff"
766
- )
767
- },
768
- swusdt: {
769
- // id: '0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f',
770
- id: "0xb5567dfa5c7fc17a249e959732664c50713dd8c23db1a11376b27df800c17418",
771
- rewardPoolId: (
772
- // '0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080',
773
- "0x60768b0687ff0235e376a039709a683e4c436098785e473b67b32dbab47b69ab"
774
- )
775
- },
776
- scetus: {
777
- id: "0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",
778
- rewardPoolId: "0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"
779
- },
780
- safsui: {
781
- // id: '0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800',
782
- id: "0xc568bb4c991258e839aa54802ecda04fcd9838c826bc3b42b40af81b23c458c8",
783
- rewardPoolId: (
784
- // '0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e',
785
- "0x389a3cbeda742b918941bb24fd00e077bad3367484394d6234f8209b9a6aa03d"
786
- )
787
- },
788
- shasui: {
789
- // id: '0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa',
790
- id: "0x93f3f4499bf89f2d05ddc1f8b15f51701a7c6c4d0ac0b9c3bc99462cbbd8e321",
791
- rewardPoolId: (
792
- // '0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66',
793
- "0x94cee1be7f5ff34193f3aabef0b14142cb28af4d905fe487a9a7d85a15edb6aa"
794
- )
795
- },
796
- svsui: {
797
- // id: '0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670',
798
- id: "0xa970e9087f80cb59e9299b8e7af7175d977ad6c9af0322aa4440e138fbd7ae00",
799
- rewardPoolId: (
800
- // '0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a',
801
- "0x38eee9699c4fc132a6623e54b865f047df4fc6eb83af807300f44e8f4b235ff0"
802
- )
803
- }
804
- },
805
- config: ""
806
- },
807
- borrowIncentive: {
808
- id: "0x85769d63565ce99c7622f8e336ca1460926ddf29738ad2a39407b5cac29f61fe",
809
- adminCap: "0x56ac8e6f2b360b2b35c0168d72cc6cd17d9592afb83709865cb87af24bb2025b",
810
- object: "0x85769d63565ce99c7622f8e336ca1460926ddf29738ad2a39407b5cac29f61fe",
811
- query: "0x8e0d00f8ff1199d7c5fe56cea0e901a525daeefff0445a1635ace8282ae3302c",
812
- incentivePools: "0x9d564c93128c6ab0c0d3e050a47f11df0b91494f3bb779bdc1301c1c637f15eb",
813
- incentiveAccounts: "0x09e6040e798246de04941bc79a3ba62d3eca6d7a218cc30f21fb07f478fa2926",
814
- config: "0x43d4ca1dfc90b161c4240facd119e74e4b850cca2957f88c2ec289c9380da064"
815
- },
816
- referral: {
817
- id: "0x1bf5a8ce77050d8052549d743e16b469f15aa6b81b752b78b6ebb65179665f5a",
818
- object: "0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",
819
- adminCap: "0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",
820
- referralBindings: "0xcf184487782bed962bf678001efe775d31fb94b9992333a57594cf15d79d5ced",
821
- bindingTableId: "0x41a50e258c0a266ce84e0e1a618dbf70b878cc943909e613089a50afcceb2bc0",
822
- referralRevenuePool: "0xc24e3e5e37032f29a3dd91a9a1f057af8821b7e6c148e9683900ac8b6d30f0c6",
823
- revenueTableId: "0x595baa3654c297bff84ab7786a2d250f019cefc66e8df8e89fd9d41e02bd30dd",
824
- referralTiers: "0x144350f3db9b46d11b140084cd54e6de0b9c3b8d265ce8059b51d0ef58ea464b",
825
- tiersTableId: "0xeac755a7a8b7798530905ac79e8c114f19d0f130f6eab012954f08faac29c75d",
826
- // authorizedWitnessList:
827
- // '0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e',
828
- authorizedWitnessList: "0x9d6223dc52015b8a3986a573590ef2af8f1b8f3e4685513888c052f001b87e7f",
829
- version: "0x3545849eb97723e676a476ec9d4fe5f2eb0eb2c6b78972851114fd4c7ed4639f"
830
- },
831
- vesca: {
832
- id: "0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",
833
- object: "0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",
834
- adminCap: "0x8ffa76135c5b85c5fbd73a6448a4a733d826cb63a267ab817656acb77c72d4a5",
835
- tableId: "0x0a0b7f749baeb61e3dfee2b42245e32d0e6b484063f0a536b33e771d573d7246",
836
- table: "0xd3a4632b1080f7d96e1c2487d4dabf2c1196916937c505a69954ac9f393be8d0",
837
- treasury: "0xafa4b6231e49c15a22d641ce33fda761baaf650fa21899dfa2eb1716146e7306",
838
- config: "0x7cbcb0a342179577a117dfdff974cf1ab765d3b571067bf22ddf5f9e3a667922"
839
- },
840
- loyaltyProgram: {
841
- id: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
842
- object: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
843
- rewardPool: "0xf9c090492ef476bd542109d0913ffe871cbfa28578b7114eca2a8c0e5671786f",
844
- userRewardTableId: "0x748a80395849ed37db1b0e14f2ab5d1d96458d2359ab3a84eb079d0f4ac7cf2e"
845
- },
846
- scoin: {
847
- id: "0x773dab39c90fe05439b06a2d061795e52a974ff92c2aef90b2ee467acf7f33c8",
848
- coins: {
849
- ssui: {
850
- coinType: "0xf569919046f19a0c40b519ecfbb6ca0319698cd5908716c29b62ef56541f298b::scallop_sui::SCALLOP_SUI",
851
- treasury: "0x0e499640a12c38dd9cc44532f5bc5fd1b6da86d2f9a8810357250f4b26e9e5c7"
852
- },
853
- scetus: {
854
- coinType: "0x8b71e6d323ed78515af2bead13bf3d0da1562ba4a99234eb7c4f14fd39ef0427::scallop_cetus::SCALLOP_CETUS",
855
- treasury: "0xd786f4b2d26278cc7911a3445b1b085eab60f269ef9dbb6b87e803d52f155003"
856
- },
857
- ssca: {
858
- coinType: "0x958428555e778e55918a59eb1c92c77f32b5c554fa3a5e56cd0815086b5072e7::scallop_sca::SCALLOP_SCA",
859
- treasury: "0x5f1c5de1df7341075d119570269b7b452af50afe8363080638f1ae29a554c038"
860
- },
861
- swusdc: {
862
- coinType: "0xf5447c4305a486d8c8557559887c2c39449ddb5e748f15d33946d02a1663c158::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
863
- treasury: "0x471fbab72578bab577263006fe32543b6e76153fffa2bef69affe4bc4934258f"
864
- },
865
- swusdt: {
866
- coinType: "0xac781d9f73058ff5e69f9bf8dde32f2e8c71c66d7fe8497fc83b2d9182254b22::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
867
- treasury: "0x921a4ed4bb4b4f11f51a462c83f4c0f6b60a90e441d1bc0d26d6fd893146bf4d"
868
- },
869
- sweth: {
870
- coinType: "0x27d54f43e3eda701be56b82e5756e41c84467cd202f5cf713d5f9e45a9f1b6bc::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",
871
- treasury: "0x032b4c8fac94c038dbe986f7587e9b1e4ef580b5ee06d2ef249d85459b7ef05d"
872
- },
873
- safsui: {
874
- coinType: "0xb75b46d975d8d80670b53a6bee90baaa8ce2e0b7d397f079447d641eef6b44ad::scallop_af_sui::SCALLOP_AF_SUI",
875
- treasury: "0x21450ef0570ef3d224ffa3b873ab802e439ece7b93cc7efad10ae0c1e3b3fcfe"
876
- },
877
- shasui: {
878
- coinType: "0xd973a723874e2c7cde196602a79155a1343a933f8cf87d9b1bb7408bc1acbc58::scallop_ha_sui::SCALLOP_HA_SUI",
879
- treasury: "0xf822fc1402207e47d2e3ba8ff6e1e594bf1de777dc5ebd2744619cd2726e3b0d"
880
- },
881
- svsui: {
882
- coinType: "0x97023a317320c4498cc4cd239dd02fd30c28246e5e8f81325d63f2bd8d70f6b3::scallop_v_sui::SCALLOP_V_SUI",
883
- treasury: "0x327114f0bf3559d7e2de10282147ed76a236c7c6775029165c4db09a6062ead6"
884
- },
885
- ssbeth: {
886
- coinType: "0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",
887
- treasury: "0xfd0f02def6358a1f266acfa1493d4707ee8387460d434fb667d63d755ff907ed"
888
- }
889
- }
890
- }
891
- };
892
-
893
459
  // src/models/scallop.ts
894
460
  var import_sui_kit16 = require("@scallop-io/sui-kit");
895
461
 
@@ -1462,268 +1028,660 @@ var findClosestUnlockRound = (unlockAtInSecondTimestamp) => {
1462
1028
  if (unlockDate.getUTCHours() >= 0) {
1463
1029
  closestTwelveAM.setUTCDate(closestTwelveAM.getUTCDate() + 1);
1464
1030
  }
1465
- const now = (/* @__PURE__ */ new Date()).getTime();
1466
- if (closestTwelveAM.getTime() - now > MAX_LOCK_DURATION * 1e3) {
1467
- closestTwelveAM.setUTCDate(closestTwelveAM.getUTCDate() - 1);
1031
+ const now = (/* @__PURE__ */ new Date()).getTime();
1032
+ if (closestTwelveAM.getTime() - now > MAX_LOCK_DURATION * 1e3) {
1033
+ closestTwelveAM.setUTCDate(closestTwelveAM.getUTCDate() - 1);
1034
+ }
1035
+ return Math.floor(closestTwelveAM.getTime() / 1e3);
1036
+ };
1037
+
1038
+ // src/constants/tokenBucket.ts
1039
+ var DEFAULT_TOKENS_PER_INTERVAL = 50;
1040
+ var DEFAULT_INTERVAL_IN_MS = 300;
1041
+
1042
+ // src/utils/tokenBucket.ts
1043
+ var TokenBucket = class {
1044
+ constructor(tokensPerInterval, intervalInMs) {
1045
+ this.tokensPerInterval = tokensPerInterval;
1046
+ this.interval = intervalInMs;
1047
+ this.tokens = tokensPerInterval;
1048
+ this.lastRefill = Date.now();
1049
+ }
1050
+ refill() {
1051
+ const now = Date.now();
1052
+ const elapsed = now - this.lastRefill;
1053
+ if (elapsed > this.interval) {
1054
+ const tokensToAdd = Math.floor(elapsed / this.interval) * this.tokensPerInterval;
1055
+ this.tokens = Math.min(this.tokens + tokensToAdd, this.tokensPerInterval);
1056
+ this.lastRefill = now;
1057
+ }
1058
+ }
1059
+ removeTokens(count) {
1060
+ this.refill();
1061
+ if (this.tokens >= count) {
1062
+ this.tokens -= count;
1063
+ return true;
1064
+ }
1065
+ return false;
1066
+ }
1067
+ };
1068
+ var callWithRateLimit = async (tokenBucket, fn, retryDelayInMs = DEFAULT_INTERVAL_IN_MS, maxRetries = 15, backoffFactor = 1.25) => {
1069
+ let retries = 0;
1070
+ const tryRequest = async () => {
1071
+ if (tokenBucket.removeTokens(1)) {
1072
+ try {
1073
+ const result = await fn();
1074
+ if (result && result.status === 429) {
1075
+ throw new Error("Unexpected status code: 429");
1076
+ }
1077
+ return result;
1078
+ } catch (error) {
1079
+ if (error.message === "Unexpected status code: 429" && retries < maxRetries) {
1080
+ retries++;
1081
+ const delay = retryDelayInMs * Math.pow(backoffFactor, retries);
1082
+ await new Promise((resolve) => setTimeout(resolve, delay));
1083
+ return tryRequest();
1084
+ } else {
1085
+ console.error("An error occurred:", error.message);
1086
+ return null;
1087
+ }
1088
+ }
1089
+ } else if (retries < maxRetries) {
1090
+ retries++;
1091
+ const delay = retryDelayInMs * Math.pow(backoffFactor, retries);
1092
+ await new Promise((resolve) => setTimeout(resolve, delay));
1093
+ return tryRequest();
1094
+ } else {
1095
+ console.error("Maximum retries reached");
1096
+ return null;
1097
+ }
1098
+ };
1099
+ return tryRequest();
1100
+ };
1101
+
1102
+ // src/utils/indexer.ts
1103
+ async function callMethodWithIndexerFallback(method, context, ...args) {
1104
+ const indexer = args[args.length - 1];
1105
+ if (indexer) {
1106
+ try {
1107
+ return await method.apply(context, args);
1108
+ } catch (e) {
1109
+ console.warn(`Indexer requests failed: ${e}. Retrying without indexer..`);
1110
+ return await method.apply(context, [...args.slice(0, -1), false]);
1111
+ }
1112
+ }
1113
+ return await method.apply(context, args);
1114
+ }
1115
+ function withIndexerFallback(method) {
1116
+ return (...args) => {
1117
+ return callMethodWithIndexerFallback(method, this, ...args);
1118
+ };
1119
+ }
1120
+
1121
+ // src/models/scallopCache.ts
1122
+ var ScallopCache = class {
1123
+ constructor(suiKit, walletAddress, cacheOptions, tokenBucket, queryClient) {
1124
+ this.queryClient = queryClient ?? new import_query_core.QueryClient(cacheOptions ?? DEFAULT_CACHE_OPTIONS);
1125
+ this._suiKit = suiKit;
1126
+ this.tokenBucket = tokenBucket ?? new TokenBucket(DEFAULT_TOKENS_PER_INTERVAL, DEFAULT_INTERVAL_IN_MS);
1127
+ this.walletAddress = walletAddress ?? suiKit.currentAddress();
1128
+ }
1129
+ get suiKit() {
1130
+ if (!this._suiKit) {
1131
+ throw new Error("SuiKit instance is not initialized");
1132
+ }
1133
+ return this._suiKit;
1134
+ }
1135
+ get client() {
1136
+ return this.suiKit.client();
1137
+ }
1138
+ /**
1139
+ * @description Invalidate cache based on the refetchType parameter
1140
+ * @param refetchType Determines the type of queries to be refetched. Defaults to `active`.
1141
+ *
1142
+ * - `active`: Only queries that match the refetch predicate and are actively being rendered via useQuery and related functions will be refetched in the background.
1143
+ * - `inactive`: Only queries that match the refetch predicate and are NOT actively being rendered via useQuery and related functions will be refetched in the background.
1144
+ * - `all`: All queries that match the refetch predicate will be refetched in the background.
1145
+ * - `none`: No queries will be refetched. Queries that match the refetch predicate will only be marked as invalid.
1146
+ */
1147
+ async invalidateAllCache() {
1148
+ return Object.values(queryKeys.rpc).map(
1149
+ (t) => this.queryClient.invalidateQueries({
1150
+ queryKey: t(),
1151
+ type: "all"
1152
+ })
1153
+ );
1154
+ }
1155
+ /**
1156
+ * @description Provides cache for inspectTxn of the SuiKit.
1157
+ * @param QueryInspectTxnParams
1158
+ * @param txBlock
1159
+ * @returns Promise<DevInspectResults>
1160
+ */
1161
+ async queryInspectTxn({
1162
+ queryTarget,
1163
+ args,
1164
+ typeArgs
1165
+ }) {
1166
+ const txBlock = new import_sui_kit.SuiTxBlock();
1167
+ txBlock.moveCall(queryTarget, args, typeArgs);
1168
+ const query = await this.queryClient.fetchQuery({
1169
+ queryKey: queryKeys.rpc.getInspectTxn(queryTarget, args, typeArgs),
1170
+ queryFn: async () => {
1171
+ return await callWithRateLimit(
1172
+ this.tokenBucket,
1173
+ () => this.suiKit.inspectTxn(txBlock)
1174
+ );
1175
+ }
1176
+ });
1177
+ return query;
1178
+ }
1179
+ /**
1180
+ * @description Provides cache for getObject of the SuiKit.
1181
+ * @param objectId
1182
+ * @param QueryObjectParams
1183
+ * @returns Promise<SuiObjectResponse>
1184
+ */
1185
+ async queryGetObject(objectId, options) {
1186
+ return this.queryClient.fetchQuery({
1187
+ queryKey: queryKeys.rpc.getObject(objectId, this.walletAddress, options),
1188
+ queryFn: async () => {
1189
+ return await callWithRateLimit(
1190
+ this.tokenBucket,
1191
+ () => this.client.getObject({
1192
+ id: objectId,
1193
+ options
1194
+ })
1195
+ );
1196
+ }
1197
+ });
1198
+ }
1199
+ /**
1200
+ * @description Provides cache for getObjects of the SuiKit.
1201
+ * @param objectIds
1202
+ * @returns Promise<SuiObjectData[]>
1203
+ */
1204
+ async queryGetObjects(objectIds, options = {
1205
+ showContent: true
1206
+ }) {
1207
+ if (objectIds.length === 0)
1208
+ return [];
1209
+ return this.queryClient.fetchQuery({
1210
+ queryKey: queryKeys.rpc.getObjects(
1211
+ objectIds,
1212
+ this.walletAddress,
1213
+ options
1214
+ ),
1215
+ queryFn: async () => {
1216
+ return await callWithRateLimit(
1217
+ this.tokenBucket,
1218
+ () => this.suiKit.getObjects(objectIds, options)
1219
+ );
1220
+ }
1221
+ });
1222
+ }
1223
+ /**
1224
+ * @description Provides cache for getOwnedObjects of the SuiKit.
1225
+ * @param input
1226
+ * @returns Promise<PaginatedObjectsResponse>
1227
+ */
1228
+ async queryGetOwnedObjects(input) {
1229
+ return this.queryClient.fetchQuery({
1230
+ queryKey: queryKeys.rpc.getOwnedObjects(input),
1231
+ queryFn: async () => {
1232
+ return await callWithRateLimit(
1233
+ this.tokenBucket,
1234
+ () => this.client.getOwnedObjects(input)
1235
+ );
1236
+ }
1237
+ });
1238
+ }
1239
+ async queryGetDynamicFields(input) {
1240
+ return this.queryClient.fetchQuery({
1241
+ queryKey: queryKeys.rpc.getDynamicFields(input),
1242
+ queryFn: async () => {
1243
+ return await callWithRateLimit(
1244
+ this.tokenBucket,
1245
+ () => this.client.getDynamicFields(input)
1246
+ );
1247
+ }
1248
+ });
1468
1249
  }
1469
- return Math.floor(closestTwelveAM.getTime() / 1e3);
1470
- };
1471
-
1472
- // src/constants/tokenBucket.ts
1473
- var DEFAULT_TOKENS_PER_INTERVAL = 50;
1474
- var DEFAULT_INTERVAL_IN_MS = 300;
1475
-
1476
- // src/utils/tokenBucket.ts
1477
- var TokenBucket = class {
1478
- constructor(tokensPerInterval, intervalInMs) {
1479
- this.tokensPerInterval = tokensPerInterval;
1480
- this.interval = intervalInMs;
1481
- this.tokens = tokensPerInterval;
1482
- this.lastRefill = Date.now();
1250
+ async queryGetDynamicFieldObject(input) {
1251
+ return this.queryClient.fetchQuery({
1252
+ queryKey: queryKeys.rpc.getDynamicFieldObject(input),
1253
+ queryFn: async () => {
1254
+ return await callWithRateLimit(
1255
+ this.tokenBucket,
1256
+ () => this.client.getDynamicFieldObject(input)
1257
+ );
1258
+ }
1259
+ });
1483
1260
  }
1484
- refill() {
1485
- const now = Date.now();
1486
- const elapsed = now - this.lastRefill;
1487
- if (elapsed > this.interval) {
1488
- const tokensToAdd = Math.floor(elapsed / this.interval) * this.tokensPerInterval;
1489
- this.tokens = Math.min(this.tokens + tokensToAdd, this.tokensPerInterval);
1490
- this.lastRefill = now;
1491
- }
1261
+ async queryGetAllCoinBalances(owner) {
1262
+ return this.queryClient.fetchQuery({
1263
+ queryKey: queryKeys.rpc.getAllCoinBalances(owner),
1264
+ queryFn: async () => {
1265
+ const allBalances = await callWithRateLimit(
1266
+ this.tokenBucket,
1267
+ () => this.client.getAllBalances({ owner })
1268
+ );
1269
+ if (!allBalances)
1270
+ return {};
1271
+ const balances = allBalances.reduce(
1272
+ (acc, coinBalance) => {
1273
+ if (coinBalance.totalBalance !== "0") {
1274
+ acc[(0, import_sui_kit.normalizeStructTag)(coinBalance.coinType)] = coinBalance.totalBalance;
1275
+ }
1276
+ return acc;
1277
+ },
1278
+ {}
1279
+ );
1280
+ return balances;
1281
+ }
1282
+ });
1492
1283
  }
1493
- removeTokens(count) {
1494
- this.refill();
1495
- if (this.tokens >= count) {
1496
- this.tokens -= count;
1497
- return true;
1498
- }
1499
- return false;
1284
+ async queryGetCoinBalance(input) {
1285
+ if (!input.coinType)
1286
+ return "0";
1287
+ return (await this.queryGetAllCoinBalances(input.owner) || {})[(0, import_sui_kit.normalizeStructTag)(input.coinType)] ?? "0";
1500
1288
  }
1501
1289
  };
1502
- var callWithRateLimit = async (tokenBucket, fn, retryDelayInMs = DEFAULT_INTERVAL_IN_MS, maxRetries = 15, backoffFactor = 1.25) => {
1503
- let retries = 0;
1504
- const tryRequest = async () => {
1505
- if (tokenBucket.removeTokens(1)) {
1506
- try {
1507
- const result = await fn();
1508
- if (result && result.status === 429) {
1509
- throw new Error("Unexpected status code: 429");
1290
+
1291
+ // src/models/scallopAddress.ts
1292
+ var import_axios = __toESM(require("axios"));
1293
+
1294
+ // src/constants/testAddress.ts
1295
+ var TEST_ADDRESSES = {
1296
+ core: {
1297
+ // version:
1298
+ // '0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7',
1299
+ version: "0x6156d5cd1538bec8a167a40fe1209a4ec9cf8137921fe0a697f191ac561f0b09",
1300
+ versionCap: "0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",
1301
+ // object:
1302
+ // '0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf',
1303
+ object: "0x87ddec2984645dbbe2403a509cc6edf393a43acdba9b77d45da2bcbefcf733c1",
1304
+ // market:
1305
+ // '0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9',
1306
+ market: "0x8606ed145cc887985b8ed793f7753ff5dc762a42c379dac035f568e1bac58490",
1307
+ adminCap: "0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",
1308
+ coinDecimalsRegistry: "0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",
1309
+ // obligationAccessStore:
1310
+ // '0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9',
1311
+ obligationAccessStore: "0x48b472d68ca910c45f7f3b6c26836b6aa6d2569810d94b1b939023da05ae0a23",
1312
+ coins: {
1313
+ cetus: {
1314
+ id: "0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",
1315
+ metaData: "0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",
1316
+ treasury: "",
1317
+ oracle: {
1318
+ supra: "",
1319
+ switchboard: "",
1320
+ pyth: {
1321
+ feed: "e5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",
1322
+ feedObject: "0x24c0247fb22457a719efac7f670cdc79be321b521460bd6bd2ccfa9f80713b14"
1323
+ }
1510
1324
  }
1511
- return result;
1512
- } catch (error) {
1513
- if (error.message === "Unexpected status code: 429" && retries < maxRetries) {
1514
- retries++;
1515
- const delay = retryDelayInMs * Math.pow(backoffFactor, retries);
1516
- await new Promise((resolve) => setTimeout(resolve, delay));
1517
- return tryRequest();
1518
- } else {
1519
- console.error("An error occurred:", error.message);
1520
- return null;
1325
+ },
1326
+ wapt: {
1327
+ id: "0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",
1328
+ metaData: "0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8",
1329
+ treasury: "",
1330
+ oracle: {
1331
+ supra: "",
1332
+ switchboard: "",
1333
+ pyth: {
1334
+ feed: "03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5",
1335
+ feedObject: "0x7c5b7837c44a69b469325463ac0673ac1aa8435ff44ddb4191c9ae380463647f"
1336
+ }
1337
+ }
1338
+ },
1339
+ wsol: {
1340
+ id: "0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",
1341
+ metaData: "0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e",
1342
+ treasury: "",
1343
+ oracle: {
1344
+ supra: "",
1345
+ switchboard: "",
1346
+ pyth: {
1347
+ feed: "ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",
1348
+ feedObject: "0x9d0d275efbd37d8a8855f6f2c761fa5983293dd8ce202ee5196626de8fcd4469"
1349
+ }
1350
+ }
1351
+ },
1352
+ wbtc: {
1353
+ id: "0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",
1354
+ metaData: "0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd",
1355
+ treasury: "",
1356
+ oracle: {
1357
+ supra: "",
1358
+ switchboard: "",
1359
+ pyth: {
1360
+ feed: "e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
1361
+ feedObject: "0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"
1362
+ }
1363
+ }
1364
+ },
1365
+ weth: {
1366
+ id: "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",
1367
+ metaData: "0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f",
1368
+ treasury: "",
1369
+ oracle: {
1370
+ supra: "",
1371
+ switchboard: "",
1372
+ pyth: {
1373
+ feed: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",
1374
+ feedObject: "0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"
1375
+ }
1376
+ }
1377
+ },
1378
+ wusdc: {
1379
+ id: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",
1380
+ metaData: "0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189",
1381
+ treasury: "",
1382
+ oracle: {
1383
+ supra: "",
1384
+ switchboard: "",
1385
+ pyth: {
1386
+ feed: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
1387
+ feedObject: "0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"
1388
+ }
1389
+ }
1390
+ },
1391
+ wusdt: {
1392
+ id: "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",
1393
+ metaData: "0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c",
1394
+ treasury: "",
1395
+ oracle: {
1396
+ supra: "",
1397
+ switchboard: "",
1398
+ pyth: {
1399
+ feed: "2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",
1400
+ feedObject: "0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"
1401
+ }
1402
+ }
1403
+ },
1404
+ sui: {
1405
+ id: "0x0000000000000000000000000000000000000000000000000000000000000002",
1406
+ metaData: "0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",
1407
+ treasury: "",
1408
+ oracle: {
1409
+ supra: "",
1410
+ switchboard: "0xbca474133638352ba83ccf7b5c931d50f764b09550e16612c9f70f1e21f3f594",
1411
+ pyth: {
1412
+ feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
1413
+ feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
1414
+ }
1415
+ }
1416
+ },
1417
+ afsui: {
1418
+ id: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",
1419
+ metaData: "0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",
1420
+ treasury: "",
1421
+ oracle: {
1422
+ supra: "",
1423
+ switchboard: "",
1424
+ pyth: {
1425
+ feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
1426
+ feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
1427
+ }
1428
+ }
1429
+ },
1430
+ hasui: {
1431
+ id: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",
1432
+ metaData: "0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",
1433
+ treasury: "",
1434
+ oracle: {
1435
+ supra: "",
1436
+ switchboard: "",
1437
+ pyth: {
1438
+ feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
1439
+ feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
1440
+ }
1441
+ }
1442
+ },
1443
+ vsui: {
1444
+ id: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",
1445
+ metaData: "0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd",
1446
+ treasury: "",
1447
+ oracle: {
1448
+ supra: "",
1449
+ switchboard: "",
1450
+ pyth: {
1451
+ feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
1452
+ feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
1453
+ }
1454
+ }
1455
+ },
1456
+ sca: {
1457
+ id: "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",
1458
+ metaData: "0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",
1459
+ treasury: "",
1460
+ oracle: {
1461
+ supra: "",
1462
+ switchboard: "",
1463
+ pyth: {
1464
+ feed: "7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",
1465
+ feedObject: "0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"
1466
+ }
1521
1467
  }
1522
1468
  }
1523
- } else if (retries < maxRetries) {
1524
- retries++;
1525
- const delay = retryDelayInMs * Math.pow(backoffFactor, retries);
1526
- await new Promise((resolve) => setTimeout(resolve, delay));
1527
- return tryRequest();
1528
- } else {
1529
- console.error("Maximum retries reached");
1530
- return null;
1531
- }
1532
- };
1533
- return tryRequest();
1534
- };
1535
-
1536
- // src/utils/indexer.ts
1537
- async function callMethodWithIndexerFallback(method, context, ...args) {
1538
- const indexer = args[args.length - 1];
1539
- if (indexer) {
1540
- try {
1541
- return await method.apply(context, args);
1542
- } catch (e) {
1543
- console.warn(`Indexer requests failed: ${e}. Retrying without indexer..`);
1544
- return await method.apply(context, [...args.slice(0, -1), false]);
1545
- }
1546
- }
1547
- return await method.apply(context, args);
1548
- }
1549
- function withIndexerFallback(method) {
1550
- return (...args) => {
1551
- return callMethodWithIndexerFallback(method, this, ...args);
1552
- };
1553
- }
1554
-
1555
- // src/models/scallopCache.ts
1556
- var ScallopCache = class {
1557
- constructor(suiKit, walletAddress, cacheOptions, tokenBucket, queryClient) {
1558
- this.queryClient = queryClient ?? new import_query_core.QueryClient(cacheOptions ?? DEFAULT_CACHE_OPTIONS);
1559
- this._suiKit = suiKit;
1560
- this.tokenBucket = tokenBucket ?? new TokenBucket(DEFAULT_TOKENS_PER_INTERVAL, DEFAULT_INTERVAL_IN_MS);
1561
- this.walletAddress = walletAddress ?? suiKit.currentAddress();
1562
- }
1563
- get suiKit() {
1564
- if (!this._suiKit) {
1565
- throw new Error("SuiKit instance is not initialized");
1566
- }
1567
- return this._suiKit;
1568
- }
1569
- get client() {
1570
- return this.suiKit.client();
1571
- }
1572
- /**
1573
- * @description Invalidate cache based on the refetchType parameter
1574
- * @param refetchType Determines the type of queries to be refetched. Defaults to `active`.
1575
- *
1576
- * - `active`: Only queries that match the refetch predicate and are actively being rendered via useQuery and related functions will be refetched in the background.
1577
- * - `inactive`: Only queries that match the refetch predicate and are NOT actively being rendered via useQuery and related functions will be refetched in the background.
1578
- * - `all`: All queries that match the refetch predicate will be refetched in the background.
1579
- * - `none`: No queries will be refetched. Queries that match the refetch predicate will only be marked as invalid.
1580
- */
1581
- async invalidateAllCache() {
1582
- return Object.values(queryKeys.rpc).map(
1583
- (t) => this.queryClient.invalidateQueries({
1584
- queryKey: t(),
1585
- type: "all"
1586
- })
1587
- );
1588
- }
1589
- /**
1590
- * @description Provides cache for inspectTxn of the SuiKit.
1591
- * @param QueryInspectTxnParams
1592
- * @param txBlock
1593
- * @returns Promise<DevInspectResults>
1594
- */
1595
- async queryInspectTxn({
1596
- queryTarget,
1597
- args,
1598
- typeArgs
1599
- }) {
1600
- const txBlock = new import_sui_kit.SuiTxBlock();
1601
- txBlock.moveCall(queryTarget, args, typeArgs);
1602
- const query = await this.queryClient.fetchQuery({
1603
- queryKey: queryKeys.rpc.getInspectTxn(queryTarget, args, typeArgs),
1604
- queryFn: async () => {
1605
- return await callWithRateLimit(
1606
- this.tokenBucket,
1607
- () => this.suiKit.inspectTxn(txBlock)
1608
- );
1609
- }
1610
- });
1611
- return query;
1612
- }
1613
- /**
1614
- * @description Provides cache for getObject of the SuiKit.
1615
- * @param objectId
1616
- * @param QueryObjectParams
1617
- * @returns Promise<SuiObjectResponse>
1618
- */
1619
- async queryGetObject(objectId, options) {
1620
- return this.queryClient.fetchQuery({
1621
- queryKey: queryKeys.rpc.getObject(objectId, this.walletAddress, options),
1622
- queryFn: async () => {
1623
- return await callWithRateLimit(
1624
- this.tokenBucket,
1625
- () => this.client.getObject({
1626
- id: objectId,
1627
- options
1628
- })
1629
- );
1630
- }
1631
- });
1632
- }
1633
- /**
1634
- * @description Provides cache for getObjects of the SuiKit.
1635
- * @param objectIds
1636
- * @returns Promise<SuiObjectData[]>
1637
- */
1638
- async queryGetObjects(objectIds, options = {
1639
- showContent: true
1640
- }) {
1641
- if (objectIds.length === 0)
1642
- return [];
1643
- return this.queryClient.fetchQuery({
1644
- queryKey: queryKeys.rpc.getObjects(
1645
- objectIds,
1646
- this.walletAddress,
1647
- options
1648
- ),
1649
- queryFn: async () => {
1650
- return await callWithRateLimit(
1651
- this.tokenBucket,
1652
- () => this.suiKit.getObjects(objectIds, options)
1653
- );
1654
- }
1655
- });
1656
- }
1657
- /**
1658
- * @description Provides cache for getOwnedObjects of the SuiKit.
1659
- * @param input
1660
- * @returns Promise<PaginatedObjectsResponse>
1661
- */
1662
- async queryGetOwnedObjects(input) {
1663
- return this.queryClient.fetchQuery({
1664
- queryKey: queryKeys.rpc.getOwnedObjects(input),
1665
- queryFn: async () => {
1666
- return await callWithRateLimit(
1667
- this.tokenBucket,
1668
- () => this.client.getOwnedObjects(input)
1669
- );
1670
- }
1671
- });
1672
- }
1673
- async queryGetDynamicFields(input) {
1674
- return this.queryClient.fetchQuery({
1675
- queryKey: queryKeys.rpc.getDynamicFields(input),
1676
- queryFn: async () => {
1677
- return await callWithRateLimit(
1678
- this.tokenBucket,
1679
- () => this.client.getDynamicFields(input)
1680
- );
1469
+ },
1470
+ oracles: {
1471
+ xOracle: "0x93d5bf0936b71eb27255941e532fac33b5a5c7759e377b4923af0a1359ad494f",
1472
+ xOracleCap: "0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",
1473
+ supra: { registry: "", registryCap: "", holder: "" },
1474
+ switchboard: { registry: "", registryCap: "" },
1475
+ pyth: {
1476
+ registry: "0xedc293f9413a5a7a5d53bdba1fd889d0a4030894469228f0acdae4aa3c55a213",
1477
+ registryCap: "0xbcb07141eb1f7e01fbda4130ecf5f5adaeabb77f5d9c32158b7532bcd2197acd",
1478
+ state: "0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",
1479
+ wormhole: "0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",
1480
+ wormholeState: "0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"
1681
1481
  }
1682
- });
1683
- }
1684
- async queryGetDynamicFieldObject(input) {
1685
- return this.queryClient.fetchQuery({
1686
- queryKey: queryKeys.rpc.getDynamicFieldObject(input),
1687
- queryFn: async () => {
1688
- return await callWithRateLimit(
1689
- this.tokenBucket,
1690
- () => this.client.getDynamicFieldObject(input)
1691
- );
1482
+ },
1483
+ packages: {
1484
+ coinDecimalsRegistry: {
1485
+ id: "0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",
1486
+ upgradeCap: "0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"
1487
+ },
1488
+ math: {
1489
+ id: "0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",
1490
+ upgradeCap: "0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"
1491
+ },
1492
+ whitelist: {
1493
+ id: "0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",
1494
+ upgradeCap: "0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"
1495
+ },
1496
+ x: {
1497
+ id: "0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",
1498
+ upgradeCap: "0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"
1499
+ },
1500
+ protocol: {
1501
+ id: "0x87ddec2984645dbbe2403a509cc6edf393a43acdba9b77d45da2bcbefcf733c1",
1502
+ upgradeCap: "0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"
1503
+ },
1504
+ // protocol: {
1505
+ // id: '0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e',
1506
+ // upgradeCap:
1507
+ // '0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a',
1508
+ // },
1509
+ protocolWhitelist: {
1510
+ id: "0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",
1511
+ upgradeCap: "0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"
1512
+ },
1513
+ // query: {
1514
+ // id: '0xb8d603a39114a5efef3dd0bf84df0bed1be1fbd39b78b7dd6e8a61ccc5e6006f',
1515
+ // upgradeCap:
1516
+ // '0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f',
1517
+ // },
1518
+ query: {
1519
+ id: "0xe4f9d62d17746d5b9dbf0d5557747430021a71575780b515161210cdba0a4c1c",
1520
+ upgradeCap: "0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"
1521
+ },
1522
+ supra: { id: "", upgradeCap: "" },
1523
+ pyth: {
1524
+ id: "0x910f30cbc7f601f75a5141a01265cd47c62d468707c5e1aecb32a18f448cb25a",
1525
+ upgradeCap: "0xdf0ffbae1ea5bb25fbca5efba433dcf00c7cced65679af2f04728901275c6157"
1526
+ },
1527
+ switchboard: { id: "", upgradeCap: "" },
1528
+ xOracle: {
1529
+ id: "0x1478a432123e4b3d61878b629f2c692969fdb375644f1251cd278a4b1e7d7cd6",
1530
+ upgradeCap: "0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"
1531
+ },
1532
+ testCoin: { id: "", upgradeCap: "" }
1533
+ }
1534
+ },
1535
+ spool: {
1536
+ // id: '0x7c4fdabe81c31b19a45d1e572a52a539997a90903fbb5bfab71480abe0fa62c3',
1537
+ id: "0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",
1538
+ adminCap: "0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",
1539
+ // object:
1540
+ // '0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a',
1541
+ object: "0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",
1542
+ pools: {
1543
+ sweth: {
1544
+ id: "0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",
1545
+ rewardPoolId: "0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"
1546
+ },
1547
+ ssui: {
1548
+ // id: '0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4',
1549
+ id: "0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",
1550
+ rewardPoolId: (
1551
+ // '0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9',
1552
+ "0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"
1553
+ )
1554
+ },
1555
+ swusdc: {
1556
+ // id: '0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0',
1557
+ id: "0xf1b383b9cf2e9f515fc69567df1053098f273849d09cd84b0278a773429bd2b2",
1558
+ rewardPoolId: (
1559
+ // '0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8',
1560
+ "0xc71c53ee6505d928ba15bea4fe4f45d98c9c31eced94b72d00a7827d4b7ba3ff"
1561
+ )
1562
+ },
1563
+ swusdt: {
1564
+ // id: '0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f',
1565
+ id: "0xb5567dfa5c7fc17a249e959732664c50713dd8c23db1a11376b27df800c17418",
1566
+ rewardPoolId: (
1567
+ // '0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080',
1568
+ "0x60768b0687ff0235e376a039709a683e4c436098785e473b67b32dbab47b69ab"
1569
+ )
1570
+ },
1571
+ scetus: {
1572
+ id: "0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",
1573
+ rewardPoolId: "0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"
1574
+ },
1575
+ safsui: {
1576
+ // id: '0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800',
1577
+ id: "0xc568bb4c991258e839aa54802ecda04fcd9838c826bc3b42b40af81b23c458c8",
1578
+ rewardPoolId: (
1579
+ // '0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e',
1580
+ "0x389a3cbeda742b918941bb24fd00e077bad3367484394d6234f8209b9a6aa03d"
1581
+ )
1582
+ },
1583
+ shasui: {
1584
+ // id: '0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa',
1585
+ id: "0x93f3f4499bf89f2d05ddc1f8b15f51701a7c6c4d0ac0b9c3bc99462cbbd8e321",
1586
+ rewardPoolId: (
1587
+ // '0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66',
1588
+ "0x94cee1be7f5ff34193f3aabef0b14142cb28af4d905fe487a9a7d85a15edb6aa"
1589
+ )
1590
+ },
1591
+ svsui: {
1592
+ // id: '0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670',
1593
+ id: "0xa970e9087f80cb59e9299b8e7af7175d977ad6c9af0322aa4440e138fbd7ae00",
1594
+ rewardPoolId: (
1595
+ // '0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a',
1596
+ "0x38eee9699c4fc132a6623e54b865f047df4fc6eb83af807300f44e8f4b235ff0"
1597
+ )
1692
1598
  }
1693
- });
1694
- }
1695
- async queryGetAllCoinBalances(owner) {
1696
- return this.queryClient.fetchQuery({
1697
- queryKey: queryKeys.rpc.getAllCoinBalances(owner),
1698
- queryFn: async () => {
1699
- const allBalances = await callWithRateLimit(
1700
- this.tokenBucket,
1701
- () => this.client.getAllBalances({ owner })
1702
- );
1703
- if (!allBalances)
1704
- return {};
1705
- const balances = allBalances.reduce(
1706
- (acc, coinBalance) => {
1707
- if (coinBalance.totalBalance !== "0") {
1708
- acc[(0, import_sui_kit.normalizeStructTag)(coinBalance.coinType)] = coinBalance.totalBalance;
1709
- }
1710
- return acc;
1711
- },
1712
- {}
1713
- );
1714
- return balances;
1599
+ },
1600
+ config: ""
1601
+ },
1602
+ borrowIncentive: {
1603
+ id: "0x6152f696fc3a658f33c4b891764731a59153125ffedfa8bff7167c42823f58a9",
1604
+ adminCap: "0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",
1605
+ object: "0x002875153e09f8145ab63527bc85c00f2bd102e12f9573c47f8cdf1a1cb62934",
1606
+ query: "0x529edc54a3dce2207703ceebbccb0ac14133f7825c1f528775ba0d85a4063489",
1607
+ incentivePools: "0x6547e143d406b5ccd5f46aae482497de279cc1a68c406f701df70a05f9212ab4",
1608
+ incentiveAccounts: "0xc4701fdbc1c92f9a636d334d66012b3027659e9fb8aff27279a82edfb6b77d02",
1609
+ config: "0xdf5d04b4691cc67e82fd4db8394d89ff44823a9de29716c924f74bb4f11cc1f7"
1610
+ },
1611
+ referral: {
1612
+ id: "0xa3654ebb63eb06c0f4ff52f8aa6512df9f164f7772bdf15dac3709bd3798dda9",
1613
+ object: "0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",
1614
+ adminCap: "0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",
1615
+ referralBindings: "0xf63299d58789d99de94092b9011323466e55ca0c1ea1a7a3786a589af46e1c09",
1616
+ bindingTableId: "0x1c8202b17267ec8d6cf97ca013615354181a04f179570e42601ff2dae19294b1",
1617
+ referralRevenuePool: "0x6abd852caf90769c1b185cdf636d841673fa95528f0550f018b8a138bd283c07",
1618
+ revenueTableId: "0x595baa3654c297bff84ab7786a2d250f019cefc66e8df8e89fd9d41e02bd30dd",
1619
+ referralTiers: "0x962cb903d8d7346190c5204785ccbb91b61086aa764f674c8145df82335cf83e",
1620
+ tiersTableId: "0xeac755a7a8b7798530905ac79e8c114f19d0f130f6eab012954f08faac29c75d",
1621
+ // authorizedWitnessList:
1622
+ // '0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e',
1623
+ authorizedWitnessList: "0x9d6223dc52015b8a3986a573590ef2af8f1b8f3e4685513888c052f001b87e7f",
1624
+ version: "0x1bd4b7285f72e11c316b828c7c47b3f4da18dcec9f9b3dba6d8629cbb6f93e5e"
1625
+ },
1626
+ vesca: {
1627
+ id: "0xb15b6e0cdd85afb5028bea851dd249405e734d800a259147bbc24980629723a4",
1628
+ object: "0xb15b6e0cdd85afb5028bea851dd249405e734d800a259147bbc24980629723a4",
1629
+ adminCap: "0x8ffa76135c5b85c5fbd73a6448a4a733d826cb63a267ab817656acb77c72d4a5",
1630
+ tableId: "0xe3153b2bf124be0b86cb8bd468346a861efd0da52fc42197b54d2f616488a311",
1631
+ table: "0x611cb8d9d4d90867467b5ebdf4cc447a0047ed5b01334a28a29fcfe733e3d609",
1632
+ treasury: "0xe8c112c09b88158dc6c8e23d1fbae5b3c7136cdee54b7dafc08e65db28c4a5bc",
1633
+ config: "0xe0a2ff281e73c1d53cfa85807080f87e833e4f1a7f93dcf8800b3865269a76b9"
1634
+ },
1635
+ loyaltyProgram: {
1636
+ id: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
1637
+ object: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
1638
+ rewardPool: "0xf9c090492ef476bd542109d0913ffe871cbfa28578b7114eca2a8c0e5671786f",
1639
+ userRewardTableId: "0x748a80395849ed37db1b0e14f2ab5d1d96458d2359ab3a84eb079d0f4ac7cf2e"
1640
+ },
1641
+ scoin: {
1642
+ id: "0xad2ca2aa5089df94bb2d444d5eb3520378c2f2dfb3a0bd2a2c994145ac4b0a53",
1643
+ coins: {
1644
+ ssui: {
1645
+ coinType: "0xfac769100bccc0caebcf4f4e2d00ac2f8883f07f724be28940df90605f5e7e9a::scallop_sui::SCALLOP_SUI",
1646
+ treasury: "0x9cb4551b36c17d37e19d700147fa819ea1c487ff8bcf18374de2cceb2e9d4845"
1647
+ },
1648
+ scetus: {
1649
+ coinType: "0x8b71e6d323ed78515af2bead13bf3d0da1562ba4a99234eb7c4f14fd39ef0427::scallop_cetus::SCALLOP_CETUS",
1650
+ treasury: "0xd786f4b2d26278cc7911a3445b1b085eab60f269ef9dbb6b87e803d52f155003"
1651
+ },
1652
+ ssca: {
1653
+ coinType: "0x0a9d3c6c9af9f6e8def82921541bcbd17f73ed31bed3adcb684f2a4c267e42f0::scallop_sca::SCALLOP_SCA",
1654
+ treasury: "0xe818636d1d6c46d6ea1a2dce9d94696d7cbc18ce27451b603eeaa47aba8d75e0"
1655
+ },
1656
+ swusdc: {
1657
+ coinType: "0xaedc3ab75db8680b81a755015fa90124d217be93457b893c05bac033817defaf::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
1658
+ treasury: "0xfc6971648f867f7fd6928d1b873af71577e2eaf2c7543ef8bc82c431d833ae78"
1659
+ },
1660
+ swusdt: {
1661
+ coinType: "0xbf02fc87ddc104b342ad8414c85ceadf5b0c823c055a06fb0ed776272c01a52a::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
1662
+ treasury: "0xb9593e2c3a0ba796ee815012b75ae46468ea78cda0188b9ac6816efe65503521"
1663
+ },
1664
+ sweth: {
1665
+ coinType: "0x27d54f43e3eda701be56b82e5756e41c84467cd202f5cf713d5f9e45a9f1b6bc::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",
1666
+ treasury: "0x032b4c8fac94c038dbe986f7587e9b1e4ef580b5ee06d2ef249d85459b7ef05d"
1667
+ },
1668
+ safsui: {
1669
+ coinType: "0xb75b46d975d8d80670b53a6bee90baaa8ce2e0b7d397f079447d641eef6b44ad::scallop_af_sui::SCALLOP_AF_SUI",
1670
+ treasury: "0x21450ef0570ef3d224ffa3b873ab802e439ece7b93cc7efad10ae0c1e3b3fcfe"
1671
+ },
1672
+ shasui: {
1673
+ coinType: "0xd973a723874e2c7cde196602a79155a1343a933f8cf87d9b1bb7408bc1acbc58::scallop_ha_sui::SCALLOP_HA_SUI",
1674
+ treasury: "0xf822fc1402207e47d2e3ba8ff6e1e594bf1de777dc5ebd2744619cd2726e3b0d"
1675
+ },
1676
+ svsui: {
1677
+ coinType: "0x97023a317320c4498cc4cd239dd02fd30c28246e5e8f81325d63f2bd8d70f6b3::scallop_v_sui::SCALLOP_V_SUI",
1678
+ treasury: "0x327114f0bf3559d7e2de10282147ed76a236c7c6775029165c4db09a6062ead6\u0192"
1715
1679
  }
1716
- });
1717
- }
1718
- async queryGetCoinBalance(input) {
1719
- if (!input.coinType)
1720
- return "0";
1721
- return (await this.queryGetAllCoinBalances(input.owner) || {})[(0, import_sui_kit.normalizeStructTag)(input.coinType)] ?? "0";
1680
+ }
1722
1681
  }
1723
1682
  };
1724
1683
 
1725
1684
  // src/models/scallopAddress.ts
1726
- var import_axios = __toESM(require("axios"));
1727
1685
  var EMPTY_ADDRESSES = {
1728
1686
  core: {
1729
1687
  version: "",
@@ -2369,153 +2327,70 @@ var ScallopAddress = class {
2369
2327
  headers: {
2370
2328
  "Content-Type": "application/json",
2371
2329
  "api-key": auth || this._auth
2372
- }
2373
- }
2374
- );
2375
- if (response.status === 200) {
2376
- this._id = void 0;
2377
- this._currentAddresses = void 0;
2378
- this._addressesMap.clear();
2379
- } else {
2380
- throw Error("Failed to delete addresses.");
2381
- }
2382
- } else {
2383
- throw Error("You don't have permission to access this request.");
2384
- }
2385
- }
2386
- };
2387
-
2388
- // src/models/scallopClient.ts
2389
- var import_utils25 = require("@mysten/sui/utils");
2390
- var import_sui_kit15 = require("@scallop-io/sui-kit");
2391
-
2392
- // src/models/scallopUtils.ts
2393
- var import_utils10 = require("@mysten/sui/utils");
2394
- var import_sui_kit4 = require("@scallop-io/sui-kit");
2395
- var import_pyth_sui_js = require("@pythnetwork/pyth-sui-js");
2396
-
2397
- // src/queries/coreQuery.ts
2398
- var import_utils3 = require("@mysten/sui/utils");
2399
- var import_bignumber2 = __toESM(require("bignumber.js"));
2400
-
2401
- // src/queries/supplyLimit.ts
2402
- var import_zod = require("zod");
2403
- var supplyLimitZod = import_zod.z.object({
2404
- dataType: import_zod.z.string(),
2405
- type: import_zod.z.string(),
2406
- hasPublicTransfer: import_zod.z.boolean(),
2407
- fields: import_zod.z.object({
2408
- id: import_zod.z.object({
2409
- id: import_zod.z.string()
2410
- }),
2411
- name: import_zod.z.object({
2412
- type: import_zod.z.string()
2413
- }),
2414
- value: import_zod.z.string()
2415
- })
2416
- });
2417
- var SUPPLY_LIMIT_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey";
2418
- var getSupplyLimit = async (utils, poolName) => {
2419
- const poolCoinType = utils.parseCoinType(poolName).slice(2);
2420
- const marketObject = utils.address.get("core.market");
2421
- if (!marketObject)
2422
- return null;
2423
- const object = await utils.cache.queryGetDynamicFieldObject({
2424
- parentId: marketObject,
2425
- name: {
2426
- type: SUPPLY_LIMIT_KEY,
2427
- value: poolCoinType
2428
- }
2429
- });
2430
- const parsedData = supplyLimitZod.safeParse(object?.data?.content);
2431
- if (!parsedData.success)
2432
- return null;
2433
- return parsedData.data.fields.value;
2434
- };
2435
-
2436
- // src/queries/isolatedAsset.ts
2437
- var import_zod2 = require("zod");
2438
- var isolatedAssetZod = import_zod2.z.object({
2439
- dataType: import_zod2.z.string(),
2440
- type: import_zod2.z.string(),
2441
- hasPublicTransfer: import_zod2.z.boolean(),
2442
- fields: import_zod2.z.object({
2443
- id: import_zod2.z.object({
2444
- id: import_zod2.z.string()
2445
- }),
2446
- name: import_zod2.z.object({
2447
- type: import_zod2.z.string()
2448
- }),
2449
- value: import_zod2.z.boolean()
2450
- })
2451
- });
2452
- var getIsolatedAssets = async (address) => {
2453
- try {
2454
- const marketObject = address.get("core.market");
2455
- const protocolObject = address.get("core.packages.protocol.id");
2456
- const ISOLATED_ASSET_KEY = `${protocolObject}::market_dynamic_keys::IsolatedAssetKey`;
2457
- const isolatedAssets = [];
2458
- if (!marketObject)
2459
- return isolatedAssets;
2460
- let hasNextPage = false;
2461
- let nextCursor = null;
2462
- const isIsolatedDynamicField = (dynamicField) => {
2463
- return dynamicField.name.type === ISOLATED_ASSET_KEY;
2464
- };
2465
- do {
2466
- const response = await address.cache.queryGetDynamicFields({
2467
- parentId: marketObject,
2468
- cursor: nextCursor,
2469
- limit: 10
2470
- });
2471
- if (!response)
2472
- break;
2473
- const isolatedAssetCoinTypes = response.data.filter(isIsolatedDynamicField).map(({ name }) => `0x${name.value.type.name}`);
2474
- isolatedAssets.push(...isolatedAssetCoinTypes);
2475
- if (response && response.hasNextPage && response.nextCursor) {
2476
- hasNextPage = true;
2477
- nextCursor = response.nextCursor;
2478
- } else {
2479
- hasNextPage = false;
2480
- }
2481
- } while (hasNextPage);
2482
- return isolatedAssets;
2483
- } catch (e) {
2484
- console.error(e);
2485
- return [];
2486
- }
2487
- };
2488
- var isIsolatedAsset = async (utils, coinName) => {
2489
- try {
2490
- const marketObject = utils.address.get("core.market");
2491
- const protocolObject = utils.address.get("core.packages.protocol.id");
2492
- const ISOLATED_ASSET_KEY = `${protocolObject}::market_dynamic_keys::IsolatedAssetKey`;
2493
- const cachedData = utils.address.cache.queryClient.getQueryData([
2494
- "getDynamicFields",
2495
- marketObject
2496
- ]);
2497
- if (cachedData) {
2498
- const coinType2 = utils.parseCoinType(coinName);
2499
- return cachedData.includes(coinType2);
2500
- }
2501
- const coinType = utils.parseCoinType(coinName).slice(2);
2502
- const object = await utils.cache.queryGetDynamicFieldObject({
2503
- parentId: marketObject,
2504
- name: {
2505
- type: ISOLATED_ASSET_KEY,
2506
- value: coinType
2330
+ }
2331
+ }
2332
+ );
2333
+ if (response.status === 200) {
2334
+ this._id = void 0;
2335
+ this._currentAddresses = void 0;
2336
+ this._addressesMap.clear();
2337
+ } else {
2338
+ throw Error("Failed to delete addresses.");
2507
2339
  }
2508
- });
2509
- const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
2510
- if (!parsedData.success)
2511
- return false;
2512
- return parsedData.data.fields.value;
2513
- } catch (e) {
2514
- console.error(e);
2515
- return false;
2340
+ } else {
2341
+ throw Error("You don't have permission to access this request.");
2342
+ }
2516
2343
  }
2517
2344
  };
2518
2345
 
2346
+ // src/models/scallopClient.ts
2347
+ var import_utils25 = require("@mysten/sui/utils");
2348
+ var import_sui_kit15 = require("@scallop-io/sui-kit");
2349
+
2350
+ // src/models/scallopUtils.ts
2351
+ var import_utils10 = require("@mysten/sui/utils");
2352
+ var import_sui_kit4 = require("@scallop-io/sui-kit");
2353
+ var import_pyth_sui_js = require("@pythnetwork/pyth-sui-js");
2354
+
2355
+ // src/queries/coreQuery.ts
2356
+ var import_utils3 = require("@mysten/sui/utils");
2357
+ var import_bignumber2 = __toESM(require("bignumber.js"));
2358
+
2359
+ // src/queries/supplyLimit.ts
2360
+ var import_zod = require("zod");
2361
+ var supplyLimitZod = import_zod.z.object({
2362
+ dataType: import_zod.z.string(),
2363
+ type: import_zod.z.string(),
2364
+ hasPublicTransfer: import_zod.z.boolean(),
2365
+ fields: import_zod.z.object({
2366
+ id: import_zod.z.object({
2367
+ id: import_zod.z.string()
2368
+ }),
2369
+ name: import_zod.z.object({
2370
+ type: import_zod.z.string()
2371
+ }),
2372
+ value: import_zod.z.string()
2373
+ })
2374
+ });
2375
+ var SUPPLY_LIMIT_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey";
2376
+ var getSupplyLimit = async (utils, poolName) => {
2377
+ const poolCoinType = utils.parseCoinType(poolName).slice(2);
2378
+ const marketObject = utils.address.get("core.market");
2379
+ if (!marketObject)
2380
+ return null;
2381
+ const object = await utils.cache.queryGetDynamicFieldObject({
2382
+ parentId: marketObject,
2383
+ name: {
2384
+ type: SUPPLY_LIMIT_KEY,
2385
+ value: poolCoinType
2386
+ }
2387
+ });
2388
+ const parsedData = supplyLimitZod.safeParse(object?.data?.content);
2389
+ if (!parsedData.success)
2390
+ return null;
2391
+ return parsedData.data.fields.value;
2392
+ };
2393
+
2519
2394
  // src/queries/coreQuery.ts
2520
2395
  var queryMarket = async (query, indexer = false) => {
2521
2396
  const coinPrices = await query.utils.getCoinPrices();
@@ -2600,8 +2475,8 @@ var queryMarket = async (query, indexer = false) => {
2600
2475
  borrowFee: parsedMarketPoolData.borrowFee,
2601
2476
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2602
2477
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2603
- isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2604
- // isIsolated: false,
2478
+ // isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2479
+ isIsolated: false,
2605
2480
  maxSupplyCoin,
2606
2481
  ...calculatedMarketPoolData
2607
2482
  };
@@ -2640,7 +2515,6 @@ var queryMarket = async (query, indexer = false) => {
2640
2515
  liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
2641
2516
  liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
2642
2517
  liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
2643
- isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
2644
2518
  ...calculatedMarketCollateralData
2645
2519
  };
2646
2520
  }
@@ -2688,73 +2562,79 @@ var getMarketPools = async (query, poolCoinNames = [...SUPPORT_POOLS], indexer =
2688
2562
  return marketPools;
2689
2563
  };
2690
2564
  var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, coinPrice) => {
2691
- try {
2692
- coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2693
- if (indexer) {
2694
- const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
2695
- marketPoolIndexer.coinPrice = coinPrice || marketPoolIndexer.coinPrice;
2696
- marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
2697
- marketPoolIndexer.coinName
2698
- );
2699
- return marketPoolIndexer;
2700
- }
2701
- const marketId = query.address.get("core.market");
2702
- marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2703
- showContent: true
2704
- }))?.data;
2705
- if (!(marketObject && marketObject.content?.dataType === "moveObject"))
2706
- throw new Error(`Failed to fetch marketObject`);
2707
- const fields = marketObject.content.fields;
2708
- const coinType = query.utils.parseCoinType(poolCoinName);
2709
- const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
2710
- const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2711
- parentId: balanceSheetParentId,
2712
- name: {
2713
- type: "0x1::type_name::TypeName",
2714
- value: {
2715
- name: coinType.substring(2)
2565
+ let marketPool;
2566
+ let balanceSheet;
2567
+ let borrowIndex;
2568
+ let interestModel;
2569
+ let borrowFeeRate;
2570
+ coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2571
+ if (indexer) {
2572
+ const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
2573
+ marketPoolIndexer.coinPrice = coinPrice || marketPoolIndexer.coinPrice;
2574
+ marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
2575
+ marketPoolIndexer.coinName
2576
+ );
2577
+ return marketPoolIndexer;
2578
+ }
2579
+ const marketId = query.address.get("core.market");
2580
+ marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2581
+ showContent: true
2582
+ }))?.data;
2583
+ if (marketObject) {
2584
+ if (marketObject.content && "fields" in marketObject.content) {
2585
+ const fields = marketObject.content.fields;
2586
+ const coinType = query.utils.parseCoinType(poolCoinName);
2587
+ const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
2588
+ const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2589
+ parentId: balanceSheetParentId,
2590
+ name: {
2591
+ type: "0x1::type_name::TypeName",
2592
+ value: {
2593
+ name: coinType.substring(2)
2594
+ }
2716
2595
  }
2596
+ });
2597
+ if (!balanceSheetDynamicFieldObjectResponse)
2598
+ return void 0;
2599
+ const balanceSheetDynamicFieldObject = balanceSheetDynamicFieldObjectResponse.data;
2600
+ if (balanceSheetDynamicFieldObject && balanceSheetDynamicFieldObject.content && "fields" in balanceSheetDynamicFieldObject.content) {
2601
+ const dynamicFields = balanceSheetDynamicFieldObject.content.fields;
2602
+ balanceSheet = dynamicFields.value.fields;
2717
2603
  }
2718
- });
2719
- const balanceSheetDynamicFieldObject = balanceSheetDynamicFieldObjectResponse?.data;
2720
- if (!(balanceSheetDynamicFieldObject && balanceSheetDynamicFieldObject.content && "fields" in balanceSheetDynamicFieldObject.content))
2721
- throw new Error(
2722
- `Failed to fetch balanceSheetDynamicFieldObject for ${poolCoinName}: ${balanceSheetDynamicFieldObjectResponse?.error?.code.toString()}`
2723
- );
2724
- const balanceSheet = balanceSheetDynamicFieldObject.content.fields.value.fields;
2725
- const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
2726
- const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2727
- parentId: borrowIndexParentId,
2728
- name: {
2729
- type: "0x1::type_name::TypeName",
2730
- value: {
2731
- name: coinType.substring(2)
2604
+ const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
2605
+ const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2606
+ parentId: borrowIndexParentId,
2607
+ name: {
2608
+ type: "0x1::type_name::TypeName",
2609
+ value: {
2610
+ name: coinType.substring(2)
2611
+ }
2732
2612
  }
2613
+ });
2614
+ if (!borrowIndexDynamicFieldObjectResponse)
2615
+ return void 0;
2616
+ const borrowIndexDynamicFieldObject = borrowIndexDynamicFieldObjectResponse.data;
2617
+ if (borrowIndexDynamicFieldObject && borrowIndexDynamicFieldObject.content && "fields" in borrowIndexDynamicFieldObject.content) {
2618
+ const dynamicFields = borrowIndexDynamicFieldObject.content.fields;
2619
+ borrowIndex = dynamicFields.value.fields;
2733
2620
  }
2734
- });
2735
- const borrowIndexDynamicFieldObject = borrowIndexDynamicFieldObjectResponse?.data;
2736
- if (!(borrowIndexDynamicFieldObject && borrowIndexDynamicFieldObject.content && "fields" in borrowIndexDynamicFieldObject.content))
2737
- throw new Error(
2738
- `Failed to fetch borrowIndexDynamicFieldObject for ${poolCoinName}`
2739
- );
2740
- const borrowIndex = borrowIndexDynamicFieldObject.content.fields.value.fields;
2741
- const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
2742
- const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2743
- parentId: interestModelParentId,
2744
- name: {
2745
- type: "0x1::type_name::TypeName",
2746
- value: {
2747
- name: coinType.substring(2)
2621
+ const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
2622
+ const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2623
+ parentId: interestModelParentId,
2624
+ name: {
2625
+ type: "0x1::type_name::TypeName",
2626
+ value: {
2627
+ name: coinType.substring(2)
2628
+ }
2748
2629
  }
2630
+ });
2631
+ if (!interestModelDynamicFieldObjectResponse)
2632
+ return void 0;
2633
+ const interestModelDynamicFieldObject = interestModelDynamicFieldObjectResponse.data;
2634
+ if (interestModelDynamicFieldObject && interestModelDynamicFieldObject.content && "fields" in interestModelDynamicFieldObject.content) {
2635
+ const dynamicFields = interestModelDynamicFieldObject.content.fields;
2636
+ interestModel = dynamicFields.value.fields;
2749
2637
  }
2750
- });
2751
- const interestModelDynamicFieldObject = interestModelDynamicFieldObjectResponse?.data;
2752
- if (!(interestModelDynamicFieldObject && interestModelDynamicFieldObject.content && "fields" in interestModelDynamicFieldObject.content))
2753
- throw new Error(
2754
- `Failed to fetch interestModelDynamicFieldObject for ${poolCoinName}: ${interestModelDynamicFieldObject}`
2755
- );
2756
- const interestModel = interestModelDynamicFieldObject.content.fields.value.fields;
2757
- const getBorrowFee = async () => {
2758
2638
  const borrowFeeDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2759
2639
  parentId: marketId,
2760
2640
  name: {
@@ -2766,11 +2646,16 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2766
2646
  }
2767
2647
  }
2768
2648
  });
2769
- const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse?.data;
2770
- if (!(borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content))
2771
- return { value: "0" };
2772
- return borrowFeeDynamicFieldObject.content.fields.value.fields;
2773
- };
2649
+ if (!borrowFeeDynamicFieldObjectResponse)
2650
+ return void 0;
2651
+ const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse.data;
2652
+ if (borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content) {
2653
+ const dynamicFields = borrowFeeDynamicFieldObject.content.fields;
2654
+ borrowFeeRate = dynamicFields.value.fields;
2655
+ }
2656
+ }
2657
+ }
2658
+ if (balanceSheet && borrowIndex && interestModel && (USE_TEST_ADDRESS || borrowFeeRate)) {
2774
2659
  const parsedMarketPoolData = parseOriginMarketPoolData({
2775
2660
  type: interestModel.type.fields,
2776
2661
  maxBorrowRate: interestModel.max_borrow_rate.fields,
@@ -2784,7 +2669,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2784
2669
  reserve: balanceSheet.revenue,
2785
2670
  reserveFactor: interestModel.revenue_factor.fields,
2786
2671
  borrowWeight: interestModel.borrow_weight.fields,
2787
- borrowFeeRate: await getBorrowFee(),
2672
+ borrowFeeRate: borrowFeeRate || { value: "0" },
2788
2673
  baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
2789
2674
  borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
2790
2675
  borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
@@ -2800,7 +2685,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2800
2685
  const maxSupplyCoin = (0, import_bignumber2.default)(
2801
2686
  await getSupplyLimit(query.utils, poolCoinName) ?? "0"
2802
2687
  ).shiftedBy(-coinDecimal).toNumber();
2803
- return {
2688
+ marketPool = {
2804
2689
  coinName: poolCoinName,
2805
2690
  symbol: query.utils.parseSymbol(poolCoinName),
2806
2691
  coinType: query.utils.parseCoinType(poolCoinName),
@@ -2819,13 +2704,12 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2819
2704
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2820
2705
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2821
2706
  maxSupplyCoin,
2822
- isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2823
- // isIsolated: false,
2707
+ // isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2708
+ isIsolated: false,
2824
2709
  ...calculatedMarketPoolData
2825
2710
  };
2826
- } catch (e) {
2827
- console.error(e);
2828
2711
  }
2712
+ return marketPool;
2829
2713
  };
2830
2714
  var getMarketCollaterals = async (query, collateralCoinNames = [...SUPPORT_COLLATERALS], indexer = false) => {
2831
2715
  const marketId = query.address.get("core.market");
@@ -2874,76 +2758,85 @@ var getMarketCollateral = async (query, collateralCoinName, indexer = false, mar
2874
2758
  );
2875
2759
  return marketCollateralIndexer;
2876
2760
  }
2761
+ let marketCollateral;
2762
+ let riskModel;
2763
+ let collateralStat;
2877
2764
  const marketId = query.address.get("core.market");
2878
2765
  marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2879
2766
  showContent: true
2880
2767
  }))?.data;
2881
- if (!(marketObject && marketObject.content?.dataType === "moveObject"))
2882
- throw new Error(`Failed to fetch marketObject`);
2883
- const fields = marketObject.content.fields;
2884
- const coinType = query.utils.parseCoinType(collateralCoinName);
2885
- const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
2886
- const riskModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2887
- parentId: riskModelParentId,
2888
- name: {
2889
- type: "0x1::type_name::TypeName",
2890
- value: {
2891
- name: coinType.substring(2)
2768
+ if (marketObject) {
2769
+ if (marketObject.content && "fields" in marketObject.content) {
2770
+ const fields = marketObject.content.fields;
2771
+ const coinType = query.utils.parseCoinType(collateralCoinName);
2772
+ const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
2773
+ const riskModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2774
+ parentId: riskModelParentId,
2775
+ name: {
2776
+ type: "0x1::type_name::TypeName",
2777
+ value: {
2778
+ name: coinType.substring(2)
2779
+ }
2780
+ }
2781
+ });
2782
+ if (!riskModelDynamicFieldObjectResponse)
2783
+ return void 0;
2784
+ const riskModelDynamicFieldObject = riskModelDynamicFieldObjectResponse.data;
2785
+ if (riskModelDynamicFieldObject && riskModelDynamicFieldObject.content && "fields" in riskModelDynamicFieldObject.content) {
2786
+ const dynamicFields = riskModelDynamicFieldObject.content.fields;
2787
+ riskModel = dynamicFields.value.fields;
2892
2788
  }
2893
- }
2894
- });
2895
- const riskModelDynamicFieldObject = riskModelDynamicFieldObjectResponse?.data;
2896
- if (!(riskModelDynamicFieldObject && riskModelDynamicFieldObject.content && "fields" in riskModelDynamicFieldObject.content))
2897
- throw new Error(
2898
- `Failed to fetch riskModelDynamicFieldObject for ${riskModelDynamicFieldObjectResponse?.error?.code.toString()}: `
2899
- );
2900
- const riskModel = riskModelDynamicFieldObject.content.fields.value.fields;
2901
- const collateralStatParentId = fields.collateral_stats.fields.table.fields.id.id;
2902
- const collateralStatDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2903
- parentId: collateralStatParentId,
2904
- name: {
2905
- type: "0x1::type_name::TypeName",
2906
- value: {
2907
- name: coinType.substring(2)
2789
+ const collateralStatParentId = fields.collateral_stats.fields.table.fields.id.id;
2790
+ const collateralStatDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2791
+ parentId: collateralStatParentId,
2792
+ name: {
2793
+ type: "0x1::type_name::TypeName",
2794
+ value: {
2795
+ name: coinType.substring(2)
2796
+ }
2797
+ }
2798
+ });
2799
+ if (!collateralStatDynamicFieldObjectResponse)
2800
+ return void 0;
2801
+ const collateralStatDynamicFieldObject = collateralStatDynamicFieldObjectResponse.data;
2802
+ if (collateralStatDynamicFieldObject && collateralStatDynamicFieldObject.content && "fields" in collateralStatDynamicFieldObject.content) {
2803
+ const dynamicFields = collateralStatDynamicFieldObject.content.fields;
2804
+ collateralStat = dynamicFields.value.fields;
2908
2805
  }
2909
2806
  }
2910
- });
2911
- const collateralStatDynamicFieldObject = collateralStatDynamicFieldObjectResponse?.data;
2912
- if (!(collateralStatDynamicFieldObject && collateralStatDynamicFieldObject.content && "fields" in collateralStatDynamicFieldObject.content))
2913
- throw new Error(
2914
- `Failed to fetch collateralStatDynamicFieldObject for ${collateralCoinName}: ${collateralStatDynamicFieldObjectResponse?.error?.code.toString()}`
2807
+ }
2808
+ if (riskModel && collateralStat) {
2809
+ const parsedMarketCollateralData = parseOriginMarketCollateralData({
2810
+ type: riskModel.type.fields,
2811
+ collateralFactor: riskModel.collateral_factor.fields,
2812
+ liquidationFactor: riskModel.liquidation_factor.fields,
2813
+ liquidationDiscount: riskModel.liquidation_discount.fields,
2814
+ liquidationPanelty: riskModel.liquidation_penalty.fields,
2815
+ liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
2816
+ maxCollateralAmount: riskModel.max_collateral_amount,
2817
+ totalCollateralAmount: collateralStat.amount
2818
+ });
2819
+ const calculatedMarketCollateralData = calculateMarketCollateralData(
2820
+ query.utils,
2821
+ parsedMarketCollateralData
2915
2822
  );
2916
- const collateralStat = collateralStatDynamicFieldObject.content.fields.value.fields;
2917
- const parsedMarketCollateralData = parseOriginMarketCollateralData({
2918
- type: riskModel.type.fields,
2919
- collateralFactor: riskModel.collateral_factor.fields,
2920
- liquidationFactor: riskModel.liquidation_factor.fields,
2921
- liquidationDiscount: riskModel.liquidation_discount.fields,
2922
- liquidationPanelty: riskModel.liquidation_penalty.fields,
2923
- liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
2924
- maxCollateralAmount: riskModel.max_collateral_amount,
2925
- totalCollateralAmount: collateralStat.amount
2926
- });
2927
- const calculatedMarketCollateralData = calculateMarketCollateralData(
2928
- query.utils,
2929
- parsedMarketCollateralData
2930
- );
2931
- return {
2932
- coinName: collateralCoinName,
2933
- symbol: query.utils.parseSymbol(collateralCoinName),
2934
- coinType: query.utils.parseCoinType(collateralCoinName),
2935
- marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
2936
- coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
2937
- coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
2938
- coinPrice: coinPrice ?? 0,
2939
- collateralFactor: parsedMarketCollateralData.collateralFactor,
2940
- liquidationFactor: parsedMarketCollateralData.liquidationFactor,
2941
- liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
2942
- liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
2943
- liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
2944
- isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
2945
- ...calculatedMarketCollateralData
2946
- };
2823
+ marketCollateral = {
2824
+ coinName: collateralCoinName,
2825
+ symbol: query.utils.parseSymbol(collateralCoinName),
2826
+ coinType: query.utils.parseCoinType(collateralCoinName),
2827
+ marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
2828
+ coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
2829
+ coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
2830
+ coinPrice: coinPrice ?? 0,
2831
+ collateralFactor: parsedMarketCollateralData.collateralFactor,
2832
+ liquidationFactor: parsedMarketCollateralData.liquidationFactor,
2833
+ liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
2834
+ liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
2835
+ liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
2836
+ ...calculatedMarketCollateralData
2837
+ };
2838
+ }
2839
+ return marketCollateral;
2947
2840
  };
2948
2841
  var getObligations = async ({
2949
2842
  address
@@ -2959,6 +2852,9 @@ var getObligations = async ({
2959
2852
  filter: {
2960
2853
  StructType: `${protocolObjectId}::obligation::ObligationKey`
2961
2854
  },
2855
+ options: {
2856
+ showContent: true
2857
+ },
2962
2858
  cursor: nextCursor,
2963
2859
  limit: 10
2964
2860
  });
@@ -2972,14 +2868,14 @@ var getObligations = async ({
2972
2868
  hasNextPage = false;
2973
2869
  }
2974
2870
  } while (hasNextPage);
2975
- const keyObjectIds = keyObjectsResponse.map((ref) => ref?.data?.objectId).filter((id) => id !== void 0);
2976
- const keyObjects = await address.cache.queryGetObjects(keyObjectIds);
2871
+ const keyObjects = keyObjectsResponse.filter((ref) => !!ref.data);
2977
2872
  const obligations = [];
2978
2873
  await Promise.allSettled(
2979
- keyObjects.map(async (keyObject) => {
2980
- const keyId = keyObject.objectId;
2981
- if (keyObject.content && "fields" in keyObject.content) {
2982
- const fields = keyObject.content.fields;
2874
+ keyObjects.map(async ({ data }) => {
2875
+ const keyId = data?.objectId;
2876
+ const content = data?.content;
2877
+ if (keyId && content && "fields" in content) {
2878
+ const fields = content.fields;
2983
2879
  const obligationId = String(fields.ownership.fields.of);
2984
2880
  const locked = await getObligationLocked(address.cache, obligationId);
2985
2881
  obligations.push({ id: obligationId, keyId, locked });
@@ -3172,7 +3068,7 @@ var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPr
3172
3068
  const coinName = query.utils.parseCoinName(marketCoinName);
3173
3069
  marketPool = marketPool || await query.getMarketPool(coinName, indexer);
3174
3070
  if (!marketPool) {
3175
- throw new Error(`Failed to fetch marketPool for ${marketCoinName}`);
3071
+ throw new Error("Fail to fetch marketPool");
3176
3072
  }
3177
3073
  const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
3178
3074
  const rewardPoolId = query.address.get(
@@ -3247,6 +3143,7 @@ var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPr
3247
3143
  coinType: query.utils.parseCoinType(coinName),
3248
3144
  marketCoinType: query.utils.parseMarketCoinType(coinName),
3249
3145
  rewardCoinType: isMarketCoin(rewardCoinName) ? query.utils.parseMarketCoinType(rewardCoinName) : query.utils.parseCoinType(rewardCoinName),
3146
+ sCoinType: marketPool.sCoinType,
3250
3147
  coinDecimal: query.utils.getCoinDecimal(coinName),
3251
3148
  rewardCoinDecimal: query.utils.getCoinDecimal(rewardCoinName),
3252
3149
  coinPrice: coinPrices?.[coinName] ?? 0,
@@ -3843,6 +3740,7 @@ var getLending = async (query, poolCoinName, ownerAddress, indexer = false, mark
3843
3740
  symbol: query.utils.parseSymbol(poolCoinName),
3844
3741
  coinType: query.utils.parseCoinType(poolCoinName),
3845
3742
  marketCoinType: query.utils.parseMarketCoinType(poolCoinName),
3743
+ sCoinType: marketPool?.sCoinType ?? "",
3846
3744
  coinDecimal,
3847
3745
  coinPrice: coinPrice ?? 0,
3848
3746
  conversionRate: marketPool?.conversionRate ?? 1,
@@ -3900,8 +3798,12 @@ var getObligationAccounts = async (query, ownerAddress, indexer = false) => {
3900
3798
  };
3901
3799
  var getObligationAccount = async (query, obligationId, ownerAddress, indexer = false, market, coinPrices, coinAmounts) => {
3902
3800
  market = market || await query.queryMarket(indexer);
3903
- const poolAssetCoinNames = [
3904
- .../* @__PURE__ */ new Set([...Object.values(market.pools).map((pool) => pool.coinName)])
3801
+ const collateralAssetCoinNames = [
3802
+ .../* @__PURE__ */ new Set([
3803
+ ...Object.values(market.collaterals).map(
3804
+ (collateral) => collateral.coinName
3805
+ )
3806
+ ])
3905
3807
  ];
3906
3808
  const obligationQuery = await query.queryObligation(obligationId);
3907
3809
  const borrowIncentivePools = await query.getBorrowIncentivePools(
@@ -3909,9 +3811,8 @@ var getObligationAccount = async (query, obligationId, ownerAddress, indexer = f
3909
3811
  indexer
3910
3812
  );
3911
3813
  const borrowIncentiveAccounts = await query.getBorrowIncentiveAccounts(obligationId);
3912
- coinPrices = coinPrices || await query.utils.getCoinPrices(poolAssetCoinNames);
3913
- coinAmounts = coinAmounts || await query.getCoinAmounts(poolAssetCoinNames, ownerAddress);
3914
- console.log(coinPrices);
3814
+ coinPrices = coinPrices || await query.utils.getCoinPrices(collateralAssetCoinNames);
3815
+ coinAmounts = coinAmounts || await query.getCoinAmounts(collateralAssetCoinNames, ownerAddress);
3915
3816
  const collaterals = {};
3916
3817
  const debts = {};
3917
3818
  const borrowIncentives = {};
@@ -3923,7 +3824,7 @@ var getObligationAccount = async (query, obligationId, ownerAddress, indexer = f
3923
3824
  let totalRewardedPools = 0;
3924
3825
  let totalBorrowedValue = (0, import_bignumber4.default)(0);
3925
3826
  let totalBorrowedValueWithWeight = (0, import_bignumber4.default)(0);
3926
- for (const assetCoinName of poolAssetCoinNames) {
3827
+ for (const assetCoinName of collateralAssetCoinNames) {
3927
3828
  const collateral = obligationQuery?.collaterals.find((collateral2) => {
3928
3829
  const collateralCoinName = query.utils.parseCoinNameFromType(
3929
3830
  collateral2.type.name
@@ -4228,7 +4129,7 @@ var getTotalValueLocked = async (query, indexer = false) => {
4228
4129
  var import_bignumber5 = __toESM(require("bignumber.js"));
4229
4130
  var import_sui_kit3 = require("@scallop-io/sui-kit");
4230
4131
  var import_bcs = require("@mysten/sui/bcs");
4231
- var import_zod3 = require("zod");
4132
+ var import_zod2 = require("zod");
4232
4133
  var import_assert = __toESM(require("assert"));
4233
4134
  var getVescaKeys = async (utils, ownerAddress) => {
4234
4135
  const owner = ownerAddress || utils.suiKit.currentAddress();
@@ -4277,14 +4178,13 @@ var getVeScas = async ({
4277
4178
  }
4278
4179
  return result;
4279
4180
  };
4280
- var SuiObjectRefZod = import_zod3.z.object({
4281
- objectId: import_zod3.z.string(),
4282
- digest: import_zod3.z.string(),
4283
- version: import_zod3.z.string()
4181
+ var SuiObjectRefZod = import_zod2.z.object({
4182
+ objectId: import_zod2.z.string(),
4183
+ digest: import_zod2.z.string(),
4184
+ version: import_zod2.z.string()
4284
4185
  });
4285
- var getVeSca = async (utils, veScaKey, ownerAddress) => {
4186
+ var getVeSca = async (utils, veScaKey) => {
4286
4187
  const tableId = utils.address.get(`vesca.tableId`);
4287
- veScaKey = veScaKey || (await getVescaKeys(utils, ownerAddress))[0];
4288
4188
  if (!veScaKey)
4289
4189
  return void 0;
4290
4190
  if (typeof veScaKey === "object") {
@@ -4414,16 +4314,16 @@ var queryVeScaKeyIdFromReferralBindings = async (address, refereeAddress) => {
4414
4314
 
4415
4315
  // src/queries/loyaltyProgramQuery.ts
4416
4316
  var import_bignumber6 = __toESM(require("bignumber.js"));
4417
- var import_zod4 = require("zod");
4418
- var rewardPoolFieldsZod = import_zod4.z.object({
4419
- balance: import_zod4.z.string(),
4420
- enable_claim: import_zod4.z.boolean()
4317
+ var import_zod3 = require("zod");
4318
+ var rewardPoolFieldsZod = import_zod3.z.object({
4319
+ balance: import_zod3.z.string(),
4320
+ enable_claim: import_zod3.z.boolean()
4421
4321
  }).transform((value) => ({
4422
4322
  totalPoolReward: (0, import_bignumber6.default)(value.balance).shiftedBy(-9).toNumber(),
4423
4323
  isClaimEnabled: value.enable_claim
4424
4324
  }));
4425
- var userRewardFieldsZod = import_zod4.z.object({
4426
- value: import_zod4.z.string()
4325
+ var userRewardFieldsZod = import_zod3.z.object({
4326
+ value: import_zod3.z.string()
4427
4327
  }).transform((value) => (0, import_bignumber6.default)(value.value).shiftedBy(-9).toNumber());
4428
4328
  var getLoyaltyProgramInformations = async (query, veScaKey) => {
4429
4329
  const rewardPool = query.address.get("loyaltyProgram.rewardPool");
@@ -4534,10 +4434,10 @@ var ScallopUtils = class {
4534
4434
  * @param address - ScallopAddress instance.
4535
4435
  */
4536
4436
  async init(force = false, address) {
4537
- if (address && !this.address)
4538
- this.address = address;
4539
- if (force || !this.address.getAddresses()) {
4437
+ if (force || !this.address.getAddresses() || !address?.getAddresses()) {
4540
4438
  await this.address.read();
4439
+ } else {
4440
+ this.address = address;
4541
4441
  }
4542
4442
  }
4543
4443
  /**
@@ -4837,38 +4737,30 @@ var ScallopUtils = class {
4837
4737
  const priceId = this.address.get(
4838
4738
  `core.coins.${coinName}.oracle.pyth.feed`
4839
4739
  );
4840
- if (priceId) {
4841
- acc[coinName] = priceId;
4842
- }
4740
+ acc[coinName] = priceId;
4843
4741
  return acc;
4844
4742
  },
4845
4743
  {}
4846
4744
  );
4847
4745
  await Promise.allSettled(
4848
- Object.entries(priceIds).filter(([_, priceId]) => !!priceId).map(async ([coinName, priceId]) => {
4746
+ Object.entries(priceIds).map(async ([coinName, priceId]) => {
4849
4747
  const pythConnection = new import_pyth_sui_js.SuiPriceServiceConnection(endpoint);
4850
4748
  try {
4851
4749
  const feed = await this.cache.queryClient.fetchQuery({
4852
- queryKey: queryKeys.oracle.getPythLatestPriceFeed(
4853
- priceId,
4854
- endpoint
4855
- ),
4750
+ queryKey: queryKeys.oracle.getPythLatestPriceFeed(priceId),
4856
4751
  queryFn: async () => {
4857
4752
  return await pythConnection.getLatestPriceFeeds([priceId]) ?? [];
4858
4753
  }
4859
4754
  });
4860
4755
  if (feed[0]) {
4861
- const data = parseDataFromPythPriceFeed(
4862
- feed[0],
4863
- this.address
4864
- );
4756
+ const data = parseDataFromPythPriceFeed(feed[0], this.address);
4865
4757
  this._priceMap.set(coinName, {
4866
4758
  price: data.price,
4867
4759
  publishTime: data.publishTime
4868
4760
  });
4869
4761
  coinPrices[coinName] = data.price;
4870
- failedRequests.delete(coinName);
4871
4762
  }
4763
+ failedRequests.delete(coinName);
4872
4764
  } catch (e) {
4873
4765
  console.warn(
4874
4766
  `Failed to get price ${coinName} feeds with endpoint ${endpoint}: ${e}`
@@ -5877,13 +5769,14 @@ var generateBorrowIncentiveQuickMethod = ({ builder, txBlock }) => {
5877
5769
  );
5878
5770
  if (!obligationLocked || unstakeObligationBeforeStake) {
5879
5771
  const bindedVeScaKey = await builder.query.getBindedVeScaKey(obligationArg);
5880
- if (veScaKey && veScaKey !== bindedVeScaKey || !bindedVeScaKey) {
5772
+ const _veScaKey = bindedVeScaKey ?? veScaKey;
5773
+ if (!_veScaKey) {
5881
5774
  txBlock.stakeObligation(obligationArg, obligationKeyArg);
5882
5775
  } else {
5883
5776
  txBlock.stakeObligationWithVesca(
5884
5777
  obligationArg,
5885
5778
  obligationKeyArg,
5886
- bindedVeScaKey
5779
+ _veScaKey
5887
5780
  );
5888
5781
  }
5889
5782
  }
@@ -6717,6 +6610,14 @@ var ScallopIndexer = class {
6717
6610
  throw Error("Failed to getTotalValueLocked.");
6718
6611
  }
6719
6612
  }
6613
+ /**
6614
+ * Get coin price index data.
6615
+ *
6616
+ * @return price data.
6617
+ */
6618
+ async getCoinPrice(poolCoinName) {
6619
+ return (await this.getMarketPool(poolCoinName))?.coinPrice ?? 0;
6620
+ }
6720
6621
  };
6721
6622
 
6722
6623
  // src/queries/sCoinQuery.ts
@@ -6814,6 +6715,88 @@ var getSCoinSwapRate = async (query, fromSCoin, toSCoin, underlyingCoinPrice) =>
6814
6715
 
6815
6716
  // src/models/scallopQuery.ts
6816
6717
  var import_utils23 = require("@mysten/sui/utils");
6718
+
6719
+ // src/queries/isolatedAsset.ts
6720
+ var import_zod4 = require("zod");
6721
+ var isolatedAssetZod = import_zod4.z.object({
6722
+ dataType: import_zod4.z.string(),
6723
+ type: import_zod4.z.string(),
6724
+ hasPublicTransfer: import_zod4.z.boolean(),
6725
+ fields: import_zod4.z.object({
6726
+ id: import_zod4.z.object({
6727
+ id: import_zod4.z.string()
6728
+ }),
6729
+ name: import_zod4.z.object({
6730
+ type: import_zod4.z.string()
6731
+ }),
6732
+ value: import_zod4.z.boolean()
6733
+ })
6734
+ });
6735
+ var ISOLATED_ASSET_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::IsolatedAssetKey";
6736
+ var getIsolatedAssets = async (address) => {
6737
+ try {
6738
+ const marketObject = address.get("core.market");
6739
+ const isolatedAssets = [];
6740
+ if (!marketObject)
6741
+ return isolatedAssets;
6742
+ let hasNextPage = false;
6743
+ let nextCursor = null;
6744
+ const isIsolatedDynamicField = (dynamicField) => {
6745
+ return dynamicField.name.type === ISOLATED_ASSET_KEY;
6746
+ };
6747
+ do {
6748
+ const response = await address.cache.queryGetDynamicFields({
6749
+ parentId: marketObject,
6750
+ cursor: nextCursor,
6751
+ limit: 10
6752
+ });
6753
+ if (!response)
6754
+ break;
6755
+ const isolatedAssetCoinTypes = response.data.filter(isIsolatedDynamicField).map(({ name }) => `0x${name.value.type.name}`);
6756
+ isolatedAssets.push(...isolatedAssetCoinTypes);
6757
+ if (response && response.hasNextPage && response.nextCursor) {
6758
+ hasNextPage = true;
6759
+ nextCursor = response.nextCursor;
6760
+ } else {
6761
+ hasNextPage = false;
6762
+ }
6763
+ } while (hasNextPage);
6764
+ return isolatedAssets;
6765
+ } catch (e) {
6766
+ console.error(e);
6767
+ return [];
6768
+ }
6769
+ };
6770
+ var isIsolatedAsset = async (utils, coinName) => {
6771
+ try {
6772
+ const marketObject = utils.address.get("core.market");
6773
+ const cachedData = utils.address.cache.queryClient.getQueryData([
6774
+ "getDynamicFields",
6775
+ marketObject
6776
+ ]);
6777
+ if (cachedData) {
6778
+ const coinType2 = utils.parseCoinType(coinName);
6779
+ return cachedData.includes(coinType2);
6780
+ }
6781
+ const coinType = utils.parseCoinType(coinName).slice(2);
6782
+ const object = await utils.cache.queryGetDynamicFieldObject({
6783
+ parentId: marketObject,
6784
+ name: {
6785
+ type: ISOLATED_ASSET_KEY,
6786
+ value: coinType
6787
+ }
6788
+ });
6789
+ const parsedData = isolatedAssetZod.safeParse(object?.data?.content);
6790
+ if (!parsedData.success)
6791
+ return false;
6792
+ return parsedData.data.fields.value;
6793
+ } catch (e) {
6794
+ console.error(e);
6795
+ return false;
6796
+ }
6797
+ };
6798
+
6799
+ // src/models/scallopQuery.ts
6817
6800
  var ScallopQuery = class {
6818
6801
  constructor(params, instance) {
6819
6802
  this.params = params;
@@ -6883,11 +6866,10 @@ var ScallopQuery = class {
6883
6866
  * @param address - ScallopAddress instance.
6884
6867
  */
6885
6868
  async init(force = false, address) {
6886
- if (address && !this.address) {
6887
- this.address = address;
6888
- }
6889
- if (force || !this.address.getAddresses()) {
6869
+ if (force || !this.address.getAddresses() || !address?.getAddresses()) {
6890
6870
  await this.address.read();
6871
+ } else {
6872
+ this.address = address;
6891
6873
  }
6892
6874
  await this.utils.init(force, this.address);
6893
6875
  }
@@ -7344,6 +7326,14 @@ var ScallopQuery = class {
7344
7326
  async isIsolatedAsset(assetCoinName) {
7345
7327
  return isIsolatedAsset(this.utils, assetCoinName);
7346
7328
  }
7329
+ /**
7330
+ * Get pool coin price from indexer
7331
+ * @param coinName
7332
+ * @returns price data
7333
+ */
7334
+ async getCoinPriceByIndexer(poolName) {
7335
+ return this.indexer.getCoinPrice(poolName);
7336
+ }
7347
7337
  };
7348
7338
 
7349
7339
  // src/models/scallopBuilder.ts
@@ -7396,10 +7386,10 @@ var ScallopBuilder = class {
7396
7386
  * @param address - ScallopAddress instance.
7397
7387
  */
7398
7388
  async init(force = false, address) {
7399
- if (address && !this.address)
7400
- this.address = address;
7401
- if (force || !this.address.getAddresses()) {
7389
+ if (force || !this.address.getAddresses() || !address?.getAddresses()) {
7402
7390
  await this.address.read();
7391
+ } else {
7392
+ this.address = address;
7403
7393
  }
7404
7394
  await this.query.init(force, this.address);
7405
7395
  await this.utils.init(force, this.address);
@@ -7784,7 +7774,7 @@ var ScallopClient = class {
7784
7774
  );
7785
7775
  txBlock.transferObjects([coin], sender);
7786
7776
  if (sign && availableStake) {
7787
- await txBlock.stakeObligationQuick(obligationId, obligationKey);
7777
+ await txBlock.stakeObligationWithVeScaQuick(obligationId, obligationKey);
7788
7778
  }
7789
7779
  if (sign) {
7790
7780
  return await this.suiKit.signAndSendTxn(
@@ -7814,7 +7804,7 @@ var ScallopClient = class {
7814
7804
  }
7815
7805
  await txBlock.repayQuick(amount, poolCoinName, obligationId);
7816
7806
  if (sign && availableStake) {
7817
- await txBlock.stakeObligationQuick(obligationId, obligationKey);
7807
+ await txBlock.stakeObligationWithVeScaQuick(obligationId, obligationKey);
7818
7808
  }
7819
7809
  if (sign) {
7820
7810
  return await this.suiKit.signAndSendTxn(
@@ -7961,7 +7951,7 @@ var ScallopClient = class {
7961
7951
  const txBlock = this.builder.createTxBlock();
7962
7952
  const sender = walletAddress || this.walletAddress;
7963
7953
  txBlock.setSender(sender);
7964
- await txBlock.stakeObligationQuick(obligationId, obligationKeyId);
7954
+ await txBlock.stakeObligationWithVeScaQuick(obligationId, obligationKeyId);
7965
7955
  if (sign) {
7966
7956
  return await this.suiKit.signAndSendTxn(
7967
7957
  txBlock
@@ -8314,7 +8304,6 @@ var Scallop = class {
8314
8304
  ScallopIndexer,
8315
8305
  ScallopQuery,
8316
8306
  ScallopUtils,
8317
- TEST_ADDRESSES,
8318
8307
  UNLOCK_ROUND_DURATION,
8319
8308
  USE_TEST_ADDRESS,
8320
8309
  assetCoins,