@waku/rln 0.1.1 → 0.1.2-86d4f56
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/README.md +26 -2
- package/bundle/assets/rln_wasm_bg-a503e304.wasm +0 -0
- package/bundle/index.js +58446 -12248
- package/dist/.tsbuildinfo +1 -1
- package/dist/byte_utils.d.ts +13 -0
- package/dist/byte_utils.js +22 -0
- package/dist/byte_utils.js.map +1 -1
- package/dist/codec.d.ts +5 -3
- package/dist/codec.js +8 -4
- package/dist/codec.js.map +1 -1
- package/dist/constants.d.ts +2 -2
- package/dist/constants.js +62 -9
- package/dist/constants.js.map +1 -1
- package/dist/create.d.ts +2 -0
- package/dist/create.js +8 -0
- package/dist/create.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +5 -10
- package/dist/index.js.map +1 -1
- package/dist/keystore/cipher.d.ts +4 -0
- package/dist/keystore/cipher.js +28 -0
- package/dist/keystore/cipher.js.map +1 -0
- package/dist/keystore/credential_validation_generated.d.ts +8 -0
- package/dist/keystore/credential_validation_generated.js +121 -0
- package/dist/keystore/credential_validation_generated.js.map +1 -0
- package/dist/keystore/index.d.ts +4 -0
- package/dist/keystore/index.js +3 -0
- package/dist/keystore/index.js.map +1 -0
- package/dist/keystore/keystore.d.ts +50 -0
- package/dist/keystore/keystore.js +202 -0
- package/dist/keystore/keystore.js.map +1 -0
- package/dist/keystore/keystore_validation_generated.d.ts +8 -0
- package/dist/keystore/keystore_validation_generated.js +75 -0
- package/dist/keystore/keystore_validation_generated.js.map +1 -0
- package/dist/keystore/schema_validator.d.ts +2 -0
- package/dist/keystore/schema_validator.js +18 -0
- package/dist/keystore/schema_validator.js.map +1 -0
- package/dist/keystore/types.d.ts +29 -0
- package/dist/keystore/types.js +2 -0
- package/dist/keystore/types.js.map +1 -0
- package/dist/message.d.ts +2 -1
- package/dist/message.js +4 -1
- package/dist/message.js.map +1 -1
- package/dist/metamask.d.ts +2 -0
- package/dist/metamask.js +11 -0
- package/dist/metamask.js.map +1 -0
- package/dist/rln.d.ts +51 -0
- package/dist/rln.js +134 -12
- package/dist/rln.js.map +1 -1
- package/dist/rln_contract.d.ts +25 -14
- package/dist/rln_contract.js +80 -34
- package/dist/rln_contract.js.map +1 -1
- package/package.json +23 -8
- package/src/byte_utils.ts +24 -0
- package/src/codec.ts +10 -5
- package/src/constants.ts +63 -9
- package/src/create.ts +9 -0
- package/src/index.ts +13 -11
- package/src/message.ts +5 -1
- package/src/metamask.ts +16 -0
- package/src/rln.ts +240 -14
- package/src/rln_contract.ts +135 -53
- package/bundle/assets/rln_wasm_bg-6f96f821.wasm +0 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
import { Credential as _validateCredentialGenerated } from "./credential_validation_generated.js";
|
2
|
+
import { Keystore as _validateKeystoreGenerated } from "./keystore_validation_generated.js";
|
3
|
+
const _validateKeystore = _validateKeystoreGenerated;
|
4
|
+
const _validateCredential = _validateCredentialGenerated;
|
5
|
+
function schemaValidationErrors(validator, data) {
|
6
|
+
const validated = validator(data);
|
7
|
+
if (validated) {
|
8
|
+
return null;
|
9
|
+
}
|
10
|
+
return validator.errors;
|
11
|
+
}
|
12
|
+
export function isKeystoreValid(keystore) {
|
13
|
+
return !schemaValidationErrors(_validateKeystore, keystore);
|
14
|
+
}
|
15
|
+
export function isCredentialValid(credential) {
|
16
|
+
return !schemaValidationErrors(_validateCredential, credential);
|
17
|
+
}
|
18
|
+
//# sourceMappingURL=schema_validator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"schema_validator.js","sourceRoot":"","sources":["../../src/keystore/schema_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAClG,OAAO,EAAE,QAAQ,IAAI,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAY5F,MAAM,iBAAiB,GAAG,0BAAyC,CAAC;AACpE,MAAM,mBAAmB,GAAG,4BAA2C,CAAC;AAExE,SAAS,sBAAsB,CAC7B,SAAsB,EACtB,IAAa;IAEb,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,SAAS,EAAE;QACb,OAAO,IAAI,CAAC;KACb;IACD,OAAO,SAAS,CAAC,MAAM,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,OAAO,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAmB;IACnD,OAAO,CAAC,sBAAsB,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;AAClE,CAAC"}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import type { IdentityCredential } from "../rln.js";
|
2
|
+
export type MembershipHash = string;
|
3
|
+
export type Sha256Hash = string;
|
4
|
+
export type Keccak256Hash = string;
|
5
|
+
export type Password = string | Uint8Array;
|
6
|
+
export type MembershipInfo = {
|
7
|
+
chainId: number;
|
8
|
+
address: string;
|
9
|
+
treeIndex: number;
|
10
|
+
};
|
11
|
+
export type KeystoreEntity = {
|
12
|
+
identity: IdentityCredential;
|
13
|
+
membership: MembershipInfo;
|
14
|
+
};
|
15
|
+
export type DecryptedCredentials = KeystoreEntity;
|
16
|
+
export type EncryptedCredentials = {
|
17
|
+
/**
|
18
|
+
* Valid JSON string that contains Keystore
|
19
|
+
*/
|
20
|
+
keystore: string;
|
21
|
+
/**
|
22
|
+
* ID of credentials from provided Keystore to use
|
23
|
+
*/
|
24
|
+
id: string;
|
25
|
+
/**
|
26
|
+
* Password to decrypt credentials provided
|
27
|
+
*/
|
28
|
+
password: Password;
|
29
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/keystore/types.ts"],"names":[],"mappings":""}
|
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;
|
@@ -13,5 +13,6 @@ export declare class RlnMessage<T extends IDecodedMessage> implements IDecodedMe
|
|
13
13
|
get contentTopic(): string;
|
14
14
|
get timestamp(): Date | undefined;
|
15
15
|
get ephemeral(): boolean | undefined;
|
16
|
+
get meta(): Uint8Array | undefined;
|
16
17
|
get epoch(): number | undefined;
|
17
18
|
}
|
package/dist/message.js
CHANGED
@@ -9,7 +9,7 @@ export class RlnMessage {
|
|
9
9
|
this.rlnInstance = rlnInstance;
|
10
10
|
this.msg = msg;
|
11
11
|
this.rateLimitProof = rateLimitProof;
|
12
|
-
this.
|
12
|
+
this.pubsubTopic = "";
|
13
13
|
}
|
14
14
|
verify(roots) {
|
15
15
|
return this.rateLimitProof
|
@@ -33,6 +33,9 @@ export class RlnMessage {
|
|
33
33
|
get ephemeral() {
|
34
34
|
return this.msg.ephemeral;
|
35
35
|
}
|
36
|
+
get meta() {
|
37
|
+
return this.msg.meta;
|
38
|
+
}
|
36
39
|
get epoch() {
|
37
40
|
const bytes = this.msg.rateLimitProof?.epoch;
|
38
41
|
if (!bytes)
|
package/dist/message.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,UAAU,WAAW,CAAC,YAAoB,EAAE,GAAa;IAC7D,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,OAAO,UAAU;IAGrB,YACS,WAAwB,EACxB,GAAM,EACN,cAA2C;QAF3C,gBAAW,GAAX,WAAW,CAAa;QACxB,QAAG,GAAH,GAAG,CAAG;QACN,mBAAc,GAAd,cAAc,CAA6B;QAL7C,gBAAW,GAAG,EAAE,CAAC;IAMrB,CAAC;IAEG,MAAM,CAAC,KAAmB;QAC/B,OAAO,IAAI,CAAC,cAAc;YACxB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAC9B,IAAI,CAAC,cAAc,EACnB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,EAC5C,GAAG,KAAK,CACT,CAAC,2EAA2E;YAC/E,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,cAAc;YACxB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAC/B,IAAI,CAAC,cAAc,EACnB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAC7C,CAAC,2EAA2E;YAC/E,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF"}
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,UAAU,WAAW,CAAC,YAAoB,EAAE,GAAa;IAC7D,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,OAAO,UAAU;IAGrB,YACS,WAAwB,EACxB,GAAM,EACN,cAA2C;QAF3C,gBAAW,GAAX,WAAW,CAAa;QACxB,QAAG,GAAH,GAAG,CAAG;QACN,mBAAc,GAAd,cAAc,CAA6B;QAL7C,gBAAW,GAAG,EAAE,CAAC;IAMrB,CAAC;IAEG,MAAM,CAAC,KAAmB;QAC/B,OAAO,IAAI,CAAC,cAAc;YACxB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAC9B,IAAI,CAAC,cAAc,EACnB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,EAC5C,GAAG,KAAK,CACT,CAAC,2EAA2E;YAC/E,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,cAAc;YACxB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAC/B,IAAI,CAAC,cAAc,EACnB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAC7C,CAAC,2EAA2E;YAC/E,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,KAAK;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF"}
|
package/dist/metamask.js
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
import { ethers } from "ethers";
|
2
|
+
export const extractMetaMaskSigner = async () => {
|
3
|
+
const ethereum = window.ethereum;
|
4
|
+
if (!ethereum) {
|
5
|
+
throw Error("Missing or invalid Ethereum provider. Please install a Web3 wallet such as MetaMask.");
|
6
|
+
}
|
7
|
+
await ethereum.request({ method: "eth_requestAccounts" });
|
8
|
+
const provider = new ethers.providers.Web3Provider(ethereum, "any");
|
9
|
+
return provider.getSigner();
|
10
|
+
};
|
11
|
+
//# sourceMappingURL=metamask.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"metamask.js","sourceRoot":"","sources":["../src/metamask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAA4B,EAAE;IACtE,MAAM,QAAQ,GAAI,MAAc,CAAC,QAAQ,CAAC;IAE1C,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,KAAK,CACT,sFAAsF,CACvF,CAAC;KACH;IAED,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAEpE,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC;AAC9B,CAAC,CAAC"}
|
package/dist/rln.d.ts
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
import type { IRateLimitProof } from "@waku/interfaces";
|
2
|
+
import type { ContentTopic, IDecodedMessage, EncoderOptions as WakuEncoderOptions } from "@waku/interfaces";
|
3
|
+
import { ethers } from "ethers";
|
4
|
+
import type { RLNDecoder, RLNEncoder } from "./codec.js";
|
5
|
+
import type { DecryptedCredentials, EncryptedCredentials } from "./keystore/index.js";
|
6
|
+
import { Password } from "./keystore/types.js";
|
7
|
+
import { RLNContract } from "./rln_contract.js";
|
2
8
|
import { WitnessCalculator } from "./witness_calculator.js";
|
3
9
|
/**
|
4
10
|
* Create an instance of RLN
|
@@ -35,10 +41,54 @@ export declare class Proof implements IRateLimitProof {
|
|
35
41
|
export declare function proofToBytes(p: IRateLimitProof): Uint8Array;
|
36
42
|
export declare function poseidonHash(...input: Array<Uint8Array>): Uint8Array;
|
37
43
|
export declare function sha256(input: Uint8Array): Uint8Array;
|
44
|
+
type StartRLNOptions = {
|
45
|
+
/**
|
46
|
+
* If not set - will extract MetaMask account and get signer from it.
|
47
|
+
*/
|
48
|
+
signer?: ethers.Signer;
|
49
|
+
/**
|
50
|
+
* If not set - will use default SEPOLIA_CONTRACT address.
|
51
|
+
*/
|
52
|
+
registryAddress?: string;
|
53
|
+
/**
|
54
|
+
* Credentials to use for generating proofs and connecting to the contract and network.
|
55
|
+
* If provided used for validating the network chainId and connecting to registry contract.
|
56
|
+
*/
|
57
|
+
credentials?: EncryptedCredentials | DecryptedCredentials;
|
58
|
+
};
|
59
|
+
type RegisterMembershipOptions = {
|
60
|
+
signature: string;
|
61
|
+
} | {
|
62
|
+
identity: IdentityCredential;
|
63
|
+
};
|
64
|
+
type WakuRLNEncoderOptions = WakuEncoderOptions & {
|
65
|
+
credentials: EncryptedCredentials | DecryptedCredentials;
|
66
|
+
};
|
38
67
|
export declare class RLNInstance {
|
39
68
|
private zkRLN;
|
40
69
|
private witnessCalculator;
|
70
|
+
private started;
|
71
|
+
private starting;
|
72
|
+
private _contract;
|
73
|
+
private _signer;
|
74
|
+
private keystore;
|
75
|
+
private _credentials;
|
41
76
|
constructor(zkRLN: number, witnessCalculator: WitnessCalculator);
|
77
|
+
get contract(): undefined | RLNContract;
|
78
|
+
get signer(): undefined | ethers.Signer;
|
79
|
+
start(options?: StartRLNOptions): Promise<void>;
|
80
|
+
private determineStartOptions;
|
81
|
+
private static decryptCredentialsIfNeeded;
|
82
|
+
registerMembership(options: RegisterMembershipOptions): Promise<undefined | DecryptedCredentials>;
|
83
|
+
/**
|
84
|
+
* Changes credentials in use by relying on provided Keystore earlier in rln.start
|
85
|
+
* @param id: string, hash of credentials to select from Keystore
|
86
|
+
* @param password: string or bytes to use to decrypt credentials from Keystore
|
87
|
+
*/
|
88
|
+
useCredentials(id: string, password: Password): Promise<void>;
|
89
|
+
createEncoder(options: WakuRLNEncoderOptions): Promise<RLNEncoder>;
|
90
|
+
private verifyCredentialsAgainstContract;
|
91
|
+
createDecoder(contentTopic: ContentTopic): RLNDecoder<IDecodedMessage>;
|
42
92
|
generateIdentityCredentials(): IdentityCredential;
|
43
93
|
generateSeededIdentityCredential(seed: string): IdentityCredential;
|
44
94
|
insertMember(idCommitment: Uint8Array): void;
|
@@ -51,3 +101,4 @@ export declare class RLNInstance {
|
|
51
101
|
verifyWithRoots(proof: IRateLimitProof | Uint8Array, msg: Uint8Array, ...roots: Array<Uint8Array>): boolean;
|
52
102
|
verifyWithNoRoot(proof: IRateLimitProof | Uint8Array, msg: Uint8Array): boolean;
|
53
103
|
}
|
104
|
+
export {};
|
package/dist/rln.js
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
-
import
|
2
|
-
import
|
1
|
+
import { createDecoder, createEncoder } from "@waku/core";
|
2
|
+
import init from "@waku/zerokit-rln-wasm";
|
3
|
+
import * as zerokitRLN from "@waku/zerokit-rln-wasm";
|
4
|
+
import { buildBigIntFromUint8Array, writeUIntLE } from "./byte_utils.js";
|
5
|
+
import { createRLNDecoder, createRLNEncoder } from "./codec.js";
|
6
|
+
import { SEPOLIA_CONTRACT } from "./constants.js";
|
3
7
|
import { dateToEpoch, epochIntToBytes } from "./epoch.js";
|
8
|
+
import { Keystore } from "./keystore/index.js";
|
9
|
+
import { extractMetaMaskSigner } from "./metamask.js";
|
4
10
|
import verificationKey from "./resources/verification_key.js";
|
11
|
+
import { RLNContract } from "./rln_contract.js";
|
5
12
|
import * as wc from "./witness_calculator.js";
|
6
13
|
/**
|
7
14
|
* Concatenate Uint8Arrays
|
@@ -21,15 +28,6 @@ function concatenate(...input) {
|
|
21
28
|
}
|
22
29
|
return result;
|
23
30
|
}
|
24
|
-
/**
|
25
|
-
* Transforms Uint8Array into BigInt
|
26
|
-
* @param array: Uint8Array
|
27
|
-
* @returns BigInt
|
28
|
-
*/
|
29
|
-
function buildBigIntFromUint8Array(array) {
|
30
|
-
const dataView = new DataView(array.buffer);
|
31
|
-
return dataView.getBigUint64(0, true);
|
32
|
-
}
|
33
31
|
const stringEncoder = new TextEncoder();
|
34
32
|
const DEPTH = 20;
|
35
33
|
async function loadWitnessCalculator() {
|
@@ -47,7 +45,7 @@ async function loadZkey() {
|
|
47
45
|
* @returns RLNInstance
|
48
46
|
*/
|
49
47
|
export async function create() {
|
50
|
-
await init();
|
48
|
+
await init?.();
|
51
49
|
zerokitRLN.init_panic_hook();
|
52
50
|
const witnessCalculator = await loadWitnessCalculator();
|
53
51
|
const zkey = await loadZkey();
|
@@ -122,6 +120,130 @@ export class RLNInstance {
|
|
122
120
|
constructor(zkRLN, witnessCalculator) {
|
123
121
|
this.zkRLN = zkRLN;
|
124
122
|
this.witnessCalculator = witnessCalculator;
|
123
|
+
this.started = false;
|
124
|
+
this.starting = false;
|
125
|
+
this.keystore = Keystore.create();
|
126
|
+
}
|
127
|
+
get contract() {
|
128
|
+
return this._contract;
|
129
|
+
}
|
130
|
+
get signer() {
|
131
|
+
return this._signer;
|
132
|
+
}
|
133
|
+
async start(options = {}) {
|
134
|
+
if (this.started || this.starting) {
|
135
|
+
return;
|
136
|
+
}
|
137
|
+
this.starting = true;
|
138
|
+
try {
|
139
|
+
const { credentials, keystore } = await RLNInstance.decryptCredentialsIfNeeded(options.credentials);
|
140
|
+
const { signer, registryAddress } = await this.determineStartOptions(options, credentials);
|
141
|
+
if (keystore) {
|
142
|
+
this.keystore = keystore;
|
143
|
+
}
|
144
|
+
this._credentials = credentials;
|
145
|
+
this._signer = signer;
|
146
|
+
this._contract = await RLNContract.init(this, {
|
147
|
+
registryAddress: registryAddress,
|
148
|
+
signer: signer,
|
149
|
+
});
|
150
|
+
this.started = true;
|
151
|
+
}
|
152
|
+
finally {
|
153
|
+
this.starting = false;
|
154
|
+
}
|
155
|
+
}
|
156
|
+
async determineStartOptions(options, credentials) {
|
157
|
+
let chainId = credentials?.membership.chainId;
|
158
|
+
const registryAddress = credentials?.membership.address ||
|
159
|
+
options.registryAddress ||
|
160
|
+
SEPOLIA_CONTRACT.address;
|
161
|
+
if (registryAddress === SEPOLIA_CONTRACT.address) {
|
162
|
+
chainId = SEPOLIA_CONTRACT.chainId;
|
163
|
+
}
|
164
|
+
const signer = options.signer || (await extractMetaMaskSigner());
|
165
|
+
const currentChainId = await signer.getChainId();
|
166
|
+
if (chainId && chainId !== currentChainId) {
|
167
|
+
throw Error(`Failed to start RLN contract, chain ID of contract is different from current one: contract-${chainId}, current network-${currentChainId}`);
|
168
|
+
}
|
169
|
+
return {
|
170
|
+
signer,
|
171
|
+
registryAddress,
|
172
|
+
};
|
173
|
+
}
|
174
|
+
static async decryptCredentialsIfNeeded(credentials) {
|
175
|
+
if (!credentials) {
|
176
|
+
return {};
|
177
|
+
}
|
178
|
+
if ("identity" in credentials) {
|
179
|
+
return { credentials };
|
180
|
+
}
|
181
|
+
const keystore = Keystore.fromString(credentials.keystore);
|
182
|
+
if (!keystore) {
|
183
|
+
return {};
|
184
|
+
}
|
185
|
+
const decryptedCredentials = await keystore.readCredential(credentials.id, credentials.password);
|
186
|
+
return {
|
187
|
+
keystore,
|
188
|
+
credentials: decryptedCredentials,
|
189
|
+
};
|
190
|
+
}
|
191
|
+
async registerMembership(options) {
|
192
|
+
if (!this.contract) {
|
193
|
+
throw Error("RLN Contract is not initialized.");
|
194
|
+
}
|
195
|
+
let identity = "identity" in options && options.identity;
|
196
|
+
if ("signature" in options) {
|
197
|
+
identity = await this.generateSeededIdentityCredential(options.signature);
|
198
|
+
}
|
199
|
+
if (!identity) {
|
200
|
+
throw Error("Missing signature or identity to register membership.");
|
201
|
+
}
|
202
|
+
return this.contract.registerWithIdentity(identity);
|
203
|
+
}
|
204
|
+
/**
|
205
|
+
* Changes credentials in use by relying on provided Keystore earlier in rln.start
|
206
|
+
* @param id: string, hash of credentials to select from Keystore
|
207
|
+
* @param password: string or bytes to use to decrypt credentials from Keystore
|
208
|
+
*/
|
209
|
+
async useCredentials(id, password) {
|
210
|
+
this._credentials = await this.keystore?.readCredential(id, password);
|
211
|
+
}
|
212
|
+
async createEncoder(options) {
|
213
|
+
const { credentials: decryptedCredentials } = await RLNInstance.decryptCredentialsIfNeeded(options.credentials);
|
214
|
+
const credentials = decryptedCredentials || this._credentials;
|
215
|
+
if (!credentials) {
|
216
|
+
throw Error("Failed to create Encoder: missing RLN credentials. Use createRLNEncoder directly.");
|
217
|
+
}
|
218
|
+
await this.verifyCredentialsAgainstContract(credentials);
|
219
|
+
return createRLNEncoder({
|
220
|
+
encoder: createEncoder(options),
|
221
|
+
rlnInstance: this,
|
222
|
+
index: credentials.membership.treeIndex,
|
223
|
+
credential: credentials.identity,
|
224
|
+
});
|
225
|
+
}
|
226
|
+
async verifyCredentialsAgainstContract(credentials) {
|
227
|
+
if (!this._contract) {
|
228
|
+
throw Error("Failed to verify chain coordinates: no contract initialized.");
|
229
|
+
}
|
230
|
+
const registryAddress = credentials.membership.address;
|
231
|
+
const currentRegistryAddress = this._contract.registry.address;
|
232
|
+
if (registryAddress !== currentRegistryAddress) {
|
233
|
+
throw Error(`Failed to verify chain coordinates: credentials contract address=${registryAddress} is not equal to registryContract address=${currentRegistryAddress}`);
|
234
|
+
}
|
235
|
+
const chainId = credentials.membership.chainId;
|
236
|
+
const network = await this._contract.registry.getNetwork();
|
237
|
+
const currentChainId = network.chainId;
|
238
|
+
if (chainId !== currentChainId) {
|
239
|
+
throw Error(`Failed to verify chain coordinates: credentials chainID=${chainId} is not equal to registryContract chainID=${currentChainId}`);
|
240
|
+
}
|
241
|
+
}
|
242
|
+
createDecoder(contentTopic) {
|
243
|
+
return createRLNDecoder({
|
244
|
+
rlnInstance: this,
|
245
|
+
decoder: createDecoder(contentTopic),
|
246
|
+
});
|
125
247
|
}
|
126
248
|
generateIdentityCredentials() {
|
127
249
|
const memKeys = zerokitRLN.generateExtendedMembershipKey(this.zkRLN); // TODO: rename this function in zerokit rln-wasm
|
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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"}
|
package/dist/rln_contract.d.ts
CHANGED
@@ -1,34 +1,45 @@
|
|
1
1
|
import { ethers } from "ethers";
|
2
|
-
import {
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
import type { DecryptedCredentials } from "./keystore/index.js";
|
3
|
+
import { type IdentityCredential, RLNInstance } from "./rln.js";
|
4
|
+
type Member = {
|
5
|
+
idCommitment: string;
|
6
|
+
index: ethers.BigNumber;
|
6
7
|
};
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
type Signer = ethers.Signer;
|
9
|
+
type RLNContractOptions = {
|
10
|
+
signer: Signer;
|
11
|
+
registryAddress: string;
|
10
12
|
};
|
11
|
-
|
13
|
+
type RLNStorageOptions = {
|
14
|
+
storageIndex?: number;
|
15
|
+
};
|
16
|
+
type RLNContractInitOptions = RLNContractOptions & RLNStorageOptions;
|
17
|
+
type FetchMembersOptions = {
|
12
18
|
fromBlock?: number;
|
13
19
|
fetchRange?: number;
|
14
20
|
fetchChunks?: number;
|
15
21
|
};
|
16
22
|
export declare class RLNContract {
|
17
|
-
private
|
18
|
-
private membersFilter;
|
23
|
+
private registryContract;
|
19
24
|
private merkleRootTracker;
|
25
|
+
private deployBlock;
|
26
|
+
private storageIndex;
|
27
|
+
private storageContract;
|
28
|
+
private _membersFilter;
|
20
29
|
private _members;
|
21
|
-
static init(rlnInstance: RLNInstance, options:
|
22
|
-
constructor(rlnInstance: RLNInstance, {
|
30
|
+
static init(rlnInstance: RLNInstance, options: RLNContractInitOptions): Promise<RLNContract>;
|
31
|
+
constructor(rlnInstance: RLNInstance, { registryAddress, signer }: RLNContractOptions);
|
32
|
+
private initStorageContract;
|
33
|
+
get registry(): ethers.Contract;
|
23
34
|
get contract(): ethers.Contract;
|
24
35
|
get members(): Member[];
|
36
|
+
private get membersFilter();
|
25
37
|
fetchMembers(rlnInstance: RLNInstance, options?: FetchMembersOptions): Promise<void>;
|
26
38
|
processEvents(rlnInstance: RLNInstance, events: ethers.Event[]): void;
|
27
39
|
private insertMembers;
|
28
40
|
private removeMembers;
|
29
41
|
subscribeToMembers(rlnInstance: RLNInstance): void;
|
30
|
-
|
31
|
-
registerWithKey(credential: IdentityCredential): Promise<ethers.Event | undefined>;
|
42
|
+
registerWithIdentity(identity: IdentityCredential): Promise<DecryptedCredentials | undefined>;
|
32
43
|
roots(): Uint8Array[];
|
33
44
|
}
|
34
45
|
export {};
|
package/dist/rln_contract.js
CHANGED
@@ -1,28 +1,60 @@
|
|
1
|
+
import { hexToBytes } from "@waku/utils/bytes";
|
1
2
|
import { ethers } from "ethers";
|
2
|
-
import {
|
3
|
-
import {
|
3
|
+
import { zeroPadLE } from "./byte_utils.js";
|
4
|
+
import { RLN_REGISTRY_ABI, RLN_STORAGE_ABI } from "./constants.js";
|
5
|
+
import { MerkleRootTracker } from "./root_tracker.js";
|
4
6
|
export class RLNContract {
|
5
|
-
constructor(rlnInstance, { address, provider }) {
|
6
|
-
this._members = [];
|
7
|
-
const initialRoot = rlnInstance.getMerkleRoot();
|
8
|
-
this._contract = new ethers.Contract(address, RLN_ABI, provider);
|
9
|
-
this.merkleRootTracker = new MerkleRootTracker(5, initialRoot);
|
10
|
-
this.membersFilter = this.contract.filters.MemberRegistered();
|
11
|
-
}
|
12
7
|
static async init(rlnInstance, options) {
|
13
8
|
const rlnContract = new RLNContract(rlnInstance, options);
|
9
|
+
await rlnContract.initStorageContract(options.signer);
|
14
10
|
await rlnContract.fetchMembers(rlnInstance);
|
15
11
|
rlnContract.subscribeToMembers(rlnInstance);
|
16
12
|
return rlnContract;
|
17
13
|
}
|
14
|
+
constructor(rlnInstance, { registryAddress, signer }) {
|
15
|
+
this._members = new Map();
|
16
|
+
const initialRoot = rlnInstance.getMerkleRoot();
|
17
|
+
this.registryContract = new ethers.Contract(registryAddress, RLN_REGISTRY_ABI, signer);
|
18
|
+
this.merkleRootTracker = new MerkleRootTracker(5, initialRoot);
|
19
|
+
}
|
20
|
+
async initStorageContract(signer, options = {}) {
|
21
|
+
const storageIndex = options?.storageIndex
|
22
|
+
? options.storageIndex
|
23
|
+
: await this.registryContract.usingStorageIndex();
|
24
|
+
const storageAddress = await this.registryContract.storages(storageIndex);
|
25
|
+
if (!storageAddress || storageAddress === ethers.constants.AddressZero) {
|
26
|
+
throw Error("No RLN Storage initialized on registry contract.");
|
27
|
+
}
|
28
|
+
this.storageIndex = storageIndex;
|
29
|
+
this.storageContract = new ethers.Contract(storageAddress, RLN_STORAGE_ABI, signer);
|
30
|
+
this._membersFilter = this.storageContract.filters.MemberRegistered();
|
31
|
+
this.deployBlock = await this.storageContract.deployedBlockNumber();
|
32
|
+
}
|
33
|
+
get registry() {
|
34
|
+
if (!this.registryContract) {
|
35
|
+
throw Error("Registry contract was not initialized");
|
36
|
+
}
|
37
|
+
return this.registryContract;
|
38
|
+
}
|
18
39
|
get contract() {
|
19
|
-
|
40
|
+
if (!this.storageContract) {
|
41
|
+
throw Error("Storage contract was not initialized");
|
42
|
+
}
|
43
|
+
return this.storageContract;
|
20
44
|
}
|
21
45
|
get members() {
|
22
|
-
|
46
|
+
const sortedMembers = Array.from(this._members.values()).sort((left, right) => left.index.toNumber() - right.index.toNumber());
|
47
|
+
return sortedMembers;
|
48
|
+
}
|
49
|
+
get membersFilter() {
|
50
|
+
if (!this._membersFilter) {
|
51
|
+
throw Error("Members filter was not initialized.");
|
52
|
+
}
|
53
|
+
return this._membersFilter;
|
23
54
|
}
|
24
55
|
async fetchMembers(rlnInstance, options = {}) {
|
25
56
|
const registeredMemberEvents = await queryFilter(this.contract, {
|
57
|
+
fromBlock: this.deployBlock,
|
26
58
|
...options,
|
27
59
|
membersFilter: this.membersFilter,
|
28
60
|
});
|
@@ -39,11 +71,11 @@ export class RLNContract {
|
|
39
71
|
const index = evt.args.index;
|
40
72
|
const toRemoveVal = toRemoveTable.get(evt.blockNumber);
|
41
73
|
if (toRemoveVal != undefined) {
|
42
|
-
toRemoveVal.push(index);
|
74
|
+
toRemoveVal.push(index.toNumber());
|
43
75
|
toRemoveTable.set(evt.blockNumber, toRemoveVal);
|
44
76
|
}
|
45
77
|
else {
|
46
|
-
toRemoveTable.set(evt.blockNumber, [index]);
|
78
|
+
toRemoveTable.set(evt.blockNumber, [index.toNumber()]);
|
47
79
|
}
|
48
80
|
}
|
49
81
|
else {
|
@@ -54,21 +86,24 @@ export class RLNContract {
|
|
54
86
|
eventsPerBlock.push(evt);
|
55
87
|
toInsertTable.set(evt.blockNumber, eventsPerBlock);
|
56
88
|
}
|
57
|
-
this.removeMembers(rlnInstance, toRemoveTable);
|
58
|
-
this.insertMembers(rlnInstance, toInsertTable);
|
59
89
|
});
|
90
|
+
this.removeMembers(rlnInstance, toRemoveTable);
|
91
|
+
this.insertMembers(rlnInstance, toInsertTable);
|
60
92
|
}
|
61
93
|
insertMembers(rlnInstance, toInsert) {
|
62
94
|
toInsert.forEach((events, blockNumber) => {
|
63
95
|
events.forEach((evt) => {
|
64
|
-
|
96
|
+
const _idCommitment = evt?.args?.idCommitment;
|
97
|
+
const index = evt?.args?.index;
|
98
|
+
if (!_idCommitment || !index) {
|
65
99
|
return;
|
66
100
|
}
|
67
|
-
const
|
68
|
-
const index = evt.args.index;
|
69
|
-
const idCommitment = ethers.utils.zeroPad(ethers.utils.arrayify(pubkey), 32);
|
101
|
+
const idCommitment = zeroPadLE(hexToBytes(_idCommitment?._hex), 32);
|
70
102
|
rlnInstance.insertMember(idCommitment);
|
71
|
-
this.
|
103
|
+
this._members.set(index.toNumber(), {
|
104
|
+
index,
|
105
|
+
idCommitment: _idCommitment?._hex,
|
106
|
+
});
|
72
107
|
});
|
73
108
|
const currentRoot = rlnInstance.getMerkleRoot();
|
74
109
|
this.merkleRootTracker.pushRoot(blockNumber, currentRoot);
|
@@ -78,9 +113,8 @@ export class RLNContract {
|
|
78
113
|
const removeDescending = new Map([...toRemove].sort().reverse());
|
79
114
|
removeDescending.forEach((indexes, blockNumber) => {
|
80
115
|
indexes.forEach((index) => {
|
81
|
-
|
82
|
-
|
83
|
-
this.members.splice(idx, 1);
|
116
|
+
if (this._members.has(index)) {
|
117
|
+
this._members.delete(index);
|
84
118
|
}
|
85
119
|
rlnInstance.deleteMember(index);
|
86
120
|
});
|
@@ -88,19 +122,31 @@ export class RLNContract {
|
|
88
122
|
});
|
89
123
|
}
|
90
124
|
subscribeToMembers(rlnInstance) {
|
91
|
-
this.contract.on(this.membersFilter, (_pubkey, _index, event) => this.processEvents(rlnInstance, event));
|
125
|
+
this.contract.on(this.membersFilter, (_pubkey, _index, event) => this.processEvents(rlnInstance, [event]));
|
92
126
|
}
|
93
|
-
async
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
const depositValue = await this.contract.MEMBERSHIP_DEPOSIT();
|
99
|
-
const txRegisterResponse = await this.contract.register(credential.IDCommitmentBigInt, {
|
100
|
-
value: depositValue,
|
101
|
-
});
|
127
|
+
async registerWithIdentity(identity) {
|
128
|
+
if (this.storageIndex === undefined) {
|
129
|
+
throw Error("Cannot register credential, no storage contract index found.");
|
130
|
+
}
|
131
|
+
const txRegisterResponse = await this.registryContract["register(uint16,uint256)"](this.storageIndex, identity.IDCommitmentBigInt, { gasLimit: 100000 });
|
102
132
|
const txRegisterReceipt = await txRegisterResponse.wait();
|
103
|
-
|
133
|
+
// assumption: register(uint16,uint256) emits one event
|
134
|
+
const memberRegistered = txRegisterReceipt?.events?.[0];
|
135
|
+
if (!memberRegistered) {
|
136
|
+
return undefined;
|
137
|
+
}
|
138
|
+
const decodedData = this.contract.interface.decodeEventLog("MemberRegistered", memberRegistered.data);
|
139
|
+
const network = await this.registryContract.provider.getNetwork();
|
140
|
+
const address = this.registryContract.address;
|
141
|
+
const membershipId = decodedData.index.toNumber();
|
142
|
+
return {
|
143
|
+
identity,
|
144
|
+
membership: {
|
145
|
+
address,
|
146
|
+
treeIndex: membershipId,
|
147
|
+
chainId: network.chainId,
|
148
|
+
},
|
149
|
+
};
|
104
150
|
}
|
105
151
|
roots() {
|
106
152
|
return this.merkleRootTracker.roots();
|