@streamflow/staking 7.5.2 → 7.5.3-alpha.cffa362.20250508190445

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 +3879 -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 +3854 -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 +407 -407
  20. package/dist/esm/solana/descriptor/idl/reward_pool.json +1294 -1294
  21. package/dist/esm/solana/descriptor/idl/stake_pool.json +1256 -918
  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 +234 -2
  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 -980
  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,3879 @@
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 BN4 = require('bn.js');
9
+ require('@solana/wallet-adapter-base');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var BN4__default = /*#__PURE__*/_interopDefault(BN4);
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 BN4__default.default(FEE_PRECISION_FACTOR);
65
+ var DEFAULT_FEE = 19;
66
+ var DEFAULT_FEE_BN = new BN4__default.default(DEFAULT_FEE);
67
+ var SCALE_PRECISION_FACTOR = 1e9;
68
+ var SCALE_PRECISION_FACTOR_BN = new BN4__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 BN4__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: [
143
+ 50,
144
+ 106,
145
+ 66,
146
+ 104,
147
+ 99,
148
+ 118,
149
+ 145,
150
+ 88
151
+ ],
152
+ accounts: [
153
+ {
154
+ name: "config",
155
+ writable: true,
156
+ pda: {
157
+ seeds: [
158
+ {
159
+ kind: "const",
160
+ value: [
161
+ 99,
162
+ 111,
163
+ 110,
164
+ 102,
165
+ 105,
166
+ 103
167
+ ]
168
+ }
169
+ ]
170
+ }
171
+ },
172
+ {
173
+ name: "authority",
174
+ docs: [
175
+ "authority"
176
+ ],
177
+ signer: true
178
+ },
179
+ {
180
+ name: "new_authority"
181
+ }
182
+ ],
183
+ args: []
184
+ },
185
+ {
186
+ name: "initialize",
187
+ discriminator: [
188
+ 175,
189
+ 175,
190
+ 109,
191
+ 31,
192
+ 13,
193
+ 152,
194
+ 155,
195
+ 237
196
+ ],
197
+ accounts: [
198
+ {
199
+ name: "config",
200
+ writable: true,
201
+ pda: {
202
+ seeds: [
203
+ {
204
+ kind: "const",
205
+ value: [
206
+ 99,
207
+ 111,
208
+ 110,
209
+ 102,
210
+ 105,
211
+ 103
212
+ ]
213
+ }
214
+ ]
215
+ }
216
+ },
217
+ {
218
+ name: "authority",
219
+ docs: [
220
+ "authority"
221
+ ],
222
+ writable: true,
223
+ signer: true,
224
+ address: "ACYtYsL4KYtJzD53wqyifqad2D8224kamcngYPgSy3t"
225
+ },
226
+ {
227
+ name: "system_program",
228
+ address: "11111111111111111111111111111111"
229
+ }
230
+ ],
231
+ args: []
232
+ },
233
+ {
234
+ name: "remove_fee",
235
+ discriminator: [
236
+ 190,
237
+ 227,
238
+ 105,
239
+ 10,
240
+ 30,
241
+ 161,
242
+ 81,
243
+ 212
244
+ ],
245
+ accounts: [
246
+ {
247
+ name: "fee_value",
248
+ writable: true,
249
+ pda: {
250
+ seeds: [
251
+ {
252
+ kind: "const",
253
+ value: [
254
+ 102,
255
+ 101,
256
+ 101,
257
+ 45,
258
+ 118,
259
+ 97,
260
+ 108,
261
+ 117,
262
+ 101
263
+ ]
264
+ },
265
+ {
266
+ kind: "account",
267
+ path: "target"
268
+ }
269
+ ]
270
+ }
271
+ },
272
+ {
273
+ name: "config",
274
+ pda: {
275
+ seeds: [
276
+ {
277
+ kind: "const",
278
+ value: [
279
+ 99,
280
+ 111,
281
+ 110,
282
+ 102,
283
+ 105,
284
+ 103
285
+ ]
286
+ }
287
+ ]
288
+ }
289
+ },
290
+ {
291
+ name: "authority",
292
+ docs: [
293
+ "authority"
294
+ ],
295
+ writable: true,
296
+ signer: true
297
+ },
298
+ {
299
+ name: "target"
300
+ },
301
+ {
302
+ name: "system_program",
303
+ address: "11111111111111111111111111111111"
304
+ }
305
+ ],
306
+ args: []
307
+ },
308
+ {
309
+ name: "update_config",
310
+ discriminator: [
311
+ 29,
312
+ 158,
313
+ 252,
314
+ 191,
315
+ 10,
316
+ 83,
317
+ 219,
318
+ 99
319
+ ],
320
+ accounts: [
321
+ {
322
+ name: "config",
323
+ writable: true,
324
+ pda: {
325
+ seeds: [
326
+ {
327
+ kind: "const",
328
+ value: [
329
+ 99,
330
+ 111,
331
+ 110,
332
+ 102,
333
+ 105,
334
+ 103
335
+ ]
336
+ }
337
+ ]
338
+ }
339
+ },
340
+ {
341
+ name: "authority",
342
+ docs: [
343
+ "authority"
344
+ ],
345
+ signer: true
346
+ },
347
+ {
348
+ name: "system_program",
349
+ address: "11111111111111111111111111111111"
350
+ }
351
+ ],
352
+ args: [
353
+ {
354
+ name: "streamflow_fee",
355
+ type: {
356
+ option: "u64"
357
+ }
358
+ }
359
+ ]
360
+ },
361
+ {
362
+ name: "write_fee",
363
+ discriminator: [
364
+ 80,
365
+ 12,
366
+ 148,
367
+ 143,
368
+ 16,
369
+ 120,
370
+ 24,
371
+ 48
372
+ ],
373
+ accounts: [
374
+ {
375
+ name: "fee_value",
376
+ writable: true,
377
+ pda: {
378
+ seeds: [
379
+ {
380
+ kind: "const",
381
+ value: [
382
+ 102,
383
+ 101,
384
+ 101,
385
+ 45,
386
+ 118,
387
+ 97,
388
+ 108,
389
+ 117,
390
+ 101
391
+ ]
392
+ },
393
+ {
394
+ kind: "account",
395
+ path: "target"
396
+ }
397
+ ]
398
+ }
399
+ },
400
+ {
401
+ name: "config",
402
+ pda: {
403
+ seeds: [
404
+ {
405
+ kind: "const",
406
+ value: [
407
+ 99,
408
+ 111,
409
+ 110,
410
+ 102,
411
+ 105,
412
+ 103
413
+ ]
414
+ }
415
+ ]
416
+ }
417
+ },
418
+ {
419
+ name: "authority",
420
+ docs: [
421
+ "authority"
422
+ ],
423
+ writable: true,
424
+ signer: true
425
+ },
426
+ {
427
+ name: "target"
428
+ },
429
+ {
430
+ name: "system_program",
431
+ address: "11111111111111111111111111111111"
432
+ }
433
+ ],
434
+ args: [
435
+ {
436
+ name: "streamflow_fee",
437
+ type: "u64"
438
+ }
439
+ ]
440
+ }
441
+ ],
442
+ accounts: [
443
+ {
444
+ name: "Config",
445
+ discriminator: [
446
+ 155,
447
+ 12,
448
+ 170,
449
+ 224,
450
+ 30,
451
+ 250,
452
+ 204,
453
+ 130
454
+ ]
455
+ },
456
+ {
457
+ name: "FeeValue",
458
+ discriminator: [
459
+ 10,
460
+ 188,
461
+ 89,
462
+ 64,
463
+ 4,
464
+ 183,
465
+ 231,
466
+ 0
467
+ ]
468
+ }
469
+ ],
470
+ errors: [
471
+ {
472
+ code: 6e3,
473
+ name: "Unauthorized",
474
+ msg: "Account is not authorized to execute this instruction"
475
+ },
476
+ {
477
+ code: 6001,
478
+ name: "InvalidFee",
479
+ msg: "Provided fee is not valid"
480
+ }
481
+ ],
482
+ types: [
483
+ {
484
+ name: "Config",
485
+ type: {
486
+ kind: "struct",
487
+ fields: [
488
+ {
489
+ name: "authority",
490
+ docs: [
491
+ "Fee Manager authority"
492
+ ],
493
+ type: "pubkey"
494
+ },
495
+ {
496
+ name: "streamflow_fee",
497
+ docs: [
498
+ "Default fee"
499
+ ],
500
+ type: "u64"
501
+ },
502
+ {
503
+ name: "_buffer_1",
504
+ docs: [
505
+ "Buffer for additional fields"
506
+ ],
507
+ type: {
508
+ array: [
509
+ "u8",
510
+ 64
511
+ ]
512
+ }
513
+ },
514
+ {
515
+ name: "_buffer_2",
516
+ docs: [
517
+ "Buffer for additional fields"
518
+ ],
519
+ type: {
520
+ array: [
521
+ "u8",
522
+ 64
523
+ ]
524
+ }
525
+ },
526
+ {
527
+ name: "_buffer_3",
528
+ docs: [
529
+ "Buffer for additional fields"
530
+ ],
531
+ type: {
532
+ array: [
533
+ "u8",
534
+ 64
535
+ ]
536
+ }
537
+ }
538
+ ]
539
+ }
540
+ },
541
+ {
542
+ name: "FeeValue",
543
+ type: {
544
+ kind: "struct",
545
+ fields: [
546
+ {
547
+ name: "streamflow_fee",
548
+ type: "u64"
549
+ },
550
+ {
551
+ name: "_buffer",
552
+ docs: [
553
+ "Buffer for additional fields"
554
+ ],
555
+ type: {
556
+ array: [
557
+ "u8",
558
+ 64
559
+ ]
560
+ }
561
+ }
562
+ ]
563
+ }
564
+ }
565
+ ]
566
+ };
567
+
568
+ // solana/descriptor/idl/reward_pool.json
569
+ var reward_pool_default = {
570
+ address: "RWRDdfRbi3339VgKxTAXg4cjyniF7cbhNbMxZWiSKmj",
571
+ metadata: {
572
+ name: "reward_pool",
573
+ version: "1.0.0",
574
+ spec: "0.1.0",
575
+ description: "Program to manage Reward Pools for Stake Pools and claim rewards from them"
576
+ },
577
+ instructions: [
578
+ {
579
+ name: "change_authority",
580
+ discriminator: [
581
+ 50,
582
+ 106,
583
+ 66,
584
+ 104,
585
+ 99,
586
+ 118,
587
+ 145,
588
+ 88
589
+ ],
590
+ accounts: [
591
+ {
592
+ name: "authority",
593
+ docs: [
594
+ "Current Authority"
595
+ ],
596
+ writable: true,
597
+ signer: true,
598
+ relations: [
599
+ "reward_pool"
600
+ ]
601
+ },
602
+ {
603
+ name: "new_authority"
604
+ },
605
+ {
606
+ name: "reward_pool",
607
+ docs: [
608
+ "Stake Pool"
609
+ ],
610
+ writable: true
611
+ }
612
+ ],
613
+ args: []
614
+ },
615
+ {
616
+ name: "claim_rewards",
617
+ discriminator: [
618
+ 4,
619
+ 144,
620
+ 132,
621
+ 71,
622
+ 116,
623
+ 23,
624
+ 151,
625
+ 80
626
+ ],
627
+ accounts: [
628
+ {
629
+ name: "reward_pool",
630
+ docs: [
631
+ "Reward Pool"
632
+ ],
633
+ writable: true
634
+ },
635
+ {
636
+ name: "stake_entry",
637
+ docs: [
638
+ "Stake Entry for which rewards are being claimed"
639
+ ]
640
+ },
641
+ {
642
+ name: "reward_entry",
643
+ docs: [
644
+ "Reward Entry that stores metadata about claimed rewards"
645
+ ],
646
+ writable: true,
647
+ pda: {
648
+ seeds: [
649
+ {
650
+ kind: "const",
651
+ value: [
652
+ 114,
653
+ 101,
654
+ 119,
655
+ 97,
656
+ 114,
657
+ 100,
658
+ 45,
659
+ 101,
660
+ 110,
661
+ 116,
662
+ 114,
663
+ 121
664
+ ]
665
+ },
666
+ {
667
+ kind: "account",
668
+ path: "reward_pool"
669
+ },
670
+ {
671
+ kind: "account",
672
+ path: "stake_entry"
673
+ }
674
+ ]
675
+ }
676
+ },
677
+ {
678
+ name: "vault",
679
+ docs: [
680
+ "Reward Pool Vault that stores tokens"
681
+ ],
682
+ writable: true,
683
+ relations: [
684
+ "reward_pool"
685
+ ]
686
+ },
687
+ {
688
+ name: "to",
689
+ docs: [
690
+ "Account to send the reward tokens to."
691
+ ],
692
+ writable: true
693
+ },
694
+ {
695
+ name: "claimant",
696
+ docs: [
697
+ "Who is claiming the tokens."
698
+ ],
699
+ writable: true,
700
+ signer: true
701
+ },
702
+ {
703
+ name: "mint",
704
+ docs: [
705
+ "The mint to claim."
706
+ ],
707
+ relations: [
708
+ "reward_pool"
709
+ ]
710
+ },
711
+ {
712
+ name: "token_program"
713
+ },
714
+ {
715
+ name: "system_program",
716
+ address: "11111111111111111111111111111111"
717
+ }
718
+ ],
719
+ args: []
720
+ },
721
+ {
722
+ name: "close_entry",
723
+ discriminator: [
724
+ 132,
725
+ 26,
726
+ 202,
727
+ 145,
728
+ 190,
729
+ 37,
730
+ 114,
731
+ 67
732
+ ],
733
+ accounts: [
734
+ {
735
+ name: "reward_pool",
736
+ docs: [
737
+ "Reward Pool"
738
+ ]
739
+ },
740
+ {
741
+ name: "stake_entry",
742
+ docs: [
743
+ "Stake Entry for which rewards are being claimed"
744
+ ]
745
+ },
746
+ {
747
+ name: "reward_entry",
748
+ docs: [
749
+ "Reward Entry that stores metadata about claimed rewards"
750
+ ],
751
+ writable: true,
752
+ pda: {
753
+ seeds: [
754
+ {
755
+ kind: "const",
756
+ value: [
757
+ 114,
758
+ 101,
759
+ 119,
760
+ 97,
761
+ 114,
762
+ 100,
763
+ 45,
764
+ 101,
765
+ 110,
766
+ 116,
767
+ 114,
768
+ 121
769
+ ]
770
+ },
771
+ {
772
+ kind: "account",
773
+ path: "reward_pool"
774
+ },
775
+ {
776
+ kind: "account",
777
+ path: "stake_entry"
778
+ }
779
+ ]
780
+ }
781
+ },
782
+ {
783
+ name: "authority",
784
+ writable: true,
785
+ signer: true
786
+ },
787
+ {
788
+ name: "system_program",
789
+ address: "11111111111111111111111111111111"
790
+ }
791
+ ],
792
+ args: []
793
+ },
794
+ {
795
+ name: "create_entry",
796
+ discriminator: [
797
+ 248,
798
+ 207,
799
+ 142,
800
+ 242,
801
+ 66,
802
+ 162,
803
+ 150,
804
+ 16
805
+ ],
806
+ accounts: [
807
+ {
808
+ name: "stake_pool",
809
+ docs: [
810
+ "Original Stake Pool"
811
+ ],
812
+ relations: [
813
+ "reward_pool",
814
+ "stake_entry"
815
+ ]
816
+ },
817
+ {
818
+ name: "reward_pool",
819
+ docs: [
820
+ "Reward Pool"
821
+ ]
822
+ },
823
+ {
824
+ name: "stake_entry",
825
+ docs: [
826
+ "Stake Entry for which rewards are being claimed"
827
+ ]
828
+ },
829
+ {
830
+ name: "reward_entry",
831
+ docs: [
832
+ "Reward Entry that stores metadata about claimed rewards"
833
+ ],
834
+ writable: true,
835
+ pda: {
836
+ seeds: [
837
+ {
838
+ kind: "const",
839
+ value: [
840
+ 114,
841
+ 101,
842
+ 119,
843
+ 97,
844
+ 114,
845
+ 100,
846
+ 45,
847
+ 101,
848
+ 110,
849
+ 116,
850
+ 114,
851
+ 121
852
+ ]
853
+ },
854
+ {
855
+ kind: "account",
856
+ path: "reward_pool"
857
+ },
858
+ {
859
+ kind: "account",
860
+ path: "stake_entry"
861
+ }
862
+ ]
863
+ }
864
+ },
865
+ {
866
+ name: "payer",
867
+ docs: [
868
+ "Rent payer"
869
+ ],
870
+ writable: true,
871
+ signer: true
872
+ },
873
+ {
874
+ name: "authority"
875
+ },
876
+ {
877
+ name: "system_program",
878
+ address: "11111111111111111111111111111111"
879
+ }
880
+ ],
881
+ args: []
882
+ },
883
+ {
884
+ name: "create_pool",
885
+ discriminator: [
886
+ 233,
887
+ 146,
888
+ 209,
889
+ 142,
890
+ 207,
891
+ 104,
892
+ 64,
893
+ 188
894
+ ],
895
+ accounts: [
896
+ {
897
+ name: "stake_pool",
898
+ docs: [
899
+ "Stake Pool to Which Reward Pool is being added"
900
+ ]
901
+ },
902
+ {
903
+ name: "reward_pool",
904
+ docs: [
905
+ "Reward Pool to add"
906
+ ],
907
+ writable: true,
908
+ pda: {
909
+ seeds: [
910
+ {
911
+ kind: "const",
912
+ value: [
913
+ 114,
914
+ 101,
915
+ 119,
916
+ 97,
917
+ 114,
918
+ 100,
919
+ 45,
920
+ 112,
921
+ 111,
922
+ 111,
923
+ 108
924
+ ]
925
+ },
926
+ {
927
+ kind: "account",
928
+ path: "stake_pool"
929
+ },
930
+ {
931
+ kind: "account",
932
+ path: "mint"
933
+ },
934
+ {
935
+ kind: "arg",
936
+ path: "nonce"
937
+ }
938
+ ]
939
+ }
940
+ },
941
+ {
942
+ name: "mint",
943
+ docs: [
944
+ "Mint used for rewards"
945
+ ]
946
+ },
947
+ {
948
+ name: "vault",
949
+ docs: [
950
+ "Escrow Account that will store the tokens"
951
+ ],
952
+ writable: true,
953
+ pda: {
954
+ seeds: [
955
+ {
956
+ kind: "const",
957
+ value: [
958
+ 114,
959
+ 101,
960
+ 119,
961
+ 97,
962
+ 114,
963
+ 100,
964
+ 45,
965
+ 118,
966
+ 97,
967
+ 117,
968
+ 108,
969
+ 116
970
+ ]
971
+ },
972
+ {
973
+ kind: "account",
974
+ path: "reward_pool"
975
+ }
976
+ ]
977
+ }
978
+ },
979
+ {
980
+ name: "creator",
981
+ docs: [
982
+ "Reward Pool creator"
983
+ ],
984
+ writable: true,
985
+ signer: true
986
+ },
987
+ {
988
+ name: "token_program"
989
+ },
990
+ {
991
+ name: "system_program",
992
+ address: "11111111111111111111111111111111"
993
+ }
994
+ ],
995
+ args: [
996
+ {
997
+ name: "nonce",
998
+ type: "u8"
999
+ },
1000
+ {
1001
+ name: "reward_amount",
1002
+ type: "u64"
1003
+ },
1004
+ {
1005
+ name: "reward_period",
1006
+ type: "u64"
1007
+ },
1008
+ {
1009
+ name: "permissionless",
1010
+ type: "bool"
1011
+ },
1012
+ {
1013
+ name: "last_claim_period_opt",
1014
+ type: {
1015
+ option: "u64"
1016
+ }
1017
+ }
1018
+ ]
1019
+ },
1020
+ {
1021
+ name: "fund_pool",
1022
+ discriminator: [
1023
+ 36,
1024
+ 57,
1025
+ 233,
1026
+ 176,
1027
+ 181,
1028
+ 20,
1029
+ 87,
1030
+ 159
1031
+ ],
1032
+ accounts: [
1033
+ {
1034
+ name: "funder",
1035
+ docs: [
1036
+ "Reward Pool funder"
1037
+ ],
1038
+ writable: true,
1039
+ signer: true
1040
+ },
1041
+ {
1042
+ name: "from",
1043
+ docs: [
1044
+ "Token Account from which tokens will be transferred"
1045
+ ],
1046
+ writable: true
1047
+ },
1048
+ {
1049
+ name: "vault",
1050
+ docs: [
1051
+ "Reward Pool Vault that stores tokens"
1052
+ ],
1053
+ writable: true,
1054
+ relations: [
1055
+ "reward_pool"
1056
+ ]
1057
+ },
1058
+ {
1059
+ name: "mint",
1060
+ docs: [
1061
+ "Mint of reward tokens"
1062
+ ],
1063
+ relations: [
1064
+ "reward_pool"
1065
+ ]
1066
+ },
1067
+ {
1068
+ name: "reward_pool",
1069
+ docs: [
1070
+ "Stake Pool"
1071
+ ],
1072
+ writable: true
1073
+ },
1074
+ {
1075
+ name: "streamflow_treasury",
1076
+ writable: true,
1077
+ address: "5SEpbdjFK5FxwTvfsGMXVQTD2v4M2c5tyRTxhdsPkgDw"
1078
+ },
1079
+ {
1080
+ name: "streamflow_treasury_tokens",
1081
+ writable: true,
1082
+ pda: {
1083
+ seeds: [
1084
+ {
1085
+ kind: "account",
1086
+ path: "streamflow_treasury"
1087
+ },
1088
+ {
1089
+ kind: "account",
1090
+ path: "token_program"
1091
+ },
1092
+ {
1093
+ kind: "account",
1094
+ path: "mint"
1095
+ }
1096
+ ],
1097
+ program: {
1098
+ kind: "const",
1099
+ value: [
1100
+ 140,
1101
+ 151,
1102
+ 37,
1103
+ 143,
1104
+ 78,
1105
+ 36,
1106
+ 137,
1107
+ 241,
1108
+ 187,
1109
+ 61,
1110
+ 16,
1111
+ 41,
1112
+ 20,
1113
+ 142,
1114
+ 13,
1115
+ 131,
1116
+ 11,
1117
+ 90,
1118
+ 19,
1119
+ 153,
1120
+ 218,
1121
+ 255,
1122
+ 16,
1123
+ 132,
1124
+ 4,
1125
+ 142,
1126
+ 123,
1127
+ 216,
1128
+ 219,
1129
+ 233,
1130
+ 248,
1131
+ 89
1132
+ ]
1133
+ }
1134
+ }
1135
+ },
1136
+ {
1137
+ name: "config",
1138
+ docs: [
1139
+ "Fee Configuration"
1140
+ ],
1141
+ pda: {
1142
+ seeds: [
1143
+ {
1144
+ kind: "const",
1145
+ value: [
1146
+ 99,
1147
+ 111,
1148
+ 110,
1149
+ 102,
1150
+ 105,
1151
+ 103
1152
+ ]
1153
+ }
1154
+ ],
1155
+ program: {
1156
+ kind: "account",
1157
+ path: "fee_program"
1158
+ }
1159
+ }
1160
+ },
1161
+ {
1162
+ name: "fee_value",
1163
+ docs: [
1164
+ "Fee Value for the funder account"
1165
+ ],
1166
+ optional: true,
1167
+ pda: {
1168
+ seeds: [
1169
+ {
1170
+ kind: "const",
1171
+ value: [
1172
+ 102,
1173
+ 101,
1174
+ 101,
1175
+ 45,
1176
+ 118,
1177
+ 97,
1178
+ 108,
1179
+ 117,
1180
+ 101
1181
+ ]
1182
+ },
1183
+ {
1184
+ kind: "account",
1185
+ path: "funder"
1186
+ }
1187
+ ],
1188
+ program: {
1189
+ kind: "account",
1190
+ path: "fee_program"
1191
+ }
1192
+ }
1193
+ },
1194
+ {
1195
+ name: "fee_program",
1196
+ address: "FEELzfBhsWXTNJX53zZcDVfRNoFYZQ6cZA3jLiGVL16V"
1197
+ },
1198
+ {
1199
+ name: "token_program"
1200
+ }
1201
+ ],
1202
+ args: [
1203
+ {
1204
+ name: "amount",
1205
+ type: "u64"
1206
+ }
1207
+ ]
1208
+ },
1209
+ {
1210
+ name: "update_pool",
1211
+ discriminator: [
1212
+ 239,
1213
+ 214,
1214
+ 170,
1215
+ 78,
1216
+ 36,
1217
+ 35,
1218
+ 30,
1219
+ 34
1220
+ ],
1221
+ accounts: [
1222
+ {
1223
+ name: "authority",
1224
+ docs: [
1225
+ "Current Authority"
1226
+ ],
1227
+ writable: true,
1228
+ signer: true,
1229
+ relations: [
1230
+ "reward_pool"
1231
+ ]
1232
+ },
1233
+ {
1234
+ name: "stake_pool",
1235
+ docs: [
1236
+ "Stake Pool to Which Reward Pool belongs"
1237
+ ],
1238
+ relations: [
1239
+ "reward_pool"
1240
+ ]
1241
+ },
1242
+ {
1243
+ name: "reward_pool",
1244
+ docs: [
1245
+ "Reward Pool"
1246
+ ],
1247
+ writable: true
1248
+ }
1249
+ ],
1250
+ args: [
1251
+ {
1252
+ name: "reward_amount",
1253
+ type: {
1254
+ option: "u64"
1255
+ }
1256
+ },
1257
+ {
1258
+ name: "reward_period",
1259
+ type: {
1260
+ option: "u64"
1261
+ }
1262
+ }
1263
+ ]
1264
+ }
1265
+ ],
1266
+ accounts: [
1267
+ {
1268
+ name: "Config",
1269
+ discriminator: [
1270
+ 155,
1271
+ 12,
1272
+ 170,
1273
+ 224,
1274
+ 30,
1275
+ 250,
1276
+ 204,
1277
+ 130
1278
+ ]
1279
+ },
1280
+ {
1281
+ name: "FeeValue",
1282
+ discriminator: [
1283
+ 10,
1284
+ 188,
1285
+ 89,
1286
+ 64,
1287
+ 4,
1288
+ 183,
1289
+ 231,
1290
+ 0
1291
+ ]
1292
+ },
1293
+ {
1294
+ name: "RewardEntry",
1295
+ discriminator: [
1296
+ 208,
1297
+ 191,
1298
+ 173,
1299
+ 14,
1300
+ 213,
1301
+ 84,
1302
+ 179,
1303
+ 162
1304
+ ]
1305
+ },
1306
+ {
1307
+ name: "RewardPool",
1308
+ discriminator: [
1309
+ 134,
1310
+ 121,
1311
+ 197,
1312
+ 211,
1313
+ 133,
1314
+ 154,
1315
+ 82,
1316
+ 32
1317
+ ]
1318
+ },
1319
+ {
1320
+ name: "StakeEntry",
1321
+ discriminator: [
1322
+ 187,
1323
+ 127,
1324
+ 9,
1325
+ 35,
1326
+ 155,
1327
+ 68,
1328
+ 86,
1329
+ 40
1330
+ ]
1331
+ },
1332
+ {
1333
+ name: "StakePool",
1334
+ discriminator: [
1335
+ 121,
1336
+ 34,
1337
+ 206,
1338
+ 21,
1339
+ 79,
1340
+ 127,
1341
+ 255,
1342
+ 28
1343
+ ]
1344
+ }
1345
+ ],
1346
+ errors: [
1347
+ {
1348
+ code: 6e3,
1349
+ name: "ArithmeticError",
1350
+ msg: "Arithmetic Error (overflow/underflow)"
1351
+ },
1352
+ {
1353
+ code: 6001,
1354
+ name: "InvalidRewardAmount",
1355
+ msg: "Reward amount should be more than 0"
1356
+ },
1357
+ {
1358
+ code: 6002,
1359
+ name: "InvalidRewardPeriod",
1360
+ msg: "Reward period should be more than 0"
1361
+ },
1362
+ {
1363
+ code: 6003,
1364
+ name: "Unauthorized",
1365
+ msg: "Account is not authorized to execute this instruction"
1366
+ },
1367
+ {
1368
+ code: 6004,
1369
+ name: "OwnerMismatch",
1370
+ msg: "Token account owner did not match intended owner"
1371
+ },
1372
+ {
1373
+ code: 6005,
1374
+ name: "InvalidRewardVault",
1375
+ msg: "Provided Reward Vault is Invalid"
1376
+ },
1377
+ {
1378
+ code: 6006,
1379
+ name: "InvalidRewardEntry",
1380
+ msg: "Provided Reward Entry is Invalid"
1381
+ },
1382
+ {
1383
+ code: 6007,
1384
+ name: "InvalidStakeEntry",
1385
+ msg: "Provided Stake Entry is Invalid"
1386
+ },
1387
+ {
1388
+ code: 6008,
1389
+ name: "InvalidRewardPool",
1390
+ msg: "Provided Reward Pool is Invalid"
1391
+ },
1392
+ {
1393
+ code: 6009,
1394
+ name: "InvalidMint",
1395
+ msg: "Invalid Mint"
1396
+ },
1397
+ {
1398
+ code: 6010,
1399
+ name: "StakeEntryClosed",
1400
+ msg: "Stake Entry is closed, rewards are not claimable anymore"
1401
+ },
1402
+ {
1403
+ code: 6011,
1404
+ name: "StakeEntryOpened",
1405
+ msg: "Stake Entry is still opened, closing is not possible"
1406
+ },
1407
+ {
1408
+ code: 6012,
1409
+ name: "RewardPoolDrained",
1410
+ msg: "Reward Pool does not have enough Rewards for Claiming"
1411
+ },
1412
+ {
1413
+ code: 6013,
1414
+ name: "UpdateTooSoon",
1415
+ msg: "Repeated update can not happen sooner than the stake pool max duration"
1416
+ },
1417
+ {
1418
+ code: 6014,
1419
+ name: "InvalidLastClaimPeriod",
1420
+ msg: "Invalid last claim period provided"
1421
+ }
1422
+ ],
1423
+ types: [
1424
+ {
1425
+ name: "Config",
1426
+ type: {
1427
+ kind: "struct",
1428
+ fields: [
1429
+ {
1430
+ name: "authority",
1431
+ docs: [
1432
+ "Fee Manager authority"
1433
+ ],
1434
+ type: "pubkey"
1435
+ },
1436
+ {
1437
+ name: "streamflow_fee",
1438
+ docs: [
1439
+ "Default fee"
1440
+ ],
1441
+ type: "u64"
1442
+ },
1443
+ {
1444
+ name: "_buffer_1",
1445
+ docs: [
1446
+ "Buffer for additional fields"
1447
+ ],
1448
+ type: {
1449
+ array: [
1450
+ "u8",
1451
+ 64
1452
+ ]
1453
+ }
1454
+ },
1455
+ {
1456
+ name: "_buffer_2",
1457
+ docs: [
1458
+ "Buffer for additional fields"
1459
+ ],
1460
+ type: {
1461
+ array: [
1462
+ "u8",
1463
+ 64
1464
+ ]
1465
+ }
1466
+ },
1467
+ {
1468
+ name: "_buffer_3",
1469
+ docs: [
1470
+ "Buffer for additional fields"
1471
+ ],
1472
+ type: {
1473
+ array: [
1474
+ "u8",
1475
+ 64
1476
+ ]
1477
+ }
1478
+ }
1479
+ ]
1480
+ }
1481
+ },
1482
+ {
1483
+ name: "FeeValue",
1484
+ type: {
1485
+ kind: "struct",
1486
+ fields: [
1487
+ {
1488
+ name: "streamflow_fee",
1489
+ type: "u64"
1490
+ },
1491
+ {
1492
+ name: "_buffer",
1493
+ docs: [
1494
+ "Buffer for additional fields"
1495
+ ],
1496
+ type: {
1497
+ array: [
1498
+ "u8",
1499
+ 64
1500
+ ]
1501
+ }
1502
+ }
1503
+ ]
1504
+ }
1505
+ },
1506
+ {
1507
+ name: "RewardEntry",
1508
+ type: {
1509
+ kind: "struct",
1510
+ fields: [
1511
+ {
1512
+ name: "reward_pool",
1513
+ docs: [
1514
+ "Reward Pool"
1515
+ ],
1516
+ type: "pubkey"
1517
+ },
1518
+ {
1519
+ name: "stake_entry",
1520
+ docs: [
1521
+ "Stake Entry for which reward entry was initialized"
1522
+ ],
1523
+ type: "pubkey"
1524
+ },
1525
+ {
1526
+ name: "created_ts",
1527
+ docs: [
1528
+ "Timestamp when reward entry has been created"
1529
+ ],
1530
+ type: "u64"
1531
+ },
1532
+ {
1533
+ name: "accounted_amount",
1534
+ docs: [
1535
+ "Sum of accounted amounts, used to correctly issue rewards in case of precision loss"
1536
+ ],
1537
+ type: "u128"
1538
+ },
1539
+ {
1540
+ name: "claimed_amount",
1541
+ docs: [
1542
+ "Sum of already claimed rewards"
1543
+ ],
1544
+ type: "u64"
1545
+ },
1546
+ {
1547
+ name: "last_accounted_ts",
1548
+ docs: [
1549
+ "Timestamp when rewards have been claimed last time"
1550
+ ],
1551
+ type: "u64"
1552
+ },
1553
+ {
1554
+ name: "last_reward_amount",
1555
+ docs: [
1556
+ "Reward amount used on last claim or entry creation"
1557
+ ],
1558
+ type: "u64"
1559
+ },
1560
+ {
1561
+ name: "last_reward_period",
1562
+ docs: [
1563
+ "Reward Period used on last claim or entry creation"
1564
+ ],
1565
+ type: "u64"
1566
+ },
1567
+ {
1568
+ name: "_buffer",
1569
+ docs: [
1570
+ "Buffer for additional fields"
1571
+ ],
1572
+ type: {
1573
+ array: [
1574
+ "u8",
1575
+ 32
1576
+ ]
1577
+ }
1578
+ }
1579
+ ]
1580
+ }
1581
+ },
1582
+ {
1583
+ name: "RewardPool",
1584
+ type: {
1585
+ kind: "struct",
1586
+ fields: [
1587
+ {
1588
+ name: "bump",
1589
+ docs: [
1590
+ "Bump Seed used to sign transactions"
1591
+ ],
1592
+ type: "u8"
1593
+ },
1594
+ {
1595
+ name: "nonce",
1596
+ docs: [
1597
+ "Nonce to differentiate pools for the same mint"
1598
+ ],
1599
+ type: "u8"
1600
+ },
1601
+ {
1602
+ name: "stake_pool",
1603
+ docs: [
1604
+ "Stake Pool for which Reward Pool was added"
1605
+ ],
1606
+ type: "pubkey"
1607
+ },
1608
+ {
1609
+ name: "mint",
1610
+ docs: [
1611
+ "Mint of Reward Pool"
1612
+ ],
1613
+ type: "pubkey"
1614
+ },
1615
+ {
1616
+ name: "creator",
1617
+ docs: [
1618
+ "Creator of the Pool"
1619
+ ],
1620
+ type: "pubkey"
1621
+ },
1622
+ {
1623
+ name: "authority",
1624
+ docs: [
1625
+ "Current authority"
1626
+ ],
1627
+ type: "pubkey"
1628
+ },
1629
+ {
1630
+ name: "reward_amount",
1631
+ docs: [
1632
+ "Amount of rewards that will be distributed per effective stake",
1633
+ "",
1634
+ "Should be a fraction of a raw token amount which is 1 / 10^9,",
1635
+ "i.e. `reward_amount` of `1_000_000_000` equals one raw token per effective stake"
1636
+ ],
1637
+ type: "u64"
1638
+ },
1639
+ {
1640
+ name: "reward_period",
1641
+ docs: [
1642
+ "Period of Rewards distribution in seconds"
1643
+ ],
1644
+ type: "u64"
1645
+ },
1646
+ {
1647
+ name: "permissionless",
1648
+ docs: [
1649
+ "Whether anyone can fund the Pool"
1650
+ ],
1651
+ type: "bool"
1652
+ },
1653
+ {
1654
+ name: "last_reward_amount",
1655
+ docs: [
1656
+ "`reward_amount` used before the last update"
1657
+ ],
1658
+ type: "u64"
1659
+ },
1660
+ {
1661
+ name: "last_reward_period",
1662
+ docs: [
1663
+ "`reward_period` used before the last update"
1664
+ ],
1665
+ type: "u64"
1666
+ },
1667
+ {
1668
+ name: "last_amount_update_ts",
1669
+ docs: [
1670
+ "Time when `reward_amount` was updated the last time"
1671
+ ],
1672
+ type: "u64"
1673
+ },
1674
+ {
1675
+ name: "last_period_update_ts",
1676
+ docs: [
1677
+ "Time when `reward_period` was updated the last time"
1678
+ ],
1679
+ type: "u64"
1680
+ },
1681
+ {
1682
+ name: "vault",
1683
+ docs: [
1684
+ "Escrow Account that stores reward tokens"
1685
+ ],
1686
+ type: "pubkey"
1687
+ },
1688
+ {
1689
+ name: "funded_amount",
1690
+ docs: [
1691
+ "Total funded amount"
1692
+ ],
1693
+ type: "u64"
1694
+ },
1695
+ {
1696
+ name: "claimed_amount",
1697
+ docs: [
1698
+ "Total number of rewards claimed"
1699
+ ],
1700
+ type: "u64"
1701
+ },
1702
+ {
1703
+ name: "created_ts",
1704
+ docs: [
1705
+ "Time when Reward Pool was created"
1706
+ ],
1707
+ type: "u64"
1708
+ },
1709
+ {
1710
+ name: "last_claim_period",
1711
+ docs: [
1712
+ "For how much seconds after unstake user should be able to claim rewards"
1713
+ ],
1714
+ type: "u64"
1715
+ },
1716
+ {
1717
+ name: "_buffer",
1718
+ docs: [
1719
+ "Buffer for additional fields"
1720
+ ],
1721
+ type: {
1722
+ array: [
1723
+ "u8",
1724
+ 48
1725
+ ]
1726
+ }
1727
+ }
1728
+ ]
1729
+ }
1730
+ },
1731
+ {
1732
+ name: "StakeEntry",
1733
+ type: {
1734
+ kind: "struct",
1735
+ fields: [
1736
+ {
1737
+ name: "nonce",
1738
+ docs: [
1739
+ "Nonce to differentiate stakes for the same pool"
1740
+ ],
1741
+ type: "u32"
1742
+ },
1743
+ {
1744
+ name: "stake_pool",
1745
+ docs: [
1746
+ "Stake Pool for which tokens were staked"
1747
+ ],
1748
+ type: "pubkey"
1749
+ },
1750
+ {
1751
+ name: "payer",
1752
+ docs: [
1753
+ "Original Owner of Staked tokens"
1754
+ ],
1755
+ type: "pubkey"
1756
+ },
1757
+ {
1758
+ name: "authority",
1759
+ docs: [
1760
+ "Authority of the Entry"
1761
+ ],
1762
+ type: "pubkey"
1763
+ },
1764
+ {
1765
+ name: "amount",
1766
+ docs: [
1767
+ "Amount of deposited funds"
1768
+ ],
1769
+ type: "u64"
1770
+ },
1771
+ {
1772
+ name: "duration",
1773
+ docs: [
1774
+ "Duration of the lockup"
1775
+ ],
1776
+ type: "u64"
1777
+ },
1778
+ {
1779
+ name: "effective_amount",
1780
+ docs: [
1781
+ "Effective Amount staked, does not equal to deposited amount, accounts for Stake Weight"
1782
+ ],
1783
+ type: "u128"
1784
+ },
1785
+ {
1786
+ name: "created_ts",
1787
+ docs: [
1788
+ "Timestamp when Deposit was made"
1789
+ ],
1790
+ type: "u64"
1791
+ },
1792
+ {
1793
+ name: "closed_ts",
1794
+ docs: [
1795
+ "Flag whether entry has been already unstaked"
1796
+ ],
1797
+ type: "u64"
1798
+ },
1799
+ {
1800
+ name: "_buffer",
1801
+ docs: [
1802
+ "Buffer for additional fields"
1803
+ ],
1804
+ type: {
1805
+ array: [
1806
+ "u8",
1807
+ 64
1808
+ ]
1809
+ }
1810
+ }
1811
+ ]
1812
+ }
1813
+ },
1814
+ {
1815
+ name: "StakePool",
1816
+ type: {
1817
+ kind: "struct",
1818
+ fields: [
1819
+ {
1820
+ name: "bump",
1821
+ docs: [
1822
+ "Bump Seed used to sign transactions"
1823
+ ],
1824
+ type: "u8"
1825
+ },
1826
+ {
1827
+ name: "nonce",
1828
+ docs: [
1829
+ "Nonce to differentiate pools for the same mint"
1830
+ ],
1831
+ type: "u8"
1832
+ },
1833
+ {
1834
+ name: "mint",
1835
+ docs: [
1836
+ "Mint of the Stake Pool"
1837
+ ],
1838
+ type: "pubkey"
1839
+ },
1840
+ {
1841
+ name: "creator",
1842
+ docs: [
1843
+ "Initial Creator"
1844
+ ],
1845
+ type: "pubkey"
1846
+ },
1847
+ {
1848
+ name: "authority",
1849
+ docs: [
1850
+ "Current authority"
1851
+ ],
1852
+ type: "pubkey"
1853
+ },
1854
+ {
1855
+ name: "min_weight",
1856
+ docs: [
1857
+ "The lowest weight awarded for staking, measured as a fraction of `1 / SCALE_FACTOR_BASE`.",
1858
+ "For instance:",
1859
+ "* `min_weight = 1 x SCALE_FACTOR_BASE` signifies a minimum multiplier of 1x for min staking duration",
1860
+ "* `min_weight = 2 x SCALE_FACTOR_BASE` indicates a minimum multiplier of 2x for min staking duration"
1861
+ ],
1862
+ type: "u64"
1863
+ },
1864
+ {
1865
+ name: "max_weight",
1866
+ docs: [
1867
+ "The highest weight awarded for staking, measured as a fraction of `1 / SCALE_FACTOR_BASE`.",
1868
+ "For instance:",
1869
+ "* `max_weight = 1 x SCALE_FACTOR_BASE` signifies a max multiplier of 1x for max staking duration",
1870
+ "* `max_weight = 2 x SCALE_FACTOR_BASE` indicates a max multiplier of 2x for max staking duration"
1871
+ ],
1872
+ type: "u64"
1873
+ },
1874
+ {
1875
+ name: "min_duration",
1876
+ docs: [
1877
+ "Min Duration of stake in seconds"
1878
+ ],
1879
+ type: "u64"
1880
+ },
1881
+ {
1882
+ name: "max_duration",
1883
+ docs: [
1884
+ "Max Duration of stake in seconds, the more duration, the more weight the stake has"
1885
+ ],
1886
+ type: "u64"
1887
+ },
1888
+ {
1889
+ name: "permissionless",
1890
+ docs: [
1891
+ "Whether anyone can add Reward Pools or just admin"
1892
+ ],
1893
+ type: "bool"
1894
+ },
1895
+ {
1896
+ name: "vault",
1897
+ docs: [
1898
+ "Escrow Account that stores staked tokens"
1899
+ ],
1900
+ type: "pubkey"
1901
+ },
1902
+ {
1903
+ name: "stake_mint",
1904
+ docs: [
1905
+ "Stake Mint, will be returned in exchange for stake tokens"
1906
+ ],
1907
+ type: "pubkey"
1908
+ },
1909
+ {
1910
+ name: "total_stake",
1911
+ docs: [
1912
+ "Total number of Staked tokens"
1913
+ ],
1914
+ type: "u64"
1915
+ },
1916
+ {
1917
+ name: "total_effective_stake",
1918
+ docs: [
1919
+ "Total staked tokens accounting for each stake weight, does not equal `total_stake`,",
1920
+ "represents a sum of effective stake multiplied by 10^9 for precision"
1921
+ ],
1922
+ type: "u128"
1923
+ },
1924
+ {
1925
+ name: "_buffer",
1926
+ docs: [
1927
+ "Buffer for additional fields"
1928
+ ],
1929
+ type: {
1930
+ array: [
1931
+ "u8",
1932
+ 64
1933
+ ]
1934
+ }
1935
+ }
1936
+ ]
1937
+ }
1938
+ }
1939
+ ]
1940
+ };
1941
+
1942
+ // solana/descriptor/idl/stake_pool.json
1943
+ var stake_pool_default = {
1944
+ address: "STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH",
1945
+ metadata: {
1946
+ name: "stake_pool",
1947
+ version: "2.1.1",
1948
+ spec: "0.1.0",
1949
+ description: "Program to manage Stake Pools and stake/unstake tokens"
1950
+ },
1951
+ instructions: [
1952
+ {
1953
+ name: "change_authority",
1954
+ discriminator: [
1955
+ 50,
1956
+ 106,
1957
+ 66,
1958
+ 104,
1959
+ 99,
1960
+ 118,
1961
+ 145,
1962
+ 88
1963
+ ],
1964
+ accounts: [
1965
+ {
1966
+ name: "stake_pool",
1967
+ docs: [
1968
+ "Stake Pool"
1969
+ ],
1970
+ writable: true
1971
+ },
1972
+ {
1973
+ name: "authority",
1974
+ docs: [
1975
+ "Current Authority"
1976
+ ],
1977
+ writable: true,
1978
+ signer: true
1979
+ },
1980
+ {
1981
+ name: "new_authority"
1982
+ }
1983
+ ],
1984
+ args: []
1985
+ },
1986
+ {
1987
+ name: "create_lookup_table",
1988
+ discriminator: [
1989
+ 74,
1990
+ 26,
1991
+ 45,
1992
+ 214,
1993
+ 23,
1994
+ 155,
1995
+ 143,
1996
+ 153
1997
+ ],
1998
+ accounts: [
1999
+ {
2000
+ name: "stake_pool",
2001
+ docs: [
2002
+ "Stake Pool"
2003
+ ]
2004
+ },
2005
+ {
2006
+ name: "lookup_table_link",
2007
+ docs: [
2008
+ "Link that will store address of the actual Lookup Table"
2009
+ ],
2010
+ writable: true,
2011
+ pda: {
2012
+ seeds: [
2013
+ {
2014
+ kind: "const",
2015
+ value: [
2016
+ 108,
2017
+ 111,
2018
+ 111,
2019
+ 107,
2020
+ 117,
2021
+ 112,
2022
+ 45,
2023
+ 116,
2024
+ 97,
2025
+ 98,
2026
+ 108,
2027
+ 101
2028
+ ]
2029
+ },
2030
+ {
2031
+ kind: "account",
2032
+ path: "stake_pool"
2033
+ },
2034
+ {
2035
+ kind: "account",
2036
+ path: "authority"
2037
+ },
2038
+ {
2039
+ kind: "arg",
2040
+ path: "nonce"
2041
+ }
2042
+ ]
2043
+ }
2044
+ },
2045
+ {
2046
+ name: "lookup_table",
2047
+ writable: true
2048
+ },
2049
+ {
2050
+ name: "lookup_table_program",
2051
+ address: "AddressLookupTab1e1111111111111111111111111"
2052
+ },
2053
+ {
2054
+ name: "payer",
2055
+ docs: [
2056
+ "Payer of the transaction"
2057
+ ],
2058
+ writable: true,
2059
+ signer: true
2060
+ },
2061
+ {
2062
+ name: "authority"
2063
+ },
2064
+ {
2065
+ name: "system_program",
2066
+ address: "11111111111111111111111111111111"
2067
+ }
2068
+ ],
2069
+ args: [
2070
+ {
2071
+ name: "nonce",
2072
+ type: "u32"
2073
+ },
2074
+ {
2075
+ name: "recent_slot",
2076
+ type: "u64"
2077
+ }
2078
+ ]
2079
+ },
2080
+ {
2081
+ name: "create_pool",
2082
+ discriminator: [
2083
+ 233,
2084
+ 146,
2085
+ 209,
2086
+ 142,
2087
+ 207,
2088
+ 104,
2089
+ 64,
2090
+ 188
2091
+ ],
2092
+ accounts: [
2093
+ {
2094
+ name: "stake_pool",
2095
+ writable: true,
2096
+ pda: {
2097
+ seeds: [
2098
+ {
2099
+ kind: "const",
2100
+ value: [
2101
+ 115,
2102
+ 116,
2103
+ 97,
2104
+ 107,
2105
+ 101,
2106
+ 45,
2107
+ 112,
2108
+ 111,
2109
+ 111,
2110
+ 108
2111
+ ]
2112
+ },
2113
+ {
2114
+ kind: "account",
2115
+ path: "mint"
2116
+ },
2117
+ {
2118
+ kind: "account",
2119
+ path: "creator"
2120
+ },
2121
+ {
2122
+ kind: "arg",
2123
+ path: "nonce"
2124
+ }
2125
+ ]
2126
+ }
2127
+ },
2128
+ {
2129
+ name: "mint",
2130
+ docs: [
2131
+ "Mint used for staking"
2132
+ ]
2133
+ },
2134
+ {
2135
+ name: "vault",
2136
+ writable: true,
2137
+ pda: {
2138
+ seeds: [
2139
+ {
2140
+ kind: "const",
2141
+ value: [
2142
+ 115,
2143
+ 116,
2144
+ 97,
2145
+ 107,
2146
+ 101,
2147
+ 45,
2148
+ 118,
2149
+ 97,
2150
+ 117,
2151
+ 108,
2152
+ 116
2153
+ ]
2154
+ },
2155
+ {
2156
+ kind: "account",
2157
+ path: "stake_pool"
2158
+ }
2159
+ ]
2160
+ }
2161
+ },
2162
+ {
2163
+ name: "stake_mint",
2164
+ writable: true,
2165
+ pda: {
2166
+ seeds: [
2167
+ {
2168
+ kind: "const",
2169
+ value: [
2170
+ 115,
2171
+ 116,
2172
+ 97,
2173
+ 107,
2174
+ 101,
2175
+ 45,
2176
+ 109,
2177
+ 105,
2178
+ 110,
2179
+ 116
2180
+ ]
2181
+ },
2182
+ {
2183
+ kind: "account",
2184
+ path: "stake_pool"
2185
+ }
2186
+ ]
2187
+ }
2188
+ },
2189
+ {
2190
+ name: "creator",
2191
+ docs: [
2192
+ "Stake Pool creator"
2193
+ ],
2194
+ writable: true,
2195
+ signer: true
2196
+ },
2197
+ {
2198
+ name: "token_program"
2199
+ },
2200
+ {
2201
+ name: "system_program",
2202
+ address: "11111111111111111111111111111111"
2203
+ }
2204
+ ],
2205
+ args: [
2206
+ {
2207
+ name: "nonce",
2208
+ type: "u8"
2209
+ },
2210
+ {
2211
+ name: "max_weight",
2212
+ type: "u64"
2213
+ },
2214
+ {
2215
+ name: "min_duration",
2216
+ type: "u64"
2217
+ },
2218
+ {
2219
+ name: "max_duration",
2220
+ type: "u64"
2221
+ },
2222
+ {
2223
+ name: "permissionless",
2224
+ type: "bool"
2225
+ },
2226
+ {
2227
+ name: "freeze_stake_mint",
2228
+ type: {
2229
+ option: "bool"
2230
+ }
2231
+ },
2232
+ {
2233
+ name: "unstake_period",
2234
+ type: {
2235
+ option: "u64"
2236
+ }
2237
+ }
2238
+ ]
2239
+ },
2240
+ {
2241
+ name: "migrate_entry",
2242
+ discriminator: [
2243
+ 239,
2244
+ 154,
2245
+ 55,
2246
+ 173,
2247
+ 110,
2248
+ 36,
2249
+ 188,
2250
+ 214
2251
+ ],
2252
+ accounts: [
2253
+ {
2254
+ name: "stake_pool_from",
2255
+ docs: [
2256
+ "Stake Pool"
2257
+ ],
2258
+ writable: true,
2259
+ address: "Cja9f8JFS6sTgBqSRZGBrA2HDbUj4MZUGdtRYruKTeJp"
2260
+ },
2261
+ {
2262
+ name: "stake_pool_to",
2263
+ docs: [
2264
+ "Stake Pool"
2265
+ ],
2266
+ writable: true,
2267
+ address: "BXRBbWMkscNBZoBL4fgRk77GBUX9eVP4AendQEumtPi8"
2268
+ },
2269
+ {
2270
+ name: "stake_entry_from",
2271
+ docs: [
2272
+ "Entry that will store Stake Metadata"
2273
+ ],
2274
+ writable: true,
2275
+ pda: {
2276
+ seeds: [
2277
+ {
2278
+ kind: "const",
2279
+ value: [
2280
+ 115,
2281
+ 116,
2282
+ 97,
2283
+ 107,
2284
+ 101,
2285
+ 45,
2286
+ 101,
2287
+ 110,
2288
+ 116,
2289
+ 114,
2290
+ 121
2291
+ ]
2292
+ },
2293
+ {
2294
+ kind: "account",
2295
+ path: "stake_pool_from"
2296
+ },
2297
+ {
2298
+ kind: "account",
2299
+ path: "authority"
2300
+ },
2301
+ {
2302
+ kind: "arg",
2303
+ path: "nonce"
2304
+ }
2305
+ ]
2306
+ }
2307
+ },
2308
+ {
2309
+ name: "stake_entry_to",
2310
+ docs: [
2311
+ "Entry that will store Stake Metadata"
2312
+ ],
2313
+ writable: true,
2314
+ pda: {
2315
+ seeds: [
2316
+ {
2317
+ kind: "const",
2318
+ value: [
2319
+ 115,
2320
+ 116,
2321
+ 97,
2322
+ 107,
2323
+ 101,
2324
+ 45,
2325
+ 101,
2326
+ 110,
2327
+ 116,
2328
+ 114,
2329
+ 121
2330
+ ]
2331
+ },
2332
+ {
2333
+ kind: "account",
2334
+ path: "stake_pool_to"
2335
+ },
2336
+ {
2337
+ kind: "account",
2338
+ path: "authority"
2339
+ },
2340
+ {
2341
+ kind: "arg",
2342
+ path: "new_nonce"
2343
+ }
2344
+ ]
2345
+ }
2346
+ },
2347
+ {
2348
+ name: "vault_from",
2349
+ docs: [
2350
+ "Stake Pool Vault that stores staked tokens"
2351
+ ],
2352
+ writable: true
2353
+ },
2354
+ {
2355
+ name: "vault_to",
2356
+ docs: [
2357
+ "Stake Pool Vault that stores staked tokens"
2358
+ ],
2359
+ writable: true
2360
+ },
2361
+ {
2362
+ name: "to",
2363
+ docs: [
2364
+ "Token Account to transfer Stake Mint tokens to"
2365
+ ],
2366
+ writable: true
2367
+ },
2368
+ {
2369
+ name: "payer",
2370
+ docs: [
2371
+ "Owner of the Token Account from which tokens will be staked"
2372
+ ],
2373
+ writable: true,
2374
+ signer: true
2375
+ },
2376
+ {
2377
+ name: "authority"
2378
+ },
2379
+ {
2380
+ name: "mint",
2381
+ docs: [
2382
+ "Original mint of staked tokens"
2383
+ ],
2384
+ writable: true,
2385
+ relations: [
2386
+ "stake_pool_from",
2387
+ "stake_pool_to"
2388
+ ]
2389
+ },
2390
+ {
2391
+ name: "stake_mint_from",
2392
+ docs: [
2393
+ "Mint of stake tokens that will be minted in return for staking"
2394
+ ],
2395
+ writable: true
2396
+ },
2397
+ {
2398
+ name: "stake_mint_to",
2399
+ docs: [
2400
+ "Mint of stake tokens that will be minted in return for staking"
2401
+ ],
2402
+ writable: true
2403
+ },
2404
+ {
2405
+ name: "token_program"
2406
+ },
2407
+ {
2408
+ name: "system_program",
2409
+ address: "11111111111111111111111111111111"
2410
+ }
2411
+ ],
2412
+ args: [
2413
+ {
2414
+ name: "nonce",
2415
+ type: "u32"
2416
+ },
2417
+ {
2418
+ name: "new_nonce",
2419
+ type: "u32"
2420
+ }
2421
+ ]
2422
+ },
2423
+ {
2424
+ name: "request_unstake",
2425
+ discriminator: [
2426
+ 44,
2427
+ 154,
2428
+ 110,
2429
+ 253,
2430
+ 160,
2431
+ 202,
2432
+ 54,
2433
+ 34
2434
+ ],
2435
+ accounts: [
2436
+ {
2437
+ name: "stake_pool",
2438
+ writable: true,
2439
+ relations: [
2440
+ "stake_entry"
2441
+ ]
2442
+ },
2443
+ {
2444
+ name: "stake_entry",
2445
+ docs: [
2446
+ "Entry that stores Stake Metadata"
2447
+ ],
2448
+ writable: true
2449
+ },
2450
+ {
2451
+ name: "authority",
2452
+ docs: [
2453
+ "Stake Entry Authority"
2454
+ ],
2455
+ writable: true,
2456
+ signer: true
2457
+ }
2458
+ ],
2459
+ args: []
2460
+ },
2461
+ {
2462
+ name: "set_token_metadata_spl",
2463
+ discriminator: [
2464
+ 244,
2465
+ 162,
2466
+ 227,
2467
+ 218,
2468
+ 129,
2469
+ 5,
2470
+ 25,
2471
+ 253
2472
+ ],
2473
+ accounts: [
2474
+ {
2475
+ name: "authority",
2476
+ docs: [
2477
+ "Stake Pool Authority"
2478
+ ],
2479
+ signer: true,
2480
+ relations: [
2481
+ "stake_pool"
2482
+ ]
2483
+ },
2484
+ {
2485
+ name: "stake_pool"
2486
+ },
2487
+ {
2488
+ name: "stake_mint",
2489
+ relations: [
2490
+ "stake_pool"
2491
+ ]
2492
+ },
2493
+ {
2494
+ name: "metadata_account",
2495
+ writable: true,
2496
+ pda: {
2497
+ seeds: [
2498
+ {
2499
+ kind: "const",
2500
+ value: [
2501
+ 109,
2502
+ 101,
2503
+ 116,
2504
+ 97,
2505
+ 100,
2506
+ 97,
2507
+ 116,
2508
+ 97
2509
+ ]
2510
+ },
2511
+ {
2512
+ kind: "account",
2513
+ path: "metadata_program"
2514
+ },
2515
+ {
2516
+ kind: "account",
2517
+ path: "stake_mint"
2518
+ }
2519
+ ],
2520
+ program: {
2521
+ kind: "account",
2522
+ path: "metadata_program"
2523
+ }
2524
+ }
2525
+ },
2526
+ {
2527
+ name: "metadata_program",
2528
+ docs: [
2529
+ "MPL Program"
2530
+ ],
2531
+ address: "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
2532
+ },
2533
+ {
2534
+ name: "token_program",
2535
+ address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
2536
+ },
2537
+ {
2538
+ name: "rent",
2539
+ address: "SysvarRent111111111111111111111111111111111"
2540
+ },
2541
+ {
2542
+ name: "system_program",
2543
+ address: "11111111111111111111111111111111"
2544
+ }
2545
+ ],
2546
+ args: [
2547
+ {
2548
+ name: "name",
2549
+ type: "string"
2550
+ },
2551
+ {
2552
+ name: "symbol",
2553
+ type: "string"
2554
+ },
2555
+ {
2556
+ name: "uri",
2557
+ type: "string"
2558
+ }
2559
+ ]
2560
+ },
2561
+ {
2562
+ name: "set_token_metadata_t22",
2563
+ discriminator: [
2564
+ 239,
2565
+ 134,
2566
+ 91,
2567
+ 83,
2568
+ 196,
2569
+ 57,
2570
+ 120,
2571
+ 106
2572
+ ],
2573
+ accounts: [
2574
+ {
2575
+ name: "authority",
2576
+ docs: [
2577
+ "Stake Pool Authority"
2578
+ ],
2579
+ signer: true,
2580
+ relations: [
2581
+ "stake_pool"
2582
+ ]
2583
+ },
2584
+ {
2585
+ name: "stake_pool"
2586
+ },
2587
+ {
2588
+ name: "stake_mint",
2589
+ writable: true,
2590
+ relations: [
2591
+ "stake_pool"
2592
+ ]
2593
+ },
2594
+ {
2595
+ name: "token_program",
2596
+ address: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
2597
+ },
2598
+ {
2599
+ name: "system_program",
2600
+ address: "11111111111111111111111111111111"
2601
+ }
2602
+ ],
2603
+ args: [
2604
+ {
2605
+ name: "name",
2606
+ type: "string"
2607
+ },
2608
+ {
2609
+ name: "symbol",
2610
+ type: "string"
2611
+ },
2612
+ {
2613
+ name: "uri",
2614
+ type: "string"
2615
+ }
2616
+ ]
2617
+ },
2618
+ {
2619
+ name: "stake",
2620
+ discriminator: [
2621
+ 206,
2622
+ 176,
2623
+ 202,
2624
+ 18,
2625
+ 200,
2626
+ 209,
2627
+ 179,
2628
+ 108
2629
+ ],
2630
+ accounts: [
2631
+ {
2632
+ name: "stake_pool",
2633
+ docs: [
2634
+ "Stake Pool"
2635
+ ],
2636
+ writable: true
2637
+ },
2638
+ {
2639
+ name: "stake_entry",
2640
+ docs: [
2641
+ "Entry that will store Stake Metadata"
2642
+ ],
2643
+ writable: true,
2644
+ pda: {
2645
+ seeds: [
2646
+ {
2647
+ kind: "const",
2648
+ value: [
2649
+ 115,
2650
+ 116,
2651
+ 97,
2652
+ 107,
2653
+ 101,
2654
+ 45,
2655
+ 101,
2656
+ 110,
2657
+ 116,
2658
+ 114,
2659
+ 121
2660
+ ]
2661
+ },
2662
+ {
2663
+ kind: "account",
2664
+ path: "stake_pool"
2665
+ },
2666
+ {
2667
+ kind: "account",
2668
+ path: "authority"
2669
+ },
2670
+ {
2671
+ kind: "arg",
2672
+ path: "nonce"
2673
+ }
2674
+ ]
2675
+ }
2676
+ },
2677
+ {
2678
+ name: "from",
2679
+ docs: [
2680
+ "Token Account from which stake tokens will be transferred"
2681
+ ],
2682
+ writable: true
2683
+ },
2684
+ {
2685
+ name: "vault",
2686
+ docs: [
2687
+ "Stake Pool Vault that stores staked tokens"
2688
+ ],
2689
+ writable: true,
2690
+ relations: [
2691
+ "stake_pool"
2692
+ ]
2693
+ },
2694
+ {
2695
+ name: "to",
2696
+ docs: [
2697
+ "Token Account to transfer Stake Mint tokens to"
2698
+ ],
2699
+ writable: true
2700
+ },
2701
+ {
2702
+ name: "payer",
2703
+ docs: [
2704
+ "Owner of the Token Account from which tokens will be staked"
2705
+ ],
2706
+ writable: true,
2707
+ signer: true
2708
+ },
2709
+ {
2710
+ name: "authority"
2711
+ },
2712
+ {
2713
+ name: "mint",
2714
+ docs: [
2715
+ "Original mint of staked tokens"
2716
+ ],
2717
+ writable: true,
2718
+ relations: [
2719
+ "stake_pool"
2720
+ ]
2721
+ },
2722
+ {
2723
+ name: "stake_mint",
2724
+ docs: [
2725
+ "Mint of stake tokens that will be minted in return for staking"
2726
+ ],
2727
+ writable: true,
2728
+ relations: [
2729
+ "stake_pool"
2730
+ ]
2731
+ },
2732
+ {
2733
+ name: "token_program"
2734
+ },
2735
+ {
2736
+ name: "system_program",
2737
+ address: "11111111111111111111111111111111"
2738
+ }
2739
+ ],
2740
+ args: [
2741
+ {
2742
+ name: "nonce",
2743
+ type: "u32"
2744
+ },
2745
+ {
2746
+ name: "amount",
2747
+ type: "u64"
2748
+ },
2749
+ {
2750
+ name: "duration",
2751
+ type: "u64"
2752
+ }
2753
+ ]
2754
+ },
2755
+ {
2756
+ name: "unstake",
2757
+ discriminator: [
2758
+ 90,
2759
+ 95,
2760
+ 107,
2761
+ 42,
2762
+ 205,
2763
+ 124,
2764
+ 50,
2765
+ 225
2766
+ ],
2767
+ accounts: [
2768
+ {
2769
+ name: "stake_pool",
2770
+ writable: true,
2771
+ relations: [
2772
+ "stake_entry"
2773
+ ]
2774
+ },
2775
+ {
2776
+ name: "stake_entry",
2777
+ docs: [
2778
+ "Entry that stores Stake Metadata"
2779
+ ],
2780
+ writable: true
2781
+ },
2782
+ {
2783
+ name: "from",
2784
+ docs: [
2785
+ "Stake Mint Token account"
2786
+ ],
2787
+ writable: true
2788
+ },
2789
+ {
2790
+ name: "vault",
2791
+ docs: [
2792
+ "Escrow Account that stores Staked tokens"
2793
+ ],
2794
+ writable: true,
2795
+ relations: [
2796
+ "stake_pool"
2797
+ ]
2798
+ },
2799
+ {
2800
+ name: "to",
2801
+ docs: [
2802
+ "Token account to withdraw Staked tokens to"
2803
+ ],
2804
+ writable: true
2805
+ },
2806
+ {
2807
+ name: "authority",
2808
+ docs: [
2809
+ "Stake Entry Authority"
2810
+ ],
2811
+ writable: true,
2812
+ signer: true
2813
+ },
2814
+ {
2815
+ name: "mint",
2816
+ docs: [
2817
+ "Original mint of staked tokens"
2818
+ ],
2819
+ writable: true,
2820
+ relations: [
2821
+ "stake_pool"
2822
+ ]
2823
+ },
2824
+ {
2825
+ name: "stake_mint",
2826
+ docs: [
2827
+ "Stake Mint used to exchanged Staked tokens to"
2828
+ ],
2829
+ writable: true,
2830
+ relations: [
2831
+ "stake_pool"
2832
+ ]
2833
+ },
2834
+ {
2835
+ name: "token_program"
2836
+ }
2837
+ ],
2838
+ args: []
2839
+ }
2840
+ ],
2841
+ accounts: [
2842
+ {
2843
+ name: "LookupTableLink",
2844
+ discriminator: [
2845
+ 133,
2846
+ 88,
2847
+ 187,
2848
+ 141,
2849
+ 1,
2850
+ 53,
2851
+ 72,
2852
+ 236
2853
+ ]
2854
+ },
2855
+ {
2856
+ name: "StakeEntry",
2857
+ discriminator: [
2858
+ 187,
2859
+ 127,
2860
+ 9,
2861
+ 35,
2862
+ 155,
2863
+ 68,
2864
+ 86,
2865
+ 40
2866
+ ]
2867
+ },
2868
+ {
2869
+ name: "StakePool",
2870
+ discriminator: [
2871
+ 121,
2872
+ 34,
2873
+ 206,
2874
+ 21,
2875
+ 79,
2876
+ 127,
2877
+ 255,
2878
+ 28
2879
+ ]
2880
+ }
2881
+ ],
2882
+ errors: [
2883
+ {
2884
+ code: 6e3,
2885
+ name: "InvalidDuration",
2886
+ msg: "Minimum duration must be less than the maximum"
2887
+ },
2888
+ {
2889
+ code: 6001,
2890
+ name: "InvalidWeight",
2891
+ msg: "Weight should be more than minimum"
2892
+ },
2893
+ {
2894
+ code: 6002,
2895
+ name: "DurationTooShort",
2896
+ msg: "Duration of staking can't be less than minimum duration of the pool"
2897
+ },
2898
+ {
2899
+ code: 6003,
2900
+ name: "InvalidStakeAmount",
2901
+ msg: "Stake amount should be more than 0"
2902
+ },
2903
+ {
2904
+ code: 6004,
2905
+ name: "ArithmeticError",
2906
+ msg: "Arithmetic Error (overflow/underflow)"
2907
+ },
2908
+ {
2909
+ code: 6005,
2910
+ name: "Unauthorized",
2911
+ msg: "Account is not authorized to execute this instruction"
2912
+ },
2913
+ {
2914
+ code: 6006,
2915
+ name: "OwnerMismatch",
2916
+ msg: "Token account owner did not match intended owner"
2917
+ },
2918
+ {
2919
+ code: 6007,
2920
+ name: "InvalidMint",
2921
+ msg: "Provided Mint does not equal the Pool Mint"
2922
+ },
2923
+ {
2924
+ code: 6008,
2925
+ name: "InvalidStakeVault",
2926
+ msg: "Provided Stake Vault does not equal the Pool Vault"
2927
+ },
2928
+ {
2929
+ code: 6009,
2930
+ name: "InvalidStakeMint",
2931
+ msg: "Provided Stake Mint does not equal the Pool Stake Mint"
2932
+ },
2933
+ {
2934
+ code: 6010,
2935
+ name: "InvalidStakePool",
2936
+ msg: "Provided Stake Pool does not equal the Entry Stake Pool"
2937
+ },
2938
+ {
2939
+ code: 6011,
2940
+ name: "InvalidPoolMint",
2941
+ msg: "Provided Mint does not equal the Pool Mint"
2942
+ },
2943
+ {
2944
+ code: 6012,
2945
+ name: "ClosedStake",
2946
+ msg: "Stake Entry is already closed and can't be used"
2947
+ },
2948
+ {
2949
+ code: 6013,
2950
+ name: "LockedStake",
2951
+ msg: "Stake is locked, unstake is not possible"
2952
+ },
2953
+ {
2954
+ code: 6014,
2955
+ name: "UnsupportedTokenExtensions",
2956
+ msg: "Mint has unsupported Token Extensions"
2957
+ },
2958
+ {
2959
+ code: 6015,
2960
+ name: "UnstakeRequestNotRequired",
2961
+ msg: "Unstake request is not required"
2962
+ },
2963
+ {
2964
+ code: 6016,
2965
+ name: "UnstakeRequestRequired",
2966
+ msg: "Stake pool has unstake period, request is required prior to unstake"
2967
+ },
2968
+ {
2969
+ code: 6017,
2970
+ name: "UnstakeTooEarly",
2971
+ msg: "Unstake is not possible until unstake period has passed"
2972
+ }
2973
+ ],
2974
+ types: [
2975
+ {
2976
+ name: "LookupTableLink",
2977
+ type: {
2978
+ kind: "struct",
2979
+ fields: [
2980
+ {
2981
+ name: "nonce",
2982
+ docs: [
2983
+ "Nonce to differentiate lookup tables for the same stake pool"
2984
+ ],
2985
+ type: "u32"
2986
+ },
2987
+ {
2988
+ name: "stake_pool",
2989
+ docs: [
2990
+ "Stake Pool for which tokens were staked"
2991
+ ],
2992
+ type: "pubkey"
2993
+ },
2994
+ {
2995
+ name: "authority",
2996
+ docs: [
2997
+ "Authority of the Entry"
2998
+ ],
2999
+ type: "pubkey"
3000
+ },
3001
+ {
3002
+ name: "lookup_table",
3003
+ docs: [
3004
+ "Pubkey of the address lookup table"
3005
+ ],
3006
+ type: "pubkey"
3007
+ },
3008
+ {
3009
+ name: "_buffer",
3010
+ docs: [
3011
+ "Buffer for additional fields"
3012
+ ],
3013
+ type: {
3014
+ array: [
3015
+ "u8",
3016
+ 64
3017
+ ]
3018
+ }
3019
+ }
3020
+ ]
3021
+ }
3022
+ },
3023
+ {
3024
+ name: "StakeEntry",
3025
+ type: {
3026
+ kind: "struct",
3027
+ fields: [
3028
+ {
3029
+ name: "nonce",
3030
+ docs: [
3031
+ "Nonce to differentiate stakes for the same pool"
3032
+ ],
3033
+ type: "u32"
3034
+ },
3035
+ {
3036
+ name: "stake_pool",
3037
+ docs: [
3038
+ "Stake Pool for which tokens were staked"
3039
+ ],
3040
+ type: "pubkey"
3041
+ },
3042
+ {
3043
+ name: "payer",
3044
+ docs: [
3045
+ "Original Owner of Staked tokens"
3046
+ ],
3047
+ type: "pubkey"
3048
+ },
3049
+ {
3050
+ name: "authority",
3051
+ docs: [
3052
+ "Authority of the Entry"
3053
+ ],
3054
+ type: "pubkey"
3055
+ },
3056
+ {
3057
+ name: "amount",
3058
+ docs: [
3059
+ "Amount of deposited funds"
3060
+ ],
3061
+ type: "u64"
3062
+ },
3063
+ {
3064
+ name: "duration",
3065
+ docs: [
3066
+ "Duration of the lockup"
3067
+ ],
3068
+ type: "u64"
3069
+ },
3070
+ {
3071
+ name: "effective_amount",
3072
+ docs: [
3073
+ "Effective Amount staked, does not equal to deposited amount, accounts for Stake Weight"
3074
+ ],
3075
+ type: "u128"
3076
+ },
3077
+ {
3078
+ name: "created_ts",
3079
+ docs: [
3080
+ "Timestamp when Deposit was made"
3081
+ ],
3082
+ type: "u64"
3083
+ },
3084
+ {
3085
+ name: "closed_ts",
3086
+ docs: [
3087
+ "Timestamp when entry has been closed"
3088
+ ],
3089
+ type: "u64"
3090
+ },
3091
+ {
3092
+ name: "prior_total_effective_stake",
3093
+ docs: [
3094
+ "Total effective stake at the time of staking"
3095
+ ],
3096
+ type: "u128"
3097
+ },
3098
+ {
3099
+ name: "unstake_ts",
3100
+ docs: [
3101
+ "Timestamp when unstake was requested, will be used in case `unstake_period` is set"
3102
+ ],
3103
+ type: "u64"
3104
+ },
3105
+ {
3106
+ name: "_buffer",
3107
+ docs: [
3108
+ "Buffer for additional fields"
3109
+ ],
3110
+ type: {
3111
+ array: [
3112
+ "u8",
3113
+ 40
3114
+ ]
3115
+ }
3116
+ }
3117
+ ]
3118
+ }
3119
+ },
3120
+ {
3121
+ name: "StakePool",
3122
+ type: {
3123
+ kind: "struct",
3124
+ fields: [
3125
+ {
3126
+ name: "bump",
3127
+ docs: [
3128
+ "Bump Seed used to sign transactions"
3129
+ ],
3130
+ type: "u8"
3131
+ },
3132
+ {
3133
+ name: "nonce",
3134
+ docs: [
3135
+ "Nonce to differentiate pools for the same mint"
3136
+ ],
3137
+ type: "u8"
3138
+ },
3139
+ {
3140
+ name: "mint",
3141
+ docs: [
3142
+ "Mint of the Stake Pool"
3143
+ ],
3144
+ type: "pubkey"
3145
+ },
3146
+ {
3147
+ name: "creator",
3148
+ docs: [
3149
+ "Initial Creator"
3150
+ ],
3151
+ type: "pubkey"
3152
+ },
3153
+ {
3154
+ name: "authority",
3155
+ docs: [
3156
+ "Current authority"
3157
+ ],
3158
+ type: "pubkey"
3159
+ },
3160
+ {
3161
+ name: "min_weight",
3162
+ docs: [
3163
+ "The lowest weight awarded for staking, measured as a fraction of `1 / SCALE_FACTOR_BASE`.",
3164
+ "For instance:",
3165
+ "* `min_weight = 1 x SCALE_FACTOR_BASE` signifies a minimum multiplier of 1x for min staking duration",
3166
+ "* `min_weight = 2 x SCALE_FACTOR_BASE` indicates a minimum multiplier of 2x for min staking duration"
3167
+ ],
3168
+ type: "u64"
3169
+ },
3170
+ {
3171
+ name: "max_weight",
3172
+ docs: [
3173
+ "The highest weight awarded for staking, measured as a fraction of `1 / SCALE_FACTOR_BASE`.",
3174
+ "For instance:",
3175
+ "* `max_weight = 1 x SCALE_FACTOR_BASE` signifies a max multiplier of 1x for max staking duration",
3176
+ "* `max_weight = 2 x SCALE_FACTOR_BASE` indicates a max multiplier of 2x for max staking duration"
3177
+ ],
3178
+ type: "u64"
3179
+ },
3180
+ {
3181
+ name: "min_duration",
3182
+ docs: [
3183
+ "Min Duration of stake in seconds"
3184
+ ],
3185
+ type: "u64"
3186
+ },
3187
+ {
3188
+ name: "max_duration",
3189
+ docs: [
3190
+ "Max Duration of stake in seconds, the more duration, the more weight the stake has"
3191
+ ],
3192
+ type: "u64"
3193
+ },
3194
+ {
3195
+ name: "permissionless",
3196
+ docs: [
3197
+ "Whether anyone can add Reward Pools or just admin"
3198
+ ],
3199
+ type: "bool"
3200
+ },
3201
+ {
3202
+ name: "vault",
3203
+ docs: [
3204
+ "Escrow Account that stores staked tokens"
3205
+ ],
3206
+ type: "pubkey"
3207
+ },
3208
+ {
3209
+ name: "stake_mint",
3210
+ docs: [
3211
+ "Stake Mint, will be returned in exchange for stake tokens"
3212
+ ],
3213
+ type: "pubkey"
3214
+ },
3215
+ {
3216
+ name: "total_stake",
3217
+ docs: [
3218
+ "Total number of Staked tokens"
3219
+ ],
3220
+ type: "u64"
3221
+ },
3222
+ {
3223
+ name: "total_effective_stake",
3224
+ docs: [
3225
+ "Total staked tokens accounting for each stake weight, does not equal `total_stake`,",
3226
+ "represents a sum of effective stake multiplied by 10^9 for precision"
3227
+ ],
3228
+ type: "u128"
3229
+ },
3230
+ {
3231
+ name: "freeze_stake_mint",
3232
+ docs: [
3233
+ "Whether we should freeze stake mint token accounts"
3234
+ ],
3235
+ type: "bool"
3236
+ },
3237
+ {
3238
+ name: "unstake_period",
3239
+ docs: [
3240
+ "Period for unstaking, if set unstake at first should be requested, and the real unstake can only happen after this period"
3241
+ ],
3242
+ type: "u64"
3243
+ },
3244
+ {
3245
+ name: "_buffer",
3246
+ docs: [
3247
+ "Buffer for additional fields"
3248
+ ],
3249
+ type: {
3250
+ array: [
3251
+ "u8",
3252
+ 55
3253
+ ]
3254
+ }
3255
+ }
3256
+ ]
3257
+ }
3258
+ }
3259
+ ]
3260
+ };
3261
+ var deriveStakePoolPDA = (programId, mint, authority, nonce) => {
3262
+ return web3_js.PublicKey.findProgramAddressSync(
3263
+ [STAKE_POOL_PREFIX, mint.toBuffer(), authority.toBuffer(), new BN4__default.default(nonce).toArrayLike(Buffer, "le", 1)],
3264
+ programId
3265
+ )[0];
3266
+ };
3267
+ var deriveStakeVaultPDA = (programId, stakePool) => {
3268
+ return web3_js.PublicKey.findProgramAddressSync([STAKE_VAULT_PREFIX, stakePool.toBuffer()], programId)[0];
3269
+ };
3270
+ var deriveStakeMintPDA = (programId, stakePool) => {
3271
+ return web3_js.PublicKey.findProgramAddressSync([STAKE_MINT_PREFIX, stakePool.toBuffer()], programId)[0];
3272
+ };
3273
+ var deriveStakeEntryPDA = (programId, stakePool, authority, nonce) => {
3274
+ return web3_js.PublicKey.findProgramAddressSync(
3275
+ [STAKE_ENTRY_PREFIX, stakePool.toBuffer(), authority.toBuffer(), new BN4__default.default(nonce).toArrayLike(Buffer, "le", 4)],
3276
+ programId
3277
+ )[0];
3278
+ };
3279
+ var deriveRewardPoolPDA = (programId, stakePool, mint, nonce) => {
3280
+ return web3_js.PublicKey.findProgramAddressSync(
3281
+ [REWARD_POOL_PREFIX, stakePool.toBuffer(), mint.toBuffer(), new BN4__default.default(nonce).toArrayLike(Buffer, "le", 1)],
3282
+ programId
3283
+ )[0];
3284
+ };
3285
+ var deriveRewardVaultPDA = (programId, rewardPool) => {
3286
+ return web3_js.PublicKey.findProgramAddressSync([REWARD_VAULT_PREFIX, rewardPool.toBuffer()], programId)[0];
3287
+ };
3288
+ var deriveRewardEntryPDA = (programId, rewardPool, stakeEntry) => {
3289
+ return web3_js.PublicKey.findProgramAddressSync(
3290
+ [REWARD_ENTRY_PREFIX, rewardPool.toBuffer(), stakeEntry.toBuffer()],
3291
+ programId
3292
+ )[0];
3293
+ };
3294
+ var deriveConfigPDA = (programId) => {
3295
+ return web3_js.PublicKey.findProgramAddressSync([CONFIG_PREFIX], programId)[0];
3296
+ };
3297
+ var deriveFeeValuePDA = (programId, target) => {
3298
+ return web3_js.PublicKey.findProgramAddressSync([FEE_VALUE_PREFIX, target.toBuffer()], programId)[0];
3299
+ };
3300
+
3301
+ // solana/client.ts
3302
+ var SolanaStakingClient = class {
3303
+ constructor({
3304
+ clusterUrl,
3305
+ cluster = common.ICluster.Mainnet,
3306
+ commitment = "confirmed",
3307
+ programIds,
3308
+ sendRate = 1,
3309
+ sendThrottler
3310
+ }) {
3311
+ this.cluster = cluster;
3312
+ this.commitment = commitment;
3313
+ this.connection = new web3_js.Connection(clusterUrl, this.commitment);
3314
+ this.sendThrottler = sendThrottler ?? solana.buildSendThrottler(sendRate);
3315
+ const stakePoolIdl = {
3316
+ ...stake_pool_default,
3317
+ address: programIds?.stakePool ?? STAKE_POOL_PROGRAM_ID[cluster] ?? stake_pool_default.address
3318
+ };
3319
+ const rewardPoolIdl = {
3320
+ ...reward_pool_default,
3321
+ address: programIds?.rewardPool ?? REWARD_POOL_PROGRAM_ID[cluster] ?? reward_pool_default.address
3322
+ };
3323
+ const feeManagerIdl = {
3324
+ ...fee_manager_default,
3325
+ address: programIds?.feeManager ?? fee_manager_default.address
3326
+ };
3327
+ this.programs = {
3328
+ stakePoolProgram: new anchor.Program(stakePoolIdl, {
3329
+ connection: this.connection
3330
+ }),
3331
+ rewardPoolProgram: new anchor.Program(rewardPoolIdl, {
3332
+ connection: this.connection
3333
+ }),
3334
+ feeManagerProgram: new anchor.Program(feeManagerIdl, {
3335
+ connection: this.connection
3336
+ })
3337
+ };
3338
+ }
3339
+ getCurrentProgramId(programKey) {
3340
+ const program = this.programs[programKey];
3341
+ common.invariant(program, `Program ${programKey} is not found`);
3342
+ return program.programId;
3343
+ }
3344
+ getCommitment() {
3345
+ return typeof this.commitment == "string" ? this.commitment : this.commitment.commitment;
3346
+ }
3347
+ async getStakePool(id) {
3348
+ const { stakePoolProgram } = this.programs;
3349
+ return stakePoolProgram.account.stakePool.fetch(id);
3350
+ }
3351
+ async searchStakePools(criteria = {}) {
3352
+ const { stakePoolProgram } = this.programs;
3353
+ return stakePoolProgram.account.stakePool.all(solana.getFilters(criteria, STAKE_POOL_BYTE_OFFSETS));
3354
+ }
3355
+ async getStakeEntry(id) {
3356
+ const { stakePoolProgram } = this.programs;
3357
+ return stakePoolProgram.account.stakeEntry.fetch(id);
3358
+ }
3359
+ async searchStakeEntries(criteria = {}) {
3360
+ const { stakePoolProgram } = this.programs;
3361
+ return stakePoolProgram.account.stakeEntry.all(solana.getFilters(criteria, STAKE_ENTRY_BYTE_OFFSETS));
3362
+ }
3363
+ async searchRewardPools(criteria = {}) {
3364
+ const { rewardPoolProgram } = this.programs;
3365
+ return rewardPoolProgram.account.rewardPool.all(solana.getFilters(criteria, REWARD_POOL_BYTE_OFFSETS));
3366
+ }
3367
+ async searchRewardEntries(criteria) {
3368
+ const { rewardPoolProgram } = this.programs;
3369
+ return rewardPoolProgram.account.rewardEntry.all(solana.getFilters(criteria, REWARD_ENTRY_BYTE_OFFSETS));
3370
+ }
3371
+ async getFee(target) {
3372
+ const perTargetFee = await this.getFeeValueIfExists(target);
3373
+ if (perTargetFee) {
3374
+ return perTargetFee;
3375
+ }
3376
+ return this.getDefaultFeeValue();
3377
+ }
3378
+ getDefaultFeeValue() {
3379
+ const { feeManagerProgram } = this.programs;
3380
+ const feeValueKey = deriveConfigPDA(feeManagerProgram.programId);
3381
+ return feeManagerProgram.account.config.fetch(feeValueKey);
3382
+ }
3383
+ getFeeValueIfExists(target) {
3384
+ const { feeManagerProgram } = this.programs;
3385
+ const feeValueKey = deriveFeeValuePDA(feeManagerProgram.programId, new web3_js.PublicKey(target));
3386
+ return feeManagerProgram.account.feeValue.fetchNullable(feeValueKey);
3387
+ }
3388
+ async createStakePool(data, extParams) {
3389
+ const { ixs, publicKey } = await this.prepareCreateStakePoolInstructions(data, extParams);
3390
+ const { signature } = await this.execute(ixs, extParams);
3391
+ return {
3392
+ ixs,
3393
+ txId: signature,
3394
+ metadataId: publicKey
3395
+ };
3396
+ }
3397
+ async prepareCreateStakePoolInstructions({
3398
+ maxWeight,
3399
+ maxDuration,
3400
+ minDuration,
3401
+ mint,
3402
+ permissionless = false,
3403
+ freezeStakeMint = null,
3404
+ unstakePeriod = null,
3405
+ nonce,
3406
+ tokenProgramId = splToken.TOKEN_PROGRAM_ID
3407
+ }, extParams) {
3408
+ const { stakePoolProgram } = this.programs;
3409
+ const creator = extParams.invoker.publicKey;
3410
+ common.invariant(creator, "Undefined invoker publicKey");
3411
+ const createInstruction = await stakePoolProgram.methods.createPool(nonce, maxWeight, minDuration, maxDuration, permissionless, freezeStakeMint, unstakePeriod).accounts({
3412
+ creator,
3413
+ mint,
3414
+ tokenProgram: tokenProgramId
3415
+ }).instruction();
3416
+ const stakePoolPDA = deriveStakePoolPDA(stakePoolProgram.programId, solana.pk(mint), creator, nonce);
3417
+ return { ixs: [createInstruction], publicKey: stakePoolPDA };
3418
+ }
3419
+ async stake(data, extParams) {
3420
+ const { ixs } = await this.prepareStakeInstructions(data, extParams);
3421
+ const { signature } = await this.execute(ixs, extParams);
3422
+ return {
3423
+ ixs,
3424
+ txId: signature
3425
+ };
3426
+ }
3427
+ async prepareStakeInstructions({ nonce, amount, duration, stakePool, stakePoolMint, tokenProgramId = splToken.TOKEN_PROGRAM_ID }, extParams) {
3428
+ const { stakePoolProgram } = this.programs;
3429
+ const staker = extParams.invoker.publicKey;
3430
+ common.invariant(staker, "Undefined invoker publicKey");
3431
+ const mint = deriveStakeMintPDA(stakePoolProgram.programId, solana.pk(stakePool));
3432
+ const stakeMintAccountKey = splToken.getAssociatedTokenAddressSync(mint, staker, true, solana.pk(tokenProgramId));
3433
+ const poolMintAccountKey = splToken.getAssociatedTokenAddressSync(solana.pk(stakePoolMint), staker, true, solana.pk(tokenProgramId));
3434
+ const instruction = await stakePoolProgram.methods.stake(nonce, amount, duration).accounts({
3435
+ stakePool,
3436
+ tokenProgram: tokenProgramId,
3437
+ from: poolMintAccountKey,
3438
+ to: stakeMintAccountKey,
3439
+ authority: staker,
3440
+ payer: staker
3441
+ }).instruction();
3442
+ return { ixs: [instruction] };
3443
+ }
3444
+ async unstake(data, extParams) {
3445
+ const { ixs } = await this.prepareUnstakeInstructions(data, extParams);
3446
+ const { signature } = await this.execute(ixs, extParams);
3447
+ return {
3448
+ ixs,
3449
+ txId: signature
3450
+ };
3451
+ }
3452
+ async prepareUnstakeInstructions({ stakePool, stakePoolMint, nonce, tokenProgramId = splToken.TOKEN_PROGRAM_ID }, extParams) {
3453
+ const { stakePoolProgram } = this.programs;
3454
+ const staker = extParams.invoker.publicKey;
3455
+ common.invariant(staker, "Undefined invoker publicKey");
3456
+ const stakeMintKey = deriveStakeMintPDA(stakePoolProgram.programId, solana.pk(stakePool));
3457
+ const stakeEntryKey = deriveStakeEntryPDA(stakePoolProgram.programId, solana.pk(stakePool), staker, nonce);
3458
+ const poolMintAccountKey = splToken.getAssociatedTokenAddressSync(solana.pk(stakePoolMint), staker, true, solana.pk(tokenProgramId));
3459
+ const stakeMintAccountKey = splToken.getAssociatedTokenAddressSync(stakeMintKey, staker, true, solana.pk(tokenProgramId));
3460
+ const instruction = await stakePoolProgram.methods.unstake().accounts({
3461
+ stakeEntry: stakeEntryKey,
3462
+ to: poolMintAccountKey,
3463
+ from: stakeMintAccountKey,
3464
+ authority: staker,
3465
+ tokenProgram: tokenProgramId
3466
+ }).instruction();
3467
+ return { ixs: [instruction] };
3468
+ }
3469
+ async createRewardPool(data, extParams) {
3470
+ const { ixs, publicKey } = await this.prepareCreateRewardPoolInstructions(data, extParams);
3471
+ const { signature } = await this.execute(ixs, extParams);
3472
+ return {
3473
+ ixs,
3474
+ txId: signature,
3475
+ metadataId: publicKey
3476
+ };
3477
+ }
3478
+ async prepareCreateRewardPoolInstructions({
3479
+ nonce,
3480
+ rewardAmount,
3481
+ rewardPeriod,
3482
+ rewardMint,
3483
+ permissionless = false,
3484
+ stakePool,
3485
+ lastClaimPeriodOpt,
3486
+ tokenProgramId = splToken.TOKEN_PROGRAM_ID
3487
+ }, extParams) {
3488
+ const { rewardPoolProgram } = this.programs;
3489
+ const creator = extParams.invoker.publicKey;
3490
+ common.invariant(creator, "Undefined invoker publicKey");
3491
+ const instruction = await rewardPoolProgram.methods.createPool(nonce, rewardAmount, rewardPeriod, permissionless, lastClaimPeriodOpt).accounts({
3492
+ creator,
3493
+ stakePool,
3494
+ mint: rewardMint,
3495
+ tokenProgram: tokenProgramId
3496
+ }).instruction();
3497
+ const rewardPoolKey = deriveRewardPoolPDA(rewardPoolProgram.programId, solana.pk(stakePool), solana.pk(rewardMint), nonce);
3498
+ return { publicKey: rewardPoolKey, ixs: [instruction] };
3499
+ }
3500
+ async claimRewards(data, extParams) {
3501
+ const { ixs } = await this.prepareClaimRewardsInstructions(data, extParams);
3502
+ const { signature } = await this.execute(ixs, extParams);
3503
+ return {
3504
+ ixs,
3505
+ txId: signature
3506
+ };
3507
+ }
3508
+ async prepareClaimRewardsInstructions({ rewardPoolNonce, depositNonce, stakePool, tokenProgramId = splToken.TOKEN_PROGRAM_ID, rewardMint }, extParams) {
3509
+ const { stakePoolProgram, rewardPoolProgram } = this.programs;
3510
+ const staker = extParams.invoker.publicKey;
3511
+ common.invariant(staker, "Undefined invoker publicKey");
3512
+ const instruction = await rewardPoolProgram.methods.claimRewards().accounts({
3513
+ stakeEntry: deriveStakeEntryPDA(stakePoolProgram.programId, solana.pk(stakePool), staker, depositNonce),
3514
+ rewardPool: deriveRewardPoolPDA(rewardPoolProgram.programId, solana.pk(stakePool), solana.pk(rewardMint), rewardPoolNonce),
3515
+ claimant: staker,
3516
+ tokenProgram: tokenProgramId,
3517
+ to: splToken.getAssociatedTokenAddressSync(solana.pk(rewardMint), staker, true, solana.pk(tokenProgramId))
3518
+ }).instruction();
3519
+ return { ixs: [instruction] };
3520
+ }
3521
+ async fundPool(data, extParams) {
3522
+ const { ixs } = await this.prepareFundPoolInstructions(data, extParams);
3523
+ const { signature } = await this.execute(ixs, extParams);
3524
+ return {
3525
+ ixs,
3526
+ txId: signature
3527
+ };
3528
+ }
3529
+ async prepareFundPoolInstructions({ amount, tokenProgramId = splToken.TOKEN_PROGRAM_ID, rewardMint, stakePool, feeValue, nonce }, extParams) {
3530
+ const { rewardPoolProgram } = this.programs;
3531
+ const staker = extParams.invoker.publicKey;
3532
+ common.invariant(staker, "Undefined invoker publicKey");
3533
+ const existingFee = await this.getFeeValueIfExists(staker);
3534
+ const rewardMintPk = solana.pk(rewardMint);
3535
+ const tokenProgramPk = solana.pk(tokenProgramId);
3536
+ const treasuryATA = !existingFee || existingFee.streamflowFee.gtn(0) ? await solana.checkOrCreateAtaBatch(
3537
+ this.connection,
3538
+ [STREAMFLOW_TREASURY_PUBLIC_KEY],
3539
+ rewardMintPk,
3540
+ extParams.invoker,
3541
+ tokenProgramPk
3542
+ ) : null;
3543
+ const rewardPoolPda = deriveRewardPoolPDA(rewardPoolProgram.programId, solana.pk(stakePool), rewardMintPk, nonce);
3544
+ const instruction = await rewardPoolProgram.methods.fundPool(amount).accountsPartial({
3545
+ funder: staker,
3546
+ rewardPool: rewardPoolPda,
3547
+ from: splToken.getAssociatedTokenAddressSync(rewardMintPk, staker, true, tokenProgramPk),
3548
+ tokenProgram: tokenProgramId,
3549
+ vault: deriveRewardVaultPDA(rewardPoolProgram.programId, rewardPoolPda),
3550
+ mint: rewardMint,
3551
+ feeValue
3552
+ }).instruction();
3553
+ return { ixs: treasuryATA ? treasuryATA.concat([instruction]) : [instruction] };
3554
+ }
3555
+ async createRewardEntry(data, extParams) {
3556
+ const { ixs } = await this.prepareCreateRewardEntryInstructions(data, extParams);
3557
+ const { signature } = await this.execute(ixs, extParams);
3558
+ return {
3559
+ ixs,
3560
+ txId: signature
3561
+ };
3562
+ }
3563
+ async prepareCreateRewardEntryInstructions({ stakePool, rewardPoolNonce, depositNonce, rewardMint }, extParams) {
3564
+ const { stakePoolProgram, rewardPoolProgram } = this.programs;
3565
+ const staker = extParams.invoker.publicKey;
3566
+ common.invariant(staker, "Undefined invoker publicKey");
3567
+ const instruction = await rewardPoolProgram.methods.createEntry().accounts({
3568
+ payer: staker,
3569
+ authority: staker,
3570
+ stakeEntry: deriveStakeEntryPDA(stakePoolProgram.programId, solana.pk(stakePool), staker, depositNonce),
3571
+ rewardPool: deriveRewardPoolPDA(rewardPoolProgram.programId, solana.pk(stakePool), solana.pk(rewardMint), rewardPoolNonce)
3572
+ }).instruction();
3573
+ return { ixs: [instruction] };
3574
+ }
3575
+ async updateRewardPool(data, extParams) {
3576
+ const { ixs } = await this.prepareUpdateRewardPoolInstructions(data, extParams);
3577
+ const { signature } = await this.execute(ixs, extParams);
3578
+ return {
3579
+ ixs,
3580
+ txId: signature
3581
+ };
3582
+ }
3583
+ async prepareUpdateRewardPoolInstructions({ rewardPool, rewardAmount, rewardPeriod, stakePool }, extParams) {
3584
+ const { rewardPoolProgram } = this.programs;
3585
+ const invoker = extParams.invoker.publicKey;
3586
+ common.invariant(invoker, "Undefined invoker publicKey");
3587
+ const instruction = await rewardPoolProgram.methods.updatePool(rewardAmount, rewardPeriod).accountsPartial({
3588
+ stakePool,
3589
+ authority: invoker,
3590
+ rewardPool
3591
+ }).instruction();
3592
+ return { ixs: [instruction] };
3593
+ }
3594
+ decode(programKey, accountName, accInfo) {
3595
+ const decodingProgram = this.programs[programKey];
3596
+ common.invariant(decodingProgram, `Decoding program with key ${programKey} is not available`);
3597
+ return decodingProgram.coder.accounts.decode(accountName.toString(), accInfo);
3598
+ }
3599
+ getDiscriminator(programKey, accountName) {
3600
+ const decodingProgram = this.programs[programKey];
3601
+ common.invariant(decodingProgram, `Decoding program with key ${programKey} is not available`);
3602
+ const accountEntity = decodingProgram.idl.accounts.find((acc) => acc.name === accountName);
3603
+ common.invariant(
3604
+ accountEntity,
3605
+ `Decoding program with key ${programKey} doesn't specify account with name ${accountName.toString()}`
3606
+ );
3607
+ return accountEntity.discriminator;
3608
+ }
3609
+ async execute(ixs, extParams) {
3610
+ const { tx, hash, context } = await solana.prepareTransaction(
3611
+ this.connection,
3612
+ solana.prepareBaseInstructions(this.connection, extParams).concat(ixs),
3613
+ extParams.invoker.publicKey
3614
+ );
3615
+ try {
3616
+ const signature = await solana.signAndExecuteTransaction(
3617
+ this.connection,
3618
+ extParams.invoker,
3619
+ tx,
3620
+ {
3621
+ hash,
3622
+ context,
3623
+ commitment: this.getCommitment()
3624
+ },
3625
+ { sendThrottler: this.sendThrottler }
3626
+ );
3627
+ return { signature };
3628
+ } catch (err) {
3629
+ if (err instanceof Error) {
3630
+ const parsed = anchor.translateError(
3631
+ err,
3632
+ anchor.parseIdlErrors(this.programs.stakePoolProgram.idl)
3633
+ // TODO how to catch an error from a specific program?
3634
+ );
3635
+ if (parsed) {
3636
+ throw new common.ContractError(err, parsed.name, parsed.message);
3637
+ }
3638
+ }
3639
+ throw err;
3640
+ }
3641
+ }
3642
+ };
3643
+ var RewardEntryAccumulator = class {
3644
+ constructor(lastAccountedTs, claimedAmount, accountedAmount, rewardPool, stakeEntry, createdTs, lastRewardAmount, lastRewardPeriod, buffer) {
3645
+ this.lastAccountedTs = lastAccountedTs;
3646
+ this.claimedAmount = claimedAmount;
3647
+ this.accountedAmount = accountedAmount;
3648
+ this.rewardPool = rewardPool;
3649
+ this.stakeEntry = stakeEntry;
3650
+ this.createdTs = createdTs;
3651
+ this.buffer = buffer;
3652
+ this.lastRewardAmount = lastRewardAmount;
3653
+ this.lastRewardPeriod = lastRewardPeriod;
3654
+ }
3655
+ static fromEntry(entry) {
3656
+ return new this(
3657
+ entry.lastAccountedTs,
3658
+ entry.claimedAmount,
3659
+ entry.accountedAmount,
3660
+ entry.rewardPool,
3661
+ entry.stakeEntry,
3662
+ entry.createdTs,
3663
+ entry.lastRewardAmount,
3664
+ entry.lastRewardPeriod,
3665
+ entry.buffer
3666
+ );
3667
+ }
3668
+ // Calculate accountable amount by calculating how many seconds have passed since last claim/stake time
3669
+ getAccountableAmount(stakedTs, accountableTs, effectiveStakedAmount, rewardAmount, rewardPeriod) {
3670
+ const lastAccountedTs = this.lastAccountedTs.gt(new BN4__default.default(0)) ? this.lastAccountedTs : stakedTs;
3671
+ const secondsPassed = accountableTs.sub(lastAccountedTs);
3672
+ if (secondsPassed.lt(rewardPeriod)) {
3673
+ return new BN4__default.default(0);
3674
+ }
3675
+ const periodsPassed = secondsPassed.div(rewardPeriod);
3676
+ const claimablePerEffectiveStake = periodsPassed.mul(rewardAmount);
3677
+ return claimablePerEffectiveStake.mul(effectiveStakedAmount).div(SCALE_PRECISION_FACTOR_BN);
3678
+ }
3679
+ // Calculates claimable amount from accountable amount.
3680
+ getClaimableAmount() {
3681
+ const claimedAmount = this.claimedAmount.mul(REWARD_AMOUNT_PRECISION_FACTOR_BN);
3682
+ const nonClaimedAmount = this.accountedAmount.sub(claimedAmount);
3683
+ return nonClaimedAmount.div(REWARD_AMOUNT_PRECISION_FACTOR_BN);
3684
+ }
3685
+ // Get the time of the last unlock
3686
+ getLastAccountedTs(stakedTs, claimableTs, rewardPeriod) {
3687
+ const lastAccountedTs = this.lastAccountedTs.gtn(0) ? this.lastAccountedTs : stakedTs;
3688
+ const totalSecondsPassed = claimableTs.sub(lastAccountedTs);
3689
+ const periodsPassed = totalSecondsPassed.div(rewardPeriod);
3690
+ const periodsToSeconds = periodsPassed.mul(rewardPeriod);
3691
+ return lastAccountedTs.add(periodsToSeconds);
3692
+ }
3693
+ // Adds accounted amount
3694
+ addAccountedAmount(accountedAmount) {
3695
+ this.accountedAmount = this.accountedAmount.add(accountedAmount);
3696
+ }
3697
+ // Adds claimed amount
3698
+ addClaimedAmount(claimedAmount) {
3699
+ this.claimedAmount = this.claimedAmount.add(claimedAmount);
3700
+ }
3701
+ };
3702
+ var createDefaultRewardEntry = (stakeEntry, rewardPool) => {
3703
+ return {
3704
+ stakeEntry: new web3_js.PublicKey(stakeEntry.publicKey),
3705
+ rewardPool: new web3_js.PublicKey(rewardPool.publicKey),
3706
+ createdTs: stakeEntry.account.createdTs,
3707
+ lastAccountedTs: new BN4__default.default(0),
3708
+ lastRewardAmount: new BN4__default.default(0),
3709
+ lastRewardPeriod: new BN4__default.default(0),
3710
+ accountedAmount: new BN4__default.default(0),
3711
+ claimedAmount: new BN4__default.default(0),
3712
+ buffer: []
3713
+ };
3714
+ };
3715
+ var calcRewards = (rewardEntryAccount, stakeEntryAccount, rewardPoolAccount) => {
3716
+ const rewardEntry = rewardEntryAccount?.account ?? createDefaultRewardEntry(stakeEntryAccount, rewardPoolAccount);
3717
+ const stakeEntry = stakeEntryAccount.account;
3718
+ const rewardPool = rewardPoolAccount.account;
3719
+ const rewardEntryAccumulator = RewardEntryAccumulator.fromEntry(rewardEntry);
3720
+ if (rewardEntryAccumulator.createdTs.lt(stakeEntry.createdTs)) {
3721
+ throw new Error("InvalidRewardEntry");
3722
+ }
3723
+ const currTs = Math.floor(Date.now() / 1e3);
3724
+ const stakedTs = rewardPool.createdTs ? BN4__default.default.max(stakeEntry.createdTs, rewardPool.createdTs) : stakeEntry.createdTs;
3725
+ const claimableTs = stakeEntry.closedTs.gtn(0) ? stakeEntry.closedTs : new BN4__default.default(currTs);
3726
+ const amountUpdated = !rewardPool.rewardAmount.eq(rewardPool.lastRewardAmount) && rewardPool.lastAmountUpdateTs.gt(stakeEntry.createdTs) && rewardPool.lastAmountUpdateTs.gt(stakeEntry.closedTs);
3727
+ const periodUpdated = !rewardPool.rewardPeriod.eq(rewardPool.lastRewardPeriod) && rewardPool.lastPeriodUpdateTs.gt(stakeEntry.createdTs) && rewardPool.lastPeriodUpdateTs.gt(stakeEntry.closedTs);
3728
+ if (amountUpdated || periodUpdated) {
3729
+ let firstUpdateTs, secondUpdateTs, rewardAmount, rewardPeriod;
3730
+ if (amountUpdated && periodUpdated) {
3731
+ if (rewardPool.lastAmountUpdateTs.lt(rewardPool.lastPeriodUpdateTs)) {
3732
+ firstUpdateTs = rewardPool.lastAmountUpdateTs;
3733
+ secondUpdateTs = rewardPool.lastPeriodUpdateTs;
3734
+ rewardAmount = rewardPool.rewardAmount;
3735
+ rewardPeriod = rewardEntryAccumulator.lastRewardPeriod;
3736
+ } else {
3737
+ firstUpdateTs = rewardPool.lastPeriodUpdateTs;
3738
+ secondUpdateTs = rewardPool.lastAmountUpdateTs;
3739
+ rewardAmount = rewardEntryAccumulator.lastRewardAmount;
3740
+ rewardPeriod = rewardPool.rewardPeriod;
3741
+ }
3742
+ } else if (amountUpdated) {
3743
+ firstUpdateTs = new BN4__default.default(0);
3744
+ secondUpdateTs = rewardPool.lastAmountUpdateTs;
3745
+ rewardAmount = rewardEntryAccumulator.lastRewardAmount;
3746
+ rewardPeriod = rewardEntryAccumulator.lastRewardPeriod;
3747
+ } else {
3748
+ firstUpdateTs = new BN4__default.default(0);
3749
+ secondUpdateTs = rewardPool.lastPeriodUpdateTs;
3750
+ rewardAmount = rewardEntryAccumulator.lastRewardAmount;
3751
+ rewardPeriod = rewardEntryAccumulator.lastRewardPeriod;
3752
+ }
3753
+ if (firstUpdateTs.gtn(0)) {
3754
+ const firstAccountableAmount = rewardEntryAccumulator.getAccountableAmount(
3755
+ stakedTs,
3756
+ firstUpdateTs,
3757
+ stakeEntry.effectiveAmount,
3758
+ rewardEntryAccumulator.lastRewardAmount,
3759
+ rewardEntryAccumulator.lastRewardPeriod
3760
+ );
3761
+ rewardEntryAccumulator.addAccountedAmount(firstAccountableAmount);
3762
+ rewardEntryAccumulator.lastAccountedTs = rewardEntryAccumulator.getLastAccountedTs(
3763
+ stakedTs,
3764
+ firstUpdateTs,
3765
+ rewardPool.lastRewardPeriod
3766
+ );
3767
+ }
3768
+ const secondAccountableAmount = rewardEntryAccumulator.getAccountableAmount(
3769
+ stakedTs,
3770
+ secondUpdateTs,
3771
+ stakeEntry.effectiveAmount,
3772
+ rewardAmount,
3773
+ rewardPeriod
3774
+ );
3775
+ rewardEntryAccumulator.addAccountedAmount(secondAccountableAmount);
3776
+ rewardEntryAccumulator.lastAccountedTs = rewardEntryAccumulator.getLastAccountedTs(
3777
+ stakedTs,
3778
+ secondUpdateTs,
3779
+ rewardPeriod
3780
+ );
3781
+ }
3782
+ const accountableAmount = rewardEntryAccumulator.getAccountableAmount(
3783
+ stakedTs,
3784
+ claimableTs,
3785
+ stakeEntry.effectiveAmount,
3786
+ rewardPool.rewardAmount,
3787
+ rewardPool.rewardPeriod
3788
+ );
3789
+ rewardEntryAccumulator.addAccountedAmount(accountableAmount);
3790
+ return rewardEntryAccumulator.getClaimableAmount();
3791
+ };
3792
+ var calculateRewardRateFromAmount = (rewardAmount, stakeTokenDecimals, rewardTokenDecimals) => {
3793
+ const decimals = rewardTokenDecimals + (REWARD_AMOUNT_DECIMALS - stakeTokenDecimals);
3794
+ return common.getNumberFromBN(rewardAmount, decimals);
3795
+ };
3796
+ var calculateRewardAmountFromValue = (rewardTokenValue, stakeTokenDecimals) => {
3797
+ const decimalsDiff = REWARD_AMOUNT_DECIMALS - stakeTokenDecimals;
3798
+ if (decimalsDiff === 0) {
3799
+ return rewardTokenValue;
3800
+ }
3801
+ const diffFactor = new BN4__default.default(10).pow(new BN4__default.default(Math.abs(decimalsDiff)));
3802
+ if (decimalsDiff > 0) {
3803
+ return rewardTokenValue.mul(diffFactor);
3804
+ }
3805
+ return rewardTokenValue.div(diffFactor);
3806
+ };
3807
+ var calculateRewardAmountFromRate = (rewardRate, stakeTokenDecimals, rewardTokenDecimals) => {
3808
+ return calculateRewardAmountFromValue(common.getBN(rewardRate, rewardTokenDecimals), stakeTokenDecimals);
3809
+ };
3810
+ var calculateFeeAmount = (amount, fee = DEFAULT_FEE_BN) => {
3811
+ if (fee.eq(FEE_PRECISION_FACTOR_BN)) {
3812
+ return amount;
3813
+ }
3814
+ return amount.mul(fee).div(FEE_PRECISION_FACTOR_BN);
3815
+ };
3816
+ var calculateDecimalsShift = (maxWeight, maxShift = 999) => {
3817
+ if (maxShift == 0) {
3818
+ return 0;
3819
+ }
3820
+ let decimalsShift = 0;
3821
+ while (maxWeight * U64_MAX / BigInt(SCALE_PRECISION_FACTOR) / BigInt(10 ** decimalsShift) > U64_MAX) {
3822
+ decimalsShift += 1;
3823
+ if (decimalsShift == maxShift) {
3824
+ return maxShift;
3825
+ }
3826
+ }
3827
+ return decimalsShift;
3828
+ };
3829
+ async function calculateAmountWithTransferFees(connection, transferFeeConfig, transferAmount) {
3830
+ const epoch = await connection.getEpochInfo();
3831
+ const transferFee = epoch.epoch >= transferFeeConfig.newerTransferFee.epoch ? transferFeeConfig.newerTransferFee : transferFeeConfig.olderTransferFee;
3832
+ const transferFeeBasisPoints = BigInt(transferFee.transferFeeBasisPoints);
3833
+ let feeCharged = BigInt(0);
3834
+ if (transferFeeBasisPoints !== BigInt(0)) {
3835
+ const numerator = transferAmount * 10000n;
3836
+ const denominator = 10000n - transferFeeBasisPoints;
3837
+ const rawPreFeeAmount = common.divCeilN(numerator, denominator);
3838
+ const fee = rawPreFeeAmount - transferAmount;
3839
+ transferAmount = rawPreFeeAmount;
3840
+ feeCharged = fee > transferFee.maximumFee ? transferFee.maximumFee : fee;
3841
+ }
3842
+ return { transferAmount, feeCharged };
3843
+ }
3844
+ var calculateStakeWeight = (minDuration, maxDuration, maxWeight, duration) => {
3845
+ const durationSpan = maxDuration.sub(minDuration);
3846
+ if (durationSpan.eq(new BN4__default.default(0))) {
3847
+ return SCALE_PRECISION_FACTOR_BN;
3848
+ }
3849
+ const durationExceedingMin = duration.sub(minDuration);
3850
+ const normalizedWeight = durationExceedingMin.mul(SCALE_PRECISION_FACTOR_BN).div(durationSpan);
3851
+ const weightDiff = maxWeight.sub(SCALE_PRECISION_FACTOR_BN);
3852
+ return BN4__default.default.max(
3853
+ SCALE_PRECISION_FACTOR_BN.add(normalizedWeight.mul(weightDiff).div(SCALE_PRECISION_FACTOR_BN)),
3854
+ SCALE_PRECISION_FACTOR_BN
3855
+ );
3856
+ };
3857
+
3858
+ exports.RewardEntryAccumulator = RewardEntryAccumulator;
3859
+ exports.SolanaStakingClient = SolanaStakingClient;
3860
+ exports.calcRewards = calcRewards;
3861
+ exports.calculateAmountWithTransferFees = calculateAmountWithTransferFees;
3862
+ exports.calculateDecimalsShift = calculateDecimalsShift;
3863
+ exports.calculateFeeAmount = calculateFeeAmount;
3864
+ exports.calculateRewardAmountFromRate = calculateRewardAmountFromRate;
3865
+ exports.calculateRewardAmountFromValue = calculateRewardAmountFromValue;
3866
+ exports.calculateRewardRateFromAmount = calculateRewardRateFromAmount;
3867
+ exports.calculateStakeWeight = calculateStakeWeight;
3868
+ exports.constants = constants_exports;
3869
+ exports.deriveConfigPDA = deriveConfigPDA;
3870
+ exports.deriveFeeValuePDA = deriveFeeValuePDA;
3871
+ exports.deriveRewardEntryPDA = deriveRewardEntryPDA;
3872
+ exports.deriveRewardPoolPDA = deriveRewardPoolPDA;
3873
+ exports.deriveRewardVaultPDA = deriveRewardVaultPDA;
3874
+ exports.deriveStakeEntryPDA = deriveStakeEntryPDA;
3875
+ exports.deriveStakeMintPDA = deriveStakeMintPDA;
3876
+ exports.deriveStakePoolPDA = deriveStakePoolPDA;
3877
+ exports.deriveStakeVaultPDA = deriveStakeVaultPDA;
3878
+ //# sourceMappingURL=index.cjs.map
3879
+ //# sourceMappingURL=index.cjs.map