@waku/rln 0.1.1-5b9414a → 0.1.1-7e8cb89
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/bundle/index.js +71 -39
- package/dist/.tsbuildinfo +1 -1
- package/dist/codec.d.ts +5 -3
- package/dist/codec.js +8 -2
- package/dist/codec.js.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/keystore/keystore.d.ts +4 -3
- package/dist/keystore/keystore.js +16 -5
- package/dist/keystore/keystore.js.map +1 -1
- package/dist/keystore/types.d.ts +5 -5
- package/dist/message.d.ts +1 -1
- package/dist/message.js +1 -1
- package/dist/rln.js +2 -2
- package/dist/rln.js.map +1 -1
- package/dist/rln_contract.d.ts +15 -11
- package/dist/rln_contract.js +44 -29
- package/dist/rln_contract.js.map +1 -1
- package/package.json +5 -5
- package/src/codec.ts +10 -2
- package/src/constants.ts +1 -1
- package/src/message.ts +1 -1
- package/src/rln.ts +2 -2
- package/src/rln_contract.ts +70 -35
package/dist/keystore/types.d.ts
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
export
|
2
|
-
export
|
3
|
-
export
|
4
|
-
export
|
5
|
-
export
|
1
|
+
export type MembershipHash = string;
|
2
|
+
export type Sha256Hash = string;
|
3
|
+
export type Keccak256Hash = string;
|
4
|
+
export type Password = string | Uint8Array;
|
5
|
+
export type MembershipInfo = {
|
6
6
|
chainId: number;
|
7
7
|
address: string;
|
8
8
|
treeIndex: number;
|
package/dist/message.d.ts
CHANGED
@@ -5,7 +5,7 @@ export declare class RlnMessage<T extends IDecodedMessage> implements IDecodedMe
|
|
5
5
|
rlnInstance: RLNInstance;
|
6
6
|
msg: T;
|
7
7
|
rateLimitProof: IRateLimitProof | undefined;
|
8
|
-
|
8
|
+
pubsubTopic: string;
|
9
9
|
constructor(rlnInstance: RLNInstance, msg: T, rateLimitProof: IRateLimitProof | undefined);
|
10
10
|
verify(roots: Uint8Array[]): boolean | undefined;
|
11
11
|
verifyNoRoot(): boolean | undefined;
|
package/dist/message.js
CHANGED
package/dist/rln.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import
|
1
|
+
import init from "@waku/zerokit-rln-wasm";
|
2
2
|
import * as zerokitRLN from "@waku/zerokit-rln-wasm";
|
3
3
|
import { buildBigIntFromUint8Array, writeUIntLE } from "./byte_utils.js";
|
4
4
|
import { dateToEpoch, epochIntToBytes } from "./epoch.js";
|
@@ -39,7 +39,7 @@ async function loadZkey() {
|
|
39
39
|
* @returns RLNInstance
|
40
40
|
*/
|
41
41
|
export async function create() {
|
42
|
-
await init();
|
42
|
+
await init?.();
|
43
43
|
zerokitRLN.init_panic_hook();
|
44
44
|
const witnessCalculator = await loadWitnessCalculator();
|
45
45
|
const zkey = await loadZkey();
|
package/dist/rln.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rln.js","sourceRoot":"","sources":["../src/rln.ts"],"names":[],"mappings":"AACA,OAAO,
|
1
|
+
{"version":3,"file":"rln.js","sourceRoot":"","sources":["../src/rln.ts"],"names":[],"mappings":"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"}
|
package/dist/rln_contract.d.ts
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
import { ethers } from "ethers";
|
2
2
|
import { IdentityCredential, RLNInstance } from "./rln.js";
|
3
|
-
|
4
|
-
|
5
|
-
index:
|
3
|
+
type Member = {
|
4
|
+
idCommitment: string;
|
5
|
+
index: ethers.BigNumber;
|
6
6
|
};
|
7
|
-
|
8
|
-
|
9
|
-
address: string;
|
7
|
+
type Provider = ethers.Signer | ethers.providers.Provider;
|
8
|
+
type RLNContractOptions = {
|
10
9
|
provider: Provider;
|
10
|
+
registryAddress: string;
|
11
11
|
};
|
12
|
-
|
12
|
+
type RLNStorageOptions = {
|
13
|
+
storageIndex?: number;
|
14
|
+
};
|
15
|
+
type RLNContractInitOptions = RLNContractOptions & RLNStorageOptions;
|
16
|
+
type FetchMembersOptions = {
|
13
17
|
fromBlock?: number;
|
14
18
|
fetchRange?: number;
|
15
19
|
fetchChunks?: number;
|
@@ -22,8 +26,8 @@ export declare class RLNContract {
|
|
22
26
|
private storageContract;
|
23
27
|
private _membersFilter;
|
24
28
|
private _members;
|
25
|
-
static init(rlnInstance: RLNInstance, options:
|
26
|
-
constructor(rlnInstance: RLNInstance, {
|
29
|
+
static init(rlnInstance: RLNInstance, options: RLNContractInitOptions): Promise<RLNContract>;
|
30
|
+
constructor(rlnInstance: RLNInstance, { registryAddress, provider }: RLNContractOptions);
|
27
31
|
private initStorageContract;
|
28
32
|
get contract(): ethers.Contract;
|
29
33
|
get members(): Member[];
|
@@ -33,8 +37,8 @@ export declare class RLNContract {
|
|
33
37
|
private insertMembers;
|
34
38
|
private removeMembers;
|
35
39
|
subscribeToMembers(rlnInstance: RLNInstance): void;
|
36
|
-
registerWithSignature(rlnInstance: RLNInstance, signature: string): Promise<
|
37
|
-
registerWithKey(credential: IdentityCredential): Promise<
|
40
|
+
registerWithSignature(rlnInstance: RLNInstance, signature: string): Promise<Member | undefined>;
|
41
|
+
registerWithKey(credential: IdentityCredential): Promise<Member | undefined>;
|
38
42
|
roots(): Uint8Array[];
|
39
43
|
}
|
40
44
|
export {};
|
package/dist/rln_contract.js
CHANGED
@@ -2,12 +2,6 @@ import { ethers } from "ethers";
|
|
2
2
|
import { RLN_REGISTRY_ABI, RLN_STORAGE_ABI } from "./constants.js";
|
3
3
|
import { MerkleRootTracker } from "./root_tracker.js";
|
4
4
|
export class RLNContract {
|
5
|
-
constructor(rlnInstance, { address, provider }) {
|
6
|
-
this._members = [];
|
7
|
-
const initialRoot = rlnInstance.getMerkleRoot();
|
8
|
-
this.registryContract = new ethers.Contract(address, RLN_REGISTRY_ABI, provider);
|
9
|
-
this.merkleRootTracker = new MerkleRootTracker(5, initialRoot);
|
10
|
-
}
|
11
5
|
static async init(rlnInstance, options) {
|
12
6
|
const rlnContract = new RLNContract(rlnInstance, options);
|
13
7
|
await rlnContract.initStorageContract(options.provider);
|
@@ -15,22 +9,34 @@ export class RLNContract {
|
|
15
9
|
rlnContract.subscribeToMembers(rlnInstance);
|
16
10
|
return rlnContract;
|
17
11
|
}
|
18
|
-
|
19
|
-
|
20
|
-
const
|
21
|
-
this.
|
22
|
-
this.
|
12
|
+
constructor(rlnInstance, { registryAddress, provider }) {
|
13
|
+
this._members = new Map();
|
14
|
+
const initialRoot = rlnInstance.getMerkleRoot();
|
15
|
+
this.registryContract = new ethers.Contract(registryAddress, RLN_REGISTRY_ABI, provider);
|
16
|
+
this.merkleRootTracker = new MerkleRootTracker(5, initialRoot);
|
17
|
+
}
|
18
|
+
async initStorageContract(provider, options = {}) {
|
19
|
+
const storageIndex = options?.storageIndex
|
20
|
+
? options.storageIndex
|
21
|
+
: await this.registryContract.usingStorageIndex();
|
22
|
+
const storageAddress = await this.registryContract.storages(storageIndex);
|
23
|
+
if (!storageAddress || storageAddress === ethers.constants.AddressZero) {
|
24
|
+
throw Error("No RLN Storage initialized on registry contract.");
|
25
|
+
}
|
26
|
+
this.storageIndex = storageIndex;
|
27
|
+
this.storageContract = new ethers.Contract(storageAddress, RLN_STORAGE_ABI, provider);
|
23
28
|
this._membersFilter = this.storageContract.filters.MemberRegistered();
|
24
29
|
this.deployBlock = await this.storageContract.deployedBlockNumber();
|
25
30
|
}
|
26
31
|
get contract() {
|
27
32
|
if (!this.storageContract) {
|
28
|
-
throw Error("Storage contract was not initialized
|
33
|
+
throw Error("Storage contract was not initialized");
|
29
34
|
}
|
30
35
|
return this.storageContract;
|
31
36
|
}
|
32
37
|
get members() {
|
33
|
-
|
38
|
+
const sortedMembers = Array.from(this._members.values()).sort((left, right) => left.index.toNumber() - right.index.toNumber());
|
39
|
+
return sortedMembers;
|
34
40
|
}
|
35
41
|
get membersFilter() {
|
36
42
|
if (!this._membersFilter) {
|
@@ -57,11 +63,11 @@ export class RLNContract {
|
|
57
63
|
const index = evt.args.index;
|
58
64
|
const toRemoveVal = toRemoveTable.get(evt.blockNumber);
|
59
65
|
if (toRemoveVal != undefined) {
|
60
|
-
toRemoveVal.push(index);
|
66
|
+
toRemoveVal.push(index.toNumber());
|
61
67
|
toRemoveTable.set(evt.blockNumber, toRemoveVal);
|
62
68
|
}
|
63
69
|
else {
|
64
|
-
toRemoveTable.set(evt.blockNumber, [index]);
|
70
|
+
toRemoveTable.set(evt.blockNumber, [index.toNumber()]);
|
65
71
|
}
|
66
72
|
}
|
67
73
|
else {
|
@@ -79,14 +85,17 @@ export class RLNContract {
|
|
79
85
|
insertMembers(rlnInstance, toInsert) {
|
80
86
|
toInsert.forEach((events, blockNumber) => {
|
81
87
|
events.forEach((evt) => {
|
82
|
-
|
88
|
+
const _idCommitment = evt?.args?.idCommitment;
|
89
|
+
const index = evt?.args?.index;
|
90
|
+
if (!_idCommitment || !index) {
|
83
91
|
return;
|
84
92
|
}
|
85
|
-
const
|
86
|
-
const index = evt.args.index;
|
87
|
-
const idCommitment = ethers.utils.zeroPad(ethers.utils.arrayify(pubkey), 32);
|
93
|
+
const idCommitment = ethers.utils.zeroPad(ethers.utils.arrayify(_idCommitment), 32);
|
88
94
|
rlnInstance.insertMember(idCommitment);
|
89
|
-
this.
|
95
|
+
this._members.set(index.toNumber(), {
|
96
|
+
index,
|
97
|
+
idCommitment: _idCommitment?._hex || ethers.utils.hexlify(idCommitment),
|
98
|
+
});
|
90
99
|
});
|
91
100
|
const currentRoot = rlnInstance.getMerkleRoot();
|
92
101
|
this.merkleRootTracker.pushRoot(blockNumber, currentRoot);
|
@@ -96,9 +105,8 @@ export class RLNContract {
|
|
96
105
|
const removeDescending = new Map([...toRemove].sort().reverse());
|
97
106
|
removeDescending.forEach((indexes, blockNumber) => {
|
98
107
|
indexes.forEach((index) => {
|
99
|
-
|
100
|
-
|
101
|
-
this.members.splice(idx, 1);
|
108
|
+
if (this._members.has(index)) {
|
109
|
+
this._members.delete(index);
|
102
110
|
}
|
103
111
|
rlnInstance.deleteMember(index);
|
104
112
|
});
|
@@ -106,21 +114,28 @@ export class RLNContract {
|
|
106
114
|
});
|
107
115
|
}
|
108
116
|
subscribeToMembers(rlnInstance) {
|
109
|
-
this.contract.on(this.membersFilter, (_pubkey, _index, event) => this.processEvents(rlnInstance, event));
|
117
|
+
this.contract.on(this.membersFilter, (_pubkey, _index, event) => this.processEvents(rlnInstance, [event]));
|
110
118
|
}
|
111
119
|
async registerWithSignature(rlnInstance, signature) {
|
112
120
|
const identityCredential = await rlnInstance.generateSeededIdentityCredential(signature);
|
113
121
|
return this.registerWithKey(identityCredential);
|
114
122
|
}
|
115
123
|
async registerWithKey(credential) {
|
116
|
-
if (
|
124
|
+
if (this.storageIndex === undefined) {
|
117
125
|
throw Error("Cannot register credential, no storage contract index found.");
|
118
126
|
}
|
119
|
-
const txRegisterResponse = await this.registryContract
|
120
|
-
gasLimit: 100000,
|
121
|
-
});
|
127
|
+
const txRegisterResponse = await this.registryContract["register(uint16,uint256)"](this.storageIndex, credential.IDCommitmentBigInt, { gasLimit: 100000 });
|
122
128
|
const txRegisterReceipt = await txRegisterResponse.wait();
|
123
|
-
|
129
|
+
// assumption: register(uint16,uint256) emits one event
|
130
|
+
const memberRegistered = txRegisterReceipt?.events?.[0];
|
131
|
+
if (!memberRegistered) {
|
132
|
+
return undefined;
|
133
|
+
}
|
134
|
+
const decodedData = this.contract.interface.decodeEventLog("MemberRegistered", memberRegistered.data);
|
135
|
+
return {
|
136
|
+
idCommitment: decodedData.idCommitment,
|
137
|
+
index: decodedData.index,
|
138
|
+
};
|
124
139
|
}
|
125
140
|
roots() {
|
126
141
|
return this.merkleRootTracker.roots();
|
package/dist/rln_contract.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rln_contract.js","sourceRoot":"","sources":["../src/rln_contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
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.1.1-
|
3
|
+
"version": "0.1.1-7e8cb89",
|
4
4
|
"description": "Rate Limit Nullifier for js-waku",
|
5
5
|
"types": "./dist/index.d.ts",
|
6
6
|
"module": "./dist/index.js",
|
@@ -72,9 +72,9 @@
|
|
72
72
|
"@types/uuid": "^8.3.0",
|
73
73
|
"@typescript-eslint/eslint-plugin": "^5.8.1",
|
74
74
|
"@typescript-eslint/parser": "^5.8.1",
|
75
|
-
"@waku/core": "^0.0.
|
76
|
-
"@waku/interfaces": "^0.0.
|
77
|
-
"@waku/message-encryption": "^0.0.
|
75
|
+
"@waku/core": "^0.0.24",
|
76
|
+
"@waku/interfaces": "^0.0.19",
|
77
|
+
"@waku/message-encryption": "^0.0.22",
|
78
78
|
"@web/rollup-plugin-import-meta-assets": "^1.0.7",
|
79
79
|
"ajv": "^8.12.0",
|
80
80
|
"ajv-formats": "^2.1.1",
|
@@ -140,7 +140,7 @@
|
|
140
140
|
},
|
141
141
|
"dependencies": {
|
142
142
|
"@chainsafe/bls-keystore": "^3.0.0",
|
143
|
-
"@waku/utils": "^0.0.
|
143
|
+
"@waku/utils": "^0.0.12",
|
144
144
|
"@waku/zerokit-rln-wasm": "^0.0.10",
|
145
145
|
"ethereum-cryptography": "^2.1.2",
|
146
146
|
"ethers": "^5.7.2",
|
package/src/codec.ts
CHANGED
@@ -56,6 +56,10 @@ export class RLNEncoder implements IEncoder {
|
|
56
56
|
return proof;
|
57
57
|
}
|
58
58
|
|
59
|
+
get pubsubTopic(): string {
|
60
|
+
return this.encoder.pubsubTopic;
|
61
|
+
}
|
62
|
+
|
59
63
|
get contentTopic(): string {
|
60
64
|
return this.encoder.contentTopic;
|
61
65
|
}
|
@@ -86,6 +90,10 @@ export class RLNDecoder<T extends IDecodedMessage>
|
|
86
90
|
{
|
87
91
|
constructor(private rlnInstance: RLNInstance, private decoder: IDecoder<T>) {}
|
88
92
|
|
93
|
+
get pubsubTopic(): string {
|
94
|
+
return this.decoder.pubsubTopic;
|
95
|
+
}
|
96
|
+
|
89
97
|
get contentTopic(): string {
|
90
98
|
return this.decoder.contentTopic;
|
91
99
|
}
|
@@ -97,11 +105,11 @@ export class RLNDecoder<T extends IDecodedMessage>
|
|
97
105
|
}
|
98
106
|
|
99
107
|
async fromProtoObj(
|
100
|
-
|
108
|
+
pubsubTopic: string,
|
101
109
|
proto: IProtoMessage
|
102
110
|
): Promise<RlnMessage<T> | undefined> {
|
103
111
|
const msg: T | undefined = await this.decoder.fromProtoObj(
|
104
|
-
|
112
|
+
pubsubTopic,
|
105
113
|
proto
|
106
114
|
);
|
107
115
|
if (!msg) return;
|
package/src/constants.ts
CHANGED
package/src/message.ts
CHANGED
@@ -14,7 +14,7 @@ export function toRLNSignal(contentTopic: string, msg: IMessage): Uint8Array {
|
|
14
14
|
}
|
15
15
|
|
16
16
|
export class RlnMessage<T extends IDecodedMessage> implements IDecodedMessage {
|
17
|
-
public
|
17
|
+
public pubsubTopic = "";
|
18
18
|
|
19
19
|
constructor(
|
20
20
|
public rlnInstance: RLNInstance,
|
package/src/rln.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import type { IRateLimitProof } from "@waku/interfaces";
|
2
|
-
import
|
2
|
+
import init from "@waku/zerokit-rln-wasm";
|
3
3
|
import * as zerokitRLN from "@waku/zerokit-rln-wasm";
|
4
4
|
|
5
5
|
import { buildBigIntFromUint8Array, writeUIntLE } from "./byte_utils.js";
|
@@ -48,7 +48,7 @@ async function loadZkey(): Promise<Uint8Array> {
|
|
48
48
|
* @returns RLNInstance
|
49
49
|
*/
|
50
50
|
export async function create(): Promise<RLNInstance> {
|
51
|
-
await init();
|
51
|
+
await (init as any)?.();
|
52
52
|
zerokitRLN.init_panic_hook();
|
53
53
|
const witnessCalculator = await loadWitnessCalculator();
|
54
54
|
const zkey = await loadZkey();
|
package/src/rln_contract.ts
CHANGED
@@ -5,17 +5,23 @@ import { IdentityCredential, RLNInstance } from "./rln.js";
|
|
5
5
|
import { MerkleRootTracker } from "./root_tracker.js";
|
6
6
|
|
7
7
|
type Member = {
|
8
|
-
|
9
|
-
index:
|
8
|
+
idCommitment: string;
|
9
|
+
index: ethers.BigNumber;
|
10
10
|
};
|
11
11
|
|
12
12
|
type Provider = ethers.Signer | ethers.providers.Provider;
|
13
13
|
|
14
|
-
type
|
15
|
-
address: string;
|
14
|
+
type RLNContractOptions = {
|
16
15
|
provider: Provider;
|
16
|
+
registryAddress: string;
|
17
17
|
};
|
18
18
|
|
19
|
+
type RLNStorageOptions = {
|
20
|
+
storageIndex?: number;
|
21
|
+
};
|
22
|
+
|
23
|
+
type RLNContractInitOptions = RLNContractOptions & RLNStorageOptions;
|
24
|
+
|
19
25
|
type FetchMembersOptions = {
|
20
26
|
fromBlock?: number;
|
21
27
|
fetchRange?: number;
|
@@ -31,11 +37,11 @@ export class RLNContract {
|
|
31
37
|
private storageContract: undefined | ethers.Contract;
|
32
38
|
private _membersFilter: undefined | ethers.EventFilter;
|
33
39
|
|
34
|
-
private _members: Member
|
40
|
+
private _members: Map<number, Member> = new Map();
|
35
41
|
|
36
42
|
public static async init(
|
37
43
|
rlnInstance: RLNInstance,
|
38
|
-
options:
|
44
|
+
options: RLNContractInitOptions
|
39
45
|
): Promise<RLNContract> {
|
40
46
|
const rlnContract = new RLNContract(rlnInstance, options);
|
41
47
|
|
@@ -48,25 +54,34 @@ export class RLNContract {
|
|
48
54
|
|
49
55
|
constructor(
|
50
56
|
rlnInstance: RLNInstance,
|
51
|
-
{
|
57
|
+
{ registryAddress, provider }: RLNContractOptions
|
52
58
|
) {
|
53
59
|
const initialRoot = rlnInstance.getMerkleRoot();
|
54
60
|
|
55
61
|
this.registryContract = new ethers.Contract(
|
56
|
-
|
62
|
+
registryAddress,
|
57
63
|
RLN_REGISTRY_ABI,
|
58
64
|
provider
|
59
65
|
);
|
60
66
|
this.merkleRootTracker = new MerkleRootTracker(5, initialRoot);
|
61
67
|
}
|
62
68
|
|
63
|
-
private async initStorageContract(
|
64
|
-
|
65
|
-
|
69
|
+
private async initStorageContract(
|
70
|
+
provider: Provider,
|
71
|
+
options: RLNStorageOptions = {}
|
72
|
+
): Promise<void> {
|
73
|
+
const storageIndex = options?.storageIndex
|
74
|
+
? options.storageIndex
|
75
|
+
: await this.registryContract.usingStorageIndex();
|
76
|
+
const storageAddress = await this.registryContract.storages(storageIndex);
|
66
77
|
|
67
|
-
|
78
|
+
if (!storageAddress || storageAddress === ethers.constants.AddressZero) {
|
79
|
+
throw Error("No RLN Storage initialized on registry contract.");
|
80
|
+
}
|
81
|
+
|
82
|
+
this.storageIndex = storageIndex;
|
68
83
|
this.storageContract = new ethers.Contract(
|
69
|
-
|
84
|
+
storageAddress,
|
70
85
|
RLN_STORAGE_ABI,
|
71
86
|
provider
|
72
87
|
);
|
@@ -77,13 +92,16 @@ export class RLNContract {
|
|
77
92
|
|
78
93
|
public get contract(): ethers.Contract {
|
79
94
|
if (!this.storageContract) {
|
80
|
-
throw Error("Storage contract was not initialized
|
95
|
+
throw Error("Storage contract was not initialized");
|
81
96
|
}
|
82
97
|
return this.storageContract as ethers.Contract;
|
83
98
|
}
|
84
99
|
|
85
100
|
public get members(): Member[] {
|
86
|
-
|
101
|
+
const sortedMembers = Array.from(this._members.values()).sort(
|
102
|
+
(left, right) => left.index.toNumber() - right.index.toNumber()
|
103
|
+
);
|
104
|
+
return sortedMembers;
|
87
105
|
}
|
88
106
|
|
89
107
|
private get membersFilter(): ethers.EventFilter {
|
@@ -115,13 +133,13 @@ export class RLNContract {
|
|
115
133
|
}
|
116
134
|
|
117
135
|
if (evt.removed) {
|
118
|
-
const index:
|
136
|
+
const index: ethers.BigNumber = evt.args.index;
|
119
137
|
const toRemoveVal = toRemoveTable.get(evt.blockNumber);
|
120
138
|
if (toRemoveVal != undefined) {
|
121
|
-
toRemoveVal.push(index);
|
139
|
+
toRemoveVal.push(index.toNumber());
|
122
140
|
toRemoveTable.set(evt.blockNumber, toRemoveVal);
|
123
141
|
} else {
|
124
|
-
toRemoveTable.set(evt.blockNumber, [index]);
|
142
|
+
toRemoveTable.set(evt.blockNumber, [index.toNumber()]);
|
125
143
|
}
|
126
144
|
} else {
|
127
145
|
let eventsPerBlock = toInsertTable.get(evt.blockNumber);
|
@@ -144,18 +162,23 @@ export class RLNContract {
|
|
144
162
|
): void {
|
145
163
|
toInsert.forEach((events: ethers.Event[], blockNumber: number) => {
|
146
164
|
events.forEach((evt) => {
|
147
|
-
|
165
|
+
const _idCommitment = evt?.args?.idCommitment;
|
166
|
+
const index: ethers.BigNumber = evt?.args?.index;
|
167
|
+
|
168
|
+
if (!_idCommitment || !index) {
|
148
169
|
return;
|
149
170
|
}
|
150
171
|
|
151
|
-
const pubkey = evt.args.pubkey;
|
152
|
-
const index = evt.args.index;
|
153
172
|
const idCommitment = ethers.utils.zeroPad(
|
154
|
-
ethers.utils.arrayify(
|
173
|
+
ethers.utils.arrayify(_idCommitment),
|
155
174
|
32
|
156
175
|
);
|
157
176
|
rlnInstance.insertMember(idCommitment);
|
158
|
-
this.
|
177
|
+
this._members.set(index.toNumber(), {
|
178
|
+
index,
|
179
|
+
idCommitment:
|
180
|
+
_idCommitment?._hex || ethers.utils.hexlify(idCommitment),
|
181
|
+
});
|
159
182
|
});
|
160
183
|
|
161
184
|
const currentRoot = rlnInstance.getMerkleRoot();
|
@@ -170,9 +193,8 @@ export class RLNContract {
|
|
170
193
|
const removeDescending = new Map([...toRemove].sort().reverse());
|
171
194
|
removeDescending.forEach((indexes: number[], blockNumber: number) => {
|
172
195
|
indexes.forEach((index) => {
|
173
|
-
|
174
|
-
|
175
|
-
this.members.splice(idx, 1);
|
196
|
+
if (this._members.has(index)) {
|
197
|
+
this._members.delete(index);
|
176
198
|
}
|
177
199
|
rlnInstance.deleteMember(index);
|
178
200
|
});
|
@@ -183,14 +205,14 @@ export class RLNContract {
|
|
183
205
|
|
184
206
|
public subscribeToMembers(rlnInstance: RLNInstance): void {
|
185
207
|
this.contract.on(this.membersFilter, (_pubkey, _index, event) =>
|
186
|
-
this.processEvents(rlnInstance, event)
|
208
|
+
this.processEvents(rlnInstance, [event])
|
187
209
|
);
|
188
210
|
}
|
189
211
|
|
190
212
|
public async registerWithSignature(
|
191
213
|
rlnInstance: RLNInstance,
|
192
214
|
signature: string
|
193
|
-
): Promise<
|
215
|
+
): Promise<Member | undefined> {
|
194
216
|
const identityCredential =
|
195
217
|
await rlnInstance.generateSeededIdentityCredential(signature);
|
196
218
|
|
@@ -199,23 +221,36 @@ export class RLNContract {
|
|
199
221
|
|
200
222
|
public async registerWithKey(
|
201
223
|
credential: IdentityCredential
|
202
|
-
): Promise<
|
203
|
-
if (
|
224
|
+
): Promise<Member | undefined> {
|
225
|
+
if (this.storageIndex === undefined) {
|
204
226
|
throw Error(
|
205
227
|
"Cannot register credential, no storage contract index found."
|
206
228
|
);
|
207
229
|
}
|
208
230
|
const txRegisterResponse: ethers.ContractTransaction =
|
209
|
-
await this.registryContract
|
231
|
+
await this.registryContract["register(uint16,uint256)"](
|
210
232
|
this.storageIndex,
|
211
233
|
credential.IDCommitmentBigInt,
|
212
|
-
{
|
213
|
-
gasLimit: 100000,
|
214
|
-
}
|
234
|
+
{ gasLimit: 100000 }
|
215
235
|
);
|
216
236
|
const txRegisterReceipt = await txRegisterResponse.wait();
|
217
237
|
|
218
|
-
|
238
|
+
// assumption: register(uint16,uint256) emits one event
|
239
|
+
const memberRegistered = txRegisterReceipt?.events?.[0];
|
240
|
+
|
241
|
+
if (!memberRegistered) {
|
242
|
+
return undefined;
|
243
|
+
}
|
244
|
+
|
245
|
+
const decodedData = this.contract.interface.decodeEventLog(
|
246
|
+
"MemberRegistered",
|
247
|
+
memberRegistered.data
|
248
|
+
);
|
249
|
+
|
250
|
+
return {
|
251
|
+
idCommitment: decodedData.idCommitment,
|
252
|
+
index: decodedData.index,
|
253
|
+
};
|
219
254
|
}
|
220
255
|
|
221
256
|
public roots(): Uint8Array[] {
|