@waku/rln 0.1.5-1d384f2.0 → 0.1.5-1e590d7.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 (133) hide show
  1. package/bundle/_virtual/utils.js +2 -2
  2. package/bundle/_virtual/utils2.js +2 -2
  3. package/bundle/index.js +2 -1
  4. package/bundle/packages/rln/dist/contract/constants.js +1 -0
  5. package/bundle/packages/rln/dist/contract/rln_base_contract.js +66 -61
  6. package/bundle/packages/rln/dist/contract/rln_contract.js +1 -1
  7. package/bundle/packages/rln/dist/utils/bytes.js +8 -2
  8. package/bundle/packages/rln/dist/utils/metamask.js +2 -2
  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/index.d.ts +1 -0
  20. package/dist/contract/index.js +1 -0
  21. package/dist/contract/index.js.map +1 -1
  22. package/dist/contract/rln_base_contract.d.ts +5 -11
  23. package/dist/contract/rln_base_contract.js +64 -59
  24. package/dist/contract/rln_base_contract.js.map +1 -1
  25. package/dist/contract/types.d.ts +5 -0
  26. package/dist/contract/types.js.map +1 -1
  27. package/dist/index.d.ts +2 -1
  28. package/dist/index.js +1 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/keystore/keystore.js.map +1 -1
  31. package/dist/keystore/types.d.ts +2 -2
  32. package/dist/utils/bytes.js +8 -2
  33. package/dist/utils/bytes.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/contract/index.ts +1 -0
  36. package/src/contract/rln_base_contract.ts +96 -89
  37. package/src/contract/types.ts +5 -0
  38. package/src/index.ts +3 -1
  39. package/src/keystore/keystore.ts +4 -2
  40. package/src/keystore/types.ts +2 -2
  41. package/src/utils/bytes.ts +10 -2
  42. package/bundle/_virtual/__node-resolve_empty.js +0 -6
  43. package/bundle/_virtual/_node-resolve_empty.js +0 -3
  44. package/bundle/_virtual/bn.js +0 -3
  45. package/bundle/_virtual/common.js +0 -3
  46. package/bundle/_virtual/common2.js +0 -3
  47. package/bundle/_virtual/hash.js +0 -3
  48. package/bundle/_virtual/inherits_browser.js +0 -3
  49. package/bundle/_virtual/ripemd.js +0 -3
  50. package/bundle/_virtual/sha.js +0 -3
  51. package/bundle/_virtual/sha3.js +0 -3
  52. package/bundle/_virtual/utils3.js +0 -3
  53. package/bundle/node_modules/@ethersproject/abi/lib.esm/_version.js +0 -3
  54. package/bundle/node_modules/@ethersproject/abi/lib.esm/abi-coder.js +0 -96
  55. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/abstract-coder.js +0 -148
  56. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/address.js +0 -26
  57. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/anonymous.js +0 -20
  58. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/array.js +0 -210
  59. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/boolean.js +0 -18
  60. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/bytes.js +0 -30
  61. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/fixed-bytes.js +0 -26
  62. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/null.js +0 -22
  63. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/number.js +0 -43
  64. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/string.js +0 -19
  65. package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/tuple.js +0 -58
  66. package/bundle/node_modules/@ethersproject/abi/lib.esm/fragments.js +0 -854
  67. package/bundle/node_modules/@ethersproject/abi/lib.esm/interface.js +0 -609
  68. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/_version.js +0 -3
  69. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/index.js +0 -66
  70. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/_version.js +0 -3
  71. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/index.js +0 -302
  72. package/bundle/node_modules/@ethersproject/address/lib.esm/_version.js +0 -3
  73. package/bundle/node_modules/@ethersproject/address/lib.esm/index.js +0 -110
  74. package/bundle/node_modules/@ethersproject/base64/lib.esm/base64.js +0 -20
  75. package/bundle/node_modules/@ethersproject/basex/lib.esm/index.js +0 -120
  76. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/_version.js +0 -3
  77. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/bignumber.js +0 -287
  78. package/bundle/node_modules/@ethersproject/bytes/lib.esm/_version.js +0 -3
  79. package/bundle/node_modules/@ethersproject/bytes/lib.esm/index.js +0 -402
  80. package/bundle/node_modules/@ethersproject/constants/lib.esm/addresses.js +0 -3
  81. package/bundle/node_modules/@ethersproject/constants/lib.esm/bignumbers.js +0 -8
  82. package/bundle/node_modules/@ethersproject/constants/lib.esm/hashes.js +0 -3
  83. package/bundle/node_modules/@ethersproject/contracts/lib.esm/_version.js +0 -3
  84. package/bundle/node_modules/@ethersproject/contracts/lib.esm/index.js +0 -893
  85. package/bundle/node_modules/@ethersproject/hash/lib.esm/_version.js +0 -3
  86. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/decoder.js +0 -256
  87. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/include.js +0 -36
  88. package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/lib.js +0 -135
  89. package/bundle/node_modules/@ethersproject/hash/lib.esm/id.js +0 -8
  90. package/bundle/node_modules/@ethersproject/hash/lib.esm/namehash.js +0 -64
  91. package/bundle/node_modules/@ethersproject/hash/lib.esm/typed-data.js +0 -443
  92. package/bundle/node_modules/@ethersproject/keccak256/lib.esm/index.js +0 -8
  93. package/bundle/node_modules/@ethersproject/keccak256/node_modules/js-sha3/src/sha3.js +0 -660
  94. package/bundle/node_modules/@ethersproject/logger/lib.esm/_version.js +0 -3
  95. package/bundle/node_modules/@ethersproject/logger/lib.esm/index.js +0 -352
  96. package/bundle/node_modules/@ethersproject/networks/lib.esm/_version.js +0 -3
  97. package/bundle/node_modules/@ethersproject/networks/lib.esm/index.js +0 -248
  98. package/bundle/node_modules/@ethersproject/properties/lib.esm/_version.js +0 -3
  99. package/bundle/node_modules/@ethersproject/properties/lib.esm/index.js +0 -127
  100. package/bundle/node_modules/@ethersproject/providers/lib.esm/_version.js +0 -3
  101. package/bundle/node_modules/@ethersproject/providers/lib.esm/base-provider.js +0 -2007
  102. package/bundle/node_modules/@ethersproject/providers/lib.esm/formatter.js +0 -422
  103. package/bundle/node_modules/@ethersproject/providers/lib.esm/json-rpc-provider.js +0 -674
  104. package/bundle/node_modules/@ethersproject/providers/lib.esm/web3-provider.js +0 -132
  105. package/bundle/node_modules/@ethersproject/rlp/lib.esm/_version.js +0 -3
  106. package/bundle/node_modules/@ethersproject/rlp/lib.esm/index.js +0 -120
  107. package/bundle/node_modules/@ethersproject/sha2/lib.esm/sha2.js +0 -8
  108. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/_version.js +0 -3
  109. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/elliptic.js +0 -2430
  110. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/index.js +0 -76
  111. package/bundle/node_modules/@ethersproject/strings/lib.esm/_version.js +0 -3
  112. package/bundle/node_modules/@ethersproject/strings/lib.esm/utf8.js +0 -219
  113. package/bundle/node_modules/@ethersproject/transactions/lib.esm/_version.js +0 -3
  114. package/bundle/node_modules/@ethersproject/transactions/lib.esm/index.js +0 -279
  115. package/bundle/node_modules/@ethersproject/web/lib.esm/_version.js +0 -3
  116. package/bundle/node_modules/@ethersproject/web/lib.esm/geturl.js +0 -69
  117. package/bundle/node_modules/@ethersproject/web/lib.esm/index.js +0 -404
  118. package/bundle/node_modules/bech32/index.js +0 -187
  119. package/bundle/node_modules/bn.js/lib/bn.js +0 -3361
  120. package/bundle/node_modules/hash.js/lib/hash/common.js +0 -97
  121. package/bundle/node_modules/hash.js/lib/hash/hmac.js +0 -51
  122. package/bundle/node_modules/hash.js/lib/hash/ripemd.js +0 -152
  123. package/bundle/node_modules/hash.js/lib/hash/sha/1.js +0 -81
  124. package/bundle/node_modules/hash.js/lib/hash/sha/224.js +0 -33
  125. package/bundle/node_modules/hash.js/lib/hash/sha/256.js +0 -113
  126. package/bundle/node_modules/hash.js/lib/hash/sha/384.js +0 -39
  127. package/bundle/node_modules/hash.js/lib/hash/sha/512.js +0 -336
  128. package/bundle/node_modules/hash.js/lib/hash/sha/common.js +0 -53
  129. package/bundle/node_modules/hash.js/lib/hash/sha.js +0 -14
  130. package/bundle/node_modules/hash.js/lib/hash/utils.js +0 -282
  131. package/bundle/node_modules/hash.js/lib/hash.js +0 -33
  132. package/bundle/node_modules/inherits/inherits_browser.js +0 -33
  133. package/bundle/node_modules/minimalistic-assert/index.js +0 -13
@@ -33,15 +33,6 @@ 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
-
45
36
  const {
46
37
  address,
47
38
  signer,
@@ -49,15 +40,38 @@ export class RLNBaseContract {
49
40
  contract
50
41
  } = options;
51
42
 
52
- this.validateRateLimit(rateLimit);
43
+ log.info("Initializing RLNBaseContract", { address, rateLimit });
53
44
 
54
45
  this.contract = contract || new ethers.Contract(address, RLN_ABI, signer);
55
46
  this.rateLimit = rateLimit;
56
47
 
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();
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
+ });
61
75
  }
62
76
 
63
77
  /**
@@ -134,7 +148,7 @@ export class RLNBaseContract {
134
148
  * @param newRateLimit The new rate limit to use
135
149
  */
136
150
  public async setRateLimit(newRateLimit: number): Promise<void> {
137
- this.validateRateLimit(newRateLimit);
151
+ await this.validateRateLimit(newRateLimit);
138
152
  this.rateLimit = newRateLimit;
139
153
  }
140
154
 
@@ -324,7 +338,7 @@ export class RLNBaseContract {
324
338
  this.contract.on(
325
339
  this.membersFilter,
326
340
  (
327
- _idCommitment: string,
341
+ _idCommitment: bigint,
328
342
  _membershipRateLimit: ethers.BigNumber,
329
343
  _index: ethers.BigNumber,
330
344
  event: ethers.Event
@@ -336,7 +350,7 @@ export class RLNBaseContract {
336
350
  this.contract.on(
337
351
  this.membershipErasedFilter,
338
352
  (
339
- _idCommitment: string,
353
+ _idCommitment: bigint,
340
354
  _membershipRateLimit: ethers.BigNumber,
341
355
  _index: ethers.BigNumber,
342
356
  event: ethers.Event
@@ -348,7 +362,7 @@ export class RLNBaseContract {
348
362
  this.contract.on(
349
363
  this.membersExpiredFilter,
350
364
  (
351
- _idCommitment: string,
365
+ _idCommitment: bigint,
352
366
  _membershipRateLimit: ethers.BigNumber,
353
367
  _index: ethers.BigNumber,
354
368
  event: ethers.Event
@@ -358,94 +372,82 @@ export class RLNBaseContract {
358
372
  );
359
373
  }
360
374
 
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
-
398
375
  public async getMembershipInfo(
399
- idCommitment: string
376
+ idCommitmentBigInt: bigint
400
377
  ): Promise<MembershipInfo | undefined> {
401
378
  try {
402
- const [startBlock, endBlock, rateLimit] =
403
- await this.contract.getMembershipInfo(idCommitment);
379
+ const membershipData =
380
+ await this.contract.memberships(idCommitmentBigInt);
404
381
  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);
405
394
 
406
395
  let state: MembershipState;
407
- if (currentBlock < startBlock) {
396
+ if (currentBlock < gracePeriodStartTimestamp.toNumber()) {
408
397
  state = MembershipState.Active;
409
- } else if (currentBlock < endBlock) {
398
+ } else if (currentBlock < gracePeriodEnd.toNumber()) {
410
399
  state = MembershipState.GracePeriod;
411
400
  } else {
412
401
  state = MembershipState.Expired;
413
402
  }
414
403
 
415
- const index = await this.getMemberIndex(idCommitment);
416
- if (!index) return undefined;
417
-
418
404
  return {
419
405
  index,
420
- idCommitment,
421
- rateLimit: rateLimit.toNumber(),
422
- startBlock: startBlock.toNumber(),
423
- endBlock: endBlock.toNumber(),
424
- state
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
425
416
  };
426
417
  } catch (error) {
418
+ log.error("Error in getMembershipInfo:", error);
427
419
  return undefined;
428
420
  }
429
421
  }
430
422
 
431
423
  public async extendMembership(
432
- idCommitment: string
424
+ idCommitmentBigInt: bigint
433
425
  ): Promise<ethers.ContractTransaction> {
434
- return this.contract.extendMemberships([idCommitment]);
426
+ const tx = await this.contract.extendMemberships([idCommitmentBigInt]);
427
+ await tx.wait();
428
+ return tx;
435
429
  }
436
430
 
437
431
  public async eraseMembership(
438
- idCommitment: string,
432
+ idCommitmentBigInt: bigint,
439
433
  eraseFromMembershipSet: boolean = true
440
434
  ): Promise<ethers.ContractTransaction> {
441
- return this.contract.eraseMemberships(
442
- [idCommitment],
443
- eraseFromMembershipSet
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 }
444
444
  );
445
+ await tx.wait();
446
+ return tx;
445
447
  }
446
448
 
447
449
  public async registerMembership(
448
- idCommitment: string,
450
+ idCommitmentBigInt: bigint,
449
451
  rateLimit: number = DEFAULT_RATE_LIMIT
450
452
  ): Promise<ethers.ContractTransaction> {
451
453
  if (
@@ -456,12 +458,12 @@ export class RLNBaseContract {
456
458
  `Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE}`
457
459
  );
458
460
  }
459
- return this.contract.register(idCommitment, rateLimit, []);
461
+ return this.contract.register(idCommitmentBigInt, rateLimit, []);
460
462
  }
461
463
 
462
- public async withdraw(token: string, holder: string): Promise<void> {
464
+ public async withdraw(token: string, from: string): Promise<void> {
463
465
  try {
464
- const tx = await this.contract.withdraw(token, { from: holder });
466
+ const tx = await this.contract.withdraw(token, from);
465
467
  await tx.wait();
466
468
  } catch (error) {
467
469
  log.error(`Error in withdraw: ${(error as Error).message}`);
@@ -478,7 +480,7 @@ export class RLNBaseContract {
478
480
 
479
481
  // Check if the ID commitment is already registered
480
482
  const existingIndex = await this.getMemberIndex(
481
- identity.IDCommitmentBigInt.toString()
483
+ identity.IDCommitmentBigInt
482
484
  );
483
485
  if (existingIndex) {
484
486
  throw new Error(
@@ -516,7 +518,7 @@ export class RLNBaseContract {
516
518
  }
517
519
 
518
520
  const memberRegistered = txRegisterReceipt.events?.find(
519
- (event) => event.event === "MembershipRegistered"
521
+ (event: ethers.Event) => event.event === "MembershipRegistered"
520
522
  );
521
523
 
522
524
  if (!memberRegistered || !memberRegistered.args) {
@@ -610,7 +612,7 @@ export class RLNBaseContract {
610
612
  const txRegisterReceipt = await txRegisterResponse.wait();
611
613
 
612
614
  const memberRegistered = txRegisterReceipt.events?.find(
613
- (event) => event.event === "MembershipRegistered"
615
+ (event: ethers.Event) => event.event === "MembershipRegistered"
614
616
  );
615
617
 
616
618
  if (!memberRegistered || !memberRegistered.args) {
@@ -656,13 +658,18 @@ export class RLNBaseContract {
656
658
  * Validates that the rate limit is within the allowed range
657
659
  * @throws Error if the rate limit is outside the allowed range
658
660
  */
659
- private validateRateLimit(rateLimit: number): void {
660
- if (
661
- rateLimit < RATE_LIMIT_PARAMS.MIN_RATE ||
662
- rateLimit > RATE_LIMIT_PARAMS.MAX_RATE
663
- ) {
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) {
664
671
  throw new Error(
665
- `Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE} messages per epoch`
672
+ `Rate limit must be between ${minRateNum} and ${maxRateNum} messages per epoch`
666
673
  );
667
674
  }
668
675
  }
@@ -689,11 +696,11 @@ export class RLNBaseContract {
689
696
  }
690
697
 
691
698
  private async getMemberIndex(
692
- idCommitment: string
699
+ idCommitmentBigInt: bigint
693
700
  ): Promise<ethers.BigNumber | undefined> {
694
701
  try {
695
702
  const events = await this.contract.queryFilter(
696
- this.contract.filters.MembershipRegistered(idCommitment)
703
+ this.contract.filters.MembershipRegistered(idCommitmentBigInt)
697
704
  );
698
705
  if (events.length === 0) return undefined;
699
706
 
@@ -38,6 +38,11 @@ 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;
41
46
  }
42
47
 
43
48
  export enum MembershipState {
package/src/index.ts CHANGED
@@ -34,7 +34,9 @@ export type {
34
34
  Keccak256Hash,
35
35
  KeystoreEntity,
36
36
  MembershipHash,
37
- MembershipInfo,
37
+ KeystoreMembershipInfo,
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,
24
25
  MembershipHash,
25
- MembershipInfo,
26
26
  Password,
27
27
  Sha256Hash
28
28
  } from "./types.js";
@@ -310,7 +310,9 @@ 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(info: MembershipInfo): MembershipHash {
313
+ private static computeMembershipHash(
314
+ info: KeystoreMembershipInfo
315
+ ): MembershipHash {
314
316
  return bytesToHex(
315
317
  sha256(utf8ToBytes(`${info.chainId}${info.address}${info.treeIndex}`))
316
318
  ).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 MembershipInfo = {
10
+ export type KeystoreMembershipInfo = {
11
11
  chainId: string;
12
12
  address: string;
13
13
  treeIndex: number;
@@ -16,7 +16,7 @@ export type MembershipInfo = {
16
16
 
17
17
  export type KeystoreEntity = {
18
18
  identity: IdentityCredential;
19
- membership: MembershipInfo;
19
+ membership: KeystoreMembershipInfo;
20
20
  };
21
21
 
22
22
  export type DecryptedCredentials = KeystoreEntity;
@@ -65,8 +65,16 @@ export function buildBigIntFromUint8Array(
65
65
  array: Uint8Array,
66
66
  byteOffset: number = 0
67
67
  ): bigint {
68
- const dataView = new DataView(array.buffer);
69
- return dataView.getBigUint64(byteOffset, true);
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;
70
78
  }
71
79
 
72
80
  /**
@@ -1,6 +0,0 @@
1
- import * as _nodeResolve_empty from './_node-resolve_empty.js';
2
- import { getAugmentedNamespace } from './_commonjsHelpers.js';
3
-
4
- var require$$0 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty);
5
-
6
- export { require$$0 as default };
@@ -1,3 +0,0 @@
1
- var _nodeResolve_empty = {};
2
-
3
- export { _nodeResolve_empty as default };
@@ -1,3 +0,0 @@
1
- var bn = {exports: {}};
2
-
3
- export { bn as __module };
@@ -1,3 +0,0 @@
1
- var common = {};
2
-
3
- export { common as __exports };
@@ -1,3 +0,0 @@
1
- var common = {};
2
-
3
- export { common as __exports };
@@ -1,3 +0,0 @@
1
- var hash = {};
2
-
3
- export { hash as __exports };
@@ -1,3 +0,0 @@
1
- var inherits_browser = {exports: {}};
2
-
3
- export { inherits_browser as __module };
@@ -1,3 +0,0 @@
1
- var ripemd = {};
2
-
3
- export { ripemd as __exports };
@@ -1,3 +0,0 @@
1
- var sha = {};
2
-
3
- export { sha as __exports };
@@ -1,3 +0,0 @@
1
- var sha3 = {exports: {}};
2
-
3
- export { sha3 as __module };
@@ -1,3 +0,0 @@
1
- var utils = {};
2
-
3
- export { utils as __exports };
@@ -1,3 +0,0 @@
1
- const version = "abi/5.7.0";
2
-
3
- export { version };
@@ -1,96 +0,0 @@
1
- import { arrayify } from '../../bytes/lib.esm/index.js';
2
- import { defineReadOnly } from '../../properties/lib.esm/index.js';
3
- import { Logger } from '../../logger/lib.esm/index.js';
4
- import { version } from './_version.js';
5
- import { Reader, Writer } from './coders/abstract-coder.js';
6
- import { AddressCoder } from './coders/address.js';
7
- import { ArrayCoder } from './coders/array.js';
8
- import { BooleanCoder } from './coders/boolean.js';
9
- import { BytesCoder } from './coders/bytes.js';
10
- import { FixedBytesCoder } from './coders/fixed-bytes.js';
11
- import { NullCoder } from './coders/null.js';
12
- import { NumberCoder } from './coders/number.js';
13
- import { StringCoder } from './coders/string.js';
14
- import { TupleCoder } from './coders/tuple.js';
15
- import { ParamType } from './fragments.js';
16
-
17
- const logger = new Logger(version);
18
- const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);
19
- const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);
20
- class AbiCoder {
21
- constructor(coerceFunc) {
22
- defineReadOnly(this, "coerceFunc", coerceFunc || null);
23
- }
24
- _getCoder(param) {
25
- switch (param.baseType) {
26
- case "address":
27
- return new AddressCoder(param.name);
28
- case "bool":
29
- return new BooleanCoder(param.name);
30
- case "string":
31
- return new StringCoder(param.name);
32
- case "bytes":
33
- return new BytesCoder(param.name);
34
- case "array":
35
- return new ArrayCoder(this._getCoder(param.arrayChildren), param.arrayLength, param.name);
36
- case "tuple":
37
- return new TupleCoder((param.components || []).map((component) => {
38
- return this._getCoder(component);
39
- }), param.name);
40
- case "":
41
- return new NullCoder(param.name);
42
- }
43
- // u?int[0-9]*
44
- let match = param.type.match(paramTypeNumber);
45
- if (match) {
46
- let size = parseInt(match[2] || "256");
47
- if (size === 0 || size > 256 || (size % 8) !== 0) {
48
- logger.throwArgumentError("invalid " + match[1] + " bit length", "param", param);
49
- }
50
- return new NumberCoder(size / 8, (match[1] === "int"), param.name);
51
- }
52
- // bytes[0-9]+
53
- match = param.type.match(paramTypeBytes);
54
- if (match) {
55
- let size = parseInt(match[1]);
56
- if (size === 0 || size > 32) {
57
- logger.throwArgumentError("invalid bytes length", "param", param);
58
- }
59
- return new FixedBytesCoder(size, param.name);
60
- }
61
- return logger.throwArgumentError("invalid type", "type", param.type);
62
- }
63
- _getWordSize() { return 32; }
64
- _getReader(data, allowLoose) {
65
- return new Reader(data, this._getWordSize(), this.coerceFunc, allowLoose);
66
- }
67
- _getWriter() {
68
- return new Writer(this._getWordSize());
69
- }
70
- getDefaultValue(types) {
71
- const coders = types.map((type) => this._getCoder(ParamType.from(type)));
72
- const coder = new TupleCoder(coders, "_");
73
- return coder.defaultValue();
74
- }
75
- encode(types, values) {
76
- if (types.length !== values.length) {
77
- logger.throwError("types/values length mismatch", Logger.errors.INVALID_ARGUMENT, {
78
- count: { types: types.length, values: values.length },
79
- value: { types: types, values: values }
80
- });
81
- }
82
- const coders = types.map((type) => this._getCoder(ParamType.from(type)));
83
- const coder = (new TupleCoder(coders, "_"));
84
- const writer = this._getWriter();
85
- coder.encode(writer, values);
86
- return writer.data;
87
- }
88
- decode(types, data, loose) {
89
- const coders = types.map((type) => this._getCoder(ParamType.from(type)));
90
- const coder = new TupleCoder(coders, "_");
91
- return coder.decode(this._getReader(arrayify(data), loose));
92
- }
93
- }
94
- const defaultAbiCoder = new AbiCoder();
95
-
96
- export { AbiCoder, defaultAbiCoder };