@waku/rln 0.1.6-7fba26d.0 → 0.1.6-a8ca168.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 (51) hide show
  1. package/bundle/_virtual/utils.js +2 -2
  2. package/bundle/_virtual/utils2.js +2 -2
  3. package/bundle/index.js +1 -1
  4. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/_sha2.js +1 -1
  5. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/hmac.js +1 -1
  6. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/pbkdf2.js +1 -1
  7. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/scrypt.js +1 -1
  8. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/sha256.js +1 -1
  9. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/sha512.js +1 -1
  10. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/utils.js +1 -1
  11. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/random.js +1 -1
  12. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/utils.js +2 -2
  13. package/bundle/packages/core/dist/lib/message/version_0.js +1 -4
  14. package/bundle/packages/rln/dist/contract/constants.js +7 -1
  15. package/bundle/packages/rln/dist/contract/rln_base_contract.js +6 -15
  16. package/bundle/packages/rln/dist/credentials_manager.js +7 -6
  17. package/bundle/packages/rln/dist/identity.js +2 -2
  18. package/bundle/packages/rln/dist/keystore/keystore.js +2 -2
  19. package/bundle/packages/rln/dist/message.js +11 -0
  20. package/bundle/packages/rln/dist/utils/bytes.js +3 -9
  21. package/dist/.tsbuildinfo +1 -1
  22. package/dist/contract/constants.d.ts +6 -0
  23. package/dist/contract/constants.js +6 -0
  24. package/dist/contract/constants.js.map +1 -1
  25. package/dist/contract/rln_base_contract.d.ts +1 -6
  26. package/dist/contract/rln_base_contract.js +6 -15
  27. package/dist/contract/rln_base_contract.js.map +1 -1
  28. package/dist/credentials_manager.js +7 -6
  29. package/dist/credentials_manager.js.map +1 -1
  30. package/dist/identity.js +2 -2
  31. package/dist/identity.js.map +1 -1
  32. package/dist/keystore/keystore.js +2 -2
  33. package/dist/keystore/keystore.js.map +1 -1
  34. package/dist/message.d.ts +5 -4
  35. package/dist/message.js +2 -0
  36. package/dist/message.js.map +1 -1
  37. package/dist/utils/bytes.d.ts +1 -6
  38. package/dist/utils/bytes.js +2 -8
  39. package/dist/utils/bytes.js.map +1 -1
  40. package/dist/utils/index.d.ts +1 -1
  41. package/dist/utils/index.js +1 -1
  42. package/dist/utils/index.js.map +1 -1
  43. package/package.json +1 -1
  44. package/src/contract/constants.ts +9 -0
  45. package/src/contract/rln_base_contract.ts +12 -15
  46. package/src/credentials_manager.ts +10 -6
  47. package/src/identity.ts +2 -2
  48. package/src/keystore/keystore.ts +2 -2
  49. package/src/message.ts +7 -4
  50. package/src/utils/bytes.ts +5 -11
  51. package/src/utils/index.ts +1 -1
@@ -1,3 +1,3 @@
1
- var utils = {exports: {}};
1
+ var utils = {};
2
2
 
3
- export { utils as __module };
3
+ export { utils as __exports };
@@ -1,3 +1,3 @@
1
- var utils = {};
1
+ var utils = {exports: {}};
2
2
 
3
- export { utils as __exports };
3
+ export { utils as __module };
package/bundle/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export { RLNDecoder, RLNEncoder } from './packages/rln/dist/codec.js';
2
2
  export { RLN_ABI } from './packages/rln/dist/contract/abi.js';
3
3
  export { RLNContract } from './packages/rln/dist/contract/rln_contract.js';
4
- export { DEFAULT_RATE_LIMIT, LINEA_CONTRACT, RATE_LIMIT_PARAMS, RATE_LIMIT_TIERS } from './packages/rln/dist/contract/constants.js';
4
+ export { DEFAULT_Q, DEFAULT_RATE_LIMIT, LINEA_CONTRACT, RATE_LIMIT_PARAMS, RATE_LIMIT_TIERS } from './packages/rln/dist/contract/constants.js';
5
5
  export { MembershipState } from './packages/rln/dist/contract/types.js';
6
6
  export { RLNBaseContract } from './packages/rln/dist/contract/rln_base_contract.js';
7
7
  export { createRLN } from './packages/rln/dist/create.js';
@@ -1,7 +1,7 @@
1
1
  import { __exports as _sha2 } from '../../../../../../_virtual/_sha2.js';
2
2
  import './_assert.js';
3
3
  import './utils.js';
4
- import { __exports as utils } from '../../../../../../_virtual/utils2.js';
4
+ import { __exports as utils } from '../../../../../../_virtual/utils.js';
5
5
  import { __exports as _assert } from '../../../../../../_virtual/_assert.js';
6
6
 
7
7
  Object.defineProperty(_sha2, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  import { __exports as hmac } from '../../../../../../_virtual/hmac.js';
2
2
  import './_assert.js';
3
3
  import './utils.js';
4
- import { __exports as utils } from '../../../../../../_virtual/utils2.js';
4
+ import { __exports as utils } from '../../../../../../_virtual/utils.js';
5
5
  import { __exports as _assert } from '../../../../../../_virtual/_assert.js';
6
6
 
7
7
  (function (exports) {
@@ -2,7 +2,7 @@ import { __exports as pbkdf2$1 } from '../../../../../../_virtual/pbkdf22.js';
2
2
  import './_assert.js';
3
3
  import './hmac.js';
4
4
  import './utils.js';
5
- import { __exports as utils } from '../../../../../../_virtual/utils2.js';
5
+ import { __exports as utils } from '../../../../../../_virtual/utils.js';
6
6
  import { __exports as _assert } from '../../../../../../_virtual/_assert.js';
7
7
  import { __exports as hmac } from '../../../../../../_virtual/hmac.js';
8
8
 
@@ -3,7 +3,7 @@ import './_assert.js';
3
3
  import './sha256.js';
4
4
  import './pbkdf2.js';
5
5
  import './utils.js';
6
- import { __exports as utils } from '../../../../../../_virtual/utils2.js';
6
+ import { __exports as utils } from '../../../../../../_virtual/utils.js';
7
7
  import { __exports as _assert } from '../../../../../../_virtual/_assert.js';
8
8
  import { __exports as pbkdf2 } from '../../../../../../_virtual/pbkdf22.js';
9
9
  import { __exports as sha256 } from '../../../../../../_virtual/sha2562.js';
@@ -2,7 +2,7 @@ import { __exports as sha256 } from '../../../../../../_virtual/sha2562.js';
2
2
  import './_sha2.js';
3
3
  import './utils.js';
4
4
  import { __exports as _sha2 } from '../../../../../../_virtual/_sha2.js';
5
- import { __exports as utils } from '../../../../../../_virtual/utils2.js';
5
+ import { __exports as utils } from '../../../../../../_virtual/utils.js';
6
6
 
7
7
  Object.defineProperty(sha256, "__esModule", { value: true });
8
8
  sha256.sha224 = sha256.sha256 = void 0;
@@ -4,7 +4,7 @@ import './_u64.js';
4
4
  import './utils.js';
5
5
  import { __exports as _u64 } from '../../../../../../_virtual/_u64.js';
6
6
  import { __exports as _sha2 } from '../../../../../../_virtual/_sha2.js';
7
- import { __exports as utils } from '../../../../../../_virtual/utils2.js';
7
+ import { __exports as utils } from '../../../../../../_virtual/utils.js';
8
8
 
9
9
  Object.defineProperty(sha512, "__esModule", { value: true });
10
10
  sha512.sha384 = sha512.sha512_256 = sha512.sha512_224 = sha512.sha512 = sha512.SHA512 = void 0;
@@ -1,4 +1,4 @@
1
- import { __exports as utils } from '../../../../../../_virtual/utils2.js';
1
+ import { __exports as utils } from '../../../../../../_virtual/utils.js';
2
2
  import './cryptoBrowser.js';
3
3
  import { __exports as cryptoBrowser } from '../../../../../../_virtual/cryptoBrowser.js';
4
4
 
@@ -1,6 +1,6 @@
1
1
  import { __exports as random } from '../../../../../_virtual/random.js';
2
2
  import '../@noble/hashes/utils.js';
3
- import { __exports as utils } from '../../../../../_virtual/utils2.js';
3
+ import { __exports as utils } from '../../../../../_virtual/utils.js';
4
4
 
5
5
  Object.defineProperty(random, "__esModule", { value: true });
6
6
  random.getRandomBytes = random.getRandomBytesSync = void 0;
@@ -1,10 +1,10 @@
1
1
  import { commonjsGlobal } from '../../../../../_virtual/_commonjsHelpers.js';
2
2
  import { commonjsRequire } from '../../../../../_virtual/_commonjs-dynamic-modules.js';
3
- import { __module as utils } from '../../../../../_virtual/utils.js';
3
+ import { __module as utils } from '../../../../../_virtual/utils2.js';
4
4
  import '../@noble/hashes/_assert.js';
5
5
  import '../@noble/hashes/utils.js';
6
6
  import { __exports as _assert } from '../../../../../_virtual/_assert.js';
7
- import { __exports as utils$1 } from '../../../../../_virtual/utils2.js';
7
+ import { __exports as utils$1 } from '../../../../../_virtual/utils.js';
8
8
 
9
9
  utils.exports;
10
10
 
@@ -29,9 +29,6 @@ class DecodedMessage {
29
29
  get contentTopic() {
30
30
  return this.proto.contentTopic;
31
31
  }
32
- get _rawTimestamp() {
33
- return this.proto.timestamp;
34
- }
35
32
  get timestamp() {
36
33
  // In the case we receive a value that is bigger than JS's max number,
37
34
  // we catch the error and return undefined.
@@ -53,7 +50,7 @@ class DecodedMessage {
53
50
  get version() {
54
51
  // https://rfc.vac.dev/spec/14/
55
52
  // > If omitted, the value SHOULD be interpreted as version 0.
56
- return this.proto.version ?? 0;
53
+ return this.proto.version ?? Version;
57
54
  }
58
55
  get rateLimitProof() {
59
56
  return this.proto.rateLimitProof;
@@ -22,6 +22,12 @@ const RATE_LIMIT_PARAMS = {
22
22
  MAX_TOTAL_RATE: 160_000, // Maximum total rate limit across all memberships
23
23
  EPOCH_LENGTH: 600 // Epoch length in seconds (10 minutes)
24
24
  };
25
+ /**
26
+ * Default Q value for the RLN contract
27
+ * This is the upper bound for the ID commitment
28
+ * @see https://github.com/waku-org/specs/blob/master/standards/core/rln-contract.md#implementation-suggestions
29
+ */
30
+ const DEFAULT_Q = BigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617");
25
31
  const DEFAULT_RATE_LIMIT = RATE_LIMIT_PARAMS.MAX_RATE;
26
32
 
27
- export { DEFAULT_RATE_LIMIT, LINEA_CONTRACT, RATE_LIMIT_PARAMS, RATE_LIMIT_TIERS };
33
+ export { DEFAULT_Q, DEFAULT_RATE_LIMIT, LINEA_CONTRACT, RATE_LIMIT_PARAMS, RATE_LIMIT_TIERS };
@@ -14,7 +14,7 @@ import '../../../../node_modules/multiformats/dist/src/bases/identity.js';
14
14
  import '../../../../node_modules/multiformats/dist/src/codecs/json.js';
15
15
  import { Logger } from '../../../utils/dist/logger/index.js';
16
16
  import { RLN_ABI } from './abi.js';
17
- import { DEFAULT_RATE_LIMIT, RATE_LIMIT_PARAMS } from './constants.js';
17
+ import { DEFAULT_Q, DEFAULT_RATE_LIMIT, RATE_LIMIT_PARAMS } from './constants.js';
18
18
  import { MembershipState } from './types.js';
19
19
  import { Contract } from '../../../../node_modules/@ethersproject/contracts/lib.esm/index.js';
20
20
  import { BigNumber } from '../../../../node_modules/@ethersproject/bignumber/lib.esm/bignumber.js';
@@ -30,7 +30,7 @@ class RLNBaseContract {
30
30
  * Default Q value for the RLN contract.
31
31
  * @see https://github.com/waku-org/waku-rlnv2-contract/blob/b7e9a9b1bc69256a2a3076c1f099b50ce84e7eff/src/WakuRlnV2.sol#L25
32
32
  */
33
- Q;
33
+ idCommitmentBigIntLimit = DEFAULT_Q;
34
34
  _members = new Map();
35
35
  _membersFilter;
36
36
  _membershipErasedFilter;
@@ -69,26 +69,17 @@ class RLNBaseContract {
69
69
  */
70
70
  static async create(options) {
71
71
  const instance = new RLNBaseContract(options);
72
- const [min, max] = await Promise.all([
72
+ const [min, max, idCommitmentBigIntLimit] = await Promise.all([
73
73
  instance.contract.minMembershipRateLimit(),
74
- instance.contract.maxMembershipRateLimit()
74
+ instance.contract.maxMembershipRateLimit(),
75
+ instance.contract.Q()
75
76
  ]);
76
77
  instance.minRateLimit = BigNumber.from(min).toNumber();
77
78
  instance.maxRateLimit = BigNumber.from(max).toNumber();
79
+ instance.idCommitmentBigIntLimit = BigInt(idCommitmentBigIntLimit.toString());
78
80
  instance.validateRateLimit(instance.rateLimit);
79
81
  return instance;
80
82
  }
81
- /**
82
- * Fetches and caches the Q value from the contract.
83
- * @returns Promise<bigint> The Q value from the contract
84
- */
85
- async getQ() {
86
- if (this.Q !== undefined)
87
- return this.Q;
88
- const q = await this.contract.Q();
89
- this.Q = BigInt(q.toString());
90
- return this.Q;
91
- }
92
83
  /**
93
84
  * Gets the current rate limit for this contract instance
94
85
  */
@@ -1,5 +1,5 @@
1
1
  import { hmac } from '../../../node_modules/@noble/hashes/esm/hmac.js';
2
- import { sha256 } from '../../../node_modules/@noble/hashes/esm/sha256.js';
2
+ import { sha256 } from '../../../node_modules/@noble/hashes/esm/sha2.js';
3
3
  import '../../interfaces/dist/protocols.js';
4
4
  import '../../interfaces/dist/connection_manager.js';
5
5
  import '../../interfaces/dist/health_indicator.js';
@@ -20,7 +20,7 @@ import { RLNBaseContract } from './contract/rln_base_contract.js';
20
20
  import { IdentityCredential } from './identity.js';
21
21
  import { Keystore } from './keystore/keystore.js';
22
22
  import { extractMetaMaskSigner } from './utils/metamask.js';
23
- import { buildBigIntFromUint8Array } from './utils/bytes.js';
23
+ import { buildBigIntFromUint8ArrayLE } from './utils/bytes.js';
24
24
  import './utils/epoch.js';
25
25
 
26
26
  const log = new Logger("waku:credentials");
@@ -203,13 +203,14 @@ class RLNCredentialsManager {
203
203
  const combinedBytes = new Uint8Array([...idTrapdoor, ...idNullifier]);
204
204
  const idSecretHash = sha256(combinedBytes);
205
205
  const idCommitment = sha256(idSecretHash);
206
- let idCommitmentBigInt = buildBigIntFromUint8Array(idCommitment);
206
+ let idCommitmentBigInt = buildBigIntFromUint8ArrayLE(idCommitment);
207
207
  if (!this.contract) {
208
208
  throw Error("RLN contract is not initialized");
209
209
  }
210
- const Q = await this.contract.getQ();
211
- if (idCommitmentBigInt >= Q) {
212
- idCommitmentBigInt = idCommitmentBigInt % Q;
210
+ const idCommitmentBigIntLimit = this.contract.idCommitmentBigIntLimit;
211
+ if (idCommitmentBigInt >= idCommitmentBigIntLimit) {
212
+ log.warn(`ID commitment is greater than Q, reducing it by Q(idCommitmentBigIntLimit): ${idCommitmentBigInt} % ${idCommitmentBigIntLimit}`);
213
+ idCommitmentBigInt = idCommitmentBigInt % idCommitmentBigIntLimit;
213
214
  }
214
215
  log.info("Successfully generated identity credential");
215
216
  return new IdentityCredential(idTrapdoor, idNullifier, idSecretHash, idCommitment, idCommitmentBigInt);
@@ -1,4 +1,4 @@
1
- import { buildBigIntFromUint8Array } from './utils/bytes.js';
1
+ import { buildBigIntFromUint8ArrayLE } from './utils/bytes.js';
2
2
  import './utils/epoch.js';
3
3
 
4
4
  class IdentityCredential {
@@ -22,7 +22,7 @@ class IdentityCredential {
22
22
  const idNullifier = memKeys.subarray(32, 64);
23
23
  const idSecretHash = memKeys.subarray(64, 96);
24
24
  const idCommitment = memKeys.subarray(96, 128);
25
- const idCommitmentBigInt = buildBigIntFromUint8Array(idCommitment, 32);
25
+ const idCommitmentBigInt = buildBigIntFromUint8ArrayLE(idCommitment);
26
26
  return new IdentityCredential(idTrapdoor, idNullifier, idSecretHash, idCommitment, idCommitmentBigInt);
27
27
  }
28
28
  }
@@ -17,7 +17,7 @@ import { Logger } from '../../../utils/dist/logger/index.js';
17
17
  import { sha256 } from '../../../../node_modules/ethereum-cryptography/esm/sha256.js';
18
18
  import { bytesToUtf8 } from '../../../../node_modules/ethereum-cryptography/esm/utils.js';
19
19
  import _ from '../../../../node_modules/lodash/lodash.js';
20
- import { buildBigIntFromUint8Array } from '../utils/bytes.js';
20
+ import { buildBigIntFromUint8ArrayLE } from '../utils/bytes.js';
21
21
  import { keccak256Checksum, decryptEipKeystore } from './cipher.js';
22
22
  import { isKeystoreValid, isCredentialValid } from './schema_validator.js';
23
23
  import { __exports as lib } from '../../../../_virtual/index.js';
@@ -170,7 +170,7 @@ class Keystore {
170
170
  IDCommitment: Keystore.fromArraylikeToBytes(_.get(obj, "identityCredential.idCommitment", [])),
171
171
  IDTrapdoor: Keystore.fromArraylikeToBytes(_.get(obj, "identityCredential.idTrapdoor", [])),
172
172
  IDNullifier: Keystore.fromArraylikeToBytes(_.get(obj, "identityCredential.idNullifier", [])),
173
- IDCommitmentBigInt: buildBigIntFromUint8Array(Keystore.fromArraylikeToBytes(_.get(obj, "identityCredential.idCommitment", []))),
173
+ IDCommitmentBigInt: buildBigIntFromUint8ArrayLE(Keystore.fromArraylikeToBytes(_.get(obj, "identityCredential.idCommitment", []))),
174
174
  IDSecretHash: Keystore.fromArraylikeToBytes(_.get(obj, "identityCredential.idSecretHash", []))
175
175
  },
176
176
  membership: {
@@ -1,4 +1,14 @@
1
+ import { Version } from '../../core/dist/lib/message/version_0.js';
2
+ import '../../core/dist/lib/filter/filter.js';
3
+ import '../../core/dist/lib/light_push/light_push.js';
4
+ import '../../core/dist/lib/store/store.js';
5
+ import '../../core/dist/lib/connection_manager/connection_manager.js';
6
+ import '../../interfaces/dist/protocols.js';
7
+ import '../../interfaces/dist/connection_manager.js';
8
+ import '../../interfaces/dist/health_indicator.js';
1
9
  import { utf8ToBytes } from '../../utils/dist/bytes/index.js';
10
+ import '../../../node_modules/debug/src/browser.js';
11
+ import '../../core/dist/lib/metadata/metadata.js';
2
12
  import { epochBytesToInt } from './utils/epoch.js';
3
13
 
4
14
  function toRLNSignal(contentTopic, msg) {
@@ -10,6 +20,7 @@ class RlnMessage {
10
20
  msg;
11
21
  rateLimitProof;
12
22
  pubsubTopic = "";
23
+ version = Version;
13
24
  constructor(rlnInstance, msg, rateLimitProof) {
14
25
  this.rlnInstance = rlnInstance;
15
26
  this.msg = msg;
@@ -39,14 +39,8 @@ function writeUIntLE(buf, value, offset, byteLength, noAssert) {
39
39
  }
40
40
  return buf;
41
41
  }
42
- /**
43
- * Transforms Uint8Array into BigInt
44
- * @param array: Uint8Array
45
- * @returns BigInt
46
- */
47
- function buildBigIntFromUint8Array(array, byteOffset = 0) {
48
- const dataView = new DataView(array.buffer);
49
- return dataView.getBigUint64(byteOffset, true);
42
+ function buildBigIntFromUint8ArrayLE(bytes) {
43
+ return bytes.reduce((acc, byte, i) => acc + BigInt(byte) * (1n << (8n * BigInt(i))), 0n);
50
44
  }
51
45
  /**
52
46
  * Fills with zeros to set length
@@ -62,4 +56,4 @@ function zeroPadLE(array, length) {
62
56
  return result;
63
57
  }
64
58
 
65
- export { buildBigIntFromUint8Array, concatenate, writeUIntLE, zeroPadLE };
59
+ export { buildBigIntFromUint8ArrayLE, concatenate, writeUIntLE, zeroPadLE };