proof-of-take-sdk 1.0.0 → 2.0.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.
Files changed (32) hide show
  1. package/dist/getters/index.d.ts +0 -1
  2. package/dist/getters/index.js +0 -1
  3. package/dist/idl/proof_of_take.json +54 -458
  4. package/dist/instructions/claimReferralPenaltyForWindow.d.ts +2 -1
  5. package/dist/instructions/claimReferralPenaltyForWindow.js +4 -4
  6. package/dist/instructions/claimWindowRewards.d.ts +2 -1
  7. package/dist/instructions/claimWindowRewards.js +2 -2
  8. package/dist/instructions/confirmedPostOnX.d.ts +3 -1
  9. package/dist/instructions/confirmedPostOnX.js +4 -10
  10. package/dist/instructions/createMiztake.d.ts +3 -2
  11. package/dist/instructions/createMiztake.js +5 -5
  12. package/dist/instructions/joinSeason.d.ts +3 -3
  13. package/dist/instructions/joinSeason.js +9 -20
  14. package/dist/instructions/viewSeasonMembershipStatus.d.ts +2 -2
  15. package/dist/instructions/viewSeasonMembershipStatus.js +3 -3
  16. package/dist/instructions/withdrawSeasonDeposit.d.ts +3 -1
  17. package/dist/instructions/withdrawSeasonDeposit.js +3 -7
  18. package/dist/types/proof_of_take.d.ts +43 -447
  19. package/dist/types.d.ts +0 -3
  20. package/dist/utils/accountUpdates.d.ts +6 -6
  21. package/dist/utils/accountUpdates.js +7 -10
  22. package/dist/utils/constants.d.ts +0 -1
  23. package/dist/utils/constants.js +1 -2
  24. package/dist/utils/pdaManager.d.ts +6 -6
  25. package/dist/utils/pdaManager.js +11 -11
  26. package/dist/utils/pdas.d.ts +21 -12
  27. package/dist/utils/pdas.js +36 -20
  28. package/dist/utils/tierPenalty.d.ts +8 -0
  29. package/dist/utils/tierPenalty.js +30 -0
  30. package/package.json +1 -1
  31. package/dist/getters/getTokenVault.d.ts +0 -30
  32. package/dist/getters/getTokenVault.js +0 -56
@@ -66,11 +66,11 @@ export declare function updateMiztakeStatisticsForCreation(statistics: MiztakeSt
66
66
  * @param user - User's public key
67
67
  * @param seasonNumber - Season number
68
68
  * @param windowNumber - Window number
69
- * @param seasonMembershipId - Season membership ID
69
+ * @param tier - Tier number (1..=5)
70
70
  * @param miztakeId - The miztake ID to associate
71
71
  * @returns Initialized/Updated UserWindowParticipation object
72
72
  */
73
- export declare function initializeUserWindowParticipation(user: PublicKey, seasonNumber: BN, windowNumber: BN, seasonMembershipId: BN, miztakeId: BN): UserWindowParticipation;
73
+ export declare function initializeUserWindowParticipation(user: PublicKey, seasonNumber: BN, windowNumber: BN, tier: number, miztakeId: BN): UserWindowParticipation;
74
74
  /**
75
75
  * Initialize RewardWindow
76
76
  * Mirrors the logic from season_helpers::initialize_window
@@ -97,7 +97,7 @@ export declare function updateMiztakeForSeasonUse(miztake: Miztake, seasonNumber
97
97
  * Mirrors the initialization from join_season.rs (lines 84-96)
98
98
  *
99
99
  * @param user - User's public key
100
- * @param seasonMembershipId - Membership ID
100
+ * @param tier - Tier number (1..=5)
101
101
  * @param seasonNumber - Season number
102
102
  * @param depositTier - Tier chosen at join time
103
103
  * @param depositAmount - Active deposit amount (participates in rewards/penalties)
@@ -106,7 +106,7 @@ export declare function updateMiztakeForSeasonUse(miztake: Miztake, seasonNumber
106
106
  * @param joinedWindowNumber - Window number when joined
107
107
  * @returns Initialized SeasonMembership object
108
108
  */
109
- export declare function initializeSeasonMembership(user: PublicKey, seasonMembershipId: BN, seasonNumber: BN, depositTier: SeasonDepositTier, referrer: PublicKey, depositAmount: BN, depositEscrowedAmount: BN, joinedAt: BN, joinedWindowNumber: BN, bump: number): SeasonMembership;
109
+ export declare function initializeSeasonMembership(user: PublicKey, seasonNumber: BN, depositTier: SeasonDepositTier, referrer: PublicKey, depositAmount: BN, depositEscrowedAmount: BN, joinedAt: BN, joinedWindowNumber: BN, bump: number): SeasonMembership;
110
110
  /**
111
111
  * Update Season after a user joins
112
112
  * Mirrors the update from join_season.rs (lines 98-104)
@@ -197,7 +197,7 @@ export declare function updateMembershipForClaim(membership: SeasonMembership, r
197
197
  * @param referredUser - The user who missed the window
198
198
  * @param seasonNumber - Season number
199
199
  * @param windowNumber - Window number
200
- * @param seasonMembershipId - Referred user's membership id
200
+ * @param tier - Tier number (1..=5)
201
201
  * @param claimant - Referrer (or root admin if no referrer)
202
202
  * @param perWindowPenalty - Tier penalty per window (base units)
203
203
  * @param claimedAt - Unix timestamp in seconds (i64 on-chain, represented as BN in SDK)
@@ -206,7 +206,7 @@ export declare function initializeReferralPenaltyClaim(params: {
206
206
  referredUser: PublicKey;
207
207
  seasonNumber: BN;
208
208
  windowNumber: BN;
209
- seasonMembershipId: BN;
209
+ tier: number;
210
210
  claimant: PublicKey;
211
211
  perWindowPenalty: BN;
212
212
  claimedAt?: BN;
@@ -135,17 +135,16 @@ function updateMiztakeStatisticsForCreation(statistics) {
135
135
  * @param user - User's public key
136
136
  * @param seasonNumber - Season number
137
137
  * @param windowNumber - Window number
138
- * @param seasonMembershipId - Season membership ID
138
+ * @param tier - Tier number (1..=5)
139
139
  * @param miztakeId - The miztake ID to associate
140
140
  * @returns Initialized/Updated UserWindowParticipation object
141
141
  */
142
- function initializeUserWindowParticipation(user, seasonNumber, windowNumber, seasonMembershipId, miztakeId) {
143
- const [, bump] = (0, pdas_1.getUserWindowParticipationPda)(user, seasonNumber, windowNumber, seasonMembershipId);
142
+ function initializeUserWindowParticipation(user, seasonNumber, windowNumber, tier, miztakeId) {
143
+ const [, bump] = (0, pdas_1.getUserWindowParticipationPda)(seasonNumber, user, tier, windowNumber);
144
144
  return {
145
145
  user,
146
146
  seasonNumber,
147
147
  windowNumber,
148
- seasonMembershipId,
149
148
  postedSuccessfully: false,
150
149
  claimedReward: false,
151
150
  rewardAmount: new anchor_1.BN(0),
@@ -203,7 +202,7 @@ function updateMiztakeForSeasonUse(miztake, seasonNumber, windowNumber) {
203
202
  * Mirrors the initialization from join_season.rs (lines 84-96)
204
203
  *
205
204
  * @param user - User's public key
206
- * @param seasonMembershipId - Membership ID
205
+ * @param tier - Tier number (1..=5)
207
206
  * @param seasonNumber - Season number
208
207
  * @param depositTier - Tier chosen at join time
209
208
  * @param depositAmount - Active deposit amount (participates in rewards/penalties)
@@ -212,9 +211,8 @@ function updateMiztakeForSeasonUse(miztake, seasonNumber, windowNumber) {
212
211
  * @param joinedWindowNumber - Window number when joined
213
212
  * @returns Initialized SeasonMembership object
214
213
  */
215
- function initializeSeasonMembership(user, seasonMembershipId, seasonNumber, depositTier, referrer, depositAmount, depositEscrowedAmount, joinedAt, joinedWindowNumber, bump) {
214
+ function initializeSeasonMembership(user, seasonNumber, depositTier, referrer, depositAmount, depositEscrowedAmount, joinedAt, joinedWindowNumber, bump) {
216
215
  return {
217
- id: seasonMembershipId,
218
216
  owner: user,
219
217
  referrer,
220
218
  seasonNumber,
@@ -481,20 +479,19 @@ function updateMembershipForClaim(membership, rewardAmount) {
481
479
  * @param referredUser - The user who missed the window
482
480
  * @param seasonNumber - Season number
483
481
  * @param windowNumber - Window number
484
- * @param seasonMembershipId - Referred user's membership id
482
+ * @param tier - Tier number (1..=5)
485
483
  * @param claimant - Referrer (or root admin if no referrer)
486
484
  * @param perWindowPenalty - Tier penalty per window (base units)
487
485
  * @param claimedAt - Unix timestamp in seconds (i64 on-chain, represented as BN in SDK)
488
486
  */
489
487
  function initializeReferralPenaltyClaim(params) {
490
- const [, bump] = (0, pdas_1.getReferralPenaltyClaimPda)(params.referredUser, params.seasonNumber, params.windowNumber, params.seasonMembershipId);
488
+ const [, bump] = (0, pdas_1.getReferralPenaltyClaimPda)(params.seasonNumber, params.referredUser, params.tier, params.windowNumber);
491
489
  const claimedAt = getCurrentTimestamp(params.claimedAt);
492
490
  const amount = params.perWindowPenalty.muln(20).divn(100);
493
491
  return {
494
492
  referredUser: params.referredUser,
495
493
  seasonNumber: params.seasonNumber,
496
494
  windowNumber: params.windowNumber,
497
- seasonMembershipId: params.seasonMembershipId,
498
495
  claimant: params.claimant,
499
496
  amount,
500
497
  claimedAt,
@@ -7,7 +7,6 @@ export declare const ADMIN_PUBLIC_KEY: PublicKey;
7
7
  export declare const MIZD_TOKEN_MINT: PublicKey;
8
8
  export declare const DEFAULT_FEE_RECIPIENT: PublicKey;
9
9
  export declare const MIZTAKE_STATISTICS_SEED = "miztake_statistics";
10
- export declare const TOKEN_VAULT_SEED = "token_vault";
11
10
  export declare const USER_STATS_SEED = "user_stats";
12
11
  export declare const MIZTAKE_SEED = "miztake";
13
12
  export declare const REFERRAL_PENALTY_CLAIM_SEED = "referral_penalty_claim";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MIN_HASH_LENGTH = exports.MAX_USERNAME_LENGTH = exports.MAX_MAX_CLAIMABLE = exports.MIN_MAX_CLAIMABLE = exports.MAX_FEE = exports.MIN_FEE = exports.DEFAULT_MAX_CLAIMABLE = exports.DEFAULT_MIZTAKE_FEE = exports.REFERRAL_PENALTY_CLAIM_SEED = exports.MIZTAKE_SEED = exports.USER_STATS_SEED = exports.TOKEN_VAULT_SEED = exports.MIZTAKE_STATISTICS_SEED = exports.DEFAULT_FEE_RECIPIENT = exports.MIZD_TOKEN_MINT = exports.ADMIN_PUBLIC_KEY = exports.PROGRAM_ID = void 0;
3
+ exports.MIN_HASH_LENGTH = exports.MAX_USERNAME_LENGTH = exports.MAX_MAX_CLAIMABLE = exports.MIN_MAX_CLAIMABLE = exports.MAX_FEE = exports.MIN_FEE = exports.DEFAULT_MAX_CLAIMABLE = exports.DEFAULT_MIZTAKE_FEE = exports.REFERRAL_PENALTY_CLAIM_SEED = exports.MIZTAKE_SEED = exports.USER_STATS_SEED = exports.MIZTAKE_STATISTICS_SEED = exports.DEFAULT_FEE_RECIPIENT = exports.MIZD_TOKEN_MINT = exports.ADMIN_PUBLIC_KEY = exports.PROGRAM_ID = void 0;
4
4
  const web3_js_1 = require("@solana/web3.js");
5
5
  /**
6
6
  * Proof of Miztake Program Constants
@@ -15,7 +15,6 @@ exports.MIZD_TOKEN_MINT = new web3_js_1.PublicKey("mizdS9fDNUKWZcXBeRhJoJQHJJmsT
15
15
  exports.DEFAULT_FEE_RECIPIENT = new web3_js_1.PublicKey("Dkhu2VgGPfvXPVuohG2fPfryRacWMpNBJXvRGF1dhzUh");
16
16
  // Seeds for PDAs
17
17
  exports.MIZTAKE_STATISTICS_SEED = "miztake_statistics";
18
- exports.TOKEN_VAULT_SEED = "token_vault";
19
18
  exports.USER_STATS_SEED = "user_stats";
20
19
  exports.MIZTAKE_SEED = "miztake";
21
20
  exports.REFERRAL_PENALTY_CLAIM_SEED = "referral_penalty_claim";
@@ -13,8 +13,8 @@ export declare class PDAManager {
13
13
  telegramId: BN;
14
14
  seasonNumber: BN;
15
15
  windowNumber: BN;
16
- seasonMembershipId: BN;
17
16
  user: PublicKey;
17
+ tier: number;
18
18
  }): {
19
19
  miztake: PublicKey;
20
20
  userStats: PublicKey;
@@ -31,7 +31,7 @@ export declare class PDAManager {
31
31
  static deriveJoinSeasonPdas(params: {
32
32
  user: PublicKey;
33
33
  seasonNumber: BN;
34
- seasonMembershipId: BN;
34
+ tier: number;
35
35
  }): {
36
36
  seasonSettings: PublicKey;
37
37
  season: PublicKey;
@@ -46,7 +46,7 @@ export declare class PDAManager {
46
46
  user: PublicKey;
47
47
  seasonNumber: BN;
48
48
  windowNumber: BN;
49
- seasonMembershipId: BN;
49
+ tier: number;
50
50
  /** SHA-256 hex string (64 chars) */
51
51
  miztakeShaHash: string;
52
52
  }): {
@@ -64,7 +64,7 @@ export declare class PDAManager {
64
64
  user: PublicKey;
65
65
  seasonNumber: BN;
66
66
  windowNumber: BN;
67
- seasonMembershipId: BN;
67
+ tier: number;
68
68
  }): {
69
69
  seasonSettings: PublicKey;
70
70
  season: PublicKey;
@@ -79,7 +79,7 @@ export declare class PDAManager {
79
79
  static deriveWithdrawDepositPdas(params: {
80
80
  user: PublicKey;
81
81
  seasonNumber: BN;
82
- seasonMembershipId: BN;
82
+ tier: number;
83
83
  }): {
84
84
  seasonSettings: PublicKey;
85
85
  season: PublicKey;
@@ -94,7 +94,7 @@ export declare class PDAManager {
94
94
  referredUser: PublicKey;
95
95
  seasonNumber: BN;
96
96
  windowNumber: BN;
97
- referredSeasonMembershipId: BN;
97
+ tier: number;
98
98
  }): {
99
99
  seasonSettings: PublicKey;
100
100
  season: PublicKey;
@@ -17,9 +17,9 @@ class PDAManager {
17
17
  miztakeStatistics: (0, pdas_1.getMiztakeStatisticsPda)()[0],
18
18
  seasonSettings: (0, pdas_1.getSeasonSettingsPda)()[0],
19
19
  season: (0, pdas_1.getSeasonPda)(params.seasonNumber)[0],
20
- seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.user, params.seasonMembershipId)[0],
20
+ seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.seasonNumber, params.user, params.tier)[0],
21
21
  rewardWindow: (0, pdas_1.getRewardWindowPda)(params.seasonNumber, params.windowNumber)[0],
22
- userWindowParticipation: (0, pdas_1.getUserWindowParticipationPda)(params.user, params.seasonNumber, params.windowNumber, params.seasonMembershipId)[0],
22
+ userWindowParticipation: (0, pdas_1.getUserWindowParticipationPda)(params.seasonNumber, params.user, params.tier, params.windowNumber)[0],
23
23
  };
24
24
  }
25
25
  /**
@@ -29,7 +29,7 @@ class PDAManager {
29
29
  return {
30
30
  seasonSettings: (0, pdas_1.getSeasonSettingsPda)()[0],
31
31
  season: (0, pdas_1.getSeasonPda)(params.seasonNumber)[0],
32
- seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.user, params.seasonMembershipId)[0],
32
+ seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.seasonNumber, params.user, params.tier)[0],
33
33
  seasonDepositVault: (0, pdas_1.getSeasonDepositVaultPda)()[0],
34
34
  seasonEscrowVault: (0, pdas_1.getSeasonEscrowVaultPda)()[0],
35
35
  };
@@ -40,10 +40,10 @@ class PDAManager {
40
40
  static deriveConfirmedPostPdas(params) {
41
41
  return {
42
42
  seasonSettings: (0, pdas_1.getSeasonSettingsPda)()[0],
43
- seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.user, params.seasonMembershipId)[0],
43
+ seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.seasonNumber, params.user, params.tier)[0],
44
44
  season: (0, pdas_1.getSeasonPda)(params.seasonNumber)[0],
45
45
  rewardWindow: (0, pdas_1.getRewardWindowPda)(params.seasonNumber, params.windowNumber)[0],
46
- userWindowParticipation: (0, pdas_1.getUserWindowParticipationPda)(params.user, params.seasonNumber, params.windowNumber, params.seasonMembershipId)[0],
46
+ userWindowParticipation: (0, pdas_1.getUserWindowParticipationPda)(params.seasonNumber, params.user, params.tier, params.windowNumber)[0],
47
47
  miztake: (0, pdas_1.getMiztakePda)(params.miztakeShaHash)[0],
48
48
  };
49
49
  }
@@ -55,8 +55,8 @@ class PDAManager {
55
55
  seasonSettings: (0, pdas_1.getSeasonSettingsPda)()[0],
56
56
  season: (0, pdas_1.getSeasonPda)(params.seasonNumber)[0],
57
57
  rewardWindow: (0, pdas_1.getRewardWindowPda)(params.seasonNumber, params.windowNumber)[0],
58
- userWindowParticipation: (0, pdas_1.getUserWindowParticipationPda)(params.user, params.seasonNumber, params.windowNumber, params.seasonMembershipId)[0],
59
- seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.user, params.seasonMembershipId)[0],
58
+ userWindowParticipation: (0, pdas_1.getUserWindowParticipationPda)(params.seasonNumber, params.user, params.tier, params.windowNumber)[0],
59
+ seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.seasonNumber, params.user, params.tier)[0],
60
60
  seasonDepositVault: (0, pdas_1.getSeasonDepositVaultPda)()[0],
61
61
  };
62
62
  }
@@ -67,7 +67,7 @@ class PDAManager {
67
67
  return {
68
68
  seasonSettings: (0, pdas_1.getSeasonSettingsPda)()[0],
69
69
  season: (0, pdas_1.getSeasonPda)(params.seasonNumber)[0],
70
- seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.user, params.seasonMembershipId)[0],
70
+ seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.seasonNumber, params.user, params.tier)[0],
71
71
  seasonDepositVault: (0, pdas_1.getSeasonDepositVaultPda)()[0],
72
72
  seasonEscrowVault: (0, pdas_1.getSeasonEscrowVaultPda)()[0],
73
73
  };
@@ -79,9 +79,9 @@ class PDAManager {
79
79
  return {
80
80
  seasonSettings: (0, pdas_1.getSeasonSettingsPda)()[0],
81
81
  season: (0, pdas_1.getSeasonPda)(params.seasonNumber)[0],
82
- seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.referredUser, params.referredSeasonMembershipId)[0],
83
- userWindowParticipation: (0, pdas_1.getUserWindowParticipationPda)(params.referredUser, params.seasonNumber, params.windowNumber, params.referredSeasonMembershipId)[0],
84
- referralPenaltyClaim: (0, pdas_1.getReferralPenaltyClaimPda)(params.referredUser, params.seasonNumber, params.windowNumber, params.referredSeasonMembershipId)[0],
82
+ seasonMembership: (0, pdas_1.getSeasonMembershipPda)(params.seasonNumber, params.referredUser, params.tier)[0],
83
+ userWindowParticipation: (0, pdas_1.getUserWindowParticipationPda)(params.seasonNumber, params.referredUser, params.tier, params.windowNumber)[0],
84
+ referralPenaltyClaim: (0, pdas_1.getReferralPenaltyClaimPda)(params.seasonNumber, params.referredUser, params.tier, params.windowNumber)[0],
85
85
  seasonDepositVault: (0, pdas_1.getSeasonDepositVaultPda)()[0],
86
86
  };
87
87
  }
@@ -7,10 +7,6 @@ import { BN } from "@coral-xyz/anchor";
7
7
  * Derive the MiztakeStatistics PDA
8
8
  */
9
9
  export declare function getMiztakeStatisticsPda(): [PublicKey, number];
10
- /**
11
- * Derive the Token Vault PDA
12
- */
13
- export declare function getTokenVaultPda(): [PublicKey, number];
14
10
  /**
15
11
  * Derive the UserStats PDA for a given telegram ID
16
12
  * @param telegramId - The user's Telegram ID
@@ -32,10 +28,17 @@ export declare function getSeasonSettingsPda(): [PublicKey, number];
32
28
  export declare function getSeasonPda(seasonNumber: BN): [PublicKey, number];
33
29
  /**
34
30
  * Derive the SeasonMembership PDA
31
+ * PDA model:
32
+ * seeds = ["season_membership", season_number_le_u64, user_pubkey_bytes, tier_u8]
33
+ *
34
+ * Tier mapping (u8):
35
+ * 1 = copper, 2 = silver, 3 = gold, 4 = platinum, 5 = mithril
36
+ *
37
+ * @param seasonNumber - The season number
35
38
  * @param user - The user's public key
36
- * @param seasonMembershipId - The membership ID
39
+ * @param tier - Tier number (1..=5)
37
40
  */
38
- export declare function getSeasonMembershipPda(user: PublicKey, seasonMembershipId: BN): [PublicKey, number];
41
+ export declare function getSeasonMembershipPda(seasonNumber: BN, user: PublicKey, tier: number): [PublicKey, number];
39
42
  /**
40
43
  * Derive the RewardWindow PDA
41
44
  * @param seasonNumber - The season number
@@ -44,12 +47,15 @@ export declare function getSeasonMembershipPda(user: PublicKey, seasonMembership
44
47
  export declare function getRewardWindowPda(seasonNumber: BN, windowNumber: BN): [PublicKey, number];
45
48
  /**
46
49
  * Derive the UserWindowParticipation PDA
47
- * @param user - The user's public key
50
+ * PDA model:
51
+ * seeds = ["user_window", season_number_le_u64, user_pubkey_bytes, tier_u8, window_number_le_u64]
52
+ *
48
53
  * @param seasonNumber - The season number
54
+ * @param user - The user's public key
55
+ * @param tier - Tier number (1..=5)
49
56
  * @param windowNumber - The window number
50
- * @param seasonMembershipId - The membership ID
51
57
  */
52
- export declare function getUserWindowParticipationPda(user: PublicKey, seasonNumber: BN, windowNumber: BN, seasonMembershipId: BN): [PublicKey, number];
58
+ export declare function getUserWindowParticipationPda(seasonNumber: BN, user: PublicKey, tier: number, windowNumber: BN): [PublicKey, number];
53
59
  /**
54
60
  * Derive the Season Deposit Vault PDA
55
61
  */
@@ -60,9 +66,12 @@ export declare function getSeasonDepositVaultPda(): [PublicKey, number];
60
66
  export declare function getSeasonEscrowVaultPda(): [PublicKey, number];
61
67
  /**
62
68
  * Derive the ReferralPenaltyClaim PDA
63
- * @param referredUser - The referred user's public key (the user who missed)
69
+ * PDA model:
70
+ * seeds = ["referral_penalty_claim", season_number_le_u64, referred_user_pubkey_bytes, tier_u8, window_number_le_u64]
71
+ *
64
72
  * @param seasonNumber - The season number
73
+ * @param referredUser - The referred user's public key (the user who missed)
74
+ * @param tier - Tier number (1..=5)
65
75
  * @param windowNumber - The window number
66
- * @param seasonMembershipId - The referred user's membership id
67
76
  */
68
- export declare function getReferralPenaltyClaimPda(referredUser: PublicKey, seasonNumber: BN, windowNumber: BN, seasonMembershipId: BN): [PublicKey, number];
77
+ export declare function getReferralPenaltyClaimPda(seasonNumber: BN, referredUser: PublicKey, tier: number, windowNumber: BN): [PublicKey, number];
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getMiztakeStatisticsPda = getMiztakeStatisticsPda;
4
- exports.getTokenVaultPda = getTokenVaultPda;
5
4
  exports.getUserStatsPda = getUserStatsPda;
6
5
  exports.getMiztakePda = getMiztakePda;
7
6
  exports.getSeasonSettingsPda = getSeasonSettingsPda;
@@ -24,12 +23,6 @@ const conversions_1 = require("./conversions");
24
23
  function getMiztakeStatisticsPda() {
25
24
  return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.MIZTAKE_STATISTICS_SEED)], constants_1.PROGRAM_ID);
26
25
  }
27
- /**
28
- * Derive the Token Vault PDA
29
- */
30
- function getTokenVaultPda() {
31
- return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.TOKEN_VAULT_SEED)], constants_1.PROGRAM_ID);
32
- }
33
26
  /**
34
27
  * Derive the UserStats PDA for a given telegram ID
35
28
  * @param telegramId - The user's Telegram ID
@@ -60,14 +53,25 @@ function getSeasonPda(seasonNumber) {
60
53
  }
61
54
  /**
62
55
  * Derive the SeasonMembership PDA
56
+ * PDA model:
57
+ * seeds = ["season_membership", season_number_le_u64, user_pubkey_bytes, tier_u8]
58
+ *
59
+ * Tier mapping (u8):
60
+ * 1 = copper, 2 = silver, 3 = gold, 4 = platinum, 5 = mithril
61
+ *
62
+ * @param seasonNumber - The season number
63
63
  * @param user - The user's public key
64
- * @param seasonMembershipId - The membership ID
64
+ * @param tier - Tier number (1..=5)
65
65
  */
66
- function getSeasonMembershipPda(user, seasonMembershipId) {
66
+ function getSeasonMembershipPda(seasonNumber, user, tier) {
67
+ if (!Number.isInteger(tier) || tier < 1 || tier > 5) {
68
+ throw new Error("Invalid tier: must be an integer between 1 and 5");
69
+ }
67
70
  return web3_js_1.PublicKey.findProgramAddressSync([
68
71
  Buffer.from("season_membership"),
72
+ seasonNumber.toArrayLike(Buffer, "le", 8),
69
73
  user.toBuffer(),
70
- seasonMembershipId.toArrayLike(Buffer, "le", 8),
74
+ Buffer.from([tier]),
71
75
  ], constants_1.PROGRAM_ID);
72
76
  }
73
77
  /**
@@ -84,18 +88,24 @@ function getRewardWindowPda(seasonNumber, windowNumber) {
84
88
  }
85
89
  /**
86
90
  * Derive the UserWindowParticipation PDA
87
- * @param user - The user's public key
91
+ * PDA model:
92
+ * seeds = ["user_window", season_number_le_u64, user_pubkey_bytes, tier_u8, window_number_le_u64]
93
+ *
88
94
  * @param seasonNumber - The season number
95
+ * @param user - The user's public key
96
+ * @param tier - Tier number (1..=5)
89
97
  * @param windowNumber - The window number
90
- * @param seasonMembershipId - The membership ID
91
98
  */
92
- function getUserWindowParticipationPda(user, seasonNumber, windowNumber, seasonMembershipId) {
99
+ function getUserWindowParticipationPda(seasonNumber, user, tier, windowNumber) {
100
+ if (!Number.isInteger(tier) || tier < 1 || tier > 5) {
101
+ throw new Error("Invalid tier: must be an integer between 1 and 5");
102
+ }
93
103
  return web3_js_1.PublicKey.findProgramAddressSync([
94
104
  Buffer.from("user_window"),
95
- user.toBuffer(),
96
105
  seasonNumber.toArrayLike(Buffer, "le", 8),
106
+ user.toBuffer(),
107
+ Buffer.from([tier]),
97
108
  windowNumber.toArrayLike(Buffer, "le", 8),
98
- seasonMembershipId.toArrayLike(Buffer, "le", 8),
99
109
  ], constants_1.PROGRAM_ID);
100
110
  }
101
111
  /**
@@ -112,17 +122,23 @@ function getSeasonEscrowVaultPda() {
112
122
  }
113
123
  /**
114
124
  * Derive the ReferralPenaltyClaim PDA
115
- * @param referredUser - The referred user's public key (the user who missed)
125
+ * PDA model:
126
+ * seeds = ["referral_penalty_claim", season_number_le_u64, referred_user_pubkey_bytes, tier_u8, window_number_le_u64]
127
+ *
116
128
  * @param seasonNumber - The season number
129
+ * @param referredUser - The referred user's public key (the user who missed)
130
+ * @param tier - Tier number (1..=5)
117
131
  * @param windowNumber - The window number
118
- * @param seasonMembershipId - The referred user's membership id
119
132
  */
120
- function getReferralPenaltyClaimPda(referredUser, seasonNumber, windowNumber, seasonMembershipId) {
133
+ function getReferralPenaltyClaimPda(seasonNumber, referredUser, tier, windowNumber) {
134
+ if (!Number.isInteger(tier) || tier < 1 || tier > 5) {
135
+ throw new Error("Invalid tier: must be an integer between 1 and 5");
136
+ }
121
137
  return web3_js_1.PublicKey.findProgramAddressSync([
122
138
  Buffer.from(constants_1.REFERRAL_PENALTY_CLAIM_SEED),
123
- referredUser.toBuffer(),
124
139
  seasonNumber.toArrayLike(Buffer, "le", 8),
140
+ referredUser.toBuffer(),
141
+ Buffer.from([tier]),
125
142
  windowNumber.toArrayLike(Buffer, "le", 8),
126
- seasonMembershipId.toArrayLike(Buffer, "le", 8),
127
143
  ], constants_1.PROGRAM_ID);
128
144
  }
@@ -1,5 +1,13 @@
1
1
  import { BN } from "@coral-xyz/anchor";
2
2
  import { SeasonDepositTier } from "../types";
3
+ /**
4
+ * Validate and normalize a tier number (1..=5).
5
+ */
6
+ export declare function assertValidTierNumber(tier: number): number;
7
+ /**
8
+ * Convert numeric tier (1..=5) to the Anchor enum representation.
9
+ */
10
+ export declare function tierNumberToDepositTier(tier: number): SeasonDepositTier;
3
11
  /**
4
12
  * Tier-based per-window penalty amount (base units, 7 decimals).
5
13
  *
@@ -1,7 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertValidTierNumber = assertValidTierNumber;
4
+ exports.tierNumberToDepositTier = tierNumberToDepositTier;
3
5
  exports.getTierPenaltyPerWindow = getTierPenaltyPerWindow;
4
6
  const anchor_1 = require("@coral-xyz/anchor");
7
+ /**
8
+ * Validate and normalize a tier number (1..=5).
9
+ */
10
+ function assertValidTierNumber(tier) {
11
+ if (!Number.isInteger(tier) || tier < 1 || tier > 5) {
12
+ throw new Error("Invalid tier: must be an integer between 1 and 5");
13
+ }
14
+ return tier;
15
+ }
16
+ /**
17
+ * Convert numeric tier (1..=5) to the Anchor enum representation.
18
+ */
19
+ function tierNumberToDepositTier(tier) {
20
+ switch (assertValidTierNumber(tier)) {
21
+ case 1:
22
+ return { copper: {} };
23
+ case 2:
24
+ return { silver: {} };
25
+ case 3:
26
+ return { gold: {} };
27
+ case 4:
28
+ return { platinum: {} };
29
+ case 5:
30
+ return { mithril: {} };
31
+ }
32
+ // unreachable
33
+ throw new Error("Invalid tier");
34
+ }
5
35
  /**
6
36
  * Tier-based per-window penalty amount (base units, 7 decimals).
7
37
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "proof-of-take-sdk",
3
- "version": "1.0.0",
3
+ "version": "2.0.0",
4
4
  "description": "TypeScript SDK for Proof of Take Solana program",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,30 +0,0 @@
1
- import { Connection } from "@solana/web3.js";
2
- import { BN } from "@coral-xyz/anchor";
3
- /**
4
- * Get the token vault account information
5
- *
6
- * @param connection - Solana connection
7
- * @returns Token vault account data
8
- */
9
- export declare function getTokenVault(connection: Connection): Promise<{
10
- address: import("@solana/web3.js").PublicKey;
11
- data: {
12
- mint: import("@solana/web3.js").PublicKey;
13
- owner: import("@solana/web3.js").PublicKey;
14
- amount: any;
15
- delegate: import("@solana/web3.js").PublicKey;
16
- delegatedAmount: bigint;
17
- isInitialized: boolean;
18
- isFrozen: boolean;
19
- isNative: boolean;
20
- closeAuthority: import("@solana/web3.js").PublicKey;
21
- };
22
- }>;
23
- /**
24
- * Check if token vault is initialized
25
- */
26
- export declare function isVaultInitialized(connection: Connection): Promise<boolean>;
27
- /**
28
- * Get vault balance (amount of MIZD tokens in vault)
29
- */
30
- export declare function getVaultTokenBalance(connection: Connection): Promise<BN>;
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTokenVault = getTokenVault;
4
- exports.isVaultInitialized = isVaultInitialized;
5
- exports.getVaultTokenBalance = getVaultTokenBalance;
6
- const spl_token_1 = require("@solana/spl-token");
7
- const anchor_1 = require("@coral-xyz/anchor");
8
- const pdas_1 = require("../utils/pdas");
9
- /**
10
- * Get the token vault account information
11
- *
12
- * @param connection - Solana connection
13
- * @returns Token vault account data
14
- */
15
- async function getTokenVault(connection) {
16
- const [vaultPda] = (0, pdas_1.getTokenVaultPda)();
17
- try {
18
- const vaultAccount = await (0, spl_token_1.getAccount)(connection, vaultPda);
19
- return {
20
- address: vaultPda,
21
- data: {
22
- mint: vaultAccount.mint,
23
- owner: vaultAccount.owner,
24
- amount: new anchor_1.BN(vaultAccount.amount.toString()),
25
- delegate: vaultAccount.delegate,
26
- delegatedAmount: vaultAccount.delegatedAmount,
27
- isInitialized: vaultAccount.isInitialized,
28
- isFrozen: vaultAccount.isFrozen,
29
- isNative: vaultAccount.isNative,
30
- closeAuthority: vaultAccount.closeAuthority,
31
- },
32
- };
33
- }
34
- catch (error) {
35
- throw new Error(`Token vault not found or not initialized: ${error}`);
36
- }
37
- }
38
- /**
39
- * Check if token vault is initialized
40
- */
41
- async function isVaultInitialized(connection) {
42
- try {
43
- await getTokenVault(connection);
44
- return true;
45
- }
46
- catch {
47
- return false;
48
- }
49
- }
50
- /**
51
- * Get vault balance (amount of MIZD tokens in vault)
52
- */
53
- async function getVaultTokenBalance(connection) {
54
- const vault = await getTokenVault(connection);
55
- return vault.data.amount;
56
- }