@waku/rln 0.1.5-1e590d7.0 → 0.1.5-3038c48.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 (122) hide show
  1. package/bundle/_virtual/__node-resolve_empty.js +6 -0
  2. package/bundle/_virtual/_node-resolve_empty.js +3 -0
  3. package/bundle/_virtual/bn.js +3 -0
  4. package/bundle/_virtual/common.js +3 -0
  5. package/bundle/_virtual/common2.js +3 -0
  6. package/bundle/_virtual/hash.js +3 -0
  7. package/bundle/_virtual/inherits_browser.js +3 -0
  8. package/bundle/_virtual/ripemd.js +3 -0
  9. package/bundle/_virtual/sha.js +3 -0
  10. package/bundle/_virtual/sha3.js +3 -0
  11. package/bundle/_virtual/utils3.js +3 -0
  12. package/bundle/index.js +1 -2
  13. package/bundle/node_modules/@ethersproject/abi/lib.esm/_version.js +3 -0
  14. package/bundle/node_modules/@ethersproject/abi/lib.esm/abi-coder.js +96 -0
  15. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/abstract-coder.js +148 -0
  16. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/address.js +26 -0
  17. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/anonymous.js +20 -0
  18. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/array.js +210 -0
  19. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/boolean.js +18 -0
  20. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/bytes.js +30 -0
  21. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/fixed-bytes.js +26 -0
  22. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/null.js +22 -0
  23. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/number.js +43 -0
  24. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/string.js +19 -0
  25. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/tuple.js +58 -0
  26. package/bundle/node_modules/@ethersproject/abi/lib.esm/fragments.js +854 -0
  27. package/bundle/node_modules/@ethersproject/abi/lib.esm/interface.js +609 -0
  28. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/_version.js +3 -0
  29. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/index.js +66 -0
  30. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/_version.js +3 -0
  31. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/index.js +302 -0
  32. package/bundle/node_modules/@ethersproject/address/lib.esm/_version.js +3 -0
  33. package/bundle/node_modules/@ethersproject/address/lib.esm/index.js +110 -0
  34. package/bundle/node_modules/@ethersproject/base64/lib.esm/base64.js +20 -0
  35. package/bundle/node_modules/@ethersproject/basex/lib.esm/index.js +120 -0
  36. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/_version.js +3 -0
  37. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/bignumber.js +287 -0
  38. package/bundle/node_modules/@ethersproject/bytes/lib.esm/_version.js +3 -0
  39. package/bundle/node_modules/@ethersproject/bytes/lib.esm/index.js +402 -0
  40. package/bundle/node_modules/@ethersproject/constants/lib.esm/addresses.js +3 -0
  41. package/bundle/node_modules/@ethersproject/constants/lib.esm/bignumbers.js +8 -0
  42. package/bundle/node_modules/@ethersproject/constants/lib.esm/hashes.js +3 -0
  43. package/bundle/node_modules/@ethersproject/contracts/lib.esm/_version.js +3 -0
  44. package/bundle/node_modules/@ethersproject/contracts/lib.esm/index.js +893 -0
  45. package/bundle/node_modules/@ethersproject/hash/lib.esm/_version.js +3 -0
  46. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/decoder.js +256 -0
  47. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/include.js +36 -0
  48. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/lib.js +135 -0
  49. package/bundle/node_modules/@ethersproject/hash/lib.esm/id.js +8 -0
  50. package/bundle/node_modules/@ethersproject/hash/lib.esm/namehash.js +64 -0
  51. package/bundle/node_modules/@ethersproject/hash/lib.esm/typed-data.js +443 -0
  52. package/bundle/node_modules/@ethersproject/keccak256/lib.esm/index.js +8 -0
  53. package/bundle/node_modules/@ethersproject/keccak256/node_modules/js-sha3/src/sha3.js +660 -0
  54. package/bundle/node_modules/@ethersproject/logger/lib.esm/_version.js +3 -0
  55. package/bundle/node_modules/@ethersproject/logger/lib.esm/index.js +352 -0
  56. package/bundle/node_modules/@ethersproject/networks/lib.esm/_version.js +3 -0
  57. package/bundle/node_modules/@ethersproject/networks/lib.esm/index.js +248 -0
  58. package/bundle/node_modules/@ethersproject/properties/lib.esm/_version.js +3 -0
  59. package/bundle/node_modules/@ethersproject/properties/lib.esm/index.js +127 -0
  60. package/bundle/node_modules/@ethersproject/providers/lib.esm/_version.js +3 -0
  61. package/bundle/node_modules/@ethersproject/providers/lib.esm/base-provider.js +2007 -0
  62. package/bundle/node_modules/@ethersproject/providers/lib.esm/formatter.js +422 -0
  63. package/bundle/node_modules/@ethersproject/providers/lib.esm/json-rpc-provider.js +674 -0
  64. package/bundle/node_modules/@ethersproject/providers/lib.esm/web3-provider.js +132 -0
  65. package/bundle/node_modules/@ethersproject/rlp/lib.esm/_version.js +3 -0
  66. package/bundle/node_modules/@ethersproject/rlp/lib.esm/index.js +120 -0
  67. package/bundle/node_modules/@ethersproject/sha2/lib.esm/sha2.js +8 -0
  68. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/_version.js +3 -0
  69. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/elliptic.js +2430 -0
  70. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/index.js +76 -0
  71. package/bundle/node_modules/@ethersproject/strings/lib.esm/_version.js +3 -0
  72. package/bundle/node_modules/@ethersproject/strings/lib.esm/utf8.js +219 -0
  73. package/bundle/node_modules/@ethersproject/transactions/lib.esm/_version.js +3 -0
  74. package/bundle/node_modules/@ethersproject/transactions/lib.esm/index.js +279 -0
  75. package/bundle/node_modules/@ethersproject/web/lib.esm/_version.js +3 -0
  76. package/bundle/node_modules/@ethersproject/web/lib.esm/geturl.js +69 -0
  77. package/bundle/node_modules/@ethersproject/web/lib.esm/index.js +404 -0
  78. package/bundle/node_modules/bech32/index.js +187 -0
  79. package/bundle/node_modules/bn.js/lib/bn.js +3361 -0
  80. package/bundle/node_modules/hash.js/lib/hash/common.js +97 -0
  81. package/bundle/node_modules/hash.js/lib/hash/hmac.js +51 -0
  82. package/bundle/node_modules/hash.js/lib/hash/ripemd.js +152 -0
  83. package/bundle/node_modules/hash.js/lib/hash/sha/1.js +81 -0
  84. package/bundle/node_modules/hash.js/lib/hash/sha/224.js +33 -0
  85. package/bundle/node_modules/hash.js/lib/hash/sha/256.js +113 -0
  86. package/bundle/node_modules/hash.js/lib/hash/sha/384.js +39 -0
  87. package/bundle/node_modules/hash.js/lib/hash/sha/512.js +336 -0
  88. package/bundle/node_modules/hash.js/lib/hash/sha/common.js +53 -0
  89. package/bundle/node_modules/hash.js/lib/hash/sha.js +14 -0
  90. package/bundle/node_modules/hash.js/lib/hash/utils.js +282 -0
  91. package/bundle/node_modules/hash.js/lib/hash.js +33 -0
  92. package/bundle/node_modules/inherits/inherits_browser.js +33 -0
  93. package/bundle/node_modules/minimalistic-assert/index.js +13 -0
  94. package/bundle/packages/rln/dist/contract/constants.js +0 -1
  95. package/bundle/packages/rln/dist/contract/rln_base_contract.js +61 -66
  96. package/bundle/packages/rln/dist/contract/rln_contract.js +1 -1
  97. package/bundle/packages/rln/dist/utils/bytes.js +2 -8
  98. package/bundle/packages/rln/dist/utils/metamask.js +2 -2
  99. package/dist/.tsbuildinfo +1 -1
  100. package/dist/contract/index.d.ts +0 -1
  101. package/dist/contract/index.js +0 -1
  102. package/dist/contract/index.js.map +1 -1
  103. package/dist/contract/rln_base_contract.d.ts +11 -5
  104. package/dist/contract/rln_base_contract.js +59 -64
  105. package/dist/contract/rln_base_contract.js.map +1 -1
  106. package/dist/contract/types.d.ts +0 -5
  107. package/dist/contract/types.js.map +1 -1
  108. package/dist/index.d.ts +1 -2
  109. package/dist/index.js +0 -1
  110. package/dist/index.js.map +1 -1
  111. package/dist/keystore/keystore.js.map +1 -1
  112. package/dist/keystore/types.d.ts +2 -2
  113. package/dist/utils/bytes.js +2 -8
  114. package/dist/utils/bytes.js.map +1 -1
  115. package/package.json +1 -1
  116. package/src/contract/index.ts +0 -1
  117. package/src/contract/rln_base_contract.ts +89 -96
  118. package/src/contract/types.ts +0 -5
  119. package/src/index.ts +1 -3
  120. package/src/keystore/keystore.ts +2 -4
  121. package/src/keystore/types.ts +2 -2
  122. package/src/utils/bytes.ts +2 -10
@@ -33,6 +33,15 @@ export class RLNBaseContract {
33
33
  * Allows injecting a mocked contract for testing purposes.
34
34
  */
35
35
  public constructor(options: RLNContractInitOptions) {
36
+ // Initialize members and subscriptions
37
+ this.fetchMembers()
38
+ .then(() => {
39
+ this.subscribeToMembers();
40
+ })
41
+ .catch((error) => {
42
+ log.error("Failed to initialize members", { error });
43
+ });
44
+
36
45
  const {
37
46
  address,
38
47
  signer,
@@ -40,38 +49,15 @@ export class RLNBaseContract {
40
49
  contract
41
50
  } = options;
42
51
 
43
- log.info("Initializing RLNBaseContract", { address, rateLimit });
52
+ this.validateRateLimit(rateLimit);
44
53
 
45
54
  this.contract = contract || new ethers.Contract(address, RLN_ABI, signer);
46
55
  this.rateLimit = rateLimit;
47
56
 
48
- try {
49
- log.info("Setting up event filters");
50
- // Initialize event filters
51
- this._membersFilter = this.contract.filters.MembershipRegistered();
52
- this._membershipErasedFilter = this.contract.filters.MembershipErased();
53
- this._membersExpiredFilter = this.contract.filters.MembershipExpired();
54
- log.info("Event filters initialized successfully");
55
- } catch (error) {
56
- log.error("Failed to initialize event filters", { error });
57
- throw new Error(
58
- "Failed to initialize event filters: " + (error as Error).message
59
- );
60
- }
61
-
62
- // Initialize members and subscriptions
63
- this.fetchMembers()
64
- .then(() => {
65
- this.subscribeToMembers();
66
- })
67
- .catch((error) => {
68
- log.error("Failed to initialize members", { error });
69
- });
70
-
71
- // Validate rate limit asynchronously
72
- this.validateRateLimit(rateLimit).catch((error) => {
73
- log.error("Failed to validate initial rate limit", { error });
74
- });
57
+ // Initialize event filters
58
+ this._membersFilter = this.contract.filters.MembershipRegistered();
59
+ this._membershipErasedFilter = this.contract.filters.MembershipErased();
60
+ this._membersExpiredFilter = this.contract.filters.MembershipExpired();
75
61
  }
76
62
 
77
63
  /**
@@ -148,7 +134,7 @@ export class RLNBaseContract {
148
134
  * @param newRateLimit The new rate limit to use
149
135
  */
150
136
  public async setRateLimit(newRateLimit: number): Promise<void> {
151
- await this.validateRateLimit(newRateLimit);
137
+ this.validateRateLimit(newRateLimit);
152
138
  this.rateLimit = newRateLimit;
153
139
  }
154
140
 
@@ -338,7 +324,7 @@ export class RLNBaseContract {
338
324
  this.contract.on(
339
325
  this.membersFilter,
340
326
  (
341
- _idCommitment: bigint,
327
+ _idCommitment: string,
342
328
  _membershipRateLimit: ethers.BigNumber,
343
329
  _index: ethers.BigNumber,
344
330
  event: ethers.Event
@@ -350,7 +336,7 @@ export class RLNBaseContract {
350
336
  this.contract.on(
351
337
  this.membershipErasedFilter,
352
338
  (
353
- _idCommitment: bigint,
339
+ _idCommitment: string,
354
340
  _membershipRateLimit: ethers.BigNumber,
355
341
  _index: ethers.BigNumber,
356
342
  event: ethers.Event
@@ -362,7 +348,7 @@ export class RLNBaseContract {
362
348
  this.contract.on(
363
349
  this.membersExpiredFilter,
364
350
  (
365
- _idCommitment: bigint,
351
+ _idCommitment: string,
366
352
  _membershipRateLimit: ethers.BigNumber,
367
353
  _index: ethers.BigNumber,
368
354
  event: ethers.Event
@@ -372,82 +358,94 @@ export class RLNBaseContract {
372
358
  );
373
359
  }
374
360
 
361
+ /**
362
+ * Helper method to get remaining messages in current epoch
363
+ * @param membershipId The ID of the membership to check
364
+ * @returns number of remaining messages allowed in current epoch
365
+ */
366
+ public async getRemainingMessages(membershipId: number): Promise<number> {
367
+ try {
368
+ const [startTime, , rateLimit] =
369
+ await this.contract.getMembershipInfo(membershipId);
370
+
371
+ // Calculate current epoch
372
+ const currentTime = Math.floor(Date.now() / 1000);
373
+ const epochsPassed = Math.floor(
374
+ (currentTime - startTime) / RATE_LIMIT_PARAMS.EPOCH_LENGTH
375
+ );
376
+ const currentEpochStart =
377
+ startTime + epochsPassed * RATE_LIMIT_PARAMS.EPOCH_LENGTH;
378
+
379
+ // Get message count in current epoch using contract's function
380
+ const messageCount = await this.contract.getMessageCount(
381
+ membershipId,
382
+ currentEpochStart
383
+ );
384
+ return Math.max(
385
+ 0,
386
+ ethers.BigNumber.from(rateLimit)
387
+ .sub(ethers.BigNumber.from(messageCount))
388
+ .toNumber()
389
+ );
390
+ } catch (error) {
391
+ log.error(
392
+ `Error getting remaining messages: ${(error as Error).message}`
393
+ );
394
+ return 0; // Fail safe: assume no messages remaining on error
395
+ }
396
+ }
397
+
375
398
  public async getMembershipInfo(
376
- idCommitmentBigInt: bigint
399
+ idCommitment: string
377
400
  ): Promise<MembershipInfo | undefined> {
378
401
  try {
379
- const membershipData =
380
- await this.contract.memberships(idCommitmentBigInt);
402
+ const [startBlock, endBlock, rateLimit] =
403
+ await this.contract.getMembershipInfo(idCommitment);
381
404
  const currentBlock = await this.contract.provider.getBlockNumber();
382
- const [
383
- depositAmount,
384
- activeDuration,
385
- gracePeriodStartTimestamp,
386
- gracePeriodDuration,
387
- rateLimit,
388
- index,
389
- holder,
390
- token
391
- ] = membershipData;
392
-
393
- const gracePeriodEnd = gracePeriodStartTimestamp.add(gracePeriodDuration);
394
405
 
395
406
  let state: MembershipState;
396
- if (currentBlock < gracePeriodStartTimestamp.toNumber()) {
407
+ if (currentBlock < startBlock) {
397
408
  state = MembershipState.Active;
398
- } else if (currentBlock < gracePeriodEnd.toNumber()) {
409
+ } else if (currentBlock < endBlock) {
399
410
  state = MembershipState.GracePeriod;
400
411
  } else {
401
412
  state = MembershipState.Expired;
402
413
  }
403
414
 
415
+ const index = await this.getMemberIndex(idCommitment);
416
+ if (!index) return undefined;
417
+
404
418
  return {
405
419
  index,
406
- idCommitment: idCommitmentBigInt.toString(),
407
- rateLimit: Number(rateLimit),
408
- startBlock: gracePeriodStartTimestamp.toNumber(),
409
- endBlock: gracePeriodEnd.toNumber(),
410
- state,
411
- depositAmount,
412
- activeDuration,
413
- gracePeriodDuration,
414
- holder,
415
- token
420
+ idCommitment,
421
+ rateLimit: rateLimit.toNumber(),
422
+ startBlock: startBlock.toNumber(),
423
+ endBlock: endBlock.toNumber(),
424
+ state
416
425
  };
417
426
  } catch (error) {
418
- log.error("Error in getMembershipInfo:", error);
419
427
  return undefined;
420
428
  }
421
429
  }
422
430
 
423
431
  public async extendMembership(
424
- idCommitmentBigInt: bigint
432
+ idCommitment: string
425
433
  ): Promise<ethers.ContractTransaction> {
426
- const tx = await this.contract.extendMemberships([idCommitmentBigInt]);
427
- await tx.wait();
428
- return tx;
434
+ return this.contract.extendMemberships([idCommitment]);
429
435
  }
430
436
 
431
437
  public async eraseMembership(
432
- idCommitmentBigInt: bigint,
438
+ idCommitment: string,
433
439
  eraseFromMembershipSet: boolean = true
434
440
  ): Promise<ethers.ContractTransaction> {
435
- const estimatedGas = await this.contract.estimateGas[
436
- "eraseMemberships(uint256[],bool)"
437
- ]([idCommitmentBigInt], eraseFromMembershipSet);
438
- const gasLimit = estimatedGas.add(10000);
439
-
440
- const tx = await this.contract["eraseMemberships(uint256[],bool)"](
441
- [idCommitmentBigInt],
442
- eraseFromMembershipSet,
443
- { gasLimit }
441
+ return this.contract.eraseMemberships(
442
+ [idCommitment],
443
+ eraseFromMembershipSet
444
444
  );
445
- await tx.wait();
446
- return tx;
447
445
  }
448
446
 
449
447
  public async registerMembership(
450
- idCommitmentBigInt: bigint,
448
+ idCommitment: string,
451
449
  rateLimit: number = DEFAULT_RATE_LIMIT
452
450
  ): Promise<ethers.ContractTransaction> {
453
451
  if (
@@ -458,12 +456,12 @@ export class RLNBaseContract {
458
456
  `Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE}`
459
457
  );
460
458
  }
461
- return this.contract.register(idCommitmentBigInt, rateLimit, []);
459
+ return this.contract.register(idCommitment, rateLimit, []);
462
460
  }
463
461
 
464
- public async withdraw(token: string, from: string): Promise<void> {
462
+ public async withdraw(token: string, holder: string): Promise<void> {
465
463
  try {
466
- const tx = await this.contract.withdraw(token, from);
464
+ const tx = await this.contract.withdraw(token, { from: holder });
467
465
  await tx.wait();
468
466
  } catch (error) {
469
467
  log.error(`Error in withdraw: ${(error as Error).message}`);
@@ -480,7 +478,7 @@ export class RLNBaseContract {
480
478
 
481
479
  // Check if the ID commitment is already registered
482
480
  const existingIndex = await this.getMemberIndex(
483
- identity.IDCommitmentBigInt
481
+ identity.IDCommitmentBigInt.toString()
484
482
  );
485
483
  if (existingIndex) {
486
484
  throw new Error(
@@ -518,7 +516,7 @@ export class RLNBaseContract {
518
516
  }
519
517
 
520
518
  const memberRegistered = txRegisterReceipt.events?.find(
521
- (event: ethers.Event) => event.event === "MembershipRegistered"
519
+ (event) => event.event === "MembershipRegistered"
522
520
  );
523
521
 
524
522
  if (!memberRegistered || !memberRegistered.args) {
@@ -612,7 +610,7 @@ export class RLNBaseContract {
612
610
  const txRegisterReceipt = await txRegisterResponse.wait();
613
611
 
614
612
  const memberRegistered = txRegisterReceipt.events?.find(
615
- (event: ethers.Event) => event.event === "MembershipRegistered"
613
+ (event) => event.event === "MembershipRegistered"
616
614
  );
617
615
 
618
616
  if (!memberRegistered || !memberRegistered.args) {
@@ -658,18 +656,13 @@ export class RLNBaseContract {
658
656
  * Validates that the rate limit is within the allowed range
659
657
  * @throws Error if the rate limit is outside the allowed range
660
658
  */
661
- private async validateRateLimit(rateLimit: number): Promise<void> {
662
- const [minRate, maxRate] = await Promise.all([
663
- this.contract.minMembershipRateLimit(),
664
- this.contract.maxMembershipRateLimit()
665
- ]);
666
-
667
- const minRateNum = ethers.BigNumber.from(minRate).toNumber();
668
- const maxRateNum = ethers.BigNumber.from(maxRate).toNumber();
669
-
670
- if (rateLimit < minRateNum || rateLimit > maxRateNum) {
659
+ private validateRateLimit(rateLimit: number): void {
660
+ if (
661
+ rateLimit < RATE_LIMIT_PARAMS.MIN_RATE ||
662
+ rateLimit > RATE_LIMIT_PARAMS.MAX_RATE
663
+ ) {
671
664
  throw new Error(
672
- `Rate limit must be between ${minRateNum} and ${maxRateNum} messages per epoch`
665
+ `Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE} messages per epoch`
673
666
  );
674
667
  }
675
668
  }
@@ -696,11 +689,11 @@ export class RLNBaseContract {
696
689
  }
697
690
 
698
691
  private async getMemberIndex(
699
- idCommitmentBigInt: bigint
692
+ idCommitment: string
700
693
  ): Promise<ethers.BigNumber | undefined> {
701
694
  try {
702
695
  const events = await this.contract.queryFilter(
703
- this.contract.filters.MembershipRegistered(idCommitmentBigInt)
696
+ this.contract.filters.MembershipRegistered(idCommitment)
704
697
  );
705
698
  if (events.length === 0) return undefined;
706
699
 
@@ -38,11 +38,6 @@ export interface MembershipInfo {
38
38
  startBlock: number;
39
39
  endBlock: number;
40
40
  state: MembershipState;
41
- depositAmount: ethers.BigNumber;
42
- activeDuration: number;
43
- gracePeriodDuration: number;
44
- holder: string;
45
- token: string;
46
41
  }
47
42
 
48
43
  export enum MembershipState {
package/src/index.ts CHANGED
@@ -34,9 +34,7 @@ export type {
34
34
  Keccak256Hash,
35
35
  KeystoreEntity,
36
36
  MembershipHash,
37
- KeystoreMembershipInfo,
37
+ MembershipInfo,
38
38
  Password,
39
39
  Sha256Hash
40
40
  } from "./keystore/types.js";
41
-
42
- export * from "./contract/index.js";
@@ -21,8 +21,8 @@ import { isCredentialValid, isKeystoreValid } from "./schema_validator.js";
21
21
  import type {
22
22
  Keccak256Hash,
23
23
  KeystoreEntity,
24
- KeystoreMembershipInfo,
25
24
  MembershipHash,
25
+ MembershipInfo,
26
26
  Password,
27
27
  Sha256Hash
28
28
  } from "./types.js";
@@ -310,9 +310,7 @@ export class Keystore {
310
310
 
311
311
  // follows nwaku implementation
312
312
  // https://github.com/waku-org/nwaku/blob/f05528d4be3d3c876a8b07f9bb7dfaae8aa8ec6e/waku/waku_keystore/protocol_types.nim#L111
313
- private static computeMembershipHash(
314
- info: KeystoreMembershipInfo
315
- ): MembershipHash {
313
+ private static computeMembershipHash(info: MembershipInfo): MembershipHash {
316
314
  return bytesToHex(
317
315
  sha256(utf8ToBytes(`${info.chainId}${info.address}${info.treeIndex}`))
318
316
  ).toUpperCase();
@@ -7,7 +7,7 @@ export type Password = string | Uint8Array;
7
7
 
8
8
  // see reference
9
9
  // https://github.com/waku-org/nwaku/blob/f05528d4be3d3c876a8b07f9bb7dfaae8aa8ec6e/waku/waku_keystore/protocol_types.nim#L111
10
- export type KeystoreMembershipInfo = {
10
+ export type MembershipInfo = {
11
11
  chainId: string;
12
12
  address: string;
13
13
  treeIndex: number;
@@ -16,7 +16,7 @@ export type KeystoreMembershipInfo = {
16
16
 
17
17
  export type KeystoreEntity = {
18
18
  identity: IdentityCredential;
19
- membership: KeystoreMembershipInfo;
19
+ membership: MembershipInfo;
20
20
  };
21
21
 
22
22
  export type DecryptedCredentials = KeystoreEntity;
@@ -65,16 +65,8 @@ export function buildBigIntFromUint8Array(
65
65
  array: Uint8Array,
66
66
  byteOffset: number = 0
67
67
  ): bigint {
68
- // Convert byte array to BigInt in big-endian format (to match nwaku)
69
- let result = 0n;
70
- // Process all 32 bytes (or the available bytes if less)
71
- const length = Math.min(array.length - byteOffset, 32);
72
-
73
- for (let i = 0; i < length; i++) {
74
- result = (result << 8n) | BigInt(array[byteOffset + i]);
75
- }
76
-
77
- return result;
68
+ const dataView = new DataView(array.buffer);
69
+ return dataView.getBigUint64(byteOffset, true);
78
70
  }
79
71
 
80
72
  /**