@waku/rln 0.1.6-76fb1ea.0 → 0.1.6-86bbf5b.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 (58) hide show
  1. package/bundle/index.js +1 -1
  2. package/bundle/packages/core/dist/lib/connection_manager/connection_manager.js +0 -1
  3. package/bundle/packages/core/dist/lib/connection_manager/keep_alive_manager.js +0 -1
  4. package/bundle/packages/core/dist/lib/filter/filter.js +0 -3
  5. package/bundle/packages/core/dist/lib/light_push/light_push.js +0 -3
  6. package/bundle/packages/core/dist/lib/message/version_0.js +0 -2
  7. package/bundle/packages/core/dist/lib/metadata/metadata.js +0 -3
  8. package/bundle/packages/core/dist/lib/store/store.js +0 -3
  9. package/bundle/packages/proto/dist/generated/light_push.js +22 -28
  10. package/bundle/packages/rln/dist/codec.js +0 -1
  11. package/bundle/packages/rln/dist/contract/constants.js +7 -1
  12. package/bundle/packages/rln/dist/contract/rln_base_contract.js +10 -6
  13. package/bundle/packages/rln/dist/contract/rln_contract.js +0 -1
  14. package/bundle/packages/rln/dist/credentials_manager.js +16 -15
  15. package/bundle/packages/rln/dist/identity.js +40 -7
  16. package/bundle/packages/rln/dist/keystore/keystore.js +15 -12
  17. package/bundle/packages/rln/dist/message.js +0 -15
  18. package/bundle/packages/rln/dist/rln.js +0 -15
  19. package/bundle/packages/rln/dist/utils/bytes.js +37 -16
  20. package/bundle/packages/rln/dist/utils/epoch.js +0 -1
  21. package/bundle/packages/utils/dist/common/sharding/index.js +0 -1
  22. package/dist/.tsbuildinfo +1 -1
  23. package/dist/contract/constants.d.ts +6 -0
  24. package/dist/contract/constants.js +6 -0
  25. package/dist/contract/constants.js.map +1 -1
  26. package/dist/contract/rln_base_contract.js +10 -5
  27. package/dist/contract/rln_base_contract.js.map +1 -1
  28. package/dist/credentials_manager.js +16 -14
  29. package/dist/credentials_manager.js.map +1 -1
  30. package/dist/identity.d.ts +11 -2
  31. package/dist/identity.js +26 -6
  32. package/dist/identity.js.map +1 -1
  33. package/dist/keystore/keystore.js +15 -11
  34. package/dist/keystore/keystore.js.map +1 -1
  35. package/dist/utils/bytes.d.ts +12 -5
  36. package/dist/utils/bytes.js +36 -15
  37. package/dist/utils/bytes.js.map +1 -1
  38. package/dist/utils/index.d.ts +1 -1
  39. package/dist/utils/index.js +1 -1
  40. package/dist/utils/index.js.map +1 -1
  41. package/package.json +1 -1
  42. package/src/contract/constants.ts +9 -0
  43. package/src/contract/rln_base_contract.ts +12 -13
  44. package/src/credentials_manager.ts +27 -21
  45. package/src/identity.ts +41 -6
  46. package/src/keystore/keystore.ts +28 -24
  47. package/src/utils/bytes.ts +46 -25
  48. package/src/utils/index.ts +1 -1
  49. package/bundle/packages/core/dist/lib/light_push/light_push_v3.js +0 -31
  50. package/bundle/packages/core/dist/lib/light_push/status_codes.js +0 -26
  51. package/bundle/packages/core/dist/lib/light_push/status_codes_v3.js +0 -17
  52. package/bundle/packages/interfaces/dist/light_push_v3.js +0 -16
  53. package/bundle/packages/proto/dist/generated/light_push_v2.js +0 -389
  54. package/bundle/packages/proto/dist/generated/light_push_v3.js +0 -348
  55. package/dist/contract/test-utils.d.ts +0 -39
  56. package/dist/contract/test-utils.js +0 -118
  57. package/dist/contract/test-utils.js.map +0 -1
  58. package/src/contract/test-utils.ts +0 -179
@@ -1,348 +0,0 @@
1
- import { decodeMessage } from '../../../../node_modules/protons-runtime/dist/src/decode.js';
2
- import { encodeMessage } from '../../../../node_modules/protons-runtime/dist/src/encode.js';
3
- import '../../../../node_modules/protons-runtime/dist/src/codec.js';
4
- import { message } from '../../../../node_modules/protons-runtime/dist/src/codecs/message.js';
5
- import { alloc } from '../../../../node_modules/uint8arrays/dist/src/alloc.js';
6
- import '../../../../node_modules/protons-runtime/dist/src/utils/float.js';
7
- import '../../../../node_modules/protons-runtime/dist/src/utils/longbits.js';
8
- import '../../../../node_modules/protons-runtime/dist/src/utils/writer.js';
9
-
10
- /* eslint-disable import/export */
11
- /* eslint-disable complexity */
12
- /* eslint-disable @typescript-eslint/no-namespace */
13
- /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
14
- /* eslint-disable @typescript-eslint/no-empty-interface */
15
- var LightpushRequest;
16
- (function (LightpushRequest) {
17
- let _codec;
18
- LightpushRequest.codec = () => {
19
- if (_codec == null) {
20
- _codec = message((obj, w, opts = {}) => {
21
- if (opts.lengthDelimited !== false) {
22
- w.fork();
23
- }
24
- if ((obj.requestId != null && obj.requestId !== '')) {
25
- w.uint32(10);
26
- w.string(obj.requestId);
27
- }
28
- if (obj.pubsubTopic != null) {
29
- w.uint32(162);
30
- w.string(obj.pubsubTopic);
31
- }
32
- if (obj.message != null) {
33
- w.uint32(170);
34
- WakuMessage.codec().encode(obj.message, w);
35
- }
36
- if (opts.lengthDelimited !== false) {
37
- w.ldelim();
38
- }
39
- }, (reader, length, opts = {}) => {
40
- const obj = {
41
- requestId: ''
42
- };
43
- const end = length == null ? reader.len : reader.pos + length;
44
- while (reader.pos < end) {
45
- const tag = reader.uint32();
46
- switch (tag >>> 3) {
47
- case 1: {
48
- obj.requestId = reader.string();
49
- break;
50
- }
51
- case 20: {
52
- obj.pubsubTopic = reader.string();
53
- break;
54
- }
55
- case 21: {
56
- obj.message = WakuMessage.codec().decode(reader, reader.uint32(), {
57
- limits: opts.limits?.message
58
- });
59
- break;
60
- }
61
- default: {
62
- reader.skipType(tag & 7);
63
- break;
64
- }
65
- }
66
- }
67
- return obj;
68
- });
69
- }
70
- return _codec;
71
- };
72
- LightpushRequest.encode = (obj) => {
73
- return encodeMessage(obj, LightpushRequest.codec());
74
- };
75
- LightpushRequest.decode = (buf, opts) => {
76
- return decodeMessage(buf, LightpushRequest.codec(), opts);
77
- };
78
- })(LightpushRequest || (LightpushRequest = {}));
79
- var LightpushResponse;
80
- (function (LightpushResponse) {
81
- let _codec;
82
- LightpushResponse.codec = () => {
83
- if (_codec == null) {
84
- _codec = message((obj, w, opts = {}) => {
85
- if (opts.lengthDelimited !== false) {
86
- w.fork();
87
- }
88
- if ((obj.requestId != null && obj.requestId !== '')) {
89
- w.uint32(10);
90
- w.string(obj.requestId);
91
- }
92
- if ((obj.statusCode != null && obj.statusCode !== 0)) {
93
- w.uint32(80);
94
- w.uint32(obj.statusCode);
95
- }
96
- if (obj.statusDesc != null) {
97
- w.uint32(90);
98
- w.string(obj.statusDesc);
99
- }
100
- if (obj.relayPeerCount != null) {
101
- w.uint32(96);
102
- w.uint32(obj.relayPeerCount);
103
- }
104
- if (opts.lengthDelimited !== false) {
105
- w.ldelim();
106
- }
107
- }, (reader, length, opts = {}) => {
108
- const obj = {
109
- requestId: '',
110
- statusCode: 0
111
- };
112
- const end = length == null ? reader.len : reader.pos + length;
113
- while (reader.pos < end) {
114
- const tag = reader.uint32();
115
- switch (tag >>> 3) {
116
- case 1: {
117
- obj.requestId = reader.string();
118
- break;
119
- }
120
- case 10: {
121
- obj.statusCode = reader.uint32();
122
- break;
123
- }
124
- case 11: {
125
- obj.statusDesc = reader.string();
126
- break;
127
- }
128
- case 12: {
129
- obj.relayPeerCount = reader.uint32();
130
- break;
131
- }
132
- default: {
133
- reader.skipType(tag & 7);
134
- break;
135
- }
136
- }
137
- }
138
- return obj;
139
- });
140
- }
141
- return _codec;
142
- };
143
- LightpushResponse.encode = (obj) => {
144
- return encodeMessage(obj, LightpushResponse.codec());
145
- };
146
- LightpushResponse.decode = (buf, opts) => {
147
- return decodeMessage(buf, LightpushResponse.codec(), opts);
148
- };
149
- })(LightpushResponse || (LightpushResponse = {}));
150
- var RateLimitProof;
151
- (function (RateLimitProof) {
152
- let _codec;
153
- RateLimitProof.codec = () => {
154
- if (_codec == null) {
155
- _codec = message((obj, w, opts = {}) => {
156
- if (opts.lengthDelimited !== false) {
157
- w.fork();
158
- }
159
- if ((obj.proof != null && obj.proof.byteLength > 0)) {
160
- w.uint32(10);
161
- w.bytes(obj.proof);
162
- }
163
- if ((obj.merkleRoot != null && obj.merkleRoot.byteLength > 0)) {
164
- w.uint32(18);
165
- w.bytes(obj.merkleRoot);
166
- }
167
- if ((obj.epoch != null && obj.epoch.byteLength > 0)) {
168
- w.uint32(26);
169
- w.bytes(obj.epoch);
170
- }
171
- if ((obj.shareX != null && obj.shareX.byteLength > 0)) {
172
- w.uint32(34);
173
- w.bytes(obj.shareX);
174
- }
175
- if ((obj.shareY != null && obj.shareY.byteLength > 0)) {
176
- w.uint32(42);
177
- w.bytes(obj.shareY);
178
- }
179
- if ((obj.nullifier != null && obj.nullifier.byteLength > 0)) {
180
- w.uint32(50);
181
- w.bytes(obj.nullifier);
182
- }
183
- if ((obj.rlnIdentifier != null && obj.rlnIdentifier.byteLength > 0)) {
184
- w.uint32(58);
185
- w.bytes(obj.rlnIdentifier);
186
- }
187
- if (opts.lengthDelimited !== false) {
188
- w.ldelim();
189
- }
190
- }, (reader, length, opts = {}) => {
191
- const obj = {
192
- proof: alloc(0),
193
- merkleRoot: alloc(0),
194
- epoch: alloc(0),
195
- shareX: alloc(0),
196
- shareY: alloc(0),
197
- nullifier: alloc(0),
198
- rlnIdentifier: alloc(0)
199
- };
200
- const end = length == null ? reader.len : reader.pos + length;
201
- while (reader.pos < end) {
202
- const tag = reader.uint32();
203
- switch (tag >>> 3) {
204
- case 1: {
205
- obj.proof = reader.bytes();
206
- break;
207
- }
208
- case 2: {
209
- obj.merkleRoot = reader.bytes();
210
- break;
211
- }
212
- case 3: {
213
- obj.epoch = reader.bytes();
214
- break;
215
- }
216
- case 4: {
217
- obj.shareX = reader.bytes();
218
- break;
219
- }
220
- case 5: {
221
- obj.shareY = reader.bytes();
222
- break;
223
- }
224
- case 6: {
225
- obj.nullifier = reader.bytes();
226
- break;
227
- }
228
- case 7: {
229
- obj.rlnIdentifier = reader.bytes();
230
- break;
231
- }
232
- default: {
233
- reader.skipType(tag & 7);
234
- break;
235
- }
236
- }
237
- }
238
- return obj;
239
- });
240
- }
241
- return _codec;
242
- };
243
- RateLimitProof.encode = (obj) => {
244
- return encodeMessage(obj, RateLimitProof.codec());
245
- };
246
- RateLimitProof.decode = (buf, opts) => {
247
- return decodeMessage(buf, RateLimitProof.codec(), opts);
248
- };
249
- })(RateLimitProof || (RateLimitProof = {}));
250
- var WakuMessage;
251
- (function (WakuMessage) {
252
- let _codec;
253
- WakuMessage.codec = () => {
254
- if (_codec == null) {
255
- _codec = message((obj, w, opts = {}) => {
256
- if (opts.lengthDelimited !== false) {
257
- w.fork();
258
- }
259
- if ((obj.payload != null && obj.payload.byteLength > 0)) {
260
- w.uint32(10);
261
- w.bytes(obj.payload);
262
- }
263
- if ((obj.contentTopic != null && obj.contentTopic !== '')) {
264
- w.uint32(18);
265
- w.string(obj.contentTopic);
266
- }
267
- if (obj.version != null) {
268
- w.uint32(24);
269
- w.uint32(obj.version);
270
- }
271
- if (obj.timestamp != null) {
272
- w.uint32(80);
273
- w.sint64(obj.timestamp);
274
- }
275
- if (obj.meta != null) {
276
- w.uint32(90);
277
- w.bytes(obj.meta);
278
- }
279
- if (obj.rateLimitProof != null) {
280
- w.uint32(170);
281
- RateLimitProof.codec().encode(obj.rateLimitProof, w);
282
- }
283
- if (obj.ephemeral != null) {
284
- w.uint32(248);
285
- w.bool(obj.ephemeral);
286
- }
287
- if (opts.lengthDelimited !== false) {
288
- w.ldelim();
289
- }
290
- }, (reader, length, opts = {}) => {
291
- const obj = {
292
- payload: alloc(0),
293
- contentTopic: ''
294
- };
295
- const end = length == null ? reader.len : reader.pos + length;
296
- while (reader.pos < end) {
297
- const tag = reader.uint32();
298
- switch (tag >>> 3) {
299
- case 1: {
300
- obj.payload = reader.bytes();
301
- break;
302
- }
303
- case 2: {
304
- obj.contentTopic = reader.string();
305
- break;
306
- }
307
- case 3: {
308
- obj.version = reader.uint32();
309
- break;
310
- }
311
- case 10: {
312
- obj.timestamp = reader.sint64();
313
- break;
314
- }
315
- case 11: {
316
- obj.meta = reader.bytes();
317
- break;
318
- }
319
- case 21: {
320
- obj.rateLimitProof = RateLimitProof.codec().decode(reader, reader.uint32(), {
321
- limits: opts.limits?.rateLimitProof
322
- });
323
- break;
324
- }
325
- case 31: {
326
- obj.ephemeral = reader.bool();
327
- break;
328
- }
329
- default: {
330
- reader.skipType(tag & 7);
331
- break;
332
- }
333
- }
334
- }
335
- return obj;
336
- });
337
- }
338
- return _codec;
339
- };
340
- WakuMessage.encode = (obj) => {
341
- return encodeMessage(obj, WakuMessage.codec());
342
- };
343
- WakuMessage.decode = (buf, opts) => {
344
- return decodeMessage(buf, WakuMessage.codec(), opts);
345
- };
346
- })(WakuMessage || (WakuMessage = {}));
347
-
348
- export { LightpushRequest, LightpushResponse, RateLimitProof, WakuMessage };
@@ -1,39 +0,0 @@
1
- import * as ethers from "ethers";
2
- import sinon from "sinon";
3
- import type { IdentityCredential } from "../identity.js";
4
- export declare const mockRateLimits: {
5
- minRate: number;
6
- maxRate: number;
7
- maxTotalRate: number;
8
- currentTotalRate: number;
9
- };
10
- type MockProvider = {
11
- getLogs: () => never[];
12
- getBlockNumber: () => Promise<number>;
13
- getNetwork: () => Promise<{
14
- chainId: number;
15
- }>;
16
- };
17
- type MockFilters = {
18
- MembershipRegistered: () => {
19
- address: string;
20
- };
21
- MembershipErased: () => {
22
- address: string;
23
- };
24
- MembershipExpired: () => {
25
- address: string;
26
- };
27
- };
28
- export declare function createMockProvider(): MockProvider;
29
- export declare function createMockFilters(): MockFilters;
30
- type ContractOverrides = Partial<{
31
- filters: Record<string, unknown>;
32
- [key: string]: unknown;
33
- }>;
34
- export declare function createMockRegistryContract(overrides?: ContractOverrides): ethers.Contract;
35
- export declare function mockRLNRegisteredEvent(idCommitment?: string): ethers.Event;
36
- export declare function formatIdCommitment(idCommitmentBigInt: bigint): string;
37
- export declare function createRegisterStub(identity: IdentityCredential): sinon.SinonStub;
38
- export declare function verifyRegistration(decryptedCredentials: any, identity: IdentityCredential, registerStub: sinon.SinonStub, insertMemberSpy: sinon.SinonStub): void;
39
- export {};
@@ -1,118 +0,0 @@
1
- import { hexToBytes } from "@waku/utils/bytes";
2
- import { expect } from "chai";
3
- import * as ethers from "ethers";
4
- import sinon from "sinon";
5
- import { DEFAULT_RATE_LIMIT, LINEA_CONTRACT } from "./constants.js";
6
- export const mockRateLimits = {
7
- minRate: 20,
8
- maxRate: 600,
9
- maxTotalRate: 1200,
10
- currentTotalRate: 500
11
- };
12
- export function createMockProvider() {
13
- return {
14
- getLogs: () => [],
15
- getBlockNumber: () => Promise.resolve(1000),
16
- getNetwork: () => Promise.resolve({ chainId: 11155111 })
17
- };
18
- }
19
- export function createMockFilters() {
20
- return {
21
- MembershipRegistered: () => ({ address: LINEA_CONTRACT.address }),
22
- MembershipErased: () => ({ address: LINEA_CONTRACT.address }),
23
- MembershipExpired: () => ({ address: LINEA_CONTRACT.address })
24
- };
25
- }
26
- export function createMockRegistryContract(overrides = {}) {
27
- const filters = {
28
- MembershipRegistered: () => ({ address: LINEA_CONTRACT.address }),
29
- MembershipErased: () => ({ address: LINEA_CONTRACT.address }),
30
- MembershipExpired: () => ({ address: LINEA_CONTRACT.address })
31
- };
32
- const baseContract = {
33
- minMembershipRateLimit: () => Promise.resolve(ethers.BigNumber.from(mockRateLimits.minRate)),
34
- maxMembershipRateLimit: () => Promise.resolve(ethers.BigNumber.from(mockRateLimits.maxRate)),
35
- maxTotalRateLimit: () => Promise.resolve(ethers.BigNumber.from(mockRateLimits.maxTotalRate)),
36
- currentTotalRateLimit: () => Promise.resolve(ethers.BigNumber.from(mockRateLimits.currentTotalRate)),
37
- queryFilter: () => [],
38
- provider: createMockProvider(),
39
- filters,
40
- on: () => ({}),
41
- removeAllListeners: () => ({}),
42
- register: () => ({
43
- wait: () => Promise.resolve({
44
- events: [mockRLNRegisteredEvent()]
45
- })
46
- }),
47
- estimateGas: {
48
- register: () => Promise.resolve(ethers.BigNumber.from(100000))
49
- },
50
- functions: {
51
- register: () => Promise.resolve()
52
- },
53
- getMemberIndex: () => Promise.resolve(null),
54
- interface: {
55
- getEvent: (eventName) => ({
56
- name: eventName,
57
- format: () => { }
58
- })
59
- },
60
- address: LINEA_CONTRACT.address
61
- };
62
- // Merge overrides while preserving filters
63
- const merged = {
64
- ...baseContract,
65
- ...overrides,
66
- filters: { ...filters, ...(overrides.filters || {}) }
67
- };
68
- return merged;
69
- }
70
- export function mockRLNRegisteredEvent(idCommitment) {
71
- return {
72
- args: {
73
- idCommitment: idCommitment ||
74
- "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
75
- membershipRateLimit: ethers.BigNumber.from(DEFAULT_RATE_LIMIT),
76
- index: ethers.BigNumber.from(1)
77
- },
78
- event: "MembershipRegistered"
79
- };
80
- }
81
- export function formatIdCommitment(idCommitmentBigInt) {
82
- return "0x" + idCommitmentBigInt.toString(16).padStart(64, "0");
83
- }
84
- export function createRegisterStub(identity) {
85
- return sinon.stub().callsFake(() => ({
86
- wait: () => Promise.resolve({
87
- events: [
88
- {
89
- event: "MembershipRegistered",
90
- args: {
91
- idCommitment: formatIdCommitment(identity.IDCommitmentBigInt),
92
- membershipRateLimit: ethers.BigNumber.from(DEFAULT_RATE_LIMIT),
93
- index: ethers.BigNumber.from(1)
94
- }
95
- }
96
- ]
97
- })
98
- }));
99
- }
100
- export function verifyRegistration(decryptedCredentials, identity, registerStub, insertMemberSpy) {
101
- if (!decryptedCredentials) {
102
- throw new Error("Decrypted credentials should not be undefined");
103
- }
104
- // Verify registration call
105
- expect(registerStub.calledWith(sinon.match.same(identity.IDCommitmentBigInt), sinon.match.same(DEFAULT_RATE_LIMIT), sinon.match.array, sinon.match.object)).to.be.true;
106
- // Verify credential properties
107
- expect(decryptedCredentials).to.have.property("identity");
108
- expect(decryptedCredentials).to.have.property("membership");
109
- expect(decryptedCredentials.membership).to.include({
110
- address: LINEA_CONTRACT.address,
111
- treeIndex: 1
112
- });
113
- // Verify member insertion
114
- const expectedIdCommitment = ethers.utils.zeroPad(hexToBytes(formatIdCommitment(identity.IDCommitmentBigInt)), 32);
115
- expect(insertMemberSpy.callCount).to.equal(1);
116
- expect(insertMemberSpy.getCall(0).args[0]).to.deep.equal(expectedIdCommitment);
117
- }
118
- //# sourceMappingURL=test-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/contract/test-utils.ts"],"names":[],"mappings":"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"}
@@ -1,179 +0,0 @@
1
- import { hexToBytes } from "@waku/utils/bytes";
2
- import { expect } from "chai";
3
- import * as ethers from "ethers";
4
- import sinon from "sinon";
5
-
6
- import type { IdentityCredential } from "../identity.js";
7
-
8
- import { DEFAULT_RATE_LIMIT, LINEA_CONTRACT } from "./constants.js";
9
-
10
- export const mockRateLimits = {
11
- minRate: 20,
12
- maxRate: 600,
13
- maxTotalRate: 1200,
14
- currentTotalRate: 500
15
- };
16
-
17
- type MockProvider = {
18
- getLogs: () => never[];
19
- getBlockNumber: () => Promise<number>;
20
- getNetwork: () => Promise<{ chainId: number }>;
21
- };
22
-
23
- type MockFilters = {
24
- MembershipRegistered: () => { address: string };
25
- MembershipErased: () => { address: string };
26
- MembershipExpired: () => { address: string };
27
- };
28
-
29
- export function createMockProvider(): MockProvider {
30
- return {
31
- getLogs: () => [],
32
- getBlockNumber: () => Promise.resolve(1000),
33
- getNetwork: () => Promise.resolve({ chainId: 11155111 })
34
- };
35
- }
36
-
37
- export function createMockFilters(): MockFilters {
38
- return {
39
- MembershipRegistered: () => ({ address: LINEA_CONTRACT.address }),
40
- MembershipErased: () => ({ address: LINEA_CONTRACT.address }),
41
- MembershipExpired: () => ({ address: LINEA_CONTRACT.address })
42
- };
43
- }
44
-
45
- type ContractOverrides = Partial<{
46
- filters: Record<string, unknown>;
47
- [key: string]: unknown;
48
- }>;
49
-
50
- export function createMockRegistryContract(
51
- overrides: ContractOverrides = {}
52
- ): ethers.Contract {
53
- const filters = {
54
- MembershipRegistered: () => ({ address: LINEA_CONTRACT.address }),
55
- MembershipErased: () => ({ address: LINEA_CONTRACT.address }),
56
- MembershipExpired: () => ({ address: LINEA_CONTRACT.address })
57
- };
58
-
59
- const baseContract = {
60
- minMembershipRateLimit: () =>
61
- Promise.resolve(ethers.BigNumber.from(mockRateLimits.minRate)),
62
- maxMembershipRateLimit: () =>
63
- Promise.resolve(ethers.BigNumber.from(mockRateLimits.maxRate)),
64
- maxTotalRateLimit: () =>
65
- Promise.resolve(ethers.BigNumber.from(mockRateLimits.maxTotalRate)),
66
- currentTotalRateLimit: () =>
67
- Promise.resolve(ethers.BigNumber.from(mockRateLimits.currentTotalRate)),
68
- queryFilter: () => [],
69
- provider: createMockProvider(),
70
- filters,
71
- on: () => ({}),
72
- removeAllListeners: () => ({}),
73
- register: () => ({
74
- wait: () =>
75
- Promise.resolve({
76
- events: [mockRLNRegisteredEvent()]
77
- })
78
- }),
79
- estimateGas: {
80
- register: () => Promise.resolve(ethers.BigNumber.from(100000))
81
- },
82
- functions: {
83
- register: () => Promise.resolve()
84
- },
85
- getMemberIndex: () => Promise.resolve(null),
86
- interface: {
87
- getEvent: (eventName: string) => ({
88
- name: eventName,
89
- format: () => {}
90
- })
91
- },
92
- address: LINEA_CONTRACT.address
93
- };
94
-
95
- // Merge overrides while preserving filters
96
- const merged = {
97
- ...baseContract,
98
- ...overrides,
99
- filters: { ...filters, ...(overrides.filters || {}) }
100
- };
101
-
102
- return merged as unknown as ethers.Contract;
103
- }
104
-
105
- export function mockRLNRegisteredEvent(idCommitment?: string): ethers.Event {
106
- return {
107
- args: {
108
- idCommitment:
109
- idCommitment ||
110
- "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
111
- membershipRateLimit: ethers.BigNumber.from(DEFAULT_RATE_LIMIT),
112
- index: ethers.BigNumber.from(1)
113
- },
114
- event: "MembershipRegistered"
115
- } as unknown as ethers.Event;
116
- }
117
-
118
- export function formatIdCommitment(idCommitmentBigInt: bigint): string {
119
- return "0x" + idCommitmentBigInt.toString(16).padStart(64, "0");
120
- }
121
-
122
- export function createRegisterStub(
123
- identity: IdentityCredential
124
- ): sinon.SinonStub {
125
- return sinon.stub().callsFake(() => ({
126
- wait: () =>
127
- Promise.resolve({
128
- events: [
129
- {
130
- event: "MembershipRegistered",
131
- args: {
132
- idCommitment: formatIdCommitment(identity.IDCommitmentBigInt),
133
- membershipRateLimit: ethers.BigNumber.from(DEFAULT_RATE_LIMIT),
134
- index: ethers.BigNumber.from(1)
135
- }
136
- }
137
- ]
138
- })
139
- }));
140
- }
141
-
142
- export function verifyRegistration(
143
- decryptedCredentials: any,
144
- identity: IdentityCredential,
145
- registerStub: sinon.SinonStub,
146
- insertMemberSpy: sinon.SinonStub
147
- ): void {
148
- if (!decryptedCredentials) {
149
- throw new Error("Decrypted credentials should not be undefined");
150
- }
151
-
152
- // Verify registration call
153
- expect(
154
- registerStub.calledWith(
155
- sinon.match.same(identity.IDCommitmentBigInt),
156
- sinon.match.same(DEFAULT_RATE_LIMIT),
157
- sinon.match.array,
158
- sinon.match.object
159
- )
160
- ).to.be.true;
161
-
162
- // Verify credential properties
163
- expect(decryptedCredentials).to.have.property("identity");
164
- expect(decryptedCredentials).to.have.property("membership");
165
- expect(decryptedCredentials.membership).to.include({
166
- address: LINEA_CONTRACT.address,
167
- treeIndex: 1
168
- });
169
-
170
- // Verify member insertion
171
- const expectedIdCommitment = ethers.utils.zeroPad(
172
- hexToBytes(formatIdCommitment(identity.IDCommitmentBigInt)),
173
- 32
174
- );
175
- expect(insertMemberSpy.callCount).to.equal(1);
176
- expect(insertMemberSpy.getCall(0).args[0]).to.deep.equal(
177
- expectedIdCommitment
178
- );
179
- }