stable-layer-sdk 3.0.0 → 3.1.0

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.
@@ -2,7 +2,8 @@
2
2
  import { BucketClient } from "@bucket-protocol/sdk";
3
3
  import { bcs as bcs24 } from "@mysten/sui/bcs";
4
4
  import { SuiGrpcClient } from "@mysten/sui/grpc";
5
- import { coinWithBalance } from "@mysten/sui/transactions";
5
+ import { coinWithBalance, Transaction } from "@mysten/sui/transactions";
6
+ import { normalizeStructTag, SUI_CLOCK_OBJECT_ID } from "@mysten/sui/utils";
6
7
 
7
8
  // src/generated/utils/index.ts
8
9
  import { bcs, TypeTagSerializer, BcsStruct, BcsEnum, BcsTuple } from "@mysten/sui/bcs";
@@ -251,6 +252,22 @@ var FactoryCap = new MoveStruct({ name: `${$moduleName9}::FactoryCap`, fields: {
251
252
  id: UID,
252
253
  factory_id: bcs8.Address
253
254
  } });
255
+ function setMaxSupply(options) {
256
+ const packageAddress = options.package ?? "@local-pkg/stable_factory.move";
257
+ const argumentsTypes = [
258
+ `${packageAddress}::stable_layer::StableRegistry`,
259
+ `${packageAddress}::stable_layer::FactoryCap<${options.typeArguments[0]}, ${options.typeArguments[1]}>`,
260
+ "u64"
261
+ ];
262
+ const parameterNames = ["registry", "FactoryCap", "maxSupply"];
263
+ return (tx) => tx.moveCall({
264
+ package: packageAddress,
265
+ module: "stable_layer",
266
+ function: "set_max_supply",
267
+ arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
268
+ typeArguments: options.typeArguments
269
+ });
270
+ }
254
271
  function mint(options) {
255
272
  const packageAddress = options.package ?? "@local-pkg/stable_factory.move";
256
273
  const argumentsTypes = [
@@ -590,29 +607,128 @@ function release(options) {
590
607
  });
591
608
  }
592
609
 
610
+ // src/libs/constants.mainnet.ts
611
+ var STABLE_REGISTRY_MAINNET_ALT = "0x213f4d584c0770f455bb98c94a4ee5ea9ddbc3d4ebb98a0ad6d093eb6da41642";
612
+ var STABLE_LAYER_PACKAGE_MAINNET_ALT = "0x41e25d09e20cf3bc43fe321e51ef178fac419ae47b783a7161982158fc9f17d6";
613
+ var MAINNET = {
614
+ STABLE_VAULT: "0x65f38160110cd6859d05f338ff54b4f462883bb6f87c667a65c0fb0e537410a7",
615
+ USDC_TYPE: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
616
+ STABLE_LP_TYPE: "0xb75744fadcbfc174627567ca29645d0af8f6e6fd01b6f57c75a08cd3fb97c567::lake_usdc::LakeUSDC",
617
+ YUSDB_TYPE: "0xac718b4b672d7f461fe7e86847166ff9c23cadba217397f0848a95bdea1f1051::yesusdb::YesUSDB",
618
+ STABLE_LAYER_PACKAGE_ID: "0xa4a78d8d3d1df62fb81d10068142e79b0d30ad4e3f578060487e36ed9ea764da",
619
+ STABLE_REGISTRY_MAINNET_ALT,
620
+ STABLE_LAYER_PACKAGE_MAINNET_ALT,
621
+ STABLE_VAULT_FARM_PACKAGE_ID: "0x00d31ddaa73a56abcc3e2d885ac1e1d90f9ae0e38bbef2ba2923550c8250de4d",
622
+ SAVING_TYPE: "0x38f61c75fa8407140294c84167dd57684580b55c3066883b48dedc344b1cde1e::susdb::SUSDB",
623
+ YIELD_VAULT: "0x0a7f6325253157cd437812fea0ceee9a6b96f2ec5eac410da6df39558ff3a4d1",
624
+ STABLE_REGISTRY: "0x213f4d584c0770f455bb98c94a4ee5ea9ddbc3d4ebb98a0ad6d093eb6da41642",
625
+ STABLE_VAULT_FARM: "0xe958b7d102b33bf3c09addb0e2cdff102ff2c93afe407ec5c2a541e8959a650c",
626
+ YIELD_USDB_PACKAGE_ID: "0x3dcbf82f7e3b80ed65cee596612602a6c7e78c71fd40f6455b40ad033ed04786"
627
+ };
628
+ var STABLE_VAULT_FARM_ENTITY_TYPE_MAINNET = `0xc1025fe014b03d33b207b5afb0ba04293be87fab438c1418a26a75c2fe05c223::stable_vault_farm::StableVaultFarmEntity<${MAINNET.STABLE_LP_TYPE}, ${MAINNET.USDC_TYPE}>`;
629
+
630
+ // src/libs/constants.testnet.ts
631
+ var TESTNET_USDC = "0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC";
632
+ var MOCK_FARM_PACKAGE_ID_TESTNET = "0x3a55ec8fabe5f3e982908ed3a7c3065f26e83ab226eb8d3450177dbaac25878b";
633
+ var MOCK_FARM_ORIGINAL_PACKAGE_ID_TESTNET = "0x673d4118c17de717b0b90c326f8f52f87b5fff8678f513edd2ae575a55175954";
634
+ var MOCK_FARM_REGISTRY_TESTNET = "0xc3e8d2e33e36f6a4b5c199fe2dde3ba6dc29e7af8dd045c86e62d7c21f374d02";
635
+ var MOCK_USDB_TYPE_TESTNET = `${MOCK_FARM_ORIGINAL_PACKAGE_ID_TESTNET}::usdb::USDB`;
636
+ var TESTNET = {
637
+ STABLE_LAYER_PACKAGE_ID: "0x9c248c80c3a757167780f17e0c00a4d293280be7276f1b81a153f6e47d2567c9",
638
+ STABLE_REGISTRY: "0xfa0fd96e0fbc07dc6bdc23cc1ac5b4c0056f4b469b9db0a70b6ea01c14a4c7b5",
639
+ USDC_TYPE: TESTNET_USDC,
640
+ STABLE_VAULT_FARM_ENTITY_TYPE: `${MOCK_FARM_ORIGINAL_PACKAGE_ID_TESTNET}::farm::MockFarmEntity`,
641
+ MOCK_FARM_PACKAGE_ID: MOCK_FARM_PACKAGE_ID_TESTNET,
642
+ MOCK_FARM_REGISTRY: MOCK_FARM_REGISTRY_TESTNET,
643
+ MOCK_USDB_TYPE: MOCK_USDB_TYPE_TESTNET,
644
+ STABLE_VAULT: "",
645
+ STABLE_LP_TYPE: "",
646
+ YUSDB_TYPE: "",
647
+ STABLE_VAULT_FARM_PACKAGE_ID: "",
648
+ SAVING_TYPE: "",
649
+ YIELD_VAULT: "",
650
+ STABLE_VAULT_FARM: "",
651
+ YIELD_USDB_PACKAGE_ID: ""
652
+ };
653
+ var STABLE_VAULT_FARM_ENTITY_TYPE_TESTNET = TESTNET.STABLE_VAULT_FARM_ENTITY_TYPE;
654
+
593
655
  // src/libs/constants.ts
594
- var STABLE_VAULT = "0x65f38160110cd6859d05f338ff54b4f462883bb6f87c667a65c0fb0e537410a7";
595
- var USDC_TYPE = "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";
596
- var STABLE_LP_TYPE = "0xb75744fadcbfc174627567ca29645d0af8f6e6fd01b6f57c75a08cd3fb97c567::lake_usdc::LakeUSDC";
597
- var YUSDB_TYPE = "0xac718b4b672d7f461fe7e86847166ff9c23cadba217397f0848a95bdea1f1051::yesusdb::YesUSDB";
598
- var STABLE_LAYER_PACKAGE_ID = "0xa4a78d8d3d1df62fb81d10068142e79b0d30ad4e3f578060487e36ed9ea764da";
599
- var STABLE_VAULT_FARM_PACKAGE_ID = "0x00d31ddaa73a56abcc3e2d885ac1e1d90f9ae0e38bbef2ba2923550c8250de4d";
600
- var SAVING_TYPE = "0x38f61c75fa8407140294c84167dd57684580b55c3066883b48dedc344b1cde1e::susdb::SUSDB";
601
- var YIELD_VAULT = "0x0a7f6325253157cd437812fea0ceee9a6b96f2ec5eac410da6df39558ff3a4d1";
602
- var STABLE_REGISTRY = "0x213f4d584c0770f455bb98c94a4ee5ea9ddbc3d4ebb98a0ad6d093eb6da41642";
603
- var STABLE_VAULT_FARM_ENTITY_TYPE = `0xc1025fe014b03d33b207b5afb0ba04293be87fab438c1418a26a75c2fe05c223::stable_vault_farm::StableVaultFarmEntity<${STABLE_LP_TYPE}, ${USDC_TYPE}>`;
604
- var STABLE_VAULT_FARM = "0xe958b7d102b33bf3c09addb0e2cdff102ff2c93afe407ec5c2a541e8959a650c";
605
- var YIELD_USDB_PACKAGE_ID = "0x3dcbf82f7e3b80ed65cee596612602a6c7e78c71fd40f6455b40ad033ed04786";
656
+ function getMainnetConstants() {
657
+ return {
658
+ ...MAINNET,
659
+ STABLE_VAULT_FARM_ENTITY_TYPE: STABLE_VAULT_FARM_ENTITY_TYPE_MAINNET,
660
+ MOCK_FARM_PACKAGE_ID: "",
661
+ MOCK_FARM_REGISTRY: "",
662
+ MOCK_USDB_TYPE: ""
663
+ };
664
+ }
665
+ function getTestnetConstants() {
666
+ return {
667
+ ...TESTNET,
668
+ STABLE_VAULT_FARM_ENTITY_TYPE: STABLE_VAULT_FARM_ENTITY_TYPE_TESTNET
669
+ };
670
+ }
671
+ function getConstants(network) {
672
+ return network === "testnet" ? getTestnetConstants() : getMainnetConstants();
673
+ }
674
+ var STABLE_VAULT = MAINNET.STABLE_VAULT;
675
+ var USDC_TYPE = MAINNET.USDC_TYPE;
676
+ var STABLE_LP_TYPE = MAINNET.STABLE_LP_TYPE;
677
+ var YUSDB_TYPE = MAINNET.YUSDB_TYPE;
678
+ var STABLE_LAYER_PACKAGE_ID = MAINNET.STABLE_LAYER_PACKAGE_ID;
679
+ var STABLE_VAULT_FARM_PACKAGE_ID = MAINNET.STABLE_VAULT_FARM_PACKAGE_ID;
680
+ var SAVING_TYPE = MAINNET.SAVING_TYPE;
681
+ var YIELD_VAULT = MAINNET.YIELD_VAULT;
682
+ var STABLE_REGISTRY = MAINNET.STABLE_REGISTRY;
683
+ var STABLE_VAULT_FARM = MAINNET.STABLE_VAULT_FARM;
684
+ var YIELD_USDB_PACKAGE_ID = MAINNET.YIELD_USDB_PACKAGE_ID;
685
+ var STABLE_VAULT_FARM_ENTITY_TYPE = STABLE_VAULT_FARM_ENTITY_TYPE_MAINNET;
606
686
 
607
687
  // src/index.ts
608
- var StableLayerClient = class {
609
- constructor(config) {
610
- this.bucketClient = new BucketClient({ network: config.network });
611
- this.suiClient = new SuiGrpcClient({
688
+ var StableLayerClient = class _StableLayerClient {
689
+ static getConstants(network) {
690
+ return getConstants(network);
691
+ }
692
+ getConstants() {
693
+ return getConstants(this.network);
694
+ }
695
+ static async initialize(config) {
696
+ const defaultBaseUrl = `https://fullnode.${config.network}.sui.io:443`;
697
+ const baseUrl = config.baseUrl ?? process.env.SUI_GRPC_URL ?? defaultBaseUrl;
698
+ const suiClient = config.suiClient ?? new SuiGrpcClient({
612
699
  network: config.network,
613
- baseUrl: `https://fullnode.${config.network}.sui.io:443`
700
+ baseUrl
614
701
  });
702
+ const bucketClient = await BucketClient.initialize({
703
+ network: config.network,
704
+ suiClient,
705
+ configObjectId: config.configObjectId,
706
+ configOverrides: config.configOverrides
707
+ });
708
+ return new _StableLayerClient(config, bucketClient, suiClient);
709
+ }
710
+ constructor(config, bucketClient, suiClient) {
711
+ this.bucketClient = bucketClient;
712
+ this.suiClient = suiClient;
615
713
  this.sender = config.sender;
714
+ this.network = config.network;
715
+ this.mockFarmRegistryId = config.mockFarmRegistryId;
716
+ this.mockFarmPackageId = config.mockFarmPackageId;
717
+ this.mockUsdbCoinType = config.mockUsdbCoinType;
718
+ }
719
+ getMockFarmPackageId() {
720
+ const c = this.getConstants();
721
+ const id = (this.mockFarmPackageId ?? c.MOCK_FARM_PACKAGE_ID)?.trim();
722
+ if (!id) {
723
+ throw new Error(
724
+ "StableLayerClient: missing mock farm package (set mockFarmPackageId or MOCK_FARM_PACKAGE_ID in testnet constants)."
725
+ );
726
+ }
727
+ return id;
728
+ }
729
+ getMockFarmEntityType() {
730
+ const c = this.getConstants();
731
+ return c.STABLE_VAULT_FARM_ENTITY_TYPE || `${this.getMockFarmPackageId()}::farm::MockFarmEntity`;
616
732
  }
617
733
  async buildMintTx({
618
734
  tx,
@@ -622,38 +738,69 @@ var StableLayerClient = class {
622
738
  autoTransfer = true
623
739
  }) {
624
740
  tx.setSender(sender ?? this.sender);
741
+ const constants = this.getConstants();
742
+ if (this.network === "testnet") {
743
+ const farmRegistry = this.mockFarmRegistryId ?? constants.MOCK_FARM_REGISTRY;
744
+ const pkg = this.getMockFarmPackageId();
745
+ if (!farmRegistry) {
746
+ throw new Error(
747
+ "buildMintTx (testnet): missing mock farm registry (mockFarmRegistryId or MOCK_FARM_REGISTRY)."
748
+ );
749
+ }
750
+ const stableTag = normalizeStructTag(stableCoinType);
751
+ const usdTag = normalizeStructTag(constants.USDC_TYPE);
752
+ const farmEntityTag = normalizeStructTag(this.getMockFarmEntityType());
753
+ const [stableCoin2, loan2] = mint({
754
+ package: constants.STABLE_LAYER_PACKAGE_ID,
755
+ arguments: {
756
+ registry: constants.STABLE_REGISTRY,
757
+ uCoin: usdcCoin
758
+ },
759
+ typeArguments: [stableTag, usdTag, farmEntityTag]
760
+ })(tx);
761
+ tx.moveCall({
762
+ target: `${pkg}::farm::receive`,
763
+ typeArguments: [stableTag, usdTag],
764
+ arguments: [tx.object(farmRegistry), loan2, tx.object(SUI_CLOCK_OBJECT_ID)]
765
+ });
766
+ if (autoTransfer) {
767
+ tx.transferObjects([stableCoin2], sender ?? this.sender);
768
+ return;
769
+ }
770
+ return stableCoin2;
771
+ }
625
772
  const [stableCoin, loan] = mint({
626
- package: STABLE_LAYER_PACKAGE_ID,
773
+ package: constants.STABLE_LAYER_PACKAGE_ID,
627
774
  arguments: {
628
- registry: STABLE_REGISTRY,
775
+ registry: constants.STABLE_REGISTRY,
629
776
  uCoin: usdcCoin
630
777
  },
631
- typeArguments: [stableCoinType, USDC_TYPE, STABLE_VAULT_FARM_ENTITY_TYPE]
778
+ typeArguments: [stableCoinType, constants.USDC_TYPE, constants.STABLE_VAULT_FARM_ENTITY_TYPE]
632
779
  })(tx);
633
780
  const [uPrice] = await this.bucketClient.aggregatePrices(tx, {
634
- coinTypes: [USDC_TYPE]
781
+ coinTypes: [constants.USDC_TYPE]
635
782
  });
636
783
  const depositResponse = receive({
637
- package: STABLE_VAULT_FARM_PACKAGE_ID,
784
+ package: constants.STABLE_VAULT_FARM_PACKAGE_ID,
638
785
  typeArguments: [
639
- STABLE_LP_TYPE,
640
- USDC_TYPE,
786
+ constants.STABLE_LP_TYPE,
787
+ constants.USDC_TYPE,
641
788
  stableCoinType,
642
- YUSDB_TYPE,
643
- SAVING_TYPE
789
+ constants.YUSDB_TYPE,
790
+ constants.SAVING_TYPE
644
791
  ],
645
792
  arguments: {
646
- farm: STABLE_VAULT_FARM,
793
+ farm: constants.STABLE_VAULT_FARM,
647
794
  loan,
648
- stableVault: STABLE_VAULT,
649
- usdbTreasury: this.bucketClient.treasury(tx),
650
- psmPool: this.getBucketPSMPool(tx),
651
- savingPool: this.getBucketSavingPool(tx),
652
- yieldVault: YIELD_VAULT,
795
+ stableVault: constants.STABLE_VAULT,
796
+ usdbTreasury: await Promise.resolve(this.bucketClient.treasury(tx)),
797
+ psmPool: await this.getBucketPSMPool(tx),
798
+ savingPool: await this.getBucketSavingPool(tx),
799
+ yieldVault: constants.YIELD_VAULT,
653
800
  uPrice
654
801
  }
655
802
  })(tx);
656
- this.checkResponse({ tx, response: depositResponse, type: "deposit" });
803
+ await this.checkResponse({ tx, response: depositResponse, type: "deposit" });
657
804
  if (autoTransfer) {
658
805
  tx.transferObjects([stableCoin], sender ?? this.sender);
659
806
  return;
@@ -682,46 +829,84 @@ var StableLayerClient = class {
682
829
  ) : amount,
683
830
  type: stableCoinType
684
831
  });
685
- this.releaseRewards(tx);
832
+ const constants = this.getConstants();
833
+ if (this.network === "testnet") {
834
+ const farmRegistry = this.mockFarmRegistryId ?? constants.MOCK_FARM_REGISTRY;
835
+ const pkg = this.getMockFarmPackageId();
836
+ if (!farmRegistry) {
837
+ throw new Error(
838
+ "buildBurnTx (testnet): missing mock farm registry (mockFarmRegistryId or MOCK_FARM_REGISTRY)."
839
+ );
840
+ }
841
+ const stableTag = normalizeStructTag(stableCoinType);
842
+ const usdTag = normalizeStructTag(constants.USDC_TYPE);
843
+ const burnRequest2 = requestBurn({
844
+ package: constants.STABLE_LAYER_PACKAGE_ID,
845
+ arguments: {
846
+ registry: constants.STABLE_REGISTRY,
847
+ stableCoin: btcUsdCoin
848
+ },
849
+ typeArguments: [stableTag, usdTag]
850
+ })(tx);
851
+ tx.moveCall({
852
+ target: `${pkg}::farm::pay`,
853
+ typeArguments: [stableTag, usdTag],
854
+ arguments: [tx.object(farmRegistry), tx.object(SUI_CLOCK_OBJECT_ID), burnRequest2]
855
+ });
856
+ const usdcCoin2 = fulfillBurn({
857
+ package: constants.STABLE_LAYER_PACKAGE_ID,
858
+ arguments: {
859
+ registry: constants.STABLE_REGISTRY,
860
+ burnRequest: burnRequest2
861
+ },
862
+ typeArguments: [stableTag, usdTag]
863
+ })(tx);
864
+ if (autoTransfer) {
865
+ tx.transferObjects([usdcCoin2], sender ?? this.sender);
866
+ return;
867
+ }
868
+ return usdcCoin2;
869
+ }
870
+ await this.releaseRewards(tx);
686
871
  const burnRequest = requestBurn({
687
- package: STABLE_LAYER_PACKAGE_ID,
872
+ package: constants.STABLE_LAYER_PACKAGE_ID,
688
873
  arguments: {
689
- registry: STABLE_REGISTRY,
874
+ registry: constants.STABLE_REGISTRY,
690
875
  stableCoin: btcUsdCoin
691
876
  },
692
- typeArguments: [stableCoinType, USDC_TYPE]
877
+ typeArguments: [stableCoinType, constants.USDC_TYPE]
693
878
  })(tx);
694
879
  const [uPrice] = await this.bucketClient.aggregatePrices(tx, {
695
- coinTypes: [USDC_TYPE]
880
+ coinTypes: [constants.USDC_TYPE]
696
881
  });
697
882
  const withdrawResponse = pay({
698
- package: STABLE_VAULT_FARM_PACKAGE_ID,
883
+ package: constants.STABLE_VAULT_FARM_PACKAGE_ID,
699
884
  arguments: {
700
- farm: STABLE_VAULT_FARM,
885
+ farm: constants.STABLE_VAULT_FARM,
701
886
  request: burnRequest,
702
- stableVault: STABLE_VAULT,
703
- usdbTreasury: this.bucketClient.treasury(tx),
704
- psmPool: this.getBucketPSMPool(tx),
705
- savingPool: this.getBucketSavingPool(tx),
706
- yieldVault: YIELD_VAULT,
887
+ stableVault: constants.STABLE_VAULT,
888
+ usdbTreasury: await Promise.resolve(this.bucketClient.treasury(tx)),
889
+ psmPool: await this.getBucketPSMPool(tx),
890
+ savingPool: await this.getBucketSavingPool(tx),
891
+ yieldVault: constants.YIELD_VAULT,
707
892
  uPrice
708
893
  },
709
894
  typeArguments: [
710
- STABLE_LP_TYPE,
711
- USDC_TYPE,
895
+ constants.STABLE_LP_TYPE,
896
+ constants.USDC_TYPE,
712
897
  stableCoinType,
713
- YUSDB_TYPE,
714
- SAVING_TYPE
898
+ constants.YUSDB_TYPE,
899
+ constants.SAVING_TYPE
715
900
  ]
716
901
  })(tx);
717
- this.checkResponse({ tx, response: withdrawResponse, type: "withdraw" });
902
+ await this.checkResponse({ tx, response: withdrawResponse, type: "withdraw" });
718
903
  const usdcCoin = fulfillBurn({
719
- package: STABLE_LAYER_PACKAGE_ID,
904
+ package: constants.STABLE_LAYER_PACKAGE_ID,
720
905
  arguments: {
721
- registry: STABLE_REGISTRY,
906
+ registry: constants.STABLE_REGISTRY,
722
907
  burnRequest
723
908
  },
724
- typeArguments: [stableCoinType, USDC_TYPE]
909
+ typeArguments: [stableCoinType, constants.USDC_TYPE]
725
910
  })(tx);
726
911
  if (autoTransfer) {
727
912
  tx.transferObjects([usdcCoin], sender ?? this.sender);
@@ -737,26 +922,53 @@ var StableLayerClient = class {
737
922
  autoTransfer = true
738
923
  }) {
739
924
  tx.setSender(sender ?? this.sender);
740
- this.releaseRewards(tx);
925
+ if (this.network === "testnet") {
926
+ const constants2 = this.getConstants();
927
+ const farmRegistry = this.mockFarmRegistryId ?? constants2.MOCK_FARM_REGISTRY;
928
+ const pkg = this.getMockFarmPackageId();
929
+ if (!farmRegistry) {
930
+ throw new Error(
931
+ "buildClaimTx (testnet): missing mock farm registry (mockFarmRegistryId or MOCK_FARM_REGISTRY)."
932
+ );
933
+ }
934
+ const stableTag = normalizeStructTag(stableCoinType);
935
+ const usdTag = normalizeStructTag(constants2.USDC_TYPE);
936
+ const rewardCoin2 = tx.moveCall({
937
+ target: `${pkg}::farm::claim`,
938
+ typeArguments: [stableTag, usdTag],
939
+ arguments: [
940
+ tx.object(farmRegistry),
941
+ tx.object(constants2.STABLE_REGISTRY),
942
+ tx.object(SUI_CLOCK_OBJECT_ID)
943
+ ]
944
+ });
945
+ if (autoTransfer) {
946
+ tx.transferObjects([rewardCoin2], sender ?? this.sender);
947
+ return;
948
+ }
949
+ return rewardCoin2;
950
+ }
951
+ await this.releaseRewards(tx);
952
+ const constants = this.getConstants();
741
953
  const [rewardCoin, withdrawResponse] = claim({
742
- package: STABLE_VAULT_FARM_PACKAGE_ID,
954
+ package: constants.STABLE_VAULT_FARM_PACKAGE_ID,
743
955
  arguments: {
744
- stableRegistry: STABLE_REGISTRY,
745
- farm: STABLE_VAULT_FARM,
746
- stableVault: STABLE_VAULT,
747
- usdbTreasury: this.bucketClient.treasury(tx),
748
- savingPool: this.getBucketSavingPool(tx),
749
- yieldVault: YIELD_VAULT
956
+ stableRegistry: constants.STABLE_REGISTRY,
957
+ farm: constants.STABLE_VAULT_FARM,
958
+ stableVault: constants.STABLE_VAULT,
959
+ usdbTreasury: await Promise.resolve(this.bucketClient.treasury(tx)),
960
+ savingPool: await this.getBucketSavingPool(tx),
961
+ yieldVault: constants.YIELD_VAULT
750
962
  },
751
963
  typeArguments: [
752
- STABLE_LP_TYPE,
753
- USDC_TYPE,
964
+ constants.STABLE_LP_TYPE,
965
+ constants.USDC_TYPE,
754
966
  stableCoinType,
755
- YUSDB_TYPE,
756
- SAVING_TYPE
967
+ constants.YUSDB_TYPE,
968
+ constants.SAVING_TYPE
757
969
  ]
758
970
  })(tx);
759
- this.checkResponse({ tx, response: withdrawResponse, type: "withdraw" });
971
+ await this.checkResponse({ tx, response: withdrawResponse, type: "withdraw" });
760
972
  if (autoTransfer) {
761
973
  tx.transferObjects([rewardCoin], sender ?? this.sender);
762
974
  return;
@@ -764,9 +976,63 @@ var StableLayerClient = class {
764
976
  return rewardCoin;
765
977
  }
766
978
  }
979
+ async getClaimRewardUsdbAmount({
980
+ stableCoinType,
981
+ sender
982
+ }) {
983
+ const tx = new Transaction();
984
+ await this.buildClaimTx({
985
+ tx,
986
+ stableCoinType,
987
+ sender,
988
+ autoTransfer: true
989
+ });
990
+ const usdbType = this.network === "testnet" ? normalizeStructTag(this.mockUsdbCoinType ?? (this.getConstants().MOCK_USDB_TYPE || `${this.getMockFarmPackageId()}::usdb::USDB`)) : normalizeStructTag(await this.bucketClient.getUsdbCoinType());
991
+ const res = await this.suiClient.simulateTransaction({
992
+ transaction: tx,
993
+ include: { balanceChanges: true }
994
+ });
995
+ if (res.$kind !== "Transaction") {
996
+ throw new Error(
997
+ "StableLayerClient.getClaimRewardUsdbAmount: dry-run did not succeed; cannot infer claimable USDB."
998
+ );
999
+ }
1000
+ const changes = res.Transaction?.balanceChanges ?? [];
1001
+ const addr = sender.toLowerCase();
1002
+ let sum = 0n;
1003
+ for (const bc of changes) {
1004
+ if (bc.address.toLowerCase() !== addr) continue;
1005
+ if (normalizeStructTag(bc.coinType) !== usdbType) continue;
1006
+ const amt = BigInt(bc.amount);
1007
+ if (amt > 0n) sum += amt;
1008
+ }
1009
+ return sum;
1010
+ }
1011
+ buildSetMaxSupplyTx({
1012
+ tx,
1013
+ registry,
1014
+ factoryCapId,
1015
+ maxSupply,
1016
+ stableCoinType,
1017
+ usdCoinType,
1018
+ sender
1019
+ }) {
1020
+ tx.setSender(sender ?? this.sender);
1021
+ const constants = this.getConstants();
1022
+ setMaxSupply({
1023
+ package: constants.STABLE_LAYER_PACKAGE_ID,
1024
+ arguments: {
1025
+ registry,
1026
+ FactoryCap: factoryCapId,
1027
+ maxSupply
1028
+ },
1029
+ typeArguments: [stableCoinType, usdCoinType]
1030
+ })(tx);
1031
+ }
767
1032
  async getTotalSupply() {
1033
+ const constants = this.getConstants();
768
1034
  const result = await this.suiClient.getObject({
769
- objectId: STABLE_REGISTRY,
1035
+ objectId: constants.STABLE_REGISTRY,
770
1036
  include: { json: true }
771
1037
  });
772
1038
  const json = result.object?.json;
@@ -775,8 +1041,9 @@ var StableLayerClient = class {
775
1041
  async getTotalSupplyByCoinType(stableCoinType) {
776
1042
  const TypeName3 = bcs24.struct("TypeName", { name: bcs24.string() });
777
1043
  const nameBcs = TypeName3.serialize({ name: stableCoinType.slice(2) }).toBytes();
1044
+ const constants = this.getConstants();
778
1045
  const result = await this.suiClient.core.getDynamicObjectField({
779
- parentId: STABLE_REGISTRY,
1046
+ parentId: constants.STABLE_REGISTRY,
780
1047
  name: {
781
1048
  type: "0x1::type_name::TypeName",
782
1049
  bcs: nameBcs
@@ -786,52 +1053,75 @@ var StableLayerClient = class {
786
1053
  const json = result.object?.json;
787
1054
  return json?.treasury_cap?.total_supply?.value ?? void 0;
788
1055
  }
789
- getBucketSavingPool(tx) {
790
- return this.bucketClient.savingPoolObj(tx, {
791
- lpType: SAVING_TYPE
792
- });
1056
+ async getBucketSavingPool(tx) {
1057
+ return Promise.resolve(
1058
+ this.bucketClient.savingPoolObj(tx, { lpType: this.getConstants().SAVING_TYPE })
1059
+ );
793
1060
  }
794
- getBucketPSMPool(tx) {
795
- return this.bucketClient.psmPoolObj(tx, {
796
- coinType: USDC_TYPE
797
- });
1061
+ async getBucketPSMPool(tx) {
1062
+ return Promise.resolve(
1063
+ this.bucketClient.psmPoolObj(tx, { coinType: this.getConstants().USDC_TYPE })
1064
+ );
798
1065
  }
799
- checkResponse({
1066
+ async checkResponse({
800
1067
  tx,
801
1068
  response,
802
1069
  type
803
1070
  }) {
1071
+ const lpType = this.getConstants().SAVING_TYPE;
804
1072
  if (type === "deposit") {
805
- return this.bucketClient.checkDepositResponse(tx, {
806
- lpType: SAVING_TYPE,
807
- depositResponse: response
808
- });
1073
+ return Promise.resolve(
1074
+ this.bucketClient.checkDepositResponse(tx, {
1075
+ lpType,
1076
+ depositResponse: response
1077
+ })
1078
+ );
809
1079
  } else {
810
- return this.bucketClient.checkWithdrawResponse(tx, {
811
- lpType: SAVING_TYPE,
812
- withdrawResponse: response
813
- });
1080
+ return Promise.resolve(
1081
+ this.bucketClient.checkWithdrawResponse(tx, {
1082
+ lpType,
1083
+ withdrawResponse: response
1084
+ })
1085
+ );
814
1086
  }
815
1087
  }
816
- releaseRewards(tx) {
1088
+ async releaseRewards(tx) {
1089
+ const constants = this.getConstants();
817
1090
  const depositResponse = release({
818
- package: YIELD_USDB_PACKAGE_ID,
1091
+ package: constants.YIELD_USDB_PACKAGE_ID,
819
1092
  arguments: {
820
- vault: YIELD_VAULT,
821
- treasury: this.bucketClient.treasury(tx),
822
- savingPool: this.bucketClient.savingPoolObj(tx, {
823
- lpType: SAVING_TYPE
824
- })
1093
+ vault: constants.YIELD_VAULT,
1094
+ treasury: await Promise.resolve(this.bucketClient.treasury(tx)),
1095
+ savingPool: await Promise.resolve(
1096
+ this.bucketClient.savingPoolObj(tx, { lpType: constants.SAVING_TYPE })
1097
+ )
825
1098
  },
826
- typeArguments: [YUSDB_TYPE, SAVING_TYPE]
1099
+ typeArguments: [constants.YUSDB_TYPE, constants.SAVING_TYPE]
827
1100
  })(tx);
828
- this.bucketClient.checkDepositResponse(tx, {
829
- depositResponse,
830
- lpType: SAVING_TYPE
831
- });
1101
+ await Promise.resolve(
1102
+ this.bucketClient.checkDepositResponse(tx, {
1103
+ depositResponse,
1104
+ lpType: constants.SAVING_TYPE
1105
+ })
1106
+ );
832
1107
  }
833
1108
  };
834
1109
  export {
835
- StableLayerClient
1110
+ SAVING_TYPE,
1111
+ STABLE_LAYER_PACKAGE_ID,
1112
+ STABLE_LAYER_PACKAGE_MAINNET_ALT,
1113
+ STABLE_LP_TYPE,
1114
+ STABLE_REGISTRY,
1115
+ STABLE_REGISTRY_MAINNET_ALT,
1116
+ STABLE_VAULT,
1117
+ STABLE_VAULT_FARM,
1118
+ STABLE_VAULT_FARM_ENTITY_TYPE,
1119
+ STABLE_VAULT_FARM_PACKAGE_ID,
1120
+ StableLayerClient,
1121
+ USDC_TYPE,
1122
+ YIELD_USDB_PACKAGE_ID,
1123
+ YIELD_VAULT,
1124
+ YUSDB_TYPE,
1125
+ getConstants
836
1126
  };
837
1127
  //# sourceMappingURL=index.mjs.map