proof-of-take-sdk 3.0.7 → 3.0.9

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 (50) hide show
  1. package/dist/constants/season.d.ts +20 -17
  2. package/dist/constants/season.js +24 -18
  3. package/dist/idl/proof_of_take.json +132 -16
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +1 -0
  6. package/dist/instructions/claimReferralPenaltyForWindow.d.ts +1 -1
  7. package/dist/instructions/claimReferralPenaltyForWindow.js +2 -1
  8. package/dist/instructions/claimWindowRewards.d.ts +1 -3
  9. package/dist/instructions/claimWindowRewards.js +4 -15
  10. package/dist/instructions/closeAuxiliaryAccounts.js +19 -12
  11. package/dist/instructions/confirmedPostOnX.d.ts +1 -1
  12. package/dist/instructions/confirmedPostOnX.js +5 -1
  13. package/dist/instructions/createMiztake.d.ts +1 -1
  14. package/dist/instructions/createMiztake.js +7 -3
  15. package/dist/instructions/initializeEscrowVault.js +5 -4
  16. package/dist/instructions/initializeRewardWindow.js +5 -4
  17. package/dist/instructions/initializeSeasonSettings.js +6 -7
  18. package/dist/instructions/initializeSeasonVault.js +6 -7
  19. package/dist/instructions/initializeStatistics.js +5 -5
  20. package/dist/instructions/joinSeason.d.ts +1 -1
  21. package/dist/instructions/joinSeason.js +20 -5
  22. package/dist/instructions/toggleSeasonPause.js +6 -7
  23. package/dist/instructions/updateSeasonAdmin.js +6 -7
  24. package/dist/instructions/viewSeasonMembershipStatus.d.ts +1 -1
  25. package/dist/instructions/viewSeasonMembershipStatus.js +1 -1
  26. package/dist/instructions/withdrawSeasonDeposit.d.ts +1 -1
  27. package/dist/instructions/withdrawSeasonDeposit.js +2 -1
  28. package/dist/types/accountTypes.d.ts +3 -1
  29. package/dist/types/proof_of_take.d.ts +132 -16
  30. package/dist/types.d.ts +4 -2
  31. package/dist/utils/accountConverters.js +1 -0
  32. package/dist/utils/accountUpdates.d.ts +3 -3
  33. package/dist/utils/accountUpdates.js +4 -3
  34. package/dist/utils/instructionResultHelpers.d.ts +7 -0
  35. package/dist/utils/instructionResultHelpers.js +9 -0
  36. package/dist/utils/pdas.d.ts +4 -4
  37. package/dist/utils/pdas.js +8 -7
  38. package/dist/utils/programErrors.d.ts +13 -0
  39. package/dist/utils/programErrors.js +47 -0
  40. package/dist/utils/remainingAccounts.d.ts +17 -0
  41. package/dist/utils/remainingAccounts.js +38 -0
  42. package/dist/utils/signerHelpers.d.ts +20 -0
  43. package/dist/utils/signerHelpers.js +64 -5
  44. package/dist/utils/tierPenalty.d.ts +2 -2
  45. package/dist/utils/tierPenalty.js +17 -16
  46. package/dist/utils/tierSeeds.d.ts +8 -0
  47. package/dist/utils/tierSeeds.js +14 -0
  48. package/dist/utils/transactionBuilder.d.ts +1 -0
  49. package/dist/utils/transactionBuilder.js +11 -9
  50. package/package.json +1 -1
@@ -7,6 +7,7 @@ const pdas_1 = require("../utils/pdas");
7
7
  const constants_1 = require("../utils/constants");
8
8
  const programHelpers_1 = require("../utils/programHelpers");
9
9
  const signerHelpers_1 = require("../utils/signerHelpers");
10
+ const instructionResultHelpers_1 = require("../utils/instructionResultHelpers");
10
11
  /**
11
12
  * Initialize season deposit vault
12
13
  *
@@ -32,12 +33,10 @@ async function initializeSeasonVault(connection, admin, seasonNumber, feePayer)
32
33
  .initializeSeasonVault(seasonNumber)
33
34
  .accounts(accounts)
34
35
  .instruction();
35
- const signers = (0, signerHelpers_1.buildSigners)([{ publicKey: admin, role: "admin" }], feePayer);
36
- return {
37
- instructions: [instruction],
36
+ const actualFeePayer = (0, signerHelpers_1.resolveFeePayer)({ feePayer, admin });
37
+ const signers = (0, signerHelpers_1.buildSigners)([(0, signerHelpers_1.asAdminSigner)(admin)], actualFeePayer);
38
+ return (0, instructionResultHelpers_1.singleInstruction)(instruction, {
38
39
  signers,
39
- pdas: {
40
- vault: vaultPda,
41
- },
42
- };
40
+ pdas: { vault: vaultPda },
41
+ });
43
42
  }
@@ -8,6 +8,7 @@ const pdas_1 = require("../utils/pdas");
8
8
  const idl_1 = require("../idl/idl");
9
9
  const anchorHelpers_1 = require("../utils/anchorHelpers");
10
10
  const signerHelpers_1 = require("../utils/signerHelpers");
11
+ const instructionResultHelpers_1 = require("../utils/instructionResultHelpers");
11
12
  /**
12
13
  * Initialize the global statistics PDA
13
14
  *
@@ -46,17 +47,16 @@ async function initializeStatistics(connection, admin, payer) {
46
47
  .accounts(accounts)
47
48
  .instruction();
48
49
  // Build signers list (admin always; payer if distinct)
49
- const required = [{ publicKey: admin, role: "admin" }];
50
+ const required = [(0, signerHelpers_1.asAdminSigner)(admin)];
50
51
  if (!actualPayer.equals(admin)) {
51
- required.push({ publicKey: actualPayer, role: "payer" });
52
+ required.push((0, signerHelpers_1.asPayerSigner)(actualPayer));
52
53
  }
53
54
  const signers = (0, signerHelpers_1.buildSigners)(required);
54
- return {
55
- instructions: [instruction],
55
+ return (0, instructionResultHelpers_1.singleInstruction)(instruction, {
56
56
  signers,
57
57
  pdas: { miztakeStatistics: miztakeStatisticsPda },
58
58
  miztakeStatisticsPda, // Back-compat alias
59
- };
59
+ });
60
60
  }
61
61
  /**
62
62
  * Check if statistics are already initialized
@@ -10,7 +10,7 @@ export interface JoinSeasonOptions {
10
10
  user: PublicKey;
11
11
  userTokenAccount: PublicKey;
12
12
  seasonNumber: BN;
13
- /** Tier number: 1=copper, 2=silver, 3=gold, 4=platinum, 5=mithril */
13
+ /** Tier number: 0=copper, 1=silver, 2=gold, 3=platinum, 4=mithril */
14
14
  tier: TierNumber;
15
15
  /** Optional referrer (PublicKey.default means no referrer) */
16
16
  referrer?: PublicKey;
@@ -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
  }
@@ -78,7 +81,6 @@ export interface ClaimWindowRewardsAccounts {
78
81
  seasonDepositVault: PublicKey;
79
82
  mizdMint: PublicKey;
80
83
  userTokenAccount: PublicKey;
81
- referrerTokenAccount: PublicKey;
82
84
  user: PublicKey;
83
85
  tokenProgram: PublicKey;
84
86
  }
@@ -314,10 +314,6 @@ export type ProofOfTake = {
314
314
  "name": "userTokenAccount";
315
315
  "writable": true;
316
316
  },
317
- {
318
- "name": "referrerTokenAccount";
319
- "writable": true;
320
- },
321
317
  {
322
318
  "name": "user";
323
319
  "signer": true;
@@ -1602,6 +1598,100 @@ export type ProofOfTake = {
1602
1598
  "name": "mizdMint";
1603
1599
  "address": "mizdS9fDNUKWZcXBeRhJoJQHJJmsTeF4fFRyPdXWv99";
1604
1600
  },
1601
+ {
1602
+ "name": "rootAdmin";
1603
+ "address": "Lude4DE3jDXVViJ3s7bUfPXdXy8Zq7G1stMwHNQrc2s";
1604
+ },
1605
+ {
1606
+ "name": "rootAdminTokenAccount";
1607
+ "writable": true;
1608
+ "pda": {
1609
+ "seeds": [
1610
+ {
1611
+ "kind": "account";
1612
+ "path": "rootAdmin";
1613
+ },
1614
+ {
1615
+ "kind": "const";
1616
+ "value": [
1617
+ 6,
1618
+ 221,
1619
+ 246,
1620
+ 225,
1621
+ 215,
1622
+ 101,
1623
+ 161,
1624
+ 147,
1625
+ 217,
1626
+ 203,
1627
+ 225,
1628
+ 70,
1629
+ 206,
1630
+ 235,
1631
+ 121,
1632
+ 172,
1633
+ 28,
1634
+ 180,
1635
+ 133,
1636
+ 237,
1637
+ 95,
1638
+ 91,
1639
+ 55,
1640
+ 145,
1641
+ 58,
1642
+ 140,
1643
+ 245,
1644
+ 133,
1645
+ 126,
1646
+ 255,
1647
+ 0,
1648
+ 169
1649
+ ];
1650
+ },
1651
+ {
1652
+ "kind": "account";
1653
+ "path": "mizdMint";
1654
+ }
1655
+ ];
1656
+ "program": {
1657
+ "kind": "const";
1658
+ "value": [
1659
+ 140,
1660
+ 151,
1661
+ 37,
1662
+ 143,
1663
+ 78,
1664
+ 36,
1665
+ 137,
1666
+ 241,
1667
+ 187,
1668
+ 61,
1669
+ 16,
1670
+ 41,
1671
+ 20,
1672
+ 142,
1673
+ 13,
1674
+ 131,
1675
+ 11,
1676
+ 90,
1677
+ 19,
1678
+ 153,
1679
+ 218,
1680
+ 255,
1681
+ 16,
1682
+ 132,
1683
+ 4,
1684
+ 142,
1685
+ 123,
1686
+ 216,
1687
+ 219,
1688
+ 233,
1689
+ 248,
1690
+ 89
1691
+ ];
1692
+ };
1693
+ };
1694
+ },
1605
1695
  {
1606
1696
  "name": "userTokenAccount";
1607
1697
  "writable": true;
@@ -1611,6 +1701,10 @@ export type ProofOfTake = {
1611
1701
  "writable": true;
1612
1702
  "signer": true;
1613
1703
  },
1704
+ {
1705
+ "name": "associatedTokenProgram";
1706
+ "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
1707
+ },
1614
1708
  {
1615
1709
  "name": "tokenProgram";
1616
1710
  "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
@@ -2837,43 +2931,58 @@ export type ProofOfTake = {
2837
2931
  },
2838
2932
  {
2839
2933
  "code": 6035;
2934
+ "name": "invalidReferrerMembership";
2935
+ "msg": "Invalid referrer season membership account";
2936
+ },
2937
+ {
2938
+ "code": 6036;
2840
2939
  "name": "referralPenaltyAlreadyClaimed";
2841
2940
  "msg": "Referral penalty already claimed for this user/window";
2842
2941
  },
2843
2942
  {
2844
- "code": 6036;
2943
+ "code": 6037;
2845
2944
  "name": "referralPenaltyClaimNotAvailableYet";
2846
2945
  "msg": "Referral penalty claim not available yet (must wait until window end + claim buffer)";
2847
2946
  },
2848
2947
  {
2849
- "code": 6037;
2948
+ "code": 6038;
2850
2949
  "name": "referralPenaltyNotEligibleForWindow";
2851
2950
  "msg": "Referred user was not eligible for this window";
2852
2951
  },
2853
2952
  {
2854
- "code": 6038;
2953
+ "code": 6039;
2855
2954
  "name": "referralPenaltyNoMissedPenalty";
2856
2955
  "msg": "Referred user posted successfully (no penalty to claim)";
2857
2956
  },
2858
2957
  {
2859
- "code": 6039;
2958
+ "code": 6040;
2860
2959
  "name": "windowAlreadyFinalized";
2861
2960
  "msg": "Window is already finalized";
2862
2961
  },
2863
2962
  {
2864
- "code": 6040;
2963
+ "code": 6041;
2865
2964
  "name": "windowNotEmpty";
2866
2965
  "msg": "Window is not empty (has successful posters)";
2867
2966
  },
2868
2967
  {
2869
- "code": 6041;
2968
+ "code": 6042;
2870
2969
  "name": "calculationError";
2871
2970
  "msg": "Calculation error";
2872
2971
  },
2873
2972
  {
2874
- "code": 6042;
2973
+ "code": 6043;
2875
2974
  "name": "insufficientFunds";
2876
2975
  "msg": "Insufficient funds";
2976
+ },
2977
+ {
2978
+ "code": 6044;
2979
+ "name": "noWindowRewardsToClaim";
2980
+ "msg": "Nothing to claim for this window (reward amount is 0)";
2981
+ },
2982
+ {
2983
+ "code": 6045;
2984
+ "name": "noReferralPenaltyToClaim";
2985
+ "msg": "Nothing to claim for this window (referral penalty amount is 0)";
2877
2986
  }
2878
2987
  ];
2879
2988
  "types": [
@@ -3050,7 +3159,7 @@ export type ProofOfTake = {
3050
3159
  {
3051
3160
  "name": "tier";
3052
3161
  "docs": [
3053
- "Tier number used for the membership PDA (1..=5)"
3162
+ "Tier number used for the membership PDA (0..=4)"
3054
3163
  ];
3055
3164
  "type": "u8";
3056
3165
  },
@@ -3103,7 +3212,7 @@ export type ProofOfTake = {
3103
3212
  {
3104
3213
  "name": "tier";
3105
3214
  "docs": [
3106
- "Tier number used for the membership PDA (1..=5)"
3215
+ "Tier number used for the membership PDA (0..=4)"
3107
3216
  ];
3108
3217
  "type": "u8";
3109
3218
  },
@@ -3210,7 +3319,7 @@ export type ProofOfTake = {
3210
3319
  {
3211
3320
  "name": "tier";
3212
3321
  "docs": [
3213
- "Tier number used for the membership PDA (1..=5)"
3322
+ "Tier number used for the membership PDA (0..=4)"
3214
3323
  ];
3215
3324
  "type": "u8";
3216
3325
  },
@@ -3560,7 +3669,7 @@ export type ProofOfTake = {
3560
3669
  {
3561
3670
  "name": "tier";
3562
3671
  "docs": [
3563
- "Tier number used for the membership PDA (1..=5)"
3672
+ "Tier number used for the membership PDA (0..=4)"
3564
3673
  ];
3565
3674
  "type": "u8";
3566
3675
  },
@@ -3651,7 +3760,7 @@ export type ProofOfTake = {
3651
3760
  {
3652
3761
  "name": "tier";
3653
3762
  "docs": [
3654
- "Tier number used for the membership PDA (1..=5)"
3763
+ "Tier number used for the membership PDA (0..=4)"
3655
3764
  ];
3656
3765
  "type": "u8";
3657
3766
  },
@@ -3697,6 +3806,13 @@ export type ProofOfTake = {
3697
3806
  ];
3698
3807
  "type": "pubkey";
3699
3808
  },
3809
+ {
3810
+ "name": "referralCount";
3811
+ "docs": [
3812
+ "Total number of successful referrals for this membership (incremented when others join with this member as referrer)"
3813
+ ];
3814
+ "type": "u64";
3815
+ },
3700
3816
  {
3701
3817
  "name": "seasonNumber";
3702
3818
  "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];