@waku/rln 0.1.6-b7e9b08.0 → 0.1.6-f7778a9.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.
- package/bundle/_virtual/utils.js +2 -2
- package/bundle/_virtual/utils2.js +2 -2
- package/bundle/index.js +2 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/_sha2.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/hmac.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/pbkdf2.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/scrypt.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/sha256.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/sha512.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/utils.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/random.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/utils.js +2 -2
- package/bundle/node_modules/@ethersproject/keccak256/lib.esm/index.js +1 -1
- package/bundle/node_modules/{@ethersproject/keccak256/node_modules/js-sha3 → js-sha3}/src/sha3.js +2 -2
- package/bundle/packages/core/dist/lib/connection_manager/connection_manager.js +0 -3
- package/bundle/packages/core/dist/lib/connection_manager/keep_alive_manager.js +3 -3
- package/bundle/packages/core/dist/lib/filter/filter.js +0 -3
- package/bundle/packages/core/dist/lib/light_push/light_push.js +0 -3
- package/bundle/packages/core/dist/lib/message/version_0.js +1 -4
- package/bundle/packages/core/dist/lib/metadata/metadata.js +0 -3
- package/bundle/packages/core/dist/lib/store/store.js +3 -3
- package/bundle/packages/rln/dist/codec.js +3 -3
- package/bundle/packages/rln/dist/contract/constants.js +8 -1
- package/bundle/packages/rln/dist/contract/rln_base_contract.js +138 -75
- package/bundle/packages/rln/dist/contract/rln_contract.js +3 -3
- package/bundle/packages/rln/dist/credentials_manager.js +15 -10
- package/bundle/packages/rln/dist/keystore/keystore.js +4 -4
- package/bundle/packages/rln/dist/message.js +11 -0
- package/bundle/packages/rln/dist/rln.js +3 -3
- package/bundle/packages/rln/dist/utils/epoch.js +3 -3
- package/bundle/packages/utils/dist/common/sharding/index.js +4 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/contract/constants.d.ts +6 -0
- package/dist/contract/constants.js +6 -0
- package/dist/contract/constants.js.map +1 -1
- package/dist/contract/index.d.ts +1 -0
- package/dist/contract/index.js +1 -0
- package/dist/contract/index.js.map +1 -1
- package/dist/contract/rln_base_contract.d.ts +37 -22
- package/dist/contract/rln_base_contract.js +135 -72
- package/dist/contract/rln_base_contract.js.map +1 -1
- package/dist/contract/types.d.ts +5 -0
- package/dist/contract/types.js.map +1 -1
- package/dist/credentials_manager.js +12 -7
- package/dist/credentials_manager.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/keystore/keystore.js.map +1 -1
- package/dist/keystore/types.d.ts +2 -2
- package/dist/message.d.ts +5 -4
- package/dist/message.js +2 -0
- package/dist/message.js.map +1 -1
- package/package.json +1 -1
- package/src/contract/constants.ts +9 -0
- package/src/contract/index.ts +1 -0
- package/src/contract/rln_base_contract.ts +181 -103
- package/src/contract/types.ts +5 -0
- package/src/credentials_manager.ts +20 -7
- package/src/index.ts +3 -1
- package/src/keystore/keystore.ts +4 -2
- package/src/keystore/types.ts +2 -2
- package/src/message.ts +7 -4
- package/bundle/packages/utils/node_modules/@waku/interfaces/dist/connection_manager.js +0 -19
- package/bundle/packages/utils/node_modules/@waku/interfaces/dist/health_indicator.js +0 -12
- package/bundle/packages/utils/node_modules/@waku/interfaces/dist/protocols.js +0 -92
- /package/bundle/packages/{utils/node_modules/@waku/interfaces → interfaces}/dist/constants.js +0 -0
- /package/bundle/{node_modules → packages/rln/node_modules}/uuid/dist/esm-browser/native.js +0 -0
- /package/bundle/{node_modules → packages/rln/node_modules}/uuid/dist/esm-browser/rng.js +0 -0
- /package/bundle/{node_modules → packages/rln/node_modules}/uuid/dist/esm-browser/stringify.js +0 -0
- /package/bundle/{node_modules → packages/rln/node_modules}/uuid/dist/esm-browser/v4.js +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"keystore.js","sourceRoot":"","sources":["../../src/keystore/keystore.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"keystore.js","sourceRoot":"","sources":["../../src/keystore/keystore.ts"],"names":[],"mappings":"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"}
|
package/dist/keystore/types.d.ts
CHANGED
@@ -3,7 +3,7 @@ export type MembershipHash = string;
|
|
3
3
|
export type Sha256Hash = string;
|
4
4
|
export type Keccak256Hash = string;
|
5
5
|
export type Password = string | Uint8Array;
|
6
|
-
export type
|
6
|
+
export type KeystoreMembershipInfo = {
|
7
7
|
chainId: string;
|
8
8
|
address: string;
|
9
9
|
treeIndex: number;
|
@@ -11,7 +11,7 @@ export type MembershipInfo = {
|
|
11
11
|
};
|
12
12
|
export type KeystoreEntity = {
|
13
13
|
identity: IdentityCredential;
|
14
|
-
membership:
|
14
|
+
membership: KeystoreMembershipInfo;
|
15
15
|
};
|
16
16
|
export type DecryptedCredentials = KeystoreEntity;
|
17
17
|
export type EncryptedCredentials = {
|
package/dist/message.d.ts
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
-
import type { IDecodedMessage, IMessage, IRateLimitProof } from "@waku/interfaces";
|
1
|
+
import type { IDecodedMessage, IMessage, IRateLimitProof, IRlnMessage } from "@waku/interfaces";
|
2
2
|
import { RLNInstance } from "./rln.js";
|
3
3
|
export declare function toRLNSignal(contentTopic: string, msg: IMessage): Uint8Array;
|
4
|
-
export declare class RlnMessage<T extends IDecodedMessage> implements
|
5
|
-
rlnInstance
|
6
|
-
msg
|
4
|
+
export declare class RlnMessage<T extends IDecodedMessage> implements IRlnMessage {
|
5
|
+
private rlnInstance;
|
6
|
+
private msg;
|
7
7
|
rateLimitProof: IRateLimitProof | undefined;
|
8
8
|
pubsubTopic: string;
|
9
|
+
version: number;
|
9
10
|
constructor(rlnInstance: RLNInstance, msg: T, rateLimitProof: IRateLimitProof | undefined);
|
10
11
|
verify(roots: Uint8Array[]): boolean | undefined;
|
11
12
|
verifyNoRoot(): boolean | undefined;
|
package/dist/message.js
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import { message } from "@waku/core";
|
1
2
|
import * as utils from "@waku/utils/bytes";
|
2
3
|
import { epochBytesToInt } from "./utils/index.js";
|
3
4
|
export function toRLNSignal(contentTopic, msg) {
|
@@ -9,6 +10,7 @@ export class RlnMessage {
|
|
9
10
|
msg;
|
10
11
|
rateLimitProof;
|
11
12
|
pubsubTopic = "";
|
13
|
+
version = message.version_0.Version;
|
12
14
|
constructor(rlnInstance, msg, rateLimitProof) {
|
13
15
|
this.rlnInstance = rlnInstance;
|
14
16
|
this.msg = msg;
|
package/dist/message.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAOrC,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,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;IAKX;IACA;IACD;IANF,WAAW,GAAG,EAAE,CAAC;IACjB,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IAE3C,YACU,WAAwB,EACxB,GAAM,EACP,cAA2C;QAF1C,gBAAW,GAAX,WAAW,CAAa;QACxB,QAAG,GAAH,GAAG,CAAG;QACP,mBAAc,GAAd,cAAc,CAA6B;IACjD,CAAC;IAEG,MAAM,CAAC,KAAmB;QAC/B,OAAO,IAAI,CAAC,cAAc;YACxB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,CACtC,IAAI,CAAC,cAAc,EACnB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,EAC5C,KAAK,CACN,CAAC,2EAA2E;YAC/E,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,cAAc;YACxB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CACvC,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,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;IAC/B,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,IAAW,KAAK;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;QACzC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAE7B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF"}
|
package/package.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"name":"@waku/rln","version":"0.1.6-
|
1
|
+
{"name":"@waku/rln","version":"0.1.6-f7778a9.0","description":"RLN (Rate Limiting Nullifier) implementation for Waku","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"type":"module","homepage":"https://github.com/waku-org/js-waku/tree/master/packages/rln#readme","repository":{"type":"git","url":"https://github.com/waku-org/js-waku.git"},"bugs":{"url":"https://github.com/waku-org/js-waku/issues"},"license":"MIT OR Apache-2.0","keywords":["waku","rln","rate-limiting","privacy","web3"],"scripts":{"build":"run-s build:**","build:copy":"mkdir -p dist/resources && cp -r src/resources/* dist/resources/","build:esm":"tsc","build:bundle":"rollup --config rollup.config.js","fix":"run-s fix:*","fix:lint":"eslint src *.js --fix","check":"run-s check:*","check:tsc":"tsc -p tsconfig.dev.json","check:lint":"eslint \"src/!(resources)/**/*.{ts,js}\" *.js","check:spelling":"cspell \"{README.md,src/**/*.ts}\"","test":"NODE_ENV=test run-s test:*","test:browser":"karma start karma.conf.cjs","watch:build":"tsc -p tsconfig.json -w","watch:test":"mocha --watch","prepublish":"npm run build","reset-hard":"git clean -dfx -e .idea && git reset --hard && npm i && npm run build"},"engines":{"node":">=20"},"devDependencies":{"@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.3","@types/chai":"^5.0.1","@types/chai-spies":"^1.0.6","@waku/interfaces":"0.0.31-f7778a9.0","@types/deep-equal-in-any-order":"^1.0.4","@types/lodash":"^4.17.15","@types/sinon":"^17.0.3","@waku/build-utils":"^1.0.0","@waku/message-encryption":"0.0.34-f7778a9.0","deep-equal-in-any-order":"^2.0.6","fast-check":"^3.23.2","rollup-plugin-copy":"^3.5.0"},"files":["dist","bundle","src/**/*.ts","!**/*.spec.*","!**/*.json","CHANGELOG.md","LICENSE","README.md"],"dependencies":{"@chainsafe/bls-keystore":"3.0.0","@waku/core":"0.0.36-f7778a9.0","@waku/utils":"0.0.24-f7778a9.0","@noble/hashes":"^1.2.0","@waku/zerokit-rln-wasm":"^0.0.13","ethereum-cryptography":"^3.1.0","ethers":"^5.7.2","lodash":"^4.17.21","uuid":"^11.0.5","chai":"^5.1.2","chai-as-promised":"^8.0.1","chai-spies":"^1.1.0","chai-subset":"^1.6.0","sinon":"^19.0.2"}}
|
@@ -25,4 +25,13 @@ export const RATE_LIMIT_PARAMS = {
|
|
25
25
|
EPOCH_LENGTH: 600 // Epoch length in seconds (10 minutes)
|
26
26
|
} as const;
|
27
27
|
|
28
|
+
/**
|
29
|
+
* Default Q value for the RLN contract
|
30
|
+
* This is the upper bound for the ID commitment
|
31
|
+
* @see https://github.com/waku-org/specs/blob/master/standards/core/rln-contract.md#implementation-suggestions
|
32
|
+
*/
|
33
|
+
export const DEFAULT_Q = BigInt(
|
34
|
+
"21888242871839275222246405745257275088548364400416034343698204186575808495617"
|
35
|
+
);
|
36
|
+
|
28
37
|
export const DEFAULT_RATE_LIMIT = RATE_LIMIT_PARAMS.MAX_RATE;
|
package/src/contract/index.ts
CHANGED
@@ -5,7 +5,11 @@ import { IdentityCredential } from "../identity.js";
|
|
5
5
|
import { DecryptedCredentials } from "../keystore/types.js";
|
6
6
|
|
7
7
|
import { RLN_ABI } from "./abi.js";
|
8
|
-
import {
|
8
|
+
import {
|
9
|
+
DEFAULT_Q,
|
10
|
+
DEFAULT_RATE_LIMIT,
|
11
|
+
RATE_LIMIT_PARAMS
|
12
|
+
} from "./constants.js";
|
9
13
|
import {
|
10
14
|
CustomQueryOptions,
|
11
15
|
FetchMembersOptions,
|
@@ -22,6 +26,14 @@ export class RLNBaseContract {
|
|
22
26
|
public contract: ethers.Contract;
|
23
27
|
private deployBlock: undefined | number;
|
24
28
|
private rateLimit: number;
|
29
|
+
private minRateLimit?: number;
|
30
|
+
private maxRateLimit?: number;
|
31
|
+
|
32
|
+
/**
|
33
|
+
* Default Q value for the RLN contract.
|
34
|
+
* @see https://github.com/waku-org/waku-rlnv2-contract/blob/b7e9a9b1bc69256a2a3076c1f099b50ce84e7eff/src/WakuRlnV2.sol#L25
|
35
|
+
*/
|
36
|
+
public idCommitmentBigIntLimit = DEFAULT_Q;
|
25
37
|
|
26
38
|
protected _members: Map<number, Member> = new Map();
|
27
39
|
private _membersFilter: ethers.EventFilter;
|
@@ -29,19 +41,9 @@ export class RLNBaseContract {
|
|
29
41
|
private _membersExpiredFilter: ethers.EventFilter;
|
30
42
|
|
31
43
|
/**
|
32
|
-
*
|
33
|
-
* Allows injecting a mocked contract for testing purposes.
|
44
|
+
* Private constructor for RLNBaseContract. Use static create() instead.
|
34
45
|
*/
|
35
|
-
|
36
|
-
// Initialize members and subscriptions
|
37
|
-
this.fetchMembers()
|
38
|
-
.then(() => {
|
39
|
-
this.subscribeToMembers();
|
40
|
-
})
|
41
|
-
.catch((error) => {
|
42
|
-
log.error("Failed to initialize members", { error });
|
43
|
-
});
|
44
|
-
|
46
|
+
protected constructor(options: RLNContractInitOptions) {
|
45
47
|
const {
|
46
48
|
address,
|
47
49
|
signer,
|
@@ -49,15 +51,55 @@ export class RLNBaseContract {
|
|
49
51
|
contract
|
50
52
|
} = options;
|
51
53
|
|
52
|
-
|
54
|
+
log.info("Initializing RLNBaseContract", { address, rateLimit });
|
53
55
|
|
54
56
|
this.contract = contract || new ethers.Contract(address, RLN_ABI, signer);
|
55
57
|
this.rateLimit = rateLimit;
|
56
58
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
59
|
+
try {
|
60
|
+
log.info("Setting up event filters");
|
61
|
+
// Initialize event filters
|
62
|
+
this._membersFilter = this.contract.filters.MembershipRegistered();
|
63
|
+
this._membershipErasedFilter = this.contract.filters.MembershipErased();
|
64
|
+
this._membersExpiredFilter = this.contract.filters.MembershipExpired();
|
65
|
+
log.info("Event filters initialized successfully");
|
66
|
+
} catch (error) {
|
67
|
+
log.error("Failed to initialize event filters", { error });
|
68
|
+
throw new Error(
|
69
|
+
"Failed to initialize event filters: " + (error as Error).message
|
70
|
+
);
|
71
|
+
}
|
72
|
+
|
73
|
+
// Initialize members and subscriptions
|
74
|
+
this.fetchMembers()
|
75
|
+
.then(() => {
|
76
|
+
this.subscribeToMembers();
|
77
|
+
})
|
78
|
+
.catch((error) => {
|
79
|
+
log.error("Failed to initialize members", { error });
|
80
|
+
});
|
81
|
+
}
|
82
|
+
|
83
|
+
/**
|
84
|
+
* Static async factory to create and initialize RLNBaseContract
|
85
|
+
*/
|
86
|
+
public static async create(
|
87
|
+
options: RLNContractInitOptions
|
88
|
+
): Promise<RLNBaseContract> {
|
89
|
+
const instance = new RLNBaseContract(options);
|
90
|
+
const [min, max, idCommitmentBigIntLimit] = await Promise.all([
|
91
|
+
instance.contract.minMembershipRateLimit(),
|
92
|
+
instance.contract.maxMembershipRateLimit(),
|
93
|
+
instance.contract.Q()
|
94
|
+
]);
|
95
|
+
instance.minRateLimit = ethers.BigNumber.from(min).toNumber();
|
96
|
+
instance.maxRateLimit = ethers.BigNumber.from(max).toNumber();
|
97
|
+
instance.idCommitmentBigIntLimit = BigInt(
|
98
|
+
idCommitmentBigIntLimit.toString()
|
99
|
+
);
|
100
|
+
|
101
|
+
instance.validateRateLimit(instance.rateLimit);
|
102
|
+
return instance;
|
61
103
|
}
|
62
104
|
|
63
105
|
/**
|
@@ -82,21 +124,21 @@ export class RLNBaseContract {
|
|
82
124
|
}
|
83
125
|
|
84
126
|
/**
|
85
|
-
* Gets the minimum allowed rate limit
|
86
|
-
* @returns Promise<number> The minimum rate limit in messages per epoch
|
127
|
+
* Gets the minimum allowed rate limit (cached)
|
87
128
|
*/
|
88
|
-
public
|
89
|
-
|
90
|
-
|
129
|
+
public getMinRateLimit(): number {
|
130
|
+
if (this.minRateLimit === undefined)
|
131
|
+
throw new Error("minRateLimit not initialized");
|
132
|
+
return this.minRateLimit;
|
91
133
|
}
|
92
134
|
|
93
135
|
/**
|
94
|
-
* Gets the maximum allowed rate limit
|
95
|
-
* @returns Promise<number> The maximum rate limit in messages per epoch
|
136
|
+
* Gets the maximum allowed rate limit (cached)
|
96
137
|
*/
|
97
|
-
public
|
98
|
-
|
99
|
-
|
138
|
+
public getMaxRateLimit(): number {
|
139
|
+
if (this.maxRateLimit === undefined)
|
140
|
+
throw new Error("maxRateLimit not initialized");
|
141
|
+
return this.maxRateLimit;
|
100
142
|
}
|
101
143
|
|
102
144
|
/**
|
@@ -133,7 +175,7 @@ export class RLNBaseContract {
|
|
133
175
|
* Updates the rate limit for future registrations
|
134
176
|
* @param newRateLimit The new rate limit to use
|
135
177
|
*/
|
136
|
-
public
|
178
|
+
public setRateLimit(newRateLimit: number): void {
|
137
179
|
this.validateRateLimit(newRateLimit);
|
138
180
|
this.rateLimit = newRateLimit;
|
139
181
|
}
|
@@ -324,7 +366,7 @@ export class RLNBaseContract {
|
|
324
366
|
this.contract.on(
|
325
367
|
this.membersFilter,
|
326
368
|
(
|
327
|
-
_idCommitment:
|
369
|
+
_idCommitment: bigint,
|
328
370
|
_membershipRateLimit: ethers.BigNumber,
|
329
371
|
_index: ethers.BigNumber,
|
330
372
|
event: ethers.Event
|
@@ -336,7 +378,7 @@ export class RLNBaseContract {
|
|
336
378
|
this.contract.on(
|
337
379
|
this.membershipErasedFilter,
|
338
380
|
(
|
339
|
-
_idCommitment:
|
381
|
+
_idCommitment: bigint,
|
340
382
|
_membershipRateLimit: ethers.BigNumber,
|
341
383
|
_index: ethers.BigNumber,
|
342
384
|
event: ethers.Event
|
@@ -348,7 +390,7 @@ export class RLNBaseContract {
|
|
348
390
|
this.contract.on(
|
349
391
|
this.membersExpiredFilter,
|
350
392
|
(
|
351
|
-
_idCommitment:
|
393
|
+
_idCommitment: bigint,
|
352
394
|
_membershipRateLimit: ethers.BigNumber,
|
353
395
|
_index: ethers.BigNumber,
|
354
396
|
event: ethers.Event
|
@@ -358,94 +400,89 @@ export class RLNBaseContract {
|
|
358
400
|
);
|
359
401
|
}
|
360
402
|
|
361
|
-
/**
|
362
|
-
* Helper method to get remaining messages in current epoch
|
363
|
-
* @param membershipId The ID of the membership to check
|
364
|
-
* @returns number of remaining messages allowed in current epoch
|
365
|
-
*/
|
366
|
-
public async getRemainingMessages(membershipId: number): Promise<number> {
|
367
|
-
try {
|
368
|
-
const [startTime, , rateLimit] =
|
369
|
-
await this.contract.getMembershipInfo(membershipId);
|
370
|
-
|
371
|
-
// Calculate current epoch
|
372
|
-
const currentTime = Math.floor(Date.now() / 1000);
|
373
|
-
const epochsPassed = Math.floor(
|
374
|
-
(currentTime - startTime) / RATE_LIMIT_PARAMS.EPOCH_LENGTH
|
375
|
-
);
|
376
|
-
const currentEpochStart =
|
377
|
-
startTime + epochsPassed * RATE_LIMIT_PARAMS.EPOCH_LENGTH;
|
378
|
-
|
379
|
-
// Get message count in current epoch using contract's function
|
380
|
-
const messageCount = await this.contract.getMessageCount(
|
381
|
-
membershipId,
|
382
|
-
currentEpochStart
|
383
|
-
);
|
384
|
-
return Math.max(
|
385
|
-
0,
|
386
|
-
ethers.BigNumber.from(rateLimit)
|
387
|
-
.sub(ethers.BigNumber.from(messageCount))
|
388
|
-
.toNumber()
|
389
|
-
);
|
390
|
-
} catch (error) {
|
391
|
-
log.error(
|
392
|
-
`Error getting remaining messages: ${(error as Error).message}`
|
393
|
-
);
|
394
|
-
return 0; // Fail safe: assume no messages remaining on error
|
395
|
-
}
|
396
|
-
}
|
397
|
-
|
398
403
|
public async getMembershipInfo(
|
399
|
-
|
404
|
+
idCommitmentBigInt: bigint
|
400
405
|
): Promise<MembershipInfo | undefined> {
|
401
406
|
try {
|
402
|
-
const
|
403
|
-
await this.contract.
|
407
|
+
const membershipData =
|
408
|
+
await this.contract.memberships(idCommitmentBigInt);
|
404
409
|
const currentBlock = await this.contract.provider.getBlockNumber();
|
410
|
+
const [
|
411
|
+
depositAmount,
|
412
|
+
activeDuration,
|
413
|
+
gracePeriodStartTimestamp,
|
414
|
+
gracePeriodDuration,
|
415
|
+
rateLimit,
|
416
|
+
index,
|
417
|
+
holder,
|
418
|
+
token
|
419
|
+
] = membershipData;
|
420
|
+
|
421
|
+
const gracePeriodEnd = gracePeriodStartTimestamp.add(gracePeriodDuration);
|
405
422
|
|
406
423
|
let state: MembershipState;
|
407
|
-
if (currentBlock <
|
424
|
+
if (currentBlock < gracePeriodStartTimestamp.toNumber()) {
|
408
425
|
state = MembershipState.Active;
|
409
|
-
} else if (currentBlock <
|
426
|
+
} else if (currentBlock < gracePeriodEnd.toNumber()) {
|
410
427
|
state = MembershipState.GracePeriod;
|
411
428
|
} else {
|
412
429
|
state = MembershipState.Expired;
|
413
430
|
}
|
414
431
|
|
415
|
-
const index = await this.getMemberIndex(idCommitment);
|
416
|
-
if (!index) return undefined;
|
417
|
-
|
418
432
|
return {
|
419
433
|
index,
|
420
|
-
idCommitment,
|
421
|
-
rateLimit: rateLimit
|
422
|
-
startBlock:
|
423
|
-
endBlock:
|
424
|
-
state
|
434
|
+
idCommitment: idCommitmentBigInt.toString(),
|
435
|
+
rateLimit: Number(rateLimit),
|
436
|
+
startBlock: gracePeriodStartTimestamp.toNumber(),
|
437
|
+
endBlock: gracePeriodEnd.toNumber(),
|
438
|
+
state,
|
439
|
+
depositAmount,
|
440
|
+
activeDuration,
|
441
|
+
gracePeriodDuration,
|
442
|
+
holder,
|
443
|
+
token
|
425
444
|
};
|
426
445
|
} catch (error) {
|
446
|
+
log.error("Error in getMembershipInfo:", error);
|
427
447
|
return undefined;
|
428
448
|
}
|
429
449
|
}
|
430
450
|
|
431
451
|
public async extendMembership(
|
432
|
-
|
452
|
+
idCommitmentBigInt: bigint
|
433
453
|
): Promise<ethers.ContractTransaction> {
|
434
|
-
|
454
|
+
const tx = await this.contract.extendMemberships([idCommitmentBigInt]);
|
455
|
+
await tx.wait();
|
456
|
+
return tx;
|
435
457
|
}
|
436
458
|
|
437
459
|
public async eraseMembership(
|
438
|
-
|
460
|
+
idCommitmentBigInt: bigint,
|
439
461
|
eraseFromMembershipSet: boolean = true
|
440
462
|
): Promise<ethers.ContractTransaction> {
|
441
|
-
|
442
|
-
|
443
|
-
|
463
|
+
if (
|
464
|
+
!(await this.isExpired(idCommitmentBigInt)) ||
|
465
|
+
!(await this.isInGracePeriod(idCommitmentBigInt))
|
466
|
+
) {
|
467
|
+
throw new Error("Membership is not expired or in grace period");
|
468
|
+
}
|
469
|
+
|
470
|
+
const estimatedGas = await this.contract.estimateGas[
|
471
|
+
"eraseMemberships(uint256[],bool)"
|
472
|
+
]([idCommitmentBigInt], eraseFromMembershipSet);
|
473
|
+
const gasLimit = estimatedGas.add(10000);
|
474
|
+
|
475
|
+
const tx = await this.contract["eraseMemberships(uint256[],bool)"](
|
476
|
+
[idCommitmentBigInt],
|
477
|
+
eraseFromMembershipSet,
|
478
|
+
{ gasLimit }
|
444
479
|
);
|
480
|
+
await tx.wait();
|
481
|
+
return tx;
|
445
482
|
}
|
446
483
|
|
447
484
|
public async registerMembership(
|
448
|
-
|
485
|
+
idCommitmentBigInt: bigint,
|
449
486
|
rateLimit: number = DEFAULT_RATE_LIMIT
|
450
487
|
): Promise<ethers.ContractTransaction> {
|
451
488
|
if (
|
@@ -456,12 +493,12 @@ export class RLNBaseContract {
|
|
456
493
|
`Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE}`
|
457
494
|
);
|
458
495
|
}
|
459
|
-
return this.contract.register(
|
496
|
+
return this.contract.register(idCommitmentBigInt, rateLimit, []);
|
460
497
|
}
|
461
498
|
|
462
|
-
public async withdraw(token: string,
|
499
|
+
public async withdraw(token: string, walletAddress: string): Promise<void> {
|
463
500
|
try {
|
464
|
-
const tx = await this.contract.withdraw(token,
|
501
|
+
const tx = await this.contract.withdraw(token, walletAddress);
|
465
502
|
await tx.wait();
|
466
503
|
} catch (error) {
|
467
504
|
log.error(`Error in withdraw: ${(error as Error).message}`);
|
@@ -478,7 +515,7 @@ export class RLNBaseContract {
|
|
478
515
|
|
479
516
|
// Check if the ID commitment is already registered
|
480
517
|
const existingIndex = await this.getMemberIndex(
|
481
|
-
identity.IDCommitmentBigInt
|
518
|
+
identity.IDCommitmentBigInt
|
482
519
|
);
|
483
520
|
if (existingIndex) {
|
484
521
|
throw new Error(
|
@@ -516,7 +553,7 @@ export class RLNBaseContract {
|
|
516
553
|
}
|
517
554
|
|
518
555
|
const memberRegistered = txRegisterReceipt.events?.find(
|
519
|
-
(event) => event.event === "MembershipRegistered"
|
556
|
+
(event: ethers.Event) => event.event === "MembershipRegistered"
|
520
557
|
);
|
521
558
|
|
522
559
|
if (!memberRegistered || !memberRegistered.args) {
|
@@ -610,7 +647,7 @@ export class RLNBaseContract {
|
|
610
647
|
const txRegisterReceipt = await txRegisterResponse.wait();
|
611
648
|
|
612
649
|
const memberRegistered = txRegisterReceipt.events?.find(
|
613
|
-
(event) => event.event === "MembershipRegistered"
|
650
|
+
(event: ethers.Event) => event.event === "MembershipRegistered"
|
614
651
|
);
|
615
652
|
|
616
653
|
if (!memberRegistered || !memberRegistered.args) {
|
@@ -653,16 +690,16 @@ export class RLNBaseContract {
|
|
653
690
|
}
|
654
691
|
|
655
692
|
/**
|
656
|
-
* Validates that the rate limit is within the allowed range
|
693
|
+
* Validates that the rate limit is within the allowed range (sync)
|
657
694
|
* @throws Error if the rate limit is outside the allowed range
|
658
695
|
*/
|
659
696
|
private validateRateLimit(rateLimit: number): void {
|
660
|
-
if (
|
661
|
-
|
662
|
-
|
663
|
-
) {
|
697
|
+
if (this.minRateLimit === undefined || this.maxRateLimit === undefined) {
|
698
|
+
throw new Error("Rate limits not initialized");
|
699
|
+
}
|
700
|
+
if (rateLimit < this.minRateLimit || rateLimit > this.maxRateLimit) {
|
664
701
|
throw new Error(
|
665
|
-
`Rate limit must be between ${
|
702
|
+
`Rate limit must be between ${this.minRateLimit} and ${this.maxRateLimit} messages per epoch`
|
666
703
|
);
|
667
704
|
}
|
668
705
|
}
|
@@ -689,11 +726,11 @@ export class RLNBaseContract {
|
|
689
726
|
}
|
690
727
|
|
691
728
|
private async getMemberIndex(
|
692
|
-
|
729
|
+
idCommitmentBigInt: bigint
|
693
730
|
): Promise<ethers.BigNumber | undefined> {
|
694
731
|
try {
|
695
732
|
const events = await this.contract.queryFilter(
|
696
|
-
this.contract.filters.MembershipRegistered(
|
733
|
+
this.contract.filters.MembershipRegistered(idCommitmentBigInt)
|
697
734
|
);
|
698
735
|
if (events.length === 0) return undefined;
|
699
736
|
|
@@ -704,4 +741,45 @@ export class RLNBaseContract {
|
|
704
741
|
return undefined;
|
705
742
|
}
|
706
743
|
}
|
744
|
+
|
745
|
+
public async getMembershipStatus(
|
746
|
+
idCommitment: bigint
|
747
|
+
): Promise<"expired" | "grace" | "active"> {
|
748
|
+
const [isExpired, isInGrace] = await Promise.all([
|
749
|
+
this.contract.isExpired(idCommitment),
|
750
|
+
this.contract.isInGracePeriod(idCommitment)
|
751
|
+
]);
|
752
|
+
|
753
|
+
if (isExpired) return "expired";
|
754
|
+
if (isInGrace) return "grace";
|
755
|
+
return "active";
|
756
|
+
}
|
757
|
+
|
758
|
+
/**
|
759
|
+
* Checks if a membership is expired for the given idCommitment
|
760
|
+
* @param idCommitmentBigInt The idCommitment as bigint
|
761
|
+
* @returns Promise<boolean> True if expired, false otherwise
|
762
|
+
*/
|
763
|
+
public async isExpired(idCommitmentBigInt: bigint): Promise<boolean> {
|
764
|
+
try {
|
765
|
+
return await this.contract.isExpired(idCommitmentBigInt);
|
766
|
+
} catch (error) {
|
767
|
+
log.error("Error in isExpired:", error);
|
768
|
+
return false;
|
769
|
+
}
|
770
|
+
}
|
771
|
+
|
772
|
+
/**
|
773
|
+
* Checks if a membership is in grace period for the given idCommitment
|
774
|
+
* @param idCommitmentBigInt The idCommitment as bigint
|
775
|
+
* @returns Promise<boolean> True if in grace period, false otherwise
|
776
|
+
*/
|
777
|
+
public async isInGracePeriod(idCommitmentBigInt: bigint): Promise<boolean> {
|
778
|
+
try {
|
779
|
+
return await this.contract.isInGracePeriod(idCommitmentBigInt);
|
780
|
+
} catch (error) {
|
781
|
+
log.error("Error in isInGracePeriod:", error);
|
782
|
+
return false;
|
783
|
+
}
|
784
|
+
}
|
707
785
|
}
|
package/src/contract/types.ts
CHANGED
@@ -38,6 +38,11 @@ export interface MembershipInfo {
|
|
38
38
|
startBlock: number;
|
39
39
|
endBlock: number;
|
40
40
|
state: MembershipState;
|
41
|
+
depositAmount: ethers.BigNumber;
|
42
|
+
activeDuration: number;
|
43
|
+
gracePeriodDuration: number;
|
44
|
+
holder: string;
|
45
|
+
token: string;
|
41
46
|
}
|
42
47
|
|
43
48
|
export enum MembershipState {
|
@@ -80,7 +80,7 @@ export class RLNCredentialsManager {
|
|
80
80
|
|
81
81
|
this.credentials = credentials;
|
82
82
|
this.signer = signer!;
|
83
|
-
this.contract =
|
83
|
+
this.contract = await RLNBaseContract.create({
|
84
84
|
address: address!,
|
85
85
|
signer: signer!,
|
86
86
|
rateLimit: rateLimit ?? this.zerokit?.rateLimit
|
@@ -116,7 +116,9 @@ export class RLNCredentialsManager {
|
|
116
116
|
);
|
117
117
|
} else {
|
118
118
|
log.info("Using local implementation to generate identity");
|
119
|
-
identity = this.generateSeededIdentityCredential(
|
119
|
+
identity = await this.generateSeededIdentityCredential(
|
120
|
+
options.signature
|
121
|
+
);
|
120
122
|
}
|
121
123
|
}
|
122
124
|
|
@@ -249,7 +251,9 @@ export class RLNCredentialsManager {
|
|
249
251
|
* @param seed A string seed to generate the identity from
|
250
252
|
* @returns IdentityCredential
|
251
253
|
*/
|
252
|
-
private generateSeededIdentityCredential(
|
254
|
+
private async generateSeededIdentityCredential(
|
255
|
+
seed: string
|
256
|
+
): Promise<IdentityCredential> {
|
253
257
|
log.info("Generating seeded identity credential");
|
254
258
|
// Convert the seed to bytes
|
255
259
|
const encoder = new TextEncoder();
|
@@ -260,15 +264,24 @@ export class RLNCredentialsManager {
|
|
260
264
|
const idTrapdoor = hmac(sha256, seedBytes, encoder.encode("IDTrapdoor"));
|
261
265
|
const idNullifier = hmac(sha256, seedBytes, encoder.encode("IDNullifier"));
|
262
266
|
|
263
|
-
// Generate IDSecretHash as a hash of IDTrapdoor and IDNullifier
|
264
267
|
const combinedBytes = new Uint8Array([...idTrapdoor, ...idNullifier]);
|
265
268
|
const idSecretHash = sha256(combinedBytes);
|
266
269
|
|
267
|
-
// Generate IDCommitment as a hash of IDSecretHash
|
268
270
|
const idCommitment = sha256(idSecretHash);
|
269
271
|
|
270
|
-
|
271
|
-
|
272
|
+
let idCommitmentBigInt = buildBigIntFromUint8Array(idCommitment);
|
273
|
+
if (!this.contract) {
|
274
|
+
throw Error("RLN contract is not initialized");
|
275
|
+
}
|
276
|
+
|
277
|
+
const idCommitmentBigIntLimit = this.contract.idCommitmentBigIntLimit;
|
278
|
+
|
279
|
+
if (idCommitmentBigInt >= idCommitmentBigIntLimit) {
|
280
|
+
log.warn(
|
281
|
+
`ID commitment is greater than Q, reducing it by Q(idCommitmentBigIntLimit): ${idCommitmentBigInt} % ${idCommitmentBigIntLimit}`
|
282
|
+
);
|
283
|
+
idCommitmentBigInt = idCommitmentBigInt % idCommitmentBigIntLimit;
|
284
|
+
}
|
272
285
|
|
273
286
|
log.info("Successfully generated identity credential");
|
274
287
|
return new IdentityCredential(
|