@triadxyz/triad-protocol 0.0.1-beta → 0.0.3-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,33 @@ 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 stakeVault - Name of the stake vault
118
+ * @param nftName - Name of the nft
119
+ *
120
+ */
121
+ claimStakeRewards({ wallet, mint, week, stakeVault, nftName }: ClaimStakeRewardsArgs, options?: RpcOptions): Promise<string>;
180
122
  }
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
  }
@@ -300,6 +275,8 @@ class Stake {
300
275
  const StakeVault = (0, helpers_1.getStakeVaultAddressSync)(this.program.programId, stakeVault);
301
276
  const FromAta = (0, helpers_1.getATASync)(StakeVault, mint);
302
277
  const ToAta = (0, helpers_1.getATASync)(wallet, mint);
278
+ const Stake = (0, helpers_1.getStakeAddressSync)(this.program.programId, nftName);
279
+ const NFTRewards = (0, helpers_1.getNFTRewardsAddressSync)(this.program.programId, Stake);
303
280
  const method = this.program.methods
304
281
  .withdrawNft({
305
282
  nftName,
@@ -309,6 +286,8 @@ class Stake {
309
286
  signer: wallet,
310
287
  fromAta: FromAta,
311
288
  toAta: ToAta,
289
+ nftRewards: NFTRewards,
290
+ admin: new web3_js_1.PublicKey('82ppCojm3yrEKgdpH8B5AmBJTU1r1uAWXFWhxvPs9UCR'),
312
291
  mint: mint
313
292
  });
314
293
  if (options === null || options === void 0 ? void 0 : options.microLamports) {
@@ -321,5 +300,120 @@ class Stake {
321
300
  return method.rpc({ skipPreflight: options === null || options === void 0 ? void 0 : options.skipPreflight });
322
301
  });
323
302
  }
303
+ /**
304
+ * Update Stake Vault Status
305
+ * @param wallet - User wallet
306
+ * @param stakeVault - Name of the stake vault
307
+ * @param isLocked - Status of the stake vault
308
+ * @param week - Current week rewards (Starts from 0)
309
+ *
310
+ */
311
+ updateStakeVaultStatus({ wallet, isLocked, week, stakeVault }, options) {
312
+ return __awaiter(this, void 0, void 0, function* () {
313
+ const StakeVault = (0, helpers_1.getStakeVaultAddressSync)(this.program.programId, stakeVault);
314
+ const method = this.program.methods
315
+ .updateStakeVaultStatus({
316
+ isLocked,
317
+ week
318
+ })
319
+ .accounts({
320
+ signer: wallet,
321
+ stakeVault: StakeVault
322
+ });
323
+ if (options === null || options === void 0 ? void 0 : options.microLamports) {
324
+ method.postInstructions([
325
+ web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
326
+ microLamports: options.microLamports
327
+ })
328
+ ]);
329
+ }
330
+ return method.rpc({ skipPreflight: options === null || options === void 0 ? void 0 : options.skipPreflight });
331
+ });
332
+ }
333
+ /**
334
+ * Update Stake Rewards
335
+ * @param wallet - User wallet
336
+ * @param nft_name - Name of the nft
337
+ * @param apr - APR based in the current day
338
+ * @param day - Day for update rewards (Starts from 0)
339
+ * @param rewards - Rewards for the day
340
+ *
341
+ */
342
+ updateStakeRewards({ wallet, day, items }, options) {
343
+ return __awaiter(this, void 0, void 0, function* () {
344
+ const ixs = [
345
+ web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
346
+ microLamports: options.microLamports
347
+ }),
348
+ web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({
349
+ units: 600000
350
+ })
351
+ ];
352
+ for (const item of items) {
353
+ const Stake = (0, helpers_1.getStakeAddressSync)(this.program.programId, item.nftName);
354
+ ixs.push(yield this.program.methods
355
+ .updateStakeRewards({
356
+ rewards: item.rewards,
357
+ apr: item.apr,
358
+ day
359
+ })
360
+ .accounts({
361
+ signer: wallet,
362
+ stake: Stake
363
+ })
364
+ .instruction());
365
+ }
366
+ const { blockhash } = yield this.provider.connection.getLatestBlockhash();
367
+ const messageV0 = new web3_js_1.TransactionMessage({
368
+ instructions: ixs,
369
+ recentBlockhash: blockhash,
370
+ payerKey: wallet
371
+ }).compileToV0Message();
372
+ const tx = new web3_js_1.VersionedTransaction(messageV0);
373
+ return this.provider.sendAndConfirm(tx, [], {
374
+ skipPreflight: options === null || options === void 0 ? void 0 : options.skipPreflight,
375
+ commitment: 'confirmed'
376
+ });
377
+ });
378
+ }
379
+ /**
380
+ * Claim Stake Rewards
381
+ * @param wallet - User wallet
382
+ * @param mint - NFT mint
383
+ * @param week - Week rewards
384
+ * @param stakeVault - Name of the stake vault
385
+ * @param nftName - Name of the nft
386
+ *
387
+ */
388
+ claimStakeRewards({ wallet, mint, week, stakeVault, nftName }, options) {
389
+ return __awaiter(this, void 0, void 0, function* () {
390
+ const StakeVault = (0, helpers_1.getStakeVaultAddressSync)(this.program.programId, stakeVault);
391
+ const Stake = (0, helpers_1.getStakeAddressSync)(this.program.programId, nftName);
392
+ const NFTRewards = (0, helpers_1.getNFTRewardsAddressSync)(this.program.programId, Stake);
393
+ const FromAta = (0, helpers_1.getATASync)(StakeVault, mint);
394
+ const ToAta = (0, helpers_1.getATASync)(wallet, mint);
395
+ const method = this.program.methods
396
+ .claimStakeRewards({
397
+ week
398
+ })
399
+ .accounts({
400
+ signer: wallet,
401
+ fromAta: FromAta,
402
+ toAta: ToAta,
403
+ mint: mint,
404
+ nftRewards: NFTRewards,
405
+ stake: Stake,
406
+ stakeVault: StakeVault
407
+ });
408
+ if (options === null || options === void 0 ? void 0 : options.microLamports) {
409
+ method.postInstructions([
410
+ web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
411
+ microLamports: options.microLamports
412
+ })
413
+ ]);
414
+ }
415
+ return method.rpc({ skipPreflight: options === null || options === void 0 ? void 0 : options.skipPreflight });
416
+ });
417
+ }
324
418
  }
325
419
  exports.default = Stake;
package/dist/test.js CHANGED
@@ -17,13 +17,58 @@ const web3_js_1 = require("@solana/web3.js");
17
17
  const index_1 = __importDefault(require("./index"));
18
18
  const anchor_1 = require("@coral-xyz/anchor");
19
19
  const constants_1 = require("./utils/constants");
20
- const stakes_json_1 = __importDefault(require("./utils/stakes.json"));
21
- const file = fs_1.default.readFileSync('/Users/dannpl/.config/solana/triad-man.json');
20
+ const rarity_json_1 = __importDefault(require("./utils/stake-season-1/rarity.json"));
21
+ const users_collections_week_1_json_1 = __importDefault(require("./utils/stake-season-1/users-collections-week-1.json"));
22
+ const helpers_1 = require("./utils/helpers");
23
+ const file = fs_1.default.readFileSync('/Users/dannpl/.config/solana/id.json');
22
24
  const rpc_file = fs_1.default.readFileSync('/Users/dannpl/.config/solana/rpc.txt');
23
25
  const keypair = web3_js_1.Keypair.fromSecretKey(new Uint8Array(JSON.parse(file.toString())));
24
26
  const connection = new web3_js_1.Connection(rpc_file.toString(), 'confirmed');
25
27
  const wallet = new anchor_1.Wallet(keypair);
26
28
  const triadProtocol = new index_1.default(connection, wallet);
29
+ const populateStakeDay = () => __awaiter(void 0, void 0, void 0, function* () {
30
+ const { perDay } = yield triadProtocol.stake.getStakeVaultRewards(constants_1.STAKE_SEASON_1);
31
+ const day = 1719755851;
32
+ const stakes = yield triadProtocol.stake.getStakesByDay(constants_1.STAKE_SEASON_1, day);
33
+ const newItems = [];
34
+ const itemsByAuthority = stakes.reduce((acc, item) => {
35
+ const itemRarity = rarity_json_1.default.find((rarity) => rarity.onchainId === item.mint);
36
+ if (!itemRarity) {
37
+ return acc;
38
+ }
39
+ if (!acc[item.authority]) {
40
+ acc[item.authority] = [];
41
+ }
42
+ acc[item.authority].push(Object.assign(Object.assign({}, item), { rarity: itemRarity.rarity, rarityRankHrtt: itemRarity.rarityRankHrtt, collections: {} }));
43
+ return acc;
44
+ }, {});
45
+ Object.keys(itemsByAuthority).forEach((authority) => {
46
+ const items = itemsByAuthority[authority];
47
+ items.sort((a, b) => a.rarityRankHrtt - b.rarityRankHrtt);
48
+ items.forEach((item, index) => {
49
+ const collections = Object.values(users_collections_week_1_json_1.default.find((collection) => Object.keys(collection)[0] === item.authority))[0];
50
+ let totalMultiplier = (0, helpers_1.calculateTotalMultiplier)(index === 0
51
+ ? Object.keys(item.collections).map((x) => x.toUpperCase())
52
+ : [], {
53
+ max: 1839,
54
+ currentPosition: item.rarityRankHrtt
55
+ });
56
+ newItems.push(Object.assign(Object.assign({}, item), { totalMultiplier, collections: index === 0 ? collections : {} }));
57
+ });
58
+ });
59
+ const totalMultiplierSum = newItems.reduce((sum, user) => sum + user.totalMultiplier, 0);
60
+ const rewards = newItems.map((item) => {
61
+ const rewards = (item.totalMultiplier / totalMultiplierSum) * perDay;
62
+ return Object.assign(Object.assign({}, item), { rewards, apr: (0, helpers_1.calculateAPR)({
63
+ rewards,
64
+ rate: 7,
65
+ amount: 1,
66
+ baseRewards: perDay
67
+ }) });
68
+ });
69
+ const orderedRewards = rewards.sort((a, b) => b.rewards - a.rewards);
70
+ fs_1.default.writeFileSync(`./src/utils/stake-season-1/stakes/2/${day}.json`, JSON.stringify(orderedRewards, null, 2));
71
+ });
27
72
  const requestWithdraw = () => __awaiter(void 0, void 0, void 0, function* () {
28
73
  const response = yield triadProtocol.stake.requestWithdraw({
29
74
  wallet: wallet.publicKey,
@@ -36,6 +81,18 @@ const requestWithdraw = () => __awaiter(void 0, void 0, void 0, function* () {
36
81
  });
37
82
  console.log(response);
38
83
  });
84
+ const updateStakeVaultStatus = () => __awaiter(void 0, void 0, void 0, function* () {
85
+ const response = yield triadProtocol.stake.updateStakeVaultStatus({
86
+ wallet: wallet.publicKey,
87
+ isLocked: true,
88
+ week: 0,
89
+ stakeVault: constants_1.STAKE_SEASON_1
90
+ }, {
91
+ skipPreflight: true,
92
+ microLamports: 10000
93
+ });
94
+ console.log(response);
95
+ });
39
96
  const withdraw = () => __awaiter(void 0, void 0, void 0, function* () {
40
97
  const response = yield triadProtocol.stake.withdraw({
41
98
  wallet: wallet.publicKey,
@@ -49,11 +106,31 @@ const withdraw = () => __awaiter(void 0, void 0, void 0, function* () {
49
106
  console.log(response);
50
107
  });
51
108
  const getStake = () => __awaiter(void 0, void 0, void 0, function* () {
52
- const response = yield triadProtocol.stake.getStakeByWallet(wallet.publicKey);
109
+ const response = yield triadProtocol.stake.getStakeByWallet(new web3_js_1.PublicKey('E48CKgbZVpDzerQ7DdommgqNobRHLqHy8RUVi8HXkSHE'), constants_1.STAKE_SEASON_1);
53
110
  const stakeVaults = yield triadProtocol.stake.getStakeVaults();
54
111
  console.log(response);
55
112
  console.log(stakeVaults);
56
113
  });
114
+ const claimStakeRewards = () => __awaiter(void 0, void 0, void 0, function* () {
115
+ const response = yield triadProtocol.stake.claimStakeRewards({
116
+ wallet: wallet.publicKey,
117
+ mint: new web3_js_1.PublicKey(''),
118
+ week: 0,
119
+ stakeVault: constants_1.STAKE_SEASON_1,
120
+ nftName: ''
121
+ }, {
122
+ skipPreflight: true,
123
+ microLamports: 10000
124
+ });
125
+ console.log(response);
126
+ });
127
+ const getStakes = () => __awaiter(void 0, void 0, void 0, function* () {
128
+ const response = yield triadProtocol.stake.getStakes(constants_1.STAKE_SEASON_1);
129
+ const users = response
130
+ .filter((item, index, self) => index === self.findIndex((t) => t.authority === item.authority))
131
+ .map((user) => user.authority);
132
+ fs_1.default.writeFileSync('./src/utils/stake-season-1/users.json', JSON.stringify(users, null, 2));
133
+ });
57
134
  const stake = () => __awaiter(void 0, void 0, void 0, function* () {
58
135
  const response = yield triadProtocol.stake.stake({
59
136
  name: 'Triad 0',
@@ -73,38 +150,3 @@ const stake = () => __awaiter(void 0, void 0, void 0, function* () {
73
150
  });
74
151
  console.log(response);
75
152
  });
76
- stake();
77
- const getDailyBaseRewards = () => __awaiter(void 0, void 0, void 0, function* () {
78
- const stakeVaultRewards = yield triadProtocol.stake.getStakeVaultRewards(constants_1.STAKE_SEASON);
79
- const days = {};
80
- stakes_json_1.default.forEach((stake) => {
81
- const keys = Object.keys(stake.rewards);
82
- keys.forEach((key) => {
83
- if (!days[key]) {
84
- days[key] = 0;
85
- }
86
- days[key] += Object.values(stake.rewards[key]).length;
87
- });
88
- });
89
- const values = {};
90
- Object.keys(days).forEach((key) => {
91
- values[key] = stakeVaultRewards.perDay / days[key];
92
- });
93
- console.log('Daily Rewards:', values);
94
- });
95
- const getStakesByWallet = () => __awaiter(void 0, void 0, void 0, function* () {
96
- const response = yield triadProtocol.stake.getStakes();
97
- const stakeVaultRewards = yield triadProtocol.stake.getStakeVaultRewards(constants_1.STAKE_SEASON);
98
- const users = response
99
- .map((stake) => stake.authority)
100
- .filter((value, index, self) => self.indexOf(value) === index);
101
- const data = [];
102
- for (const user of users) {
103
- const rewardsByWallet = yield triadProtocol.stake.getStakeRewardsByWallet(new web3_js_1.PublicKey(user), stakeVaultRewards);
104
- data.push({
105
- wallet: user,
106
- rewards: rewardsByWallet
107
- });
108
- }
109
- fs_1.default.writeFileSync('./src/utils/stakes.json', JSON.stringify(data, null, 2));
110
- });