@star-factory/sdk-staking 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,598 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StakingSDK = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const anchor_1 = require("@coral-xyz/anchor");
6
+ const spl_token_1 = require("@solana/spl-token");
7
+ const types_1 = require("./types");
8
+ tslib_1.__exportStar(require("./types"), exports);
9
+ const REWARD_PRECISION = BigInt('1000000000000000000');
10
+ /**
11
+ * StakingSDK - Client SDK for the Staking program
12
+ *
13
+ * All methods use clear Input/Output types for type safety and discoverability.
14
+ */
15
+ class StakingSDK {
16
+ program;
17
+ provider;
18
+ programId;
19
+ constructor(program, provider) {
20
+ this.program = program;
21
+ this.provider = provider;
22
+ this.programId = program.programId;
23
+ }
24
+ /**
25
+ * Static factory method to create SDK instance
26
+ */
27
+ static async create(provider, programId) {
28
+ const idl = require('./idl/staking.json');
29
+ if (programId) {
30
+ idl.address = programId.toString();
31
+ }
32
+ const program = new anchor_1.Program(idl, provider);
33
+ return new StakingSDK(program, provider);
34
+ }
35
+ // ============================================================================
36
+ // PDA Derivation (synchronous, no RPC calls)
37
+ // ============================================================================
38
+ getStakePoolPDA() {
39
+ return anchor_1.web3.PublicKey.findProgramAddressSync([Buffer.from('stake_pool')], this.programId);
40
+ }
41
+ getUserStakePDA(input) {
42
+ return anchor_1.web3.PublicKey.findProgramAddressSync([Buffer.from('user_stake'), input.user.toBuffer()], this.programId);
43
+ }
44
+ getStakeVaultPDA(input) {
45
+ return anchor_1.web3.PublicKey.findProgramAddressSync([Buffer.from('stake_vault'), input.stakePool.toBuffer()], this.programId);
46
+ }
47
+ getRewardTokenPDA(input) {
48
+ return anchor_1.web3.PublicKey.findProgramAddressSync([Buffer.from('reward_token'), input.rewardMint.toBuffer()], this.programId);
49
+ }
50
+ getRewardVaultPDA(input) {
51
+ return anchor_1.web3.PublicKey.findProgramAddressSync([Buffer.from('reward_vault'), input.stakePool.toBuffer(), input.rewardMint.toBuffer()], this.programId);
52
+ }
53
+ getUserRewardInfoPDA(input) {
54
+ return anchor_1.web3.PublicKey.findProgramAddressSync([Buffer.from('user_reward_info'), input.user.toBuffer(), input.rewardMint.toBuffer()], this.programId);
55
+ }
56
+ // ============================================================================
57
+ // Write Methods (submit transactions)
58
+ // ============================================================================
59
+ /**
60
+ * Initialize the staking pool
61
+ */
62
+ async initialize(input) {
63
+ const authority = input.authority ?? this.provider.wallet.publicKey;
64
+ const [stakePool] = this.getStakePoolPDA();
65
+ const [stakeVault] = this.getStakeVaultPDA({ stakePool });
66
+ const signature = await this.program.methods
67
+ .initialize()
68
+ .accountsPartial({
69
+ stakePool,
70
+ stakeVault,
71
+ acceptedMint: input.acceptedMint,
72
+ authority,
73
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
74
+ systemProgram: anchor_1.web3.SystemProgram.programId,
75
+ })
76
+ .rpc();
77
+ return { signature };
78
+ }
79
+ /**
80
+ * Stake tokens
81
+ */
82
+ async stake(input) {
83
+ const user = input.user ?? this.provider.wallet.publicKey;
84
+ const [stakePool] = this.getStakePoolPDA();
85
+ const [userStake] = this.getUserStakePDA({ user });
86
+ const [stakeVault] = this.getStakeVaultPDA({ stakePool });
87
+ const poolAccount = await this.fetchStakePool(stakePool);
88
+ const userTokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(poolAccount.acceptedMint, user);
89
+ const baseAccounts = {
90
+ stakePool,
91
+ userStake,
92
+ userTokenAccount,
93
+ stakeVault,
94
+ user,
95
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
96
+ systemProgram: anchor_1.web3.SystemProgram.programId,
97
+ };
98
+ // Check if rewards are active - if so, we MUST include reward accounts
99
+ const rewardMint = input.rewardMint ?? (poolAccount.rewardMint.equals(anchor_1.web3.PublicKey.default) ? null : poolAccount.rewardMint);
100
+ let signature;
101
+ if (rewardMint) {
102
+ const [rewardToken] = this.getRewardTokenPDA({ rewardMint });
103
+ const [userRewardInfo] = this.getUserRewardInfoPDA({ user, rewardMint });
104
+ signature = await this.program.methods
105
+ .stake(input.amount)
106
+ .accountsPartial({
107
+ ...baseAccounts,
108
+ rewardMint,
109
+ rewardToken,
110
+ userRewardInfo,
111
+ })
112
+ .rpc();
113
+ }
114
+ else {
115
+ // No rewards active - use accountsStrict to bypass PDA resolver
116
+ // Pass program ID as placeholder for optional accounts (Anchor treats as None)
117
+ signature = await this.program.methods
118
+ .stake(input.amount)
119
+ .accountsStrict({
120
+ stakePool,
121
+ userStake,
122
+ userTokenAccount,
123
+ stakeVault,
124
+ rewardMint: this.programId,
125
+ rewardToken: this.programId,
126
+ userRewardInfo: this.programId,
127
+ user,
128
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
129
+ systemProgram: anchor_1.web3.SystemProgram.programId,
130
+ })
131
+ .rpc();
132
+ }
133
+ return { signature };
134
+ }
135
+ /**
136
+ * Unstake tokens (starts 30-day unlock period)
137
+ */
138
+ async unstake(input) {
139
+ const user = input.user ?? this.provider.wallet.publicKey;
140
+ const [stakePool] = this.getStakePoolPDA();
141
+ const [userStake] = this.getUserStakePDA({ user });
142
+ // Fetch pool to check if rewards are active
143
+ const poolAccount = await this.fetchStakePool(stakePool);
144
+ const baseAccounts = {
145
+ stakePool,
146
+ userStake,
147
+ user,
148
+ systemProgram: anchor_1.web3.SystemProgram.programId,
149
+ };
150
+ // Check if rewards are active - if so, we MUST include reward accounts
151
+ const rewardMint = input.rewardMint ?? (poolAccount.rewardMint.equals(anchor_1.web3.PublicKey.default) ? null : poolAccount.rewardMint);
152
+ let signature;
153
+ if (rewardMint) {
154
+ const [rewardToken] = this.getRewardTokenPDA({ rewardMint });
155
+ const [userRewardInfo] = this.getUserRewardInfoPDA({ user, rewardMint });
156
+ signature = await this.program.methods
157
+ .unstake(input.amount)
158
+ .accountsPartial({
159
+ ...baseAccounts,
160
+ rewardMint,
161
+ rewardToken,
162
+ userRewardInfo,
163
+ })
164
+ .rpc();
165
+ }
166
+ else {
167
+ // No rewards active - use accountsStrict to bypass PDA resolver
168
+ signature = await this.program.methods
169
+ .unstake(input.amount)
170
+ .accountsStrict({
171
+ stakePool,
172
+ userStake,
173
+ rewardMint: this.programId,
174
+ rewardToken: this.programId,
175
+ userRewardInfo: this.programId,
176
+ user,
177
+ systemProgram: anchor_1.web3.SystemProgram.programId,
178
+ })
179
+ .rpc();
180
+ }
181
+ return { signature };
182
+ }
183
+ /**
184
+ * Claim unstaked tokens after 30-day period
185
+ */
186
+ async claimUnstake(input) {
187
+ const user = input?.user ?? this.provider.wallet.publicKey;
188
+ const [stakePool] = this.getStakePoolPDA();
189
+ const [userStake] = this.getUserStakePDA({ user });
190
+ const [stakeVault] = this.getStakeVaultPDA({ stakePool });
191
+ const poolAccount = await this.fetchStakePool(stakePool);
192
+ const userTokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(poolAccount.acceptedMint, user);
193
+ const signature = await this.program.methods
194
+ .claimUnstake()
195
+ .accountsPartial({
196
+ stakePool,
197
+ userStake,
198
+ userTokenAccount,
199
+ stakeVault,
200
+ user,
201
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
202
+ })
203
+ .rpc();
204
+ return { signature };
205
+ }
206
+ /**
207
+ * Deposit rewards into the pool (admin only)
208
+ */
209
+ async depositRewards(input) {
210
+ const authority = input.authority ?? this.provider.wallet.publicKey;
211
+ const [stakePool] = this.getStakePoolPDA();
212
+ const [rewardToken] = this.getRewardTokenPDA({ rewardMint: input.rewardMint });
213
+ const [rewardVault] = this.getRewardVaultPDA({ stakePool, rewardMint: input.rewardMint });
214
+ const adminTokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(input.rewardMint, authority);
215
+ const signature = await this.program.methods
216
+ .depositRewards(input.amount)
217
+ .accountsPartial({
218
+ stakePool,
219
+ rewardToken,
220
+ rewardVault,
221
+ rewardMint: input.rewardMint,
222
+ adminTokenAccount,
223
+ authority,
224
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
225
+ systemProgram: anchor_1.web3.SystemProgram.programId,
226
+ })
227
+ .rpc();
228
+ return { signature };
229
+ }
230
+ /**
231
+ * Claim accumulated rewards
232
+ */
233
+ async claimRewards(input) {
234
+ const user = input.user ?? this.provider.wallet.publicKey;
235
+ const [stakePool] = this.getStakePoolPDA();
236
+ const [userStake] = this.getUserStakePDA({ user });
237
+ const [rewardToken] = this.getRewardTokenPDA({ rewardMint: input.rewardMint });
238
+ const [userRewardInfo] = this.getUserRewardInfoPDA({ user, rewardMint: input.rewardMint });
239
+ const [rewardVault] = this.getRewardVaultPDA({ stakePool, rewardMint: input.rewardMint });
240
+ const userTokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(input.rewardMint, user);
241
+ const signature = await this.program.methods
242
+ .claimRewards()
243
+ .accountsPartial({
244
+ stakePool,
245
+ userStake,
246
+ rewardToken,
247
+ userRewardInfo,
248
+ rewardVault,
249
+ rewardMint: input.rewardMint,
250
+ userTokenAccount,
251
+ user,
252
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
253
+ systemProgram: anchor_1.web3.SystemProgram.programId,
254
+ })
255
+ .rpc();
256
+ return { signature };
257
+ }
258
+ /**
259
+ * Toggle pause on contract (admin only) - USE ONLY IN CASE OF EMERGENCY
260
+ */
261
+ async switchPause(input) {
262
+ const authority = input?.authority ?? this.provider.wallet.publicKey;
263
+ const [stakePool] = this.getStakePoolPDA();
264
+ const signature = await this.program.methods
265
+ .switchPause()
266
+ .accounts({
267
+ stakePool,
268
+ authority,
269
+ })
270
+ .rpc();
271
+ return { signature };
272
+ }
273
+ /**
274
+ * Transfer pool authority to a new account (current authority only)
275
+ */
276
+ async updateAuthority(input) {
277
+ const authority = input.authority ?? this.provider.wallet.publicKey;
278
+ const [stakePool] = this.getStakePoolPDA();
279
+ const signature = await this.program.methods
280
+ .updateAuthority(input.newAuthority)
281
+ .accounts({
282
+ stakePool,
283
+ authority,
284
+ })
285
+ .rpc();
286
+ return { signature };
287
+ }
288
+ // ============================================================================
289
+ // Read Methods (fetch data)
290
+ // ============================================================================
291
+ /**
292
+ * Get stake pool data
293
+ */
294
+ async getStakePool() {
295
+ const [stakePool] = this.getStakePoolPDA();
296
+ return await this.fetchStakePool(stakePool);
297
+ }
298
+ /**
299
+ * Get user stake data
300
+ */
301
+ async getUserStake(input) {
302
+ const user = input?.user ?? this.provider.wallet.publicKey;
303
+ const [userStake] = this.getUserStakePDA({ user });
304
+ try {
305
+ return await this.fetchUserStake(userStake);
306
+ }
307
+ catch {
308
+ return null;
309
+ }
310
+ }
311
+ /**
312
+ * Get reward token config data
313
+ */
314
+ async getRewardToken(input) {
315
+ const [rewardToken] = this.getRewardTokenPDA({ rewardMint: input.rewardMint });
316
+ try {
317
+ return await this.fetchRewardToken(rewardToken);
318
+ }
319
+ catch {
320
+ return null;
321
+ }
322
+ }
323
+ /**
324
+ * Get user reward info data
325
+ */
326
+ async getUserRewardInfo(input) {
327
+ const user = input.user ?? this.provider.wallet.publicKey;
328
+ const [userRewardInfo] = this.getUserRewardInfoPDA({ user, rewardMint: input.rewardMint });
329
+ try {
330
+ return await this.fetchUserRewardInfo(userRewardInfo);
331
+ }
332
+ catch {
333
+ return null;
334
+ }
335
+ }
336
+ /**
337
+ * Calculate user's proportional share of the pool
338
+ */
339
+ async getUserPoolShare(input) {
340
+ const userStakeData = await this.getUserStake({ user: input?.user });
341
+ if (!userStakeData || userStakeData.stakedAmount.eq(new anchor_1.BN(0))) {
342
+ return { sharePercent: 0 };
343
+ }
344
+ const poolData = await this.getStakePool();
345
+ if (poolData.totalStaked.eq(new anchor_1.BN(0))) {
346
+ return { sharePercent: 0 };
347
+ }
348
+ const sharePercent = userStakeData.stakedAmount
349
+ .mul(new anchor_1.BN(10000))
350
+ .div(poolData.totalStaked)
351
+ .toNumber() / 100;
352
+ return { sharePercent };
353
+ }
354
+ /**
355
+ * Check if user can claim unstake
356
+ */
357
+ async canClaimUnstake(input) {
358
+ const userStakeData = await this.getUserStake({ user: input?.user });
359
+ if (!userStakeData || userStakeData.pendingUnstake.eq(new anchor_1.BN(0))) {
360
+ return { canClaim: false };
361
+ }
362
+ const currentTime = Math.floor(Date.now() / 1000);
363
+ const canClaim = currentTime >= userStakeData.unlockTimestamp.toNumber();
364
+ return { canClaim };
365
+ }
366
+ /**
367
+ * Get time remaining until claim is available
368
+ */
369
+ async getTimeUntilClaim(input) {
370
+ const userStakeData = await this.getUserStake({ user: input?.user });
371
+ if (!userStakeData || userStakeData.pendingUnstake.eq(new anchor_1.BN(0))) {
372
+ return { secondsRemaining: null };
373
+ }
374
+ const currentTime = Math.floor(Date.now() / 1000);
375
+ const unlockTime = userStakeData.unlockTimestamp.toNumber();
376
+ const remaining = unlockTime - currentTime;
377
+ return { secondsRemaining: Math.max(0, remaining) };
378
+ }
379
+ /**
380
+ * Get comprehensive unstake status for UI display.
381
+ * Single RPC call that returns all information needed to render unstake UI.
382
+ */
383
+ async getUnstakeStatus(input) {
384
+ const userStakeData = await this.getUserStake({ user: input?.user });
385
+ // No stake account or no pending unstake
386
+ if (!userStakeData || userStakeData.pendingUnstake.eq(new anchor_1.BN(0))) {
387
+ return {
388
+ hasPendingUnstake: false,
389
+ pendingAmount: new anchor_1.BN(0),
390
+ unlockTimestamp: 0,
391
+ unlockDate: null,
392
+ canClaim: false,
393
+ secondsRemaining: null,
394
+ progressPercent: null,
395
+ timeRemainingFormatted: null,
396
+ };
397
+ }
398
+ const currentTime = Math.floor(Date.now() / 1000);
399
+ const unlockTime = userStakeData.unlockTimestamp.toNumber();
400
+ const secondsRemaining = Math.max(0, unlockTime - currentTime);
401
+ const canClaim = secondsRemaining === 0;
402
+ // Calculate progress percentage (0-100)
403
+ const startTime = unlockTime - types_1.UNLOCK_PERIOD_SECONDS;
404
+ const elapsed = currentTime - startTime;
405
+ const progressPercent = Math.min(100, Math.max(0, (elapsed / types_1.UNLOCK_PERIOD_SECONDS) * 100));
406
+ // Format time remaining
407
+ const timeRemainingFormatted = canClaim ? null : this.formatTimeRemaining(secondsRemaining);
408
+ return {
409
+ hasPendingUnstake: true,
410
+ pendingAmount: userStakeData.pendingUnstake,
411
+ unlockTimestamp: unlockTime,
412
+ unlockDate: new Date(unlockTime * 1000),
413
+ canClaim,
414
+ secondsRemaining: canClaim ? 0 : secondsRemaining,
415
+ progressPercent,
416
+ timeRemainingFormatted,
417
+ };
418
+ }
419
+ /**
420
+ * Calculate pending rewards for a user (without claiming)
421
+ */
422
+ async getPendingRewards(input) {
423
+ const userStakeData = await this.getUserStake({ user: input.user });
424
+ const rewardTokenData = await this.getRewardToken({ rewardMint: input.rewardMint });
425
+ const userRewardInfo = await this.getUserRewardInfo({
426
+ rewardMint: input.rewardMint,
427
+ user: input.user,
428
+ });
429
+ if (!userStakeData || !rewardTokenData) {
430
+ return { pendingAmount: new anchor_1.BN(0) };
431
+ }
432
+ const stakedAmount = userStakeData.stakedAmount;
433
+ if (stakedAmount.eq(new anchor_1.BN(0))) {
434
+ return { pendingAmount: userRewardInfo?.rewardsEarned ?? new anchor_1.BN(0) };
435
+ }
436
+ // Calculate: (staked * (currentPerToken - userCheckpoint)) / PRECISION + earnedSoFar
437
+ const currentPerToken = BigInt(rewardTokenData.rewardPerTokenStored.toString());
438
+ const userCheckpoint = userRewardInfo
439
+ ? BigInt(userRewardInfo.rewardPerTokenPaid.toString())
440
+ : BigInt(0);
441
+ const earnedSoFar = userRewardInfo ? BigInt(userRewardInfo.rewardsEarned.toString()) : BigInt(0);
442
+ const perTokenDelta = currentPerToken - userCheckpoint;
443
+ const newEarned = (BigInt(stakedAmount.toString()) * perTokenDelta) / REWARD_PRECISION;
444
+ return { pendingAmount: new anchor_1.BN((newEarned + earnedSoFar).toString()) };
445
+ }
446
+ /**
447
+ * Check if protocol is paused
448
+ */
449
+ async isPaused() {
450
+ const pool = await this.getStakePool();
451
+ return { paused: pool.paused };
452
+ }
453
+ /**
454
+ * Check if rewards are active (reward mint has been set)
455
+ */
456
+ async getActiveRewardMint() {
457
+ const pool = await this.getStakePool();
458
+ // Handle case where rewardMint doesn't exist (old contract/IDL)
459
+ if (!pool.rewardMint) {
460
+ return { rewardMint: null, isActive: false };
461
+ }
462
+ // Pubkey.default() is all zeros
463
+ const isDefault = pool.rewardMint.equals(anchor_1.web3.PublicKey.default);
464
+ const rewardMint = isDefault ? null : pool.rewardMint;
465
+ return { rewardMint, isActive: !isDefault };
466
+ }
467
+ /**
468
+ * Get all stakers and their staking positions.
469
+ * Useful for computing reward distributions or snapshots.
470
+ */
471
+ async getAllStakers() {
472
+ // UserStake discriminator from IDL: [102, 53, 163, 107, 9, 138, 87, 153]
473
+ const USER_STAKE_DISCRIMINATOR = Buffer.from([102, 53, 163, 107, 9, 138, 87, 153]);
474
+ const USER_STAKE_SIZE = 65; // 8 + 32 + 8 + 8 + 8 + 1
475
+ // Filter by size only, verify discriminator during parsing
476
+ const accounts = await this.provider.connection.getProgramAccounts(this.programId, {
477
+ filters: [{ dataSize: USER_STAKE_SIZE }],
478
+ commitment: 'confirmed',
479
+ });
480
+ const stakers = [];
481
+ let totalStaked = new anchor_1.BN(0);
482
+ let activeStakers = 0;
483
+ for (const { account } of accounts) {
484
+ const data = account.data;
485
+ // Verify discriminator matches UserStake
486
+ const discriminator = data.subarray(0, 8);
487
+ if (!discriminator.equals(USER_STAKE_DISCRIMINATOR)) {
488
+ continue; // Skip non-UserStake accounts
489
+ }
490
+ // Layout:
491
+ // [0..8] discriminator
492
+ // [8..40] user: Pubkey
493
+ // [40..48] staked_amount: u64
494
+ // [48..56] pending_unstake: u64
495
+ // [56..64] unlock_timestamp: i64
496
+ // [64] bump: u8
497
+ const user = new anchor_1.web3.PublicKey(data.subarray(8, 40));
498
+ const stakedAmount = new anchor_1.BN(data.readBigUInt64LE(40).toString());
499
+ const pendingUnstake = new anchor_1.BN(data.readBigUInt64LE(48).toString());
500
+ const unlockTimestamp = new anchor_1.BN(data.readBigInt64LE(56).toString());
501
+ stakers.push({
502
+ wallet: user,
503
+ stakedAmount,
504
+ pendingUnstake,
505
+ unlockTimestamp,
506
+ });
507
+ if (!stakedAmount.isZero()) {
508
+ totalStaked = totalStaked.add(stakedAmount);
509
+ activeStakers++;
510
+ }
511
+ }
512
+ // Sort by wallet address for deterministic ordering
513
+ stakers.sort((a, b) => a.wallet.toBase58().localeCompare(b.wallet.toBase58()));
514
+ return {
515
+ stakers,
516
+ totalStaked,
517
+ activeStakers,
518
+ };
519
+ }
520
+ // ============================================================================
521
+ // Event Listeners
522
+ // ============================================================================
523
+ /**
524
+ * Listen for stake events
525
+ */
526
+ onStakeEvent(input) {
527
+ return this.program.addEventListener('stakeEvent', input.callback);
528
+ }
529
+ /**
530
+ * Listen for unstake events
531
+ */
532
+ onUnstakeEvent(input) {
533
+ return this.program.addEventListener('unstakeEvent', input.callback);
534
+ }
535
+ /**
536
+ * Listen for claim unstake events
537
+ */
538
+ onClaimUnstakeEvent(input) {
539
+ return this.program.addEventListener('claimUnstakeEvent', input.callback);
540
+ }
541
+ /**
542
+ * Listen for pause events
543
+ */
544
+ onPauseEvent(input) {
545
+ return this.program.addEventListener('pauseEvent', input.callback);
546
+ }
547
+ /**
548
+ * Listen for authority updated events
549
+ */
550
+ onAuthorityUpdatedEvent(input) {
551
+ return this.program.addEventListener('authorityUpdatedEvent', input.callback);
552
+ }
553
+ /**
554
+ * Remove event listener
555
+ */
556
+ async removeEventListener(input) {
557
+ await this.program.removeEventListener(input.listenerId);
558
+ }
559
+ // ============================================================================
560
+ // Private Helpers
561
+ // ============================================================================
562
+ /**
563
+ * Format seconds into human-readable string (e.g., "5d 3h 22m")
564
+ * @internal
565
+ */
566
+ formatTimeRemaining(seconds) {
567
+ if (seconds <= 0)
568
+ return '0m';
569
+ const days = Math.floor(seconds / 86400);
570
+ const hours = Math.floor((seconds % 86400) / 3600);
571
+ const minutes = Math.floor((seconds % 3600) / 60);
572
+ const parts = [];
573
+ if (days > 0)
574
+ parts.push(`${days}d`);
575
+ if (hours > 0)
576
+ parts.push(`${hours}h`);
577
+ if (minutes > 0 || parts.length === 0)
578
+ parts.push(`${minutes}m`);
579
+ return parts.join(' ');
580
+ }
581
+ get accounts() {
582
+ return this.program.account;
583
+ }
584
+ async fetchStakePool(stakePool) {
585
+ return await this.accounts.stakePool.fetch(stakePool);
586
+ }
587
+ async fetchUserStake(userStake) {
588
+ return await this.accounts.userStake.fetch(userStake);
589
+ }
590
+ async fetchRewardToken(rewardToken) {
591
+ return await this.accounts.rewardToken.fetch(rewardToken);
592
+ }
593
+ async fetchUserRewardInfo(userRewardInfo) {
594
+ return await this.accounts.userRewardInfo.fetch(userRewardInfo);
595
+ }
596
+ }
597
+ exports.StakingSDK = StakingSDK;
598
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}