@triadxyz/triad-protocol 0.0.1-beta → 0.0.2-beta

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/stake.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { AnchorProvider, Program } from '@coral-xyz/anchor';
2
2
  import { PublicKey } from '@solana/web3.js';
3
3
  import { TriadProtocol } from './types/triad_protocol';
4
- import { DepositStakeRewardsArgs, InitializeStakeArgs, RpcOptions, StakeArgs, RequestWithdrawArgs, WithdrawArgs } from './types';
4
+ import { RpcOptions } from './types';
5
+ import { DepositStakeRewardsArgs, InitializeStakeArgs, StakeArgs, RequestWithdrawArgs, WithdrawArgs, StakeResponse, UpdateStakeVaultStatusArgs, UpdateStakeRewardsArgs, ClaimStakeRewardsArgs } from './types/stake';
5
6
  export default class Stake {
6
7
  program: Program<TriadProtocol>;
7
8
  provider: AnchorProvider;
@@ -9,115 +10,29 @@ export default class Stake {
9
10
  /**
10
11
  * Get all Stake Vaults
11
12
  */
12
- getStakeVaults(): Promise<{
13
- name: string;
14
- collection: string;
15
- slots: number;
16
- amount: number;
17
- isLocked: boolean;
18
- usersPaid: PublicKey;
19
- amountPaid: number;
20
- amountUsers: number;
21
- apr: number;
22
- initTs: number;
23
- endTs: number;
24
- }[]>;
13
+ getStakeVaults(): Promise<import("./types/stake").StakeVaultResponse[]>;
25
14
  /**
26
15
  * Get Stake Vault by name
27
16
  * @param stakeVault - Stake Vault name
28
17
  */
29
- getStakeVaultByName(stakeVault: string): Promise<{
30
- name: string;
31
- collection: string;
32
- slots: number;
33
- amount: number;
34
- isLocked: boolean;
35
- usersPaid: PublicKey;
36
- amountPaid: number;
37
- amountUsers: number;
38
- apr: number;
39
- initTs: number;
40
- endTs: number;
41
- }>;
18
+ getStakeVaultByName(stakeVault: string): Promise<import("./types/stake").StakeVaultResponse>;
42
19
  /**
43
- * Get all stakes
20
+ * Get all stakes by vault
21
+ * @param stakeVault - Stake Vault name
22
+ *
44
23
  */
45
- getStakes(): Promise<{
46
- name: string;
47
- collections: (({
48
- undead?: never;
49
- alligators?: never;
50
- pyth?: never;
51
- } & {
52
- coleta: Record<string, never>;
53
- }) | ({
54
- coleta?: never;
55
- alligators?: never;
56
- pyth?: never;
57
- } & {
58
- undead: Record<string, never>;
59
- }) | ({
60
- coleta?: never;
61
- undead?: never;
62
- pyth?: never;
63
- } & {
64
- alligators: Record<string, never>;
65
- }) | ({
66
- coleta?: never;
67
- undead?: never;
68
- alligators?: never;
69
- } & {
70
- pyth: Record<string, never>;
71
- }))[];
72
- rarity: string;
73
- stakeVault: string;
74
- authority: string;
75
- initTs: number;
76
- isLocked: boolean;
77
- withdrawTs: number;
78
- mint: string;
79
- stakeRewards: string;
80
- }[]>;
24
+ getStakes(stakeVault: string): Promise<StakeResponse[]>;
81
25
  /**
82
26
  * Get Stake by wallet
83
27
  * @param wallet - User wallet
28
+ * @param stakeVault - Stake Vault name
29
+ *
30
+ */
31
+ getStakeByWallet(wallet: PublicKey, stakeVault: string): Promise<StakeResponse[]>;
32
+ /**
33
+ * Get Stake Vault Rewards details
34
+ * @param stakeVault - Stake Vault name
84
35
  */
85
- getStakeByWallet(wallet: PublicKey): Promise<{
86
- name: string;
87
- collections: (({
88
- undead?: never;
89
- alligators?: never;
90
- pyth?: never;
91
- } & {
92
- coleta: Record<string, never>;
93
- }) | ({
94
- coleta?: never;
95
- alligators?: never;
96
- pyth?: never;
97
- } & {
98
- undead: Record<string, never>;
99
- }) | ({
100
- coleta?: never;
101
- undead?: never;
102
- pyth?: never;
103
- } & {
104
- alligators: Record<string, never>;
105
- }) | ({
106
- coleta?: never;
107
- undead?: never;
108
- alligators?: never;
109
- } & {
110
- pyth: Record<string, never>;
111
- }))[];
112
- rarity: string;
113
- stakeVault: string;
114
- authority: string;
115
- initTs: number;
116
- isLocked: boolean;
117
- withdrawTs: number;
118
- mint: string;
119
- stakeRewards: string;
120
- }[]>;
121
36
  getStakeVaultRewards(stakeVault: string): Promise<{
122
37
  amount: number;
123
38
  perDay: number;
@@ -126,14 +41,12 @@ export default class Stake {
126
41
  period: number;
127
42
  days: number[];
128
43
  }>;
129
- getStakeRewardsByWallet(wallet: PublicKey, stakeVaultRewards: {
130
- amount: number;
131
- perDay: number;
132
- perWeek: number;
133
- perMonth: number;
134
- period: number;
135
- days: number[];
136
- }): Promise<{}>;
44
+ /**
45
+ * Get Stakes by day
46
+ * @param stakeVault - Stake Vault name
47
+ * @param day - Day timestamp
48
+ */
49
+ getStakesByDay(stakeVault: string, day: number): Promise<StakeResponse[]>;
137
50
  /**
138
51
  * Stake NFT
139
52
  * @param name - NFT name
@@ -177,4 +90,34 @@ export default class Stake {
177
90
  *
178
91
  */
179
92
  withdraw({ wallet, nftName, mint, stakeVault }: WithdrawArgs, options?: RpcOptions): Promise<string>;
93
+ /**
94
+ * Update Stake Vault Status
95
+ * @param wallet - User wallet
96
+ * @param stakeVault - Name of the stake vault
97
+ * @param isLocked - Status of the stake vault
98
+ * @param week - Current week rewards (Starts from 0)
99
+ *
100
+ */
101
+ updateStakeVaultStatus({ wallet, isLocked, week, stakeVault }: UpdateStakeVaultStatusArgs, options?: RpcOptions): Promise<string>;
102
+ /**
103
+ * Update Stake Rewards
104
+ * @param wallet - User wallet
105
+ * @param nft_name - Name of the nft
106
+ * @param apr - APR based in the current day
107
+ * @param day - Day for update rewards (Starts from 0)
108
+ * @param rewards - Rewards for the day
109
+ *
110
+ */
111
+ updateStakeRewards({ wallet, day, items }: UpdateStakeRewardsArgs, options?: RpcOptions): Promise<string>;
112
+ /**
113
+ * Claim Stake Rewards
114
+ * @param wallet - User wallet
115
+ * @param mint - NFT mint
116
+ * @param week - Week rewards
117
+ * @param amount - Reward amount
118
+ * @param stakeVault - Name of the stake vault
119
+ * @param nftName - Name of the nft
120
+ *
121
+ */
122
+ claimStakeRewards({ wallet, mint, week, stakeVault, nftName }: ClaimStakeRewardsArgs, options?: RpcOptions): Promise<string>;
180
123
  }
package/dist/stake.js CHANGED
@@ -23,19 +23,7 @@ class Stake {
23
23
  getStakeVaults() {
24
24
  return __awaiter(this, void 0, void 0, function* () {
25
25
  const response = yield this.program.account.stakeVault.all();
26
- return response.map((stakeVault) => ({
27
- name: stakeVault.account.name,
28
- collection: stakeVault.account.collection,
29
- slots: stakeVault.account.slots.toNumber(),
30
- amount: stakeVault.account.amount.toNumber(),
31
- isLocked: stakeVault.account.isLocked,
32
- usersPaid: stakeVault.account.usersPaid,
33
- amountPaid: stakeVault.account.amountPaid.toNumber(),
34
- amountUsers: stakeVault.account.amountUsers.toNumber(),
35
- apr: stakeVault.account.apr,
36
- initTs: stakeVault.account.initTs.toNumber(),
37
- endTs: stakeVault.account.endTs.toNumber()
38
- }));
26
+ return response.map((stakeVault) => (0, helpers_1.formatStakeVault)(stakeVault.account));
39
27
  });
40
28
  }
41
29
  /**
@@ -45,112 +33,99 @@ class Stake {
45
33
  getStakeVaultByName(stakeVault) {
46
34
  return __awaiter(this, void 0, void 0, function* () {
47
35
  const StakeVault = (0, helpers_1.getStakeVaultAddressSync)(this.program.programId, stakeVault);
48
- const response = yield this.program.account.stakeVault.fetch(StakeVault);
49
- return {
50
- name: response.name,
51
- collection: response.collection,
52
- slots: response.slots.toNumber(),
53
- amount: response.amount.toNumber(),
54
- isLocked: response.isLocked,
55
- usersPaid: response.usersPaid,
56
- amountPaid: response.amountPaid.toNumber(),
57
- amountUsers: response.amountUsers.toNumber(),
58
- apr: response.apr,
59
- initTs: response.initTs.toNumber(),
60
- endTs: response.endTs.toNumber()
61
- };
36
+ return (0, helpers_1.formatStakeVault)(yield this.program.account.stakeVault.fetch(StakeVault));
62
37
  });
63
38
  }
64
39
  /**
65
- * Get all stakes
40
+ * Get all stakes by vault
41
+ * @param stakeVault - Stake Vault name
42
+ *
66
43
  */
67
- getStakes() {
44
+ getStakes(stakeVault) {
68
45
  return __awaiter(this, void 0, void 0, function* () {
69
46
  const response = yield this.program.account.stake.all();
70
- return response.map((stake) => ({
71
- name: stake.account.name,
72
- collections: stake.account.collections,
73
- rarity: Object.keys(stake.account.rarity)[0],
74
- stakeVault: stake.account.stakeVault.toBase58(),
75
- authority: stake.account.authority.toBase58(),
76
- initTs: stake.account.initTs.toNumber(),
77
- isLocked: stake.account.isLocked,
78
- withdrawTs: stake.account.withdrawTs.toNumber(),
79
- mint: stake.account.mint.toBase58(),
80
- stakeRewards: stake.account.stakeRewards.toBase58()
81
- }));
47
+ const StakeVault = (0, helpers_1.getStakeVaultAddressSync)(this.program.programId, stakeVault);
48
+ return response
49
+ .filter((item) => item.account.stakeVault.toBase58() === StakeVault.toBase58())
50
+ .map((stake) => (0, helpers_1.formatStake)(stake.account));
82
51
  });
83
52
  }
84
53
  /**
85
54
  * Get Stake by wallet
86
55
  * @param wallet - User wallet
56
+ * @param stakeVault - Stake Vault name
57
+ *
87
58
  */
88
- getStakeByWallet(wallet) {
59
+ getStakeByWallet(wallet, stakeVault) {
89
60
  return __awaiter(this, void 0, void 0, function* () {
90
- const response = yield this.program.account.stake.all();
91
- return response
92
- .filter((stake) => stake.account.authority.equals(wallet))
93
- .map((stake) => ({
94
- name: stake.account.name,
95
- collections: stake.account.collections,
96
- rarity: Object.keys(stake.account.rarity)[0],
97
- stakeVault: stake.account.stakeVault.toBase58(),
98
- authority: stake.account.authority.toBase58(),
99
- initTs: stake.account.initTs.toNumber(),
100
- isLocked: stake.account.isLocked,
101
- withdrawTs: stake.account.withdrawTs.toNumber(),
102
- mint: stake.account.mint.toBase58(),
103
- stakeRewards: stake.account.stakeRewards.toBase58()
104
- }));
61
+ const response = yield this.getStakes(stakeVault);
62
+ const stakeVaultByName = yield this.getStakeVaultByName(stakeVault);
63
+ const myStakes = response.filter((item) => item.authority === wallet.toBase58());
64
+ for (const stake of myStakes) {
65
+ try {
66
+ const stakeRewards = yield this.program.account.nftRewards.fetch(new web3_js_1.PublicKey(stake.stakeRewards));
67
+ let start = stakeVaultByName.week * 7;
68
+ let end = stakeVaultByName.week == 4 ? 30 : start + 7;
69
+ stake.apr = stakeRewards.apr;
70
+ stake.dailyRewards = stakeRewards.dailyRewards.map((reward) => reward.toNumber() / Math.pow(10, constants_1.TTRIAD_DECIMALS));
71
+ stake.weeklyRewardsPaid = stakeRewards.weeklyRewardsPaid;
72
+ let rewards = stake.dailyRewards
73
+ .slice(start, end)
74
+ .reduce((a, b) => a + b, 0);
75
+ stake.weeklyRewards = rewards;
76
+ }
77
+ catch (error) {
78
+ stake.apr = 0;
79
+ stake.dailyRewards = [];
80
+ stake.weeklyRewardsPaid = [];
81
+ stake.weeklyRewards = 0;
82
+ }
83
+ }
84
+ return myStakes;
105
85
  });
106
86
  }
87
+ /**
88
+ * Get Stake Vault Rewards details
89
+ * @param stakeVault - Stake Vault name
90
+ */
107
91
  getStakeVaultRewards(stakeVault) {
108
92
  return __awaiter(this, void 0, void 0, function* () {
109
93
  const StakeVault = (0, helpers_1.getStakeVaultAddressSync)(this.program.programId, stakeVault);
110
94
  const response = yield this.program.account.stakeVault.fetch(StakeVault);
95
+ const amount = response.amount.toNumber() / Math.pow(10, constants_1.TTRIAD_DECIMALS);
96
+ const period = (response.endTs.toNumber() - response.initTs.toNumber()) / (60 * 60 * 24);
97
+ const netAmount = amount - (amount * constants_1.TTRIAD_FEE) / 100;
111
98
  const data = {
112
- amount: 0,
113
- perDay: 0,
114
- perWeek: 0,
115
- perMonth: 0,
116
- period: 0,
99
+ amount: netAmount,
100
+ perDay: netAmount / period,
101
+ perWeek: (netAmount / period) * 7,
102
+ perMonth: (netAmount / period) * 30,
103
+ period,
117
104
  days: []
118
105
  };
119
- const amount = response.amount.toNumber() / Math.pow(10, constants_1.TTRIAD_DECIMALS);
120
- data.period =
121
- (response.endTs.toNumber() * 1000 - response.initTs.toNumber() * 1000) /
122
- (1000 * 60 * 60 * 24);
123
- data.amount = amount - (amount * constants_1.TTRIAD_FEE) / 100;
124
- data.perDay = data.amount / data.period;
125
- data.perWeek = data.perDay * 7;
126
- data.perMonth = data.perDay * 30;
127
- const endTsInMs = response.endTs.toNumber() * 1000;
128
- const initTsInMs = response.initTs.toNumber() * 1000;
129
- let currentTs = initTsInMs;
130
- while (currentTs <= endTsInMs) {
131
- data.days.push(currentTs);
132
- currentTs = currentTs + 1000 * 60 * 60 * 24;
106
+ for (let ts = response.initTs.toNumber(); ts <= response.endTs.toNumber(); ts += 60 * 60 * 24) {
107
+ data.days.push(ts);
133
108
  }
134
109
  return data;
135
110
  });
136
111
  }
137
- getStakeRewardsByWallet(wallet, stakeVaultRewards) {
112
+ /**
113
+ * Get Stakes by day
114
+ * @param stakeVault - Stake Vault name
115
+ * @param day - Day timestamp
116
+ */
117
+ getStakesByDay(stakeVault, day) {
138
118
  return __awaiter(this, void 0, void 0, function* () {
139
- const stakes = yield this.getStakeByWallet(wallet);
140
- const rewards = {};
141
- for (const day of stakeVaultRewards.days) {
142
- stakes.forEach((stake) => {
143
- const date = stake.initTs * 1000;
144
- const currentDate = new Date().getTime();
145
- if (date <= day && day <= currentDate) {
146
- const key = new Date(day).toISOString().split('T')[0];
147
- if (!rewards[key]) {
148
- rewards[key] = [];
149
- }
150
- rewards[key].push(stake);
151
- }
152
- });
153
- }
119
+ const stakes = yield this.getStakes(stakeVault);
120
+ const rewards = [];
121
+ stakes.forEach((stake) => {
122
+ const date = stake.initTs * 1000;
123
+ const stakeDay = day * 1000;
124
+ const currentDate = new Date().getTime();
125
+ if (date <= stakeDay && stakeDay <= currentDate) {
126
+ rewards.push(stake);
127
+ }
128
+ });
154
129
  return rewards;
155
130
  });
156
131
  }
@@ -309,6 +284,7 @@ class Stake {
309
284
  signer: wallet,
310
285
  fromAta: FromAta,
311
286
  toAta: ToAta,
287
+ admin: new web3_js_1.PublicKey('82ppCojm3yrEKgdpH8B5AmBJTU1r1uAWXFWhxvPs9UCR'),
312
288
  mint: mint
313
289
  });
314
290
  if (options === null || options === void 0 ? void 0 : options.microLamports) {
@@ -321,5 +297,120 @@ class Stake {
321
297
  return method.rpc({ skipPreflight: options === null || options === void 0 ? void 0 : options.skipPreflight });
322
298
  });
323
299
  }
300
+ /**
301
+ * Update Stake Vault Status
302
+ * @param wallet - User wallet
303
+ * @param stakeVault - Name of the stake vault
304
+ * @param isLocked - Status of the stake vault
305
+ * @param week - Current week rewards (Starts from 0)
306
+ *
307
+ */
308
+ updateStakeVaultStatus({ wallet, isLocked, week, stakeVault }, options) {
309
+ return __awaiter(this, void 0, void 0, function* () {
310
+ const StakeVault = (0, helpers_1.getStakeVaultAddressSync)(this.program.programId, stakeVault);
311
+ const method = this.program.methods
312
+ .updateStakeVaultStatus({
313
+ isLocked,
314
+ week
315
+ })
316
+ .accounts({
317
+ signer: wallet,
318
+ stakeVault: StakeVault
319
+ });
320
+ if (options === null || options === void 0 ? void 0 : options.microLamports) {
321
+ method.postInstructions([
322
+ web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
323
+ microLamports: options.microLamports
324
+ })
325
+ ]);
326
+ }
327
+ return method.rpc({ skipPreflight: options === null || options === void 0 ? void 0 : options.skipPreflight });
328
+ });
329
+ }
330
+ /**
331
+ * Update Stake Rewards
332
+ * @param wallet - User wallet
333
+ * @param nft_name - Name of the nft
334
+ * @param apr - APR based in the current day
335
+ * @param day - Day for update rewards (Starts from 0)
336
+ * @param rewards - Rewards for the day
337
+ *
338
+ */
339
+ updateStakeRewards({ wallet, day, items }, options) {
340
+ return __awaiter(this, void 0, void 0, function* () {
341
+ const ixs = [
342
+ web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
343
+ microLamports: options.microLamports
344
+ }),
345
+ web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
346
+ units: 600000
347
+ })
348
+ ];
349
+ for (const item of items) {
350
+ const Stake = (0, helpers_1.getStakeAddressSync)(this.program.programId, item.nftName);
351
+ ixs.push(yield this.program.methods
352
+ .updateStakeRewards({
353
+ rewards: item.rewards,
354
+ apr: item.apr,
355
+ day
356
+ })
357
+ .accounts({
358
+ signer: wallet,
359
+ stake: Stake
360
+ })
361
+ .instruction());
362
+ }
363
+ const { blockhash } = yield this.provider.connection.getLatestBlockhash();
364
+ const messageV0 = new web3_js_1.TransactionMessage({
365
+ instructions: ixs,
366
+ recentBlockhash: blockhash,
367
+ payerKey: wallet
368
+ }).compileToV0Message();
369
+ const tx = new web3_js_1.VersionedTransaction(messageV0);
370
+ return this.provider.sendAndConfirm(tx, [], {
371
+ skipPreflight: options === null || options === void 0 ? void 0 : options.skipPreflight
372
+ });
373
+ });
374
+ }
375
+ /**
376
+ * Claim Stake Rewards
377
+ * @param wallet - User wallet
378
+ * @param mint - NFT mint
379
+ * @param week - Week rewards
380
+ * @param amount - Reward amount
381
+ * @param stakeVault - Name of the stake vault
382
+ * @param nftName - Name of the nft
383
+ *
384
+ */
385
+ claimStakeRewards({ wallet, mint, week, stakeVault, nftName }, options) {
386
+ return __awaiter(this, void 0, void 0, function* () {
387
+ const StakeVault = (0, helpers_1.getStakeVaultAddressSync)(this.program.programId, stakeVault);
388
+ const Stake = (0, helpers_1.getStakeAddressSync)(this.program.programId, nftName);
389
+ const NFTRewards = (0, helpers_1.getNFTRewardsAddressSync)(this.program.programId, Stake);
390
+ const FromAta = (0, helpers_1.getATASync)(StakeVault, mint);
391
+ const ToAta = (0, helpers_1.getATASync)(wallet, mint);
392
+ const method = this.program.methods
393
+ .claimStakeRewards({
394
+ week
395
+ })
396
+ .accounts({
397
+ signer: wallet,
398
+ fromAta: FromAta,
399
+ toAta: ToAta,
400
+ mint: mint,
401
+ nftRewards: NFTRewards,
402
+ stake: Stake,
403
+ stakeVault: StakeVault
404
+ });
405
+ if (options === null || options === void 0 ? void 0 : options.microLamports) {
406
+ method.postInstructions([
407
+ web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
408
+ microLamports: options.microLamports
409
+ })
410
+ ]);
411
+ }
412
+ return method.rpc({ skipPreflight: options === null || options === void 0 ? void 0 : options.skipPreflight });
413
+ });
414
+ }
324
415
  }
325
416
  exports.default = Stake;