@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
@@ -0,0 +1,2942 @@
1
+ 'use strict';
2
+
3
+ var anchor = require('@coral-xyz/anchor');
4
+ var splToken = require('@solana/spl-token');
5
+ var web3_js = require('@solana/web3.js');
6
+ var common = require('@streamflow/common');
7
+ var solana = require('@streamflow/common/solana');
8
+ var BN3 = require('bn.js');
9
+ require('@solana/wallet-adapter-base');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var BN3__default = /*#__PURE__*/_interopDefault(BN3);
14
+
15
+ var __defProp = Object.defineProperty;
16
+ var __export = (target, all) => {
17
+ for (var name in all)
18
+ __defProp(target, name, { get: all[name], enumerable: true });
19
+ };
20
+
21
+ // solana/constants.ts
22
+ var constants_exports = {};
23
+ __export(constants_exports, {
24
+ ANCHOR_DISCRIMINATOR_OFFSET: () => ANCHOR_DISCRIMINATOR_OFFSET,
25
+ CONFIG_PREFIX: () => CONFIG_PREFIX,
26
+ DEFAULT_FEE: () => DEFAULT_FEE,
27
+ DEFAULT_FEE_BN: () => DEFAULT_FEE_BN,
28
+ FEE_PRECISION_FACTOR: () => FEE_PRECISION_FACTOR,
29
+ FEE_PRECISION_FACTOR_BN: () => FEE_PRECISION_FACTOR_BN,
30
+ FEE_PROGRAM_ID: () => FEE_PROGRAM_ID,
31
+ FEE_VALUE_PREFIX: () => FEE_VALUE_PREFIX,
32
+ REWARD_AMOUNT_DECIMALS: () => REWARD_AMOUNT_DECIMALS,
33
+ REWARD_AMOUNT_PRECISION_FACTOR: () => REWARD_AMOUNT_PRECISION_FACTOR,
34
+ REWARD_AMOUNT_PRECISION_FACTOR_BN: () => REWARD_AMOUNT_PRECISION_FACTOR_BN,
35
+ REWARD_ENTRY_BYTE_OFFSETS: () => REWARD_ENTRY_BYTE_OFFSETS,
36
+ REWARD_ENTRY_PREFIX: () => REWARD_ENTRY_PREFIX,
37
+ REWARD_ENTRY_REWARD_POOL_OFFSET: () => REWARD_ENTRY_REWARD_POOL_OFFSET,
38
+ REWARD_ENTRY_STAKE_ENTRY_OFFSET: () => REWARD_ENTRY_STAKE_ENTRY_OFFSET,
39
+ REWARD_POOL_BYTE_OFFSETS: () => REWARD_POOL_BYTE_OFFSETS,
40
+ REWARD_POOL_MINT_OFFSET: () => REWARD_POOL_MINT_OFFSET,
41
+ REWARD_POOL_PREFIX: () => REWARD_POOL_PREFIX,
42
+ REWARD_POOL_PROGRAM_ID: () => REWARD_POOL_PROGRAM_ID,
43
+ REWARD_POOL_STAKE_POOL_OFFSET: () => REWARD_POOL_STAKE_POOL_OFFSET,
44
+ REWARD_VAULT_PREFIX: () => REWARD_VAULT_PREFIX,
45
+ SCALE_PRECISION_FACTOR: () => SCALE_PRECISION_FACTOR,
46
+ SCALE_PRECISION_FACTOR_BN: () => SCALE_PRECISION_FACTOR_BN,
47
+ STAKE_ENTRY_BYTE_OFFSETS: () => STAKE_ENTRY_BYTE_OFFSETS,
48
+ STAKE_ENTRY_DISCRIMINATOR: () => STAKE_ENTRY_DISCRIMINATOR,
49
+ STAKE_ENTRY_OWNER_OFFSET: () => STAKE_ENTRY_OWNER_OFFSET,
50
+ STAKE_ENTRY_PAYER_OFFSET: () => STAKE_ENTRY_PAYER_OFFSET,
51
+ STAKE_ENTRY_PREFIX: () => STAKE_ENTRY_PREFIX,
52
+ STAKE_ENTRY_STAKE_POOL_OFFSET: () => STAKE_ENTRY_STAKE_POOL_OFFSET,
53
+ STAKE_MINT_PREFIX: () => STAKE_MINT_PREFIX,
54
+ STAKE_POOL_BYTE_OFFSETS: () => STAKE_POOL_BYTE_OFFSETS,
55
+ STAKE_POOL_CREATOR_OFFSET: () => STAKE_POOL_CREATOR_OFFSET,
56
+ STAKE_POOL_MINT_OFFSET: () => STAKE_POOL_MINT_OFFSET,
57
+ STAKE_POOL_PREFIX: () => STAKE_POOL_PREFIX,
58
+ STAKE_POOL_PROGRAM_ID: () => STAKE_POOL_PROGRAM_ID,
59
+ STAKE_VAULT_PREFIX: () => STAKE_VAULT_PREFIX,
60
+ STREAMFLOW_TREASURY_PUBLIC_KEY: () => STREAMFLOW_TREASURY_PUBLIC_KEY,
61
+ U64_MAX: () => U64_MAX
62
+ });
63
+ var FEE_PRECISION_FACTOR = 1e4;
64
+ var FEE_PRECISION_FACTOR_BN = new BN3__default.default(FEE_PRECISION_FACTOR);
65
+ var DEFAULT_FEE = 19;
66
+ var DEFAULT_FEE_BN = new BN3__default.default(DEFAULT_FEE);
67
+ var SCALE_PRECISION_FACTOR = 1e9;
68
+ var SCALE_PRECISION_FACTOR_BN = new BN3__default.default(SCALE_PRECISION_FACTOR);
69
+ var REWARD_AMOUNT_DECIMALS = 9;
70
+ var REWARD_AMOUNT_PRECISION_FACTOR = 1e9;
71
+ var REWARD_AMOUNT_PRECISION_FACTOR_BN = new BN3__default.default(REWARD_AMOUNT_PRECISION_FACTOR);
72
+ var U64_MAX = 18446744073709551615n;
73
+ var STAKE_ENTRY_DISCRIMINATOR = [187, 127, 9, 35, 155, 68, 86, 40];
74
+ var STAKE_ENTRY_PREFIX = Buffer.from("stake-entry", "utf-8");
75
+ var STAKE_POOL_PREFIX = Buffer.from("stake-pool", "utf-8");
76
+ var STAKE_MINT_PREFIX = Buffer.from("stake-mint", "utf-8");
77
+ var STAKE_VAULT_PREFIX = Buffer.from("stake-vault", "utf-8");
78
+ var REWARD_POOL_PREFIX = Buffer.from("reward-pool", "utf-8");
79
+ var REWARD_VAULT_PREFIX = Buffer.from("reward-vault", "utf-8");
80
+ var REWARD_ENTRY_PREFIX = Buffer.from("reward-entry", "utf-8");
81
+ var CONFIG_PREFIX = Buffer.from("config", "utf-8");
82
+ var FEE_VALUE_PREFIX = Buffer.from("fee-value", "utf-8");
83
+ var STREAMFLOW_TREASURY_PUBLIC_KEY = new web3_js.PublicKey("5SEpbdjFK5FxwTvfsGMXVQTD2v4M2c5tyRTxhdsPkgDw");
84
+ var ANCHOR_DISCRIMINATOR_OFFSET = 8;
85
+ var STAKE_ENTRY_STAKE_POOL_OFFSET = ANCHOR_DISCRIMINATOR_OFFSET + 4;
86
+ var STAKE_ENTRY_PAYER_OFFSET = STAKE_ENTRY_STAKE_POOL_OFFSET + 32;
87
+ var STAKE_ENTRY_OWNER_OFFSET = STAKE_ENTRY_PAYER_OFFSET + 32;
88
+ var STAKE_ENTRY_BYTE_OFFSETS = {
89
+ payer: STAKE_ENTRY_PAYER_OFFSET,
90
+ authority: STAKE_ENTRY_OWNER_OFFSET,
91
+ stakePool: STAKE_ENTRY_STAKE_POOL_OFFSET
92
+ };
93
+ var STAKE_POOL_MINT_OFFSET = ANCHOR_DISCRIMINATOR_OFFSET + 2;
94
+ var STAKE_POOL_CREATOR_OFFSET = STAKE_POOL_MINT_OFFSET + 32;
95
+ var STAKE_POOL_BYTE_OFFSETS = {
96
+ mint: STAKE_POOL_MINT_OFFSET,
97
+ creator: STAKE_POOL_CREATOR_OFFSET
98
+ };
99
+ var REWARD_POOL_STAKE_POOL_OFFSET = ANCHOR_DISCRIMINATOR_OFFSET + 2;
100
+ var REWARD_POOL_MINT_OFFSET = REWARD_POOL_STAKE_POOL_OFFSET + 32;
101
+ var REWARD_POOL_BYTE_OFFSETS = {
102
+ stakePool: REWARD_POOL_STAKE_POOL_OFFSET,
103
+ mint: REWARD_POOL_MINT_OFFSET
104
+ };
105
+ var REWARD_ENTRY_REWARD_POOL_OFFSET = ANCHOR_DISCRIMINATOR_OFFSET;
106
+ var REWARD_ENTRY_STAKE_ENTRY_OFFSET = REWARD_ENTRY_REWARD_POOL_OFFSET + 32;
107
+ var REWARD_ENTRY_BYTE_OFFSETS = {
108
+ stakeEntry: REWARD_ENTRY_STAKE_ENTRY_OFFSET,
109
+ rewardPool: REWARD_ENTRY_REWARD_POOL_OFFSET
110
+ };
111
+ var STAKE_POOL_PROGRAM_ID = {
112
+ [common.ICluster.Mainnet]: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH",
113
+ [common.ICluster.Devnet]: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH",
114
+ [common.ICluster.Testnet]: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH",
115
+ [common.ICluster.Local]: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH"
116
+ };
117
+ var REWARD_POOL_PROGRAM_ID = {
118
+ [common.ICluster.Mainnet]: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj",
119
+ [common.ICluster.Devnet]: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj",
120
+ [common.ICluster.Testnet]: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj",
121
+ [common.ICluster.Local]: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj"
122
+ };
123
+ var FEE_PROGRAM_ID = {
124
+ [common.ICluster.Mainnet]: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V",
125
+ [common.ICluster.Devnet]: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V",
126
+ [common.ICluster.Testnet]: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V",
127
+ [common.ICluster.Local]: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V"
128
+ };
129
+
130
+ // solana/descriptor/idl/fee_manager.json
131
+ var fee_manager_default = {
132
+ address: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V",
133
+ metadata: {
134
+ name: "fee_manager",
135
+ version: "1.0.0",
136
+ spec: "0.1.0",
137
+ description: "Stores Fees and other admin configuration for the Staking protocol"
138
+ },
139
+ instructions: [
140
+ {
141
+ name: "change_authority",
142
+ discriminator: [50, 106, 66, 104, 99, 118, 145, 88],
143
+ accounts: [
144
+ {
145
+ name: "config",
146
+ writable: true,
147
+ pda: {
148
+ seeds: [
149
+ {
150
+ kind: "const",
151
+ value: [99, 111, 110, 102, 105, 103]
152
+ }
153
+ ]
154
+ }
155
+ },
156
+ {
157
+ name: "authority",
158
+ docs: ["authority"],
159
+ signer: true
160
+ },
161
+ {
162
+ name: "new_authority"
163
+ }
164
+ ],
165
+ args: []
166
+ },
167
+ {
168
+ name: "initialize",
169
+ discriminator: [175, 175, 109, 31, 13, 152, 155, 237],
170
+ accounts: [
171
+ {
172
+ name: "config",
173
+ writable: true,
174
+ pda: {
175
+ seeds: [
176
+ {
177
+ kind: "const",
178
+ value: [99, 111, 110, 102, 105, 103]
179
+ }
180
+ ]
181
+ }
182
+ },
183
+ {
184
+ name: "authority",
185
+ docs: ["authority"],
186
+ writable: true,
187
+ signer: true,
188
+ address: "ACYtYsL4KYtJzD53wqyifqad2D8224kamcngYPgSy3t"
189
+ },
190
+ {
191
+ name: "system_program",
192
+ address: "11111111111111111111111111111111"
193
+ }
194
+ ],
195
+ args: []
196
+ },
197
+ {
198
+ name: "remove_fee",
199
+ discriminator: [190, 227, 105, 10, 30, 161, 81, 212],
200
+ accounts: [
201
+ {
202
+ name: "fee_value",
203
+ writable: true,
204
+ pda: {
205
+ seeds: [
206
+ {
207
+ kind: "const",
208
+ value: [102, 101, 101, 45, 118, 97, 108, 117, 101]
209
+ },
210
+ {
211
+ kind: "account",
212
+ path: "target"
213
+ }
214
+ ]
215
+ }
216
+ },
217
+ {
218
+ name: "config",
219
+ pda: {
220
+ seeds: [
221
+ {
222
+ kind: "const",
223
+ value: [99, 111, 110, 102, 105, 103]
224
+ }
225
+ ]
226
+ }
227
+ },
228
+ {
229
+ name: "authority",
230
+ docs: ["authority"],
231
+ writable: true,
232
+ signer: true
233
+ },
234
+ {
235
+ name: "target"
236
+ },
237
+ {
238
+ name: "system_program",
239
+ address: "11111111111111111111111111111111"
240
+ }
241
+ ],
242
+ args: []
243
+ },
244
+ {
245
+ name: "update_config",
246
+ discriminator: [29, 158, 252, 191, 10, 83, 219, 99],
247
+ accounts: [
248
+ {
249
+ name: "config",
250
+ writable: true,
251
+ pda: {
252
+ seeds: [
253
+ {
254
+ kind: "const",
255
+ value: [99, 111, 110, 102, 105, 103]
256
+ }
257
+ ]
258
+ }
259
+ },
260
+ {
261
+ name: "authority",
262
+ docs: ["authority"],
263
+ signer: true
264
+ },
265
+ {
266
+ name: "system_program",
267
+ address: "11111111111111111111111111111111"
268
+ }
269
+ ],
270
+ args: [
271
+ {
272
+ name: "streamflow_fee",
273
+ type: {
274
+ option: "u64"
275
+ }
276
+ }
277
+ ]
278
+ },
279
+ {
280
+ name: "write_fee",
281
+ discriminator: [80, 12, 148, 143, 16, 120, 24, 48],
282
+ accounts: [
283
+ {
284
+ name: "fee_value",
285
+ writable: true,
286
+ pda: {
287
+ seeds: [
288
+ {
289
+ kind: "const",
290
+ value: [102, 101, 101, 45, 118, 97, 108, 117, 101]
291
+ },
292
+ {
293
+ kind: "account",
294
+ path: "target"
295
+ }
296
+ ]
297
+ }
298
+ },
299
+ {
300
+ name: "config",
301
+ pda: {
302
+ seeds: [
303
+ {
304
+ kind: "const",
305
+ value: [99, 111, 110, 102, 105, 103]
306
+ }
307
+ ]
308
+ }
309
+ },
310
+ {
311
+ name: "authority",
312
+ docs: ["authority"],
313
+ writable: true,
314
+ signer: true
315
+ },
316
+ {
317
+ name: "target"
318
+ },
319
+ {
320
+ name: "system_program",
321
+ address: "11111111111111111111111111111111"
322
+ }
323
+ ],
324
+ args: [
325
+ {
326
+ name: "streamflow_fee",
327
+ type: "u64"
328
+ }
329
+ ]
330
+ }
331
+ ],
332
+ accounts: [
333
+ {
334
+ name: "Config",
335
+ discriminator: [155, 12, 170, 224, 30, 250, 204, 130]
336
+ },
337
+ {
338
+ name: "FeeValue",
339
+ discriminator: [10, 188, 89, 64, 4, 183, 231, 0]
340
+ }
341
+ ],
342
+ errors: [
343
+ {
344
+ code: 6e3,
345
+ name: "Unauthorized",
346
+ msg: "Account is not authorized to execute this instruction"
347
+ },
348
+ {
349
+ code: 6001,
350
+ name: "InvalidFee",
351
+ msg: "Provided fee is not valid"
352
+ }
353
+ ],
354
+ types: [
355
+ {
356
+ name: "Config",
357
+ type: {
358
+ kind: "struct",
359
+ fields: [
360
+ {
361
+ name: "authority",
362
+ docs: ["Fee Manager authority"],
363
+ type: "pubkey"
364
+ },
365
+ {
366
+ name: "streamflow_fee",
367
+ docs: ["Default fee"],
368
+ type: "u64"
369
+ },
370
+ {
371
+ name: "_buffer_1",
372
+ docs: ["Buffer for additional fields"],
373
+ type: {
374
+ array: ["u8", 64]
375
+ }
376
+ },
377
+ {
378
+ name: "_buffer_2",
379
+ docs: ["Buffer for additional fields"],
380
+ type: {
381
+ array: ["u8", 64]
382
+ }
383
+ },
384
+ {
385
+ name: "_buffer_3",
386
+ docs: ["Buffer for additional fields"],
387
+ type: {
388
+ array: ["u8", 64]
389
+ }
390
+ }
391
+ ]
392
+ }
393
+ },
394
+ {
395
+ name: "FeeValue",
396
+ type: {
397
+ kind: "struct",
398
+ fields: [
399
+ {
400
+ name: "streamflow_fee",
401
+ type: "u64"
402
+ },
403
+ {
404
+ name: "_buffer",
405
+ docs: ["Buffer for additional fields"],
406
+ type: {
407
+ array: ["u8", 64]
408
+ }
409
+ }
410
+ ]
411
+ }
412
+ }
413
+ ]
414
+ };
415
+
416
+ // solana/descriptor/idl/reward_pool.json
417
+ var reward_pool_default = {
418
+ address: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj",
419
+ metadata: {
420
+ name: "reward_pool",
421
+ version: "1.0.0",
422
+ spec: "0.1.0",
423
+ description: "Program to manage Reward Pools for Stake Pools and claim rewards from them"
424
+ },
425
+ instructions: [
426
+ {
427
+ name: "change_authority",
428
+ discriminator: [50, 106, 66, 104, 99, 118, 145, 88],
429
+ accounts: [
430
+ {
431
+ name: "authority",
432
+ docs: ["Current Authority"],
433
+ writable: true,
434
+ signer: true,
435
+ relations: ["reward_pool"]
436
+ },
437
+ {
438
+ name: "new_authority"
439
+ },
440
+ {
441
+ name: "reward_pool",
442
+ docs: ["Stake Pool"],
443
+ writable: true
444
+ }
445
+ ],
446
+ args: []
447
+ },
448
+ {
449
+ name: "claim_rewards",
450
+ discriminator: [4, 144, 132, 71, 116, 23, 151, 80],
451
+ accounts: [
452
+ {
453
+ name: "reward_pool",
454
+ docs: ["Reward Pool"],
455
+ writable: true
456
+ },
457
+ {
458
+ name: "stake_entry",
459
+ docs: ["Stake Entry for which rewards are being claimed"]
460
+ },
461
+ {
462
+ name: "reward_entry",
463
+ docs: ["Reward Entry that stores metadata about claimed rewards"],
464
+ writable: true,
465
+ pda: {
466
+ seeds: [
467
+ {
468
+ kind: "const",
469
+ value: [114, 101, 119, 97, 114, 100, 45, 101, 110, 116, 114, 121]
470
+ },
471
+ {
472
+ kind: "account",
473
+ path: "reward_pool"
474
+ },
475
+ {
476
+ kind: "account",
477
+ path: "stake_entry"
478
+ }
479
+ ]
480
+ }
481
+ },
482
+ {
483
+ name: "vault",
484
+ docs: ["Reward Pool Vault that stores tokens"],
485
+ writable: true,
486
+ relations: ["reward_pool"]
487
+ },
488
+ {
489
+ name: "to",
490
+ docs: ["Account to send the reward tokens to."],
491
+ writable: true
492
+ },
493
+ {
494
+ name: "claimant",
495
+ docs: ["Who is claiming the tokens."],
496
+ writable: true,
497
+ signer: true
498
+ },
499
+ {
500
+ name: "mint",
501
+ docs: ["The mint to claim."],
502
+ relations: ["reward_pool"]
503
+ },
504
+ {
505
+ name: "token_program"
506
+ },
507
+ {
508
+ name: "system_program",
509
+ address: "11111111111111111111111111111111"
510
+ }
511
+ ],
512
+ args: []
513
+ },
514
+ {
515
+ name: "close_entry",
516
+ discriminator: [132, 26, 202, 145, 190, 37, 114, 67],
517
+ accounts: [
518
+ {
519
+ name: "reward_pool",
520
+ docs: ["Reward Pool"]
521
+ },
522
+ {
523
+ name: "stake_entry",
524
+ docs: ["Stake Entry for which rewards are being claimed"]
525
+ },
526
+ {
527
+ name: "reward_entry",
528
+ docs: ["Reward Entry that stores metadata about claimed rewards"],
529
+ writable: true,
530
+ pda: {
531
+ seeds: [
532
+ {
533
+ kind: "const",
534
+ value: [114, 101, 119, 97, 114, 100, 45, 101, 110, 116, 114, 121]
535
+ },
536
+ {
537
+ kind: "account",
538
+ path: "reward_pool"
539
+ },
540
+ {
541
+ kind: "account",
542
+ path: "stake_entry"
543
+ }
544
+ ]
545
+ }
546
+ },
547
+ {
548
+ name: "authority",
549
+ writable: true,
550
+ signer: true
551
+ },
552
+ {
553
+ name: "system_program",
554
+ address: "11111111111111111111111111111111"
555
+ }
556
+ ],
557
+ args: []
558
+ },
559
+ {
560
+ name: "create_entry",
561
+ discriminator: [248, 207, 142, 242, 66, 162, 150, 16],
562
+ accounts: [
563
+ {
564
+ name: "stake_pool",
565
+ docs: ["Original Stake Pool"],
566
+ relations: ["reward_pool", "stake_entry"]
567
+ },
568
+ {
569
+ name: "reward_pool",
570
+ docs: ["Reward Pool"]
571
+ },
572
+ {
573
+ name: "stake_entry",
574
+ docs: ["Stake Entry for which rewards are being claimed"]
575
+ },
576
+ {
577
+ name: "reward_entry",
578
+ docs: ["Reward Entry that stores metadata about claimed rewards"],
579
+ writable: true,
580
+ pda: {
581
+ seeds: [
582
+ {
583
+ kind: "const",
584
+ value: [114, 101, 119, 97, 114, 100, 45, 101, 110, 116, 114, 121]
585
+ },
586
+ {
587
+ kind: "account",
588
+ path: "reward_pool"
589
+ },
590
+ {
591
+ kind: "account",
592
+ path: "stake_entry"
593
+ }
594
+ ]
595
+ }
596
+ },
597
+ {
598
+ name: "payer",
599
+ docs: ["Rent payer"],
600
+ writable: true,
601
+ signer: true
602
+ },
603
+ {
604
+ name: "authority"
605
+ },
606
+ {
607
+ name: "system_program",
608
+ address: "11111111111111111111111111111111"
609
+ }
610
+ ],
611
+ args: []
612
+ },
613
+ {
614
+ name: "create_pool",
615
+ discriminator: [233, 146, 209, 142, 207, 104, 64, 188],
616
+ accounts: [
617
+ {
618
+ name: "stake_pool",
619
+ docs: ["Stake Pool to Which Reward Pool is being added"]
620
+ },
621
+ {
622
+ name: "reward_pool",
623
+ docs: ["Reward Pool to add"],
624
+ writable: true,
625
+ pda: {
626
+ seeds: [
627
+ {
628
+ kind: "const",
629
+ value: [114, 101, 119, 97, 114, 100, 45, 112, 111, 111, 108]
630
+ },
631
+ {
632
+ kind: "account",
633
+ path: "stake_pool"
634
+ },
635
+ {
636
+ kind: "account",
637
+ path: "mint"
638
+ },
639
+ {
640
+ kind: "arg",
641
+ path: "nonce"
642
+ }
643
+ ]
644
+ }
645
+ },
646
+ {
647
+ name: "mint",
648
+ docs: ["Mint used for rewards"]
649
+ },
650
+ {
651
+ name: "vault",
652
+ docs: ["Escrow Account that will store the tokens"],
653
+ writable: true,
654
+ pda: {
655
+ seeds: [
656
+ {
657
+ kind: "const",
658
+ value: [114, 101, 119, 97, 114, 100, 45, 118, 97, 117, 108, 116]
659
+ },
660
+ {
661
+ kind: "account",
662
+ path: "reward_pool"
663
+ }
664
+ ]
665
+ }
666
+ },
667
+ {
668
+ name: "creator",
669
+ docs: ["Reward Pool creator"],
670
+ writable: true,
671
+ signer: true
672
+ },
673
+ {
674
+ name: "token_program"
675
+ },
676
+ {
677
+ name: "system_program",
678
+ address: "11111111111111111111111111111111"
679
+ }
680
+ ],
681
+ args: [
682
+ {
683
+ name: "nonce",
684
+ type: "u8"
685
+ },
686
+ {
687
+ name: "reward_amount",
688
+ type: "u64"
689
+ },
690
+ {
691
+ name: "reward_period",
692
+ type: "u64"
693
+ },
694
+ {
695
+ name: "permissionless",
696
+ type: "bool"
697
+ },
698
+ {
699
+ name: "last_claim_period_opt",
700
+ type: {
701
+ option: "u64"
702
+ }
703
+ }
704
+ ]
705
+ },
706
+ {
707
+ name: "fund_pool",
708
+ discriminator: [36, 57, 233, 176, 181, 20, 87, 159],
709
+ accounts: [
710
+ {
711
+ name: "funder",
712
+ docs: ["Reward Pool funder"],
713
+ writable: true,
714
+ signer: true
715
+ },
716
+ {
717
+ name: "from",
718
+ docs: ["Token Account from which tokens will be transferred"],
719
+ writable: true
720
+ },
721
+ {
722
+ name: "vault",
723
+ docs: ["Reward Pool Vault that stores tokens"],
724
+ writable: true,
725
+ relations: ["reward_pool"]
726
+ },
727
+ {
728
+ name: "mint",
729
+ docs: ["Mint of reward tokens"],
730
+ relations: ["reward_pool"]
731
+ },
732
+ {
733
+ name: "reward_pool",
734
+ docs: ["Stake Pool"],
735
+ writable: true
736
+ },
737
+ {
738
+ name: "streamflow_treasury",
739
+ writable: true,
740
+ address: "5SEpbdjFK5FxwTvfsGMXVQTD2v4M2c5tyRTxhdsPkgDw"
741
+ },
742
+ {
743
+ name: "streamflow_treasury_tokens",
744
+ writable: true,
745
+ pda: {
746
+ seeds: [
747
+ {
748
+ kind: "account",
749
+ path: "streamflow_treasury"
750
+ },
751
+ {
752
+ kind: "account",
753
+ path: "token_program"
754
+ },
755
+ {
756
+ kind: "account",
757
+ path: "mint"
758
+ }
759
+ ],
760
+ program: {
761
+ kind: "const",
762
+ value: [
763
+ 140,
764
+ 151,
765
+ 37,
766
+ 143,
767
+ 78,
768
+ 36,
769
+ 137,
770
+ 241,
771
+ 187,
772
+ 61,
773
+ 16,
774
+ 41,
775
+ 20,
776
+ 142,
777
+ 13,
778
+ 131,
779
+ 11,
780
+ 90,
781
+ 19,
782
+ 153,
783
+ 218,
784
+ 255,
785
+ 16,
786
+ 132,
787
+ 4,
788
+ 142,
789
+ 123,
790
+ 216,
791
+ 219,
792
+ 233,
793
+ 248,
794
+ 89
795
+ ]
796
+ }
797
+ }
798
+ },
799
+ {
800
+ name: "config",
801
+ docs: ["Fee Configuration"],
802
+ pda: {
803
+ seeds: [
804
+ {
805
+ kind: "const",
806
+ value: [99, 111, 110, 102, 105, 103]
807
+ }
808
+ ],
809
+ program: {
810
+ kind: "account",
811
+ path: "fee_program"
812
+ }
813
+ }
814
+ },
815
+ {
816
+ name: "fee_value",
817
+ docs: ["Fee Value for the funder account"],
818
+ optional: true,
819
+ pda: {
820
+ seeds: [
821
+ {
822
+ kind: "const",
823
+ value: [102, 101, 101, 45, 118, 97, 108, 117, 101]
824
+ },
825
+ {
826
+ kind: "account",
827
+ path: "funder"
828
+ }
829
+ ],
830
+ program: {
831
+ kind: "account",
832
+ path: "fee_program"
833
+ }
834
+ }
835
+ },
836
+ {
837
+ name: "fee_program",
838
+ address: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V"
839
+ },
840
+ {
841
+ name: "token_program"
842
+ }
843
+ ],
844
+ args: [
845
+ {
846
+ name: "amount",
847
+ type: "u64"
848
+ }
849
+ ]
850
+ },
851
+ {
852
+ name: "update_pool",
853
+ discriminator: [239, 214, 170, 78, 36, 35, 30, 34],
854
+ accounts: [
855
+ {
856
+ name: "authority",
857
+ docs: ["Current Authority"],
858
+ writable: true,
859
+ signer: true,
860
+ relations: ["reward_pool"]
861
+ },
862
+ {
863
+ name: "stake_pool",
864
+ docs: ["Stake Pool to Which Reward Pool belongs"],
865
+ relations: ["reward_pool"]
866
+ },
867
+ {
868
+ name: "reward_pool",
869
+ docs: ["Reward Pool"],
870
+ writable: true
871
+ }
872
+ ],
873
+ args: [
874
+ {
875
+ name: "reward_amount",
876
+ type: {
877
+ option: "u64"
878
+ }
879
+ },
880
+ {
881
+ name: "reward_period",
882
+ type: {
883
+ option: "u64"
884
+ }
885
+ }
886
+ ]
887
+ }
888
+ ],
889
+ accounts: [
890
+ {
891
+ name: "Config",
892
+ discriminator: [155, 12, 170, 224, 30, 250, 204, 130]
893
+ },
894
+ {
895
+ name: "FeeValue",
896
+ discriminator: [10, 188, 89, 64, 4, 183, 231, 0]
897
+ },
898
+ {
899
+ name: "RewardEntry",
900
+ discriminator: [208, 191, 173, 14, 213, 84, 179, 162]
901
+ },
902
+ {
903
+ name: "RewardPool",
904
+ discriminator: [134, 121, 197, 211, 133, 154, 82, 32]
905
+ },
906
+ {
907
+ name: "StakeEntry",
908
+ discriminator: [187, 127, 9, 35, 155, 68, 86, 40]
909
+ },
910
+ {
911
+ name: "StakePool",
912
+ discriminator: [121, 34, 206, 21, 79, 127, 255, 28]
913
+ }
914
+ ],
915
+ errors: [
916
+ {
917
+ code: 6e3,
918
+ name: "ArithmeticError",
919
+ msg: "Arithmetic Error (overflow/underflow)"
920
+ },
921
+ {
922
+ code: 6001,
923
+ name: "InvalidRewardAmount",
924
+ msg: "Reward amount should be more than 0"
925
+ },
926
+ {
927
+ code: 6002,
928
+ name: "InvalidRewardPeriod",
929
+ msg: "Reward period should be more than 0"
930
+ },
931
+ {
932
+ code: 6003,
933
+ name: "Unauthorized",
934
+ msg: "Account is not authorized to execute this instruction"
935
+ },
936
+ {
937
+ code: 6004,
938
+ name: "OwnerMismatch",
939
+ msg: "Token account owner did not match intended owner"
940
+ },
941
+ {
942
+ code: 6005,
943
+ name: "InvalidRewardVault",
944
+ msg: "Provided Reward Vault is Invalid"
945
+ },
946
+ {
947
+ code: 6006,
948
+ name: "InvalidRewardEntry",
949
+ msg: "Provided Reward Entry is Invalid"
950
+ },
951
+ {
952
+ code: 6007,
953
+ name: "InvalidStakeEntry",
954
+ msg: "Provided Stake Entry is Invalid"
955
+ },
956
+ {
957
+ code: 6008,
958
+ name: "InvalidRewardPool",
959
+ msg: "Provided Reward Pool is Invalid"
960
+ },
961
+ {
962
+ code: 6009,
963
+ name: "InvalidMint",
964
+ msg: "Invalid Mint"
965
+ },
966
+ {
967
+ code: 6010,
968
+ name: "StakeEntryClosed",
969
+ msg: "Stake Entry is closed, rewards are not claimable anymore"
970
+ },
971
+ {
972
+ code: 6011,
973
+ name: "StakeEntryOpened",
974
+ msg: "Stake Entry is still opened, closing is not possible"
975
+ },
976
+ {
977
+ code: 6012,
978
+ name: "RewardPoolDrained",
979
+ msg: "Reward Pool does not have enough Rewards for Claiming"
980
+ },
981
+ {
982
+ code: 6013,
983
+ name: "UpdateTooSoon",
984
+ msg: "Repeated update can not happen sooner than the stake pool max duration"
985
+ },
986
+ {
987
+ code: 6014,
988
+ name: "InvalidLastClaimPeriod",
989
+ msg: "Invalid last claim period provided"
990
+ }
991
+ ],
992
+ types: [
993
+ {
994
+ name: "Config",
995
+ type: {
996
+ kind: "struct",
997
+ fields: [
998
+ {
999
+ name: "authority",
1000
+ docs: ["Fee Manager authority"],
1001
+ type: "pubkey"
1002
+ },
1003
+ {
1004
+ name: "streamflow_fee",
1005
+ docs: ["Default fee"],
1006
+ type: "u64"
1007
+ },
1008
+ {
1009
+ name: "_buffer_1",
1010
+ docs: ["Buffer for additional fields"],
1011
+ type: {
1012
+ array: ["u8", 64]
1013
+ }
1014
+ },
1015
+ {
1016
+ name: "_buffer_2",
1017
+ docs: ["Buffer for additional fields"],
1018
+ type: {
1019
+ array: ["u8", 64]
1020
+ }
1021
+ },
1022
+ {
1023
+ name: "_buffer_3",
1024
+ docs: ["Buffer for additional fields"],
1025
+ type: {
1026
+ array: ["u8", 64]
1027
+ }
1028
+ }
1029
+ ]
1030
+ }
1031
+ },
1032
+ {
1033
+ name: "FeeValue",
1034
+ type: {
1035
+ kind: "struct",
1036
+ fields: [
1037
+ {
1038
+ name: "streamflow_fee",
1039
+ type: "u64"
1040
+ },
1041
+ {
1042
+ name: "_buffer",
1043
+ docs: ["Buffer for additional fields"],
1044
+ type: {
1045
+ array: ["u8", 64]
1046
+ }
1047
+ }
1048
+ ]
1049
+ }
1050
+ },
1051
+ {
1052
+ name: "RewardEntry",
1053
+ type: {
1054
+ kind: "struct",
1055
+ fields: [
1056
+ {
1057
+ name: "reward_pool",
1058
+ docs: ["Reward Pool"],
1059
+ type: "pubkey"
1060
+ },
1061
+ {
1062
+ name: "stake_entry",
1063
+ docs: ["Stake Entry for which reward entry was initialized"],
1064
+ type: "pubkey"
1065
+ },
1066
+ {
1067
+ name: "created_ts",
1068
+ docs: ["Timestamp when reward entry has been created"],
1069
+ type: "u64"
1070
+ },
1071
+ {
1072
+ name: "accounted_amount",
1073
+ docs: ["Sum of accounted amounts, used to correctly issue rewards in case of precision loss"],
1074
+ type: "u128"
1075
+ },
1076
+ {
1077
+ name: "claimed_amount",
1078
+ docs: ["Sum of already claimed rewards"],
1079
+ type: "u64"
1080
+ },
1081
+ {
1082
+ name: "last_accounted_ts",
1083
+ docs: ["Timestamp when rewards have been claimed last time"],
1084
+ type: "u64"
1085
+ },
1086
+ {
1087
+ name: "last_reward_amount",
1088
+ docs: ["Reward amount used on last claim or entry creation"],
1089
+ type: "u64"
1090
+ },
1091
+ {
1092
+ name: "last_reward_period",
1093
+ docs: ["Reward Period used on last claim or entry creation"],
1094
+ type: "u64"
1095
+ },
1096
+ {
1097
+ name: "_buffer",
1098
+ docs: ["Buffer for additional fields"],
1099
+ type: {
1100
+ array: ["u8", 32]
1101
+ }
1102
+ }
1103
+ ]
1104
+ }
1105
+ },
1106
+ {
1107
+ name: "RewardPool",
1108
+ type: {
1109
+ kind: "struct",
1110
+ fields: [
1111
+ {
1112
+ name: "bump",
1113
+ docs: ["Bump Seed used to sign transactions"],
1114
+ type: "u8"
1115
+ },
1116
+ {
1117
+ name: "nonce",
1118
+ docs: ["Nonce to differentiate pools for the same mint"],
1119
+ type: "u8"
1120
+ },
1121
+ {
1122
+ name: "stake_pool",
1123
+ docs: ["Stake Pool for which Reward Pool was added"],
1124
+ type: "pubkey"
1125
+ },
1126
+ {
1127
+ name: "mint",
1128
+ docs: ["Mint of Reward Pool"],
1129
+ type: "pubkey"
1130
+ },
1131
+ {
1132
+ name: "creator",
1133
+ docs: ["Creator of the Pool"],
1134
+ type: "pubkey"
1135
+ },
1136
+ {
1137
+ name: "authority",
1138
+ docs: ["Current authority"],
1139
+ type: "pubkey"
1140
+ },
1141
+ {
1142
+ name: "reward_amount",
1143
+ docs: [
1144
+ "Amount of rewards that will be distributed per effective stake",
1145
+ "",
1146
+ "Should be a fraction of a raw token amount which is 1 / 10^9,",
1147
+ "i.e. `reward_amount` of `1_000_000_000` equals one raw token per effective stake"
1148
+ ],
1149
+ type: "u64"
1150
+ },
1151
+ {
1152
+ name: "reward_period",
1153
+ docs: ["Period of Rewards distribution in seconds"],
1154
+ type: "u64"
1155
+ },
1156
+ {
1157
+ name: "permissionless",
1158
+ docs: ["Whether anyone can fund the Pool"],
1159
+ type: "bool"
1160
+ },
1161
+ {
1162
+ name: "last_reward_amount",
1163
+ docs: ["`reward_amount` used before the last update"],
1164
+ type: "u64"
1165
+ },
1166
+ {
1167
+ name: "last_reward_period",
1168
+ docs: ["`reward_period` used before the last update"],
1169
+ type: "u64"
1170
+ },
1171
+ {
1172
+ name: "last_amount_update_ts",
1173
+ docs: ["Time when `reward_amount` was updated the last time"],
1174
+ type: "u64"
1175
+ },
1176
+ {
1177
+ name: "last_period_update_ts",
1178
+ docs: ["Time when `reward_period` was updated the last time"],
1179
+ type: "u64"
1180
+ },
1181
+ {
1182
+ name: "vault",
1183
+ docs: ["Escrow Account that stores reward tokens"],
1184
+ type: "pubkey"
1185
+ },
1186
+ {
1187
+ name: "funded_amount",
1188
+ docs: ["Total funded amount"],
1189
+ type: "u64"
1190
+ },
1191
+ {
1192
+ name: "claimed_amount",
1193
+ docs: ["Total number of rewards claimed"],
1194
+ type: "u64"
1195
+ },
1196
+ {
1197
+ name: "created_ts",
1198
+ docs: ["Time when Reward Pool was created"],
1199
+ type: "u64"
1200
+ },
1201
+ {
1202
+ name: "last_claim_period",
1203
+ docs: ["For how much seconds after unstake user should be able to claim rewards"],
1204
+ type: "u64"
1205
+ },
1206
+ {
1207
+ name: "_buffer",
1208
+ docs: ["Buffer for additional fields"],
1209
+ type: {
1210
+ array: ["u8", 48]
1211
+ }
1212
+ }
1213
+ ]
1214
+ }
1215
+ },
1216
+ {
1217
+ name: "StakeEntry",
1218
+ type: {
1219
+ kind: "struct",
1220
+ fields: [
1221
+ {
1222
+ name: "nonce",
1223
+ docs: ["Nonce to differentiate stakes for the same pool"],
1224
+ type: "u32"
1225
+ },
1226
+ {
1227
+ name: "stake_pool",
1228
+ docs: ["Stake Pool for which tokens were staked"],
1229
+ type: "pubkey"
1230
+ },
1231
+ {
1232
+ name: "payer",
1233
+ docs: ["Original Owner of Staked tokens"],
1234
+ type: "pubkey"
1235
+ },
1236
+ {
1237
+ name: "authority",
1238
+ docs: ["Authority of the Entry"],
1239
+ type: "pubkey"
1240
+ },
1241
+ {
1242
+ name: "amount",
1243
+ docs: ["Amount of deposited funds"],
1244
+ type: "u64"
1245
+ },
1246
+ {
1247
+ name: "duration",
1248
+ docs: ["Duration of the lockup"],
1249
+ type: "u64"
1250
+ },
1251
+ {
1252
+ name: "effective_amount",
1253
+ docs: ["Effective Amount staked, does not equal to deposited amount, accounts for Stake Weight"],
1254
+ type: "u128"
1255
+ },
1256
+ {
1257
+ name: "created_ts",
1258
+ docs: ["Timestamp when Deposit was made"],
1259
+ type: "u64"
1260
+ },
1261
+ {
1262
+ name: "closed_ts",
1263
+ docs: ["Flag whether entry has been already unstaked"],
1264
+ type: "u64"
1265
+ },
1266
+ {
1267
+ name: "_buffer",
1268
+ docs: ["Buffer for additional fields"],
1269
+ type: {
1270
+ array: ["u8", 64]
1271
+ }
1272
+ }
1273
+ ]
1274
+ }
1275
+ },
1276
+ {
1277
+ name: "StakePool",
1278
+ type: {
1279
+ kind: "struct",
1280
+ fields: [
1281
+ {
1282
+ name: "bump",
1283
+ docs: ["Bump Seed used to sign transactions"],
1284
+ type: "u8"
1285
+ },
1286
+ {
1287
+ name: "nonce",
1288
+ docs: ["Nonce to differentiate pools for the same mint"],
1289
+ type: "u8"
1290
+ },
1291
+ {
1292
+ name: "mint",
1293
+ docs: ["Mint of the Stake Pool"],
1294
+ type: "pubkey"
1295
+ },
1296
+ {
1297
+ name: "creator",
1298
+ docs: ["Initial Creator"],
1299
+ type: "pubkey"
1300
+ },
1301
+ {
1302
+ name: "authority",
1303
+ docs: ["Current authority"],
1304
+ type: "pubkey"
1305
+ },
1306
+ {
1307
+ name: "min_weight",
1308
+ docs: [
1309
+ "The lowest weight awarded for staking, measured as a fraction of `1 / SCALE_FACTOR_BASE`.",
1310
+ "For instance:",
1311
+ "* `min_weight = 1 x SCALE_FACTOR_BASE` signifies a minimum multiplier of 1x for min staking duration",
1312
+ "* `min_weight = 2 x SCALE_FACTOR_BASE` indicates a minimum multiplier of 2x for min staking duration"
1313
+ ],
1314
+ type: "u64"
1315
+ },
1316
+ {
1317
+ name: "max_weight",
1318
+ docs: [
1319
+ "The highest weight awarded for staking, measured as a fraction of `1 / SCALE_FACTOR_BASE`.",
1320
+ "For instance:",
1321
+ "* `max_weight = 1 x SCALE_FACTOR_BASE` signifies a max multiplier of 1x for max staking duration",
1322
+ "* `max_weight = 2 x SCALE_FACTOR_BASE` indicates a max multiplier of 2x for max staking duration"
1323
+ ],
1324
+ type: "u64"
1325
+ },
1326
+ {
1327
+ name: "min_duration",
1328
+ docs: ["Min Duration of stake in seconds"],
1329
+ type: "u64"
1330
+ },
1331
+ {
1332
+ name: "max_duration",
1333
+ docs: ["Max Duration of stake in seconds, the more duration, the more weight the stake has"],
1334
+ type: "u64"
1335
+ },
1336
+ {
1337
+ name: "permissionless",
1338
+ docs: ["Whether anyone can add Reward Pools or just admin"],
1339
+ type: "bool"
1340
+ },
1341
+ {
1342
+ name: "vault",
1343
+ docs: ["Escrow Account that stores staked tokens"],
1344
+ type: "pubkey"
1345
+ },
1346
+ {
1347
+ name: "stake_mint",
1348
+ docs: ["Stake Mint, will be returned in exchange for stake tokens"],
1349
+ type: "pubkey"
1350
+ },
1351
+ {
1352
+ name: "total_stake",
1353
+ docs: ["Total number of Staked tokens"],
1354
+ type: "u64"
1355
+ },
1356
+ {
1357
+ name: "total_effective_stake",
1358
+ docs: [
1359
+ "Total staked tokens accounting for each stake weight, does not equal `total_stake`,",
1360
+ "represents a sum of effective stake multiplied by 10^9 for precision"
1361
+ ],
1362
+ type: "u128"
1363
+ },
1364
+ {
1365
+ name: "_buffer",
1366
+ docs: ["Buffer for additional fields"],
1367
+ type: {
1368
+ array: ["u8", 64]
1369
+ }
1370
+ }
1371
+ ]
1372
+ }
1373
+ }
1374
+ ]
1375
+ };
1376
+
1377
+ // solana/descriptor/idl/stake_pool.json
1378
+ var stake_pool_default = {
1379
+ address: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH",
1380
+ metadata: {
1381
+ name: "stake_pool",
1382
+ version: "2.1.1",
1383
+ spec: "0.1.0",
1384
+ description: "Program to manage Stake Pools and stake/unstake tokens"
1385
+ },
1386
+ instructions: [
1387
+ {
1388
+ name: "change_authority",
1389
+ discriminator: [50, 106, 66, 104, 99, 118, 145, 88],
1390
+ accounts: [
1391
+ {
1392
+ name: "stake_pool",
1393
+ docs: ["Stake Pool"],
1394
+ writable: true
1395
+ },
1396
+ {
1397
+ name: "authority",
1398
+ docs: ["Current Authority"],
1399
+ writable: true,
1400
+ signer: true
1401
+ },
1402
+ {
1403
+ name: "new_authority"
1404
+ }
1405
+ ],
1406
+ args: []
1407
+ },
1408
+ {
1409
+ name: "create_lookup_table",
1410
+ discriminator: [74, 26, 45, 214, 23, 155, 143, 153],
1411
+ accounts: [
1412
+ {
1413
+ name: "stake_pool",
1414
+ docs: ["Stake Pool"]
1415
+ },
1416
+ {
1417
+ name: "lookup_table_link",
1418
+ docs: ["Link that will store address of the actual Lookup Table"],
1419
+ writable: true,
1420
+ pda: {
1421
+ seeds: [
1422
+ {
1423
+ kind: "const",
1424
+ value: [108, 111, 111, 107, 117, 112, 45, 116, 97, 98, 108, 101]
1425
+ },
1426
+ {
1427
+ kind: "account",
1428
+ path: "stake_pool"
1429
+ },
1430
+ {
1431
+ kind: "account",
1432
+ path: "authority"
1433
+ },
1434
+ {
1435
+ kind: "arg",
1436
+ path: "nonce"
1437
+ }
1438
+ ]
1439
+ }
1440
+ },
1441
+ {
1442
+ name: "lookup_table",
1443
+ writable: true
1444
+ },
1445
+ {
1446
+ name: "lookup_table_program",
1447
+ address: "AddressLookupTab1e1111111111111111111111111"
1448
+ },
1449
+ {
1450
+ name: "payer",
1451
+ docs: ["Payer of the transaction"],
1452
+ writable: true,
1453
+ signer: true
1454
+ },
1455
+ {
1456
+ name: "authority"
1457
+ },
1458
+ {
1459
+ name: "system_program",
1460
+ address: "11111111111111111111111111111111"
1461
+ }
1462
+ ],
1463
+ args: [
1464
+ {
1465
+ name: "nonce",
1466
+ type: "u32"
1467
+ },
1468
+ {
1469
+ name: "recent_slot",
1470
+ type: "u64"
1471
+ }
1472
+ ]
1473
+ },
1474
+ {
1475
+ name: "create_pool",
1476
+ discriminator: [233, 146, 209, 142, 207, 104, 64, 188],
1477
+ accounts: [
1478
+ {
1479
+ name: "stake_pool",
1480
+ writable: true,
1481
+ pda: {
1482
+ seeds: [
1483
+ {
1484
+ kind: "const",
1485
+ value: [115, 116, 97, 107, 101, 45, 112, 111, 111, 108]
1486
+ },
1487
+ {
1488
+ kind: "account",
1489
+ path: "mint"
1490
+ },
1491
+ {
1492
+ kind: "account",
1493
+ path: "creator"
1494
+ },
1495
+ {
1496
+ kind: "arg",
1497
+ path: "nonce"
1498
+ }
1499
+ ]
1500
+ }
1501
+ },
1502
+ {
1503
+ name: "mint",
1504
+ docs: ["Mint used for staking"]
1505
+ },
1506
+ {
1507
+ name: "vault",
1508
+ writable: true,
1509
+ pda: {
1510
+ seeds: [
1511
+ {
1512
+ kind: "const",
1513
+ value: [115, 116, 97, 107, 101, 45, 118, 97, 117, 108, 116]
1514
+ },
1515
+ {
1516
+ kind: "account",
1517
+ path: "stake_pool"
1518
+ }
1519
+ ]
1520
+ }
1521
+ },
1522
+ {
1523
+ name: "stake_mint",
1524
+ writable: true,
1525
+ pda: {
1526
+ seeds: [
1527
+ {
1528
+ kind: "const",
1529
+ value: [115, 116, 97, 107, 101, 45, 109, 105, 110, 116]
1530
+ },
1531
+ {
1532
+ kind: "account",
1533
+ path: "stake_pool"
1534
+ }
1535
+ ]
1536
+ }
1537
+ },
1538
+ {
1539
+ name: "creator",
1540
+ docs: ["Stake Pool creator"],
1541
+ writable: true,
1542
+ signer: true
1543
+ },
1544
+ {
1545
+ name: "token_program"
1546
+ },
1547
+ {
1548
+ name: "system_program",
1549
+ address: "11111111111111111111111111111111"
1550
+ }
1551
+ ],
1552
+ args: [
1553
+ {
1554
+ name: "nonce",
1555
+ type: "u8"
1556
+ },
1557
+ {
1558
+ name: "max_weight",
1559
+ type: "u64"
1560
+ },
1561
+ {
1562
+ name: "min_duration",
1563
+ type: "u64"
1564
+ },
1565
+ {
1566
+ name: "max_duration",
1567
+ type: "u64"
1568
+ },
1569
+ {
1570
+ name: "permissionless",
1571
+ type: "bool"
1572
+ },
1573
+ {
1574
+ name: "freeze_stake_mint",
1575
+ type: {
1576
+ option: "bool"
1577
+ }
1578
+ },
1579
+ {
1580
+ name: "unstake_period",
1581
+ type: {
1582
+ option: "u64"
1583
+ }
1584
+ }
1585
+ ]
1586
+ },
1587
+ {
1588
+ name: "migrate_entry",
1589
+ discriminator: [239, 154, 55, 173, 110, 36, 188, 214],
1590
+ accounts: [
1591
+ {
1592
+ name: "stake_pool_from",
1593
+ docs: ["Stake Pool"],
1594
+ writable: true,
1595
+ address: "Cja9f8JFS6sTgBqSRZGBrA2HDbUj4MZUGdtRYruKTeJp"
1596
+ },
1597
+ {
1598
+ name: "stake_pool_to",
1599
+ docs: ["Stake Pool"],
1600
+ writable: true,
1601
+ address: "BXRBbWMkscNBZoBL4fgRk77GBUX9eVP4AendQEumtPi8"
1602
+ },
1603
+ {
1604
+ name: "stake_entry_from",
1605
+ docs: ["Entry that will store Stake Metadata"],
1606
+ writable: true,
1607
+ pda: {
1608
+ seeds: [
1609
+ {
1610
+ kind: "const",
1611
+ value: [115, 116, 97, 107, 101, 45, 101, 110, 116, 114, 121]
1612
+ },
1613
+ {
1614
+ kind: "account",
1615
+ path: "stake_pool_from"
1616
+ },
1617
+ {
1618
+ kind: "account",
1619
+ path: "authority"
1620
+ },
1621
+ {
1622
+ kind: "arg",
1623
+ path: "nonce"
1624
+ }
1625
+ ]
1626
+ }
1627
+ },
1628
+ {
1629
+ name: "stake_entry_to",
1630
+ docs: ["Entry that will store Stake Metadata"],
1631
+ writable: true,
1632
+ pda: {
1633
+ seeds: [
1634
+ {
1635
+ kind: "const",
1636
+ value: [115, 116, 97, 107, 101, 45, 101, 110, 116, 114, 121]
1637
+ },
1638
+ {
1639
+ kind: "account",
1640
+ path: "stake_pool_to"
1641
+ },
1642
+ {
1643
+ kind: "account",
1644
+ path: "authority"
1645
+ },
1646
+ {
1647
+ kind: "arg",
1648
+ path: "new_nonce"
1649
+ }
1650
+ ]
1651
+ }
1652
+ },
1653
+ {
1654
+ name: "vault_from",
1655
+ docs: ["Stake Pool Vault that stores staked tokens"],
1656
+ writable: true
1657
+ },
1658
+ {
1659
+ name: "vault_to",
1660
+ docs: ["Stake Pool Vault that stores staked tokens"],
1661
+ writable: true
1662
+ },
1663
+ {
1664
+ name: "to",
1665
+ docs: ["Token Account to transfer Stake Mint tokens to"],
1666
+ writable: true
1667
+ },
1668
+ {
1669
+ name: "payer",
1670
+ docs: ["Owner of the Token Account from which tokens will be staked"],
1671
+ writable: true,
1672
+ signer: true
1673
+ },
1674
+ {
1675
+ name: "authority"
1676
+ },
1677
+ {
1678
+ name: "mint",
1679
+ docs: ["Original mint of staked tokens"],
1680
+ writable: true,
1681
+ relations: ["stake_pool_from", "stake_pool_to"]
1682
+ },
1683
+ {
1684
+ name: "stake_mint_from",
1685
+ docs: ["Mint of stake tokens that will be minted in return for staking"],
1686
+ writable: true
1687
+ },
1688
+ {
1689
+ name: "stake_mint_to",
1690
+ docs: ["Mint of stake tokens that will be minted in return for staking"],
1691
+ writable: true
1692
+ },
1693
+ {
1694
+ name: "token_program"
1695
+ },
1696
+ {
1697
+ name: "system_program",
1698
+ address: "11111111111111111111111111111111"
1699
+ }
1700
+ ],
1701
+ args: [
1702
+ {
1703
+ name: "nonce",
1704
+ type: "u32"
1705
+ },
1706
+ {
1707
+ name: "new_nonce",
1708
+ type: "u32"
1709
+ }
1710
+ ]
1711
+ },
1712
+ {
1713
+ name: "request_unstake",
1714
+ discriminator: [44, 154, 110, 253, 160, 202, 54, 34],
1715
+ accounts: [
1716
+ {
1717
+ name: "stake_pool",
1718
+ writable: true,
1719
+ relations: ["stake_entry"]
1720
+ },
1721
+ {
1722
+ name: "stake_entry",
1723
+ docs: ["Entry that stores Stake Metadata"],
1724
+ writable: true
1725
+ },
1726
+ {
1727
+ name: "authority",
1728
+ docs: ["Stake Entry Authority"],
1729
+ writable: true,
1730
+ signer: true
1731
+ }
1732
+ ],
1733
+ args: []
1734
+ },
1735
+ {
1736
+ name: "set_token_metadata_spl",
1737
+ discriminator: [244, 162, 227, 218, 129, 5, 25, 253],
1738
+ accounts: [
1739
+ {
1740
+ name: "authority",
1741
+ docs: ["Stake Pool Authority"],
1742
+ signer: true,
1743
+ relations: ["stake_pool"]
1744
+ },
1745
+ {
1746
+ name: "stake_pool"
1747
+ },
1748
+ {
1749
+ name: "stake_mint",
1750
+ relations: ["stake_pool"]
1751
+ },
1752
+ {
1753
+ name: "metadata_account",
1754
+ writable: true,
1755
+ pda: {
1756
+ seeds: [
1757
+ {
1758
+ kind: "const",
1759
+ value: [109, 101, 116, 97, 100, 97, 116, 97]
1760
+ },
1761
+ {
1762
+ kind: "account",
1763
+ path: "metadata_program"
1764
+ },
1765
+ {
1766
+ kind: "account",
1767
+ path: "stake_mint"
1768
+ }
1769
+ ],
1770
+ program: {
1771
+ kind: "account",
1772
+ path: "metadata_program"
1773
+ }
1774
+ }
1775
+ },
1776
+ {
1777
+ name: "metadata_program",
1778
+ docs: ["MPL Program"],
1779
+ address: "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
1780
+ },
1781
+ {
1782
+ name: "token_program",
1783
+ address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
1784
+ },
1785
+ {
1786
+ name: "rent",
1787
+ address: "SysvarRent111111111111111111111111111111111"
1788
+ },
1789
+ {
1790
+ name: "system_program",
1791
+ address: "11111111111111111111111111111111"
1792
+ }
1793
+ ],
1794
+ args: [
1795
+ {
1796
+ name: "name",
1797
+ type: "string"
1798
+ },
1799
+ {
1800
+ name: "symbol",
1801
+ type: "string"
1802
+ },
1803
+ {
1804
+ name: "uri",
1805
+ type: "string"
1806
+ }
1807
+ ]
1808
+ },
1809
+ {
1810
+ name: "set_token_metadata_t22",
1811
+ discriminator: [239, 134, 91, 83, 196, 57, 120, 106],
1812
+ accounts: [
1813
+ {
1814
+ name: "authority",
1815
+ docs: ["Stake Pool Authority"],
1816
+ signer: true,
1817
+ relations: ["stake_pool"]
1818
+ },
1819
+ {
1820
+ name: "stake_pool"
1821
+ },
1822
+ {
1823
+ name: "stake_mint",
1824
+ writable: true,
1825
+ relations: ["stake_pool"]
1826
+ },
1827
+ {
1828
+ name: "token_program",
1829
+ address: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
1830
+ },
1831
+ {
1832
+ name: "system_program",
1833
+ address: "11111111111111111111111111111111"
1834
+ }
1835
+ ],
1836
+ args: [
1837
+ {
1838
+ name: "name",
1839
+ type: "string"
1840
+ },
1841
+ {
1842
+ name: "symbol",
1843
+ type: "string"
1844
+ },
1845
+ {
1846
+ name: "uri",
1847
+ type: "string"
1848
+ }
1849
+ ]
1850
+ },
1851
+ {
1852
+ name: "stake",
1853
+ discriminator: [206, 176, 202, 18, 200, 209, 179, 108],
1854
+ accounts: [
1855
+ {
1856
+ name: "stake_pool",
1857
+ docs: ["Stake Pool"],
1858
+ writable: true
1859
+ },
1860
+ {
1861
+ name: "stake_entry",
1862
+ docs: ["Entry that will store Stake Metadata"],
1863
+ writable: true,
1864
+ pda: {
1865
+ seeds: [
1866
+ {
1867
+ kind: "const",
1868
+ value: [115, 116, 97, 107, 101, 45, 101, 110, 116, 114, 121]
1869
+ },
1870
+ {
1871
+ kind: "account",
1872
+ path: "stake_pool"
1873
+ },
1874
+ {
1875
+ kind: "account",
1876
+ path: "authority"
1877
+ },
1878
+ {
1879
+ kind: "arg",
1880
+ path: "nonce"
1881
+ }
1882
+ ]
1883
+ }
1884
+ },
1885
+ {
1886
+ name: "from",
1887
+ docs: ["Token Account from which stake tokens will be transferred"],
1888
+ writable: true
1889
+ },
1890
+ {
1891
+ name: "vault",
1892
+ docs: ["Stake Pool Vault that stores staked tokens"],
1893
+ writable: true,
1894
+ relations: ["stake_pool"]
1895
+ },
1896
+ {
1897
+ name: "to",
1898
+ docs: ["Token Account to transfer Stake Mint tokens to"],
1899
+ writable: true
1900
+ },
1901
+ {
1902
+ name: "payer",
1903
+ docs: ["Owner of the Token Account from which tokens will be staked"],
1904
+ writable: true,
1905
+ signer: true
1906
+ },
1907
+ {
1908
+ name: "authority"
1909
+ },
1910
+ {
1911
+ name: "mint",
1912
+ docs: ["Original mint of staked tokens"],
1913
+ writable: true,
1914
+ relations: ["stake_pool"]
1915
+ },
1916
+ {
1917
+ name: "stake_mint",
1918
+ docs: ["Mint of stake tokens that will be minted in return for staking"],
1919
+ writable: true,
1920
+ relations: ["stake_pool"]
1921
+ },
1922
+ {
1923
+ name: "token_program"
1924
+ },
1925
+ {
1926
+ name: "system_program",
1927
+ address: "11111111111111111111111111111111"
1928
+ }
1929
+ ],
1930
+ args: [
1931
+ {
1932
+ name: "nonce",
1933
+ type: "u32"
1934
+ },
1935
+ {
1936
+ name: "amount",
1937
+ type: "u64"
1938
+ },
1939
+ {
1940
+ name: "duration",
1941
+ type: "u64"
1942
+ }
1943
+ ]
1944
+ },
1945
+ {
1946
+ name: "unstake",
1947
+ discriminator: [90, 95, 107, 42, 205, 124, 50, 225],
1948
+ accounts: [
1949
+ {
1950
+ name: "stake_pool",
1951
+ writable: true,
1952
+ relations: ["stake_entry"]
1953
+ },
1954
+ {
1955
+ name: "stake_entry",
1956
+ docs: ["Entry that stores Stake Metadata"],
1957
+ writable: true
1958
+ },
1959
+ {
1960
+ name: "from",
1961
+ docs: ["Stake Mint Token account"],
1962
+ writable: true
1963
+ },
1964
+ {
1965
+ name: "vault",
1966
+ docs: ["Escrow Account that stores Staked tokens"],
1967
+ writable: true,
1968
+ relations: ["stake_pool"]
1969
+ },
1970
+ {
1971
+ name: "to",
1972
+ docs: ["Token account to withdraw Staked tokens to"],
1973
+ writable: true
1974
+ },
1975
+ {
1976
+ name: "authority",
1977
+ docs: ["Stake Entry Authority"],
1978
+ writable: true,
1979
+ signer: true
1980
+ },
1981
+ {
1982
+ name: "mint",
1983
+ docs: ["Original mint of staked tokens"],
1984
+ writable: true,
1985
+ relations: ["stake_pool"]
1986
+ },
1987
+ {
1988
+ name: "stake_mint",
1989
+ docs: ["Stake Mint used to exchanged Staked tokens to"],
1990
+ writable: true,
1991
+ relations: ["stake_pool"]
1992
+ },
1993
+ {
1994
+ name: "token_program"
1995
+ }
1996
+ ],
1997
+ args: []
1998
+ }
1999
+ ],
2000
+ accounts: [
2001
+ {
2002
+ name: "LookupTableLink",
2003
+ discriminator: [133, 88, 187, 141, 1, 53, 72, 236]
2004
+ },
2005
+ {
2006
+ name: "StakeEntry",
2007
+ discriminator: [187, 127, 9, 35, 155, 68, 86, 40]
2008
+ },
2009
+ {
2010
+ name: "StakePool",
2011
+ discriminator: [121, 34, 206, 21, 79, 127, 255, 28]
2012
+ }
2013
+ ],
2014
+ errors: [
2015
+ {
2016
+ code: 6e3,
2017
+ name: "InvalidDuration",
2018
+ msg: "Minimum duration must be less than the maximum"
2019
+ },
2020
+ {
2021
+ code: 6001,
2022
+ name: "InvalidWeight",
2023
+ msg: "Weight should be more than minimum"
2024
+ },
2025
+ {
2026
+ code: 6002,
2027
+ name: "DurationTooShort",
2028
+ msg: "Duration of staking can't be less than minimum duration of the pool"
2029
+ },
2030
+ {
2031
+ code: 6003,
2032
+ name: "InvalidStakeAmount",
2033
+ msg: "Stake amount should be more than 0"
2034
+ },
2035
+ {
2036
+ code: 6004,
2037
+ name: "ArithmeticError",
2038
+ msg: "Arithmetic Error (overflow/underflow)"
2039
+ },
2040
+ {
2041
+ code: 6005,
2042
+ name: "Unauthorized",
2043
+ msg: "Account is not authorized to execute this instruction"
2044
+ },
2045
+ {
2046
+ code: 6006,
2047
+ name: "OwnerMismatch",
2048
+ msg: "Token account owner did not match intended owner"
2049
+ },
2050
+ {
2051
+ code: 6007,
2052
+ name: "InvalidMint",
2053
+ msg: "Provided Mint does not equal the Pool Mint"
2054
+ },
2055
+ {
2056
+ code: 6008,
2057
+ name: "InvalidStakeVault",
2058
+ msg: "Provided Stake Vault does not equal the Pool Vault"
2059
+ },
2060
+ {
2061
+ code: 6009,
2062
+ name: "InvalidStakeMint",
2063
+ msg: "Provided Stake Mint does not equal the Pool Stake Mint"
2064
+ },
2065
+ {
2066
+ code: 6010,
2067
+ name: "InvalidStakePool",
2068
+ msg: "Provided Stake Pool does not equal the Entry Stake Pool"
2069
+ },
2070
+ {
2071
+ code: 6011,
2072
+ name: "InvalidPoolMint",
2073
+ msg: "Provided Mint does not equal the Pool Mint"
2074
+ },
2075
+ {
2076
+ code: 6012,
2077
+ name: "ClosedStake",
2078
+ msg: "Stake Entry is already closed and can't be used"
2079
+ },
2080
+ {
2081
+ code: 6013,
2082
+ name: "LockedStake",
2083
+ msg: "Stake is locked, unstake is not possible"
2084
+ },
2085
+ {
2086
+ code: 6014,
2087
+ name: "UnsupportedTokenExtensions",
2088
+ msg: "Mint has unsupported Token Extensions"
2089
+ },
2090
+ {
2091
+ code: 6015,
2092
+ name: "UnstakeRequestNotRequired",
2093
+ msg: "Unstake request is not required"
2094
+ },
2095
+ {
2096
+ code: 6016,
2097
+ name: "UnstakeRequestRequired",
2098
+ msg: "Stake pool has unstake period, request is required prior to unstake"
2099
+ },
2100
+ {
2101
+ code: 6017,
2102
+ name: "UnstakeTooEarly",
2103
+ msg: "Unstake is not possible until unstake period has passed"
2104
+ }
2105
+ ],
2106
+ types: [
2107
+ {
2108
+ name: "LookupTableLink",
2109
+ type: {
2110
+ kind: "struct",
2111
+ fields: [
2112
+ {
2113
+ name: "nonce",
2114
+ docs: ["Nonce to differentiate lookup tables for the same stake pool"],
2115
+ type: "u32"
2116
+ },
2117
+ {
2118
+ name: "stake_pool",
2119
+ docs: ["Stake Pool for which tokens were staked"],
2120
+ type: "pubkey"
2121
+ },
2122
+ {
2123
+ name: "authority",
2124
+ docs: ["Authority of the Entry"],
2125
+ type: "pubkey"
2126
+ },
2127
+ {
2128
+ name: "lookup_table",
2129
+ docs: ["Pubkey of the address lookup table"],
2130
+ type: "pubkey"
2131
+ },
2132
+ {
2133
+ name: "_buffer",
2134
+ docs: ["Buffer for additional fields"],
2135
+ type: {
2136
+ array: ["u8", 64]
2137
+ }
2138
+ }
2139
+ ]
2140
+ }
2141
+ },
2142
+ {
2143
+ name: "StakeEntry",
2144
+ type: {
2145
+ kind: "struct",
2146
+ fields: [
2147
+ {
2148
+ name: "nonce",
2149
+ docs: ["Nonce to differentiate stakes for the same pool"],
2150
+ type: "u32"
2151
+ },
2152
+ {
2153
+ name: "stake_pool",
2154
+ docs: ["Stake Pool for which tokens were staked"],
2155
+ type: "pubkey"
2156
+ },
2157
+ {
2158
+ name: "payer",
2159
+ docs: ["Original Owner of Staked tokens"],
2160
+ type: "pubkey"
2161
+ },
2162
+ {
2163
+ name: "authority",
2164
+ docs: ["Authority of the Entry"],
2165
+ type: "pubkey"
2166
+ },
2167
+ {
2168
+ name: "amount",
2169
+ docs: ["Amount of deposited funds"],
2170
+ type: "u64"
2171
+ },
2172
+ {
2173
+ name: "duration",
2174
+ docs: ["Duration of the lockup"],
2175
+ type: "u64"
2176
+ },
2177
+ {
2178
+ name: "effective_amount",
2179
+ docs: ["Effective Amount staked, does not equal to deposited amount, accounts for Stake Weight"],
2180
+ type: "u128"
2181
+ },
2182
+ {
2183
+ name: "created_ts",
2184
+ docs: ["Timestamp when Deposit was made"],
2185
+ type: "u64"
2186
+ },
2187
+ {
2188
+ name: "closed_ts",
2189
+ docs: ["Timestamp when entry has been closed"],
2190
+ type: "u64"
2191
+ },
2192
+ {
2193
+ name: "prior_total_effective_stake",
2194
+ docs: ["Total effective stake at the time of staking"],
2195
+ type: "u128"
2196
+ },
2197
+ {
2198
+ name: "unstake_ts",
2199
+ docs: ["Timestamp when unstake was requested, will be used in case `unstake_period` is set"],
2200
+ type: "u64"
2201
+ },
2202
+ {
2203
+ name: "_buffer",
2204
+ docs: ["Buffer for additional fields"],
2205
+ type: {
2206
+ array: ["u8", 40]
2207
+ }
2208
+ }
2209
+ ]
2210
+ }
2211
+ },
2212
+ {
2213
+ name: "StakePool",
2214
+ type: {
2215
+ kind: "struct",
2216
+ fields: [
2217
+ {
2218
+ name: "bump",
2219
+ docs: ["Bump Seed used to sign transactions"],
2220
+ type: "u8"
2221
+ },
2222
+ {
2223
+ name: "nonce",
2224
+ docs: ["Nonce to differentiate pools for the same mint"],
2225
+ type: "u8"
2226
+ },
2227
+ {
2228
+ name: "mint",
2229
+ docs: ["Mint of the Stake Pool"],
2230
+ type: "pubkey"
2231
+ },
2232
+ {
2233
+ name: "creator",
2234
+ docs: ["Initial Creator"],
2235
+ type: "pubkey"
2236
+ },
2237
+ {
2238
+ name: "authority",
2239
+ docs: ["Current authority"],
2240
+ type: "pubkey"
2241
+ },
2242
+ {
2243
+ name: "min_weight",
2244
+ docs: [
2245
+ "The lowest weight awarded for staking, measured as a fraction of `1 / SCALE_FACTOR_BASE`.",
2246
+ "For instance:",
2247
+ "* `min_weight = 1 x SCALE_FACTOR_BASE` signifies a minimum multiplier of 1x for min staking duration",
2248
+ "* `min_weight = 2 x SCALE_FACTOR_BASE` indicates a minimum multiplier of 2x for min staking duration"
2249
+ ],
2250
+ type: "u64"
2251
+ },
2252
+ {
2253
+ name: "max_weight",
2254
+ docs: [
2255
+ "The highest weight awarded for staking, measured as a fraction of `1 / SCALE_FACTOR_BASE`.",
2256
+ "For instance:",
2257
+ "* `max_weight = 1 x SCALE_FACTOR_BASE` signifies a max multiplier of 1x for max staking duration",
2258
+ "* `max_weight = 2 x SCALE_FACTOR_BASE` indicates a max multiplier of 2x for max staking duration"
2259
+ ],
2260
+ type: "u64"
2261
+ },
2262
+ {
2263
+ name: "min_duration",
2264
+ docs: ["Min Duration of stake in seconds"],
2265
+ type: "u64"
2266
+ },
2267
+ {
2268
+ name: "max_duration",
2269
+ docs: ["Max Duration of stake in seconds, the more duration, the more weight the stake has"],
2270
+ type: "u64"
2271
+ },
2272
+ {
2273
+ name: "permissionless",
2274
+ docs: ["Whether anyone can add Reward Pools or just admin"],
2275
+ type: "bool"
2276
+ },
2277
+ {
2278
+ name: "vault",
2279
+ docs: ["Escrow Account that stores staked tokens"],
2280
+ type: "pubkey"
2281
+ },
2282
+ {
2283
+ name: "stake_mint",
2284
+ docs: ["Stake Mint, will be returned in exchange for stake tokens"],
2285
+ type: "pubkey"
2286
+ },
2287
+ {
2288
+ name: "total_stake",
2289
+ docs: ["Total number of Staked tokens"],
2290
+ type: "u64"
2291
+ },
2292
+ {
2293
+ name: "total_effective_stake",
2294
+ docs: [
2295
+ "Total staked tokens accounting for each stake weight, does not equal `total_stake`,",
2296
+ "represents a sum of effective stake multiplied by 10^9 for precision"
2297
+ ],
2298
+ type: "u128"
2299
+ },
2300
+ {
2301
+ name: "freeze_stake_mint",
2302
+ docs: ["Whether we should freeze stake mint token accounts"],
2303
+ type: "bool"
2304
+ },
2305
+ {
2306
+ name: "unstake_period",
2307
+ docs: [
2308
+ "Period for unstaking, if set unstake at first should be requested, and the real unstake can only happen after this period"
2309
+ ],
2310
+ type: "u64"
2311
+ },
2312
+ {
2313
+ name: "_buffer",
2314
+ docs: ["Buffer for additional fields"],
2315
+ type: {
2316
+ array: ["u8", 55]
2317
+ }
2318
+ }
2319
+ ]
2320
+ }
2321
+ }
2322
+ ]
2323
+ };
2324
+ var deriveStakePoolPDA = (programId, mint, authority, nonce) => {
2325
+ return web3_js.PublicKey.findProgramAddressSync(
2326
+ [STAKE_POOL_PREFIX, mint.toBuffer(), authority.toBuffer(), new BN3__default.default(nonce).toArrayLike(Buffer, "le", 1)],
2327
+ programId
2328
+ )[0];
2329
+ };
2330
+ var deriveStakeVaultPDA = (programId, stakePool) => {
2331
+ return web3_js.PublicKey.findProgramAddressSync([STAKE_VAULT_PREFIX, stakePool.toBuffer()], programId)[0];
2332
+ };
2333
+ var deriveStakeMintPDA = (programId, stakePool) => {
2334
+ return web3_js.PublicKey.findProgramAddressSync([STAKE_MINT_PREFIX, stakePool.toBuffer()], programId)[0];
2335
+ };
2336
+ var deriveStakeEntryPDA = (programId, stakePool, authority, nonce) => {
2337
+ return web3_js.PublicKey.findProgramAddressSync(
2338
+ [STAKE_ENTRY_PREFIX, stakePool.toBuffer(), authority.toBuffer(), new BN3__default.default(nonce).toArrayLike(Buffer, "le", 4)],
2339
+ programId
2340
+ )[0];
2341
+ };
2342
+ var deriveRewardPoolPDA = (programId, stakePool, mint, nonce) => {
2343
+ return web3_js.PublicKey.findProgramAddressSync(
2344
+ [REWARD_POOL_PREFIX, stakePool.toBuffer(), mint.toBuffer(), new BN3__default.default(nonce).toArrayLike(Buffer, "le", 1)],
2345
+ programId
2346
+ )[0];
2347
+ };
2348
+ var deriveRewardVaultPDA = (programId, rewardPool) => {
2349
+ return web3_js.PublicKey.findProgramAddressSync([REWARD_VAULT_PREFIX, rewardPool.toBuffer()], programId)[0];
2350
+ };
2351
+ var deriveRewardEntryPDA = (programId, rewardPool, stakeEntry) => {
2352
+ return web3_js.PublicKey.findProgramAddressSync(
2353
+ [REWARD_ENTRY_PREFIX, rewardPool.toBuffer(), stakeEntry.toBuffer()],
2354
+ programId
2355
+ )[0];
2356
+ };
2357
+ var deriveConfigPDA = (programId) => {
2358
+ return web3_js.PublicKey.findProgramAddressSync([CONFIG_PREFIX], programId)[0];
2359
+ };
2360
+ var deriveFeeValuePDA = (programId, target) => {
2361
+ return web3_js.PublicKey.findProgramAddressSync([FEE_VALUE_PREFIX, target.toBuffer()], programId)[0];
2362
+ };
2363
+
2364
+ // solana/client.ts
2365
+ var SolanaStakingClient = class {
2366
+ constructor({
2367
+ clusterUrl,
2368
+ cluster = common.ICluster.Mainnet,
2369
+ commitment = "confirmed",
2370
+ programIds,
2371
+ sendRate = 1,
2372
+ sendThrottler
2373
+ }) {
2374
+ this.cluster = cluster;
2375
+ this.commitment = commitment;
2376
+ this.connection = new web3_js.Connection(clusterUrl, this.commitment);
2377
+ this.sendThrottler = sendThrottler ?? solana.buildSendThrottler(sendRate);
2378
+ const stakePoolIdl = {
2379
+ ...stake_pool_default,
2380
+ address: programIds?.stakePool ?? STAKE_POOL_PROGRAM_ID[cluster] ?? stake_pool_default.address
2381
+ };
2382
+ const rewardPoolIdl = {
2383
+ ...reward_pool_default,
2384
+ address: programIds?.rewardPool ?? REWARD_POOL_PROGRAM_ID[cluster] ?? reward_pool_default.address
2385
+ };
2386
+ const feeManagerIdl = {
2387
+ ...fee_manager_default,
2388
+ address: programIds?.feeManager ?? fee_manager_default.address
2389
+ };
2390
+ this.programs = {
2391
+ stakePoolProgram: new anchor.Program(stakePoolIdl, {
2392
+ connection: this.connection
2393
+ }),
2394
+ rewardPoolProgram: new anchor.Program(rewardPoolIdl, {
2395
+ connection: this.connection
2396
+ }),
2397
+ feeManagerProgram: new anchor.Program(feeManagerIdl, {
2398
+ connection: this.connection
2399
+ })
2400
+ };
2401
+ }
2402
+ getCurrentProgramId(programKey) {
2403
+ const program = this.programs[programKey];
2404
+ common.invariant(program, `Program ${programKey} is not found`);
2405
+ return program.programId;
2406
+ }
2407
+ getCommitment() {
2408
+ return typeof this.commitment == "string" ? this.commitment : this.commitment.commitment;
2409
+ }
2410
+ async getStakePool(id) {
2411
+ const { stakePoolProgram } = this.programs;
2412
+ return stakePoolProgram.account.stakePool.fetch(id);
2413
+ }
2414
+ async searchStakePools(criteria = {}) {
2415
+ const { stakePoolProgram } = this.programs;
2416
+ return stakePoolProgram.account.stakePool.all(solana.getFilters(criteria, STAKE_POOL_BYTE_OFFSETS));
2417
+ }
2418
+ async getStakeEntry(id) {
2419
+ const { stakePoolProgram } = this.programs;
2420
+ return stakePoolProgram.account.stakeEntry.fetch(id);
2421
+ }
2422
+ async searchStakeEntries(criteria = {}) {
2423
+ const { stakePoolProgram } = this.programs;
2424
+ return stakePoolProgram.account.stakeEntry.all(solana.getFilters(criteria, STAKE_ENTRY_BYTE_OFFSETS));
2425
+ }
2426
+ async searchRewardPools(criteria = {}) {
2427
+ const { rewardPoolProgram } = this.programs;
2428
+ return rewardPoolProgram.account.rewardPool.all(solana.getFilters(criteria, REWARD_POOL_BYTE_OFFSETS));
2429
+ }
2430
+ async searchRewardEntries(criteria) {
2431
+ const { rewardPoolProgram } = this.programs;
2432
+ return rewardPoolProgram.account.rewardEntry.all(solana.getFilters(criteria, REWARD_ENTRY_BYTE_OFFSETS));
2433
+ }
2434
+ async getFee(target) {
2435
+ const perTargetFee = await this.getFeeValueIfExists(target);
2436
+ if (perTargetFee) {
2437
+ return perTargetFee;
2438
+ }
2439
+ return this.getDefaultFeeValue();
2440
+ }
2441
+ getDefaultFeeValue() {
2442
+ const { feeManagerProgram } = this.programs;
2443
+ const feeValueKey = deriveConfigPDA(feeManagerProgram.programId);
2444
+ return feeManagerProgram.account.config.fetch(feeValueKey);
2445
+ }
2446
+ getFeeValueIfExists(target) {
2447
+ const { feeManagerProgram } = this.programs;
2448
+ const feeValueKey = deriveFeeValuePDA(feeManagerProgram.programId, new web3_js.PublicKey(target));
2449
+ return feeManagerProgram.account.feeValue.fetchNullable(feeValueKey);
2450
+ }
2451
+ async createStakePool(data, extParams) {
2452
+ const { ixs, publicKey } = await this.prepareCreateStakePoolInstructions(data, extParams);
2453
+ const { signature } = await this.execute(ixs, extParams);
2454
+ return {
2455
+ ixs,
2456
+ txId: signature,
2457
+ metadataId: publicKey
2458
+ };
2459
+ }
2460
+ async prepareCreateStakePoolInstructions({
2461
+ maxWeight,
2462
+ maxDuration,
2463
+ minDuration,
2464
+ mint,
2465
+ permissionless = false,
2466
+ freezeStakeMint = null,
2467
+ unstakePeriod = null,
2468
+ nonce,
2469
+ tokenProgramId = splToken.TOKEN_PROGRAM_ID
2470
+ }, extParams) {
2471
+ const { stakePoolProgram } = this.programs;
2472
+ const creator = extParams.invoker.publicKey;
2473
+ common.invariant(creator, "Undefined invoker publicKey");
2474
+ const createInstruction = await stakePoolProgram.methods.createPool(nonce, maxWeight, minDuration, maxDuration, permissionless, freezeStakeMint, unstakePeriod).accounts({
2475
+ creator,
2476
+ mint,
2477
+ tokenProgram: tokenProgramId
2478
+ }).instruction();
2479
+ const stakePoolPDA = deriveStakePoolPDA(stakePoolProgram.programId, solana.pk(mint), creator, nonce);
2480
+ return { ixs: [createInstruction], publicKey: stakePoolPDA };
2481
+ }
2482
+ async stake(data, extParams) {
2483
+ const { ixs } = await this.prepareStakeInstructions(data, extParams);
2484
+ const { signature } = await this.execute(ixs, extParams);
2485
+ return {
2486
+ ixs,
2487
+ txId: signature
2488
+ };
2489
+ }
2490
+ async prepareStakeInstructions({ nonce, amount, duration, stakePool, stakePoolMint, tokenProgramId = splToken.TOKEN_PROGRAM_ID }, extParams) {
2491
+ const { stakePoolProgram } = this.programs;
2492
+ const staker = extParams.invoker.publicKey;
2493
+ common.invariant(staker, "Undefined invoker publicKey");
2494
+ const mint = deriveStakeMintPDA(stakePoolProgram.programId, solana.pk(stakePool));
2495
+ const stakeMintAccountKey = splToken.getAssociatedTokenAddressSync(mint, staker, true, solana.pk(tokenProgramId));
2496
+ const poolMintAccountKey = splToken.getAssociatedTokenAddressSync(solana.pk(stakePoolMint), staker, true, solana.pk(tokenProgramId));
2497
+ const instruction = await stakePoolProgram.methods.stake(nonce, amount, duration).accounts({
2498
+ stakePool,
2499
+ tokenProgram: tokenProgramId,
2500
+ from: poolMintAccountKey,
2501
+ to: stakeMintAccountKey,
2502
+ authority: staker,
2503
+ payer: staker
2504
+ }).instruction();
2505
+ return { ixs: [instruction] };
2506
+ }
2507
+ async unstake(data, extParams) {
2508
+ const { ixs } = await this.prepareUnstakeInstructions(data, extParams);
2509
+ const { signature } = await this.execute(ixs, extParams);
2510
+ return {
2511
+ ixs,
2512
+ txId: signature
2513
+ };
2514
+ }
2515
+ async prepareUnstakeInstructions({ stakePool, stakePoolMint, nonce, tokenProgramId = splToken.TOKEN_PROGRAM_ID }, extParams) {
2516
+ const { stakePoolProgram } = this.programs;
2517
+ const staker = extParams.invoker.publicKey;
2518
+ common.invariant(staker, "Undefined invoker publicKey");
2519
+ const stakeMintKey = deriveStakeMintPDA(stakePoolProgram.programId, solana.pk(stakePool));
2520
+ const stakeEntryKey = deriveStakeEntryPDA(stakePoolProgram.programId, solana.pk(stakePool), staker, nonce);
2521
+ const poolMintAccountKey = splToken.getAssociatedTokenAddressSync(solana.pk(stakePoolMint), staker, true, solana.pk(tokenProgramId));
2522
+ const stakeMintAccountKey = splToken.getAssociatedTokenAddressSync(stakeMintKey, staker, true, solana.pk(tokenProgramId));
2523
+ const instruction = await stakePoolProgram.methods.unstake().accounts({
2524
+ stakeEntry: stakeEntryKey,
2525
+ to: poolMintAccountKey,
2526
+ from: stakeMintAccountKey,
2527
+ authority: staker,
2528
+ tokenProgram: tokenProgramId
2529
+ }).instruction();
2530
+ return { ixs: [instruction] };
2531
+ }
2532
+ async createRewardPool(data, extParams) {
2533
+ const { ixs, publicKey } = await this.prepareCreateRewardPoolInstructions(data, extParams);
2534
+ const { signature } = await this.execute(ixs, extParams);
2535
+ return {
2536
+ ixs,
2537
+ txId: signature,
2538
+ metadataId: publicKey
2539
+ };
2540
+ }
2541
+ async prepareCreateRewardPoolInstructions({
2542
+ nonce,
2543
+ rewardAmount,
2544
+ rewardPeriod,
2545
+ rewardMint,
2546
+ permissionless = false,
2547
+ stakePool,
2548
+ lastClaimPeriodOpt,
2549
+ tokenProgramId = splToken.TOKEN_PROGRAM_ID
2550
+ }, extParams) {
2551
+ const { rewardPoolProgram } = this.programs;
2552
+ const creator = extParams.invoker.publicKey;
2553
+ common.invariant(creator, "Undefined invoker publicKey");
2554
+ const instruction = await rewardPoolProgram.methods.createPool(nonce, rewardAmount, rewardPeriod, permissionless, lastClaimPeriodOpt).accounts({
2555
+ creator,
2556
+ stakePool,
2557
+ mint: rewardMint,
2558
+ tokenProgram: tokenProgramId
2559
+ }).instruction();
2560
+ const rewardPoolKey = deriveRewardPoolPDA(rewardPoolProgram.programId, solana.pk(stakePool), solana.pk(rewardMint), nonce);
2561
+ return { publicKey: rewardPoolKey, ixs: [instruction] };
2562
+ }
2563
+ async claimRewards(data, extParams) {
2564
+ const { ixs } = await this.prepareClaimRewardsInstructions(data, extParams);
2565
+ const { signature } = await this.execute(ixs, extParams);
2566
+ return {
2567
+ ixs,
2568
+ txId: signature
2569
+ };
2570
+ }
2571
+ async prepareClaimRewardsInstructions({ rewardPoolNonce, depositNonce, stakePool, tokenProgramId = splToken.TOKEN_PROGRAM_ID, rewardMint }, extParams) {
2572
+ const { stakePoolProgram, rewardPoolProgram } = this.programs;
2573
+ const staker = extParams.invoker.publicKey;
2574
+ common.invariant(staker, "Undefined invoker publicKey");
2575
+ const instruction = await rewardPoolProgram.methods.claimRewards().accounts({
2576
+ stakeEntry: deriveStakeEntryPDA(stakePoolProgram.programId, solana.pk(stakePool), staker, depositNonce),
2577
+ rewardPool: deriveRewardPoolPDA(rewardPoolProgram.programId, solana.pk(stakePool), solana.pk(rewardMint), rewardPoolNonce),
2578
+ claimant: staker,
2579
+ tokenProgram: tokenProgramId,
2580
+ to: splToken.getAssociatedTokenAddressSync(solana.pk(rewardMint), staker, true, solana.pk(tokenProgramId))
2581
+ }).instruction();
2582
+ return { ixs: [instruction] };
2583
+ }
2584
+ async fundPool(data, extParams) {
2585
+ const { ixs } = await this.prepareFundPoolInstructions(data, extParams);
2586
+ const { signature } = await this.execute(ixs, extParams);
2587
+ return {
2588
+ ixs,
2589
+ txId: signature
2590
+ };
2591
+ }
2592
+ async prepareFundPoolInstructions({ amount, tokenProgramId = splToken.TOKEN_PROGRAM_ID, rewardMint, stakePool, feeValue, nonce }, extParams) {
2593
+ const { rewardPoolProgram } = this.programs;
2594
+ const staker = extParams.invoker.publicKey;
2595
+ common.invariant(staker, "Undefined invoker publicKey");
2596
+ const existingFee = await this.getFeeValueIfExists(staker);
2597
+ const rewardMintPk = solana.pk(rewardMint);
2598
+ const tokenProgramPk = solana.pk(tokenProgramId);
2599
+ const treasuryATA = !existingFee || existingFee.streamflowFee.gtn(0) ? await solana.checkOrCreateAtaBatch(
2600
+ this.connection,
2601
+ [STREAMFLOW_TREASURY_PUBLIC_KEY],
2602
+ rewardMintPk,
2603
+ extParams.invoker,
2604
+ tokenProgramPk
2605
+ ) : null;
2606
+ const rewardPoolPda = deriveRewardPoolPDA(rewardPoolProgram.programId, solana.pk(stakePool), rewardMintPk, nonce);
2607
+ const instruction = await rewardPoolProgram.methods.fundPool(amount).accountsPartial({
2608
+ funder: staker,
2609
+ rewardPool: rewardPoolPda,
2610
+ from: splToken.getAssociatedTokenAddressSync(rewardMintPk, staker, true, tokenProgramPk),
2611
+ tokenProgram: tokenProgramId,
2612
+ vault: deriveRewardVaultPDA(rewardPoolProgram.programId, rewardPoolPda),
2613
+ mint: rewardMint,
2614
+ feeValue
2615
+ }).instruction();
2616
+ return { ixs: treasuryATA ? treasuryATA.concat([instruction]) : [instruction] };
2617
+ }
2618
+ async createRewardEntry(data, extParams) {
2619
+ const { ixs } = await this.prepareCreateRewardEntryInstructions(data, extParams);
2620
+ const { signature } = await this.execute(ixs, extParams);
2621
+ return {
2622
+ ixs,
2623
+ txId: signature
2624
+ };
2625
+ }
2626
+ async prepareCreateRewardEntryInstructions({ stakePool, rewardPoolNonce, depositNonce, rewardMint }, extParams) {
2627
+ const { stakePoolProgram, rewardPoolProgram } = this.programs;
2628
+ const staker = extParams.invoker.publicKey;
2629
+ common.invariant(staker, "Undefined invoker publicKey");
2630
+ const instruction = await rewardPoolProgram.methods.createEntry().accounts({
2631
+ payer: staker,
2632
+ authority: staker,
2633
+ stakeEntry: deriveStakeEntryPDA(stakePoolProgram.programId, solana.pk(stakePool), staker, depositNonce),
2634
+ rewardPool: deriveRewardPoolPDA(rewardPoolProgram.programId, solana.pk(stakePool), solana.pk(rewardMint), rewardPoolNonce)
2635
+ }).instruction();
2636
+ return { ixs: [instruction] };
2637
+ }
2638
+ async updateRewardPool(data, extParams) {
2639
+ const { ixs } = await this.prepareUpdateRewardPoolInstructions(data, extParams);
2640
+ const { signature } = await this.execute(ixs, extParams);
2641
+ return {
2642
+ ixs,
2643
+ txId: signature
2644
+ };
2645
+ }
2646
+ async prepareUpdateRewardPoolInstructions({ rewardPool, rewardAmount, rewardPeriod, stakePool }, extParams) {
2647
+ const { rewardPoolProgram } = this.programs;
2648
+ const invoker = extParams.invoker.publicKey;
2649
+ common.invariant(invoker, "Undefined invoker publicKey");
2650
+ const instruction = await rewardPoolProgram.methods.updatePool(rewardAmount, rewardPeriod).accountsPartial({
2651
+ stakePool,
2652
+ authority: invoker,
2653
+ rewardPool
2654
+ }).instruction();
2655
+ return { ixs: [instruction] };
2656
+ }
2657
+ decode(programKey, accountName, accInfo) {
2658
+ const decodingProgram = this.programs[programKey];
2659
+ common.invariant(decodingProgram, `Decoding program with key ${programKey} is not available`);
2660
+ return decodingProgram.coder.accounts.decode(accountName.toString(), accInfo);
2661
+ }
2662
+ getDiscriminator(programKey, accountName) {
2663
+ const decodingProgram = this.programs[programKey];
2664
+ common.invariant(decodingProgram, `Decoding program with key ${programKey} is not available`);
2665
+ const accountEntity = decodingProgram.idl.accounts.find((acc) => acc.name === accountName);
2666
+ common.invariant(
2667
+ accountEntity,
2668
+ `Decoding program with key ${programKey} doesn't specify account with name ${accountName.toString()}`
2669
+ );
2670
+ return accountEntity.discriminator;
2671
+ }
2672
+ async execute(ixs, extParams) {
2673
+ const { tx, hash, context } = await solana.prepareTransaction(
2674
+ this.connection,
2675
+ solana.prepareBaseInstructions(this.connection, extParams).concat(ixs),
2676
+ extParams.invoker.publicKey
2677
+ );
2678
+ try {
2679
+ const signature = await solana.signAndExecuteTransaction(
2680
+ this.connection,
2681
+ extParams.invoker,
2682
+ tx,
2683
+ {
2684
+ hash,
2685
+ context,
2686
+ commitment: this.getCommitment()
2687
+ },
2688
+ { sendThrottler: this.sendThrottler }
2689
+ );
2690
+ return { signature };
2691
+ } catch (err) {
2692
+ if (err instanceof Error) {
2693
+ const parsed = anchor.translateError(
2694
+ err,
2695
+ anchor.parseIdlErrors(this.programs.stakePoolProgram.idl)
2696
+ // TODO how to catch an error from a specific program?
2697
+ );
2698
+ if (parsed) {
2699
+ throw new common.ContractError(err, parsed.name, parsed.message);
2700
+ }
2701
+ }
2702
+ throw err;
2703
+ }
2704
+ }
2705
+ };
2706
+ var RewardEntryAccumulator = class {
2707
+ constructor(lastAccountedTs, claimedAmount, accountedAmount, rewardPool, stakeEntry, createdTs, lastRewardAmount, lastRewardPeriod, buffer) {
2708
+ this.lastAccountedTs = lastAccountedTs;
2709
+ this.claimedAmount = claimedAmount;
2710
+ this.accountedAmount = accountedAmount;
2711
+ this.rewardPool = rewardPool;
2712
+ this.stakeEntry = stakeEntry;
2713
+ this.createdTs = createdTs;
2714
+ this.buffer = buffer;
2715
+ this.lastRewardAmount = lastRewardAmount;
2716
+ this.lastRewardPeriod = lastRewardPeriod;
2717
+ }
2718
+ static fromEntry(entry) {
2719
+ return new this(
2720
+ entry.lastAccountedTs,
2721
+ entry.claimedAmount,
2722
+ entry.accountedAmount,
2723
+ entry.rewardPool,
2724
+ entry.stakeEntry,
2725
+ entry.createdTs,
2726
+ entry.lastRewardAmount,
2727
+ entry.lastRewardPeriod,
2728
+ entry.buffer
2729
+ );
2730
+ }
2731
+ // Calculate accountable amount by calculating how many seconds have passed since last claim/stake time
2732
+ getAccountableAmount(stakedTs, accountableTs, effectiveStakedAmount, rewardAmount, rewardPeriod) {
2733
+ const lastAccountedTs = this.lastAccountedTs.gt(new BN3__default.default(0)) ? this.lastAccountedTs : stakedTs;
2734
+ const secondsPassed = accountableTs.sub(lastAccountedTs);
2735
+ if (secondsPassed.lt(rewardPeriod)) {
2736
+ return new BN3__default.default(0);
2737
+ }
2738
+ const periodsPassed = secondsPassed.div(rewardPeriod);
2739
+ const claimablePerEffectiveStake = periodsPassed.mul(rewardAmount);
2740
+ return claimablePerEffectiveStake.mul(effectiveStakedAmount).div(SCALE_PRECISION_FACTOR_BN);
2741
+ }
2742
+ // Calculates claimable amount from accountable amount.
2743
+ getClaimableAmount() {
2744
+ const claimedAmount = this.claimedAmount.mul(REWARD_AMOUNT_PRECISION_FACTOR_BN);
2745
+ const nonClaimedAmount = this.accountedAmount.sub(claimedAmount);
2746
+ return nonClaimedAmount.div(REWARD_AMOUNT_PRECISION_FACTOR_BN);
2747
+ }
2748
+ // Get the time of the last unlock
2749
+ getLastAccountedTs(stakedTs, claimableTs, rewardPeriod) {
2750
+ const lastAccountedTs = this.lastAccountedTs.gtn(0) ? this.lastAccountedTs : stakedTs;
2751
+ const totalSecondsPassed = claimableTs.sub(lastAccountedTs);
2752
+ const periodsPassed = totalSecondsPassed.div(rewardPeriod);
2753
+ const periodsToSeconds = periodsPassed.mul(rewardPeriod);
2754
+ return lastAccountedTs.add(periodsToSeconds);
2755
+ }
2756
+ // Adds accounted amount
2757
+ addAccountedAmount(accountedAmount) {
2758
+ this.accountedAmount = this.accountedAmount.add(accountedAmount);
2759
+ }
2760
+ // Adds claimed amount
2761
+ addClaimedAmount(claimedAmount) {
2762
+ this.claimedAmount = this.claimedAmount.add(claimedAmount);
2763
+ }
2764
+ };
2765
+ var createDefaultRewardEntry = (stakeEntry, rewardPool) => {
2766
+ return {
2767
+ stakeEntry: new web3_js.PublicKey(stakeEntry.publicKey),
2768
+ rewardPool: new web3_js.PublicKey(rewardPool.publicKey),
2769
+ createdTs: stakeEntry.account.createdTs,
2770
+ lastAccountedTs: new BN3__default.default(0),
2771
+ lastRewardAmount: new BN3__default.default(0),
2772
+ lastRewardPeriod: new BN3__default.default(0),
2773
+ accountedAmount: new BN3__default.default(0),
2774
+ claimedAmount: new BN3__default.default(0),
2775
+ buffer: []
2776
+ };
2777
+ };
2778
+ var calcRewards = (rewardEntryAccount, stakeEntryAccount, rewardPoolAccount) => {
2779
+ const rewardEntry = rewardEntryAccount?.account ?? createDefaultRewardEntry(stakeEntryAccount, rewardPoolAccount);
2780
+ const stakeEntry = stakeEntryAccount.account;
2781
+ const rewardPool = rewardPoolAccount.account;
2782
+ const rewardEntryAccumulator = RewardEntryAccumulator.fromEntry(rewardEntry);
2783
+ if (rewardEntryAccumulator.createdTs.lt(stakeEntry.createdTs)) {
2784
+ throw new Error("InvalidRewardEntry");
2785
+ }
2786
+ const currTs = Math.floor(Date.now() / 1e3);
2787
+ const stakedTs = rewardPool.createdTs ? BN3__default.default.max(stakeEntry.createdTs, rewardPool.createdTs) : stakeEntry.createdTs;
2788
+ const claimableTs = stakeEntry.closedTs.gtn(0) ? stakeEntry.closedTs : new BN3__default.default(currTs);
2789
+ const amountUpdated = !rewardPool.rewardAmount.eq(rewardPool.lastRewardAmount) && rewardPool.lastAmountUpdateTs.gt(stakeEntry.createdTs) && rewardPool.lastAmountUpdateTs.gt(stakeEntry.closedTs);
2790
+ const periodUpdated = !rewardPool.rewardPeriod.eq(rewardPool.lastRewardPeriod) && rewardPool.lastPeriodUpdateTs.gt(stakeEntry.createdTs) && rewardPool.lastPeriodUpdateTs.gt(stakeEntry.closedTs);
2791
+ if (amountUpdated || periodUpdated) {
2792
+ let firstUpdateTs, secondUpdateTs, rewardAmount, rewardPeriod;
2793
+ if (amountUpdated && periodUpdated) {
2794
+ if (rewardPool.lastAmountUpdateTs.lt(rewardPool.lastPeriodUpdateTs)) {
2795
+ firstUpdateTs = rewardPool.lastAmountUpdateTs;
2796
+ secondUpdateTs = rewardPool.lastPeriodUpdateTs;
2797
+ rewardAmount = rewardPool.rewardAmount;
2798
+ rewardPeriod = rewardEntryAccumulator.lastRewardPeriod;
2799
+ } else {
2800
+ firstUpdateTs = rewardPool.lastPeriodUpdateTs;
2801
+ secondUpdateTs = rewardPool.lastAmountUpdateTs;
2802
+ rewardAmount = rewardEntryAccumulator.lastRewardAmount;
2803
+ rewardPeriod = rewardPool.rewardPeriod;
2804
+ }
2805
+ } else if (amountUpdated) {
2806
+ firstUpdateTs = new BN3__default.default(0);
2807
+ secondUpdateTs = rewardPool.lastAmountUpdateTs;
2808
+ rewardAmount = rewardEntryAccumulator.lastRewardAmount;
2809
+ rewardPeriod = rewardEntryAccumulator.lastRewardPeriod;
2810
+ } else {
2811
+ firstUpdateTs = new BN3__default.default(0);
2812
+ secondUpdateTs = rewardPool.lastPeriodUpdateTs;
2813
+ rewardAmount = rewardEntryAccumulator.lastRewardAmount;
2814
+ rewardPeriod = rewardEntryAccumulator.lastRewardPeriod;
2815
+ }
2816
+ if (firstUpdateTs.gtn(0)) {
2817
+ const firstAccountableAmount = rewardEntryAccumulator.getAccountableAmount(
2818
+ stakedTs,
2819
+ firstUpdateTs,
2820
+ stakeEntry.effectiveAmount,
2821
+ rewardEntryAccumulator.lastRewardAmount,
2822
+ rewardEntryAccumulator.lastRewardPeriod
2823
+ );
2824
+ rewardEntryAccumulator.addAccountedAmount(firstAccountableAmount);
2825
+ rewardEntryAccumulator.lastAccountedTs = rewardEntryAccumulator.getLastAccountedTs(
2826
+ stakedTs,
2827
+ firstUpdateTs,
2828
+ rewardPool.lastRewardPeriod
2829
+ );
2830
+ }
2831
+ const secondAccountableAmount = rewardEntryAccumulator.getAccountableAmount(
2832
+ stakedTs,
2833
+ secondUpdateTs,
2834
+ stakeEntry.effectiveAmount,
2835
+ rewardAmount,
2836
+ rewardPeriod
2837
+ );
2838
+ rewardEntryAccumulator.addAccountedAmount(secondAccountableAmount);
2839
+ rewardEntryAccumulator.lastAccountedTs = rewardEntryAccumulator.getLastAccountedTs(
2840
+ stakedTs,
2841
+ secondUpdateTs,
2842
+ rewardPeriod
2843
+ );
2844
+ }
2845
+ const accountableAmount = rewardEntryAccumulator.getAccountableAmount(
2846
+ stakedTs,
2847
+ claimableTs,
2848
+ stakeEntry.effectiveAmount,
2849
+ rewardPool.rewardAmount,
2850
+ rewardPool.rewardPeriod
2851
+ );
2852
+ rewardEntryAccumulator.addAccountedAmount(accountableAmount);
2853
+ return rewardEntryAccumulator.getClaimableAmount();
2854
+ };
2855
+ var calculateRewardRateFromAmount = (rewardAmount, stakeTokenDecimals, rewardTokenDecimals) => {
2856
+ const decimals = rewardTokenDecimals + (REWARD_AMOUNT_DECIMALS - stakeTokenDecimals);
2857
+ return common.getNumberFromBN(rewardAmount, decimals);
2858
+ };
2859
+ var calculateRewardAmountFromValue = (rewardTokenValue, stakeTokenDecimals) => {
2860
+ const decimalsDiff = REWARD_AMOUNT_DECIMALS - stakeTokenDecimals;
2861
+ if (decimalsDiff === 0) {
2862
+ return rewardTokenValue;
2863
+ }
2864
+ const diffFactor = new BN3__default.default(10).pow(new BN3__default.default(Math.abs(decimalsDiff)));
2865
+ if (decimalsDiff > 0) {
2866
+ return rewardTokenValue.mul(diffFactor);
2867
+ }
2868
+ return rewardTokenValue.div(diffFactor);
2869
+ };
2870
+ var calculateRewardAmountFromRate = (rewardRate, stakeTokenDecimals, rewardTokenDecimals) => {
2871
+ return calculateRewardAmountFromValue(common.getBN(rewardRate, rewardTokenDecimals), stakeTokenDecimals);
2872
+ };
2873
+ var calculateFeeAmount = (amount, fee = DEFAULT_FEE_BN) => {
2874
+ if (fee.eq(FEE_PRECISION_FACTOR_BN)) {
2875
+ return amount;
2876
+ }
2877
+ return amount.mul(fee).div(FEE_PRECISION_FACTOR_BN);
2878
+ };
2879
+ var calculateDecimalsShift = (maxWeight, maxShift = 999) => {
2880
+ if (maxShift == 0) {
2881
+ return 0;
2882
+ }
2883
+ let decimalsShift = 0;
2884
+ while (maxWeight * U64_MAX / BigInt(SCALE_PRECISION_FACTOR) / BigInt(10 ** decimalsShift) > U64_MAX) {
2885
+ decimalsShift += 1;
2886
+ if (decimalsShift == maxShift) {
2887
+ return maxShift;
2888
+ }
2889
+ }
2890
+ return decimalsShift;
2891
+ };
2892
+ async function calculateAmountWithTransferFees(connection, transferFeeConfig, transferAmount) {
2893
+ const epoch = await connection.getEpochInfo();
2894
+ const transferFee = epoch.epoch >= transferFeeConfig.newerTransferFee.epoch ? transferFeeConfig.newerTransferFee : transferFeeConfig.olderTransferFee;
2895
+ const transferFeeBasisPoints = BigInt(transferFee.transferFeeBasisPoints);
2896
+ let feeCharged = BigInt(0);
2897
+ if (transferFeeBasisPoints !== BigInt(0)) {
2898
+ const numerator = transferAmount * 10000n;
2899
+ const denominator = 10000n - transferFeeBasisPoints;
2900
+ const rawPreFeeAmount = common.divCeilN(numerator, denominator);
2901
+ const fee = rawPreFeeAmount - transferAmount;
2902
+ transferAmount = rawPreFeeAmount;
2903
+ feeCharged = fee > transferFee.maximumFee ? transferFee.maximumFee : fee;
2904
+ }
2905
+ return { transferAmount, feeCharged };
2906
+ }
2907
+ var calculateStakeWeight = (minDuration, maxDuration, maxWeight, duration) => {
2908
+ const durationSpan = maxDuration.sub(minDuration);
2909
+ if (durationSpan.eq(new BN3__default.default(0))) {
2910
+ return SCALE_PRECISION_FACTOR_BN;
2911
+ }
2912
+ const durationExceedingMin = duration.sub(minDuration);
2913
+ const normalizedWeight = durationExceedingMin.mul(SCALE_PRECISION_FACTOR_BN).div(durationSpan);
2914
+ const weightDiff = maxWeight.sub(SCALE_PRECISION_FACTOR_BN);
2915
+ return BN3__default.default.max(
2916
+ SCALE_PRECISION_FACTOR_BN.add(normalizedWeight.mul(weightDiff).div(SCALE_PRECISION_FACTOR_BN)),
2917
+ SCALE_PRECISION_FACTOR_BN
2918
+ );
2919
+ };
2920
+
2921
+ exports.RewardEntryAccumulator = RewardEntryAccumulator;
2922
+ exports.SolanaStakingClient = SolanaStakingClient;
2923
+ exports.calcRewards = calcRewards;
2924
+ exports.calculateAmountWithTransferFees = calculateAmountWithTransferFees;
2925
+ exports.calculateDecimalsShift = calculateDecimalsShift;
2926
+ exports.calculateFeeAmount = calculateFeeAmount;
2927
+ exports.calculateRewardAmountFromRate = calculateRewardAmountFromRate;
2928
+ exports.calculateRewardAmountFromValue = calculateRewardAmountFromValue;
2929
+ exports.calculateRewardRateFromAmount = calculateRewardRateFromAmount;
2930
+ exports.calculateStakeWeight = calculateStakeWeight;
2931
+ exports.constants = constants_exports;
2932
+ exports.deriveConfigPDA = deriveConfigPDA;
2933
+ exports.deriveFeeValuePDA = deriveFeeValuePDA;
2934
+ exports.deriveRewardEntryPDA = deriveRewardEntryPDA;
2935
+ exports.deriveRewardPoolPDA = deriveRewardPoolPDA;
2936
+ exports.deriveRewardVaultPDA = deriveRewardVaultPDA;
2937
+ exports.deriveStakeEntryPDA = deriveStakeEntryPDA;
2938
+ exports.deriveStakeMintPDA = deriveStakeMintPDA;
2939
+ exports.deriveStakePoolPDA = deriveStakePoolPDA;
2940
+ exports.deriveStakeVaultPDA = deriveStakeVaultPDA;
2941
+ //# sourceMappingURL=index.cjs.map
2942
+ //# sourceMappingURL=index.cjs.map