@waku/rln 0.1.5-76f86de.0 → 0.1.5-ea6daae.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 (110) hide show
  1. package/README.md +0 -5
  2. package/bundle/_virtual/index2.js +1 -1
  3. package/bundle/_virtual/utils.js +2 -2
  4. package/bundle/_virtual/utils2.js +2 -2
  5. package/bundle/index.js +1 -1
  6. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/lib/checksum.js +3 -3
  7. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/lib/cipher.js +4 -4
  8. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/lib/class.js +7 -7
  9. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/lib/functional.js +7 -7
  10. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/lib/index.js +6 -6
  11. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/lib/kdf.js +5 -5
  12. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/lib/password.js +1 -1
  13. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/lib/schema-validation-generated.js +1 -1
  14. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/lib/schema-validation.js +2 -2
  15. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/lib/types.js +1 -1
  16. package/bundle/{packages/rln → node_modules/@chainsafe/bls-keystore}/node_modules/@noble/hashes/_assert.js +1 -1
  17. package/bundle/{packages/rln → node_modules/@chainsafe/bls-keystore}/node_modules/@noble/hashes/_sha2.js +3 -3
  18. package/bundle/{packages/rln → node_modules/@chainsafe/bls-keystore}/node_modules/@noble/hashes/_u64.js +1 -1
  19. package/bundle/{packages/rln → node_modules/@chainsafe/bls-keystore}/node_modules/@noble/hashes/cryptoBrowser.js +1 -1
  20. package/bundle/{packages/rln → node_modules/@chainsafe/bls-keystore}/node_modules/@noble/hashes/hmac.js +3 -3
  21. package/bundle/{packages/rln → node_modules/@chainsafe/bls-keystore}/node_modules/@noble/hashes/pbkdf2.js +4 -4
  22. package/bundle/{packages/rln → node_modules/@chainsafe/bls-keystore}/node_modules/@noble/hashes/scrypt.js +5 -5
  23. package/bundle/{packages/rln → node_modules/@chainsafe/bls-keystore}/node_modules/@noble/hashes/sha256.js +3 -3
  24. package/bundle/{packages/rln → node_modules/@chainsafe/bls-keystore}/node_modules/@noble/hashes/sha512.js +4 -4
  25. package/bundle/{packages/rln → node_modules/@chainsafe/bls-keystore}/node_modules/@noble/hashes/utils.js +2 -2
  26. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/aes.js +3 -3
  27. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/pbkdf2.js +7 -7
  28. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/random.js +3 -3
  29. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/scrypt.js +3 -3
  30. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/sha256.js +3 -3
  31. package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/utils.js +7 -7
  32. package/bundle/node_modules/@ethersproject/abi/lib.esm/_version.js +1 -1
  33. package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/_version.js +1 -1
  34. package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/_version.js +1 -1
  35. package/bundle/node_modules/@ethersproject/address/lib.esm/_version.js +1 -1
  36. package/bundle/node_modules/@ethersproject/bignumber/lib.esm/_version.js +1 -1
  37. package/bundle/node_modules/@ethersproject/contracts/lib.esm/_version.js +1 -1
  38. package/bundle/node_modules/@ethersproject/contracts/lib.esm/index.js +1 -1
  39. package/bundle/node_modules/@ethersproject/hash/lib.esm/_version.js +1 -1
  40. package/bundle/node_modules/@ethersproject/keccak256/lib.esm/index.js +1 -1
  41. package/bundle/node_modules/@ethersproject/networks/lib.esm/_version.js +1 -1
  42. package/bundle/node_modules/@ethersproject/networks/lib.esm/index.js +19 -1
  43. package/bundle/node_modules/@ethersproject/properties/lib.esm/_version.js +1 -1
  44. package/bundle/node_modules/@ethersproject/providers/lib.esm/_version.js +1 -1
  45. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/_version.js +1 -1
  46. package/bundle/node_modules/@ethersproject/signing-key/lib.esm/elliptic.js +58 -10
  47. package/bundle/node_modules/@ethersproject/strings/lib.esm/_version.js +1 -1
  48. package/bundle/node_modules/@ethersproject/transactions/lib.esm/_version.js +1 -1
  49. package/bundle/node_modules/@ethersproject/web/lib.esm/_version.js +1 -1
  50. package/bundle/node_modules/{@ethersproject/keccak256/node_modules/js-sha3 → js-sha3}/src/sha3.js +2 -2
  51. package/bundle/packages/rln/dist/contract/abi.js +248 -502
  52. package/bundle/packages/rln/dist/contract/constants.js +4 -4
  53. package/bundle/packages/rln/dist/contract/rln_contract.js +36 -120
  54. package/bundle/packages/rln/dist/keystore/cipher.js +3 -3
  55. package/bundle/packages/rln/dist/keystore/keystore.js +2 -3
  56. package/bundle/packages/rln/dist/rln.js +4 -4
  57. package/dist/.tsbuildinfo +1 -1
  58. package/dist/contract/abi.d.ts +17 -21
  59. package/dist/contract/abi.js +248 -502
  60. package/dist/contract/abi.js.map +1 -1
  61. package/dist/contract/constants.d.ts +18 -22
  62. package/dist/contract/constants.js +3 -3
  63. package/dist/contract/constants.js.map +1 -1
  64. package/dist/contract/rln_contract.d.ts +3 -10
  65. package/dist/contract/rln_contract.js +36 -120
  66. package/dist/contract/rln_contract.js.map +1 -1
  67. package/dist/index.d.ts +2 -3
  68. package/dist/index.js +2 -2
  69. package/dist/index.js.map +1 -1
  70. package/dist/keystore/keystore.js +1 -2
  71. package/dist/keystore/keystore.js.map +1 -1
  72. package/dist/keystore/types.d.ts +0 -1
  73. package/dist/rln.d.ts +1 -1
  74. package/dist/rln.js +4 -4
  75. package/dist/rln.js.map +1 -1
  76. package/package.json +1 -1
  77. package/src/contract/abi.ts +248 -502
  78. package/src/contract/constants.ts +3 -3
  79. package/src/contract/rln_contract.ts +46 -158
  80. package/src/index.ts +2 -13
  81. package/src/keystore/keystore.ts +1 -2
  82. package/src/keystore/types.ts +0 -1
  83. package/src/rln.ts +5 -5
  84. package/dist/codec.test-utils.d.ts +0 -36
  85. package/dist/codec.test-utils.js +0 -56
  86. package/dist/codec.test-utils.js.map +0 -1
  87. package/dist/contract/test-setup.d.ts +0 -26
  88. package/dist/contract/test-setup.js +0 -56
  89. package/dist/contract/test-setup.js.map +0 -1
  90. package/dist/contract/test-utils.d.ts +0 -39
  91. package/dist/contract/test-utils.js +0 -118
  92. package/dist/contract/test-utils.js.map +0 -1
  93. package/src/codec.test-utils.ts +0 -80
  94. package/src/contract/test-setup.ts +0 -86
  95. package/src/contract/test-utils.ts +0 -179
  96. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/index.js +0 -0
  97. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/md5.js +0 -0
  98. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/nil.js +0 -0
  99. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/parse.js +0 -0
  100. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/regex.js +0 -0
  101. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/rng.js +0 -0
  102. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/sha1.js +0 -0
  103. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/stringify.js +0 -0
  104. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/v1.js +0 -0
  105. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/v3.js +0 -0
  106. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/v35.js +0 -0
  107. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/v4.js +0 -0
  108. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/v5.js +0 -0
  109. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/validate.js +0 -0
  110. /package/bundle/{packages/rln/node_modules → node_modules}/@chainsafe/bls-keystore/node_modules/uuid/dist/esm-browser/version.js +0 -0
@@ -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
- rateLimit: 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,80 +0,0 @@
1
- import type { IProtoMessage } from "@waku/interfaces";
2
- import { expect } from "chai";
3
-
4
- import { createRLN } from "./create.js";
5
- import type { IdentityCredential } from "./identity.js";
6
-
7
- export interface TestRLNCodecSetup {
8
- rlnInstance: any;
9
- credential: IdentityCredential;
10
- index: number;
11
- payload: Uint8Array;
12
- }
13
-
14
- export const TEST_CONSTANTS = {
15
- contentTopic: "/test/1/waku-message/utf8",
16
- emptyPubsubTopic: "",
17
- defaultIndex: 0,
18
- defaultPayload: new Uint8Array([1, 2, 3, 4, 5])
19
- } as const;
20
-
21
- export const EMPTY_PROTO_MESSAGE = {
22
- timestamp: undefined,
23
- contentTopic: "",
24
- ephemeral: undefined,
25
- meta: undefined,
26
- rateLimitProof: undefined,
27
- version: undefined
28
- } as const;
29
-
30
- /**
31
- * Creates a basic RLN setup for codec tests
32
- */
33
- export async function createTestRLNCodecSetup(): Promise<TestRLNCodecSetup> {
34
- const rlnInstance = await createRLN();
35
- const credential = rlnInstance.zerokit.generateIdentityCredentials();
36
- rlnInstance.zerokit.insertMember(credential.IDCommitment);
37
-
38
- return {
39
- rlnInstance,
40
- credential,
41
- index: TEST_CONSTANTS.defaultIndex,
42
- payload: TEST_CONSTANTS.defaultPayload
43
- };
44
- }
45
-
46
- /**
47
- * Creates a meta setter function for testing
48
- */
49
- export function createTestMetaSetter(): (
50
- msg: IProtoMessage & { meta: undefined }
51
- ) => Uint8Array {
52
- return (msg: IProtoMessage & { meta: undefined }): Uint8Array => {
53
- const buffer = new ArrayBuffer(4);
54
- const view = new DataView(buffer);
55
- view.setUint32(0, msg.payload.length, false);
56
- return new Uint8Array(buffer);
57
- };
58
- }
59
-
60
- /**
61
- * Verifies common RLN message properties
62
- */
63
- export function verifyRLNMessage(
64
- msg: any,
65
- payload: Uint8Array,
66
- contentTopic: string,
67
- version: number,
68
- rlnInstance: any
69
- ): void {
70
- expect(msg.rateLimitProof).to.not.be.undefined;
71
- expect(msg.verify([rlnInstance.zerokit.getMerkleRoot()])).to.be.true;
72
- expect(msg.verifyNoRoot()).to.be.true;
73
- expect(msg.epoch).to.not.be.undefined;
74
- expect(msg.epoch).to.be.gt(0);
75
-
76
- expect(msg.contentTopic).to.eq(contentTopic);
77
- expect(msg.msg.version).to.eq(version);
78
- expect(msg.payload).to.deep.eq(payload);
79
- expect(msg.timestamp).to.not.be.undefined;
80
- }
@@ -1,86 +0,0 @@
1
- import { hexToBytes } from "@waku/utils/bytes";
2
- import { ethers } from "ethers";
3
- import sinon from "sinon";
4
-
5
- import { createRLN } from "../create.js";
6
- import type { IdentityCredential } from "../identity.js";
7
-
8
- import { DEFAULT_RATE_LIMIT, LINEA_CONTRACT } from "./constants.js";
9
- import { RLNContract } from "./rln_contract.js";
10
-
11
- export interface TestRLNInstance {
12
- rlnInstance: any;
13
- identity: IdentityCredential;
14
- insertMemberSpy: sinon.SinonStub;
15
- }
16
-
17
- /**
18
- * Creates a test RLN instance with basic setup
19
- */
20
- export async function createTestRLNInstance(): Promise<TestRLNInstance> {
21
- const rlnInstance = await createRLN();
22
- const insertMemberSpy = sinon.stub();
23
- rlnInstance.zerokit.insertMember = insertMemberSpy;
24
-
25
- const mockSignature =
26
- "0xdeb8a6b00a8e404deb1f52d3aa72ed7f60a2ff4484c737eedaef18a0aacb2dfb4d5d74ac39bb71fa358cf2eb390565a35b026cc6272f2010d4351e17670311c21c";
27
- const identity =
28
- rlnInstance.zerokit.generateSeededIdentityCredential(mockSignature);
29
-
30
- return {
31
- rlnInstance,
32
- identity,
33
- insertMemberSpy
34
- };
35
- }
36
-
37
- /**
38
- * Initializes an RLN contract with the given registry contract
39
- */
40
- export async function initializeRLNContract(
41
- rlnInstance: any,
42
- mockedRegistryContract: ethers.Contract
43
- ): Promise<RLNContract> {
44
- const provider = new ethers.providers.JsonRpcProvider();
45
- const voidSigner = new ethers.VoidSigner(LINEA_CONTRACT.address, provider);
46
-
47
- const originalRegister = mockedRegistryContract.register;
48
- (mockedRegistryContract as any).register = function (...args: any[]) {
49
- const result = originalRegister.apply(this, args);
50
-
51
- if (args[0] && rlnInstance.zerokit) {
52
- const idCommitmentBigInt = args[0];
53
- const idCommitmentHex =
54
- "0x" + idCommitmentBigInt.toString(16).padStart(64, "0");
55
- const idCommitment = ethers.utils.zeroPad(
56
- hexToBytes(idCommitmentHex),
57
- 32
58
- );
59
- rlnInstance.zerokit.insertMember(idCommitment);
60
- }
61
-
62
- return result;
63
- };
64
-
65
- const contract = await RLNContract.init(rlnInstance, {
66
- address: LINEA_CONTRACT.address,
67
- signer: voidSigner,
68
- rateLimit: DEFAULT_RATE_LIMIT,
69
- contract: mockedRegistryContract
70
- });
71
-
72
- return contract;
73
- }
74
-
75
- /**
76
- * Common test message data
77
- */
78
- export const TEST_DATA = {
79
- contentTopic: "/test/1/waku-message/utf8",
80
- emptyPubsubTopic: "",
81
- testMessage: Uint8Array.from(
82
- "Hello World".split("").map((x) => x.charCodeAt(0))
83
- ),
84
- mockSignature:
85
- "0xdeb8a6b00a8e404deb1f52d3aa72ed7f60a2ff4484c737eedaef18a0aacb2dfb4d5d74ac39bb71fa358cf2eb390565a35b026cc6272f2010d4351e17670311c21c"
86
- } as const;
@@ -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
- rateLimit: 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
- }