proof-of-take-sdk 3.0.5 → 3.0.8

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 (48) hide show
  1. package/dist/idl/proof_of_take.json +132 -12
  2. package/dist/index.d.ts +8 -5
  3. package/dist/index.js +16 -2
  4. package/dist/instructions/claimReferralPenaltyForWindow.d.ts +1 -1
  5. package/dist/instructions/claimReferralPenaltyForWindow.js +2 -1
  6. package/dist/instructions/claimWindowRewards.d.ts +1 -1
  7. package/dist/instructions/claimWindowRewards.js +2 -1
  8. package/dist/instructions/closeAuxiliaryAccounts.js +19 -12
  9. package/dist/instructions/confirmedPostOnX.d.ts +1 -1
  10. package/dist/instructions/confirmedPostOnX.js +5 -1
  11. package/dist/instructions/createMiztake.d.ts +1 -1
  12. package/dist/instructions/createMiztake.js +7 -3
  13. package/dist/instructions/initializeEscrowVault.js +5 -4
  14. package/dist/instructions/initializeRewardWindow.js +5 -4
  15. package/dist/instructions/initializeSeasonSettings.js +6 -7
  16. package/dist/instructions/initializeSeasonVault.js +6 -7
  17. package/dist/instructions/initializeStatistics.js +5 -5
  18. package/dist/instructions/joinSeason.d.ts +1 -1
  19. package/dist/instructions/joinSeason.js +20 -5
  20. package/dist/instructions/toggleSeasonPause.js +6 -7
  21. package/dist/instructions/updateSeasonAdmin.js +6 -7
  22. package/dist/instructions/viewSeasonMembershipStatus.d.ts +1 -1
  23. package/dist/instructions/viewSeasonMembershipStatus.js +1 -1
  24. package/dist/instructions/withdrawSeasonDeposit.d.ts +1 -1
  25. package/dist/instructions/withdrawSeasonDeposit.js +2 -1
  26. package/dist/types/accountTypes.d.ts +3 -0
  27. package/dist/types/proof_of_take.d.ts +132 -12
  28. package/dist/types.d.ts +4 -2
  29. package/dist/utils/accountConverters.js +1 -0
  30. package/dist/utils/accountUpdates.d.ts +3 -3
  31. package/dist/utils/accountUpdates.js +4 -3
  32. package/dist/utils/instructionResultHelpers.d.ts +7 -0
  33. package/dist/utils/instructionResultHelpers.js +9 -0
  34. package/dist/utils/pdas.d.ts +4 -4
  35. package/dist/utils/pdas.js +8 -7
  36. package/dist/utils/programErrors.d.ts +13 -0
  37. package/dist/utils/programErrors.js +47 -0
  38. package/dist/utils/remainingAccounts.d.ts +17 -0
  39. package/dist/utils/remainingAccounts.js +38 -0
  40. package/dist/utils/signerHelpers.d.ts +20 -0
  41. package/dist/utils/signerHelpers.js +64 -5
  42. package/dist/utils/tierPenalty.d.ts +2 -2
  43. package/dist/utils/tierPenalty.js +9 -9
  44. package/dist/utils/tierSeeds.d.ts +8 -0
  45. package/dist/utils/tierSeeds.js +14 -0
  46. package/dist/utils/transactionBuilder.d.ts +1 -0
  47. package/dist/utils/transactionBuilder.js +11 -9
  48. package/package.json +1 -1
@@ -13,6 +13,7 @@ const optimistic_1 = require("../optimistic");
13
13
  const pdas_1 = require("../utils/pdas");
14
14
  const tierPenalty_1 = require("../utils/tierPenalty");
15
15
  const enumHelpers_1 = require("../utils/enumHelpers");
16
+ const remainingAccounts_1 = require("../utils/remainingAccounts");
16
17
  /**
17
18
  * Join a season
18
19
  *
@@ -30,6 +31,7 @@ async function joinSeason(options) {
30
31
  seasonNumber: options.seasonNumber,
31
32
  tier: options.tier,
32
33
  });
34
+ const rootAdminTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(constants_1.MIZD_TOKEN_MINT, constants_1.ADMIN_PUBLIC_KEY);
33
35
  const accounts = {
34
36
  seasonSettings: pdas.seasonSettings,
35
37
  season: pdas.season,
@@ -37,17 +39,30 @@ async function joinSeason(options) {
37
39
  seasonDepositVault: pdas.seasonDepositVault,
38
40
  seasonEscrowVault: pdas.seasonEscrowVault,
39
41
  mizdMint: constants_1.MIZD_TOKEN_MINT,
42
+ rootAdmin: constants_1.ADMIN_PUBLIC_KEY,
43
+ rootAdminTokenAccount,
40
44
  userTokenAccount: options.userTokenAccount,
41
45
  user: options.user,
46
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
42
47
  tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
43
48
  systemProgram: web3_js_1.SystemProgram.programId,
44
49
  };
45
- const instruction = await program.methods
50
+ const referrer = options.referrer ?? web3_js_1.PublicKey.default;
51
+ const remainingAccounts = (0, remainingAccounts_1.getJoinSeasonRemainingAccounts)({
52
+ seasonNumber: options.seasonNumber,
53
+ tier: options.tier,
54
+ referrer,
55
+ });
56
+ const methodBuilder = program.methods
46
57
  // Anchor expects BN for u64 args.
47
- .joinSeason(options.seasonNumber, options.tier, options.referrer ?? web3_js_1.PublicKey.default)
48
- .accounts(accounts)
49
- .instruction();
50
- const signers = (0, signerHelpers_1.buildSigners)([{ publicKey: options.user, role: "user" }], options.feePayer);
58
+ .joinSeason(options.seasonNumber, options.tier, referrer)
59
+ .accounts(accounts);
60
+ if (remainingAccounts.length > 0) {
61
+ methodBuilder.remainingAccounts(remainingAccounts);
62
+ }
63
+ const instruction = await methodBuilder.instruction();
64
+ const feePayer = (0, signerHelpers_1.getDefaultFeePayer)(options.feePayer);
65
+ const signers = (0, signerHelpers_1.buildSigners)([(0, signerHelpers_1.asUserSigner)(options.user)], feePayer);
51
66
  // OPTIMISTIC UPDATES
52
67
  const curr = options.currentAccounts || {};
53
68
  const now = (0, optimistic_1.getCurrentTimestamp)(options.now);
@@ -5,6 +5,7 @@ const pdas_1 = require("../utils/pdas");
5
5
  const programHelpers_1 = require("../utils/programHelpers");
6
6
  const signerHelpers_1 = require("../utils/signerHelpers");
7
7
  const optimistic_1 = require("../optimistic");
8
+ const instructionResultHelpers_1 = require("../utils/instructionResultHelpers");
8
9
  /**
9
10
  * Toggle season system pause
10
11
  *
@@ -28,16 +29,14 @@ async function toggleSeasonPause(connection, admin, feePayer, seasonSettings) {
28
29
  .toggleSeasonPause()
29
30
  .accounts(accounts)
30
31
  .instruction();
31
- const signers = (0, signerHelpers_1.buildSigners)([{ publicKey: admin, role: "admin" }], feePayer);
32
+ const actualFeePayer = (0, signerHelpers_1.resolveFeePayer)({ feePayer, admin });
33
+ const signers = (0, signerHelpers_1.buildSigners)([(0, signerHelpers_1.asAdminSigner)(admin)], actualFeePayer);
32
34
  const updatedSettings = seasonSettings
33
35
  ? (0, optimistic_1.updateSeasonSettingsForPauseToggle)(seasonSettings)
34
36
  : undefined;
35
- return {
36
- instructions: [instruction],
37
+ return (0, instructionResultHelpers_1.singleInstruction)(instruction, {
37
38
  signers,
38
39
  pdas: { seasonSettings: seasonSettingsPda },
39
- ...(updatedSettings && {
40
- updatedAccounts: { seasonSettings: updatedSettings },
41
- }),
42
- };
40
+ ...(updatedSettings && { updatedAccounts: { seasonSettings: updatedSettings } }),
41
+ });
43
42
  }
@@ -5,6 +5,7 @@ const pdas_1 = require("../utils/pdas");
5
5
  const programHelpers_1 = require("../utils/programHelpers");
6
6
  const signerHelpers_1 = require("../utils/signerHelpers");
7
7
  const optimistic_1 = require("../optimistic");
8
+ const instructionResultHelpers_1 = require("../utils/instructionResultHelpers");
8
9
  /**
9
10
  * Update season admin
10
11
  *
@@ -29,16 +30,14 @@ async function updateSeasonAdmin(connection, currentAdmin, newAdmin, feePayer, s
29
30
  .updateSeasonAdmin(newAdmin)
30
31
  .accounts(accounts)
31
32
  .instruction();
32
- const signers = (0, signerHelpers_1.buildSigners)([{ publicKey: currentAdmin, role: "currentAdmin" }], feePayer);
33
+ const actualFeePayer = (0, signerHelpers_1.resolveFeePayer)({ feePayer, admin: currentAdmin });
34
+ const signers = (0, signerHelpers_1.buildSigners)([(0, signerHelpers_1.asCurrentAdminSigner)(currentAdmin)], actualFeePayer);
33
35
  const updatedSettings = seasonSettings
34
36
  ? (0, optimistic_1.updateSeasonSettingsForAdminUpdate)(seasonSettings, newAdmin)
35
37
  : undefined;
36
- return {
37
- instructions: [instruction],
38
+ return (0, instructionResultHelpers_1.singleInstruction)(instruction, {
38
39
  signers,
39
40
  pdas: { seasonSettings: seasonSettingsPda },
40
- ...(updatedSettings && {
41
- updatedAccounts: { seasonSettings: updatedSettings },
42
- }),
43
- };
41
+ ...(updatedSettings && { updatedAccounts: { seasonSettings: updatedSettings } }),
42
+ });
44
43
  }
@@ -10,7 +10,7 @@ import { SeasonMembershipStatusView, TierNumber } from "../types";
10
10
  * @param connection - Solana connection
11
11
  * @param user - User's public key
12
12
  * @param seasonNumber - Season number
13
- * @param tier - Tier number: 1=copper, 2=silver, 3=gold, 4=platinum, 5=mithril
13
+ * @param tier - Tier number: 0=copper, 1=silver, 2=gold, 3=platinum, 4=mithril
14
14
  * @returns View data with membership status
15
15
  */
16
16
  export declare function viewSeasonMembershipStatus(connection: Connection, user: PublicKey, seasonNumber: BN, tier: TierNumber): Promise<SeasonMembershipStatusView>;
@@ -12,7 +12,7 @@ const programHelpers_1 = require("../utils/programHelpers");
12
12
  * @param connection - Solana connection
13
13
  * @param user - User's public key
14
14
  * @param seasonNumber - Season number
15
- * @param tier - Tier number: 1=copper, 2=silver, 3=gold, 4=platinum, 5=mithril
15
+ * @param tier - Tier number: 0=copper, 1=silver, 2=gold, 3=platinum, 4=mithril
16
16
  * @returns View data with membership status
17
17
  */
18
18
  async function viewSeasonMembershipStatus(connection, user, seasonNumber, tier) {
@@ -15,7 +15,7 @@ export interface WithdrawSeasonDepositOptions {
15
15
  user: PublicKey;
16
16
  userTokenAccount: PublicKey;
17
17
  seasonNumber: BN;
18
- /** Tier number: 1=copper, 2=silver, 3=gold, 4=platinum, 5=mithril */
18
+ /** Tier number: 0=copper, 1=silver, 2=gold, 3=platinum, 4=mithril */
19
19
  tier: TierNumber;
20
20
  feePayer?: PublicKey;
21
21
  currentAccounts?: {
@@ -40,7 +40,8 @@ async function withdrawSeasonDeposit(options) {
40
40
  .withdrawSeasonDeposit(options.tier)
41
41
  .accounts(accounts)
42
42
  .instruction();
43
- const signers = (0, signerHelpers_1.buildSigners)([{ publicKey: options.user, role: "user" }], options.feePayer);
43
+ const feePayer = (0, signerHelpers_1.getDefaultFeePayer)(options.feePayer);
44
+ const signers = (0, signerHelpers_1.buildSigners)([(0, signerHelpers_1.asUserSigner)(options.user)], feePayer);
44
45
  // OPTIMISTIC UPDATES
45
46
  let withdrawalAmount;
46
47
  let updatedAccounts = undefined;
@@ -55,8 +55,11 @@ export interface JoinSeasonAccounts {
55
55
  seasonDepositVault: PublicKey;
56
56
  seasonEscrowVault: PublicKey;
57
57
  mizdMint: PublicKey;
58
+ rootAdmin: PublicKey;
59
+ rootAdminTokenAccount: PublicKey;
58
60
  userTokenAccount: PublicKey;
59
61
  user: PublicKey;
62
+ associatedTokenProgram: PublicKey;
60
63
  tokenProgram: PublicKey;
61
64
  systemProgram: PublicKey;
62
65
  }
@@ -1602,6 +1602,100 @@ export type ProofOfTake = {
1602
1602
  "name": "mizdMint";
1603
1603
  "address": "mizdS9fDNUKWZcXBeRhJoJQHJJmsTeF4fFRyPdXWv99";
1604
1604
  },
1605
+ {
1606
+ "name": "rootAdmin";
1607
+ "address": "Lude4DE3jDXVViJ3s7bUfPXdXy8Zq7G1stMwHNQrc2s";
1608
+ },
1609
+ {
1610
+ "name": "rootAdminTokenAccount";
1611
+ "writable": true;
1612
+ "pda": {
1613
+ "seeds": [
1614
+ {
1615
+ "kind": "account";
1616
+ "path": "rootAdmin";
1617
+ },
1618
+ {
1619
+ "kind": "const";
1620
+ "value": [
1621
+ 6,
1622
+ 221,
1623
+ 246,
1624
+ 225,
1625
+ 215,
1626
+ 101,
1627
+ 161,
1628
+ 147,
1629
+ 217,
1630
+ 203,
1631
+ 225,
1632
+ 70,
1633
+ 206,
1634
+ 235,
1635
+ 121,
1636
+ 172,
1637
+ 28,
1638
+ 180,
1639
+ 133,
1640
+ 237,
1641
+ 95,
1642
+ 91,
1643
+ 55,
1644
+ 145,
1645
+ 58,
1646
+ 140,
1647
+ 245,
1648
+ 133,
1649
+ 126,
1650
+ 255,
1651
+ 0,
1652
+ 169
1653
+ ];
1654
+ },
1655
+ {
1656
+ "kind": "account";
1657
+ "path": "mizdMint";
1658
+ }
1659
+ ];
1660
+ "program": {
1661
+ "kind": "const";
1662
+ "value": [
1663
+ 140,
1664
+ 151,
1665
+ 37,
1666
+ 143,
1667
+ 78,
1668
+ 36,
1669
+ 137,
1670
+ 241,
1671
+ 187,
1672
+ 61,
1673
+ 16,
1674
+ 41,
1675
+ 20,
1676
+ 142,
1677
+ 13,
1678
+ 131,
1679
+ 11,
1680
+ 90,
1681
+ 19,
1682
+ 153,
1683
+ 218,
1684
+ 255,
1685
+ 16,
1686
+ 132,
1687
+ 4,
1688
+ 142,
1689
+ 123,
1690
+ 216,
1691
+ 219,
1692
+ 233,
1693
+ 248,
1694
+ 89
1695
+ ];
1696
+ };
1697
+ };
1698
+ },
1605
1699
  {
1606
1700
  "name": "userTokenAccount";
1607
1701
  "writable": true;
@@ -1611,6 +1705,10 @@ export type ProofOfTake = {
1611
1705
  "writable": true;
1612
1706
  "signer": true;
1613
1707
  },
1708
+ {
1709
+ "name": "associatedTokenProgram";
1710
+ "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
1711
+ },
1614
1712
  {
1615
1713
  "name": "tokenProgram";
1616
1714
  "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
@@ -2837,43 +2935,58 @@ export type ProofOfTake = {
2837
2935
  },
2838
2936
  {
2839
2937
  "code": 6035;
2938
+ "name": "invalidReferrerMembership";
2939
+ "msg": "Invalid referrer season membership account";
2940
+ },
2941
+ {
2942
+ "code": 6036;
2840
2943
  "name": "referralPenaltyAlreadyClaimed";
2841
2944
  "msg": "Referral penalty already claimed for this user/window";
2842
2945
  },
2843
2946
  {
2844
- "code": 6036;
2947
+ "code": 6037;
2845
2948
  "name": "referralPenaltyClaimNotAvailableYet";
2846
2949
  "msg": "Referral penalty claim not available yet (must wait until window end + claim buffer)";
2847
2950
  },
2848
2951
  {
2849
- "code": 6037;
2952
+ "code": 6038;
2850
2953
  "name": "referralPenaltyNotEligibleForWindow";
2851
2954
  "msg": "Referred user was not eligible for this window";
2852
2955
  },
2853
2956
  {
2854
- "code": 6038;
2957
+ "code": 6039;
2855
2958
  "name": "referralPenaltyNoMissedPenalty";
2856
2959
  "msg": "Referred user posted successfully (no penalty to claim)";
2857
2960
  },
2858
2961
  {
2859
- "code": 6039;
2962
+ "code": 6040;
2860
2963
  "name": "windowAlreadyFinalized";
2861
2964
  "msg": "Window is already finalized";
2862
2965
  },
2863
2966
  {
2864
- "code": 6040;
2967
+ "code": 6041;
2865
2968
  "name": "windowNotEmpty";
2866
2969
  "msg": "Window is not empty (has successful posters)";
2867
2970
  },
2868
2971
  {
2869
- "code": 6041;
2972
+ "code": 6042;
2870
2973
  "name": "calculationError";
2871
2974
  "msg": "Calculation error";
2872
2975
  },
2873
2976
  {
2874
- "code": 6042;
2977
+ "code": 6043;
2875
2978
  "name": "insufficientFunds";
2876
2979
  "msg": "Insufficient funds";
2980
+ },
2981
+ {
2982
+ "code": 6044;
2983
+ "name": "noWindowRewardsToClaim";
2984
+ "msg": "Nothing to claim for this window (reward amount is 0)";
2985
+ },
2986
+ {
2987
+ "code": 6045;
2988
+ "name": "noReferralPenaltyToClaim";
2989
+ "msg": "Nothing to claim for this window (referral penalty amount is 0)";
2877
2990
  }
2878
2991
  ];
2879
2992
  "types": [
@@ -3050,7 +3163,7 @@ export type ProofOfTake = {
3050
3163
  {
3051
3164
  "name": "tier";
3052
3165
  "docs": [
3053
- "Tier number used for the membership PDA (1..=5)"
3166
+ "Tier number used for the membership PDA (0..=4)"
3054
3167
  ];
3055
3168
  "type": "u8";
3056
3169
  },
@@ -3103,7 +3216,7 @@ export type ProofOfTake = {
3103
3216
  {
3104
3217
  "name": "tier";
3105
3218
  "docs": [
3106
- "Tier number used for the membership PDA (1..=5)"
3219
+ "Tier number used for the membership PDA (0..=4)"
3107
3220
  ];
3108
3221
  "type": "u8";
3109
3222
  },
@@ -3210,7 +3323,7 @@ export type ProofOfTake = {
3210
3323
  {
3211
3324
  "name": "tier";
3212
3325
  "docs": [
3213
- "Tier number used for the membership PDA (1..=5)"
3326
+ "Tier number used for the membership PDA (0..=4)"
3214
3327
  ];
3215
3328
  "type": "u8";
3216
3329
  },
@@ -3560,7 +3673,7 @@ export type ProofOfTake = {
3560
3673
  {
3561
3674
  "name": "tier";
3562
3675
  "docs": [
3563
- "Tier number used for the membership PDA (1..=5)"
3676
+ "Tier number used for the membership PDA (0..=4)"
3564
3677
  ];
3565
3678
  "type": "u8";
3566
3679
  },
@@ -3651,7 +3764,7 @@ export type ProofOfTake = {
3651
3764
  {
3652
3765
  "name": "tier";
3653
3766
  "docs": [
3654
- "Tier number used for the membership PDA (1..=5)"
3767
+ "Tier number used for the membership PDA (0..=4)"
3655
3768
  ];
3656
3769
  "type": "u8";
3657
3770
  },
@@ -3697,6 +3810,13 @@ export type ProofOfTake = {
3697
3810
  ];
3698
3811
  "type": "pubkey";
3699
3812
  },
3813
+ {
3814
+ "name": "referralCount";
3815
+ "docs": [
3816
+ "Total number of successful referrals for this membership (incremented when others join with this member as referrer)"
3817
+ ];
3818
+ "type": "u64";
3819
+ },
3700
3820
  {
3701
3821
  "name": "seasonNumber";
3702
3822
  "docs": [
package/dist/types.d.ts CHANGED
@@ -16,9 +16,9 @@ type AnchorEnumVariant<K extends string> = {
16
16
  };
17
17
  /**
18
18
  * Tier number used across the program (and PDA seeds).
19
- * 1=copper, 2=silver, 3=gold, 4=platinum, 5=mithril
19
+ * 0=copper, 1=silver, 2=gold, 3=platinum, 4=mithril
20
20
  */
21
- export type TierNumber = 1 | 2 | 3 | 4 | 5;
21
+ export type TierNumber = 0 | 1 | 2 | 3 | 4;
22
22
  /**
23
23
  * Branded types for common on-chain invariants.
24
24
  */
@@ -170,6 +170,8 @@ export interface SeasonMembership {
170
170
  owner: PublicKey;
171
171
  /** Optional referrer (PublicKey.default means no referrer). */
172
172
  referrer: PublicKey;
173
+ /** Total number of successful referrals for this membership. */
174
+ referralCount: BN;
173
175
  seasonNumber: BN;
174
176
  depositTier: SeasonDepositTier;
175
177
  depositAmount: BN;
@@ -93,6 +93,7 @@ function toSdkSeasonMembership(a) {
93
93
  return {
94
94
  owner: a.owner,
95
95
  referrer: a.referrer,
96
+ referralCount: a.referralCount,
96
97
  seasonNumber: a.seasonNumber,
97
98
  depositTier: a.depositTier,
98
99
  depositAmount: a.depositAmount,
@@ -94,7 +94,7 @@ export declare function updateMiztakeStatisticsForCreation(statistics: MiztakeSt
94
94
  * @param user - User's public key
95
95
  * @param seasonNumber - Season number
96
96
  * @param windowNumber - Window number
97
- * @param tier - Tier number (1..=5)
97
+ * @param tier - Tier number (0..=4)
98
98
  * @param miztakeId - The miztake ID to associate
99
99
  * @returns Initialized/Updated UserWindowParticipation object
100
100
  */
@@ -125,7 +125,7 @@ export declare function updateMiztakeForSeasonUse(miztake: Miztake, seasonNumber
125
125
  * Mirrors the initialization from join_season.rs (lines 84-96)
126
126
  *
127
127
  * @param user - User's public key
128
- * @param tier - Tier number (1..=5)
128
+ * @param tier - Tier number (0..=4)
129
129
  * @param seasonNumber - Season number
130
130
  * @param depositTier - Tier chosen at join time
131
131
  * @param depositAmount - Active deposit amount (participates in rewards/penalties)
@@ -225,7 +225,7 @@ export declare function updateMembershipForClaim(membership: SeasonMembership, r
225
225
  * @param referredUser - The user who missed the window
226
226
  * @param seasonNumber - Season number
227
227
  * @param windowNumber - Window number
228
- * @param tier - Tier number (1..=5)
228
+ * @param tier - Tier number (0..=4)
229
229
  * @param claimant - Referrer (or root admin if no referrer)
230
230
  * @param perWindowPenalty - Tier penalty per window (base units)
231
231
  * @param claimedAt - Unix timestamp in seconds (i64 on-chain, represented as BN in SDK)
@@ -188,7 +188,7 @@ function updateMiztakeStatisticsForCreation(statistics) {
188
188
  * @param user - User's public key
189
189
  * @param seasonNumber - Season number
190
190
  * @param windowNumber - Window number
191
- * @param tier - Tier number (1..=5)
191
+ * @param tier - Tier number (0..=4)
192
192
  * @param miztakeId - The miztake ID to associate
193
193
  * @returns Initialized/Updated UserWindowParticipation object
194
194
  */
@@ -255,7 +255,7 @@ function updateMiztakeForSeasonUse(miztake, seasonNumber, windowNumber) {
255
255
  * Mirrors the initialization from join_season.rs (lines 84-96)
256
256
  *
257
257
  * @param user - User's public key
258
- * @param tier - Tier number (1..=5)
258
+ * @param tier - Tier number (0..=4)
259
259
  * @param seasonNumber - Season number
260
260
  * @param depositTier - Tier chosen at join time
261
261
  * @param depositAmount - Active deposit amount (participates in rewards/penalties)
@@ -268,6 +268,7 @@ function initializeSeasonMembership(user, seasonNumber, depositTier, referrer, d
268
268
  return {
269
269
  owner: user,
270
270
  referrer,
271
+ referralCount: new anchor_1.BN(0),
271
272
  seasonNumber,
272
273
  depositTier,
273
274
  depositAmount,
@@ -538,7 +539,7 @@ function updateMembershipForClaim(membership, rewardAmount) {
538
539
  * @param referredUser - The user who missed the window
539
540
  * @param seasonNumber - Season number
540
541
  * @param windowNumber - Window number
541
- * @param tier - Tier number (1..=5)
542
+ * @param tier - Tier number (0..=4)
542
543
  * @param claimant - Referrer (or root admin if no referrer)
543
544
  * @param perWindowPenalty - Tier penalty per window (base units)
544
545
  * @param claimedAt - Unix timestamp in seconds (i64 on-chain, represented as BN in SDK)
@@ -0,0 +1,7 @@
1
+ import type { TransactionInstruction } from "@solana/web3.js";
2
+ /**
3
+ * Small helper to standardize SDK instruction result shape.
4
+ */
5
+ export declare function singleInstruction<T extends object>(instruction: TransactionInstruction, rest: T): T & {
6
+ instructions: TransactionInstruction[];
7
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.singleInstruction = singleInstruction;
4
+ /**
5
+ * Small helper to standardize SDK instruction result shape.
6
+ */
7
+ function singleInstruction(instruction, rest) {
8
+ return { instructions: [instruction], ...rest };
9
+ }
@@ -33,11 +33,11 @@ export declare function getSeasonPda(seasonNumber: SeasonNumberLike): [PublicKey
33
33
  * seeds = ["season_membership", season_number_le_u64, user_pubkey_bytes, tier_u8]
34
34
  *
35
35
  * Tier mapping (u8):
36
- * 1 = copper, 2 = silver, 3 = gold, 4 = platinum, 5 = mithril
36
+ * 0 = copper, 1 = silver, 2 = gold, 3 = platinum, 4 = mithril
37
37
  *
38
38
  * @param seasonNumber - The season number
39
39
  * @param user - The user's public key
40
- * @param tier - Tier number (1..=5)
40
+ * @param tier - Tier number (0..=4)
41
41
  */
42
42
  export declare function getSeasonMembershipPda(seasonNumber: SeasonNumberLike, user: PublicKey, tier: TierNumber): [PublicKey, number];
43
43
  /**
@@ -53,7 +53,7 @@ export declare function getRewardWindowPda(seasonNumber: SeasonNumberLike, windo
53
53
  *
54
54
  * @param seasonNumber - The season number
55
55
  * @param user - The user's public key
56
- * @param tier - Tier number (1..=5)
56
+ * @param tier - Tier number (0..=4)
57
57
  * @param windowNumber - The window number
58
58
  */
59
59
  export declare function getUserWindowParticipationPda(seasonNumber: SeasonNumberLike, user: PublicKey, tier: TierNumber, windowNumber: BN): [PublicKey, number];
@@ -72,7 +72,7 @@ export declare function getSeasonEscrowVaultPda(seasonNumber: SeasonNumberLike):
72
72
  *
73
73
  * @param seasonNumber - The season number
74
74
  * @param referredUser - The referred user's public key (the user who missed)
75
- * @param tier - Tier number (1..=5)
75
+ * @param tier - Tier number (0..=4)
76
76
  * @param windowNumber - The window number
77
77
  */
78
78
  export declare function getReferralPenaltyClaimPda(seasonNumber: SeasonNumberLike, referredUser: PublicKey, tier: TierNumber, windowNumber: BN): [PublicKey, number];
@@ -15,6 +15,7 @@ const web3_js_1 = require("@solana/web3.js");
15
15
  const constants_1 = require("./constants");
16
16
  const conversions_1 = require("./conversions");
17
17
  const tierPenalty_1 = require("./tierPenalty");
18
+ const tierSeeds_1 = require("./tierSeeds");
18
19
  const conversions_2 = require("./conversions");
19
20
  /**
20
21
  * PDA (Program Derived Address) derivation helpers
@@ -61,11 +62,11 @@ function getSeasonPda(seasonNumber) {
61
62
  * seeds = ["season_membership", season_number_le_u64, user_pubkey_bytes, tier_u8]
62
63
  *
63
64
  * Tier mapping (u8):
64
- * 1 = copper, 2 = silver, 3 = gold, 4 = platinum, 5 = mithril
65
+ * 0 = copper, 1 = silver, 2 = gold, 3 = platinum, 4 = mithril
65
66
  *
66
67
  * @param seasonNumber - The season number
67
68
  * @param user - The user's public key
68
- * @param tier - Tier number (1..=5)
69
+ * @param tier - Tier number (0..=4)
69
70
  */
70
71
  function getSeasonMembershipPda(seasonNumber, user, tier) {
71
72
  const t = (0, tierPenalty_1.assertValidTierNumber)(tier);
@@ -74,7 +75,7 @@ function getSeasonMembershipPda(seasonNumber, user, tier) {
74
75
  Buffer.from("season_membership"),
75
76
  seasonBn.toArrayLike(Buffer, "le", 8),
76
77
  user.toBuffer(),
77
- Buffer.from([t]),
78
+ Buffer.from([(0, tierSeeds_1.toTierSeedByte)(t)]),
78
79
  ], constants_1.PROGRAM_ID);
79
80
  }
80
81
  /**
@@ -97,7 +98,7 @@ function getRewardWindowPda(seasonNumber, windowNumber) {
97
98
  *
98
99
  * @param seasonNumber - The season number
99
100
  * @param user - The user's public key
100
- * @param tier - Tier number (1..=5)
101
+ * @param tier - Tier number (0..=4)
101
102
  * @param windowNumber - The window number
102
103
  */
103
104
  function getUserWindowParticipationPda(seasonNumber, user, tier, windowNumber) {
@@ -107,7 +108,7 @@ function getUserWindowParticipationPda(seasonNumber, user, tier, windowNumber) {
107
108
  Buffer.from("user_window"),
108
109
  seasonBn.toArrayLike(Buffer, "le", 8),
109
110
  user.toBuffer(),
110
- Buffer.from([t]),
111
+ Buffer.from([(0, tierSeeds_1.toTierSeedByte)(t)]),
111
112
  windowNumber.toArrayLike(Buffer, "le", 8),
112
113
  ], constants_1.PROGRAM_ID);
113
114
  }
@@ -132,7 +133,7 @@ function getSeasonEscrowVaultPda(seasonNumber) {
132
133
  *
133
134
  * @param seasonNumber - The season number
134
135
  * @param referredUser - The referred user's public key (the user who missed)
135
- * @param tier - Tier number (1..=5)
136
+ * @param tier - Tier number (0..=4)
136
137
  * @param windowNumber - The window number
137
138
  */
138
139
  function getReferralPenaltyClaimPda(seasonNumber, referredUser, tier, windowNumber) {
@@ -142,7 +143,7 @@ function getReferralPenaltyClaimPda(seasonNumber, referredUser, tier, windowNumb
142
143
  Buffer.from(constants_1.REFERRAL_PENALTY_CLAIM_SEED),
143
144
  seasonBn.toArrayLike(Buffer, "le", 8),
144
145
  referredUser.toBuffer(),
145
- Buffer.from([t]),
146
+ Buffer.from([(0, tierSeeds_1.toTierSeedByte)(t)]),
146
147
  windowNumber.toArrayLike(Buffer, "le", 8),
147
148
  ], constants_1.PROGRAM_ID);
148
149
  }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Helpers for working with Solana/Anchor program errors.
3
+ *
4
+ * Goal: prefer checking errors by numeric code (stable) instead of string names
5
+ * (which may differ by casing between IDL vs generated TS types).
6
+ */
7
+ /**
8
+ * Try to extract a custom program error code (Anchor error code number).
9
+ *
10
+ * Returns `null` if the code cannot be determined.
11
+ */
12
+ export declare function getCustomProgramErrorCode(err: unknown): number | null;
13
+ export declare function isCustomProgramErrorCode(err: unknown, code: number): boolean;