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.
@@ -20,13 +20,29 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
- StableLayerClient: () => StableLayerClient
23
+ SAVING_TYPE: () => SAVING_TYPE,
24
+ STABLE_LAYER_PACKAGE_ID: () => STABLE_LAYER_PACKAGE_ID,
25
+ STABLE_LAYER_PACKAGE_MAINNET_ALT: () => STABLE_LAYER_PACKAGE_MAINNET_ALT,
26
+ STABLE_LP_TYPE: () => STABLE_LP_TYPE,
27
+ STABLE_REGISTRY: () => STABLE_REGISTRY,
28
+ STABLE_REGISTRY_MAINNET_ALT: () => STABLE_REGISTRY_MAINNET_ALT,
29
+ STABLE_VAULT: () => STABLE_VAULT,
30
+ STABLE_VAULT_FARM: () => STABLE_VAULT_FARM,
31
+ STABLE_VAULT_FARM_ENTITY_TYPE: () => STABLE_VAULT_FARM_ENTITY_TYPE,
32
+ STABLE_VAULT_FARM_PACKAGE_ID: () => STABLE_VAULT_FARM_PACKAGE_ID,
33
+ StableLayerClient: () => StableLayerClient,
34
+ USDC_TYPE: () => USDC_TYPE,
35
+ YIELD_USDB_PACKAGE_ID: () => YIELD_USDB_PACKAGE_ID,
36
+ YIELD_VAULT: () => YIELD_VAULT,
37
+ YUSDB_TYPE: () => YUSDB_TYPE,
38
+ getConstants: () => getConstants
24
39
  });
25
40
  module.exports = __toCommonJS(index_exports);
26
41
  var import_sdk = require("@bucket-protocol/sdk");
27
42
  var import_bcs24 = require("@mysten/sui/bcs");
28
43
  var import_grpc = require("@mysten/sui/grpc");
29
44
  var import_transactions2 = require("@mysten/sui/transactions");
45
+ var import_utils28 = require("@mysten/sui/utils");
30
46
 
31
47
  // src/generated/utils/index.ts
32
48
  var import_bcs = require("@mysten/sui/bcs");
@@ -275,6 +291,22 @@ var FactoryCap = new MoveStruct({ name: `${$moduleName9}::FactoryCap`, fields: {
275
291
  id: UID,
276
292
  factory_id: import_bcs8.bcs.Address
277
293
  } });
294
+ function setMaxSupply(options) {
295
+ const packageAddress = options.package ?? "@local-pkg/stable_factory.move";
296
+ const argumentsTypes = [
297
+ `${packageAddress}::stable_layer::StableRegistry`,
298
+ `${packageAddress}::stable_layer::FactoryCap<${options.typeArguments[0]}, ${options.typeArguments[1]}>`,
299
+ "u64"
300
+ ];
301
+ const parameterNames = ["registry", "FactoryCap", "maxSupply"];
302
+ return (tx) => tx.moveCall({
303
+ package: packageAddress,
304
+ module: "stable_layer",
305
+ function: "set_max_supply",
306
+ arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
307
+ typeArguments: options.typeArguments
308
+ });
309
+ }
278
310
  function mint(options) {
279
311
  const packageAddress = options.package ?? "@local-pkg/stable_factory.move";
280
312
  const argumentsTypes = [
@@ -614,29 +646,128 @@ function release(options) {
614
646
  });
615
647
  }
616
648
 
649
+ // src/libs/constants.mainnet.ts
650
+ var STABLE_REGISTRY_MAINNET_ALT = "0x213f4d584c0770f455bb98c94a4ee5ea9ddbc3d4ebb98a0ad6d093eb6da41642";
651
+ var STABLE_LAYER_PACKAGE_MAINNET_ALT = "0x41e25d09e20cf3bc43fe321e51ef178fac419ae47b783a7161982158fc9f17d6";
652
+ var MAINNET = {
653
+ STABLE_VAULT: "0x65f38160110cd6859d05f338ff54b4f462883bb6f87c667a65c0fb0e537410a7",
654
+ USDC_TYPE: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
655
+ STABLE_LP_TYPE: "0xb75744fadcbfc174627567ca29645d0af8f6e6fd01b6f57c75a08cd3fb97c567::lake_usdc::LakeUSDC",
656
+ YUSDB_TYPE: "0xac718b4b672d7f461fe7e86847166ff9c23cadba217397f0848a95bdea1f1051::yesusdb::YesUSDB",
657
+ STABLE_LAYER_PACKAGE_ID: "0xa4a78d8d3d1df62fb81d10068142e79b0d30ad4e3f578060487e36ed9ea764da",
658
+ STABLE_REGISTRY_MAINNET_ALT,
659
+ STABLE_LAYER_PACKAGE_MAINNET_ALT,
660
+ STABLE_VAULT_FARM_PACKAGE_ID: "0x00d31ddaa73a56abcc3e2d885ac1e1d90f9ae0e38bbef2ba2923550c8250de4d",
661
+ SAVING_TYPE: "0x38f61c75fa8407140294c84167dd57684580b55c3066883b48dedc344b1cde1e::susdb::SUSDB",
662
+ YIELD_VAULT: "0x0a7f6325253157cd437812fea0ceee9a6b96f2ec5eac410da6df39558ff3a4d1",
663
+ STABLE_REGISTRY: "0x213f4d584c0770f455bb98c94a4ee5ea9ddbc3d4ebb98a0ad6d093eb6da41642",
664
+ STABLE_VAULT_FARM: "0xe958b7d102b33bf3c09addb0e2cdff102ff2c93afe407ec5c2a541e8959a650c",
665
+ YIELD_USDB_PACKAGE_ID: "0x3dcbf82f7e3b80ed65cee596612602a6c7e78c71fd40f6455b40ad033ed04786"
666
+ };
667
+ var STABLE_VAULT_FARM_ENTITY_TYPE_MAINNET = `0xc1025fe014b03d33b207b5afb0ba04293be87fab438c1418a26a75c2fe05c223::stable_vault_farm::StableVaultFarmEntity<${MAINNET.STABLE_LP_TYPE}, ${MAINNET.USDC_TYPE}>`;
668
+
669
+ // src/libs/constants.testnet.ts
670
+ var TESTNET_USDC = "0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC";
671
+ var MOCK_FARM_PACKAGE_ID_TESTNET = "0x3a55ec8fabe5f3e982908ed3a7c3065f26e83ab226eb8d3450177dbaac25878b";
672
+ var MOCK_FARM_ORIGINAL_PACKAGE_ID_TESTNET = "0x673d4118c17de717b0b90c326f8f52f87b5fff8678f513edd2ae575a55175954";
673
+ var MOCK_FARM_REGISTRY_TESTNET = "0xc3e8d2e33e36f6a4b5c199fe2dde3ba6dc29e7af8dd045c86e62d7c21f374d02";
674
+ var MOCK_USDB_TYPE_TESTNET = `${MOCK_FARM_ORIGINAL_PACKAGE_ID_TESTNET}::usdb::USDB`;
675
+ var TESTNET = {
676
+ STABLE_LAYER_PACKAGE_ID: "0x9c248c80c3a757167780f17e0c00a4d293280be7276f1b81a153f6e47d2567c9",
677
+ STABLE_REGISTRY: "0xfa0fd96e0fbc07dc6bdc23cc1ac5b4c0056f4b469b9db0a70b6ea01c14a4c7b5",
678
+ USDC_TYPE: TESTNET_USDC,
679
+ STABLE_VAULT_FARM_ENTITY_TYPE: `${MOCK_FARM_ORIGINAL_PACKAGE_ID_TESTNET}::farm::MockFarmEntity`,
680
+ MOCK_FARM_PACKAGE_ID: MOCK_FARM_PACKAGE_ID_TESTNET,
681
+ MOCK_FARM_REGISTRY: MOCK_FARM_REGISTRY_TESTNET,
682
+ MOCK_USDB_TYPE: MOCK_USDB_TYPE_TESTNET,
683
+ STABLE_VAULT: "",
684
+ STABLE_LP_TYPE: "",
685
+ YUSDB_TYPE: "",
686
+ STABLE_VAULT_FARM_PACKAGE_ID: "",
687
+ SAVING_TYPE: "",
688
+ YIELD_VAULT: "",
689
+ STABLE_VAULT_FARM: "",
690
+ YIELD_USDB_PACKAGE_ID: ""
691
+ };
692
+ var STABLE_VAULT_FARM_ENTITY_TYPE_TESTNET = TESTNET.STABLE_VAULT_FARM_ENTITY_TYPE;
693
+
617
694
  // src/libs/constants.ts
618
- var STABLE_VAULT = "0x65f38160110cd6859d05f338ff54b4f462883bb6f87c667a65c0fb0e537410a7";
619
- var USDC_TYPE = "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";
620
- var STABLE_LP_TYPE = "0xb75744fadcbfc174627567ca29645d0af8f6e6fd01b6f57c75a08cd3fb97c567::lake_usdc::LakeUSDC";
621
- var YUSDB_TYPE = "0xac718b4b672d7f461fe7e86847166ff9c23cadba217397f0848a95bdea1f1051::yesusdb::YesUSDB";
622
- var STABLE_LAYER_PACKAGE_ID = "0xa4a78d8d3d1df62fb81d10068142e79b0d30ad4e3f578060487e36ed9ea764da";
623
- var STABLE_VAULT_FARM_PACKAGE_ID = "0x00d31ddaa73a56abcc3e2d885ac1e1d90f9ae0e38bbef2ba2923550c8250de4d";
624
- var SAVING_TYPE = "0x38f61c75fa8407140294c84167dd57684580b55c3066883b48dedc344b1cde1e::susdb::SUSDB";
625
- var YIELD_VAULT = "0x0a7f6325253157cd437812fea0ceee9a6b96f2ec5eac410da6df39558ff3a4d1";
626
- var STABLE_REGISTRY = "0x213f4d584c0770f455bb98c94a4ee5ea9ddbc3d4ebb98a0ad6d093eb6da41642";
627
- var STABLE_VAULT_FARM_ENTITY_TYPE = `0xc1025fe014b03d33b207b5afb0ba04293be87fab438c1418a26a75c2fe05c223::stable_vault_farm::StableVaultFarmEntity<${STABLE_LP_TYPE}, ${USDC_TYPE}>`;
628
- var STABLE_VAULT_FARM = "0xe958b7d102b33bf3c09addb0e2cdff102ff2c93afe407ec5c2a541e8959a650c";
629
- var YIELD_USDB_PACKAGE_ID = "0x3dcbf82f7e3b80ed65cee596612602a6c7e78c71fd40f6455b40ad033ed04786";
695
+ function getMainnetConstants() {
696
+ return {
697
+ ...MAINNET,
698
+ STABLE_VAULT_FARM_ENTITY_TYPE: STABLE_VAULT_FARM_ENTITY_TYPE_MAINNET,
699
+ MOCK_FARM_PACKAGE_ID: "",
700
+ MOCK_FARM_REGISTRY: "",
701
+ MOCK_USDB_TYPE: ""
702
+ };
703
+ }
704
+ function getTestnetConstants() {
705
+ return {
706
+ ...TESTNET,
707
+ STABLE_VAULT_FARM_ENTITY_TYPE: STABLE_VAULT_FARM_ENTITY_TYPE_TESTNET
708
+ };
709
+ }
710
+ function getConstants(network) {
711
+ return network === "testnet" ? getTestnetConstants() : getMainnetConstants();
712
+ }
713
+ var STABLE_VAULT = MAINNET.STABLE_VAULT;
714
+ var USDC_TYPE = MAINNET.USDC_TYPE;
715
+ var STABLE_LP_TYPE = MAINNET.STABLE_LP_TYPE;
716
+ var YUSDB_TYPE = MAINNET.YUSDB_TYPE;
717
+ var STABLE_LAYER_PACKAGE_ID = MAINNET.STABLE_LAYER_PACKAGE_ID;
718
+ var STABLE_VAULT_FARM_PACKAGE_ID = MAINNET.STABLE_VAULT_FARM_PACKAGE_ID;
719
+ var SAVING_TYPE = MAINNET.SAVING_TYPE;
720
+ var YIELD_VAULT = MAINNET.YIELD_VAULT;
721
+ var STABLE_REGISTRY = MAINNET.STABLE_REGISTRY;
722
+ var STABLE_VAULT_FARM = MAINNET.STABLE_VAULT_FARM;
723
+ var YIELD_USDB_PACKAGE_ID = MAINNET.YIELD_USDB_PACKAGE_ID;
724
+ var STABLE_VAULT_FARM_ENTITY_TYPE = STABLE_VAULT_FARM_ENTITY_TYPE_MAINNET;
630
725
 
631
726
  // src/index.ts
632
- var StableLayerClient = class {
633
- constructor(config) {
634
- this.bucketClient = new import_sdk.BucketClient({ network: config.network });
635
- this.suiClient = new import_grpc.SuiGrpcClient({
727
+ var StableLayerClient = class _StableLayerClient {
728
+ static getConstants(network) {
729
+ return getConstants(network);
730
+ }
731
+ getConstants() {
732
+ return getConstants(this.network);
733
+ }
734
+ static async initialize(config) {
735
+ const defaultBaseUrl = `https://fullnode.${config.network}.sui.io:443`;
736
+ const baseUrl = config.baseUrl ?? process.env.SUI_GRPC_URL ?? defaultBaseUrl;
737
+ const suiClient = config.suiClient ?? new import_grpc.SuiGrpcClient({
636
738
  network: config.network,
637
- baseUrl: `https://fullnode.${config.network}.sui.io:443`
739
+ baseUrl
638
740
  });
741
+ const bucketClient = await import_sdk.BucketClient.initialize({
742
+ network: config.network,
743
+ suiClient,
744
+ configObjectId: config.configObjectId,
745
+ configOverrides: config.configOverrides
746
+ });
747
+ return new _StableLayerClient(config, bucketClient, suiClient);
748
+ }
749
+ constructor(config, bucketClient, suiClient) {
750
+ this.bucketClient = bucketClient;
751
+ this.suiClient = suiClient;
639
752
  this.sender = config.sender;
753
+ this.network = config.network;
754
+ this.mockFarmRegistryId = config.mockFarmRegistryId;
755
+ this.mockFarmPackageId = config.mockFarmPackageId;
756
+ this.mockUsdbCoinType = config.mockUsdbCoinType;
757
+ }
758
+ getMockFarmPackageId() {
759
+ const c = this.getConstants();
760
+ const id = (this.mockFarmPackageId ?? c.MOCK_FARM_PACKAGE_ID)?.trim();
761
+ if (!id) {
762
+ throw new Error(
763
+ "StableLayerClient: missing mock farm package (set mockFarmPackageId or MOCK_FARM_PACKAGE_ID in testnet constants)."
764
+ );
765
+ }
766
+ return id;
767
+ }
768
+ getMockFarmEntityType() {
769
+ const c = this.getConstants();
770
+ return c.STABLE_VAULT_FARM_ENTITY_TYPE || `${this.getMockFarmPackageId()}::farm::MockFarmEntity`;
640
771
  }
641
772
  async buildMintTx({
642
773
  tx,
@@ -646,38 +777,69 @@ var StableLayerClient = class {
646
777
  autoTransfer = true
647
778
  }) {
648
779
  tx.setSender(sender ?? this.sender);
780
+ const constants = this.getConstants();
781
+ if (this.network === "testnet") {
782
+ const farmRegistry = this.mockFarmRegistryId ?? constants.MOCK_FARM_REGISTRY;
783
+ const pkg = this.getMockFarmPackageId();
784
+ if (!farmRegistry) {
785
+ throw new Error(
786
+ "buildMintTx (testnet): missing mock farm registry (mockFarmRegistryId or MOCK_FARM_REGISTRY)."
787
+ );
788
+ }
789
+ const stableTag = (0, import_utils28.normalizeStructTag)(stableCoinType);
790
+ const usdTag = (0, import_utils28.normalizeStructTag)(constants.USDC_TYPE);
791
+ const farmEntityTag = (0, import_utils28.normalizeStructTag)(this.getMockFarmEntityType());
792
+ const [stableCoin2, loan2] = mint({
793
+ package: constants.STABLE_LAYER_PACKAGE_ID,
794
+ arguments: {
795
+ registry: constants.STABLE_REGISTRY,
796
+ uCoin: usdcCoin
797
+ },
798
+ typeArguments: [stableTag, usdTag, farmEntityTag]
799
+ })(tx);
800
+ tx.moveCall({
801
+ target: `${pkg}::farm::receive`,
802
+ typeArguments: [stableTag, usdTag],
803
+ arguments: [tx.object(farmRegistry), loan2, tx.object(import_utils28.SUI_CLOCK_OBJECT_ID)]
804
+ });
805
+ if (autoTransfer) {
806
+ tx.transferObjects([stableCoin2], sender ?? this.sender);
807
+ return;
808
+ }
809
+ return stableCoin2;
810
+ }
649
811
  const [stableCoin, loan] = mint({
650
- package: STABLE_LAYER_PACKAGE_ID,
812
+ package: constants.STABLE_LAYER_PACKAGE_ID,
651
813
  arguments: {
652
- registry: STABLE_REGISTRY,
814
+ registry: constants.STABLE_REGISTRY,
653
815
  uCoin: usdcCoin
654
816
  },
655
- typeArguments: [stableCoinType, USDC_TYPE, STABLE_VAULT_FARM_ENTITY_TYPE]
817
+ typeArguments: [stableCoinType, constants.USDC_TYPE, constants.STABLE_VAULT_FARM_ENTITY_TYPE]
656
818
  })(tx);
657
819
  const [uPrice] = await this.bucketClient.aggregatePrices(tx, {
658
- coinTypes: [USDC_TYPE]
820
+ coinTypes: [constants.USDC_TYPE]
659
821
  });
660
822
  const depositResponse = receive({
661
- package: STABLE_VAULT_FARM_PACKAGE_ID,
823
+ package: constants.STABLE_VAULT_FARM_PACKAGE_ID,
662
824
  typeArguments: [
663
- STABLE_LP_TYPE,
664
- USDC_TYPE,
825
+ constants.STABLE_LP_TYPE,
826
+ constants.USDC_TYPE,
665
827
  stableCoinType,
666
- YUSDB_TYPE,
667
- SAVING_TYPE
828
+ constants.YUSDB_TYPE,
829
+ constants.SAVING_TYPE
668
830
  ],
669
831
  arguments: {
670
- farm: STABLE_VAULT_FARM,
832
+ farm: constants.STABLE_VAULT_FARM,
671
833
  loan,
672
- stableVault: STABLE_VAULT,
673
- usdbTreasury: this.bucketClient.treasury(tx),
674
- psmPool: this.getBucketPSMPool(tx),
675
- savingPool: this.getBucketSavingPool(tx),
676
- yieldVault: YIELD_VAULT,
834
+ stableVault: constants.STABLE_VAULT,
835
+ usdbTreasury: await Promise.resolve(this.bucketClient.treasury(tx)),
836
+ psmPool: await this.getBucketPSMPool(tx),
837
+ savingPool: await this.getBucketSavingPool(tx),
838
+ yieldVault: constants.YIELD_VAULT,
677
839
  uPrice
678
840
  }
679
841
  })(tx);
680
- this.checkResponse({ tx, response: depositResponse, type: "deposit" });
842
+ await this.checkResponse({ tx, response: depositResponse, type: "deposit" });
681
843
  if (autoTransfer) {
682
844
  tx.transferObjects([stableCoin], sender ?? this.sender);
683
845
  return;
@@ -706,46 +868,84 @@ var StableLayerClient = class {
706
868
  ) : amount,
707
869
  type: stableCoinType
708
870
  });
709
- this.releaseRewards(tx);
871
+ const constants = this.getConstants();
872
+ if (this.network === "testnet") {
873
+ const farmRegistry = this.mockFarmRegistryId ?? constants.MOCK_FARM_REGISTRY;
874
+ const pkg = this.getMockFarmPackageId();
875
+ if (!farmRegistry) {
876
+ throw new Error(
877
+ "buildBurnTx (testnet): missing mock farm registry (mockFarmRegistryId or MOCK_FARM_REGISTRY)."
878
+ );
879
+ }
880
+ const stableTag = (0, import_utils28.normalizeStructTag)(stableCoinType);
881
+ const usdTag = (0, import_utils28.normalizeStructTag)(constants.USDC_TYPE);
882
+ const burnRequest2 = requestBurn({
883
+ package: constants.STABLE_LAYER_PACKAGE_ID,
884
+ arguments: {
885
+ registry: constants.STABLE_REGISTRY,
886
+ stableCoin: btcUsdCoin
887
+ },
888
+ typeArguments: [stableTag, usdTag]
889
+ })(tx);
890
+ tx.moveCall({
891
+ target: `${pkg}::farm::pay`,
892
+ typeArguments: [stableTag, usdTag],
893
+ arguments: [tx.object(farmRegistry), tx.object(import_utils28.SUI_CLOCK_OBJECT_ID), burnRequest2]
894
+ });
895
+ const usdcCoin2 = fulfillBurn({
896
+ package: constants.STABLE_LAYER_PACKAGE_ID,
897
+ arguments: {
898
+ registry: constants.STABLE_REGISTRY,
899
+ burnRequest: burnRequest2
900
+ },
901
+ typeArguments: [stableTag, usdTag]
902
+ })(tx);
903
+ if (autoTransfer) {
904
+ tx.transferObjects([usdcCoin2], sender ?? this.sender);
905
+ return;
906
+ }
907
+ return usdcCoin2;
908
+ }
909
+ await this.releaseRewards(tx);
710
910
  const burnRequest = requestBurn({
711
- package: STABLE_LAYER_PACKAGE_ID,
911
+ package: constants.STABLE_LAYER_PACKAGE_ID,
712
912
  arguments: {
713
- registry: STABLE_REGISTRY,
913
+ registry: constants.STABLE_REGISTRY,
714
914
  stableCoin: btcUsdCoin
715
915
  },
716
- typeArguments: [stableCoinType, USDC_TYPE]
916
+ typeArguments: [stableCoinType, constants.USDC_TYPE]
717
917
  })(tx);
718
918
  const [uPrice] = await this.bucketClient.aggregatePrices(tx, {
719
- coinTypes: [USDC_TYPE]
919
+ coinTypes: [constants.USDC_TYPE]
720
920
  });
721
921
  const withdrawResponse = pay({
722
- package: STABLE_VAULT_FARM_PACKAGE_ID,
922
+ package: constants.STABLE_VAULT_FARM_PACKAGE_ID,
723
923
  arguments: {
724
- farm: STABLE_VAULT_FARM,
924
+ farm: constants.STABLE_VAULT_FARM,
725
925
  request: burnRequest,
726
- stableVault: STABLE_VAULT,
727
- usdbTreasury: this.bucketClient.treasury(tx),
728
- psmPool: this.getBucketPSMPool(tx),
729
- savingPool: this.getBucketSavingPool(tx),
730
- yieldVault: YIELD_VAULT,
926
+ stableVault: constants.STABLE_VAULT,
927
+ usdbTreasury: await Promise.resolve(this.bucketClient.treasury(tx)),
928
+ psmPool: await this.getBucketPSMPool(tx),
929
+ savingPool: await this.getBucketSavingPool(tx),
930
+ yieldVault: constants.YIELD_VAULT,
731
931
  uPrice
732
932
  },
733
933
  typeArguments: [
734
- STABLE_LP_TYPE,
735
- USDC_TYPE,
934
+ constants.STABLE_LP_TYPE,
935
+ constants.USDC_TYPE,
736
936
  stableCoinType,
737
- YUSDB_TYPE,
738
- SAVING_TYPE
937
+ constants.YUSDB_TYPE,
938
+ constants.SAVING_TYPE
739
939
  ]
740
940
  })(tx);
741
- this.checkResponse({ tx, response: withdrawResponse, type: "withdraw" });
941
+ await this.checkResponse({ tx, response: withdrawResponse, type: "withdraw" });
742
942
  const usdcCoin = fulfillBurn({
743
- package: STABLE_LAYER_PACKAGE_ID,
943
+ package: constants.STABLE_LAYER_PACKAGE_ID,
744
944
  arguments: {
745
- registry: STABLE_REGISTRY,
945
+ registry: constants.STABLE_REGISTRY,
746
946
  burnRequest
747
947
  },
748
- typeArguments: [stableCoinType, USDC_TYPE]
948
+ typeArguments: [stableCoinType, constants.USDC_TYPE]
749
949
  })(tx);
750
950
  if (autoTransfer) {
751
951
  tx.transferObjects([usdcCoin], sender ?? this.sender);
@@ -761,26 +961,53 @@ var StableLayerClient = class {
761
961
  autoTransfer = true
762
962
  }) {
763
963
  tx.setSender(sender ?? this.sender);
764
- this.releaseRewards(tx);
964
+ if (this.network === "testnet") {
965
+ const constants2 = this.getConstants();
966
+ const farmRegistry = this.mockFarmRegistryId ?? constants2.MOCK_FARM_REGISTRY;
967
+ const pkg = this.getMockFarmPackageId();
968
+ if (!farmRegistry) {
969
+ throw new Error(
970
+ "buildClaimTx (testnet): missing mock farm registry (mockFarmRegistryId or MOCK_FARM_REGISTRY)."
971
+ );
972
+ }
973
+ const stableTag = (0, import_utils28.normalizeStructTag)(stableCoinType);
974
+ const usdTag = (0, import_utils28.normalizeStructTag)(constants2.USDC_TYPE);
975
+ const rewardCoin2 = tx.moveCall({
976
+ target: `${pkg}::farm::claim`,
977
+ typeArguments: [stableTag, usdTag],
978
+ arguments: [
979
+ tx.object(farmRegistry),
980
+ tx.object(constants2.STABLE_REGISTRY),
981
+ tx.object(import_utils28.SUI_CLOCK_OBJECT_ID)
982
+ ]
983
+ });
984
+ if (autoTransfer) {
985
+ tx.transferObjects([rewardCoin2], sender ?? this.sender);
986
+ return;
987
+ }
988
+ return rewardCoin2;
989
+ }
990
+ await this.releaseRewards(tx);
991
+ const constants = this.getConstants();
765
992
  const [rewardCoin, withdrawResponse] = claim({
766
- package: STABLE_VAULT_FARM_PACKAGE_ID,
993
+ package: constants.STABLE_VAULT_FARM_PACKAGE_ID,
767
994
  arguments: {
768
- stableRegistry: STABLE_REGISTRY,
769
- farm: STABLE_VAULT_FARM,
770
- stableVault: STABLE_VAULT,
771
- usdbTreasury: this.bucketClient.treasury(tx),
772
- savingPool: this.getBucketSavingPool(tx),
773
- yieldVault: YIELD_VAULT
995
+ stableRegistry: constants.STABLE_REGISTRY,
996
+ farm: constants.STABLE_VAULT_FARM,
997
+ stableVault: constants.STABLE_VAULT,
998
+ usdbTreasury: await Promise.resolve(this.bucketClient.treasury(tx)),
999
+ savingPool: await this.getBucketSavingPool(tx),
1000
+ yieldVault: constants.YIELD_VAULT
774
1001
  },
775
1002
  typeArguments: [
776
- STABLE_LP_TYPE,
777
- USDC_TYPE,
1003
+ constants.STABLE_LP_TYPE,
1004
+ constants.USDC_TYPE,
778
1005
  stableCoinType,
779
- YUSDB_TYPE,
780
- SAVING_TYPE
1006
+ constants.YUSDB_TYPE,
1007
+ constants.SAVING_TYPE
781
1008
  ]
782
1009
  })(tx);
783
- this.checkResponse({ tx, response: withdrawResponse, type: "withdraw" });
1010
+ await this.checkResponse({ tx, response: withdrawResponse, type: "withdraw" });
784
1011
  if (autoTransfer) {
785
1012
  tx.transferObjects([rewardCoin], sender ?? this.sender);
786
1013
  return;
@@ -788,9 +1015,63 @@ var StableLayerClient = class {
788
1015
  return rewardCoin;
789
1016
  }
790
1017
  }
1018
+ async getClaimRewardUsdbAmount({
1019
+ stableCoinType,
1020
+ sender
1021
+ }) {
1022
+ const tx = new import_transactions2.Transaction();
1023
+ await this.buildClaimTx({
1024
+ tx,
1025
+ stableCoinType,
1026
+ sender,
1027
+ autoTransfer: true
1028
+ });
1029
+ const usdbType = this.network === "testnet" ? (0, import_utils28.normalizeStructTag)(this.mockUsdbCoinType ?? (this.getConstants().MOCK_USDB_TYPE || `${this.getMockFarmPackageId()}::usdb::USDB`)) : (0, import_utils28.normalizeStructTag)(await this.bucketClient.getUsdbCoinType());
1030
+ const res = await this.suiClient.simulateTransaction({
1031
+ transaction: tx,
1032
+ include: { balanceChanges: true }
1033
+ });
1034
+ if (res.$kind !== "Transaction") {
1035
+ throw new Error(
1036
+ "StableLayerClient.getClaimRewardUsdbAmount: dry-run did not succeed; cannot infer claimable USDB."
1037
+ );
1038
+ }
1039
+ const changes = res.Transaction?.balanceChanges ?? [];
1040
+ const addr = sender.toLowerCase();
1041
+ let sum = 0n;
1042
+ for (const bc of changes) {
1043
+ if (bc.address.toLowerCase() !== addr) continue;
1044
+ if ((0, import_utils28.normalizeStructTag)(bc.coinType) !== usdbType) continue;
1045
+ const amt = BigInt(bc.amount);
1046
+ if (amt > 0n) sum += amt;
1047
+ }
1048
+ return sum;
1049
+ }
1050
+ buildSetMaxSupplyTx({
1051
+ tx,
1052
+ registry,
1053
+ factoryCapId,
1054
+ maxSupply,
1055
+ stableCoinType,
1056
+ usdCoinType,
1057
+ sender
1058
+ }) {
1059
+ tx.setSender(sender ?? this.sender);
1060
+ const constants = this.getConstants();
1061
+ setMaxSupply({
1062
+ package: constants.STABLE_LAYER_PACKAGE_ID,
1063
+ arguments: {
1064
+ registry,
1065
+ FactoryCap: factoryCapId,
1066
+ maxSupply
1067
+ },
1068
+ typeArguments: [stableCoinType, usdCoinType]
1069
+ })(tx);
1070
+ }
791
1071
  async getTotalSupply() {
1072
+ const constants = this.getConstants();
792
1073
  const result = await this.suiClient.getObject({
793
- objectId: STABLE_REGISTRY,
1074
+ objectId: constants.STABLE_REGISTRY,
794
1075
  include: { json: true }
795
1076
  });
796
1077
  const json = result.object?.json;
@@ -799,8 +1080,9 @@ var StableLayerClient = class {
799
1080
  async getTotalSupplyByCoinType(stableCoinType) {
800
1081
  const TypeName3 = import_bcs24.bcs.struct("TypeName", { name: import_bcs24.bcs.string() });
801
1082
  const nameBcs = TypeName3.serialize({ name: stableCoinType.slice(2) }).toBytes();
1083
+ const constants = this.getConstants();
802
1084
  const result = await this.suiClient.core.getDynamicObjectField({
803
- parentId: STABLE_REGISTRY,
1085
+ parentId: constants.STABLE_REGISTRY,
804
1086
  name: {
805
1087
  type: "0x1::type_name::TypeName",
806
1088
  bcs: nameBcs
@@ -810,53 +1092,76 @@ var StableLayerClient = class {
810
1092
  const json = result.object?.json;
811
1093
  return json?.treasury_cap?.total_supply?.value ?? void 0;
812
1094
  }
813
- getBucketSavingPool(tx) {
814
- return this.bucketClient.savingPoolObj(tx, {
815
- lpType: SAVING_TYPE
816
- });
1095
+ async getBucketSavingPool(tx) {
1096
+ return Promise.resolve(
1097
+ this.bucketClient.savingPoolObj(tx, { lpType: this.getConstants().SAVING_TYPE })
1098
+ );
817
1099
  }
818
- getBucketPSMPool(tx) {
819
- return this.bucketClient.psmPoolObj(tx, {
820
- coinType: USDC_TYPE
821
- });
1100
+ async getBucketPSMPool(tx) {
1101
+ return Promise.resolve(
1102
+ this.bucketClient.psmPoolObj(tx, { coinType: this.getConstants().USDC_TYPE })
1103
+ );
822
1104
  }
823
- checkResponse({
1105
+ async checkResponse({
824
1106
  tx,
825
1107
  response,
826
1108
  type
827
1109
  }) {
1110
+ const lpType = this.getConstants().SAVING_TYPE;
828
1111
  if (type === "deposit") {
829
- return this.bucketClient.checkDepositResponse(tx, {
830
- lpType: SAVING_TYPE,
831
- depositResponse: response
832
- });
1112
+ return Promise.resolve(
1113
+ this.bucketClient.checkDepositResponse(tx, {
1114
+ lpType,
1115
+ depositResponse: response
1116
+ })
1117
+ );
833
1118
  } else {
834
- return this.bucketClient.checkWithdrawResponse(tx, {
835
- lpType: SAVING_TYPE,
836
- withdrawResponse: response
837
- });
1119
+ return Promise.resolve(
1120
+ this.bucketClient.checkWithdrawResponse(tx, {
1121
+ lpType,
1122
+ withdrawResponse: response
1123
+ })
1124
+ );
838
1125
  }
839
1126
  }
840
- releaseRewards(tx) {
1127
+ async releaseRewards(tx) {
1128
+ const constants = this.getConstants();
841
1129
  const depositResponse = release({
842
- package: YIELD_USDB_PACKAGE_ID,
1130
+ package: constants.YIELD_USDB_PACKAGE_ID,
843
1131
  arguments: {
844
- vault: YIELD_VAULT,
845
- treasury: this.bucketClient.treasury(tx),
846
- savingPool: this.bucketClient.savingPoolObj(tx, {
847
- lpType: SAVING_TYPE
848
- })
1132
+ vault: constants.YIELD_VAULT,
1133
+ treasury: await Promise.resolve(this.bucketClient.treasury(tx)),
1134
+ savingPool: await Promise.resolve(
1135
+ this.bucketClient.savingPoolObj(tx, { lpType: constants.SAVING_TYPE })
1136
+ )
849
1137
  },
850
- typeArguments: [YUSDB_TYPE, SAVING_TYPE]
1138
+ typeArguments: [constants.YUSDB_TYPE, constants.SAVING_TYPE]
851
1139
  })(tx);
852
- this.bucketClient.checkDepositResponse(tx, {
853
- depositResponse,
854
- lpType: SAVING_TYPE
855
- });
1140
+ await Promise.resolve(
1141
+ this.bucketClient.checkDepositResponse(tx, {
1142
+ depositResponse,
1143
+ lpType: constants.SAVING_TYPE
1144
+ })
1145
+ );
856
1146
  }
857
1147
  };
858
1148
  // Annotate the CommonJS export names for ESM import in node:
859
1149
  0 && (module.exports = {
860
- StableLayerClient
1150
+ SAVING_TYPE,
1151
+ STABLE_LAYER_PACKAGE_ID,
1152
+ STABLE_LAYER_PACKAGE_MAINNET_ALT,
1153
+ STABLE_LP_TYPE,
1154
+ STABLE_REGISTRY,
1155
+ STABLE_REGISTRY_MAINNET_ALT,
1156
+ STABLE_VAULT,
1157
+ STABLE_VAULT_FARM,
1158
+ STABLE_VAULT_FARM_ENTITY_TYPE,
1159
+ STABLE_VAULT_FARM_PACKAGE_ID,
1160
+ StableLayerClient,
1161
+ USDC_TYPE,
1162
+ YIELD_USDB_PACKAGE_ID,
1163
+ YIELD_VAULT,
1164
+ YUSDB_TYPE,
1165
+ getConstants
861
1166
  });
862
1167
  //# sourceMappingURL=index.cjs.map