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.
- package/README.md +27 -13
- package/dist/cjs/index.cjs +404 -99
- package/dist/cjs/index.cjs.map +4 -4
- package/dist/esm/index.mjs +389 -99
- package/dist/esm/index.mjs.map +4 -4
- package/dist/types/index.d.ts +16 -2
- package/dist/types/interface.d.ts +29 -1
- package/dist/types/libs/constants.d.ts +31 -12
- package/dist/types/libs/constants.mainnet.d.ts +20 -0
- package/dist/types/libs/constants.testnet.d.ts +22 -0
- package/package.json +5 -2
package/dist/esm/index.mjs
CHANGED
|
@@ -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
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
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
|
-
|
|
610
|
-
|
|
611
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
1073
|
+
return Promise.resolve(
|
|
1074
|
+
this.bucketClient.checkDepositResponse(tx, {
|
|
1075
|
+
lpType,
|
|
1076
|
+
depositResponse: response
|
|
1077
|
+
})
|
|
1078
|
+
);
|
|
809
1079
|
} else {
|
|
810
|
-
return
|
|
811
|
-
|
|
812
|
-
|
|
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:
|
|
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
|
-
|
|
829
|
-
|
|
830
|
-
|
|
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
|
-
|
|
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
|