@streamflow/staking 7.5.3 → 8.0.0-alpha.p284.726ba98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/cjs/index.cjs +2942 -0
  2. package/dist/cjs/index.cjs.map +1 -0
  3. package/dist/cjs/index.d.cts +298 -0
  4. package/dist/cjs/solana/descriptor/fee_manager.cjs +4 -0
  5. package/dist/cjs/solana/descriptor/fee_manager.cjs.map +1 -0
  6. package/dist/cjs/solana/descriptor/fee_manager.d.cts +292 -0
  7. package/dist/cjs/solana/descriptor/reward_pool.cjs +4 -0
  8. package/dist/cjs/solana/descriptor/reward_pool.cjs.map +1 -0
  9. package/dist/cjs/solana/descriptor/reward_pool.d.cts +967 -0
  10. package/dist/cjs/solana/descriptor/stake_pool.cjs +4 -0
  11. package/dist/cjs/solana/descriptor/stake_pool.cjs.map +1 -0
  12. package/dist/cjs/solana/descriptor/stake_pool.d.cts +954 -0
  13. package/dist/esm/index.d.ts +298 -7
  14. package/dist/esm/index.js +2917 -7
  15. package/dist/esm/index.js.map +1 -0
  16. package/dist/esm/solana/descriptor/fee_manager.d.ts +3 -1
  17. package/dist/esm/solana/descriptor/fee_manager.js +3 -1
  18. package/dist/esm/solana/descriptor/fee_manager.js.map +1 -0
  19. package/dist/esm/solana/descriptor/idl/fee_manager.json +255 -407
  20. package/dist/esm/solana/descriptor/idl/reward_pool.json +853 -1296
  21. package/dist/esm/solana/descriptor/idl/stake_pool.json +875 -1247
  22. package/dist/esm/solana/descriptor/reward_pool.d.ts +3 -1
  23. package/dist/esm/solana/descriptor/reward_pool.js +3 -1
  24. package/dist/esm/solana/descriptor/reward_pool.js.map +1 -0
  25. package/dist/esm/solana/descriptor/stake_pool.d.ts +3 -1
  26. package/dist/esm/solana/descriptor/stake_pool.js +3 -1
  27. package/dist/esm/solana/descriptor/stake_pool.js.map +1 -0
  28. package/package.json +63 -18
  29. package/dist/cjs/__tests__/solana/rewards.spec.js +0 -61
  30. package/dist/cjs/index.js +0 -37
  31. package/dist/cjs/solana/client.js +0 -336
  32. package/dist/cjs/solana/constants.js +0 -72
  33. package/dist/cjs/solana/descriptor/fee_manager.js +0 -2
  34. package/dist/cjs/solana/descriptor/idl/fee_manager.json +0 -436
  35. package/dist/cjs/solana/descriptor/idl/reward_pool.json +0 -1372
  36. package/dist/cjs/solana/descriptor/idl/stake_pool.json +0 -1318
  37. package/dist/cjs/solana/descriptor/reward_pool.js +0 -2
  38. package/dist/cjs/solana/descriptor/stake_pool.js +0 -2
  39. package/dist/cjs/solana/lib/derive-accounts.js +0 -46
  40. package/dist/cjs/solana/lib/fee-amounts.js +0 -44
  41. package/dist/cjs/solana/lib/rewards.js +0 -154
  42. package/dist/cjs/solana/lib/stake-weight.js +0 -19
  43. package/dist/cjs/solana/types.js +0 -2
  44. package/dist/esm/__tests__/solana/rewards.spec.d.ts +0 -1
  45. package/dist/esm/__tests__/solana/rewards.spec.js +0 -56
  46. package/dist/esm/solana/client.d.ts +0 -89
  47. package/dist/esm/solana/client.js +0 -334
  48. package/dist/esm/solana/constants.d.ts +0 -54
  49. package/dist/esm/solana/constants.js +0 -69
  50. package/dist/esm/solana/lib/derive-accounts.d.ts +0 -10
  51. package/dist/esm/solana/lib/derive-accounts.js +0 -31
  52. package/dist/esm/solana/lib/fee-amounts.d.ts +0 -9
  53. package/dist/esm/solana/lib/fee-amounts.js +0 -38
  54. package/dist/esm/solana/lib/rewards.d.ts +0 -26
  55. package/dist/esm/solana/lib/rewards.js +0 -152
  56. package/dist/esm/solana/lib/stake-weight.d.ts +0 -2
  57. package/dist/esm/solana/lib/stake-weight.js +0 -12
  58. package/dist/esm/solana/types.d.ts +0 -77
  59. package/dist/esm/solana/types.js +0 -1
@@ -4,7 +4,7 @@
4
4
  * Note that this is only a type helper and is not the actual IDL. The original
5
5
  * IDL can be found at `target/idl/reward_pool.json`.
6
6
  */
7
- export type RewardPool = {
7
+ type RewardPool = {
8
8
  address: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj";
9
9
  metadata: {
10
10
  name: "rewardPool";
@@ -963,3 +963,5 @@ export type RewardPool = {
963
963
  }
964
964
  ];
965
965
  };
966
+
967
+ export type { RewardPool };
@@ -1 +1,3 @@
1
- export {};
1
+
2
+ //# sourceMappingURL=reward_pool.js.map
3
+ //# sourceMappingURL=reward_pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"reward_pool.js"}
@@ -4,7 +4,7 @@
4
4
  * Note that this is only a type helper and is not the actual IDL. The original
5
5
  * IDL can be found at `target/idl/stake_pool.json`.
6
6
  */
7
- export type StakePool = {
7
+ type StakePool = {
8
8
  address: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH";
9
9
  metadata: {
10
10
  name: "stakePool";
@@ -950,3 +950,5 @@ export type StakePool = {
950
950
  }
951
951
  ];
952
952
  };
953
+
954
+ export type { StakePool };
@@ -1 +1,3 @@
1
- export {};
1
+
2
+ //# sourceMappingURL=stake_pool.js.map
3
+ //# sourceMappingURL=stake_pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"stake_pool.js"}
package/package.json CHANGED
@@ -1,35 +1,80 @@
1
1
  {
2
2
  "name": "@streamflow/staking",
3
- "version": "7.5.3",
3
+ "version": "8.0.0-alpha.p284.726ba98",
4
4
  "description": "JavaScript SDK to interact with Streamflow Staking protocol.",
5
5
  "homepage": "https://github.com/streamflow-finance/js-sdk/",
6
- "main": "dist/esm/index.js",
7
- "types": "dist/esm/index.d.ts",
6
+ "main": "./dist/cjs/index.cjs",
7
+ "module": "./dist/esm/index.js",
8
+ "types": "./dist/esm/index.d.ts",
8
9
  "type": "module",
10
+ "engines": {
11
+ "node": ">=18"
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
9
16
  "exports": {
10
17
  ".": {
11
- "types": "./dist/esm/index.d.ts",
18
+ "types": {
19
+ "import": "./dist/esm/index.d.ts",
20
+ "require": "./dist/cjs/index.d.cts"
21
+ },
12
22
  "import": "./dist/esm/index.js",
13
- "require": "./dist/cjs/index.js"
23
+ "require": "./dist/cjs/index.cjs"
24
+ },
25
+ "./solana/idl/reward_pool.json": {
26
+ "import": "./dist/esm/solana/descriptor/idl/reward_pool.json",
27
+ "require": "./dist/esm/solana/descriptor/idl/reward_pool.json",
28
+ "default": "./dist/esm/solana/descriptor/idl/reward_pool.json"
29
+ },
30
+ "./solana/idl/stake_pool.json": {
31
+ "import": "./dist/esm/solana/descriptor/idl/stake_pool.json",
32
+ "require": "./dist/esm/solana/descriptor/idl/stake_pool.json",
33
+ "default": "./dist/esm/solana/descriptor/idl/stake_pool.json"
34
+ },
35
+ "./solana/idl/fee_manager.json": {
36
+ "import": "./dist/esm/solana/descriptor/idl/fee_manager.json",
37
+ "require": "./dist/esm/solana/descriptor/idl/fee_manager.json",
38
+ "default": "./dist/esm/solana/descriptor/idl/fee_manager.json"
39
+ },
40
+ "./solana/descriptor/reward_pool": {
41
+ "types": {
42
+ "import": "./dist/esm/solana/descriptor/reward_pool.d.ts",
43
+ "require": "./dist/cjs/solana/descriptor/reward_pool.d.cts"
44
+ },
45
+ "import": "./dist/esm/solana/descriptor/reward_pool.js",
46
+ "require": "./dist/cjs/solana/descriptor/reward_pool.cjs"
47
+ },
48
+ "./solana/descriptor/stake_pool": {
49
+ "types": {
50
+ "import": "./dist/esm/solana/descriptor/stake_pool.d.ts",
51
+ "require": "./dist/cjs/solana/descriptor/stake_pool.d.cts"
52
+ },
53
+ "import": "./dist/esm/solana/descriptor/stake_pool.js",
54
+ "require": "./dist/cjs/solana/descriptor/stake_pool.cjs"
55
+ },
56
+ "./solana/descriptor/fee_manager": {
57
+ "types": {
58
+ "import": "./dist/esm/solana/descriptor/fee_manager.d.ts",
59
+ "require": "./dist/cjs/solana/descriptor/fee_manager.d.cts"
60
+ },
61
+ "import": "./dist/esm/solana/descriptor/fee_manager.js",
62
+ "require": "./dist/cjs/solana/descriptor/fee_manager.cjs"
14
63
  },
15
- "./solana/idl/*": {
16
- "types": "./dist/esm/solana/descriptor/*",
17
- "import": "./dist/esm/solana/descriptor/*",
18
- "require": "./dist/cjs/solana/descriptor/*"
19
- }
64
+ "./package.json": "./package.json"
20
65
  },
21
66
  "scripts": {
22
- "build:cjs": "rm -rf dist/cjs; tsc -p tsconfig.cjs.json",
23
- "build:esm": "rm -rf dist/esm; tsc -p tsconfig.esm.json",
24
- "build": "rm -rf dist; pnpm run build:cjs && pnpm run build:esm",
67
+ "copyIdls": "mkdir -p dist/esm/solana/descriptor/idl && cp solana/descriptor/idl/*.json dist/esm/solana/descriptor/idl/",
68
+ "build": "rm -rf dist && tsup && pnpm copyIdls",
69
+ "tsc:lint": "tsc --noEmit",
25
70
  "pack": "pnpm build && pnpm pack",
26
71
  "lint": "eslint --fix .",
27
- "test": "vitest",
28
- "prepublishOnly": "pnpm run lint && pnpm run test run && pnpm run build"
72
+ "test": "vitest run --passWithNoTests",
73
+ "prepublishOnly": "pnpm run lint && pnpm run test && pnpm run build"
29
74
  },
30
- "gitHead": "b56dab35f092ac8b4bde4b47a423e2d209e81cdd",
75
+ "gitHead": "76b5232d96fdb7bf7c52d437bd7733bb4afc53ca",
31
76
  "devDependencies": {
32
- "@streamflow/eslint-config": "7.5.3",
77
+ "@streamflow/eslint-config": "8.0.0-alpha.p284.726ba98",
33
78
  "@types/bn.js": "5.1.1",
34
79
  "typescript": "^5.6.3"
35
80
  },
@@ -40,7 +85,7 @@
40
85
  "@solana/spl-token": "0.4.9",
41
86
  "@solana/wallet-adapter-base": "0.9.19",
42
87
  "@solana/web3.js": "1.95.4",
43
- "@streamflow/common": "7.5.3",
88
+ "@streamflow/common": "8.0.0-alpha.p284.726ba98",
44
89
  "bn.js": "5.2.1",
45
90
  "borsh": "^2.0.0",
46
91
  "bs58": "5.0.0",
@@ -1,61 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const common_1 = require("@streamflow/common");
7
- const web3_js_1 = require("@solana/web3.js");
8
- // eslint-disable-next-line no-restricted-imports
9
- const bn_js_1 = __importDefault(require("bn.js"));
10
- const vitest_1 = require("vitest");
11
- const rewards_js_1 = require("../../solana/lib/rewards.js");
12
- const constants_js_1 = require("../../solana/constants.js");
13
- const populateRewardEntry = (effectiveStakedAmount, rewardAmount, rewardPeriod, periods) => {
14
- const rewardEntry = new rewards_js_1.RewardEntryAccumulator(new bn_js_1.default(0), new bn_js_1.default(0), new bn_js_1.default(0), web3_js_1.PublicKey.default, web3_js_1.PublicKey.default, new bn_js_1.default(0), new bn_js_1.default(0), new bn_js_1.default(0), []);
15
- if (effectiveStakedAmount && rewardAmount && rewardPeriod) {
16
- rewardEntry.accountedAmount = rewardEntry.getAccountableAmount(new bn_js_1.default(0), rewardPeriod.muln(periods || 1), effectiveStakedAmount, rewardAmount, rewardPeriod);
17
- }
18
- return rewardEntry;
19
- };
20
- (0, vitest_1.describe)("RewardEntryAccumulator", () => {
21
- (0, vitest_1.describe)("getClaimableAmount", () => {
22
- const testCases = [
23
- [9, 9, 1, 0.0025, new bn_js_1.default(2500000)],
24
- [6, 9, 1, 0.0025, new bn_js_1.default(2500000000)],
25
- [9, 6, 1, 0.0025, new bn_js_1.default(2500)],
26
- [1, 8, 1, 0.0025, new bn_js_1.default(25000000000000)],
27
- ];
28
- testCases.forEach(([stakeTokenDecimals, rewardTokenDecimals, periods, rewardRate, expectedRewardAmount]) => {
29
- (0, vitest_1.test)(`test decimals - ${stakeTokenDecimals}/${rewardTokenDecimals}/${periods}/${rewardRate}`, () => {
30
- const stakedAmount = (0, common_1.getBN)(1, stakeTokenDecimals);
31
- const effectiveStakedAmount = stakedAmount.mul(constants_js_1.SCALE_PRECISION_FACTOR_BN);
32
- const rewardPeriod = new bn_js_1.default(1);
33
- const rewardAmount = (0, rewards_js_1.calculateRewardAmountFromRate)(rewardRate, stakeTokenDecimals, rewardTokenDecimals);
34
- const rewardEntry = populateRewardEntry(effectiveStakedAmount, rewardAmount, rewardPeriod, periods);
35
- const claimableAmount = rewardEntry.getClaimableAmount();
36
- (0, vitest_1.expect)(rewardAmount.toString()).toEqual(expectedRewardAmount.toString());
37
- (0, vitest_1.expect)(claimableAmount.toString()).toEqual((0, common_1.getBN)(rewardRate, rewardTokenDecimals).muln(periods).toString());
38
- (0, vitest_1.expect)((0, rewards_js_1.calculateRewardRateFromAmount)(rewardAmount, stakeTokenDecimals, rewardTokenDecimals)).toEqual(rewardRate);
39
- });
40
- });
41
- (0, vitest_1.test)(`test decimals - negative difference`, () => {
42
- let rewardAmount = (0, rewards_js_1.calculateRewardAmountFromRate)(0.0025, 18, 1);
43
- (0, vitest_1.expect)(rewardAmount.toString()).toEqual(new bn_js_1.default(0).toString());
44
- rewardAmount = (0, rewards_js_1.calculateRewardAmountFromRate)(0.0025, 12, 4);
45
- (0, vitest_1.expect)(rewardAmount.toString()).toEqual(new bn_js_1.default(0).toString());
46
- });
47
- (0, vitest_1.test)(`test decimals - precision loss`, () => {
48
- const stakeTokenDecimals = 12;
49
- const rewardTokenDecimals = 6;
50
- const stakedAmount = (0, common_1.getBN)(1, stakeTokenDecimals);
51
- const effectiveStakedAmount = stakedAmount.mul(constants_js_1.SCALE_PRECISION_FACTOR_BN);
52
- const rewardPeriod = new bn_js_1.default(1);
53
- const rewardAmount = (0, rewards_js_1.calculateRewardAmountFromRate)(0.0025, stakeTokenDecimals, rewardTokenDecimals);
54
- const rewardEntry = populateRewardEntry(effectiveStakedAmount, rewardAmount, rewardPeriod);
55
- const claimableAmount = rewardEntry.getClaimableAmount();
56
- (0, vitest_1.expect)(rewardAmount.toString()).toEqual(new bn_js_1.default(2).toString());
57
- (0, vitest_1.expect)(claimableAmount.toString()).toEqual((0, common_1.getBN)(0.002, rewardTokenDecimals).toString());
58
- (0, vitest_1.expect)((0, rewards_js_1.calculateRewardRateFromAmount)(rewardAmount, stakeTokenDecimals, rewardTokenDecimals)).toEqual(0.002);
59
- });
60
- });
61
- });
package/dist/cjs/index.js DELETED
@@ -1,37 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
- };
21
- var __importStar = (this && this.__importStar) || function (mod) {
22
- if (mod && mod.__esModule) return mod;
23
- var result = {};
24
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
- __setModuleDefault(result, mod);
26
- return result;
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.constants = exports.SolanaStakingClient = void 0;
30
- var client_js_1 = require("./solana/client.js");
31
- Object.defineProperty(exports, "SolanaStakingClient", { enumerable: true, get: function () { return client_js_1.SolanaStakingClient; } });
32
- __exportStar(require("./solana/types.js"), exports);
33
- __exportStar(require("./solana/lib/derive-accounts.js"), exports);
34
- __exportStar(require("./solana/lib/rewards.js"), exports);
35
- __exportStar(require("./solana/lib/fee-amounts.js"), exports);
36
- __exportStar(require("./solana/lib/stake-weight.js"), exports);
37
- exports.constants = __importStar(require("./solana/constants.js"));
@@ -1,336 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SolanaStakingClient = void 0;
7
- const anchor_1 = require("@coral-xyz/anchor");
8
- const spl_token_1 = require("@solana/spl-token");
9
- const web3_js_1 = require("@solana/web3.js");
10
- const common_1 = require("@streamflow/common");
11
- const solana_1 = require("@streamflow/common/solana");
12
- const constants_js_1 = require("./constants.js");
13
- const fee_manager_json_1 = __importDefault(require("./descriptor/idl/fee_manager.json"));
14
- const reward_pool_json_1 = __importDefault(require("./descriptor/idl/reward_pool.json"));
15
- const stake_pool_json_1 = __importDefault(require("./descriptor/idl/stake_pool.json"));
16
- const derive_accounts_js_1 = require("./lib/derive-accounts.js");
17
- class SolanaStakingClient {
18
- constructor({ clusterUrl, cluster = common_1.ICluster.Mainnet, commitment = "confirmed", programIds, sendRate = 1, sendThrottler, }) {
19
- this.cluster = cluster;
20
- this.commitment = commitment;
21
- this.connection = new web3_js_1.Connection(clusterUrl, this.commitment);
22
- this.sendThrottler = sendThrottler ?? (0, solana_1.buildSendThrottler)(sendRate);
23
- const stakePoolIdl = {
24
- ...stake_pool_json_1.default,
25
- address: programIds?.stakePool ?? constants_js_1.STAKE_POOL_PROGRAM_ID[cluster] ?? stake_pool_json_1.default.address,
26
- };
27
- const rewardPoolIdl = {
28
- ...reward_pool_json_1.default,
29
- address: programIds?.rewardPool ?? constants_js_1.REWARD_POOL_PROGRAM_ID[cluster] ?? reward_pool_json_1.default.address,
30
- };
31
- const feeManagerIdl = {
32
- ...fee_manager_json_1.default,
33
- address: programIds?.feeManager ?? fee_manager_json_1.default.address,
34
- };
35
- this.programs = {
36
- stakePoolProgram: new anchor_1.Program(stakePoolIdl, {
37
- connection: this.connection,
38
- }),
39
- rewardPoolProgram: new anchor_1.Program(rewardPoolIdl, {
40
- connection: this.connection,
41
- }),
42
- feeManagerProgram: new anchor_1.Program(feeManagerIdl, {
43
- connection: this.connection,
44
- }),
45
- };
46
- }
47
- getCurrentProgramId(programKey) {
48
- const program = this.programs[programKey];
49
- (0, common_1.invariant)(program, `Program ${programKey} is not found`);
50
- return program.programId;
51
- }
52
- getCommitment() {
53
- return typeof this.commitment == "string" ? this.commitment : this.commitment.commitment;
54
- }
55
- async getStakePool(id) {
56
- const { stakePoolProgram } = this.programs;
57
- return stakePoolProgram.account.stakePool.fetch(id);
58
- }
59
- async searchStakePools(criteria = {}) {
60
- const { stakePoolProgram } = this.programs;
61
- return stakePoolProgram.account.stakePool.all((0, solana_1.getFilters)(criteria, constants_js_1.STAKE_POOL_BYTE_OFFSETS));
62
- }
63
- async getStakeEntry(id) {
64
- const { stakePoolProgram } = this.programs;
65
- return stakePoolProgram.account.stakeEntry.fetch(id);
66
- }
67
- async searchStakeEntries(criteria = {}) {
68
- const { stakePoolProgram } = this.programs;
69
- return stakePoolProgram.account.stakeEntry.all((0, solana_1.getFilters)(criteria, constants_js_1.STAKE_ENTRY_BYTE_OFFSETS));
70
- }
71
- async searchRewardPools(criteria = {}) {
72
- const { rewardPoolProgram } = this.programs;
73
- return rewardPoolProgram.account.rewardPool.all((0, solana_1.getFilters)(criteria, constants_js_1.REWARD_POOL_BYTE_OFFSETS));
74
- }
75
- async searchRewardEntries(criteria) {
76
- const { rewardPoolProgram } = this.programs;
77
- return rewardPoolProgram.account.rewardEntry.all((0, solana_1.getFilters)(criteria, constants_js_1.REWARD_ENTRY_BYTE_OFFSETS));
78
- }
79
- async getFee(target) {
80
- const perTargetFee = await this.getFeeValueIfExists(target);
81
- if (perTargetFee) {
82
- return perTargetFee;
83
- }
84
- return this.getDefaultFeeValue();
85
- }
86
- getDefaultFeeValue() {
87
- const { feeManagerProgram } = this.programs;
88
- const feeValueKey = (0, derive_accounts_js_1.deriveConfigPDA)(feeManagerProgram.programId);
89
- return feeManagerProgram.account.config.fetch(feeValueKey);
90
- }
91
- getFeeValueIfExists(target) {
92
- const { feeManagerProgram } = this.programs;
93
- const feeValueKey = (0, derive_accounts_js_1.deriveFeeValuePDA)(feeManagerProgram.programId, new web3_js_1.PublicKey(target));
94
- return feeManagerProgram.account.feeValue.fetchNullable(feeValueKey);
95
- }
96
- async createStakePool(data, extParams) {
97
- const { ixs, publicKey } = await this.prepareCreateStakePoolInstructions(data, extParams);
98
- const { signature } = await this.execute(ixs, extParams);
99
- return {
100
- ixs,
101
- txId: signature,
102
- metadataId: publicKey,
103
- };
104
- }
105
- async prepareCreateStakePoolInstructions({ maxWeight, maxDuration, minDuration, mint, permissionless = false, freezeStakeMint = null, unstakePeriod = null, nonce, tokenProgramId = spl_token_1.TOKEN_PROGRAM_ID, }, extParams) {
106
- const { stakePoolProgram } = this.programs;
107
- const creator = extParams.invoker.publicKey;
108
- (0, common_1.invariant)(creator, "Undefined invoker publicKey");
109
- const createInstruction = await stakePoolProgram.methods
110
- .createPool(nonce, maxWeight, minDuration, maxDuration, permissionless, freezeStakeMint, unstakePeriod)
111
- .accounts({
112
- creator,
113
- mint,
114
- tokenProgram: tokenProgramId,
115
- })
116
- .instruction();
117
- const stakePoolPDA = (0, derive_accounts_js_1.deriveStakePoolPDA)(stakePoolProgram.programId, (0, solana_1.pk)(mint), creator, nonce);
118
- return { ixs: [createInstruction], publicKey: stakePoolPDA };
119
- }
120
- async stake(data, extParams) {
121
- const { ixs } = await this.prepareStakeInstructions(data, extParams);
122
- const { signature } = await this.execute(ixs, extParams);
123
- return {
124
- ixs,
125
- txId: signature,
126
- };
127
- }
128
- async prepareStakeInstructions({ nonce, amount, duration, stakePool, stakePoolMint, tokenProgramId = spl_token_1.TOKEN_PROGRAM_ID }, extParams) {
129
- const { stakePoolProgram } = this.programs;
130
- const staker = extParams.invoker.publicKey;
131
- (0, common_1.invariant)(staker, "Undefined invoker publicKey");
132
- const mint = (0, derive_accounts_js_1.deriveStakeMintPDA)(stakePoolProgram.programId, (0, solana_1.pk)(stakePool));
133
- const stakeMintAccountKey = (0, spl_token_1.getAssociatedTokenAddressSync)(mint, staker, true, (0, solana_1.pk)(tokenProgramId));
134
- const poolMintAccountKey = (0, spl_token_1.getAssociatedTokenAddressSync)((0, solana_1.pk)(stakePoolMint), staker, true, (0, solana_1.pk)(tokenProgramId));
135
- const instruction = await stakePoolProgram.methods
136
- .stake(nonce, amount, duration)
137
- .accounts({
138
- stakePool: stakePool,
139
- tokenProgram: tokenProgramId,
140
- from: poolMintAccountKey,
141
- to: stakeMintAccountKey,
142
- authority: staker,
143
- payer: staker,
144
- })
145
- .instruction();
146
- return { ixs: [instruction] };
147
- }
148
- async unstake(data, extParams) {
149
- const { ixs } = await this.prepareUnstakeInstructions(data, extParams);
150
- const { signature } = await this.execute(ixs, extParams);
151
- return {
152
- ixs,
153
- txId: signature,
154
- };
155
- }
156
- async prepareUnstakeInstructions({ stakePool, stakePoolMint, nonce, tokenProgramId = spl_token_1.TOKEN_PROGRAM_ID }, extParams) {
157
- const { stakePoolProgram } = this.programs;
158
- const staker = extParams.invoker.publicKey;
159
- (0, common_1.invariant)(staker, "Undefined invoker publicKey");
160
- const stakeMintKey = (0, derive_accounts_js_1.deriveStakeMintPDA)(stakePoolProgram.programId, (0, solana_1.pk)(stakePool));
161
- const stakeEntryKey = (0, derive_accounts_js_1.deriveStakeEntryPDA)(stakePoolProgram.programId, (0, solana_1.pk)(stakePool), staker, nonce);
162
- const poolMintAccountKey = (0, spl_token_1.getAssociatedTokenAddressSync)((0, solana_1.pk)(stakePoolMint), staker, true, (0, solana_1.pk)(tokenProgramId));
163
- const stakeMintAccountKey = (0, spl_token_1.getAssociatedTokenAddressSync)(stakeMintKey, staker, true, (0, solana_1.pk)(tokenProgramId));
164
- const instruction = await stakePoolProgram.methods
165
- .unstake()
166
- .accounts({
167
- stakeEntry: stakeEntryKey,
168
- to: poolMintAccountKey,
169
- from: stakeMintAccountKey,
170
- authority: staker,
171
- tokenProgram: tokenProgramId,
172
- })
173
- .instruction();
174
- return { ixs: [instruction] };
175
- }
176
- async createRewardPool(data, extParams) {
177
- const { ixs, publicKey } = await this.prepareCreateRewardPoolInstructions(data, extParams);
178
- const { signature } = await this.execute(ixs, extParams);
179
- return {
180
- ixs,
181
- txId: signature,
182
- metadataId: publicKey,
183
- };
184
- }
185
- async prepareCreateRewardPoolInstructions({ nonce, rewardAmount, rewardPeriod, rewardMint, permissionless = false, stakePool, lastClaimPeriodOpt, tokenProgramId = spl_token_1.TOKEN_PROGRAM_ID, }, extParams) {
186
- const { rewardPoolProgram } = this.programs;
187
- const creator = extParams.invoker.publicKey;
188
- (0, common_1.invariant)(creator, "Undefined invoker publicKey");
189
- const instruction = await rewardPoolProgram.methods
190
- .createPool(nonce, rewardAmount, rewardPeriod, permissionless, lastClaimPeriodOpt)
191
- .accounts({
192
- creator,
193
- stakePool,
194
- mint: rewardMint,
195
- tokenProgram: tokenProgramId,
196
- })
197
- .instruction();
198
- const rewardPoolKey = (0, derive_accounts_js_1.deriveRewardPoolPDA)(rewardPoolProgram.programId, (0, solana_1.pk)(stakePool), (0, solana_1.pk)(rewardMint), nonce);
199
- return { publicKey: rewardPoolKey, ixs: [instruction] };
200
- }
201
- async claimRewards(data, extParams) {
202
- const { ixs } = await this.prepareClaimRewardsInstructions(data, extParams);
203
- const { signature } = await this.execute(ixs, extParams);
204
- return {
205
- ixs,
206
- txId: signature,
207
- };
208
- }
209
- async prepareClaimRewardsInstructions({ rewardPoolNonce, depositNonce, stakePool, tokenProgramId = spl_token_1.TOKEN_PROGRAM_ID, rewardMint }, extParams) {
210
- const { stakePoolProgram, rewardPoolProgram } = this.programs;
211
- const staker = extParams.invoker.publicKey;
212
- (0, common_1.invariant)(staker, "Undefined invoker publicKey");
213
- const instruction = await rewardPoolProgram.methods
214
- .claimRewards()
215
- .accounts({
216
- stakeEntry: (0, derive_accounts_js_1.deriveStakeEntryPDA)(stakePoolProgram.programId, (0, solana_1.pk)(stakePool), staker, depositNonce),
217
- rewardPool: (0, derive_accounts_js_1.deriveRewardPoolPDA)(rewardPoolProgram.programId, (0, solana_1.pk)(stakePool), (0, solana_1.pk)(rewardMint), rewardPoolNonce),
218
- claimant: staker,
219
- tokenProgram: tokenProgramId,
220
- to: (0, spl_token_1.getAssociatedTokenAddressSync)((0, solana_1.pk)(rewardMint), staker, true, (0, solana_1.pk)(tokenProgramId)),
221
- })
222
- .instruction();
223
- return { ixs: [instruction] };
224
- }
225
- async fundPool(data, extParams) {
226
- const { ixs } = await this.prepareFundPoolInstructions(data, extParams);
227
- const { signature } = await this.execute(ixs, extParams);
228
- return {
229
- ixs,
230
- txId: signature,
231
- };
232
- }
233
- async prepareFundPoolInstructions({ amount, tokenProgramId = spl_token_1.TOKEN_PROGRAM_ID, rewardMint, stakePool, feeValue, nonce }, extParams) {
234
- const { rewardPoolProgram } = this.programs;
235
- const staker = extParams.invoker.publicKey;
236
- (0, common_1.invariant)(staker, "Undefined invoker publicKey");
237
- const existingFee = await this.getFeeValueIfExists(staker);
238
- const rewardMintPk = (0, solana_1.pk)(rewardMint);
239
- const tokenProgramPk = (0, solana_1.pk)(tokenProgramId);
240
- const treasuryATA = !existingFee || existingFee.streamflowFee.gtn(0)
241
- ? await (0, solana_1.checkOrCreateAtaBatch)(this.connection, [constants_js_1.STREAMFLOW_TREASURY_PUBLIC_KEY], rewardMintPk, extParams.invoker, tokenProgramPk)
242
- : null;
243
- const rewardPoolPda = (0, derive_accounts_js_1.deriveRewardPoolPDA)(rewardPoolProgram.programId, (0, solana_1.pk)(stakePool), rewardMintPk, nonce);
244
- const instruction = await rewardPoolProgram.methods
245
- .fundPool(amount)
246
- .accountsPartial({
247
- funder: staker,
248
- rewardPool: rewardPoolPda,
249
- from: (0, spl_token_1.getAssociatedTokenAddressSync)(rewardMintPk, staker, true, tokenProgramPk),
250
- tokenProgram: tokenProgramId,
251
- vault: (0, derive_accounts_js_1.deriveRewardVaultPDA)(rewardPoolProgram.programId, rewardPoolPda),
252
- mint: rewardMint,
253
- feeValue,
254
- })
255
- .instruction();
256
- return { ixs: treasuryATA ? treasuryATA.concat([instruction]) : [instruction] };
257
- }
258
- async createRewardEntry(data, extParams) {
259
- const { ixs } = await this.prepareCreateRewardEntryInstructions(data, extParams);
260
- const { signature } = await this.execute(ixs, extParams);
261
- return {
262
- ixs,
263
- txId: signature,
264
- };
265
- }
266
- async prepareCreateRewardEntryInstructions({ stakePool, rewardPoolNonce, depositNonce, rewardMint }, extParams) {
267
- const { stakePoolProgram, rewardPoolProgram } = this.programs;
268
- const staker = extParams.invoker.publicKey;
269
- (0, common_1.invariant)(staker, "Undefined invoker publicKey");
270
- const instruction = await rewardPoolProgram.methods
271
- .createEntry()
272
- .accounts({
273
- payer: staker,
274
- authority: staker,
275
- stakeEntry: (0, derive_accounts_js_1.deriveStakeEntryPDA)(stakePoolProgram.programId, (0, solana_1.pk)(stakePool), staker, depositNonce),
276
- rewardPool: (0, derive_accounts_js_1.deriveRewardPoolPDA)(rewardPoolProgram.programId, (0, solana_1.pk)(stakePool), (0, solana_1.pk)(rewardMint), rewardPoolNonce),
277
- })
278
- .instruction();
279
- return { ixs: [instruction] };
280
- }
281
- async updateRewardPool(data, extParams) {
282
- const { ixs } = await this.prepareUpdateRewardPoolInstructions(data, extParams);
283
- const { signature } = await this.execute(ixs, extParams);
284
- return {
285
- ixs,
286
- txId: signature,
287
- };
288
- }
289
- async prepareUpdateRewardPoolInstructions({ rewardPool, rewardAmount, rewardPeriod, stakePool }, extParams) {
290
- const { rewardPoolProgram } = this.programs;
291
- const invoker = extParams.invoker.publicKey;
292
- (0, common_1.invariant)(invoker, "Undefined invoker publicKey");
293
- const instruction = await rewardPoolProgram.methods
294
- .updatePool(rewardAmount, rewardPeriod)
295
- .accountsPartial({
296
- stakePool,
297
- authority: invoker,
298
- rewardPool,
299
- })
300
- .instruction();
301
- return { ixs: [instruction] };
302
- }
303
- decode(programKey, accountName, accInfo) {
304
- const decodingProgram = this.programs[programKey];
305
- (0, common_1.invariant)(decodingProgram, `Decoding program with key ${programKey} is not available`);
306
- return decodingProgram.coder.accounts.decode(accountName.toString(), accInfo);
307
- }
308
- getDiscriminator(programKey, accountName) {
309
- const decodingProgram = this.programs[programKey];
310
- (0, common_1.invariant)(decodingProgram, `Decoding program with key ${programKey} is not available`);
311
- const accountEntity = decodingProgram.idl.accounts.find((acc) => acc.name === accountName);
312
- (0, common_1.invariant)(accountEntity, `Decoding program with key ${programKey} doesn't specify account with name ${accountName.toString()}`);
313
- return accountEntity.discriminator;
314
- }
315
- async execute(ixs, extParams) {
316
- const { tx, hash, context } = await (0, solana_1.prepareTransaction)(this.connection, (0, solana_1.prepareBaseInstructions)(this.connection, extParams).concat(ixs), extParams.invoker.publicKey);
317
- try {
318
- const signature = await (0, solana_1.signAndExecuteTransaction)(this.connection, extParams.invoker, tx, {
319
- hash,
320
- context,
321
- commitment: this.getCommitment(),
322
- }, { sendThrottler: this.sendThrottler });
323
- return { signature };
324
- }
325
- catch (err) {
326
- if (err instanceof Error) {
327
- const parsed = (0, anchor_1.translateError)(err, (0, anchor_1.parseIdlErrors)(this.programs.stakePoolProgram.idl));
328
- if (parsed) {
329
- throw new common_1.ContractError(err, parsed.name, parsed.message);
330
- }
331
- }
332
- throw err;
333
- }
334
- }
335
- }
336
- exports.SolanaStakingClient = SolanaStakingClient;