@streamflow/staking 7.5.3 → 8.0.0-alpha.p287.25d0c28

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 +2988 -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 +2963 -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
@@ -1,334 +0,0 @@
1
- import { Program, parseIdlErrors, translateError, } from "@coral-xyz/anchor";
2
- import { TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync } from "@solana/spl-token";
3
- import { Connection, PublicKey } from "@solana/web3.js";
4
- import { ContractError, ICluster, invariant } from "@streamflow/common";
5
- import { buildSendThrottler, checkOrCreateAtaBatch, getFilters, pk, prepareBaseInstructions, prepareTransaction, signAndExecuteTransaction, } from "@streamflow/common/solana";
6
- import { REWARD_ENTRY_BYTE_OFFSETS, REWARD_POOL_BYTE_OFFSETS, REWARD_POOL_PROGRAM_ID, STAKE_ENTRY_BYTE_OFFSETS, STAKE_POOL_BYTE_OFFSETS, STAKE_POOL_PROGRAM_ID, STREAMFLOW_TREASURY_PUBLIC_KEY, } from "./constants.js";
7
- import FeeManagerIDL from "./descriptor/idl/fee_manager.json";
8
- import RewardPoolIDL from "./descriptor/idl/reward_pool.json";
9
- import StakePoolIDL from "./descriptor/idl/stake_pool.json";
10
- import { deriveConfigPDA, deriveFeeValuePDA, deriveRewardPoolPDA, deriveRewardVaultPDA, deriveStakeEntryPDA, deriveStakeMintPDA, deriveStakePoolPDA, } from "./lib/derive-accounts.js";
11
- export class SolanaStakingClient {
12
- connection;
13
- cluster;
14
- commitment;
15
- sendThrottler;
16
- programs;
17
- constructor({ clusterUrl, cluster = ICluster.Mainnet, commitment = "confirmed", programIds, sendRate = 1, sendThrottler, }) {
18
- this.cluster = cluster;
19
- this.commitment = commitment;
20
- this.connection = new Connection(clusterUrl, this.commitment);
21
- this.sendThrottler = sendThrottler ?? buildSendThrottler(sendRate);
22
- const stakePoolIdl = {
23
- ...StakePoolIDL,
24
- address: programIds?.stakePool ?? STAKE_POOL_PROGRAM_ID[cluster] ?? StakePoolIDL.address,
25
- };
26
- const rewardPoolIdl = {
27
- ...RewardPoolIDL,
28
- address: programIds?.rewardPool ?? REWARD_POOL_PROGRAM_ID[cluster] ?? RewardPoolIDL.address,
29
- };
30
- const feeManagerIdl = {
31
- ...FeeManagerIDL,
32
- address: programIds?.feeManager ?? FeeManagerIDL.address,
33
- };
34
- this.programs = {
35
- stakePoolProgram: new Program(stakePoolIdl, {
36
- connection: this.connection,
37
- }),
38
- rewardPoolProgram: new Program(rewardPoolIdl, {
39
- connection: this.connection,
40
- }),
41
- feeManagerProgram: new Program(feeManagerIdl, {
42
- connection: this.connection,
43
- }),
44
- };
45
- }
46
- getCurrentProgramId(programKey) {
47
- const program = this.programs[programKey];
48
- invariant(program, `Program ${programKey} is not found`);
49
- return program.programId;
50
- }
51
- getCommitment() {
52
- return typeof this.commitment == "string" ? this.commitment : this.commitment.commitment;
53
- }
54
- async getStakePool(id) {
55
- const { stakePoolProgram } = this.programs;
56
- return stakePoolProgram.account.stakePool.fetch(id);
57
- }
58
- async searchStakePools(criteria = {}) {
59
- const { stakePoolProgram } = this.programs;
60
- return stakePoolProgram.account.stakePool.all(getFilters(criteria, STAKE_POOL_BYTE_OFFSETS));
61
- }
62
- async getStakeEntry(id) {
63
- const { stakePoolProgram } = this.programs;
64
- return stakePoolProgram.account.stakeEntry.fetch(id);
65
- }
66
- async searchStakeEntries(criteria = {}) {
67
- const { stakePoolProgram } = this.programs;
68
- return stakePoolProgram.account.stakeEntry.all(getFilters(criteria, STAKE_ENTRY_BYTE_OFFSETS));
69
- }
70
- async searchRewardPools(criteria = {}) {
71
- const { rewardPoolProgram } = this.programs;
72
- return rewardPoolProgram.account.rewardPool.all(getFilters(criteria, REWARD_POOL_BYTE_OFFSETS));
73
- }
74
- async searchRewardEntries(criteria) {
75
- const { rewardPoolProgram } = this.programs;
76
- return rewardPoolProgram.account.rewardEntry.all(getFilters(criteria, REWARD_ENTRY_BYTE_OFFSETS));
77
- }
78
- async getFee(target) {
79
- const perTargetFee = await this.getFeeValueIfExists(target);
80
- if (perTargetFee) {
81
- return perTargetFee;
82
- }
83
- return this.getDefaultFeeValue();
84
- }
85
- getDefaultFeeValue() {
86
- const { feeManagerProgram } = this.programs;
87
- const feeValueKey = deriveConfigPDA(feeManagerProgram.programId);
88
- return feeManagerProgram.account.config.fetch(feeValueKey);
89
- }
90
- getFeeValueIfExists(target) {
91
- const { feeManagerProgram } = this.programs;
92
- const feeValueKey = deriveFeeValuePDA(feeManagerProgram.programId, new PublicKey(target));
93
- return feeManagerProgram.account.feeValue.fetchNullable(feeValueKey);
94
- }
95
- async createStakePool(data, extParams) {
96
- const { ixs, publicKey } = await this.prepareCreateStakePoolInstructions(data, extParams);
97
- const { signature } = await this.execute(ixs, extParams);
98
- return {
99
- ixs,
100
- txId: signature,
101
- metadataId: publicKey,
102
- };
103
- }
104
- async prepareCreateStakePoolInstructions({ maxWeight, maxDuration, minDuration, mint, permissionless = false, freezeStakeMint = null, unstakePeriod = null, nonce, tokenProgramId = TOKEN_PROGRAM_ID, }, extParams) {
105
- const { stakePoolProgram } = this.programs;
106
- const creator = extParams.invoker.publicKey;
107
- invariant(creator, "Undefined invoker publicKey");
108
- const createInstruction = await stakePoolProgram.methods
109
- .createPool(nonce, maxWeight, minDuration, maxDuration, permissionless, freezeStakeMint, unstakePeriod)
110
- .accounts({
111
- creator,
112
- mint,
113
- tokenProgram: tokenProgramId,
114
- })
115
- .instruction();
116
- const stakePoolPDA = deriveStakePoolPDA(stakePoolProgram.programId, pk(mint), creator, nonce);
117
- return { ixs: [createInstruction], publicKey: stakePoolPDA };
118
- }
119
- async stake(data, extParams) {
120
- const { ixs } = await this.prepareStakeInstructions(data, extParams);
121
- const { signature } = await this.execute(ixs, extParams);
122
- return {
123
- ixs,
124
- txId: signature,
125
- };
126
- }
127
- async prepareStakeInstructions({ nonce, amount, duration, stakePool, stakePoolMint, tokenProgramId = TOKEN_PROGRAM_ID }, extParams) {
128
- const { stakePoolProgram } = this.programs;
129
- const staker = extParams.invoker.publicKey;
130
- invariant(staker, "Undefined invoker publicKey");
131
- const mint = deriveStakeMintPDA(stakePoolProgram.programId, pk(stakePool));
132
- const stakeMintAccountKey = getAssociatedTokenAddressSync(mint, staker, true, pk(tokenProgramId));
133
- const poolMintAccountKey = getAssociatedTokenAddressSync(pk(stakePoolMint), staker, true, pk(tokenProgramId));
134
- const instruction = await stakePoolProgram.methods
135
- .stake(nonce, amount, duration)
136
- .accounts({
137
- stakePool: stakePool,
138
- tokenProgram: tokenProgramId,
139
- from: poolMintAccountKey,
140
- to: stakeMintAccountKey,
141
- authority: staker,
142
- payer: staker,
143
- })
144
- .instruction();
145
- return { ixs: [instruction] };
146
- }
147
- async unstake(data, extParams) {
148
- const { ixs } = await this.prepareUnstakeInstructions(data, extParams);
149
- const { signature } = await this.execute(ixs, extParams);
150
- return {
151
- ixs,
152
- txId: signature,
153
- };
154
- }
155
- async prepareUnstakeInstructions({ stakePool, stakePoolMint, nonce, tokenProgramId = TOKEN_PROGRAM_ID }, extParams) {
156
- const { stakePoolProgram } = this.programs;
157
- const staker = extParams.invoker.publicKey;
158
- invariant(staker, "Undefined invoker publicKey");
159
- const stakeMintKey = deriveStakeMintPDA(stakePoolProgram.programId, pk(stakePool));
160
- const stakeEntryKey = deriveStakeEntryPDA(stakePoolProgram.programId, pk(stakePool), staker, nonce);
161
- const poolMintAccountKey = getAssociatedTokenAddressSync(pk(stakePoolMint), staker, true, pk(tokenProgramId));
162
- const stakeMintAccountKey = getAssociatedTokenAddressSync(stakeMintKey, staker, true, pk(tokenProgramId));
163
- const instruction = await stakePoolProgram.methods
164
- .unstake()
165
- .accounts({
166
- stakeEntry: stakeEntryKey,
167
- to: poolMintAccountKey,
168
- from: stakeMintAccountKey,
169
- authority: staker,
170
- tokenProgram: tokenProgramId,
171
- })
172
- .instruction();
173
- return { ixs: [instruction] };
174
- }
175
- async createRewardPool(data, extParams) {
176
- const { ixs, publicKey } = await this.prepareCreateRewardPoolInstructions(data, extParams);
177
- const { signature } = await this.execute(ixs, extParams);
178
- return {
179
- ixs,
180
- txId: signature,
181
- metadataId: publicKey,
182
- };
183
- }
184
- async prepareCreateRewardPoolInstructions({ nonce, rewardAmount, rewardPeriod, rewardMint, permissionless = false, stakePool, lastClaimPeriodOpt, tokenProgramId = TOKEN_PROGRAM_ID, }, extParams) {
185
- const { rewardPoolProgram } = this.programs;
186
- const creator = extParams.invoker.publicKey;
187
- invariant(creator, "Undefined invoker publicKey");
188
- const instruction = await rewardPoolProgram.methods
189
- .createPool(nonce, rewardAmount, rewardPeriod, permissionless, lastClaimPeriodOpt)
190
- .accounts({
191
- creator,
192
- stakePool,
193
- mint: rewardMint,
194
- tokenProgram: tokenProgramId,
195
- })
196
- .instruction();
197
- const rewardPoolKey = deriveRewardPoolPDA(rewardPoolProgram.programId, pk(stakePool), pk(rewardMint), nonce);
198
- return { publicKey: rewardPoolKey, ixs: [instruction] };
199
- }
200
- async claimRewards(data, extParams) {
201
- const { ixs } = await this.prepareClaimRewardsInstructions(data, extParams);
202
- const { signature } = await this.execute(ixs, extParams);
203
- return {
204
- ixs,
205
- txId: signature,
206
- };
207
- }
208
- async prepareClaimRewardsInstructions({ rewardPoolNonce, depositNonce, stakePool, tokenProgramId = TOKEN_PROGRAM_ID, rewardMint }, extParams) {
209
- const { stakePoolProgram, rewardPoolProgram } = this.programs;
210
- const staker = extParams.invoker.publicKey;
211
- invariant(staker, "Undefined invoker publicKey");
212
- const instruction = await rewardPoolProgram.methods
213
- .claimRewards()
214
- .accounts({
215
- stakeEntry: deriveStakeEntryPDA(stakePoolProgram.programId, pk(stakePool), staker, depositNonce),
216
- rewardPool: deriveRewardPoolPDA(rewardPoolProgram.programId, pk(stakePool), pk(rewardMint), rewardPoolNonce),
217
- claimant: staker,
218
- tokenProgram: tokenProgramId,
219
- to: getAssociatedTokenAddressSync(pk(rewardMint), staker, true, pk(tokenProgramId)),
220
- })
221
- .instruction();
222
- return { ixs: [instruction] };
223
- }
224
- async fundPool(data, extParams) {
225
- const { ixs } = await this.prepareFundPoolInstructions(data, extParams);
226
- const { signature } = await this.execute(ixs, extParams);
227
- return {
228
- ixs,
229
- txId: signature,
230
- };
231
- }
232
- async prepareFundPoolInstructions({ amount, tokenProgramId = TOKEN_PROGRAM_ID, rewardMint, stakePool, feeValue, nonce }, extParams) {
233
- const { rewardPoolProgram } = this.programs;
234
- const staker = extParams.invoker.publicKey;
235
- invariant(staker, "Undefined invoker publicKey");
236
- const existingFee = await this.getFeeValueIfExists(staker);
237
- const rewardMintPk = pk(rewardMint);
238
- const tokenProgramPk = pk(tokenProgramId);
239
- const treasuryATA = !existingFee || existingFee.streamflowFee.gtn(0)
240
- ? await checkOrCreateAtaBatch(this.connection, [STREAMFLOW_TREASURY_PUBLIC_KEY], rewardMintPk, extParams.invoker, tokenProgramPk)
241
- : null;
242
- const rewardPoolPda = deriveRewardPoolPDA(rewardPoolProgram.programId, pk(stakePool), rewardMintPk, nonce);
243
- const instruction = await rewardPoolProgram.methods
244
- .fundPool(amount)
245
- .accountsPartial({
246
- funder: staker,
247
- rewardPool: rewardPoolPda,
248
- from: getAssociatedTokenAddressSync(rewardMintPk, staker, true, tokenProgramPk),
249
- tokenProgram: tokenProgramId,
250
- vault: deriveRewardVaultPDA(rewardPoolProgram.programId, rewardPoolPda),
251
- mint: rewardMint,
252
- feeValue,
253
- })
254
- .instruction();
255
- return { ixs: treasuryATA ? treasuryATA.concat([instruction]) : [instruction] };
256
- }
257
- async createRewardEntry(data, extParams) {
258
- const { ixs } = await this.prepareCreateRewardEntryInstructions(data, extParams);
259
- const { signature } = await this.execute(ixs, extParams);
260
- return {
261
- ixs,
262
- txId: signature,
263
- };
264
- }
265
- async prepareCreateRewardEntryInstructions({ stakePool, rewardPoolNonce, depositNonce, rewardMint }, extParams) {
266
- const { stakePoolProgram, rewardPoolProgram } = this.programs;
267
- const staker = extParams.invoker.publicKey;
268
- invariant(staker, "Undefined invoker publicKey");
269
- const instruction = await rewardPoolProgram.methods
270
- .createEntry()
271
- .accounts({
272
- payer: staker,
273
- authority: staker,
274
- stakeEntry: deriveStakeEntryPDA(stakePoolProgram.programId, pk(stakePool), staker, depositNonce),
275
- rewardPool: deriveRewardPoolPDA(rewardPoolProgram.programId, pk(stakePool), pk(rewardMint), rewardPoolNonce),
276
- })
277
- .instruction();
278
- return { ixs: [instruction] };
279
- }
280
- async updateRewardPool(data, extParams) {
281
- const { ixs } = await this.prepareUpdateRewardPoolInstructions(data, extParams);
282
- const { signature } = await this.execute(ixs, extParams);
283
- return {
284
- ixs,
285
- txId: signature,
286
- };
287
- }
288
- async prepareUpdateRewardPoolInstructions({ rewardPool, rewardAmount, rewardPeriod, stakePool }, extParams) {
289
- const { rewardPoolProgram } = this.programs;
290
- const invoker = extParams.invoker.publicKey;
291
- invariant(invoker, "Undefined invoker publicKey");
292
- const instruction = await rewardPoolProgram.methods
293
- .updatePool(rewardAmount, rewardPeriod)
294
- .accountsPartial({
295
- stakePool,
296
- authority: invoker,
297
- rewardPool,
298
- })
299
- .instruction();
300
- return { ixs: [instruction] };
301
- }
302
- decode(programKey, accountName, accInfo) {
303
- const decodingProgram = this.programs[programKey];
304
- invariant(decodingProgram, `Decoding program with key ${programKey} is not available`);
305
- return decodingProgram.coder.accounts.decode(accountName.toString(), accInfo);
306
- }
307
- getDiscriminator(programKey, accountName) {
308
- const decodingProgram = this.programs[programKey];
309
- invariant(decodingProgram, `Decoding program with key ${programKey} is not available`);
310
- const accountEntity = decodingProgram.idl.accounts.find((acc) => acc.name === accountName);
311
- invariant(accountEntity, `Decoding program with key ${programKey} doesn't specify account with name ${accountName.toString()}`);
312
- return accountEntity.discriminator;
313
- }
314
- async execute(ixs, extParams) {
315
- const { tx, hash, context } = await prepareTransaction(this.connection, prepareBaseInstructions(this.connection, extParams).concat(ixs), extParams.invoker.publicKey);
316
- try {
317
- const signature = await signAndExecuteTransaction(this.connection, extParams.invoker, tx, {
318
- hash,
319
- context,
320
- commitment: this.getCommitment(),
321
- }, { sendThrottler: this.sendThrottler });
322
- return { signature };
323
- }
324
- catch (err) {
325
- if (err instanceof Error) {
326
- const parsed = translateError(err, parseIdlErrors(this.programs.stakePoolProgram.idl));
327
- if (parsed) {
328
- throw new ContractError(err, parsed.name, parsed.message);
329
- }
330
- }
331
- throw err;
332
- }
333
- }
334
- }
@@ -1,54 +0,0 @@
1
- import { BN } from "@coral-xyz/anchor";
2
- import { ICluster } from "@streamflow/common";
3
- import { PublicKey } from "@solana/web3.js";
4
- export declare const FEE_PRECISION_FACTOR = 10000;
5
- export declare const FEE_PRECISION_FACTOR_BN: BN;
6
- export declare const DEFAULT_FEE = 19;
7
- export declare const DEFAULT_FEE_BN: BN;
8
- export declare const SCALE_PRECISION_FACTOR = 1000000000;
9
- export declare const SCALE_PRECISION_FACTOR_BN: BN;
10
- export declare const REWARD_AMOUNT_DECIMALS = 9;
11
- export declare const REWARD_AMOUNT_PRECISION_FACTOR = 1000000000;
12
- export declare const REWARD_AMOUNT_PRECISION_FACTOR_BN: BN;
13
- export declare const U64_MAX = 18446744073709551615n;
14
- export declare const STAKE_ENTRY_DISCRIMINATOR: number[];
15
- export declare const STAKE_ENTRY_PREFIX: Buffer;
16
- export declare const STAKE_POOL_PREFIX: Buffer;
17
- export declare const STAKE_MINT_PREFIX: Buffer;
18
- export declare const STAKE_VAULT_PREFIX: Buffer;
19
- export declare const REWARD_POOL_PREFIX: Buffer;
20
- export declare const REWARD_VAULT_PREFIX: Buffer;
21
- export declare const REWARD_ENTRY_PREFIX: Buffer;
22
- export declare const CONFIG_PREFIX: Buffer;
23
- export declare const FEE_VALUE_PREFIX: Buffer;
24
- export declare const STREAMFLOW_TREASURY_PUBLIC_KEY: PublicKey;
25
- export declare const ANCHOR_DISCRIMINATOR_OFFSET = 8;
26
- export declare const STAKE_ENTRY_STAKE_POOL_OFFSET: number;
27
- export declare const STAKE_ENTRY_PAYER_OFFSET: number;
28
- export declare const STAKE_ENTRY_OWNER_OFFSET: number;
29
- export declare const STAKE_ENTRY_BYTE_OFFSETS: {
30
- readonly payer: number;
31
- readonly authority: number;
32
- readonly stakePool: number;
33
- };
34
- export declare const STAKE_POOL_MINT_OFFSET: number;
35
- export declare const STAKE_POOL_CREATOR_OFFSET: number;
36
- export declare const STAKE_POOL_BYTE_OFFSETS: {
37
- readonly mint: number;
38
- readonly creator: number;
39
- };
40
- export declare const REWARD_POOL_STAKE_POOL_OFFSET: number;
41
- export declare const REWARD_POOL_MINT_OFFSET: number;
42
- export declare const REWARD_POOL_BYTE_OFFSETS: {
43
- readonly stakePool: number;
44
- readonly mint: number;
45
- };
46
- export declare const REWARD_ENTRY_REWARD_POOL_OFFSET = 8;
47
- export declare const REWARD_ENTRY_STAKE_ENTRY_OFFSET: number;
48
- export declare const REWARD_ENTRY_BYTE_OFFSETS: {
49
- readonly stakeEntry: number;
50
- readonly rewardPool: 8;
51
- };
52
- export declare const STAKE_POOL_PROGRAM_ID: Record<ICluster, string>;
53
- export declare const REWARD_POOL_PROGRAM_ID: Record<ICluster, string>;
54
- export declare const FEE_PROGRAM_ID: Record<ICluster, string>;
@@ -1,69 +0,0 @@
1
- import { BN } from "@coral-xyz/anchor";
2
- import { ICluster } from "@streamflow/common";
3
- import { PublicKey } from "@solana/web3.js";
4
- export const FEE_PRECISION_FACTOR = 10_000;
5
- export const FEE_PRECISION_FACTOR_BN = new BN(FEE_PRECISION_FACTOR);
6
- export const DEFAULT_FEE = 19;
7
- export const DEFAULT_FEE_BN = new BN(DEFAULT_FEE);
8
- export const SCALE_PRECISION_FACTOR = 1_000_000_000;
9
- export const SCALE_PRECISION_FACTOR_BN = new BN(SCALE_PRECISION_FACTOR);
10
- export const REWARD_AMOUNT_DECIMALS = 9;
11
- export const REWARD_AMOUNT_PRECISION_FACTOR = 1_000_000_000;
12
- export const REWARD_AMOUNT_PRECISION_FACTOR_BN = new BN(REWARD_AMOUNT_PRECISION_FACTOR);
13
- export const U64_MAX = 18446744073709551615n;
14
- export const STAKE_ENTRY_DISCRIMINATOR = [187, 127, 9, 35, 155, 68, 86, 40];
15
- export const STAKE_ENTRY_PREFIX = Buffer.from("stake-entry", "utf-8");
16
- export const STAKE_POOL_PREFIX = Buffer.from("stake-pool", "utf-8");
17
- export const STAKE_MINT_PREFIX = Buffer.from("stake-mint", "utf-8");
18
- export const STAKE_VAULT_PREFIX = Buffer.from("stake-vault", "utf-8");
19
- export const REWARD_POOL_PREFIX = Buffer.from("reward-pool", "utf-8");
20
- export const REWARD_VAULT_PREFIX = Buffer.from("reward-vault", "utf-8");
21
- export const REWARD_ENTRY_PREFIX = Buffer.from("reward-entry", "utf-8");
22
- export const CONFIG_PREFIX = Buffer.from("config", "utf-8");
23
- export const FEE_VALUE_PREFIX = Buffer.from("fee-value", "utf-8");
24
- export const STREAMFLOW_TREASURY_PUBLIC_KEY = new PublicKey("5SEpbdjFK5FxwTvfsGMXVQTD2v4M2c5tyRTxhdsPkgDw");
25
- export const ANCHOR_DISCRIMINATOR_OFFSET = 8;
26
- export const STAKE_ENTRY_STAKE_POOL_OFFSET = ANCHOR_DISCRIMINATOR_OFFSET + 4;
27
- export const STAKE_ENTRY_PAYER_OFFSET = STAKE_ENTRY_STAKE_POOL_OFFSET + 32;
28
- export const STAKE_ENTRY_OWNER_OFFSET = STAKE_ENTRY_PAYER_OFFSET + 32;
29
- export const STAKE_ENTRY_BYTE_OFFSETS = {
30
- payer: STAKE_ENTRY_PAYER_OFFSET,
31
- authority: STAKE_ENTRY_OWNER_OFFSET,
32
- stakePool: STAKE_ENTRY_STAKE_POOL_OFFSET,
33
- };
34
- export const STAKE_POOL_MINT_OFFSET = ANCHOR_DISCRIMINATOR_OFFSET + 2;
35
- export const STAKE_POOL_CREATOR_OFFSET = STAKE_POOL_MINT_OFFSET + 32;
36
- export const STAKE_POOL_BYTE_OFFSETS = {
37
- mint: STAKE_POOL_MINT_OFFSET,
38
- creator: STAKE_POOL_CREATOR_OFFSET,
39
- };
40
- export const REWARD_POOL_STAKE_POOL_OFFSET = ANCHOR_DISCRIMINATOR_OFFSET + 2;
41
- export const REWARD_POOL_MINT_OFFSET = REWARD_POOL_STAKE_POOL_OFFSET + 32;
42
- export const REWARD_POOL_BYTE_OFFSETS = {
43
- stakePool: REWARD_POOL_STAKE_POOL_OFFSET,
44
- mint: REWARD_POOL_MINT_OFFSET,
45
- };
46
- export const REWARD_ENTRY_REWARD_POOL_OFFSET = ANCHOR_DISCRIMINATOR_OFFSET;
47
- export const REWARD_ENTRY_STAKE_ENTRY_OFFSET = REWARD_ENTRY_REWARD_POOL_OFFSET + 32;
48
- export const REWARD_ENTRY_BYTE_OFFSETS = {
49
- stakeEntry: REWARD_ENTRY_STAKE_ENTRY_OFFSET,
50
- rewardPool: REWARD_ENTRY_REWARD_POOL_OFFSET,
51
- };
52
- export const STAKE_POOL_PROGRAM_ID = {
53
- [ICluster.Mainnet]: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH",
54
- [ICluster.Devnet]: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH",
55
- [ICluster.Testnet]: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH",
56
- [ICluster.Local]: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH",
57
- };
58
- export const REWARD_POOL_PROGRAM_ID = {
59
- [ICluster.Mainnet]: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj",
60
- [ICluster.Devnet]: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj",
61
- [ICluster.Testnet]: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj",
62
- [ICluster.Local]: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj",
63
- };
64
- export const FEE_PROGRAM_ID = {
65
- [ICluster.Mainnet]: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V",
66
- [ICluster.Devnet]: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V",
67
- [ICluster.Testnet]: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V",
68
- [ICluster.Local]: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V",
69
- };
@@ -1,10 +0,0 @@
1
- import { PublicKey } from "@solana/web3.js";
2
- export declare const deriveStakePoolPDA: (programId: PublicKey, mint: PublicKey, authority: PublicKey, nonce: number) => PublicKey;
3
- export declare const deriveStakeVaultPDA: (programId: PublicKey, stakePool: PublicKey) => PublicKey;
4
- export declare const deriveStakeMintPDA: (programId: PublicKey, stakePool: PublicKey) => PublicKey;
5
- export declare const deriveStakeEntryPDA: (programId: PublicKey, stakePool: PublicKey, authority: PublicKey, nonce: number) => PublicKey;
6
- export declare const deriveRewardPoolPDA: (programId: PublicKey, stakePool: PublicKey, mint: PublicKey, nonce: number) => PublicKey;
7
- export declare const deriveRewardVaultPDA: (programId: PublicKey, rewardPool: PublicKey) => PublicKey;
8
- export declare const deriveRewardEntryPDA: (programId: PublicKey, rewardPool: PublicKey, stakeEntry: PublicKey) => PublicKey;
9
- export declare const deriveConfigPDA: (programId: PublicKey) => PublicKey;
10
- export declare const deriveFeeValuePDA: (programId: PublicKey, target: PublicKey) => PublicKey;
@@ -1,31 +0,0 @@
1
- import { PublicKey } from "@solana/web3.js";
2
- // eslint-disable-next-line no-restricted-imports
3
- import BN from "bn.js";
4
- import { STAKE_POOL_PREFIX, STAKE_VAULT_PREFIX, STAKE_MINT_PREFIX, STAKE_ENTRY_PREFIX, REWARD_POOL_PREFIX, REWARD_VAULT_PREFIX, REWARD_ENTRY_PREFIX, CONFIG_PREFIX, FEE_VALUE_PREFIX, } from "../constants.js";
5
- export const deriveStakePoolPDA = (programId, mint, authority, nonce) => {
6
- return PublicKey.findProgramAddressSync([STAKE_POOL_PREFIX, mint.toBuffer(), authority.toBuffer(), new BN(nonce).toArrayLike(Buffer, "le", 1)], programId)[0];
7
- };
8
- export const deriveStakeVaultPDA = (programId, stakePool) => {
9
- return PublicKey.findProgramAddressSync([STAKE_VAULT_PREFIX, stakePool.toBuffer()], programId)[0];
10
- };
11
- export const deriveStakeMintPDA = (programId, stakePool) => {
12
- return PublicKey.findProgramAddressSync([STAKE_MINT_PREFIX, stakePool.toBuffer()], programId)[0];
13
- };
14
- export const deriveStakeEntryPDA = (programId, stakePool, authority, nonce) => {
15
- return PublicKey.findProgramAddressSync([STAKE_ENTRY_PREFIX, stakePool.toBuffer(), authority.toBuffer(), new BN(nonce).toArrayLike(Buffer, "le", 4)], programId)[0];
16
- };
17
- export const deriveRewardPoolPDA = (programId, stakePool, mint, nonce) => {
18
- return PublicKey.findProgramAddressSync([REWARD_POOL_PREFIX, stakePool.toBuffer(), mint.toBuffer(), new BN(nonce).toArrayLike(Buffer, "le", 1)], programId)[0];
19
- };
20
- export const deriveRewardVaultPDA = (programId, rewardPool) => {
21
- return PublicKey.findProgramAddressSync([REWARD_VAULT_PREFIX, rewardPool.toBuffer()], programId)[0];
22
- };
23
- export const deriveRewardEntryPDA = (programId, rewardPool, stakeEntry) => {
24
- return PublicKey.findProgramAddressSync([REWARD_ENTRY_PREFIX, rewardPool.toBuffer(), stakeEntry.toBuffer()], programId)[0];
25
- };
26
- export const deriveConfigPDA = (programId) => {
27
- return PublicKey.findProgramAddressSync([CONFIG_PREFIX], programId)[0];
28
- };
29
- export const deriveFeeValuePDA = (programId, target) => {
30
- return PublicKey.findProgramAddressSync([FEE_VALUE_PREFIX, target.toBuffer()], programId)[0];
31
- };
@@ -1,9 +0,0 @@
1
- import { TransferFeeConfig } from "@solana/spl-token";
2
- import { Connection } from "@solana/web3.js";
3
- import BN from "bn.js";
4
- export declare const calculateFeeAmount: (amount: BN, fee?: BN) => BN;
5
- export declare const calculateDecimalsShift: (maxWeight: bigint, maxShift?: number) => number;
6
- export declare function calculateAmountWithTransferFees(connection: Connection, transferFeeConfig: TransferFeeConfig, transferAmount: bigint): Promise<{
7
- transferAmount: bigint;
8
- feeCharged: bigint;
9
- }>;
@@ -1,38 +0,0 @@
1
- import { divCeilN } from "@streamflow/common";
2
- import { DEFAULT_FEE_BN, FEE_PRECISION_FACTOR_BN, SCALE_PRECISION_FACTOR, U64_MAX } from "../constants.js";
3
- export const calculateFeeAmount = (amount, fee = DEFAULT_FEE_BN) => {
4
- if (fee.eq(FEE_PRECISION_FACTOR_BN)) {
5
- return amount;
6
- }
7
- return amount.mul(fee).div(FEE_PRECISION_FACTOR_BN);
8
- };
9
- export const calculateDecimalsShift = (maxWeight, maxShift = 999) => {
10
- if (maxShift == 0) {
11
- return 0;
12
- }
13
- let decimalsShift = 0;
14
- while ((maxWeight * U64_MAX) / BigInt(SCALE_PRECISION_FACTOR) / BigInt(10 ** decimalsShift) > U64_MAX) {
15
- decimalsShift += 1;
16
- if (decimalsShift == maxShift) {
17
- return maxShift;
18
- }
19
- }
20
- return decimalsShift;
21
- };
22
- export async function calculateAmountWithTransferFees(connection, transferFeeConfig, transferAmount) {
23
- const epoch = await connection.getEpochInfo();
24
- const transferFee = epoch.epoch >= transferFeeConfig.newerTransferFee.epoch
25
- ? transferFeeConfig.newerTransferFee
26
- : transferFeeConfig.olderTransferFee;
27
- const transferFeeBasisPoints = BigInt(transferFee.transferFeeBasisPoints);
28
- let feeCharged = BigInt(0);
29
- if (transferFeeBasisPoints !== BigInt(0)) {
30
- const numerator = transferAmount * 10000n;
31
- const denominator = 10000n - transferFeeBasisPoints;
32
- const rawPreFeeAmount = divCeilN(numerator, denominator);
33
- const fee = rawPreFeeAmount - transferAmount;
34
- transferAmount = rawPreFeeAmount;
35
- feeCharged = fee > transferFee.maximumFee ? transferFee.maximumFee : fee;
36
- }
37
- return { transferAmount, feeCharged };
38
- }
@@ -1,26 +0,0 @@
1
- import { ProgramAccount } from "@coral-xyz/anchor";
2
- import { PublicKey } from "@solana/web3.js";
3
- import BN from "bn.js";
4
- import { RewardEntry, RewardPool, StakeEntry } from "../types.js";
5
- export declare class RewardEntryAccumulator implements RewardEntry {
6
- lastAccountedTs: BN;
7
- claimedAmount: BN;
8
- accountedAmount: BN;
9
- rewardPool: PublicKey;
10
- stakeEntry: PublicKey;
11
- createdTs: BN;
12
- lastRewardAmount: BN;
13
- lastRewardPeriod: BN;
14
- buffer: number[];
15
- constructor(lastAccountedTs: BN, claimedAmount: BN, accountedAmount: BN, rewardPool: PublicKey, stakeEntry: PublicKey, createdTs: BN, lastRewardAmount: BN, lastRewardPeriod: BN, buffer: number[]);
16
- static fromEntry(entry: RewardEntry): RewardEntryAccumulator;
17
- getAccountableAmount(stakedTs: BN, accountableTs: BN, effectiveStakedAmount: BN, rewardAmount: BN, rewardPeriod: BN): BN;
18
- getClaimableAmount(): BN;
19
- getLastAccountedTs(stakedTs: BN, claimableTs: BN, rewardPeriod: BN): BN;
20
- addAccountedAmount(accountedAmount: BN): void;
21
- addClaimedAmount(claimedAmount: BN): void;
22
- }
23
- export declare const calcRewards: (rewardEntryAccount: ProgramAccount<RewardEntry> | undefined, stakeEntryAccount: ProgramAccount<StakeEntry>, rewardPoolAccount: ProgramAccount<RewardPool>) => BN;
24
- export declare const calculateRewardRateFromAmount: (rewardAmount: BN, stakeTokenDecimals: number, rewardTokenDecimals: number) => number;
25
- export declare const calculateRewardAmountFromValue: (rewardTokenValue: BN, stakeTokenDecimals: number) => BN;
26
- export declare const calculateRewardAmountFromRate: (rewardRate: number, stakeTokenDecimals: number, rewardTokenDecimals: number) => BN;