@scallop-io/sui-scallop-sdk 1.3.2-alpha.3 → 1.3.3-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -62,6 +62,7 @@ __export(src_exports, {
62
62
  ScallopIndexer: () => ScallopIndexer,
63
63
  ScallopQuery: () => ScallopQuery,
64
64
  ScallopUtils: () => ScallopUtils,
65
+ TEST_ADDRESSES: () => TEST_ADDRESSES,
65
66
  UNLOCK_ROUND_DURATION: () => UNLOCK_ROUND_DURATION,
66
67
  USE_TEST_ADDRESS: () => USE_TEST_ADDRESS,
67
68
  assetCoins: () => assetCoins,
@@ -336,11 +337,18 @@ var voloCoinIds = {
336
337
  var sCoinIds = {
337
338
  susdc: "0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC",
338
339
  ssbeth: "0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",
339
- ssui: "0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b::scallop_sui::SCALLOP_SUI",
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',
340
343
  scetus: "0xea346ce428f91ab007210443efcea5f5cdbbb3aae7e9affc0ca93f9203c31f0c::scallop_cetus::SCALLOP_CETUS",
341
344
  ssca: "0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e::scallop_sca::SCALLOP_SCA",
342
- swusdc: "0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
343
- swusdt: "0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
345
+ // TODO: Change this to the correct value on production release
346
+ swusdc: "0xf5447c4305a486d8c8557559887c2c39449ddb5e748f15d33946d02a1663c158::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
347
+ // '0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC',
348
+ swusdt: (
349
+ // '0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT',
350
+ "0xac781d9f73058ff5e69f9bf8dde32f2e8c71c66d7fe8497fc83b2d9182254b22::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT"
351
+ ),
344
352
  sweth: "0x67540ceb850d418679e69f1fb6b2093d6df78a2a699ffc733f7646096d552e9b::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",
345
353
  safsui: "0x00671b1fa2a124f5be8bdae8b91ee711462c5d9e31bda232e70fd9607b523c88::scallop_af_sui::SCALLOP_AF_SUI",
346
354
  shasui: "0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",
@@ -423,10 +431,7 @@ var queryKeys = {
423
431
  "getDynamicFieldObject",
424
432
  {
425
433
  parentId: input?.parentId,
426
- name: {
427
- type: input?.name?.type,
428
- value: input?.name?.value
429
- }
434
+ name: JSON.stringify(input?.name ?? void 0)
430
435
  }
431
436
  ],
432
437
  getTotalVeScaTreasuryAmount: (refreshArgs, vescaAmountArgs) => [
@@ -444,10 +449,10 @@ var queryKeys = {
444
449
  ]
445
450
  },
446
451
  oracle: {
447
- getPythLatestPriceFeed: (pythPriceId) => [
452
+ getPythLatestPriceFeed: (pythPriceId, endpoint) => [
448
453
  "oracle",
449
454
  "getPythPriceId",
450
- { pythPriceId }
455
+ { pythPriceId, endpoint }
451
456
  ]
452
457
  }
453
458
  };
@@ -459,70 +464,494 @@ var MAX_LOCK_DURATION = MAX_LOCK_ROUNDS * UNLOCK_ROUND_DURATION;
459
464
  var MIN_INITIAL_LOCK_AMOUNT = 1e10;
460
465
  var MIN_TOP_UP_AMOUNT = 1e9;
461
466
 
462
- // src/models/scallop.ts
463
- var import_sui_kit16 = require("@scallop-io/sui-kit");
464
-
465
- // src/models/scallopAddress.ts
466
- var import_sui_kit2 = require("@scallop-io/sui-kit");
467
-
468
- // src/models/scallopCache.ts
469
- var import_query_core = require("@tanstack/query-core");
470
- var import_sui_kit = require("@scallop-io/sui-kit");
471
-
472
- // src/constants/cache.ts
473
- var DEFAULT_CACHE_OPTIONS = {
474
- defaultOptions: {
475
- queries: {
476
- staleTime: 5e3,
477
- gcTime: 5e3
478
- }
479
- }
480
- };
481
-
482
- // src/utils/builder.ts
483
- var requireSender = (txBlock) => {
484
- const sender = txBlock.blockData.sender;
485
- if (!sender) {
486
- throw new Error("Sender is required");
487
- }
488
- return sender;
489
- };
490
- var checkVesca = (prevUnlockAtInMillisTimestamp) => {
491
- if (prevUnlockAtInMillisTimestamp === void 0) {
492
- throw new Error("veSca not found");
493
- }
494
- };
495
- var checkVescaExpired = (prevUnlockAtInMillisTimestamp) => {
496
- if (prevUnlockAtInMillisTimestamp <= (/* @__PURE__ */ new Date()).getTime()) {
497
- throw new Error("veSca is expired, use renewExpiredVeScaQuick instead");
498
- }
499
- };
500
- var checkExtendLockPeriod = (lockPeriodInDays, newUnlockAtInSecondTimestamp, prevUnlockAtInMillisTimestamp) => {
501
- checkVesca(prevUnlockAtInMillisTimestamp);
502
- checkVescaExpired(prevUnlockAtInMillisTimestamp);
503
- const prevUnlockAtInSecondTimestamp = Math.floor(
504
- prevUnlockAtInMillisTimestamp / 1e3
505
- );
506
- if (lockPeriodInDays < 1) {
507
- throw new Error("Minimum lock period is 1 day");
508
- }
509
- const availableLockPeriodInDays = Math.floor(
510
- (newUnlockAtInSecondTimestamp - prevUnlockAtInSecondTimestamp) / UNLOCK_ROUND_DURATION
511
- );
512
- if (lockPeriodInDays > availableLockPeriodInDays) {
513
- throw new Error(
514
- `Cannot extend lock period by ${lockPeriodInDays} days, maximum lock period is ~4 years (${MAX_LOCK_ROUNDS} days), remaining lock period is ${MAX_LOCK_ROUNDS - availableLockPeriodInDays}`
515
- );
516
- }
517
- };
518
- var checkLockSca = (scaAmountOrCoin, lockPeriodInDays, newUnlockAtInSecondTimestamp, prevUnlockAtInMillisTimestamp) => {
519
- const prevUnlockAtInSecondTimestamp = prevUnlockAtInMillisTimestamp ? Math.floor(prevUnlockAtInMillisTimestamp / 1e3) : void 0;
520
- const isInitialLock = !prevUnlockAtInSecondTimestamp;
521
- const isLockExpired = !isInitialLock && prevUnlockAtInSecondTimestamp * 1e3 <= (/* @__PURE__ */ new Date()).getTime();
522
- if (isInitialLock || isLockExpired) {
523
- if (scaAmountOrCoin !== void 0 && lockPeriodInDays !== void 0) {
524
- if (lockPeriodInDays <= 0) {
525
- throw new Error("Lock period must be greater than 0");
467
+ // src/constants/testAddress.ts
468
+ var TEST_ADDRESSES = {
469
+ core: {
470
+ // version:
471
+ // '0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7',
472
+ version: "0xd318de9b0f6873879a82cbfcc2daa1d1591a8b54e7cea9f4b567da63c692a52b",
473
+ versionCap: "0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",
474
+ // object:
475
+ // '0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf',
476
+ object: "0x6c23585e940a989588432509107e98bae06dbca4e333f26d0635d401b3c7c76d",
477
+ // market:
478
+ // '0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9',
479
+ market: "0x9d6434e97f3f98fd9b0c0e1dca22632073985abcd22541feae7ee1e34cbe3af2",
480
+ adminCap: "0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",
481
+ coinDecimalsRegistry: "0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",
482
+ // obligationAccessStore:
483
+ // '0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9',
484
+ obligationAccessStore: "0x46e9b44a77ee9c9d33cc2689ecdfbb8f681935cbc6bdf6ac3df048e396c36c82",
485
+ coins: {
486
+ usdc: {
487
+ id: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",
488
+ metaData: "0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",
489
+ treasury: "",
490
+ oracle: {
491
+ supra: "",
492
+ switchboard: "",
493
+ pyth: {
494
+ feed: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
495
+ feedObject: "0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"
496
+ }
497
+ }
498
+ },
499
+ cetus: {
500
+ id: "0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",
501
+ metaData: "0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",
502
+ treasury: "",
503
+ oracle: {
504
+ supra: "",
505
+ switchboard: "",
506
+ pyth: {
507
+ feed: "e5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",
508
+ feedObject: "0x24c0247fb22457a719efac7f670cdc79be321b521460bd6bd2ccfa9f80713b14"
509
+ }
510
+ }
511
+ },
512
+ wapt: {
513
+ id: "0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",
514
+ metaData: "0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8",
515
+ treasury: "",
516
+ oracle: {
517
+ supra: "",
518
+ switchboard: "",
519
+ pyth: {
520
+ feed: "03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5",
521
+ feedObject: "0x7c5b7837c44a69b469325463ac0673ac1aa8435ff44ddb4191c9ae380463647f"
522
+ }
523
+ }
524
+ },
525
+ wsol: {
526
+ id: "0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",
527
+ metaData: "0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e",
528
+ treasury: "",
529
+ oracle: {
530
+ supra: "",
531
+ switchboard: "",
532
+ pyth: {
533
+ feed: "ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",
534
+ feedObject: "0x9d0d275efbd37d8a8855f6f2c761fa5983293dd8ce202ee5196626de8fcd4469"
535
+ }
536
+ }
537
+ },
538
+ wbtc: {
539
+ id: "0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",
540
+ metaData: "0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd",
541
+ treasury: "",
542
+ oracle: {
543
+ supra: "",
544
+ switchboard: "",
545
+ pyth: {
546
+ feed: "e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
547
+ feedObject: "0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"
548
+ }
549
+ }
550
+ },
551
+ weth: {
552
+ id: "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",
553
+ metaData: "0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f",
554
+ treasury: "",
555
+ oracle: {
556
+ supra: "",
557
+ switchboard: "",
558
+ pyth: {
559
+ feed: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",
560
+ feedObject: "0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"
561
+ }
562
+ }
563
+ },
564
+ wusdc: {
565
+ id: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",
566
+ metaData: "0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189",
567
+ treasury: "",
568
+ oracle: {
569
+ supra: "",
570
+ switchboard: "",
571
+ pyth: {
572
+ feed: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
573
+ feedObject: "0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"
574
+ }
575
+ }
576
+ },
577
+ wusdt: {
578
+ id: "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",
579
+ metaData: "0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c",
580
+ treasury: "",
581
+ oracle: {
582
+ supra: "",
583
+ switchboard: "",
584
+ pyth: {
585
+ feed: "2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",
586
+ feedObject: "0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"
587
+ }
588
+ }
589
+ },
590
+ sui: {
591
+ id: "0x0000000000000000000000000000000000000000000000000000000000000002",
592
+ metaData: "0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",
593
+ treasury: "",
594
+ oracle: {
595
+ supra: "",
596
+ switchboard: "0xbca474133638352ba83ccf7b5c931d50f764b09550e16612c9f70f1e21f3f594",
597
+ pyth: {
598
+ feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
599
+ feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
600
+ }
601
+ }
602
+ },
603
+ afsui: {
604
+ id: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",
605
+ metaData: "0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",
606
+ treasury: "",
607
+ oracle: {
608
+ supra: "",
609
+ switchboard: "",
610
+ pyth: {
611
+ feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
612
+ feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
613
+ }
614
+ }
615
+ },
616
+ hasui: {
617
+ id: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",
618
+ metaData: "0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",
619
+ treasury: "",
620
+ oracle: {
621
+ supra: "",
622
+ switchboard: "",
623
+ pyth: {
624
+ feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
625
+ feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
626
+ }
627
+ }
628
+ },
629
+ vsui: {
630
+ id: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",
631
+ metaData: "0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd",
632
+ treasury: "",
633
+ oracle: {
634
+ supra: "",
635
+ switchboard: "",
636
+ pyth: {
637
+ feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
638
+ feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
639
+ }
640
+ }
641
+ },
642
+ sca: {
643
+ id: "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",
644
+ metaData: "0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",
645
+ treasury: "",
646
+ oracle: {
647
+ supra: "",
648
+ switchboard: "",
649
+ pyth: {
650
+ feed: "7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",
651
+ feedObject: "0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"
652
+ }
653
+ }
654
+ },
655
+ sbeth: {
656
+ id: "0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29",
657
+ metaData: "0x89b04ba87f8832d4d76e17a1c9dce72eb3e64d372cf02012b8d2de5384faeef0",
658
+ treasury: "",
659
+ oracle: {
660
+ supra: "",
661
+ switchboard: "",
662
+ pyth: {
663
+ feed: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",
664
+ feedObject: "0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"
665
+ }
666
+ }
667
+ }
668
+ },
669
+ oracles: {
670
+ xOracle: "0x93d5bf0936b71eb27255941e532fac33b5a5c7759e377b4923af0a1359ad494f",
671
+ xOracleCap: "0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",
672
+ supra: { registry: "", registryCap: "", holder: "" },
673
+ switchboard: { registry: "", registryCap: "" },
674
+ pyth: {
675
+ registry: "0xedc293f9413a5a7a5d53bdba1fd889d0a4030894469228f0acdae4aa3c55a213",
676
+ registryCap: "0xbcb07141eb1f7e01fbda4130ecf5f5adaeabb77f5d9c32158b7532bcd2197acd",
677
+ state: "0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",
678
+ wormhole: "0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",
679
+ wormholeState: "0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"
680
+ }
681
+ },
682
+ packages: {
683
+ coinDecimalsRegistry: {
684
+ id: "0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",
685
+ upgradeCap: "0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"
686
+ },
687
+ math: {
688
+ id: "0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",
689
+ upgradeCap: "0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"
690
+ },
691
+ whitelist: {
692
+ id: "0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",
693
+ upgradeCap: "0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"
694
+ },
695
+ x: {
696
+ id: "0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",
697
+ upgradeCap: "0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"
698
+ },
699
+ protocol: {
700
+ id: "0x6c23585e940a989588432509107e98bae06dbca4e333f26d0635d401b3c7c76d",
701
+ upgradeCap: "0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"
702
+ },
703
+ // protocol: {
704
+ // id: '0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e',
705
+ // upgradeCap:
706
+ // '0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a',
707
+ // },
708
+ protocolWhitelist: {
709
+ id: "0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",
710
+ upgradeCap: "0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"
711
+ },
712
+ // query: {
713
+ // id: '0xb8d603a39114a5efef3dd0bf84df0bed1be1fbd39b78b7dd6e8a61ccc5e6006f',
714
+ // upgradeCap:
715
+ // '0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f',
716
+ // },
717
+ query: {
718
+ id: "0x89706958f43fb170de134579e3fbc53972b946ee78bd2442d8e1adc36074fbdc",
719
+ upgradeCap: "0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"
720
+ },
721
+ supra: { id: "", upgradeCap: "" },
722
+ pyth: {
723
+ id: "0x910f30cbc7f601f75a5141a01265cd47c62d468707c5e1aecb32a18f448cb25a",
724
+ upgradeCap: "0xdf0ffbae1ea5bb25fbca5efba433dcf00c7cced65679af2f04728901275c6157"
725
+ },
726
+ switchboard: { id: "", upgradeCap: "" },
727
+ xOracle: {
728
+ id: "0x1478a432123e4b3d61878b629f2c692969fdb375644f1251cd278a4b1e7d7cd6",
729
+ upgradeCap: "0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"
730
+ },
731
+ testCoin: { id: "", upgradeCap: "" }
732
+ }
733
+ },
734
+ spool: {
735
+ // id: '0x7c4fdabe81c31b19a45d1e572a52a539997a90903fbb5bfab71480abe0fa62c3',
736
+ id: "0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",
737
+ adminCap: "0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",
738
+ // object:
739
+ // '0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a',
740
+ object: "0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",
741
+ pools: {
742
+ sweth: {
743
+ id: "0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",
744
+ rewardPoolId: "0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"
745
+ },
746
+ ssui: {
747
+ // id: '0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4',
748
+ id: "0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",
749
+ rewardPoolId: (
750
+ // '0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9',
751
+ "0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"
752
+ )
753
+ },
754
+ susdc: {
755
+ id: "0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",
756
+ rewardPoolId: "0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"
757
+ },
758
+ swusdc: {
759
+ // id: '0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0',
760
+ id: "0xf1b383b9cf2e9f515fc69567df1053098f273849d09cd84b0278a773429bd2b2",
761
+ rewardPoolId: (
762
+ // '0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8',
763
+ "0xc71c53ee6505d928ba15bea4fe4f45d98c9c31eced94b72d00a7827d4b7ba3ff"
764
+ )
765
+ },
766
+ swusdt: {
767
+ // id: '0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f',
768
+ id: "0xb5567dfa5c7fc17a249e959732664c50713dd8c23db1a11376b27df800c17418",
769
+ rewardPoolId: (
770
+ // '0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080',
771
+ "0x60768b0687ff0235e376a039709a683e4c436098785e473b67b32dbab47b69ab"
772
+ )
773
+ },
774
+ scetus: {
775
+ id: "0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",
776
+ rewardPoolId: "0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"
777
+ },
778
+ safsui: {
779
+ // id: '0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800',
780
+ id: "0xc568bb4c991258e839aa54802ecda04fcd9838c826bc3b42b40af81b23c458c8",
781
+ rewardPoolId: (
782
+ // '0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e',
783
+ "0x389a3cbeda742b918941bb24fd00e077bad3367484394d6234f8209b9a6aa03d"
784
+ )
785
+ },
786
+ shasui: {
787
+ // id: '0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa',
788
+ id: "0x93f3f4499bf89f2d05ddc1f8b15f51701a7c6c4d0ac0b9c3bc99462cbbd8e321",
789
+ rewardPoolId: (
790
+ // '0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66',
791
+ "0x94cee1be7f5ff34193f3aabef0b14142cb28af4d905fe487a9a7d85a15edb6aa"
792
+ )
793
+ },
794
+ svsui: {
795
+ // id: '0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670',
796
+ id: "0xa970e9087f80cb59e9299b8e7af7175d977ad6c9af0322aa4440e138fbd7ae00",
797
+ rewardPoolId: (
798
+ // '0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a',
799
+ "0x38eee9699c4fc132a6623e54b865f047df4fc6eb83af807300f44e8f4b235ff0"
800
+ )
801
+ }
802
+ },
803
+ config: ""
804
+ },
805
+ borrowIncentive: {
806
+ id: "0x85769d63565ce99c7622f8e336ca1460926ddf29738ad2a39407b5cac29f61fe",
807
+ adminCap: "0x56ac8e6f2b360b2b35c0168d72cc6cd17d9592afb83709865cb87af24bb2025b",
808
+ object: "0x85769d63565ce99c7622f8e336ca1460926ddf29738ad2a39407b5cac29f61fe",
809
+ query: "0x8e0d00f8ff1199d7c5fe56cea0e901a525daeefff0445a1635ace8282ae3302c",
810
+ incentivePools: "0x9d564c93128c6ab0c0d3e050a47f11df0b91494f3bb779bdc1301c1c637f15eb",
811
+ incentiveAccounts: "0x09e6040e798246de04941bc79a3ba62d3eca6d7a218cc30f21fb07f478fa2926",
812
+ config: "0x43d4ca1dfc90b161c4240facd119e74e4b850cca2957f88c2ec289c9380da064"
813
+ },
814
+ referral: {
815
+ id: "0x1bf5a8ce77050d8052549d743e16b469f15aa6b81b752b78b6ebb65179665f5a",
816
+ object: "0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",
817
+ adminCap: "0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",
818
+ referralBindings: "0xcf184487782bed962bf678001efe775d31fb94b9992333a57594cf15d79d5ced",
819
+ bindingTableId: "0x41a50e258c0a266ce84e0e1a618dbf70b878cc943909e613089a50afcceb2bc0",
820
+ referralRevenuePool: "0xc24e3e5e37032f29a3dd91a9a1f057af8821b7e6c148e9683900ac8b6d30f0c6",
821
+ revenueTableId: "0x595baa3654c297bff84ab7786a2d250f019cefc66e8df8e89fd9d41e02bd30dd",
822
+ referralTiers: "0x144350f3db9b46d11b140084cd54e6de0b9c3b8d265ce8059b51d0ef58ea464b",
823
+ tiersTableId: "0xeac755a7a8b7798530905ac79e8c114f19d0f130f6eab012954f08faac29c75d",
824
+ // authorizedWitnessList:
825
+ // '0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e',
826
+ authorizedWitnessList: "0x9d6223dc52015b8a3986a573590ef2af8f1b8f3e4685513888c052f001b87e7f",
827
+ version: "0x3545849eb97723e676a476ec9d4fe5f2eb0eb2c6b78972851114fd4c7ed4639f"
828
+ },
829
+ vesca: {
830
+ id: "0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",
831
+ object: "0x1158813b32962c2d22888fae257d5f2365b03631f0cd5d5b912ccdf51ff4e2f2",
832
+ adminCap: "0x8ffa76135c5b85c5fbd73a6448a4a733d826cb63a267ab817656acb77c72d4a5",
833
+ tableId: "0x0a0b7f749baeb61e3dfee2b42245e32d0e6b484063f0a536b33e771d573d7246",
834
+ table: "0xd3a4632b1080f7d96e1c2487d4dabf2c1196916937c505a69954ac9f393be8d0",
835
+ treasury: "0xafa4b6231e49c15a22d641ce33fda761baaf650fa21899dfa2eb1716146e7306",
836
+ config: "0x7cbcb0a342179577a117dfdff974cf1ab765d3b571067bf22ddf5f9e3a667922"
837
+ },
838
+ loyaltyProgram: {
839
+ id: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
840
+ object: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
841
+ rewardPool: "0xf9c090492ef476bd542109d0913ffe871cbfa28578b7114eca2a8c0e5671786f",
842
+ userRewardTableId: "0x748a80395849ed37db1b0e14f2ab5d1d96458d2359ab3a84eb079d0f4ac7cf2e"
843
+ },
844
+ scoin: {
845
+ id: "0x773dab39c90fe05439b06a2d061795e52a974ff92c2aef90b2ee467acf7f33c8",
846
+ coins: {
847
+ ssui: {
848
+ coinType: "0xf569919046f19a0c40b519ecfbb6ca0319698cd5908716c29b62ef56541f298b::scallop_sui::SCALLOP_SUI",
849
+ treasury: "0x0e499640a12c38dd9cc44532f5bc5fd1b6da86d2f9a8810357250f4b26e9e5c7"
850
+ },
851
+ scetus: {
852
+ coinType: "0x8b71e6d323ed78515af2bead13bf3d0da1562ba4a99234eb7c4f14fd39ef0427::scallop_cetus::SCALLOP_CETUS",
853
+ treasury: "0xd786f4b2d26278cc7911a3445b1b085eab60f269ef9dbb6b87e803d52f155003"
854
+ },
855
+ ssca: {
856
+ coinType: "0x0a9d3c6c9af9f6e8def82921541bcbd17f73ed31bed3adcb684f2a4c267e42f0::scallop_sca::SCALLOP_SCA",
857
+ treasury: "0xe818636d1d6c46d6ea1a2dce9d94696d7cbc18ce27451b603eeaa47aba8d75e0"
858
+ },
859
+ swusdc: {
860
+ coinType: "0xf5447c4305a486d8c8557559887c2c39449ddb5e748f15d33946d02a1663c158::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
861
+ treasury: "0x471fbab72578bab577263006fe32543b6e76153fffa2bef69affe4bc4934258f"
862
+ },
863
+ swusdt: {
864
+ coinType: "0xac781d9f73058ff5e69f9bf8dde32f2e8c71c66d7fe8497fc83b2d9182254b22::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
865
+ treasury: "0x921a4ed4bb4b4f11f51a462c83f4c0f6b60a90e441d1bc0d26d6fd893146bf4d"
866
+ },
867
+ sweth: {
868
+ coinType: "0x27d54f43e3eda701be56b82e5756e41c84467cd202f5cf713d5f9e45a9f1b6bc::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",
869
+ treasury: "0x032b4c8fac94c038dbe986f7587e9b1e4ef580b5ee06d2ef249d85459b7ef05d"
870
+ },
871
+ safsui: {
872
+ coinType: "0xb75b46d975d8d80670b53a6bee90baaa8ce2e0b7d397f079447d641eef6b44ad::scallop_af_sui::SCALLOP_AF_SUI",
873
+ treasury: "0x21450ef0570ef3d224ffa3b873ab802e439ece7b93cc7efad10ae0c1e3b3fcfe"
874
+ },
875
+ shasui: {
876
+ coinType: "0xd973a723874e2c7cde196602a79155a1343a933f8cf87d9b1bb7408bc1acbc58::scallop_ha_sui::SCALLOP_HA_SUI",
877
+ treasury: "0xf822fc1402207e47d2e3ba8ff6e1e594bf1de777dc5ebd2744619cd2726e3b0d"
878
+ },
879
+ svsui: {
880
+ coinType: "0x97023a317320c4498cc4cd239dd02fd30c28246e5e8f81325d63f2bd8d70f6b3::scallop_v_sui::SCALLOP_V_SUI",
881
+ treasury: "0x327114f0bf3559d7e2de10282147ed76a236c7c6775029165c4db09a6062ead6"
882
+ },
883
+ ssbeth: {
884
+ coinType: "0xb14f82d8506d139eacef109688d1b71e7236bcce9b2c0ad526abcd6aa5be7de0::scallop_sb_eth::SCALLOP_SB_ETH",
885
+ treasury: "0xfd0f02def6358a1f266acfa1493d4707ee8387460d434fb667d63d755ff907ed"
886
+ }
887
+ }
888
+ }
889
+ };
890
+
891
+ // src/models/scallop.ts
892
+ var import_sui_kit16 = require("@scallop-io/sui-kit");
893
+
894
+ // src/models/scallopAddress.ts
895
+ var import_sui_kit2 = require("@scallop-io/sui-kit");
896
+
897
+ // src/models/scallopCache.ts
898
+ var import_query_core = require("@tanstack/query-core");
899
+ var import_sui_kit = require("@scallop-io/sui-kit");
900
+
901
+ // src/constants/cache.ts
902
+ var DEFAULT_CACHE_OPTIONS = {
903
+ defaultOptions: {
904
+ queries: {
905
+ staleTime: 5e3,
906
+ gcTime: 5e3
907
+ }
908
+ }
909
+ };
910
+
911
+ // src/utils/builder.ts
912
+ var requireSender = (txBlock) => {
913
+ const sender = txBlock.blockData.sender;
914
+ if (!sender) {
915
+ throw new Error("Sender is required");
916
+ }
917
+ return sender;
918
+ };
919
+ var checkVesca = (prevUnlockAtInMillisTimestamp) => {
920
+ if (prevUnlockAtInMillisTimestamp === void 0) {
921
+ throw new Error("veSca not found");
922
+ }
923
+ };
924
+ var checkVescaExpired = (prevUnlockAtInMillisTimestamp) => {
925
+ if (prevUnlockAtInMillisTimestamp <= (/* @__PURE__ */ new Date()).getTime()) {
926
+ throw new Error("veSca is expired, use renewExpiredVeScaQuick instead");
927
+ }
928
+ };
929
+ var checkExtendLockPeriod = (lockPeriodInDays, newUnlockAtInSecondTimestamp, prevUnlockAtInMillisTimestamp) => {
930
+ checkVesca(prevUnlockAtInMillisTimestamp);
931
+ checkVescaExpired(prevUnlockAtInMillisTimestamp);
932
+ const prevUnlockAtInSecondTimestamp = Math.floor(
933
+ prevUnlockAtInMillisTimestamp / 1e3
934
+ );
935
+ if (lockPeriodInDays < 1) {
936
+ throw new Error("Minimum lock period is 1 day");
937
+ }
938
+ const availableLockPeriodInDays = Math.floor(
939
+ (newUnlockAtInSecondTimestamp - prevUnlockAtInSecondTimestamp) / UNLOCK_ROUND_DURATION
940
+ );
941
+ if (lockPeriodInDays > availableLockPeriodInDays) {
942
+ throw new Error(
943
+ `Cannot extend lock period by ${lockPeriodInDays} days, maximum lock period is ~4 years (${MAX_LOCK_ROUNDS} days), remaining lock period is ${MAX_LOCK_ROUNDS - availableLockPeriodInDays}`
944
+ );
945
+ }
946
+ };
947
+ var checkLockSca = (scaAmountOrCoin, lockPeriodInDays, newUnlockAtInSecondTimestamp, prevUnlockAtInMillisTimestamp) => {
948
+ const prevUnlockAtInSecondTimestamp = prevUnlockAtInMillisTimestamp ? Math.floor(prevUnlockAtInMillisTimestamp / 1e3) : void 0;
949
+ const isInitialLock = !prevUnlockAtInSecondTimestamp;
950
+ const isLockExpired = !isInitialLock && prevUnlockAtInSecondTimestamp * 1e3 <= (/* @__PURE__ */ new Date()).getTime();
951
+ if (isInitialLock || isLockExpired) {
952
+ if (scaAmountOrCoin !== void 0 && lockPeriodInDays !== void 0) {
953
+ if (lockPeriodInDays <= 0) {
954
+ throw new Error("Lock period must be greater than 0");
526
955
  }
527
956
  if (typeof scaAmountOrCoin === "number" && scaAmountOrCoin < MIN_INITIAL_LOCK_AMOUNT) {
528
957
  throw new Error(
@@ -1200,491 +1629,99 @@ var ScallopCache = class {
1200
1629
  });
1201
1630
  }
1202
1631
  /**
1203
- * @description Provides cache for getObjects of the SuiKit.
1204
- * @param objectIds
1205
- * @returns Promise<SuiObjectData[]>
1206
- */
1207
- async queryGetObjects(objectIds, options = {
1208
- showContent: true
1209
- }) {
1210
- if (objectIds.length === 0)
1211
- return [];
1212
- return this.queryClient.fetchQuery({
1213
- queryKey: queryKeys.rpc.getObjects(
1214
- objectIds,
1215
- this.walletAddress,
1216
- options
1217
- ),
1218
- queryFn: async () => {
1219
- return await callWithRateLimit(
1220
- this.tokenBucket,
1221
- () => this.suiKit.getObjects(objectIds, options)
1222
- );
1223
- }
1224
- });
1225
- }
1226
- /**
1227
- * @description Provides cache for getOwnedObjects of the SuiKit.
1228
- * @param input
1229
- * @returns Promise<PaginatedObjectsResponse>
1230
- */
1231
- async queryGetOwnedObjects(input) {
1232
- return this.queryClient.fetchQuery({
1233
- queryKey: queryKeys.rpc.getOwnedObjects(input),
1234
- queryFn: async () => {
1235
- return await callWithRateLimit(
1236
- this.tokenBucket,
1237
- () => this.client.getOwnedObjects(input)
1238
- );
1239
- }
1240
- });
1241
- }
1242
- async queryGetDynamicFields(input) {
1243
- return this.queryClient.fetchQuery({
1244
- queryKey: queryKeys.rpc.getDynamicFields(input),
1245
- queryFn: async () => {
1246
- return await callWithRateLimit(
1247
- this.tokenBucket,
1248
- () => this.client.getDynamicFields(input)
1249
- );
1250
- }
1251
- });
1252
- }
1253
- async queryGetDynamicFieldObject(input) {
1254
- return this.queryClient.fetchQuery({
1255
- queryKey: queryKeys.rpc.getDynamicFieldObject(input),
1256
- queryFn: async () => {
1257
- return await callWithRateLimit(
1258
- this.tokenBucket,
1259
- () => this.client.getDynamicFieldObject(input)
1260
- );
1261
- }
1262
- });
1263
- }
1264
- async queryGetAllCoinBalances(owner) {
1265
- return this.queryClient.fetchQuery({
1266
- queryKey: queryKeys.rpc.getAllCoinBalances(owner),
1267
- queryFn: async () => {
1268
- const allBalances = await callWithRateLimit(
1269
- this.tokenBucket,
1270
- () => this.client.getAllBalances({ owner })
1271
- );
1272
- if (!allBalances)
1273
- return {};
1274
- const balances = allBalances.reduce(
1275
- (acc, coinBalance) => {
1276
- if (coinBalance.totalBalance !== "0") {
1277
- acc[(0, import_sui_kit.normalizeStructTag)(coinBalance.coinType)] = coinBalance.totalBalance;
1278
- }
1279
- return acc;
1280
- },
1281
- {}
1282
- );
1283
- return balances;
1284
- }
1285
- });
1286
- }
1287
- async queryGetCoinBalance(input) {
1288
- if (!input.coinType)
1289
- return "0";
1290
- return (await this.queryGetAllCoinBalances(input.owner) || {})[(0, import_sui_kit.normalizeStructTag)(input.coinType)] ?? "0";
1291
- }
1292
- };
1293
-
1294
- // src/models/scallopAddress.ts
1295
- var import_axios = __toESM(require("axios"));
1296
-
1297
- // src/constants/testAddress.ts
1298
- var TEST_ADDRESSES = {
1299
- core: {
1300
- // version:
1301
- // '0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7',
1302
- version: "0x6156d5cd1538bec8a167a40fe1209a4ec9cf8137921fe0a697f191ac561f0b09",
1303
- versionCap: "0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",
1304
- // object:
1305
- // '0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf',
1306
- object: "0x87ddec2984645dbbe2403a509cc6edf393a43acdba9b77d45da2bcbefcf733c1",
1307
- // market:
1308
- // '0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9',
1309
- market: "0x8606ed145cc887985b8ed793f7753ff5dc762a42c379dac035f568e1bac58490",
1310
- adminCap: "0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",
1311
- coinDecimalsRegistry: "0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",
1312
- // obligationAccessStore:
1313
- // '0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9',
1314
- obligationAccessStore: "0x48b472d68ca910c45f7f3b6c26836b6aa6d2569810d94b1b939023da05ae0a23",
1315
- coins: {
1316
- cetus: {
1317
- id: "0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",
1318
- metaData: "0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",
1319
- treasury: "",
1320
- oracle: {
1321
- supra: "",
1322
- switchboard: "",
1323
- pyth: {
1324
- feed: "e5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",
1325
- feedObject: "0x24c0247fb22457a719efac7f670cdc79be321b521460bd6bd2ccfa9f80713b14"
1326
- }
1327
- }
1328
- },
1329
- wapt: {
1330
- id: "0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",
1331
- metaData: "0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8",
1332
- treasury: "",
1333
- oracle: {
1334
- supra: "",
1335
- switchboard: "",
1336
- pyth: {
1337
- feed: "03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5",
1338
- feedObject: "0x7c5b7837c44a69b469325463ac0673ac1aa8435ff44ddb4191c9ae380463647f"
1339
- }
1340
- }
1341
- },
1342
- wsol: {
1343
- id: "0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",
1344
- metaData: "0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e",
1345
- treasury: "",
1346
- oracle: {
1347
- supra: "",
1348
- switchboard: "",
1349
- pyth: {
1350
- feed: "ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",
1351
- feedObject: "0x9d0d275efbd37d8a8855f6f2c761fa5983293dd8ce202ee5196626de8fcd4469"
1352
- }
1353
- }
1354
- },
1355
- wbtc: {
1356
- id: "0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",
1357
- metaData: "0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd",
1358
- treasury: "",
1359
- oracle: {
1360
- supra: "",
1361
- switchboard: "",
1362
- pyth: {
1363
- feed: "e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
1364
- feedObject: "0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"
1365
- }
1366
- }
1367
- },
1368
- weth: {
1369
- id: "0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",
1370
- metaData: "0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f",
1371
- treasury: "",
1372
- oracle: {
1373
- supra: "",
1374
- switchboard: "",
1375
- pyth: {
1376
- feed: "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",
1377
- feedObject: "0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"
1378
- }
1379
- }
1380
- },
1381
- wusdc: {
1382
- id: "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",
1383
- metaData: "0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189",
1384
- treasury: "",
1385
- oracle: {
1386
- supra: "",
1387
- switchboard: "",
1388
- pyth: {
1389
- feed: "eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
1390
- feedObject: "0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"
1391
- }
1392
- }
1393
- },
1394
- wusdt: {
1395
- id: "0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",
1396
- metaData: "0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c",
1397
- treasury: "",
1398
- oracle: {
1399
- supra: "",
1400
- switchboard: "",
1401
- pyth: {
1402
- feed: "2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",
1403
- feedObject: "0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"
1404
- }
1405
- }
1406
- },
1407
- sui: {
1408
- id: "0x0000000000000000000000000000000000000000000000000000000000000002",
1409
- metaData: "0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",
1410
- treasury: "",
1411
- oracle: {
1412
- supra: "",
1413
- switchboard: "0xbca474133638352ba83ccf7b5c931d50f764b09550e16612c9f70f1e21f3f594",
1414
- pyth: {
1415
- feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
1416
- feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
1417
- }
1418
- }
1419
- },
1420
- afsui: {
1421
- id: "0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",
1422
- metaData: "0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",
1423
- treasury: "",
1424
- oracle: {
1425
- supra: "",
1426
- switchboard: "",
1427
- pyth: {
1428
- feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
1429
- feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
1430
- }
1431
- }
1432
- },
1433
- hasui: {
1434
- id: "0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",
1435
- metaData: "0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",
1436
- treasury: "",
1437
- oracle: {
1438
- supra: "",
1439
- switchboard: "",
1440
- pyth: {
1441
- feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
1442
- feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
1443
- }
1444
- }
1445
- },
1446
- vsui: {
1447
- id: "0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",
1448
- metaData: "0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd",
1449
- treasury: "",
1450
- oracle: {
1451
- supra: "",
1452
- switchboard: "",
1453
- pyth: {
1454
- feed: "23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",
1455
- feedObject: "0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"
1456
- }
1457
- }
1458
- },
1459
- sca: {
1460
- id: "0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",
1461
- metaData: "0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",
1462
- treasury: "",
1463
- oracle: {
1464
- supra: "",
1465
- switchboard: "",
1466
- pyth: {
1467
- feed: "7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",
1468
- feedObject: "0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"
1469
- }
1470
- }
1471
- }
1472
- },
1473
- oracles: {
1474
- xOracle: "0x93d5bf0936b71eb27255941e532fac33b5a5c7759e377b4923af0a1359ad494f",
1475
- xOracleCap: "0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",
1476
- supra: { registry: "", registryCap: "", holder: "" },
1477
- switchboard: { registry: "", registryCap: "" },
1478
- pyth: {
1479
- registry: "0xedc293f9413a5a7a5d53bdba1fd889d0a4030894469228f0acdae4aa3c55a213",
1480
- registryCap: "0xbcb07141eb1f7e01fbda4130ecf5f5adaeabb77f5d9c32158b7532bcd2197acd",
1481
- state: "0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",
1482
- wormhole: "0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",
1483
- wormholeState: "0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"
1484
- }
1485
- },
1486
- packages: {
1487
- coinDecimalsRegistry: {
1488
- id: "0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",
1489
- upgradeCap: "0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"
1490
- },
1491
- math: {
1492
- id: "0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",
1493
- upgradeCap: "0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"
1494
- },
1495
- whitelist: {
1496
- id: "0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",
1497
- upgradeCap: "0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"
1498
- },
1499
- x: {
1500
- id: "0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",
1501
- upgradeCap: "0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"
1502
- },
1503
- protocol: {
1504
- id: "0x87ddec2984645dbbe2403a509cc6edf393a43acdba9b77d45da2bcbefcf733c1",
1505
- upgradeCap: "0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"
1506
- },
1507
- // protocol: {
1508
- // id: '0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e',
1509
- // upgradeCap:
1510
- // '0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a',
1511
- // },
1512
- protocolWhitelist: {
1513
- id: "0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",
1514
- upgradeCap: "0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"
1515
- },
1516
- // query: {
1517
- // id: '0xb8d603a39114a5efef3dd0bf84df0bed1be1fbd39b78b7dd6e8a61ccc5e6006f',
1518
- // upgradeCap:
1519
- // '0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f',
1520
- // },
1521
- query: {
1522
- id: "0xe4f9d62d17746d5b9dbf0d5557747430021a71575780b515161210cdba0a4c1c",
1523
- upgradeCap: "0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"
1524
- },
1525
- supra: { id: "", upgradeCap: "" },
1526
- pyth: {
1527
- id: "0x910f30cbc7f601f75a5141a01265cd47c62d468707c5e1aecb32a18f448cb25a",
1528
- upgradeCap: "0xdf0ffbae1ea5bb25fbca5efba433dcf00c7cced65679af2f04728901275c6157"
1529
- },
1530
- switchboard: { id: "", upgradeCap: "" },
1531
- xOracle: {
1532
- id: "0x1478a432123e4b3d61878b629f2c692969fdb375644f1251cd278a4b1e7d7cd6",
1533
- upgradeCap: "0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"
1534
- },
1535
- testCoin: { id: "", upgradeCap: "" }
1536
- }
1537
- },
1538
- spool: {
1539
- // id: '0x7c4fdabe81c31b19a45d1e572a52a539997a90903fbb5bfab71480abe0fa62c3',
1540
- id: "0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",
1541
- adminCap: "0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",
1542
- // object:
1543
- // '0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a',
1544
- object: "0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",
1545
- pools: {
1546
- sweth: {
1547
- id: "0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",
1548
- rewardPoolId: "0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"
1549
- },
1550
- ssui: {
1551
- // id: '0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4',
1552
- id: "0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",
1553
- rewardPoolId: (
1554
- // '0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9',
1555
- "0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"
1556
- )
1557
- },
1558
- swusdc: {
1559
- // id: '0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0',
1560
- id: "0xf1b383b9cf2e9f515fc69567df1053098f273849d09cd84b0278a773429bd2b2",
1561
- rewardPoolId: (
1562
- // '0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8',
1563
- "0xc71c53ee6505d928ba15bea4fe4f45d98c9c31eced94b72d00a7827d4b7ba3ff"
1564
- )
1565
- },
1566
- swusdt: {
1567
- // id: '0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f',
1568
- id: "0xb5567dfa5c7fc17a249e959732664c50713dd8c23db1a11376b27df800c17418",
1569
- rewardPoolId: (
1570
- // '0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080',
1571
- "0x60768b0687ff0235e376a039709a683e4c436098785e473b67b32dbab47b69ab"
1572
- )
1573
- },
1574
- scetus: {
1575
- id: "0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",
1576
- rewardPoolId: "0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"
1577
- },
1578
- safsui: {
1579
- // id: '0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800',
1580
- id: "0xc568bb4c991258e839aa54802ecda04fcd9838c826bc3b42b40af81b23c458c8",
1581
- rewardPoolId: (
1582
- // '0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e',
1583
- "0x389a3cbeda742b918941bb24fd00e077bad3367484394d6234f8209b9a6aa03d"
1584
- )
1585
- },
1586
- shasui: {
1587
- // id: '0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa',
1588
- id: "0x93f3f4499bf89f2d05ddc1f8b15f51701a7c6c4d0ac0b9c3bc99462cbbd8e321",
1589
- rewardPoolId: (
1590
- // '0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66',
1591
- "0x94cee1be7f5ff34193f3aabef0b14142cb28af4d905fe487a9a7d85a15edb6aa"
1592
- )
1593
- },
1594
- svsui: {
1595
- // id: '0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670',
1596
- id: "0xa970e9087f80cb59e9299b8e7af7175d977ad6c9af0322aa4440e138fbd7ae00",
1597
- rewardPoolId: (
1598
- // '0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a',
1599
- "0x38eee9699c4fc132a6623e54b865f047df4fc6eb83af807300f44e8f4b235ff0"
1600
- )
1632
+ * @description Provides cache for getObjects of the SuiKit.
1633
+ * @param objectIds
1634
+ * @returns Promise<SuiObjectData[]>
1635
+ */
1636
+ async queryGetObjects(objectIds, options = {
1637
+ showContent: true
1638
+ }) {
1639
+ if (objectIds.length === 0)
1640
+ return [];
1641
+ return this.queryClient.fetchQuery({
1642
+ queryKey: queryKeys.rpc.getObjects(
1643
+ objectIds,
1644
+ this.walletAddress,
1645
+ options
1646
+ ),
1647
+ queryFn: async () => {
1648
+ return await callWithRateLimit(
1649
+ this.tokenBucket,
1650
+ () => this.suiKit.getObjects(objectIds, options)
1651
+ );
1601
1652
  }
1602
- },
1603
- config: ""
1604
- },
1605
- borrowIncentive: {
1606
- id: "0x6152f696fc3a658f33c4b891764731a59153125ffedfa8bff7167c42823f58a9",
1607
- adminCap: "0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",
1608
- object: "0x002875153e09f8145ab63527bc85c00f2bd102e12f9573c47f8cdf1a1cb62934",
1609
- query: "0x529edc54a3dce2207703ceebbccb0ac14133f7825c1f528775ba0d85a4063489",
1610
- incentivePools: "0x6547e143d406b5ccd5f46aae482497de279cc1a68c406f701df70a05f9212ab4",
1611
- incentiveAccounts: "0xc4701fdbc1c92f9a636d334d66012b3027659e9fb8aff27279a82edfb6b77d02",
1612
- config: "0xdf5d04b4691cc67e82fd4db8394d89ff44823a9de29716c924f74bb4f11cc1f7"
1613
- },
1614
- referral: {
1615
- id: "0xa3654ebb63eb06c0f4ff52f8aa6512df9f164f7772bdf15dac3709bd3798dda9",
1616
- object: "0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",
1617
- adminCap: "0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",
1618
- referralBindings: "0xf63299d58789d99de94092b9011323466e55ca0c1ea1a7a3786a589af46e1c09",
1619
- bindingTableId: "0x1c8202b17267ec8d6cf97ca013615354181a04f179570e42601ff2dae19294b1",
1620
- referralRevenuePool: "0x6abd852caf90769c1b185cdf636d841673fa95528f0550f018b8a138bd283c07",
1621
- revenueTableId: "0x595baa3654c297bff84ab7786a2d250f019cefc66e8df8e89fd9d41e02bd30dd",
1622
- referralTiers: "0x962cb903d8d7346190c5204785ccbb91b61086aa764f674c8145df82335cf83e",
1623
- tiersTableId: "0xeac755a7a8b7798530905ac79e8c114f19d0f130f6eab012954f08faac29c75d",
1624
- // authorizedWitnessList:
1625
- // '0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e',
1626
- authorizedWitnessList: "0x9d6223dc52015b8a3986a573590ef2af8f1b8f3e4685513888c052f001b87e7f",
1627
- version: "0x1bd4b7285f72e11c316b828c7c47b3f4da18dcec9f9b3dba6d8629cbb6f93e5e"
1628
- },
1629
- vesca: {
1630
- id: "0xb15b6e0cdd85afb5028bea851dd249405e734d800a259147bbc24980629723a4",
1631
- object: "0xb15b6e0cdd85afb5028bea851dd249405e734d800a259147bbc24980629723a4",
1632
- adminCap: "0x8ffa76135c5b85c5fbd73a6448a4a733d826cb63a267ab817656acb77c72d4a5",
1633
- tableId: "0xe3153b2bf124be0b86cb8bd468346a861efd0da52fc42197b54d2f616488a311",
1634
- table: "0x611cb8d9d4d90867467b5ebdf4cc447a0047ed5b01334a28a29fcfe733e3d609",
1635
- treasury: "0xe8c112c09b88158dc6c8e23d1fbae5b3c7136cdee54b7dafc08e65db28c4a5bc",
1636
- config: "0xe0a2ff281e73c1d53cfa85807080f87e833e4f1a7f93dcf8800b3865269a76b9"
1637
- },
1638
- loyaltyProgram: {
1639
- id: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
1640
- object: "0xd17bcf8b5a59652c36225d478564a8593ae0ed7d650bcacdda1d6fe179127907",
1641
- rewardPool: "0xf9c090492ef476bd542109d0913ffe871cbfa28578b7114eca2a8c0e5671786f",
1642
- userRewardTableId: "0x748a80395849ed37db1b0e14f2ab5d1d96458d2359ab3a84eb079d0f4ac7cf2e"
1643
- },
1644
- scoin: {
1645
- id: "0xad2ca2aa5089df94bb2d444d5eb3520378c2f2dfb3a0bd2a2c994145ac4b0a53",
1646
- coins: {
1647
- ssui: {
1648
- coinType: "0xfac769100bccc0caebcf4f4e2d00ac2f8883f07f724be28940df90605f5e7e9a::scallop_sui::SCALLOP_SUI",
1649
- treasury: "0x9cb4551b36c17d37e19d700147fa819ea1c487ff8bcf18374de2cceb2e9d4845"
1650
- },
1651
- scetus: {
1652
- coinType: "0x8b71e6d323ed78515af2bead13bf3d0da1562ba4a99234eb7c4f14fd39ef0427::scallop_cetus::SCALLOP_CETUS",
1653
- treasury: "0xd786f4b2d26278cc7911a3445b1b085eab60f269ef9dbb6b87e803d52f155003"
1654
- },
1655
- ssca: {
1656
- coinType: "0x0a9d3c6c9af9f6e8def82921541bcbd17f73ed31bed3adcb684f2a4c267e42f0::scallop_sca::SCALLOP_SCA",
1657
- treasury: "0xe818636d1d6c46d6ea1a2dce9d94696d7cbc18ce27451b603eeaa47aba8d75e0"
1658
- },
1659
- swusdc: {
1660
- coinType: "0xaedc3ab75db8680b81a755015fa90124d217be93457b893c05bac033817defaf::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",
1661
- treasury: "0xfc6971648f867f7fd6928d1b873af71577e2eaf2c7543ef8bc82c431d833ae78"
1662
- },
1663
- swusdt: {
1664
- coinType: "0xbf02fc87ddc104b342ad8414c85ceadf5b0c823c055a06fb0ed776272c01a52a::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",
1665
- treasury: "0xb9593e2c3a0ba796ee815012b75ae46468ea78cda0188b9ac6816efe65503521"
1666
- },
1667
- sweth: {
1668
- coinType: "0x27d54f43e3eda701be56b82e5756e41c84467cd202f5cf713d5f9e45a9f1b6bc::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",
1669
- treasury: "0x032b4c8fac94c038dbe986f7587e9b1e4ef580b5ee06d2ef249d85459b7ef05d"
1670
- },
1671
- safsui: {
1672
- coinType: "0xb75b46d975d8d80670b53a6bee90baaa8ce2e0b7d397f079447d641eef6b44ad::scallop_af_sui::SCALLOP_AF_SUI",
1673
- treasury: "0x21450ef0570ef3d224ffa3b873ab802e439ece7b93cc7efad10ae0c1e3b3fcfe"
1674
- },
1675
- shasui: {
1676
- coinType: "0xd973a723874e2c7cde196602a79155a1343a933f8cf87d9b1bb7408bc1acbc58::scallop_ha_sui::SCALLOP_HA_SUI",
1677
- treasury: "0xf822fc1402207e47d2e3ba8ff6e1e594bf1de777dc5ebd2744619cd2726e3b0d"
1678
- },
1679
- svsui: {
1680
- coinType: "0x97023a317320c4498cc4cd239dd02fd30c28246e5e8f81325d63f2bd8d70f6b3::scallop_v_sui::SCALLOP_V_SUI",
1681
- treasury: "0x327114f0bf3559d7e2de10282147ed76a236c7c6775029165c4db09a6062ead6\u0192"
1653
+ });
1654
+ }
1655
+ /**
1656
+ * @description Provides cache for getOwnedObjects of the SuiKit.
1657
+ * @param input
1658
+ * @returns Promise<PaginatedObjectsResponse>
1659
+ */
1660
+ async queryGetOwnedObjects(input) {
1661
+ return this.queryClient.fetchQuery({
1662
+ queryKey: queryKeys.rpc.getOwnedObjects(input),
1663
+ queryFn: async () => {
1664
+ return await callWithRateLimit(
1665
+ this.tokenBucket,
1666
+ () => this.client.getOwnedObjects(input)
1667
+ );
1682
1668
  }
1683
- }
1669
+ });
1670
+ }
1671
+ async queryGetDynamicFields(input) {
1672
+ return this.queryClient.fetchQuery({
1673
+ queryKey: queryKeys.rpc.getDynamicFields(input),
1674
+ queryFn: async () => {
1675
+ return await callWithRateLimit(
1676
+ this.tokenBucket,
1677
+ () => this.client.getDynamicFields(input)
1678
+ );
1679
+ }
1680
+ });
1681
+ }
1682
+ async queryGetDynamicFieldObject(input) {
1683
+ return this.queryClient.fetchQuery({
1684
+ queryKey: queryKeys.rpc.getDynamicFieldObject(input),
1685
+ queryFn: async () => {
1686
+ return await callWithRateLimit(
1687
+ this.tokenBucket,
1688
+ () => this.client.getDynamicFieldObject(input)
1689
+ );
1690
+ }
1691
+ });
1692
+ }
1693
+ async queryGetAllCoinBalances(owner) {
1694
+ return this.queryClient.fetchQuery({
1695
+ queryKey: queryKeys.rpc.getAllCoinBalances(owner),
1696
+ queryFn: async () => {
1697
+ const allBalances = await callWithRateLimit(
1698
+ this.tokenBucket,
1699
+ () => this.client.getAllBalances({ owner })
1700
+ );
1701
+ if (!allBalances)
1702
+ return {};
1703
+ const balances = allBalances.reduce(
1704
+ (acc, coinBalance) => {
1705
+ if (coinBalance.totalBalance !== "0") {
1706
+ acc[(0, import_sui_kit.normalizeStructTag)(coinBalance.coinType)] = coinBalance.totalBalance;
1707
+ }
1708
+ return acc;
1709
+ },
1710
+ {}
1711
+ );
1712
+ return balances;
1713
+ }
1714
+ });
1715
+ }
1716
+ async queryGetCoinBalance(input) {
1717
+ if (!input.coinType)
1718
+ return "0";
1719
+ return (await this.queryGetAllCoinBalances(input.owner) || {})[(0, import_sui_kit.normalizeStructTag)(input.coinType)] ?? "0";
1684
1720
  }
1685
1721
  };
1686
1722
 
1687
1723
  // src/models/scallopAddress.ts
1724
+ var import_axios = __toESM(require("axios"));
1688
1725
  var EMPTY_ADDRESSES = {
1689
1726
  core: {
1690
1727
  version: "",
@@ -2410,10 +2447,11 @@ var isolatedAssetZod = import_zod2.z.object({
2410
2447
  value: import_zod2.z.boolean()
2411
2448
  })
2412
2449
  });
2413
- var ISOLATED_ASSET_KEY = "0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::IsolatedAssetKey";
2414
2450
  var getIsolatedAssets = async (address) => {
2415
2451
  try {
2416
2452
  const marketObject = address.get("core.market");
2453
+ const protocolObject = address.get("core.packages.protocol.id");
2454
+ const ISOLATED_ASSET_KEY = `${protocolObject}::market_dynamic_keys::IsolatedAssetKey`;
2417
2455
  const isolatedAssets = [];
2418
2456
  if (!marketObject)
2419
2457
  return isolatedAssets;
@@ -2448,6 +2486,8 @@ var getIsolatedAssets = async (address) => {
2448
2486
  var isIsolatedAsset = async (utils, coinName) => {
2449
2487
  try {
2450
2488
  const marketObject = utils.address.get("core.market");
2489
+ const protocolObject = utils.address.get("core.packages.protocol.id");
2490
+ const ISOLATED_ASSET_KEY = `${protocolObject}::market_dynamic_keys::IsolatedAssetKey`;
2451
2491
  const cachedData = utils.address.cache.queryClient.getQueryData([
2452
2492
  "getDynamicFields",
2453
2493
  marketObject
@@ -2503,7 +2543,7 @@ var queryMarket = async (query, indexer = false) => {
2503
2543
  const queryTarget = `${packageId}::market_query::market_data`;
2504
2544
  const args = [marketId];
2505
2545
  const queryResult = await query.cache.queryInspectTxn({ queryTarget, args });
2506
- const marketData = queryResult?.events[0].parsedJson;
2546
+ const marketData = queryResult?.events[0]?.parsedJson;
2507
2547
  for (const pool of marketData?.pools ?? []) {
2508
2548
  const coinType = (0, import_utils3.normalizeStructTag)(pool.type.name);
2509
2549
  const poolCoinName = query.utils.parseCoinNameFromType(coinType);
@@ -2559,6 +2599,7 @@ var queryMarket = async (query, indexer = false) => {
2559
2599
  marketCoinSupplyAmount: parsedMarketPoolData.marketCoinSupplyAmount,
2560
2600
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2561
2601
  isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2602
+ // isIsolated: false,
2562
2603
  maxSupplyCoin,
2563
2604
  ...calculatedMarketPoolData
2564
2605
  };
@@ -2597,6 +2638,7 @@ var queryMarket = async (query, indexer = false) => {
2597
2638
  liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
2598
2639
  liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
2599
2640
  liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
2641
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
2600
2642
  ...calculatedMarketCollateralData
2601
2643
  };
2602
2644
  }
@@ -2644,79 +2686,73 @@ var getMarketPools = async (query, poolCoinNames = [...SUPPORT_POOLS], indexer =
2644
2686
  return marketPools;
2645
2687
  };
2646
2688
  var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, coinPrice) => {
2647
- let marketPool;
2648
- let balanceSheet;
2649
- let borrowIndex;
2650
- let interestModel;
2651
- let borrowFeeRate;
2652
- coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2653
- if (indexer) {
2654
- const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
2655
- marketPoolIndexer.coinPrice = coinPrice || marketPoolIndexer.coinPrice;
2656
- marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
2657
- marketPoolIndexer.coinName
2658
- );
2659
- return marketPoolIndexer;
2660
- }
2661
- const marketId = query.address.get("core.market");
2662
- marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2663
- showContent: true
2664
- }))?.data;
2665
- if (marketObject) {
2666
- if (marketObject.content && "fields" in marketObject.content) {
2667
- const fields = marketObject.content.fields;
2668
- const coinType = query.utils.parseCoinType(poolCoinName);
2669
- const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
2670
- const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2671
- parentId: balanceSheetParentId,
2672
- name: {
2673
- type: "0x1::type_name::TypeName",
2674
- value: {
2675
- name: coinType.substring(2)
2676
- }
2689
+ try {
2690
+ coinPrice = coinPrice || (await query.utils.getCoinPrices([poolCoinName]))?.[poolCoinName];
2691
+ if (indexer) {
2692
+ const marketPoolIndexer = await query.indexer.getMarketPool(poolCoinName);
2693
+ marketPoolIndexer.coinPrice = coinPrice || marketPoolIndexer.coinPrice;
2694
+ marketPoolIndexer.coinWrappedType = query.utils.getCoinWrappedType(
2695
+ marketPoolIndexer.coinName
2696
+ );
2697
+ return marketPoolIndexer;
2698
+ }
2699
+ const marketId = query.address.get("core.market");
2700
+ marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2701
+ showContent: true
2702
+ }))?.data;
2703
+ if (!(marketObject && marketObject.content?.dataType === "moveObject"))
2704
+ throw new Error(`Failed to fetch marketObject`);
2705
+ const fields = marketObject.content.fields;
2706
+ const coinType = query.utils.parseCoinType(poolCoinName);
2707
+ const balanceSheetParentId = fields.vault.fields.balance_sheets.fields.table.fields.id.id;
2708
+ const balanceSheetDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2709
+ parentId: balanceSheetParentId,
2710
+ name: {
2711
+ type: "0x1::type_name::TypeName",
2712
+ value: {
2713
+ name: coinType.substring(2)
2677
2714
  }
2678
- });
2679
- if (!balanceSheetDynamicFieldObjectResponse)
2680
- return void 0;
2681
- const balanceSheetDynamicFieldObject = balanceSheetDynamicFieldObjectResponse.data;
2682
- if (balanceSheetDynamicFieldObject && balanceSheetDynamicFieldObject.content && "fields" in balanceSheetDynamicFieldObject.content) {
2683
- const dynamicFields = balanceSheetDynamicFieldObject.content.fields;
2684
- balanceSheet = dynamicFields.value.fields;
2685
2715
  }
2686
- const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
2687
- const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2688
- parentId: borrowIndexParentId,
2689
- name: {
2690
- type: "0x1::type_name::TypeName",
2691
- value: {
2692
- name: coinType.substring(2)
2693
- }
2716
+ });
2717
+ const balanceSheetDynamicFieldObject = balanceSheetDynamicFieldObjectResponse?.data;
2718
+ if (!(balanceSheetDynamicFieldObject && balanceSheetDynamicFieldObject.content && "fields" in balanceSheetDynamicFieldObject.content))
2719
+ throw new Error(
2720
+ `Failed to fetch balanceSheetDynamicFieldObject for ${poolCoinName}: ${balanceSheetDynamicFieldObjectResponse?.error?.code.toString()}`
2721
+ );
2722
+ const balanceSheet = balanceSheetDynamicFieldObject.content.fields.value.fields;
2723
+ const borrowIndexParentId = fields.borrow_dynamics.fields.table.fields.id.id;
2724
+ const borrowIndexDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2725
+ parentId: borrowIndexParentId,
2726
+ name: {
2727
+ type: "0x1::type_name::TypeName",
2728
+ value: {
2729
+ name: coinType.substring(2)
2694
2730
  }
2695
- });
2696
- if (!borrowIndexDynamicFieldObjectResponse)
2697
- return void 0;
2698
- const borrowIndexDynamicFieldObject = borrowIndexDynamicFieldObjectResponse.data;
2699
- if (borrowIndexDynamicFieldObject && borrowIndexDynamicFieldObject.content && "fields" in borrowIndexDynamicFieldObject.content) {
2700
- const dynamicFields = borrowIndexDynamicFieldObject.content.fields;
2701
- borrowIndex = dynamicFields.value.fields;
2702
2731
  }
2703
- const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
2704
- const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2705
- parentId: interestModelParentId,
2706
- name: {
2707
- type: "0x1::type_name::TypeName",
2708
- value: {
2709
- name: coinType.substring(2)
2710
- }
2732
+ });
2733
+ const borrowIndexDynamicFieldObject = borrowIndexDynamicFieldObjectResponse?.data;
2734
+ if (!(borrowIndexDynamicFieldObject && borrowIndexDynamicFieldObject.content && "fields" in borrowIndexDynamicFieldObject.content))
2735
+ throw new Error(
2736
+ `Failed to fetch borrowIndexDynamicFieldObject for ${poolCoinName}`
2737
+ );
2738
+ const borrowIndex = borrowIndexDynamicFieldObject.content.fields.value.fields;
2739
+ const interestModelParentId = fields.interest_models.fields.table.fields.id.id;
2740
+ const interestModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2741
+ parentId: interestModelParentId,
2742
+ name: {
2743
+ type: "0x1::type_name::TypeName",
2744
+ value: {
2745
+ name: coinType.substring(2)
2711
2746
  }
2712
- });
2713
- if (!interestModelDynamicFieldObjectResponse)
2714
- return void 0;
2715
- const interestModelDynamicFieldObject = interestModelDynamicFieldObjectResponse.data;
2716
- if (interestModelDynamicFieldObject && interestModelDynamicFieldObject.content && "fields" in interestModelDynamicFieldObject.content) {
2717
- const dynamicFields = interestModelDynamicFieldObject.content.fields;
2718
- interestModel = dynamicFields.value.fields;
2719
2747
  }
2748
+ });
2749
+ const interestModelDynamicFieldObject = interestModelDynamicFieldObjectResponse?.data;
2750
+ if (!(interestModelDynamicFieldObject && interestModelDynamicFieldObject.content && "fields" in interestModelDynamicFieldObject.content))
2751
+ throw new Error(
2752
+ `Failed to fetch interestModelDynamicFieldObject for ${poolCoinName}: ${interestModelDynamicFieldObject}`
2753
+ );
2754
+ const interestModel = interestModelDynamicFieldObject.content.fields.value.fields;
2755
+ const getBorrowFee = async () => {
2720
2756
  const borrowFeeDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2721
2757
  parentId: marketId,
2722
2758
  name: {
@@ -2728,16 +2764,11 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2728
2764
  }
2729
2765
  }
2730
2766
  });
2731
- if (!borrowFeeDynamicFieldObjectResponse)
2732
- return void 0;
2733
- const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse.data;
2734
- if (borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content) {
2735
- const dynamicFields = borrowFeeDynamicFieldObject.content.fields;
2736
- borrowFeeRate = dynamicFields.value.fields;
2737
- }
2738
- }
2739
- }
2740
- if (balanceSheet && borrowIndex && interestModel && (USE_TEST_ADDRESS || borrowFeeRate)) {
2767
+ const borrowFeeDynamicFieldObject = borrowFeeDynamicFieldObjectResponse?.data;
2768
+ if (!(borrowFeeDynamicFieldObject && borrowFeeDynamicFieldObject.content && "fields" in borrowFeeDynamicFieldObject.content))
2769
+ return { value: "0" };
2770
+ return borrowFeeDynamicFieldObject.content.fields.value.fields;
2771
+ };
2741
2772
  const parsedMarketPoolData = parseOriginMarketPoolData({
2742
2773
  type: interestModel.type.fields,
2743
2774
  maxBorrowRate: interestModel.max_borrow_rate.fields,
@@ -2751,7 +2782,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2751
2782
  reserve: balanceSheet.revenue,
2752
2783
  reserveFactor: interestModel.revenue_factor.fields,
2753
2784
  borrowWeight: interestModel.borrow_weight.fields,
2754
- borrowFeeRate: borrowFeeRate || { value: "0" },
2785
+ borrowFeeRate: await getBorrowFee(),
2755
2786
  baseBorrowRatePerSec: interestModel.base_borrow_rate_per_sec.fields,
2756
2787
  borrowRateOnHighKink: interestModel.borrow_rate_on_high_kink.fields,
2757
2788
  borrowRateOnMidKink: interestModel.borrow_rate_on_mid_kink.fields,
@@ -2767,7 +2798,7 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2767
2798
  const maxSupplyCoin = (0, import_bignumber2.default)(
2768
2799
  await getSupplyLimit(query.utils, poolCoinName) ?? "0"
2769
2800
  ).shiftedBy(-coinDecimal).toNumber();
2770
- marketPool = {
2801
+ return {
2771
2802
  coinName: poolCoinName,
2772
2803
  symbol: query.utils.parseSymbol(poolCoinName),
2773
2804
  coinType: query.utils.parseCoinType(poolCoinName),
@@ -2787,10 +2818,12 @@ var getMarketPool = async (query, poolCoinName, indexer = false, marketObject, c
2787
2818
  minBorrowAmount: parsedMarketPoolData.minBorrowAmount,
2788
2819
  maxSupplyCoin,
2789
2820
  isIsolated: await isIsolatedAsset(query.utils, poolCoinName),
2821
+ // isIsolated: false,
2790
2822
  ...calculatedMarketPoolData
2791
2823
  };
2824
+ } catch (e) {
2825
+ console.error(e);
2792
2826
  }
2793
- return marketPool;
2794
2827
  };
2795
2828
  var getMarketCollaterals = async (query, collateralCoinNames = [...SUPPORT_COLLATERALS], indexer = false) => {
2796
2829
  const marketId = query.address.get("core.market");
@@ -2839,85 +2872,76 @@ var getMarketCollateral = async (query, collateralCoinName, indexer = false, mar
2839
2872
  );
2840
2873
  return marketCollateralIndexer;
2841
2874
  }
2842
- let marketCollateral;
2843
- let riskModel;
2844
- let collateralStat;
2845
2875
  const marketId = query.address.get("core.market");
2846
2876
  marketObject = marketObject || (await query.cache.queryGetObject(marketId, {
2847
2877
  showContent: true
2848
2878
  }))?.data;
2849
- if (marketObject) {
2850
- if (marketObject.content && "fields" in marketObject.content) {
2851
- const fields = marketObject.content.fields;
2852
- const coinType = query.utils.parseCoinType(collateralCoinName);
2853
- const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
2854
- const riskModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2855
- parentId: riskModelParentId,
2856
- name: {
2857
- type: "0x1::type_name::TypeName",
2858
- value: {
2859
- name: coinType.substring(2)
2860
- }
2861
- }
2862
- });
2863
- if (!riskModelDynamicFieldObjectResponse)
2864
- return void 0;
2865
- const riskModelDynamicFieldObject = riskModelDynamicFieldObjectResponse.data;
2866
- if (riskModelDynamicFieldObject && riskModelDynamicFieldObject.content && "fields" in riskModelDynamicFieldObject.content) {
2867
- const dynamicFields = riskModelDynamicFieldObject.content.fields;
2868
- riskModel = dynamicFields.value.fields;
2879
+ if (!(marketObject && marketObject.content?.dataType === "moveObject"))
2880
+ throw new Error(`Failed to fetch marketObject`);
2881
+ const fields = marketObject.content.fields;
2882
+ const coinType = query.utils.parseCoinType(collateralCoinName);
2883
+ const riskModelParentId = fields.risk_models.fields.table.fields.id.id;
2884
+ const riskModelDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2885
+ parentId: riskModelParentId,
2886
+ name: {
2887
+ type: "0x1::type_name::TypeName",
2888
+ value: {
2889
+ name: coinType.substring(2)
2869
2890
  }
2870
- const collateralStatParentId = fields.collateral_stats.fields.table.fields.id.id;
2871
- const collateralStatDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2872
- parentId: collateralStatParentId,
2873
- name: {
2874
- type: "0x1::type_name::TypeName",
2875
- value: {
2876
- name: coinType.substring(2)
2877
- }
2878
- }
2879
- });
2880
- if (!collateralStatDynamicFieldObjectResponse)
2881
- return void 0;
2882
- const collateralStatDynamicFieldObject = collateralStatDynamicFieldObjectResponse.data;
2883
- if (collateralStatDynamicFieldObject && collateralStatDynamicFieldObject.content && "fields" in collateralStatDynamicFieldObject.content) {
2884
- const dynamicFields = collateralStatDynamicFieldObject.content.fields;
2885
- collateralStat = dynamicFields.value.fields;
2891
+ }
2892
+ });
2893
+ const riskModelDynamicFieldObject = riskModelDynamicFieldObjectResponse?.data;
2894
+ if (!(riskModelDynamicFieldObject && riskModelDynamicFieldObject.content && "fields" in riskModelDynamicFieldObject.content))
2895
+ throw new Error(
2896
+ `Failed to ftech riskModelDynamicFieldObject for ${riskModelDynamicFieldObjectResponse?.error?.code.toString()}: `
2897
+ );
2898
+ const riskModel = riskModelDynamicFieldObject.content.fields.value.fields;
2899
+ const collateralStatParentId = fields.collateral_stats.fields.table.fields.id.id;
2900
+ const collateralStatDynamicFieldObjectResponse = await query.cache.queryGetDynamicFieldObject({
2901
+ parentId: collateralStatParentId,
2902
+ name: {
2903
+ type: "0x1::type_name::TypeName",
2904
+ value: {
2905
+ name: coinType.substring(2)
2886
2906
  }
2887
2907
  }
2888
- }
2889
- if (riskModel && collateralStat) {
2890
- const parsedMarketCollateralData = parseOriginMarketCollateralData({
2891
- type: riskModel.type.fields,
2892
- collateralFactor: riskModel.collateral_factor.fields,
2893
- liquidationFactor: riskModel.liquidation_factor.fields,
2894
- liquidationDiscount: riskModel.liquidation_discount.fields,
2895
- liquidationPanelty: riskModel.liquidation_penalty.fields,
2896
- liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
2897
- maxCollateralAmount: riskModel.max_collateral_amount,
2898
- totalCollateralAmount: collateralStat.amount
2899
- });
2900
- const calculatedMarketCollateralData = calculateMarketCollateralData(
2901
- query.utils,
2902
- parsedMarketCollateralData
2908
+ });
2909
+ const collateralStatDynamicFieldObject = collateralStatDynamicFieldObjectResponse?.data;
2910
+ if (!(collateralStatDynamicFieldObject && collateralStatDynamicFieldObject.content && "fields" in collateralStatDynamicFieldObject.content))
2911
+ throw new Error(
2912
+ `Failed to fetch collateralStatDynamicFieldObject for ${collateralCoinName}: ${collateralStatDynamicFieldObjectResponse?.error?.code.toString()}`
2903
2913
  );
2904
- marketCollateral = {
2905
- coinName: collateralCoinName,
2906
- symbol: query.utils.parseSymbol(collateralCoinName),
2907
- coinType: query.utils.parseCoinType(collateralCoinName),
2908
- marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
2909
- coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
2910
- coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
2911
- coinPrice: coinPrice ?? 0,
2912
- collateralFactor: parsedMarketCollateralData.collateralFactor,
2913
- liquidationFactor: parsedMarketCollateralData.liquidationFactor,
2914
- liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
2915
- liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
2916
- liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
2917
- ...calculatedMarketCollateralData
2918
- };
2919
- }
2920
- return marketCollateral;
2914
+ const collateralStat = collateralStatDynamicFieldObject.content.fields.value.fields;
2915
+ const parsedMarketCollateralData = parseOriginMarketCollateralData({
2916
+ type: riskModel.type.fields,
2917
+ collateralFactor: riskModel.collateral_factor.fields,
2918
+ liquidationFactor: riskModel.liquidation_factor.fields,
2919
+ liquidationDiscount: riskModel.liquidation_discount.fields,
2920
+ liquidationPanelty: riskModel.liquidation_penalty.fields,
2921
+ liquidationReserveFactor: riskModel.liquidation_revenue_factor.fields,
2922
+ maxCollateralAmount: riskModel.max_collateral_amount,
2923
+ totalCollateralAmount: collateralStat.amount
2924
+ });
2925
+ const calculatedMarketCollateralData = calculateMarketCollateralData(
2926
+ query.utils,
2927
+ parsedMarketCollateralData
2928
+ );
2929
+ return {
2930
+ coinName: collateralCoinName,
2931
+ symbol: query.utils.parseSymbol(collateralCoinName),
2932
+ coinType: query.utils.parseCoinType(collateralCoinName),
2933
+ marketCoinType: query.utils.parseMarketCoinType(collateralCoinName),
2934
+ coinWrappedType: query.utils.getCoinWrappedType(collateralCoinName),
2935
+ coinDecimal: query.utils.getCoinDecimal(collateralCoinName),
2936
+ coinPrice: coinPrice ?? 0,
2937
+ collateralFactor: parsedMarketCollateralData.collateralFactor,
2938
+ liquidationFactor: parsedMarketCollateralData.liquidationFactor,
2939
+ liquidationDiscount: parsedMarketCollateralData.liquidationDiscount,
2940
+ liquidationPanelty: parsedMarketCollateralData.liquidationPanelty,
2941
+ liquidationReserveFactor: parsedMarketCollateralData.liquidationReserveFactor,
2942
+ isIsolated: await isIsolatedAsset(query.utils, collateralCoinName),
2943
+ ...calculatedMarketCollateralData
2944
+ };
2921
2945
  };
2922
2946
  var getObligations = async ({
2923
2947
  address
@@ -3145,6 +3169,9 @@ var getSpools = async (query, stakeMarketCoinNames = [...SUPPORT_SPOOLS], indexe
3145
3169
  var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPrices) => {
3146
3170
  const coinName = query.utils.parseCoinName(marketCoinName);
3147
3171
  marketPool = marketPool || await query.getMarketPool(coinName, indexer);
3172
+ if (!marketPool) {
3173
+ throw new Error("Failed to fetch marketPool");
3174
+ }
3148
3175
  const poolId = query.address.get(`spool.pools.${marketCoinName}.id`);
3149
3176
  const rewardPoolId = query.address.get(
3150
3177
  `spool.pools.${marketCoinName}.rewardPoolId`
@@ -3154,10 +3181,10 @@ var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPr
3154
3181
  if (indexer) {
3155
3182
  const spoolIndexer = await query.indexer.getSpool(marketCoinName);
3156
3183
  const coinName2 = query.utils.parseCoinName(marketCoinName);
3157
- const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
3184
+ const rewardCoinName2 = query.utils.getSpoolRewardCoinName(marketCoinName);
3158
3185
  spoolIndexer.coinPrice = coinPrices?.[coinName2] || spoolIndexer.coinPrice;
3159
3186
  spoolIndexer.marketCoinPrice = (coinPrices?.[coinName2] ?? 0) * (marketPool ? marketPool.conversionRate : 0) || spoolIndexer.marketCoinPrice;
3160
- spoolIndexer.rewardCoinPrice = coinPrices?.[rewardCoinName] || spoolIndexer.rewardCoinPrice;
3187
+ spoolIndexer.rewardCoinPrice = coinPrices?.[rewardCoinName2] || spoolIndexer.rewardCoinPrice;
3161
3188
  return spoolIndexer;
3162
3189
  }
3163
3190
  const spoolObjectResponse = await query.cache.queryGetObjects(
@@ -3166,70 +3193,71 @@ var getSpool = async (query, marketCoinName, indexer = false, marketPool, coinPr
3166
3193
  showContent: true
3167
3194
  }
3168
3195
  );
3169
- if (marketPool && spoolObjectResponse[0] && spoolObjectResponse[1]) {
3170
- const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
3171
- coinPrices = coinPrices || await query.utils.getCoinPrices([coinName, rewardCoinName]);
3172
- const spoolObject = spoolObjectResponse[0];
3173
- const rewardPoolObject = spoolObjectResponse[1];
3174
- if (spoolObject.content && "fields" in spoolObject.content) {
3175
- const spoolFields = spoolObject.content.fields;
3176
- const parsedSpoolData = parseOriginSpoolData({
3177
- stakeType: spoolFields.stake_type,
3178
- maxDistributedPoint: spoolFields.max_distributed_point,
3179
- distributedPoint: spoolFields.distributed_point,
3180
- distributedPointPerPeriod: spoolFields.distributed_point_per_period,
3181
- pointDistributionTime: spoolFields.point_distribution_time,
3182
- maxStake: spoolFields.max_stakes,
3183
- stakes: spoolFields.stakes,
3184
- index: spoolFields.index,
3185
- createdAt: spoolFields.created_at,
3186
- lastUpdate: spoolFields.last_update
3196
+ if (!(spoolObjectResponse[0] && spoolObjectResponse[1])) {
3197
+ throw new Error("Fail to fetch spoolObjectResponse!");
3198
+ }
3199
+ const rewardCoinName = query.utils.getSpoolRewardCoinName(marketCoinName);
3200
+ coinPrices = coinPrices || await query.utils.getCoinPrices([coinName, rewardCoinName]);
3201
+ const spoolObject = spoolObjectResponse[0];
3202
+ const rewardPoolObject = spoolObjectResponse[1];
3203
+ if (spoolObject.content && "fields" in spoolObject.content) {
3204
+ const spoolFields = spoolObject.content.fields;
3205
+ const parsedSpoolData = parseOriginSpoolData({
3206
+ stakeType: spoolFields.stake_type,
3207
+ maxDistributedPoint: spoolFields.max_distributed_point,
3208
+ distributedPoint: spoolFields.distributed_point,
3209
+ distributedPointPerPeriod: spoolFields.distributed_point_per_period,
3210
+ pointDistributionTime: spoolFields.point_distribution_time,
3211
+ maxStake: spoolFields.max_stakes,
3212
+ stakes: spoolFields.stakes,
3213
+ index: spoolFields.index,
3214
+ createdAt: spoolFields.created_at,
3215
+ lastUpdate: spoolFields.last_update
3216
+ });
3217
+ const marketCoinPrice = (coinPrices?.[coinName] ?? 0) * marketPool.conversionRate;
3218
+ const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
3219
+ const calculatedSpoolData = calculateSpoolData(
3220
+ parsedSpoolData,
3221
+ marketCoinPrice,
3222
+ marketCoinDecimal
3223
+ );
3224
+ if (rewardPoolObject.content && "fields" in rewardPoolObject.content) {
3225
+ const rewardPoolFields = rewardPoolObject.content.fields;
3226
+ const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData({
3227
+ claimed_rewards: rewardPoolFields.claimed_rewards,
3228
+ exchange_rate_numerator: rewardPoolFields.exchange_rate_numerator,
3229
+ exchange_rate_denominator: rewardPoolFields.exchange_rate_denominator,
3230
+ rewards: rewardPoolFields.rewards,
3231
+ spool_id: rewardPoolFields.spool_id
3187
3232
  });
3188
- const marketCoinPrice = (coinPrices?.[coinName] ?? 0) * marketPool.conversionRate;
3189
- const marketCoinDecimal = query.utils.getCoinDecimal(marketCoinName);
3190
- const calculatedSpoolData = calculateSpoolData(
3233
+ const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
3234
+ const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
3235
+ const calculatedRewardPoolData = calculateSpoolRewardPoolData(
3191
3236
  parsedSpoolData,
3237
+ parsedSpoolRewardPoolData,
3238
+ calculatedSpoolData,
3239
+ rewardCoinPrice,
3240
+ rewardCoinDecimal
3241
+ );
3242
+ spool = {
3243
+ marketCoinName,
3244
+ symbol: query.utils.parseSymbol(marketCoinName),
3245
+ coinType: query.utils.parseCoinType(coinName),
3246
+ marketCoinType: query.utils.parseMarketCoinType(coinName),
3247
+ rewardCoinType: isMarketCoin(rewardCoinName) ? query.utils.parseMarketCoinType(rewardCoinName) : query.utils.parseCoinType(rewardCoinName),
3248
+ coinDecimal: query.utils.getCoinDecimal(coinName),
3249
+ rewardCoinDecimal: query.utils.getCoinDecimal(rewardCoinName),
3250
+ coinPrice: coinPrices?.[coinName] ?? 0,
3192
3251
  marketCoinPrice,
3193
- marketCoinDecimal
3194
- );
3195
- if (rewardPoolObject.content && "fields" in rewardPoolObject.content) {
3196
- const rewardPoolFields = rewardPoolObject.content.fields;
3197
- const parsedSpoolRewardPoolData = parseOriginSpoolRewardPoolData({
3198
- claimed_rewards: rewardPoolFields.claimed_rewards,
3199
- exchange_rate_numerator: rewardPoolFields.exchange_rate_numerator,
3200
- exchange_rate_denominator: rewardPoolFields.exchange_rate_denominator,
3201
- rewards: rewardPoolFields.rewards,
3202
- spool_id: rewardPoolFields.spool_id
3203
- });
3204
- const rewardCoinPrice = coinPrices?.[rewardCoinName] ?? 0;
3205
- const rewardCoinDecimal = query.utils.getCoinDecimal(rewardCoinName);
3206
- const calculatedRewardPoolData = calculateSpoolRewardPoolData(
3207
- parsedSpoolData,
3208
- parsedSpoolRewardPoolData,
3209
- calculatedSpoolData,
3210
- rewardCoinPrice,
3211
- rewardCoinDecimal
3212
- );
3213
- spool = {
3214
- marketCoinName,
3215
- symbol: query.utils.parseSymbol(marketCoinName),
3216
- coinType: query.utils.parseCoinType(coinName),
3217
- marketCoinType: query.utils.parseMarketCoinType(coinName),
3218
- rewardCoinType: isMarketCoin(rewardCoinName) ? query.utils.parseMarketCoinType(rewardCoinName) : query.utils.parseCoinType(rewardCoinName),
3219
- coinDecimal: query.utils.getCoinDecimal(coinName),
3220
- rewardCoinDecimal: query.utils.getCoinDecimal(rewardCoinName),
3221
- coinPrice: coinPrices?.[coinName] ?? 0,
3222
- marketCoinPrice,
3223
- rewardCoinPrice,
3224
- maxPoint: parsedSpoolData.maxPoint,
3225
- distributedPoint: parsedSpoolData.distributedPoint,
3226
- maxStake: parsedSpoolData.maxStake,
3227
- ...calculatedSpoolData,
3228
- exchangeRateNumerator: parsedSpoolRewardPoolData.exchangeRateNumerator,
3229
- exchangeRateDenominator: parsedSpoolRewardPoolData.exchangeRateDenominator,
3230
- ...calculatedRewardPoolData
3231
- };
3232
- }
3252
+ rewardCoinPrice,
3253
+ maxPoint: parsedSpoolData.maxPoint,
3254
+ distributedPoint: parsedSpoolData.distributedPoint,
3255
+ maxStake: parsedSpoolData.maxStake,
3256
+ ...calculatedSpoolData,
3257
+ exchangeRateNumerator: parsedSpoolRewardPoolData.exchangeRateNumerator,
3258
+ exchangeRateDenominator: parsedSpoolRewardPoolData.exchangeRateDenominator,
3259
+ ...calculatedRewardPoolData
3260
+ };
3233
3261
  }
3234
3262
  }
3235
3263
  return spool;
@@ -4337,7 +4365,7 @@ var getTotalVeScaTreasuryAmount = async (utils, veScaTreasury) => {
4337
4365
  }
4338
4366
  });
4339
4367
  const results = res.results;
4340
- if (results && results[1].returnValues) {
4368
+ if (results && results[1]?.returnValues) {
4341
4369
  const value = Uint8Array.from(results[1].returnValues[0][0]);
4342
4370
  const type = results[1].returnValues[0][1];
4343
4371
  (0, import_assert.default)(type === "u64", "Result type is not u64");
@@ -4507,10 +4535,10 @@ var ScallopUtils = class {
4507
4535
  * @param address - ScallopAddress instance.
4508
4536
  */
4509
4537
  async init(force = false, address) {
4510
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
4511
- await this.address.read();
4512
- } else {
4538
+ if (address && !this.address)
4513
4539
  this.address = address;
4540
+ if (force || !this.address.getAddresses()) {
4541
+ await this.address.read();
4514
4542
  }
4515
4543
  }
4516
4544
  /**
@@ -4810,30 +4838,38 @@ var ScallopUtils = class {
4810
4838
  const priceId = this.address.get(
4811
4839
  `core.coins.${coinName}.oracle.pyth.feed`
4812
4840
  );
4813
- acc[coinName] = priceId;
4841
+ if (priceId) {
4842
+ acc[coinName] = priceId;
4843
+ }
4814
4844
  return acc;
4815
4845
  },
4816
4846
  {}
4817
4847
  );
4818
4848
  await Promise.allSettled(
4819
- Object.entries(priceIds).map(async ([coinName, priceId]) => {
4849
+ Object.entries(priceIds).filter(([_, priceId]) => !!priceId).map(async ([coinName, priceId]) => {
4820
4850
  const pythConnection = new import_pyth_sui_js.SuiPriceServiceConnection(endpoint);
4821
4851
  try {
4822
4852
  const feed = await this.cache.queryClient.fetchQuery({
4823
- queryKey: queryKeys.oracle.getPythLatestPriceFeed(priceId),
4853
+ queryKey: queryKeys.oracle.getPythLatestPriceFeed(
4854
+ priceId,
4855
+ endpoint
4856
+ ),
4824
4857
  queryFn: async () => {
4825
- return await pythConnection.getLatestPriceFeeds([priceId]);
4858
+ return await pythConnection.getLatestPriceFeeds([priceId]) ?? [];
4826
4859
  }
4827
4860
  });
4828
- if (feed) {
4829
- const data = parseDataFromPythPriceFeed(feed[0], this.address);
4861
+ if (feed[0]) {
4862
+ const data = parseDataFromPythPriceFeed(
4863
+ feed[0],
4864
+ this.address
4865
+ );
4830
4866
  this._priceMap.set(coinName, {
4831
4867
  price: data.price,
4832
4868
  publishTime: data.publishTime
4833
4869
  });
4834
4870
  coinPrices[coinName] = data.price;
4871
+ failedRequests.delete(coinName);
4835
4872
  }
4836
- failedRequests.delete(coinName);
4837
4873
  } catch (e) {
4838
4874
  console.warn(
4839
4875
  `Failed to get price ${coinName} feeds with endpoint ${endpoint}: ${e}`
@@ -5571,6 +5607,9 @@ var generateSpoolQuickMethod = ({
5571
5607
  stakeMarketCoinName,
5572
5608
  stakeAccountId
5573
5609
  );
5610
+ if (stakeAccountIds.length === 0) {
5611
+ throw new Error(`No stakeAccountIds found for user ${sender}`);
5612
+ }
5574
5613
  if (typeof amountOrMarketCoin === "number") {
5575
5614
  const stakedMarketCoinAmount = await stakeHelper(
5576
5615
  builder,
@@ -6701,7 +6740,7 @@ var getSCoinTotalSupply = async ({
6701
6740
  typeArgs
6702
6741
  });
6703
6742
  const results = queryResults?.results;
6704
- if (results && results[0].returnValues) {
6743
+ if (results && results[0]?.returnValues) {
6705
6744
  const value = Uint8Array.from(results[0].returnValues[0][0]);
6706
6745
  const type = results[0].returnValues[0][1];
6707
6746
  (0, import_assert2.default)(type === "u64", "Result type is not u64");
@@ -6845,11 +6884,12 @@ var ScallopQuery = class {
6845
6884
  * @param address - ScallopAddress instance.
6846
6885
  */
6847
6886
  async init(force = false, address) {
6848
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
6849
- await this.address.read();
6850
- } else {
6887
+ if (address && !this.address) {
6851
6888
  this.address = address;
6852
6889
  }
6890
+ if (force || !this.address.getAddresses()) {
6891
+ await this.address.read();
6892
+ }
6853
6893
  await this.utils.init(force, this.address);
6854
6894
  }
6855
6895
  /* ==================== Core Query Methods ==================== */
@@ -7357,10 +7397,10 @@ var ScallopBuilder = class {
7357
7397
  * @param address - ScallopAddress instance.
7358
7398
  */
7359
7399
  async init(force = false, address) {
7360
- if (force || !this.address.getAddresses() || !address?.getAddresses()) {
7361
- await this.address.read();
7362
- } else {
7400
+ if (address && !this.address)
7363
7401
  this.address = address;
7402
+ if (force || !this.address.getAddresses()) {
7403
+ await this.address.read();
7364
7404
  }
7365
7405
  await this.query.init(force, this.address);
7366
7406
  await this.utils.init(force, this.address);
@@ -7612,7 +7652,7 @@ var ScallopClient = class {
7612
7652
  const sender = walletAddress || this.walletAddress;
7613
7653
  txBlock.setSender(sender);
7614
7654
  const obligations = await this.query.getObligations(sender);
7615
- const specificObligationId = obligationId || obligations?.[0]?.id;
7655
+ const specificObligationId = obligationId || obligations[0]?.id;
7616
7656
  if (specificObligationId) {
7617
7657
  await txBlock.addCollateralQuick(
7618
7658
  amount,
@@ -7683,7 +7723,7 @@ var ScallopClient = class {
7683
7723
  txBlock.setSender(sender);
7684
7724
  const stakeMarketCoinName = this.utils.parseMarketCoinName(stakeCoinName);
7685
7725
  const stakeAccounts = await this.query.getStakeAccounts(stakeMarketCoinName);
7686
- const targetStakeAccount = stakeAccountId || stakeAccounts[0].id;
7726
+ const targetStakeAccount = stakeAccountId || stakeAccounts[0]?.id;
7687
7727
  const marketCoin = await txBlock.depositQuick(amount, stakeCoinName, false);
7688
7728
  if (targetStakeAccount) {
7689
7729
  await txBlock.stakeQuick(
@@ -7818,7 +7858,7 @@ var ScallopClient = class {
7818
7858
  const sender = walletAddress || this.walletAddress;
7819
7859
  txBlock.setSender(sender);
7820
7860
  const stakeAccounts = await this.query.getStakeAccounts(stakeMarketCoinName);
7821
- const targetStakeAccount = stakeAccountId || stakeAccounts[0].id;
7861
+ const targetStakeAccount = stakeAccountId || stakeAccounts[0]?.id;
7822
7862
  if (targetStakeAccount) {
7823
7863
  await txBlock.stakeQuick(amount, stakeMarketCoinName, targetStakeAccount);
7824
7864
  } else {
@@ -8275,6 +8315,7 @@ var Scallop = class {
8275
8315
  ScallopIndexer,
8276
8316
  ScallopQuery,
8277
8317
  ScallopUtils,
8318
+ TEST_ADDRESSES,
8278
8319
  UNLOCK_ROUND_DURATION,
8279
8320
  USE_TEST_ADDRESS,
8280
8321
  assetCoins,