@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.
@@ -0,0 +1,114 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ import BN from 'bn.js';
3
+ export type Collection = 'alligators' | 'coleta' | 'undead' | 'pyth';
4
+ export type StakeArgs = {
5
+ name: string;
6
+ wallet: PublicKey;
7
+ stakeVault: string;
8
+ mint: PublicKey;
9
+ collections: Record<Collection, boolean>;
10
+ rarity: {
11
+ common: {};
12
+ } | {
13
+ uncommon: {};
14
+ } | {
15
+ rare: {};
16
+ } | {
17
+ epic: {};
18
+ } | {
19
+ legendary: {};
20
+ } | {
21
+ mythic: {};
22
+ };
23
+ };
24
+ export type InitializeStakeArgs = {
25
+ name: string;
26
+ slots: BN;
27
+ amount: BN;
28
+ collection: string;
29
+ };
30
+ export type DepositStakeRewardsArgs = {
31
+ wallet: PublicKey;
32
+ amount: BN;
33
+ mint: PublicKey;
34
+ stakeVault: string;
35
+ };
36
+ export type RequestWithdrawArgs = {
37
+ wallet: PublicKey;
38
+ nftName: string;
39
+ mint: PublicKey;
40
+ stakeVault: string;
41
+ };
42
+ export type WithdrawArgs = {
43
+ wallet: PublicKey;
44
+ nftName: string;
45
+ mint: PublicKey;
46
+ stakeVault: string;
47
+ };
48
+ export type UpdateStakeVaultStatusArgs = {
49
+ wallet: PublicKey;
50
+ isLocked: boolean;
51
+ week: number;
52
+ stakeVault: string;
53
+ };
54
+ export type ClaimStakeRewardsArgs = {
55
+ wallet: PublicKey;
56
+ week: number;
57
+ mint: PublicKey;
58
+ stakeVault: string;
59
+ nftName: string;
60
+ };
61
+ export type UpdateStakeRewardsArgs = {
62
+ day: number;
63
+ wallet: PublicKey;
64
+ items: {
65
+ rewards: BN;
66
+ apr: number;
67
+ nftName: string;
68
+ }[];
69
+ };
70
+ export declare enum RARITY_WEIGHT {
71
+ COMMON = 1,
72
+ UNCOMMON = 2,
73
+ RARE = 3,
74
+ EPIC = 4,
75
+ LEGENDARY = 5,
76
+ MYTHIC = 6
77
+ }
78
+ export declare enum COLLECTION_MUlTIPLIER {
79
+ ALLIGATORS = 1.5,
80
+ COLETA = 1.5,
81
+ UNDEAD = 1.5,
82
+ UNDEAD_TRIADFI = 2.5,
83
+ PYTH = 1.5
84
+ }
85
+ export type StakeVaultResponse = {
86
+ name: string;
87
+ collection: string;
88
+ slots: number;
89
+ amount: number;
90
+ isLocked: boolean;
91
+ usersPaid: PublicKey;
92
+ amountPaid: number;
93
+ amountUsers: number;
94
+ apr: number;
95
+ week: number;
96
+ initTs: number;
97
+ endTs: number;
98
+ };
99
+ export type StakeResponse = {
100
+ name: string;
101
+ collections: Record<Collection, {}>;
102
+ rarity: string;
103
+ stakeVault: string;
104
+ authority: string;
105
+ initTs: number;
106
+ isLocked: boolean;
107
+ withdrawTs: number;
108
+ mint: string;
109
+ stakeRewards: string;
110
+ apr?: number;
111
+ dailyRewards?: number[];
112
+ weeklyRewardsPaid?: boolean[];
113
+ weeklyRewards?: number;
114
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COLLECTION_MUlTIPLIER = exports.RARITY_WEIGHT = void 0;
4
+ var RARITY_WEIGHT;
5
+ (function (RARITY_WEIGHT) {
6
+ RARITY_WEIGHT[RARITY_WEIGHT["COMMON"] = 1] = "COMMON";
7
+ RARITY_WEIGHT[RARITY_WEIGHT["UNCOMMON"] = 2] = "UNCOMMON";
8
+ RARITY_WEIGHT[RARITY_WEIGHT["RARE"] = 3] = "RARE";
9
+ RARITY_WEIGHT[RARITY_WEIGHT["EPIC"] = 4] = "EPIC";
10
+ RARITY_WEIGHT[RARITY_WEIGHT["LEGENDARY"] = 5] = "LEGENDARY";
11
+ RARITY_WEIGHT[RARITY_WEIGHT["MYTHIC"] = 6] = "MYTHIC";
12
+ })(RARITY_WEIGHT || (exports.RARITY_WEIGHT = RARITY_WEIGHT = {}));
13
+ var COLLECTION_MUlTIPLIER;
14
+ (function (COLLECTION_MUlTIPLIER) {
15
+ COLLECTION_MUlTIPLIER[COLLECTION_MUlTIPLIER["ALLIGATORS"] = 1.5] = "ALLIGATORS";
16
+ COLLECTION_MUlTIPLIER[COLLECTION_MUlTIPLIER["COLETA"] = 1.5] = "COLETA";
17
+ COLLECTION_MUlTIPLIER[COLLECTION_MUlTIPLIER["UNDEAD"] = 1.5] = "UNDEAD";
18
+ COLLECTION_MUlTIPLIER[COLLECTION_MUlTIPLIER["UNDEAD_TRIADFI"] = 2.5] = "UNDEAD_TRIADFI";
19
+ COLLECTION_MUlTIPLIER[COLLECTION_MUlTIPLIER["PYTH"] = 1.5] = "PYTH";
20
+ })(COLLECTION_MUlTIPLIER || (exports.COLLECTION_MUlTIPLIER = COLLECTION_MUlTIPLIER = {}));
@@ -12,6 +12,63 @@ export type TriadProtocol = {
12
12
  spec: '0.1.0';
13
13
  };
14
14
  instructions: [
15
+ {
16
+ name: 'claimStakeRewards';
17
+ discriminator: [107, 91, 233, 196, 211, 47, 218, 21];
18
+ accounts: [
19
+ {
20
+ name: 'signer';
21
+ writable: true;
22
+ signer: true;
23
+ },
24
+ {
25
+ name: 'stakeVault';
26
+ writable: true;
27
+ },
28
+ {
29
+ name: 'stake';
30
+ writable: true;
31
+ },
32
+ {
33
+ name: 'nftRewards';
34
+ writable: true;
35
+ },
36
+ {
37
+ name: 'mint';
38
+ writable: true;
39
+ },
40
+ {
41
+ name: 'fromAta';
42
+ writable: true;
43
+ },
44
+ {
45
+ name: 'toAta';
46
+ writable: true;
47
+ },
48
+ {
49
+ name: 'tokenProgram';
50
+ address: 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';
51
+ },
52
+ {
53
+ name: 'associatedTokenProgram';
54
+ address: 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';
55
+ },
56
+ {
57
+ name: 'systemProgram';
58
+ address: '11111111111111111111111111111111';
59
+ }
60
+ ];
61
+ args: [
62
+ {
63
+ name: 'args';
64
+ type: {
65
+ defined: {
66
+ name: 'claimStakeRewardsArgs';
67
+ };
68
+ };
69
+ }
70
+ ];
71
+ },
15
72
  {
16
73
  name: 'closePosition';
17
74
  discriminator: [123, 134, 81, 0, 49, 68, 98, 98];
@@ -548,6 +605,80 @@ export type TriadProtocol = {
548
605
  }
549
606
  ];
550
607
  },
608
+ {
609
+ name: 'updateStakeRewards';
610
+ discriminator: [39, 82, 38, 43, 234, 67, 69, 94];
611
+ accounts: [
612
+ {
613
+ name: 'signer';
614
+ writable: true;
615
+ signer: true;
616
+ },
617
+ {
618
+ name: 'stake';
619
+ writable: true;
620
+ },
621
+ {
622
+ name: 'nftRewards';
623
+ writable: true;
624
+ pda: {
625
+ seeds: [
626
+ {
627
+ kind: 'const';
628
+ value: [110, 102, 116, 95, 114, 101, 119, 97, 114, 100, 115];
629
+ },
630
+ {
631
+ kind: 'account';
632
+ path: 'stake';
633
+ }
634
+ ];
635
+ };
636
+ },
637
+ {
638
+ name: 'systemProgram';
639
+ address: '11111111111111111111111111111111';
640
+ }
641
+ ];
642
+ args: [
643
+ {
644
+ name: 'args';
645
+ type: {
646
+ defined: {
647
+ name: 'updateStakeRewardsArgs';
648
+ };
649
+ };
650
+ }
651
+ ];
652
+ },
653
+ {
654
+ name: 'updateStakeVaultStatus';
655
+ discriminator: [71, 64, 188, 150, 86, 254, 221, 65];
656
+ accounts: [
657
+ {
658
+ name: 'signer';
659
+ writable: true;
660
+ signer: true;
661
+ },
662
+ {
663
+ name: 'stakeVault';
664
+ writable: true;
665
+ },
666
+ {
667
+ name: 'systemProgram';
668
+ address: '11111111111111111111111111111111';
669
+ }
670
+ ];
671
+ args: [
672
+ {
673
+ name: 'args';
674
+ type: {
675
+ defined: {
676
+ name: 'updateStakeVaultStatusArgs';
677
+ };
678
+ };
679
+ }
680
+ ];
681
+ },
551
682
  {
552
683
  name: 'updateTickerPrice';
553
684
  discriminator: [203, 166, 139, 83, 76, 144, 250, 29];
@@ -618,6 +749,14 @@ export type TriadProtocol = {
618
749
  ];
619
750
  };
620
751
  },
752
+ {
753
+ name: 'admin';
754
+ writable: true;
755
+ },
756
+ {
757
+ name: 'nftRewards';
758
+ writable: true;
759
+ },
621
760
  {
622
761
  name: 'mint';
623
762
  writable: true;
@@ -656,6 +795,10 @@ export type TriadProtocol = {
656
795
  }
657
796
  ];
658
797
  accounts: [
798
+ {
799
+ name: 'nftRewards';
800
+ discriminator: [210, 99, 18, 65, 58, 128, 167, 91];
801
+ },
659
802
  {
660
803
  name: 'stake';
661
804
  discriminator: [150, 197, 176, 29, 55, 132, 112, 149];
@@ -694,106 +837,113 @@ export type TriadProtocol = {
694
837
  errors: [
695
838
  {
696
839
  code: 6000;
697
- name: 'unauthorizedToDeleteProject';
698
- msg: 'Unauthorized to delete the project';
699
- },
700
- {
701
- code: 6001;
702
- name: 'invalidShadowAccount';
703
- msg: 'Invalid shadow account';
704
- },
705
- {
706
- code: 6002;
707
840
  name: 'invalidAccount';
708
841
  msg: 'Invalid account';
709
842
  },
710
843
  {
711
- code: 6003;
844
+ code: 6001;
712
845
  name: 'unauthorized';
713
846
  msg: 'Unauthorized access';
714
847
  },
715
848
  {
716
- code: 6004;
717
- name: 'alphaVantageApiError';
718
- msg: 'Failed to get data from Vybe Network';
719
- },
720
- {
721
- code: 6005;
849
+ code: 6002;
722
850
  name: 'depositFailed';
723
851
  msg: 'Failed to deposit';
724
852
  },
725
853
  {
726
- code: 6006;
854
+ code: 6003;
727
855
  name: 'invalidOwnerAuthority';
728
856
  msg: 'Invalid Owner authority';
729
857
  },
730
858
  {
731
- code: 6007;
859
+ code: 6004;
732
860
  name: 'invalidPosition';
733
861
  msg: 'Invalid Position';
734
862
  },
735
863
  {
736
- code: 6008;
864
+ code: 6005;
737
865
  name: 'invalidTickerPosition';
738
866
  msg: 'Invalid Ticker position';
739
867
  },
740
868
  {
741
- code: 6009;
869
+ code: 6006;
742
870
  name: 'noFreePositionSlot';
743
871
  msg: 'No free position slot';
744
872
  },
745
873
  {
746
- code: 6010;
874
+ code: 6007;
747
875
  name: 'invalidMintAddress';
748
876
  msg: 'Invalid Mint address';
749
877
  },
750
878
  {
751
- code: 6011;
879
+ code: 6008;
752
880
  name: 'invalidProfitShare';
753
881
  msg: 'Invalid Profit Share';
754
882
  },
755
883
  {
756
- code: 6012;
884
+ code: 6009;
757
885
  name: 'invalidDepositAmount';
758
886
  msg: 'Invalid Deposit Amount';
759
887
  },
760
888
  {
761
- code: 6013;
889
+ code: 6010;
762
890
  name: 'invalidWithdrawAmount';
763
891
  msg: 'Invalid Withdraw Amount';
764
892
  },
765
893
  {
766
- code: 6014;
894
+ code: 6011;
767
895
  name: 'invalidStakeVault';
768
896
  msg: 'Invalid Stake Vault';
769
897
  },
770
898
  {
771
- code: 6015;
899
+ code: 6012;
772
900
  name: 'invalidStakeVaultAuthority';
773
901
  msg: 'Invalid Stake Vault Authority';
774
902
  },
775
903
  {
776
- code: 6016;
904
+ code: 6013;
777
905
  name: 'invalidStakeVaultAmount';
778
906
  msg: 'Invalid Stake Vault Amount';
779
907
  },
780
908
  {
781
- code: 6017;
909
+ code: 6014;
782
910
  name: 'stakeVaultLocked';
783
911
  msg: 'Stake Vault Available';
784
912
  },
785
913
  {
786
- code: 6018;
914
+ code: 6015;
787
915
  name: 'stakeLocked';
788
916
  msg: 'Stake is locked';
789
917
  },
790
918
  {
791
- code: 6019;
919
+ code: 6016;
792
920
  name: 'stakeVaultFull';
793
921
  msg: 'Stake Vault Full';
922
+ },
923
+ {
924
+ code: 6017;
925
+ name: 'invalidMint';
926
+ msg: 'Invalid Mint';
927
+ },
928
+ {
929
+ code: 6018;
930
+ name: 'invalidStakeVaultWeek';
931
+ msg: 'Invalid Stake Vault Week';
794
932
  }
795
933
  ];
796
934
  types: [
935
+ {
936
+ name: 'claimStakeRewardsArgs';
937
+ type: {
938
+ kind: 'struct';
939
+ fields: [
940
+ {
941
+ name: 'week';
942
+ type: 'u8';
943
+ }
944
+ ];
945
+ };
946
+ },
797
947
  {
798
948
  name: 'closePositionArgs';
799
949
  type: {
@@ -918,6 +1068,34 @@ export type TriadProtocol = {
918
1068
  ];
919
1069
  };
920
1070
  },
1071
+ {
1072
+ name: 'nftRewards';
1073
+ type: {
1074
+ kind: 'struct';
1075
+ fields: [
1076
+ {
1077
+ name: 'stake';
1078
+ type: 'pubkey';
1079
+ },
1080
+ {
1081
+ name: 'dailyRewards';
1082
+ type: {
1083
+ array: ['u64', 30];
1084
+ };
1085
+ },
1086
+ {
1087
+ name: 'weeklyRewardsPaid';
1088
+ type: {
1089
+ array: ['bool', 5];
1090
+ };
1091
+ },
1092
+ {
1093
+ name: 'apr';
1094
+ type: 'f32';
1095
+ }
1096
+ ];
1097
+ };
1098
+ },
921
1099
  {
922
1100
  name: 'openPositionArgs';
923
1101
  type: {
@@ -1193,10 +1371,14 @@ export type TriadProtocol = {
1193
1371
  name: 'usersPaid';
1194
1372
  type: 'pubkey';
1195
1373
  },
1374
+ {
1375
+ name: 'week';
1376
+ type: 'u8';
1377
+ },
1196
1378
  {
1197
1379
  name: 'padding';
1198
1380
  type: {
1199
- array: ['u8', 64];
1381
+ array: ['u8', 56];
1200
1382
  };
1201
1383
  }
1202
1384
  ];
@@ -1272,6 +1454,42 @@ export type TriadProtocol = {
1272
1454
  ];
1273
1455
  };
1274
1456
  },
1457
+ {
1458
+ name: 'updateStakeRewardsArgs';
1459
+ type: {
1460
+ kind: 'struct';
1461
+ fields: [
1462
+ {
1463
+ name: 'day';
1464
+ type: 'u8';
1465
+ },
1466
+ {
1467
+ name: 'rewards';
1468
+ type: 'u64';
1469
+ },
1470
+ {
1471
+ name: 'apr';
1472
+ type: 'f32';
1473
+ }
1474
+ ];
1475
+ };
1476
+ },
1477
+ {
1478
+ name: 'updateStakeVaultStatusArgs';
1479
+ type: {
1480
+ kind: 'struct';
1481
+ fields: [
1482
+ {
1483
+ name: 'isLocked';
1484
+ type: 'bool';
1485
+ },
1486
+ {
1487
+ name: 'week';
1488
+ type: 'u8';
1489
+ }
1490
+ ];
1491
+ };
1492
+ },
1275
1493
  {
1276
1494
  name: 'updateTickerPriceArgs';
1277
1495
  type: {
@@ -1,6 +1,7 @@
1
1
  export declare const TRIAD_PROTOCOL_PROGRAM_ID = "TRDwq3BN4mP3m9KsuNUWSN6QDff93VKGSwE95Jbr9Ss";
2
2
  export declare const ATA_PROGRAM_ID = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
3
- export declare const STAKE_SEASON = "Triad Share 1";
3
+ export declare const ADMIN = "";
4
+ export declare const STAKE_SEASON_1 = "Triad Share 1";
4
5
  export declare const TTRIAD_DECIMALS = 6;
5
6
  export declare const TTRIAD_FEE = 2;
6
7
  export declare const RARITY_RANK_SEASON_1: {
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RARITY_RANK_SEASON_1 = exports.TTRIAD_FEE = exports.TTRIAD_DECIMALS = exports.STAKE_SEASON = exports.ATA_PROGRAM_ID = exports.TRIAD_PROTOCOL_PROGRAM_ID = void 0;
3
+ exports.RARITY_RANK_SEASON_1 = exports.TTRIAD_FEE = exports.TTRIAD_DECIMALS = exports.STAKE_SEASON_1 = exports.ADMIN = exports.ATA_PROGRAM_ID = exports.TRIAD_PROTOCOL_PROGRAM_ID = void 0;
4
4
  exports.TRIAD_PROTOCOL_PROGRAM_ID = 'TRDwq3BN4mP3m9KsuNUWSN6QDff93VKGSwE95Jbr9Ss';
5
5
  exports.ATA_PROGRAM_ID = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';
6
- exports.STAKE_SEASON = 'Triad Share 1';
6
+ exports.ADMIN = '';
7
+ exports.STAKE_SEASON_1 = 'Triad Share 1';
7
8
  exports.TTRIAD_DECIMALS = 6;
8
9
  exports.TTRIAD_FEE = 2;
9
10
  exports.RARITY_RANK_SEASON_1 = {
@@ -1,3 +1,4 @@
1
+ import { COLLECTION_MUlTIPLIER, StakeResponse, StakeVaultResponse } from './../types/stake';
1
2
  import { PublicKey } from '@solana/web3.js';
2
3
  import BN from 'bn.js';
3
4
  export declare const getTickerAddressSync: (programId: PublicKey, tickerName: string) => PublicKey;
@@ -7,5 +8,19 @@ export declare const getVaultAddressSync: (programId: PublicKey, tickerAddress:
7
8
  export declare const getTokenVaultAddressSync: (programId: PublicKey, vault: PublicKey) => PublicKey;
8
9
  export declare function getUserPositionAddressSync(programId: PublicKey, authority: PublicKey, ticker: PublicKey): PublicKey;
9
10
  export declare const getStakeVaultAddressSync: (programId: PublicKey, vaultName: string) => PublicKey;
11
+ export declare const getStakeAddressSync: (programId: PublicKey, nftName: string) => PublicKey;
12
+ export declare const getNFTRewardsAddressSync: (programId: PublicKey, stake: PublicKey) => PublicKey;
10
13
  export declare const getATASync: (address: PublicKey, Mint: PublicKey) => PublicKey;
11
14
  export declare const formatNumber: (number: bigint | BN, decimals?: number) => number;
15
+ export declare const formatStakeVault: (stakeVault: any) => StakeVaultResponse;
16
+ export declare const formatStake: (stake: any) => StakeResponse;
17
+ export declare const calculateTotalMultiplier: (collections: COLLECTION_MUlTIPLIER[], rank: {
18
+ max: number;
19
+ currentPosition: number;
20
+ }) => number;
21
+ export declare const calculateAPR: ({ rewards, rate, amount, baseRewards }: {
22
+ rewards: number;
23
+ rate: number;
24
+ amount: number;
25
+ baseRewards: number;
26
+ }) => number;
@@ -23,7 +23,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.formatNumber = exports.getATASync = exports.getStakeVaultAddressSync = exports.getUserPositionAddressSync = exports.getTokenVaultAddressSync = exports.getVaultAddressSync = exports.decodeString = exports.encodeString = exports.getTickerAddressSync = void 0;
26
+ exports.calculateAPR = exports.calculateTotalMultiplier = exports.formatStake = exports.formatStakeVault = exports.formatNumber = exports.getATASync = exports.getNFTRewardsAddressSync = exports.getStakeAddressSync = exports.getStakeVaultAddressSync = exports.getUserPositionAddressSync = exports.getTokenVaultAddressSync = exports.getVaultAddressSync = exports.decodeString = exports.encodeString = exports.getTickerAddressSync = void 0;
27
+ const stake_1 = require("./../types/stake");
27
28
  const web3_js_1 = require("@solana/web3.js");
28
29
  const anchor = __importStar(require("@coral-xyz/anchor"));
29
30
  const spl_token_1 = require("@solana/spl-token");
@@ -75,6 +76,16 @@ const getStakeVaultAddressSync = (programId, vaultName) => {
75
76
  return StakeVaultPDA;
76
77
  };
77
78
  exports.getStakeVaultAddressSync = getStakeVaultAddressSync;
79
+ const getStakeAddressSync = (programId, nftName) => {
80
+ const [StakePDA] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('stake'), Buffer.from(nftName)], programId);
81
+ return StakePDA;
82
+ };
83
+ exports.getStakeAddressSync = getStakeAddressSync;
84
+ const getNFTRewardsAddressSync = (programId, stake) => {
85
+ const [NFTRewardsPDA] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('nft_rewards'), stake.toBuffer()], programId);
86
+ return NFTRewardsPDA;
87
+ };
88
+ exports.getNFTRewardsAddressSync = getNFTRewardsAddressSync;
78
89
  const getATASync = (address, Mint) => {
79
90
  const [ATA] = web3_js_1.PublicKey.findProgramAddressSync([address.toBytes(), spl_token_1.TOKEN_2022_PROGRAM_ID.toBytes(), Mint.toBytes()], new web3_js_1.PublicKey(constants_1.ATA_PROGRAM_ID));
80
91
  return ATA;
@@ -84,3 +95,50 @@ const formatNumber = (number, decimals = 6) => {
84
95
  return Number(number.toString()) / Math.pow(10, decimals);
85
96
  };
86
97
  exports.formatNumber = formatNumber;
98
+ const formatStakeVault = (stakeVault) => {
99
+ return {
100
+ name: stakeVault.name,
101
+ collection: stakeVault.collection,
102
+ slots: stakeVault.slots.toNumber(),
103
+ amount: stakeVault.amount.toNumber(),
104
+ isLocked: stakeVault.isLocked,
105
+ usersPaid: stakeVault.usersPaid.toBase58(),
106
+ amountPaid: stakeVault.amountPaid.toNumber(),
107
+ amountUsers: stakeVault.amountUsers.toNumber(),
108
+ week: stakeVault.week,
109
+ apr: stakeVault.apr,
110
+ initTs: stakeVault.initTs.toNumber(),
111
+ endTs: stakeVault.endTs.toNumber()
112
+ };
113
+ };
114
+ exports.formatStakeVault = formatStakeVault;
115
+ const formatStake = (stake) => {
116
+ return {
117
+ name: stake.name,
118
+ collections: stake.collections,
119
+ rarity: Object.keys(stake.rarity)[0],
120
+ stakeVault: stake.stakeVault.toBase58(),
121
+ authority: stake.authority.toBase58(),
122
+ initTs: stake.initTs.toNumber(),
123
+ isLocked: stake.isLocked,
124
+ withdrawTs: stake.withdrawTs.toNumber(),
125
+ mint: stake.mint.toBase58(),
126
+ stakeRewards: stake.stakeRewards.toBase58()
127
+ };
128
+ };
129
+ exports.formatStake = formatStake;
130
+ const calculateTotalMultiplier = (collections, rank) => {
131
+ let multiplier = 1;
132
+ collections.forEach((collection) => {
133
+ if (stake_1.COLLECTION_MUlTIPLIER[collection]) {
134
+ multiplier *= Number(stake_1.COLLECTION_MUlTIPLIER[collection]);
135
+ }
136
+ });
137
+ let rankMultiplier = (rank.max + 1 - rank.currentPosition) / rank.max;
138
+ return multiplier * rankMultiplier;
139
+ };
140
+ exports.calculateTotalMultiplier = calculateTotalMultiplier;
141
+ const calculateAPR = ({ rewards, rate, amount, baseRewards }) => {
142
+ return ((rewards * rate) / (amount * baseRewards)) * 100;
143
+ };
144
+ exports.calculateAPR = calculateAPR;