@waku/rln 0.1.5-053bb95.0 → 0.1.5-1d384f2.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 (47) hide show
  1. package/bundle/_virtual/utils.js +2 -2
  2. package/bundle/_virtual/utils2.js +2 -2
  3. package/bundle/packages/rln/dist/contract/constants.js +5 -2
  4. package/bundle/packages/rln/dist/contract/rln_base_contract.js +244 -114
  5. package/bundle/packages/rln/dist/contract/rln_contract.js +74 -89
  6. package/bundle/packages/rln/dist/credentials_manager.js +1 -1
  7. package/bundle/packages/rln/dist/identity.js +0 -8
  8. package/bundle/packages/rln/dist/keystore/keystore.js +28 -15
  9. package/bundle/packages/rln/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/random.js +1 -1
  10. package/bundle/packages/rln/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/utils.js +2 -2
  11. package/bundle/packages/rln/node_modules/@noble/hashes/_sha2.js +1 -1
  12. package/bundle/packages/rln/node_modules/@noble/hashes/hmac.js +1 -1
  13. package/bundle/packages/rln/node_modules/@noble/hashes/pbkdf2.js +1 -1
  14. package/bundle/packages/rln/node_modules/@noble/hashes/scrypt.js +1 -1
  15. package/bundle/packages/rln/node_modules/@noble/hashes/sha256.js +1 -1
  16. package/bundle/packages/rln/node_modules/@noble/hashes/sha512.js +1 -1
  17. package/bundle/packages/rln/node_modules/@noble/hashes/utils.js +1 -1
  18. package/dist/.tsbuildinfo +1 -1
  19. package/dist/contract/constants.d.ts +1 -1
  20. package/dist/contract/constants.js +1 -1
  21. package/dist/contract/constants.js.map +1 -1
  22. package/dist/contract/rln_base_contract.d.ts +30 -22
  23. package/dist/contract/rln_base_contract.js +244 -114
  24. package/dist/contract/rln_base_contract.js.map +1 -1
  25. package/dist/contract/rln_contract.d.ts +4 -24
  26. package/dist/contract/rln_contract.js +74 -89
  27. package/dist/contract/rln_contract.js.map +1 -1
  28. package/dist/credentials_manager.js +1 -1
  29. package/dist/credentials_manager.js.map +1 -1
  30. package/dist/identity.d.ts +0 -1
  31. package/dist/identity.js +0 -8
  32. package/dist/identity.js.map +1 -1
  33. package/dist/keystore/keystore.d.ts +1 -0
  34. package/dist/keystore/keystore.js +28 -15
  35. package/dist/keystore/keystore.js.map +1 -1
  36. package/package.json +1 -1
  37. package/src/contract/constants.ts +1 -1
  38. package/src/contract/rln_base_contract.ts +390 -183
  39. package/src/contract/rln_contract.ts +95 -120
  40. package/src/credentials_manager.ts +1 -1
  41. package/src/identity.ts +0 -9
  42. package/src/keystore/keystore.ts +50 -27
  43. package/bundle/packages/rln/dist/contract/errors.js +0 -62
  44. package/dist/contract/errors.d.ts +0 -30
  45. package/dist/contract/errors.js +0 -61
  46. package/dist/contract/errors.js.map +0 -1
  47. package/src/contract/errors.ts +0 -75
@@ -1,10 +1,19 @@
1
1
  import { ethers } from "ethers";
2
2
  import { IdentityCredential } from "../identity.js";
3
3
  import { DecryptedCredentials } from "../keystore/types.js";
4
- import { Member, MembershipInfo, RLNContractInitOptions } from "./types.js";
4
+ import { CustomQueryOptions, FetchMembersOptions, Member, MembershipInfo, RLNContractInitOptions } from "./types.js";
5
5
  export declare class RLNBaseContract {
6
6
  contract: ethers.Contract;
7
+ private deployBlock;
7
8
  private rateLimit;
9
+ protected _members: Map<number, Member>;
10
+ private _membersFilter;
11
+ private _membershipErasedFilter;
12
+ private _membersExpiredFilter;
13
+ /**
14
+ * Constructor for RLNBaseContract.
15
+ * Allows injecting a mocked contract for testing purposes.
16
+ */
8
17
  constructor(options: RLNContractInitOptions);
9
18
  /**
10
19
  * Gets the current rate limit for this contract instance
@@ -48,25 +57,24 @@ export declare class RLNBaseContract {
48
57
  * @param newRateLimit The new rate limit to use
49
58
  */
50
59
  setRateLimit(newRateLimit: number): Promise<void>;
60
+ get members(): Member[];
61
+ fetchMembers(options?: FetchMembersOptions): Promise<void>;
62
+ static queryFilter(contract: ethers.Contract, options: CustomQueryOptions): Promise<ethers.Event[]>;
63
+ processEvents(events: ethers.Event[]): void;
64
+ static splitToChunks(from: number, to: number, step: number): Array<[number, number]>;
65
+ static takeN<T>(array: T[], size: number): Iterable<T[]>;
66
+ static ignoreErrors<T>(promise: Promise<T>, defaultValue: T): Promise<T>;
67
+ subscribeToMembers(): void;
51
68
  /**
52
- * Gets all members in the given range
53
- * @param startIndex Start index (inclusive)
54
- * @param endIndex End index (exclusive)
55
- */
56
- getMembersInRange(startIndex: number, endIndex: number): Promise<Member[]>;
57
- /**
58
- * Gets all current members
59
- */
60
- getAllMembers(): Promise<Member[]>;
61
- /**
62
- * Gets the member index if it exists, or null if it doesn't
63
- * Throws only on actual errors (invalid input, network issues, etc)
69
+ * Helper method to get remaining messages in current epoch
70
+ * @param membershipId The ID of the membership to check
71
+ * @returns number of remaining messages allowed in current epoch
64
72
  */
65
- private getMemberIndex;
66
- getMembershipInfo(idCommitment: string): Promise<MembershipInfo>;
67
- extendMembership(idCommitment: string): Promise<void>;
68
- eraseMembership(idCommitment: string, eraseFromMembershipSet?: boolean): Promise<void>;
69
- registerMembership(idCommitment: string, rateLimit?: number): Promise<void>;
73
+ getRemainingMessages(membershipId: number): Promise<number>;
74
+ getMembershipInfo(idCommitment: string): Promise<MembershipInfo | undefined>;
75
+ extendMembership(idCommitment: string): Promise<ethers.ContractTransaction>;
76
+ eraseMembership(idCommitment: string, eraseFromMembershipSet?: boolean): Promise<ethers.ContractTransaction>;
77
+ registerMembership(idCommitment: string, rateLimit?: number): Promise<ethers.ContractTransaction>;
70
78
  withdraw(token: string, holder: string): Promise<void>;
71
79
  registerWithIdentity(identity: IdentityCredential): Promise<DecryptedCredentials | undefined>;
72
80
  registerWithPermitAndErase(identity: IdentityCredential, permit: {
@@ -81,8 +89,8 @@ export declare class RLNBaseContract {
81
89
  * @throws Error if the rate limit is outside the allowed range
82
90
  */
83
91
  private validateRateLimit;
84
- /**
85
- * Helper to confirm a transaction and extract event data
86
- */
87
- private confirmTransaction;
92
+ private get membersFilter();
93
+ private get membershipErasedFilter();
94
+ private get membersExpiredFilter();
95
+ private getMemberIndex;
88
96
  }
@@ -2,17 +2,37 @@ import { Logger } from "@waku/utils";
2
2
  import { ethers } from "ethers";
3
3
  import { RLN_ABI } from "./abi.js";
4
4
  import { DEFAULT_RATE_LIMIT, RATE_LIMIT_PARAMS } from "./constants.js";
5
- import { InvalidMembershipError, InvalidRateLimitError, MembershipExistsError, MembershipNotFoundError, RateLimitExceededError, RLNContractError, TransactionError } from "./errors.js";
6
5
  import { MembershipState } from "./types.js";
7
6
  const log = new Logger("waku:rln:contract:base");
8
7
  export class RLNBaseContract {
9
8
  contract;
9
+ deployBlock;
10
10
  rateLimit;
11
+ _members = new Map();
12
+ _membersFilter;
13
+ _membershipErasedFilter;
14
+ _membersExpiredFilter;
15
+ /**
16
+ * Constructor for RLNBaseContract.
17
+ * Allows injecting a mocked contract for testing purposes.
18
+ */
11
19
  constructor(options) {
20
+ // Initialize members and subscriptions
21
+ this.fetchMembers()
22
+ .then(() => {
23
+ this.subscribeToMembers();
24
+ })
25
+ .catch((error) => {
26
+ log.error("Failed to initialize members", { error });
27
+ });
12
28
  const { address, signer, rateLimit = DEFAULT_RATE_LIMIT, contract } = options;
13
29
  this.validateRateLimit(rateLimit);
14
30
  this.contract = contract || new ethers.Contract(address, RLN_ABI, signer);
15
31
  this.rateLimit = rateLimit;
32
+ // Initialize event filters
33
+ this._membersFilter = this.contract.filters.MembershipRegistered();
34
+ this._membershipErasedFilter = this.contract.filters.MembershipErased();
35
+ this._membersExpiredFilter = this.contract.filters.MembershipExpired();
16
36
  }
17
37
  /**
18
38
  * Gets the current rate limit for this contract instance
@@ -83,60 +103,155 @@ export class RLNBaseContract {
83
103
  this.validateRateLimit(newRateLimit);
84
104
  this.rateLimit = newRateLimit;
85
105
  }
86
- /**
87
- * Gets all members in the given range
88
- * @param startIndex Start index (inclusive)
89
- * @param endIndex End index (exclusive)
90
- */
91
- async getMembersInRange(startIndex, endIndex) {
106
+ get members() {
107
+ const sortedMembers = Array.from(this._members.values()).sort((left, right) => left.index.toNumber() - right.index.toNumber());
108
+ return sortedMembers;
109
+ }
110
+ async fetchMembers(options = {}) {
111
+ const registeredMemberEvents = await RLNBaseContract.queryFilter(this.contract, {
112
+ fromBlock: this.deployBlock,
113
+ ...options,
114
+ membersFilter: this.membersFilter
115
+ });
116
+ const removedMemberEvents = await RLNBaseContract.queryFilter(this.contract, {
117
+ fromBlock: this.deployBlock,
118
+ ...options,
119
+ membersFilter: this.membershipErasedFilter
120
+ });
121
+ const expiredMemberEvents = await RLNBaseContract.queryFilter(this.contract, {
122
+ fromBlock: this.deployBlock,
123
+ ...options,
124
+ membersFilter: this.membersExpiredFilter
125
+ });
126
+ const events = [
127
+ ...registeredMemberEvents,
128
+ ...removedMemberEvents,
129
+ ...expiredMemberEvents
130
+ ];
131
+ this.processEvents(events);
132
+ }
133
+ static async queryFilter(contract, options) {
134
+ const FETCH_CHUNK = 5;
135
+ const BLOCK_RANGE = 3000;
136
+ const { fromBlock, membersFilter, fetchRange = BLOCK_RANGE, fetchChunks = FETCH_CHUNK } = options;
137
+ if (fromBlock === undefined) {
138
+ return contract.queryFilter(membersFilter);
139
+ }
140
+ if (!contract.provider) {
141
+ throw Error("No provider found on the contract.");
142
+ }
143
+ const toBlock = await contract.provider.getBlockNumber();
144
+ if (toBlock - fromBlock < fetchRange) {
145
+ return contract.queryFilter(membersFilter, fromBlock, toBlock);
146
+ }
147
+ const events = [];
148
+ const chunks = RLNBaseContract.splitToChunks(fromBlock, toBlock, fetchRange);
149
+ for (const portion of RLNBaseContract.takeN(chunks, fetchChunks)) {
150
+ const promises = portion.map(([left, right]) => RLNBaseContract.ignoreErrors(contract.queryFilter(membersFilter, left, right), []));
151
+ const fetchedEvents = await Promise.all(promises);
152
+ events.push(fetchedEvents.flatMap((v) => v));
153
+ }
154
+ return events.flatMap((v) => v);
155
+ }
156
+ processEvents(events) {
157
+ const toRemoveTable = new Map();
158
+ const toInsertTable = new Map();
159
+ events.forEach((evt) => {
160
+ if (!evt.args) {
161
+ return;
162
+ }
163
+ if (evt.event === "MembershipErased" ||
164
+ evt.event === "MembershipExpired") {
165
+ let index = evt.args.index;
166
+ if (!index) {
167
+ return;
168
+ }
169
+ if (typeof index === "number" || typeof index === "string") {
170
+ index = ethers.BigNumber.from(index);
171
+ }
172
+ const toRemoveVal = toRemoveTable.get(evt.blockNumber);
173
+ if (toRemoveVal != undefined) {
174
+ toRemoveVal.push(index.toNumber());
175
+ toRemoveTable.set(evt.blockNumber, toRemoveVal);
176
+ }
177
+ else {
178
+ toRemoveTable.set(evt.blockNumber, [index.toNumber()]);
179
+ }
180
+ }
181
+ else if (evt.event === "MembershipRegistered") {
182
+ let eventsPerBlock = toInsertTable.get(evt.blockNumber);
183
+ if (eventsPerBlock == undefined) {
184
+ eventsPerBlock = [];
185
+ }
186
+ eventsPerBlock.push(evt);
187
+ toInsertTable.set(evt.blockNumber, eventsPerBlock);
188
+ }
189
+ });
190
+ }
191
+ static splitToChunks(from, to, step) {
192
+ const chunks = [];
193
+ let left = from;
194
+ while (left < to) {
195
+ const right = left + step < to ? left + step : to;
196
+ chunks.push([left, right]);
197
+ left = right;
198
+ }
199
+ return chunks;
200
+ }
201
+ static *takeN(array, size) {
202
+ let start = 0;
203
+ while (start < array.length) {
204
+ const portion = array.slice(start, start + size);
205
+ yield portion;
206
+ start += size;
207
+ }
208
+ }
209
+ static async ignoreErrors(promise, defaultValue) {
92
210
  try {
93
- // Get all commitments in one call
94
- const idCommitments = await this.contract.getRateCommitmentsInRangeBoundsInclusive(startIndex, endIndex - 1 // -1 because getRateCommitmentsInRangeBoundsInclusive is inclusive
95
- );
96
- // Get membership info for each commitment in a single batch
97
- const membershipPromises = idCommitments.map((idCommitment) => this.contract
98
- .memberships(idCommitment)
99
- .then((info) => ({
100
- idCommitment: idCommitment.toString(),
101
- index: ethers.BigNumber.from(info.index)
102
- }))
103
- .catch(() => null) // Skip invalid members
104
- );
105
- // Wait for all promises to resolve
106
- const members = (await Promise.all(membershipPromises)).filter((m) => m !== null);
107
- return members;
211
+ return await promise;
108
212
  }
109
- catch (error) {
110
- if (error instanceof Error &&
111
- error.message.includes("InvalidPaginationQuery")) {
112
- throw new RLNContractError(`Invalid pagination range: start=${startIndex}, end=${endIndex}`);
213
+ catch (err) {
214
+ if (err instanceof Error) {
215
+ log.info(`Ignoring an error during query: ${err.message}`);
216
+ }
217
+ else {
218
+ log.info(`Ignoring an unknown error during query`);
113
219
  }
114
- throw error;
220
+ return defaultValue;
115
221
  }
116
222
  }
117
- /**
118
- * Gets all current members
119
- */
120
- async getAllMembers() {
121
- const nextIndex = (await this.contract.nextFreeIndex()).toNumber();
122
- return this.getMembersInRange(0, nextIndex);
223
+ subscribeToMembers() {
224
+ this.contract.on(this.membersFilter, (_idCommitment, _membershipRateLimit, _index, event) => {
225
+ this.processEvents([event]);
226
+ });
227
+ this.contract.on(this.membershipErasedFilter, (_idCommitment, _membershipRateLimit, _index, event) => {
228
+ this.processEvents([event]);
229
+ });
230
+ this.contract.on(this.membersExpiredFilter, (_idCommitment, _membershipRateLimit, _index, event) => {
231
+ this.processEvents([event]);
232
+ });
123
233
  }
124
234
  /**
125
- * Gets the member index if it exists, or null if it doesn't
126
- * Throws only on actual errors (invalid input, network issues, etc)
235
+ * Helper method to get remaining messages in current epoch
236
+ * @param membershipId The ID of the membership to check
237
+ * @returns number of remaining messages allowed in current epoch
127
238
  */
128
- async getMemberIndex(idCommitment) {
239
+ async getRemainingMessages(membershipId) {
129
240
  try {
130
- const isValid = await this.contract.isInMembershipSet(idCommitment);
131
- if (!isValid) {
132
- return null;
133
- }
134
- const membershipInfo = await this.contract.memberships(idCommitment);
135
- return ethers.BigNumber.from(membershipInfo.index);
241
+ const [startTime, , rateLimit] = await this.contract.getMembershipInfo(membershipId);
242
+ // Calculate current epoch
243
+ const currentTime = Math.floor(Date.now() / 1000);
244
+ const epochsPassed = Math.floor((currentTime - startTime) / RATE_LIMIT_PARAMS.EPOCH_LENGTH);
245
+ const currentEpochStart = startTime + epochsPassed * RATE_LIMIT_PARAMS.EPOCH_LENGTH;
246
+ // Get message count in current epoch using contract's function
247
+ const messageCount = await this.contract.getMessageCount(membershipId, currentEpochStart);
248
+ return Math.max(0, ethers.BigNumber.from(rateLimit)
249
+ .sub(ethers.BigNumber.from(messageCount))
250
+ .toNumber());
136
251
  }
137
252
  catch (error) {
138
- log.error(`Error getting member index: ${error.message}`);
139
- throw new InvalidMembershipError(idCommitment);
253
+ log.error(`Error getting remaining messages: ${error.message}`);
254
+ return 0; // Fail safe: assume no messages remaining on error
140
255
  }
141
256
  }
142
257
  async getMembershipInfo(idCommitment) {
@@ -154,9 +269,8 @@ export class RLNBaseContract {
154
269
  state = MembershipState.Expired;
155
270
  }
156
271
  const index = await this.getMemberIndex(idCommitment);
157
- if (index === null) {
158
- throw new MembershipNotFoundError(idCommitment);
159
- }
272
+ if (!index)
273
+ return undefined;
160
274
  return {
161
275
  index,
162
276
  idCommitment,
@@ -167,51 +281,29 @@ export class RLNBaseContract {
167
281
  };
168
282
  }
169
283
  catch (error) {
170
- if (error instanceof RLNContractError) {
171
- throw error;
172
- }
173
- log.error(`Error getting membership info: ${error.message}`);
174
- throw new InvalidMembershipError(idCommitment);
284
+ return undefined;
175
285
  }
176
286
  }
177
287
  async extendMembership(idCommitment) {
178
- const tx = await this.contract.extendMemberships([idCommitment]);
179
- await this.confirmTransaction(tx, "MembershipExtended", (event) => ({
180
- idCommitment: event.args.idCommitment,
181
- endBlock: event.args.endBlock
182
- }));
288
+ return this.contract.extendMemberships([idCommitment]);
183
289
  }
184
290
  async eraseMembership(idCommitment, eraseFromMembershipSet = true) {
185
- const tx = await this.contract.eraseMemberships([idCommitment], eraseFromMembershipSet);
186
- await this.confirmTransaction(tx, "MembershipErased", (event) => ({
187
- idCommitment: event.args.idCommitment,
188
- index: event.args.index
189
- }));
291
+ return this.contract.eraseMemberships([idCommitment], eraseFromMembershipSet);
190
292
  }
191
293
  async registerMembership(idCommitment, rateLimit = DEFAULT_RATE_LIMIT) {
192
294
  if (rateLimit < RATE_LIMIT_PARAMS.MIN_RATE ||
193
295
  rateLimit > RATE_LIMIT_PARAMS.MAX_RATE) {
194
296
  throw new Error(`Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE}`);
195
297
  }
196
- const tx = await this.contract.register(idCommitment, rateLimit, []);
197
- await this.confirmTransaction(tx, "MembershipRegistered", (event) => ({
198
- idCommitment: event.args.idCommitment,
199
- membershipRateLimit: event.args.membershipRateLimit,
200
- index: event.args.index
201
- }));
298
+ return this.contract.register(idCommitment, rateLimit, []);
202
299
  }
203
300
  async withdraw(token, holder) {
204
301
  try {
205
302
  const tx = await this.contract.withdraw(token, { from: holder });
206
- await this.confirmTransaction(tx, "TokenWithdrawn", (event) => ({
207
- token: event.args.token,
208
- holder: event.args.holder,
209
- amount: event.args.amount
210
- }));
303
+ await tx.wait();
211
304
  }
212
305
  catch (error) {
213
306
  log.error(`Error in withdraw: ${error.message}`);
214
- throw error;
215
307
  }
216
308
  }
217
309
  async registerWithIdentity(identity) {
@@ -219,82 +311,100 @@ export class RLNBaseContract {
219
311
  log.info(`Registering identity with rate limit: ${this.rateLimit} messages/epoch`);
220
312
  // Check if the ID commitment is already registered
221
313
  const existingIndex = await this.getMemberIndex(identity.IDCommitmentBigInt.toString());
222
- if (existingIndex !== null) {
223
- throw new MembershipExistsError(identity.IDCommitmentBigInt.toString(), existingIndex.toString());
314
+ if (existingIndex) {
315
+ throw new Error(`ID commitment is already registered with index ${existingIndex}`);
224
316
  }
225
317
  // Check if there's enough remaining rate limit
226
318
  const remainingRateLimit = await this.getRemainingTotalRateLimit();
227
319
  if (remainingRateLimit < this.rateLimit) {
228
- throw new RateLimitExceededError(this.rateLimit, remainingRateLimit);
320
+ throw new Error(`Not enough remaining rate limit. Requested: ${this.rateLimit}, Available: ${remainingRateLimit}`);
229
321
  }
230
322
  const estimatedGas = await this.contract.estimateGas.register(identity.IDCommitmentBigInt, this.rateLimit, []);
231
323
  const gasLimit = estimatedGas.add(10000);
232
- const tx = await this.contract.register(identity.IDCommitmentBigInt, this.rateLimit, [], { gasLimit });
233
- const decodedData = await this.confirmTransaction(tx, "MembershipRegistered", (event) => ({
234
- idCommitment: event.args.idCommitment,
235
- membershipRateLimit: event.args.membershipRateLimit,
236
- index: event.args.index
237
- }));
324
+ const txRegisterResponse = await this.contract.register(identity.IDCommitmentBigInt, this.rateLimit, [], { gasLimit });
325
+ const txRegisterReceipt = await txRegisterResponse.wait();
326
+ if (txRegisterReceipt.status === 0) {
327
+ throw new Error("Transaction failed on-chain");
328
+ }
329
+ const memberRegistered = txRegisterReceipt.events?.find((event) => event.event === "MembershipRegistered");
330
+ if (!memberRegistered || !memberRegistered.args) {
331
+ log.error("Failed to register membership: No MembershipRegistered event found");
332
+ return undefined;
333
+ }
334
+ const decodedData = {
335
+ idCommitment: memberRegistered.args.idCommitment,
336
+ membershipRateLimit: memberRegistered.args.membershipRateLimit,
337
+ index: memberRegistered.args.index
338
+ };
238
339
  log.info(`Successfully registered membership with index ${decodedData.index} ` +
239
340
  `and rate limit ${decodedData.membershipRateLimit}`);
240
341
  const network = await this.contract.provider.getNetwork();
241
342
  const address = this.contract.address;
242
- const membershipId = decodedData.index.toString();
343
+ const membershipId = Number(decodedData.index);
243
344
  return {
244
345
  identity,
245
346
  membership: {
246
347
  address,
247
- treeIndex: parseInt(membershipId),
348
+ treeIndex: membershipId,
248
349
  chainId: network.chainId.toString(),
249
350
  rateLimit: decodedData.membershipRateLimit.toNumber()
250
351
  }
251
352
  };
252
353
  }
253
354
  catch (error) {
254
- if (error instanceof RLNContractError) {
255
- throw error;
256
- }
257
355
  if (error instanceof Error) {
258
356
  const errorMessage = error.message;
259
357
  log.error("registerWithIdentity - error message:", errorMessage);
260
358
  log.error("registerWithIdentity - error stack:", error.stack);
261
- // Map contract errors to our custom errors
359
+ // Try to extract more specific error information
262
360
  if (errorMessage.includes("CannotExceedMaxTotalRateLimit")) {
263
- throw new RateLimitExceededError(this.rateLimit, await this.getRemainingTotalRateLimit());
361
+ throw new Error("Registration failed: Cannot exceed maximum total rate limit");
264
362
  }
265
363
  else if (errorMessage.includes("InvalidIdCommitment")) {
266
- throw new InvalidMembershipError(identity.IDCommitmentBigInt.toString());
364
+ throw new Error("Registration failed: Invalid ID commitment");
267
365
  }
268
366
  else if (errorMessage.includes("InvalidMembershipRateLimit")) {
269
- throw new InvalidRateLimitError(this.rateLimit, RATE_LIMIT_PARAMS.MIN_RATE, RATE_LIMIT_PARAMS.MAX_RATE);
367
+ throw new Error("Registration failed: Invalid membership rate limit");
270
368
  }
271
369
  else if (errorMessage.includes("execution reverted")) {
272
- throw new TransactionError("Contract execution reverted. Check contract requirements.");
370
+ throw new Error("Contract execution reverted. Check contract requirements.");
371
+ }
372
+ else {
373
+ throw new Error(`Error in registerWithIdentity: ${errorMessage}`);
273
374
  }
274
- throw new RLNContractError(`Error in registerWithIdentity: ${errorMessage}`);
275
375
  }
276
- throw new RLNContractError("Unknown error in registerWithIdentity");
376
+ else {
377
+ throw new Error("Unknown error in registerWithIdentity", {
378
+ cause: error
379
+ });
380
+ }
277
381
  }
278
382
  }
279
383
  async registerWithPermitAndErase(identity, permit, idCommitmentsToErase) {
280
384
  try {
281
385
  log.info(`Registering identity with permit and rate limit: ${this.rateLimit} messages/epoch`);
282
- const tx = await this.contract.registerWithPermit(permit.owner, permit.deadline, permit.v, permit.r, permit.s, identity.IDCommitmentBigInt, this.rateLimit, idCommitmentsToErase.map((id) => ethers.BigNumber.from(id)));
283
- const decodedData = await this.confirmTransaction(tx, "MembershipRegistered", (event) => ({
284
- idCommitment: event.args.idCommitment,
285
- membershipRateLimit: event.args.membershipRateLimit,
286
- index: event.args.index
287
- }));
386
+ const txRegisterResponse = await this.contract.registerWithPermit(permit.owner, permit.deadline, permit.v, permit.r, permit.s, identity.IDCommitmentBigInt, this.rateLimit, idCommitmentsToErase.map((id) => ethers.BigNumber.from(id)));
387
+ const txRegisterReceipt = await txRegisterResponse.wait();
388
+ const memberRegistered = txRegisterReceipt.events?.find((event) => event.event === "MembershipRegistered");
389
+ if (!memberRegistered || !memberRegistered.args) {
390
+ log.error("Failed to register membership with permit: No MembershipRegistered event found");
391
+ return undefined;
392
+ }
393
+ const decodedData = {
394
+ idCommitment: memberRegistered.args.idCommitment,
395
+ membershipRateLimit: memberRegistered.args.membershipRateLimit,
396
+ index: memberRegistered.args.index
397
+ };
288
398
  log.info(`Successfully registered membership with permit. Index: ${decodedData.index}, ` +
289
399
  `Rate limit: ${decodedData.membershipRateLimit}, Erased ${idCommitmentsToErase.length} commitments`);
290
400
  const network = await this.contract.provider.getNetwork();
291
401
  const address = this.contract.address;
292
- const membershipId = decodedData.index.toString();
402
+ const membershipId = Number(decodedData.index);
293
403
  return {
294
404
  identity,
295
405
  membership: {
296
406
  address,
297
- treeIndex: parseInt(membershipId),
407
+ treeIndex: membershipId,
298
408
  chainId: network.chainId.toString(),
299
409
  rateLimit: decodedData.membershipRateLimit.toNumber()
300
410
  }
@@ -302,7 +412,7 @@ export class RLNBaseContract {
302
412
  }
303
413
  catch (error) {
304
414
  log.error(`Error in registerWithPermitAndErase: ${error.message}`);
305
- throw error;
415
+ return undefined;
306
416
  }
307
417
  }
308
418
  /**
@@ -312,19 +422,39 @@ export class RLNBaseContract {
312
422
  validateRateLimit(rateLimit) {
313
423
  if (rateLimit < RATE_LIMIT_PARAMS.MIN_RATE ||
314
424
  rateLimit > RATE_LIMIT_PARAMS.MAX_RATE) {
315
- throw new InvalidRateLimitError(rateLimit, RATE_LIMIT_PARAMS.MIN_RATE, RATE_LIMIT_PARAMS.MAX_RATE);
425
+ throw new Error(`Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE} messages per epoch`);
316
426
  }
317
427
  }
318
- /**
319
- * Helper to confirm a transaction and extract event data
320
- */
321
- async confirmTransaction(tx, expectedEvent, transform) {
322
- const receipt = await tx.wait();
323
- const event = receipt.events?.find((e) => e.event === expectedEvent);
324
- if (!event || !event.args) {
325
- throw new TransactionError(`Expected event ${expectedEvent} not found`);
428
+ get membersFilter() {
429
+ if (!this._membersFilter) {
430
+ throw Error("Members filter was not initialized.");
431
+ }
432
+ return this._membersFilter;
433
+ }
434
+ get membershipErasedFilter() {
435
+ if (!this._membershipErasedFilter) {
436
+ throw Error("MembershipErased filter was not initialized.");
437
+ }
438
+ return this._membershipErasedFilter;
439
+ }
440
+ get membersExpiredFilter() {
441
+ if (!this._membersExpiredFilter) {
442
+ throw Error("MembersExpired filter was not initialized.");
443
+ }
444
+ return this._membersExpiredFilter;
445
+ }
446
+ async getMemberIndex(idCommitment) {
447
+ try {
448
+ const events = await this.contract.queryFilter(this.contract.filters.MembershipRegistered(idCommitment));
449
+ if (events.length === 0)
450
+ return undefined;
451
+ // Get the most recent registration event
452
+ const event = events[events.length - 1];
453
+ return event.args?.index;
454
+ }
455
+ catch (error) {
456
+ return undefined;
326
457
  }
327
- return transform(event);
328
458
  }
329
459
  }
330
460
  //# sourceMappingURL=rln_base_contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rln_base_contract.js","sourceRoot":"","sources":["../../src/contract/rln_base_contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rln_base_contract.js","sourceRoot":"","sources":["../../src/contract/rln_base_contract.ts"],"names":[],"mappings":"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"}