@waku/rln 0.0.13 → 0.0.14-7e0966a

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.
package/dist/rln.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rln.js","sourceRoot":"","sources":["../src/rln.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rln.js","sourceRoot":"","sources":["../src/rln.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { ethers } from "ethers";
2
+ import { MembershipKey, RLNInstance } from "./rln.js";
3
+ declare type Member = {
4
+ pubkey: string;
5
+ index: number;
6
+ };
7
+ declare type ContractOptions = {
8
+ address: string;
9
+ provider: ethers.Signer | ethers.providers.Provider;
10
+ };
11
+ declare type FetchMembersOptions = {
12
+ fromBlock?: number;
13
+ fetchRange?: number;
14
+ fetchChunks?: number;
15
+ };
16
+ export declare class RLNContract {
17
+ private _contract;
18
+ private membersFilter;
19
+ private _members;
20
+ static init(rlnInstance: RLNInstance, options: ContractOptions): Promise<RLNContract>;
21
+ constructor({ address, provider }: ContractOptions);
22
+ get contract(): ethers.Contract;
23
+ get members(): Member[];
24
+ fetchMembers(rlnInstance: RLNInstance, options?: FetchMembersOptions): Promise<void>;
25
+ subscribeToMembers(rlnInstance: RLNInstance): void;
26
+ private addMemberFromEvent;
27
+ registerWithSignature(rlnInstance: RLNInstance, signature: string): Promise<ethers.Event | undefined>;
28
+ registerWithKey(membershipKey: MembershipKey): Promise<ethers.Event | undefined>;
29
+ }
30
+ export {};
@@ -0,0 +1,106 @@
1
+ import { ethers } from "ethers";
2
+ import { RLN_ABI } from "./constants.js";
3
+ export class RLNContract {
4
+ constructor({ address, provider }) {
5
+ this._members = [];
6
+ this._contract = new ethers.Contract(address, RLN_ABI, provider);
7
+ this.membersFilter = this.contract.filters.MemberRegistered();
8
+ }
9
+ static async init(rlnInstance, options) {
10
+ const rlnContract = new RLNContract(options);
11
+ await rlnContract.fetchMembers(rlnInstance);
12
+ rlnContract.subscribeToMembers(rlnInstance);
13
+ return rlnContract;
14
+ }
15
+ get contract() {
16
+ return this._contract;
17
+ }
18
+ get members() {
19
+ return this._members;
20
+ }
21
+ async fetchMembers(rlnInstance, options = {}) {
22
+ const registeredMemberEvents = await queryFilter(this.contract, {
23
+ ...options,
24
+ membersFilter: this.membersFilter,
25
+ });
26
+ for (const event of registeredMemberEvents) {
27
+ this.addMemberFromEvent(rlnInstance, event);
28
+ }
29
+ }
30
+ subscribeToMembers(rlnInstance) {
31
+ this.contract.on(this.membersFilter, (_pubkey, _index, event) => this.addMemberFromEvent(rlnInstance, event));
32
+ }
33
+ addMemberFromEvent(rlnInstance, event) {
34
+ if (!event.args) {
35
+ return;
36
+ }
37
+ const pubkey = event.args.pubkey;
38
+ const index = event.args.index;
39
+ this.members.push({ index, pubkey });
40
+ const idCommitment = ethers.utils.zeroPad(ethers.utils.arrayify(pubkey), 32);
41
+ rlnInstance.insertMember(idCommitment);
42
+ }
43
+ async registerWithSignature(rlnInstance, signature) {
44
+ const membershipKey = await rlnInstance.generateSeededMembershipKey(signature);
45
+ return this.registerWithKey(membershipKey);
46
+ }
47
+ async registerWithKey(membershipKey) {
48
+ const depositValue = await this.contract.MEMBERSHIP_DEPOSIT();
49
+ const txRegisterResponse = await this.contract.register(membershipKey.IDCommitmentBigInt, {
50
+ value: depositValue,
51
+ });
52
+ const txRegisterReceipt = await txRegisterResponse.wait();
53
+ return txRegisterReceipt?.events?.[0];
54
+ }
55
+ }
56
+ // these value should be tested on other networks
57
+ const FETCH_CHUNK = 5;
58
+ const BLOCK_RANGE = 3000;
59
+ async function queryFilter(contract, options) {
60
+ const { fromBlock, membersFilter, fetchRange = BLOCK_RANGE, fetchChunks = FETCH_CHUNK, } = options;
61
+ if (!fromBlock) {
62
+ return contract.queryFilter(membersFilter);
63
+ }
64
+ if (!contract.signer.provider) {
65
+ throw Error("No provider found on the contract's signer.");
66
+ }
67
+ const toBlock = await contract.signer.provider.getBlockNumber();
68
+ if (toBlock - fromBlock < fetchRange) {
69
+ return contract.queryFilter(membersFilter);
70
+ }
71
+ const events = [];
72
+ const chunks = splitToChunks(fromBlock, toBlock, fetchRange);
73
+ for (const portion of takeN(chunks, fetchChunks)) {
74
+ const promises = portion.map(([left, right]) => ignoreErrors(contract.queryFilter(membersFilter, left, right), []));
75
+ const fetchedEvents = await Promise.all(promises);
76
+ events.push(fetchedEvents.flatMap((v) => v));
77
+ }
78
+ return events.flatMap((v) => v);
79
+ }
80
+ function splitToChunks(from, to, step) {
81
+ const chunks = [];
82
+ let left = from;
83
+ while (left < to) {
84
+ const right = left + step < to ? left + step : to;
85
+ chunks.push([left, right]);
86
+ left = right;
87
+ }
88
+ return chunks;
89
+ }
90
+ function* takeN(array, size) {
91
+ let start = 0;
92
+ let skip = size;
93
+ while (skip < array.length) {
94
+ const portion = array.slice(start, skip);
95
+ yield portion;
96
+ start = skip;
97
+ skip += size;
98
+ }
99
+ }
100
+ function ignoreErrors(promise, defaultValue) {
101
+ return promise.catch((err) => {
102
+ console.error(`Ignoring an error during query: ${err?.message}`);
103
+ return defaultValue;
104
+ });
105
+ }
106
+ //# sourceMappingURL=rln_contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rln_contract.js","sourceRoot":"","sources":["../src/rln_contract.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@waku/rln",
3
- "version": "0.0.13",
3
+ "version": "0.0.14-7e0966a",
4
4
  "description": "Rate Limit Nullifier for js-waku",
5
5
  "types": "./dist/index.d.ts",
6
6
  "module": "./dist/index.js",
@@ -59,6 +59,7 @@
59
59
  "@size-limit/preset-big-lib": "^8.0.0",
60
60
  "@types/app-root-path": "^1.2.4",
61
61
  "@types/chai": "^4.2.15",
62
+ "@types/chai-spies": "^1.0.3",
62
63
  "@types/debug": "^4.1.7",
63
64
  "@types/mocha": "^9.1.0",
64
65
  "@types/node": "^17.0.6",
@@ -69,6 +70,7 @@
69
70
  "@web/rollup-plugin-import-meta-assets": "^1.0.7",
70
71
  "app-root-path": "^3.0.0",
71
72
  "chai": "^4.3.4",
73
+ "chai-spies": "^1.0.0",
72
74
  "cspell": "^5.14.0",
73
75
  "eslint": "^8.6.0",
74
76
  "eslint-config-prettier": "^8.3.0",
@@ -81,7 +83,9 @@
81
83
  "husky": "^7.0.4",
82
84
  "ignore-loader": "^0.1.2",
83
85
  "isomorphic-fetch": "^3.0.0",
84
- "js-waku": "^0.29.0-29436ea",
86
+ "@waku/interfaces": "^0.0.11",
87
+ "@waku/message-encryption": "^0.0.14",
88
+ "@waku/core": "^0.0.16",
85
89
  "jsdom": "^19.0.0",
86
90
  "jsdom-global": "^3.0.2",
87
91
  "karma": "^6.3.12",
@@ -125,6 +129,8 @@
125
129
  ]
126
130
  },
127
131
  "dependencies": {
128
- "@waku/zerokit-rln-wasm": "^0.0.5"
132
+ "@waku/utils": "^0.0.4",
133
+ "@waku/zerokit-rln-wasm": "^0.0.5",
134
+ "ethers": "^5.7.2"
129
135
  }
130
136
  }
package/src/codec.ts CHANGED
@@ -1,55 +1,49 @@
1
+ import type {
2
+ IDecodedMessage,
3
+ IDecoder,
4
+ IEncoder,
5
+ IMessage,
6
+ IProtoMessage,
7
+ IRateLimitProof,
8
+ } from "@waku/interfaces";
1
9
  import debug from "debug";
2
- import {
3
- Decoder,
4
- Encoder,
5
- Message,
6
- ProtoMessage,
7
- RateLimitProof,
8
- } from "js-waku/lib/interfaces";
9
10
 
10
11
  import { RlnMessage, toRLNSignal } from "./message.js";
11
12
  import { MembershipKey, RLNInstance } from "./rln.js";
12
13
 
13
14
  const log = debug("waku:rln:encoder");
14
15
 
15
- export class RLNEncoder implements Encoder {
16
- public contentTopic: string;
16
+ export class RLNEncoder implements IEncoder {
17
17
  private readonly idKey: Uint8Array;
18
18
 
19
19
  constructor(
20
- private encoder: Encoder,
20
+ private encoder: IEncoder,
21
21
  private rlnInstance: RLNInstance,
22
22
  private index: number,
23
23
  membershipKey: MembershipKey
24
24
  ) {
25
25
  if (index < 0) throw "invalid membership index";
26
26
  this.idKey = membershipKey.IDKey;
27
- this.contentTopic = encoder.contentTopic;
28
27
  }
29
28
 
30
- async toWire(message: Partial<Message>): Promise<Uint8Array | undefined> {
31
- message.contentTopic = this.contentTopic;
29
+ async toWire(message: IMessage): Promise<Uint8Array | undefined> {
32
30
  message.rateLimitProof = await this.generateProof(message);
33
31
  log("Proof generated", message.rateLimitProof);
34
32
  return this.encoder.toWire(message);
35
33
  }
36
34
 
37
- async toProtoObj(
38
- message: Partial<Message>
39
- ): Promise<ProtoMessage | undefined> {
40
- message.contentTopic = this.contentTopic;
35
+ async toProtoObj(message: IMessage): Promise<IProtoMessage | undefined> {
41
36
  const protoMessage = await this.encoder.toProtoObj(message);
42
37
  if (!protoMessage) return;
43
38
 
39
+ protoMessage.contentTopic = this.contentTopic;
44
40
  protoMessage.rateLimitProof = await this.generateProof(message);
45
41
  log("Proof generated", protoMessage.rateLimitProof);
46
42
  return protoMessage;
47
43
  }
48
44
 
49
- private async generateProof(
50
- message: Partial<Message>
51
- ): Promise<RateLimitProof> {
52
- const signal = toRLNSignal(message);
45
+ private async generateProof(message: IMessage): Promise<IRateLimitProof> {
46
+ const signal = toRLNSignal(this.contentTopic, message);
53
47
 
54
48
  console.time("proof_gen_timer");
55
49
  const proof = await this.rlnInstance.generateRLNProof(
@@ -61,24 +55,67 @@ export class RLNEncoder implements Encoder {
61
55
  console.timeEnd("proof_gen_timer");
62
56
  return proof;
63
57
  }
58
+
59
+ get contentTopic(): string {
60
+ return this.encoder.contentTopic;
61
+ }
62
+
63
+ get ephemeral(): boolean {
64
+ return this.encoder.ephemeral;
65
+ }
64
66
  }
65
67
 
66
- export class RLNDecoder<T extends Message> implements Decoder<RlnMessage<T>> {
67
- constructor(private rlnInstance: RLNInstance, private decoder: Decoder<T>) {}
68
+ type RLNEncoderOptions = {
69
+ encoder: IEncoder;
70
+ rlnInstance: RLNInstance;
71
+ index: number;
72
+ membershipKey: MembershipKey;
73
+ };
74
+
75
+ export const createRLNEncoder = (options: RLNEncoderOptions): RLNEncoder => {
76
+ return new RLNEncoder(
77
+ options.encoder,
78
+ options.rlnInstance,
79
+ options.index,
80
+ options.membershipKey
81
+ );
82
+ };
83
+
84
+ export class RLNDecoder<T extends IDecodedMessage>
85
+ implements IDecoder<RlnMessage<T>>
86
+ {
87
+ constructor(private rlnInstance: RLNInstance, private decoder: IDecoder<T>) {}
68
88
 
69
89
  get contentTopic(): string {
70
90
  return this.decoder.contentTopic;
71
91
  }
72
92
 
73
- fromWireToProtoObj(bytes: Uint8Array): Promise<ProtoMessage | undefined> {
93
+ fromWireToProtoObj(bytes: Uint8Array): Promise<IProtoMessage | undefined> {
74
94
  const protoMessage = this.decoder.fromWireToProtoObj(bytes);
75
95
  log("Message decoded", protoMessage);
76
96
  return Promise.resolve(protoMessage);
77
97
  }
78
98
 
79
- async fromProtoObj(proto: ProtoMessage): Promise<RlnMessage<T> | undefined> {
80
- const msg: T | undefined = await this.decoder.fromProtoObj(proto);
99
+ async fromProtoObj(
100
+ pubSubTopic: string,
101
+ proto: IProtoMessage
102
+ ): Promise<RlnMessage<T> | undefined> {
103
+ const msg: T | undefined = await this.decoder.fromProtoObj(
104
+ pubSubTopic,
105
+ proto
106
+ );
81
107
  if (!msg) return;
82
108
  return new RlnMessage(this.rlnInstance, msg, proto.rateLimitProof);
83
109
  }
84
110
  }
111
+
112
+ type RLNDecoderOptions<T extends IDecodedMessage> = {
113
+ decoder: IDecoder<T>;
114
+ rlnInstance: RLNInstance;
115
+ };
116
+
117
+ export const createRLNDecoder = <T extends IDecodedMessage>(
118
+ options: RLNDecoderOptions<T>
119
+ ): RLNDecoder<T> => {
120
+ return new RLNDecoder(options.rlnInstance, options.decoder);
121
+ };
@@ -0,0 +1,14 @@
1
+ export const RLN_ABI = [
2
+ "function MEMBERSHIP_DEPOSIT() public view returns(uint256)",
3
+ "function register(uint256 pubkey) external payable",
4
+ "function withdraw(uint256 secret, uint256 _pubkeyIndex, address payable receiver) external",
5
+ "event MemberRegistered(uint256 pubkey, uint256 index)",
6
+ "event MemberWithdrawn(uint256 pubkey, uint256 index)",
7
+ ];
8
+
9
+ export const GOERLI_CONTRACT = {
10
+ chainId: 5,
11
+ startBlock: 7109391,
12
+ address: "0x4252105670fe33d2947e8ead304969849e64f2a6",
13
+ abi: RLN_ABI,
14
+ };
package/src/index.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { RLNDecoder, RLNEncoder } from "./codec.js";
2
- import type { Proof, RLNInstance } from "./rln.js";
2
+ import { GOERLI_CONTRACT, RLN_ABI } from "./constants.js";
3
+ import { Proof, RLNInstance } from "./rln.js";
3
4
  import { MembershipKey } from "./rln.js";
5
+ import { RLNContract } from "./rln_contract.js";
4
6
 
5
7
  // reexport the create function, dynamically imported from rln.ts
6
8
  export async function create(): Promise<RLNInstance> {
@@ -11,4 +13,13 @@ export async function create(): Promise<RLNInstance> {
11
13
  return await rlnModule.create();
12
14
  }
13
15
 
14
- export { RLNInstance, MembershipKey, Proof, RLNEncoder, RLNDecoder };
16
+ export {
17
+ RLNInstance,
18
+ MembershipKey,
19
+ Proof,
20
+ RLNEncoder,
21
+ RLNDecoder,
22
+ RLNContract,
23
+ RLN_ABI,
24
+ GOERLI_CONTRACT,
25
+ };
package/src/message.ts CHANGED
@@ -1,24 +1,33 @@
1
- import { utils } from "js-waku";
2
- import { Message, RateLimitProof } from "js-waku/lib/interfaces";
1
+ import type {
2
+ IDecodedMessage,
3
+ IMessage,
4
+ IRateLimitProof,
5
+ } from "@waku/interfaces";
6
+ import * as utils from "@waku/utils/bytes";
3
7
 
4
8
  import { epochBytesToInt } from "./epoch.js";
5
9
  import { RLNInstance } from "./rln.js";
6
10
 
7
- export function toRLNSignal(msg: Partial<Message>): Uint8Array {
8
- const contentTopicBytes = utils.utf8ToBytes(msg.contentTopic ?? "");
11
+ export function toRLNSignal(contentTopic: string, msg: IMessage): Uint8Array {
12
+ const contentTopicBytes = utils.utf8ToBytes(contentTopic ?? "");
9
13
  return new Uint8Array([...(msg.payload ?? []), ...contentTopicBytes]);
10
14
  }
11
15
 
12
- export class RlnMessage<T extends Message> implements Message {
16
+ export class RlnMessage<T extends IDecodedMessage> implements IDecodedMessage {
17
+ public pubSubTopic = "";
18
+
13
19
  constructor(
14
20
  public rlnInstance: RLNInstance,
15
21
  public msg: T,
16
- public rateLimitProof: RateLimitProof | undefined
22
+ public rateLimitProof: IRateLimitProof | undefined
17
23
  ) {}
18
24
 
19
25
  public verify(): boolean | undefined {
20
26
  return this.rateLimitProof
21
- ? this.rlnInstance.verifyWithRoots(this.rateLimitProof, toRLNSignal(this)) // this.rlnInstance.verifyRLNProof once issue status-im/nwaku#1248 is fixed
27
+ ? this.rlnInstance.verifyWithRoots(
28
+ this.rateLimitProof,
29
+ toRLNSignal(this.msg.contentTopic, this.msg)
30
+ ) // this.rlnInstance.verifyRLNProof once issue status-im/nwaku#1248 is fixed
22
31
  : undefined;
23
32
  }
24
33
 
@@ -26,16 +35,16 @@ export class RlnMessage<T extends Message> implements Message {
26
35
  return this.rateLimitProof
27
36
  ? this.rlnInstance.verifyWithNoRoot(
28
37
  this.rateLimitProof,
29
- toRLNSignal(this)
38
+ toRLNSignal(this.msg.contentTopic, this.msg)
30
39
  ) // this.rlnInstance.verifyRLNProof once issue status-im/nwaku#1248 is fixed
31
40
  : undefined;
32
41
  }
33
42
 
34
- get payload(): Uint8Array | undefined {
43
+ get payload(): Uint8Array {
35
44
  return this.msg.payload;
36
45
  }
37
46
 
38
- get contentTopic(): string | undefined {
47
+ get contentTopic(): string {
39
48
  return this.msg.contentTopic;
40
49
  }
41
50
 
@@ -43,6 +52,10 @@ export class RlnMessage<T extends Message> implements Message {
43
52
  return this.msg.timestamp;
44
53
  }
45
54
 
55
+ get ephemeral(): boolean | undefined {
56
+ return this.msg.ephemeral;
57
+ }
58
+
46
59
  get epoch(): number | undefined {
47
60
  const bytes = this.msg.rateLimitProof?.epoch;
48
61
  if (!bytes) return;
package/src/rln.ts CHANGED
@@ -1,5 +1,5 @@
1
+ import type { IRateLimitProof } from "@waku/interfaces";
1
2
  import init, * as zerokitRLN from "@waku/zerokit-rln-wasm";
2
- import { RateLimitProof } from "js-waku/lib/interfaces";
3
3
 
4
4
  import { writeUIntLE } from "./byte_utils.js";
5
5
  import { dateToEpoch, epochIntToBytes } from "./epoch.js";
@@ -26,6 +26,16 @@ function concatenate(...input: Uint8Array[]): Uint8Array {
26
26
  return result;
27
27
  }
28
28
 
29
+ /**
30
+ * Transforms Uint8Array into BigInt
31
+ * @param array: Uint8Array
32
+ * @returns BigInt
33
+ */
34
+ function buildBigIntFromUint8Array(array: Uint8Array): bigint {
35
+ const dataView = new DataView(array.buffer);
36
+ return dataView.getBigUint64(0, true);
37
+ }
38
+
29
39
  const stringEncoder = new TextEncoder();
30
40
 
31
41
  const DEPTH = 20;
@@ -59,13 +69,15 @@ export async function create(): Promise<RLNInstance> {
59
69
  export class MembershipKey {
60
70
  constructor(
61
71
  public readonly IDKey: Uint8Array,
62
- public readonly IDCommitment: Uint8Array
72
+ public readonly IDCommitment: Uint8Array,
73
+ public readonly IDCommitmentBigInt: bigint
63
74
  ) {}
64
75
 
65
76
  static fromBytes(memKeys: Uint8Array): MembershipKey {
66
77
  const idKey = memKeys.subarray(0, 32);
67
78
  const idCommitment = memKeys.subarray(32);
68
- return new MembershipKey(idKey, idCommitment);
79
+ const idCommitmentBigInt = buildBigIntFromUint8Array(idCommitment);
80
+ return new MembershipKey(idKey, idCommitment, idCommitmentBigInt);
69
81
  }
70
82
  }
71
83
 
@@ -77,7 +89,7 @@ const shareYOffset = shareXOffset + 32;
77
89
  const nullifierOffset = shareYOffset + 32;
78
90
  const rlnIdentifierOffset = nullifierOffset + 32;
79
91
 
80
- export class Proof implements RateLimitProof {
92
+ export class Proof implements IRateLimitProof {
81
93
  readonly proof: Uint8Array;
82
94
  readonly merkleRoot: Uint8Array;
83
95
  readonly epoch: Uint8Array;
@@ -102,7 +114,7 @@ export class Proof implements RateLimitProof {
102
114
  }
103
115
  }
104
116
 
105
- export function proofToBytes(p: RateLimitProof): Uint8Array {
117
+ export function proofToBytes(p: IRateLimitProof): Uint8Array {
106
118
  return concatenate(
107
119
  p.proof,
108
120
  p.merkleRoot,
@@ -163,7 +175,7 @@ export class RLNInstance {
163
175
  index: number,
164
176
  epoch: Uint8Array | Date | undefined,
165
177
  idKey: Uint8Array
166
- ): Promise<RateLimitProof> {
178
+ ): Promise<IRateLimitProof> {
167
179
  if (epoch == undefined) {
168
180
  epoch = epochIntToBytes(dateToEpoch(new Date()));
169
181
  } else if (epoch instanceof Date) {
@@ -194,7 +206,10 @@ export class RLNInstance {
194
206
  return new Proof(proofBytes);
195
207
  }
196
208
 
197
- verifyRLNProof(proof: RateLimitProof | Uint8Array, msg: Uint8Array): boolean {
209
+ verifyRLNProof(
210
+ proof: IRateLimitProof | Uint8Array,
211
+ msg: Uint8Array
212
+ ): boolean {
198
213
  let pBytes: Uint8Array;
199
214
  if (proof instanceof Uint8Array) {
200
215
  pBytes = proof;
@@ -212,7 +227,7 @@ export class RLNInstance {
212
227
  }
213
228
 
214
229
  verifyWithRoots(
215
- proof: RateLimitProof | Uint8Array,
230
+ proof: IRateLimitProof | Uint8Array,
216
231
  msg: Uint8Array
217
232
  ): boolean {
218
233
  let pBytes: Uint8Array;
@@ -236,7 +251,7 @@ export class RLNInstance {
236
251
  }
237
252
 
238
253
  verifyWithNoRoot(
239
- proof: RateLimitProof | Uint8Array,
254
+ proof: IRateLimitProof | Uint8Array,
240
255
  msg: Uint8Array
241
256
  ): boolean {
242
257
  let pBytes: Uint8Array;