@waku/rln 0.1.5-9901863.0 → 0.1.5-a824fff.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/index.js +2 -1
- package/bundle/packages/rln/dist/contract/constants.js +2 -1
- package/bundle/packages/rln/dist/contract/rln_base_contract.js +70 -65
- package/bundle/packages/rln/dist/contract/rln_contract.js +1 -1
- package/bundle/packages/rln/dist/credentials_manager.js +10 -28
- package/bundle/packages/rln/dist/identity.js +0 -8
- package/bundle/packages/rln/dist/keystore/keystore.js +28 -15
- package/bundle/packages/rln/dist/utils/metamask.js +2 -2
- package/bundle/packages/rln/dist/zerokit.js +5 -5
- package/dist/.tsbuildinfo +1 -1
- package/dist/contract/constants.d.ts +1 -1
- package/dist/contract/constants.js +1 -1
- 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 +5 -11
- package/dist/contract/rln_base_contract.js +68 -63
- 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.d.ts +3 -9
- package/dist/credentials_manager.js +10 -28
- package/dist/credentials_manager.js.map +1 -1
- package/dist/identity.d.ts +0 -1
- package/dist/identity.js +0 -8
- package/dist/identity.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.d.ts +1 -0
- package/dist/keystore/keystore.js +28 -15
- package/dist/keystore/keystore.js.map +1 -1
- package/dist/keystore/types.d.ts +2 -2
- package/dist/rln.js.map +1 -1
- package/dist/zerokit.d.ts +3 -3
- package/dist/zerokit.js +5 -5
- package/dist/zerokit.js.map +1 -1
- package/package.json +1 -1
- package/src/contract/constants.ts +1 -1
- package/src/contract/index.ts +1 -0
- package/src/contract/rln_base_contract.ts +100 -93
- package/src/contract/types.ts +5 -0
- package/src/credentials_manager.ts +10 -34
- package/src/identity.ts +0 -9
- package/src/index.ts +3 -1
- package/src/keystore/keystore.ts +54 -29
- package/src/keystore/types.ts +2 -2
- package/src/rln.ts +1 -0
- package/src/zerokit.ts +3 -3
- package/bundle/_virtual/__node-resolve_empty.js +0 -6
- package/bundle/_virtual/_node-resolve_empty.js +0 -3
- package/bundle/_virtual/bn.js +0 -3
- package/bundle/_virtual/common.js +0 -3
- package/bundle/_virtual/common2.js +0 -3
- package/bundle/_virtual/hash.js +0 -3
- package/bundle/_virtual/inherits_browser.js +0 -3
- package/bundle/_virtual/ripemd.js +0 -3
- package/bundle/_virtual/sha.js +0 -3
- package/bundle/_virtual/sha3.js +0 -3
- package/bundle/_virtual/utils3.js +0 -3
- package/bundle/node_modules/@ethersproject/abi/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/abi/lib.esm/abi-coder.js +0 -96
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/abstract-coder.js +0 -148
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/address.js +0 -26
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/anonymous.js +0 -20
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/array.js +0 -210
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/boolean.js +0 -18
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/bytes.js +0 -30
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/fixed-bytes.js +0 -26
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/null.js +0 -22
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/number.js +0 -43
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/string.js +0 -19
- package/bundle/node_modules/@ethersproject/abi/lib.esm/coders/tuple.js +0 -58
- package/bundle/node_modules/@ethersproject/abi/lib.esm/fragments.js +0 -854
- package/bundle/node_modules/@ethersproject/abi/lib.esm/interface.js +0 -609
- package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/abstract-provider/lib.esm/index.js +0 -66
- package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/abstract-signer/lib.esm/index.js +0 -302
- package/bundle/node_modules/@ethersproject/address/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/address/lib.esm/index.js +0 -110
- package/bundle/node_modules/@ethersproject/base64/lib.esm/base64.js +0 -20
- package/bundle/node_modules/@ethersproject/basex/lib.esm/index.js +0 -120
- package/bundle/node_modules/@ethersproject/bignumber/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/bignumber/lib.esm/bignumber.js +0 -287
- package/bundle/node_modules/@ethersproject/bytes/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/bytes/lib.esm/index.js +0 -402
- package/bundle/node_modules/@ethersproject/constants/lib.esm/addresses.js +0 -3
- package/bundle/node_modules/@ethersproject/constants/lib.esm/bignumbers.js +0 -8
- package/bundle/node_modules/@ethersproject/constants/lib.esm/hashes.js +0 -3
- package/bundle/node_modules/@ethersproject/contracts/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/contracts/lib.esm/index.js +0 -893
- package/bundle/node_modules/@ethersproject/hash/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/decoder.js +0 -256
- package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/include.js +0 -36
- package/bundle/node_modules/@ethersproject/hash/lib.esm/ens-normalize/lib.js +0 -135
- package/bundle/node_modules/@ethersproject/hash/lib.esm/id.js +0 -8
- package/bundle/node_modules/@ethersproject/hash/lib.esm/namehash.js +0 -64
- package/bundle/node_modules/@ethersproject/hash/lib.esm/typed-data.js +0 -443
- package/bundle/node_modules/@ethersproject/keccak256/lib.esm/index.js +0 -8
- package/bundle/node_modules/@ethersproject/keccak256/node_modules/js-sha3/src/sha3.js +0 -660
- package/bundle/node_modules/@ethersproject/logger/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/logger/lib.esm/index.js +0 -352
- package/bundle/node_modules/@ethersproject/networks/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/networks/lib.esm/index.js +0 -248
- package/bundle/node_modules/@ethersproject/properties/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/properties/lib.esm/index.js +0 -127
- package/bundle/node_modules/@ethersproject/providers/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/providers/lib.esm/base-provider.js +0 -2007
- package/bundle/node_modules/@ethersproject/providers/lib.esm/formatter.js +0 -422
- package/bundle/node_modules/@ethersproject/providers/lib.esm/json-rpc-provider.js +0 -674
- package/bundle/node_modules/@ethersproject/providers/lib.esm/web3-provider.js +0 -132
- package/bundle/node_modules/@ethersproject/rlp/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/rlp/lib.esm/index.js +0 -120
- package/bundle/node_modules/@ethersproject/sha2/lib.esm/sha2.js +0 -8
- package/bundle/node_modules/@ethersproject/signing-key/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/signing-key/lib.esm/elliptic.js +0 -2430
- package/bundle/node_modules/@ethersproject/signing-key/lib.esm/index.js +0 -76
- package/bundle/node_modules/@ethersproject/strings/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/strings/lib.esm/utf8.js +0 -219
- package/bundle/node_modules/@ethersproject/transactions/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/transactions/lib.esm/index.js +0 -279
- package/bundle/node_modules/@ethersproject/web/lib.esm/_version.js +0 -3
- package/bundle/node_modules/@ethersproject/web/lib.esm/geturl.js +0 -69
- package/bundle/node_modules/@ethersproject/web/lib.esm/index.js +0 -404
- package/bundle/node_modules/bech32/index.js +0 -187
- package/bundle/node_modules/bn.js/lib/bn.js +0 -3361
- package/bundle/node_modules/hash.js/lib/hash/common.js +0 -97
- package/bundle/node_modules/hash.js/lib/hash/hmac.js +0 -51
- package/bundle/node_modules/hash.js/lib/hash/ripemd.js +0 -152
- package/bundle/node_modules/hash.js/lib/hash/sha/1.js +0 -81
- package/bundle/node_modules/hash.js/lib/hash/sha/224.js +0 -33
- package/bundle/node_modules/hash.js/lib/hash/sha/256.js +0 -113
- package/bundle/node_modules/hash.js/lib/hash/sha/384.js +0 -39
- package/bundle/node_modules/hash.js/lib/hash/sha/512.js +0 -336
- package/bundle/node_modules/hash.js/lib/hash/sha/common.js +0 -53
- package/bundle/node_modules/hash.js/lib/hash/sha.js +0 -14
- package/bundle/node_modules/hash.js/lib/hash/utils.js +0 -282
- package/bundle/node_modules/hash.js/lib/hash.js +0 -33
- package/bundle/node_modules/inherits/inherits_browser.js +0 -33
- package/bundle/node_modules/minimalistic-assert/index.js +0 -13
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/rln.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rln.js","sourceRoot":"","sources":["../src/rln.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAErD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAKjE,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;AAMnC,MAAM,OAAO,WAAY,SAAQ,qBAAqB;
|
1
|
+
{"version":3,"file":"rln.js","sourceRoot":"","sources":["../src/rln.ts"],"names":[],"mappings":"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"}
|
package/dist/zerokit.d.ts
CHANGED
@@ -4,11 +4,11 @@ import { WitnessCalculator } from "./resources/witness_calculator";
|
|
4
4
|
export declare class Zerokit {
|
5
5
|
private readonly zkRLN;
|
6
6
|
private readonly witnessCalculator;
|
7
|
-
private readonly
|
8
|
-
constructor(zkRLN: number, witnessCalculator: WitnessCalculator,
|
7
|
+
private readonly _rateLimit;
|
8
|
+
constructor(zkRLN: number, witnessCalculator: WitnessCalculator, _rateLimit?: number);
|
9
9
|
get getZkRLN(): number;
|
10
10
|
get getWitnessCalculator(): WitnessCalculator;
|
11
|
-
get
|
11
|
+
get rateLimit(): number;
|
12
12
|
generateIdentityCredentials(): IdentityCredential;
|
13
13
|
generateSeededIdentityCredential(seed: string): IdentityCredential;
|
14
14
|
insertMember(idCommitment: Uint8Array): void;
|
package/dist/zerokit.js
CHANGED
@@ -6,11 +6,11 @@ import { concatenate, dateToEpoch, epochIntToBytes, writeUIntLE } from "./utils/
|
|
6
6
|
export class Zerokit {
|
7
7
|
zkRLN;
|
8
8
|
witnessCalculator;
|
9
|
-
|
10
|
-
constructor(zkRLN, witnessCalculator,
|
9
|
+
_rateLimit;
|
10
|
+
constructor(zkRLN, witnessCalculator, _rateLimit = DEFAULT_RATE_LIMIT) {
|
11
11
|
this.zkRLN = zkRLN;
|
12
12
|
this.witnessCalculator = witnessCalculator;
|
13
|
-
this.
|
13
|
+
this._rateLimit = _rateLimit;
|
14
14
|
}
|
15
15
|
get getZkRLN() {
|
16
16
|
return this.zkRLN;
|
@@ -18,8 +18,8 @@ export class Zerokit {
|
|
18
18
|
get getWitnessCalculator() {
|
19
19
|
return this.witnessCalculator;
|
20
20
|
}
|
21
|
-
get
|
22
|
-
return this.
|
21
|
+
get rateLimit() {
|
22
|
+
return this._rateLimit;
|
23
23
|
}
|
24
24
|
generateIdentityCredentials() {
|
25
25
|
const memKeys = zerokitRLN.generateExtendedMembershipKey(this.zkRLN); // TODO: rename this function in zerokit rln-wasm
|
package/dist/zerokit.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"zerokit.js","sourceRoot":"","sources":["../src/zerokit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,MAAM,OAAO,OAAO;IAEC;IACA;IACA;IAHnB,YACmB,KAAa,EACb,iBAAoC,EACpC,
|
1
|
+
{"version":3,"file":"zerokit.js","sourceRoot":"","sources":["../src/zerokit.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"name":"@waku/rln","version":"0.1.5-
|
1
|
+
{"name":"@waku/rln","version":"0.1.5-a824fff.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","@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.33-a824fff.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.35-a824fff.0","@waku/utils":"0.0.23-a824fff.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"}}
|
package/src/contract/index.ts
CHANGED
@@ -33,15 +33,6 @@ export class RLNBaseContract {
|
|
33
33
|
* Allows injecting a mocked contract for testing purposes.
|
34
34
|
*/
|
35
35
|
public constructor(options: RLNContractInitOptions) {
|
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
|
-
|
45
36
|
const {
|
46
37
|
address,
|
47
38
|
signer,
|
@@ -49,15 +40,38 @@ export class RLNBaseContract {
|
|
49
40
|
contract
|
50
41
|
} = options;
|
51
42
|
|
52
|
-
|
43
|
+
log.info("Initializing RLNBaseContract", { address, rateLimit });
|
53
44
|
|
54
45
|
this.contract = contract || new ethers.Contract(address, RLN_ABI, signer);
|
55
46
|
this.rateLimit = rateLimit;
|
56
47
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
48
|
+
try {
|
49
|
+
log.info("Setting up event filters");
|
50
|
+
// Initialize event filters
|
51
|
+
this._membersFilter = this.contract.filters.MembershipRegistered();
|
52
|
+
this._membershipErasedFilter = this.contract.filters.MembershipErased();
|
53
|
+
this._membersExpiredFilter = this.contract.filters.MembershipExpired();
|
54
|
+
log.info("Event filters initialized successfully");
|
55
|
+
} catch (error) {
|
56
|
+
log.error("Failed to initialize event filters", { error });
|
57
|
+
throw new Error(
|
58
|
+
"Failed to initialize event filters: " + (error as Error).message
|
59
|
+
);
|
60
|
+
}
|
61
|
+
|
62
|
+
// Initialize members and subscriptions
|
63
|
+
this.fetchMembers()
|
64
|
+
.then(() => {
|
65
|
+
this.subscribeToMembers();
|
66
|
+
})
|
67
|
+
.catch((error) => {
|
68
|
+
log.error("Failed to initialize members", { error });
|
69
|
+
});
|
70
|
+
|
71
|
+
// Validate rate limit asynchronously
|
72
|
+
this.validateRateLimit(rateLimit).catch((error) => {
|
73
|
+
log.error("Failed to validate initial rate limit", { error });
|
74
|
+
});
|
61
75
|
}
|
62
76
|
|
63
77
|
/**
|
@@ -134,7 +148,7 @@ export class RLNBaseContract {
|
|
134
148
|
* @param newRateLimit The new rate limit to use
|
135
149
|
*/
|
136
150
|
public async setRateLimit(newRateLimit: number): Promise<void> {
|
137
|
-
this.validateRateLimit(newRateLimit);
|
151
|
+
await this.validateRateLimit(newRateLimit);
|
138
152
|
this.rateLimit = newRateLimit;
|
139
153
|
}
|
140
154
|
|
@@ -324,7 +338,7 @@ export class RLNBaseContract {
|
|
324
338
|
this.contract.on(
|
325
339
|
this.membersFilter,
|
326
340
|
(
|
327
|
-
_idCommitment:
|
341
|
+
_idCommitment: bigint,
|
328
342
|
_membershipRateLimit: ethers.BigNumber,
|
329
343
|
_index: ethers.BigNumber,
|
330
344
|
event: ethers.Event
|
@@ -336,7 +350,7 @@ export class RLNBaseContract {
|
|
336
350
|
this.contract.on(
|
337
351
|
this.membershipErasedFilter,
|
338
352
|
(
|
339
|
-
_idCommitment:
|
353
|
+
_idCommitment: bigint,
|
340
354
|
_membershipRateLimit: ethers.BigNumber,
|
341
355
|
_index: ethers.BigNumber,
|
342
356
|
event: ethers.Event
|
@@ -348,7 +362,7 @@ export class RLNBaseContract {
|
|
348
362
|
this.contract.on(
|
349
363
|
this.membersExpiredFilter,
|
350
364
|
(
|
351
|
-
_idCommitment:
|
365
|
+
_idCommitment: bigint,
|
352
366
|
_membershipRateLimit: ethers.BigNumber,
|
353
367
|
_index: ethers.BigNumber,
|
354
368
|
event: ethers.Event
|
@@ -358,94 +372,82 @@ export class RLNBaseContract {
|
|
358
372
|
);
|
359
373
|
}
|
360
374
|
|
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
375
|
public async getMembershipInfo(
|
399
|
-
|
376
|
+
idCommitmentBigInt: bigint
|
400
377
|
): Promise<MembershipInfo | undefined> {
|
401
378
|
try {
|
402
|
-
const
|
403
|
-
await this.contract.
|
379
|
+
const membershipData =
|
380
|
+
await this.contract.memberships(idCommitmentBigInt);
|
404
381
|
const currentBlock = await this.contract.provider.getBlockNumber();
|
382
|
+
const [
|
383
|
+
depositAmount,
|
384
|
+
activeDuration,
|
385
|
+
gracePeriodStartTimestamp,
|
386
|
+
gracePeriodDuration,
|
387
|
+
rateLimit,
|
388
|
+
index,
|
389
|
+
holder,
|
390
|
+
token
|
391
|
+
] = membershipData;
|
392
|
+
|
393
|
+
const gracePeriodEnd = gracePeriodStartTimestamp.add(gracePeriodDuration);
|
405
394
|
|
406
395
|
let state: MembershipState;
|
407
|
-
if (currentBlock <
|
396
|
+
if (currentBlock < gracePeriodStartTimestamp.toNumber()) {
|
408
397
|
state = MembershipState.Active;
|
409
|
-
} else if (currentBlock <
|
398
|
+
} else if (currentBlock < gracePeriodEnd.toNumber()) {
|
410
399
|
state = MembershipState.GracePeriod;
|
411
400
|
} else {
|
412
401
|
state = MembershipState.Expired;
|
413
402
|
}
|
414
403
|
|
415
|
-
const index = await this.getMemberIndex(idCommitment);
|
416
|
-
if (!index) return undefined;
|
417
|
-
|
418
404
|
return {
|
419
405
|
index,
|
420
|
-
idCommitment,
|
421
|
-
rateLimit: rateLimit
|
422
|
-
startBlock:
|
423
|
-
endBlock:
|
424
|
-
state
|
406
|
+
idCommitment: idCommitmentBigInt.toString(),
|
407
|
+
rateLimit: Number(rateLimit),
|
408
|
+
startBlock: gracePeriodStartTimestamp.toNumber(),
|
409
|
+
endBlock: gracePeriodEnd.toNumber(),
|
410
|
+
state,
|
411
|
+
depositAmount,
|
412
|
+
activeDuration,
|
413
|
+
gracePeriodDuration,
|
414
|
+
holder,
|
415
|
+
token
|
425
416
|
};
|
426
417
|
} catch (error) {
|
418
|
+
log.error("Error in getMembershipInfo:", error);
|
427
419
|
return undefined;
|
428
420
|
}
|
429
421
|
}
|
430
422
|
|
431
423
|
public async extendMembership(
|
432
|
-
|
424
|
+
idCommitmentBigInt: bigint
|
433
425
|
): Promise<ethers.ContractTransaction> {
|
434
|
-
|
426
|
+
const tx = await this.contract.extendMemberships([idCommitmentBigInt]);
|
427
|
+
await tx.wait();
|
428
|
+
return tx;
|
435
429
|
}
|
436
430
|
|
437
431
|
public async eraseMembership(
|
438
|
-
|
432
|
+
idCommitmentBigInt: bigint,
|
439
433
|
eraseFromMembershipSet: boolean = true
|
440
434
|
): Promise<ethers.ContractTransaction> {
|
441
|
-
|
442
|
-
[
|
443
|
-
|
435
|
+
const estimatedGas = await this.contract.estimateGas[
|
436
|
+
"eraseMemberships(uint256[],bool)"
|
437
|
+
]([idCommitmentBigInt], eraseFromMembershipSet);
|
438
|
+
const gasLimit = estimatedGas.add(10000);
|
439
|
+
|
440
|
+
const tx = await this.contract["eraseMemberships(uint256[],bool)"](
|
441
|
+
[idCommitmentBigInt],
|
442
|
+
eraseFromMembershipSet,
|
443
|
+
{ gasLimit }
|
444
444
|
);
|
445
|
+
await tx.wait();
|
446
|
+
return tx;
|
445
447
|
}
|
446
448
|
|
447
449
|
public async registerMembership(
|
448
|
-
|
450
|
+
idCommitmentBigInt: bigint,
|
449
451
|
rateLimit: number = DEFAULT_RATE_LIMIT
|
450
452
|
): Promise<ethers.ContractTransaction> {
|
451
453
|
if (
|
@@ -456,12 +458,12 @@ export class RLNBaseContract {
|
|
456
458
|
`Rate limit must be between ${RATE_LIMIT_PARAMS.MIN_RATE} and ${RATE_LIMIT_PARAMS.MAX_RATE}`
|
457
459
|
);
|
458
460
|
}
|
459
|
-
return this.contract.register(
|
461
|
+
return this.contract.register(idCommitmentBigInt, rateLimit, []);
|
460
462
|
}
|
461
463
|
|
462
|
-
public async withdraw(token: string,
|
464
|
+
public async withdraw(token: string, from: string): Promise<void> {
|
463
465
|
try {
|
464
|
-
const tx = await this.contract.withdraw(token,
|
466
|
+
const tx = await this.contract.withdraw(token, from);
|
465
467
|
await tx.wait();
|
466
468
|
} catch (error) {
|
467
469
|
log.error(`Error in withdraw: ${(error as Error).message}`);
|
@@ -478,7 +480,7 @@ export class RLNBaseContract {
|
|
478
480
|
|
479
481
|
// Check if the ID commitment is already registered
|
480
482
|
const existingIndex = await this.getMemberIndex(
|
481
|
-
identity.IDCommitmentBigInt
|
483
|
+
identity.IDCommitmentBigInt
|
482
484
|
);
|
483
485
|
if (existingIndex) {
|
484
486
|
throw new Error(
|
@@ -516,7 +518,7 @@ export class RLNBaseContract {
|
|
516
518
|
}
|
517
519
|
|
518
520
|
const memberRegistered = txRegisterReceipt.events?.find(
|
519
|
-
(event) => event.event === "MembershipRegistered"
|
521
|
+
(event: ethers.Event) => event.event === "MembershipRegistered"
|
520
522
|
);
|
521
523
|
|
522
524
|
if (!memberRegistered || !memberRegistered.args) {
|
@@ -539,13 +541,13 @@ export class RLNBaseContract {
|
|
539
541
|
|
540
542
|
const network = await this.contract.provider.getNetwork();
|
541
543
|
const address = this.contract.address;
|
542
|
-
const membershipId = decodedData.index
|
544
|
+
const membershipId = Number(decodedData.index);
|
543
545
|
|
544
546
|
return {
|
545
547
|
identity,
|
546
548
|
membership: {
|
547
549
|
address,
|
548
|
-
treeIndex:
|
550
|
+
treeIndex: membershipId,
|
549
551
|
chainId: network.chainId.toString(),
|
550
552
|
rateLimit: decodedData.membershipRateLimit.toNumber()
|
551
553
|
}
|
@@ -610,7 +612,7 @@ export class RLNBaseContract {
|
|
610
612
|
const txRegisterReceipt = await txRegisterResponse.wait();
|
611
613
|
|
612
614
|
const memberRegistered = txRegisterReceipt.events?.find(
|
613
|
-
(event) => event.event === "MembershipRegistered"
|
615
|
+
(event: ethers.Event) => event.event === "MembershipRegistered"
|
614
616
|
);
|
615
617
|
|
616
618
|
if (!memberRegistered || !memberRegistered.args) {
|
@@ -633,13 +635,13 @@ export class RLNBaseContract {
|
|
633
635
|
|
634
636
|
const network = await this.contract.provider.getNetwork();
|
635
637
|
const address = this.contract.address;
|
636
|
-
const membershipId = decodedData.index
|
638
|
+
const membershipId = Number(decodedData.index);
|
637
639
|
|
638
640
|
return {
|
639
641
|
identity,
|
640
642
|
membership: {
|
641
643
|
address,
|
642
|
-
treeIndex:
|
644
|
+
treeIndex: membershipId,
|
643
645
|
chainId: network.chainId.toString(),
|
644
646
|
rateLimit: decodedData.membershipRateLimit.toNumber()
|
645
647
|
}
|
@@ -656,13 +658,18 @@ export class RLNBaseContract {
|
|
656
658
|
* Validates that the rate limit is within the allowed range
|
657
659
|
* @throws Error if the rate limit is outside the allowed range
|
658
660
|
*/
|
659
|
-
private validateRateLimit(rateLimit: number): void {
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
)
|
661
|
+
private async validateRateLimit(rateLimit: number): Promise<void> {
|
662
|
+
const [minRate, maxRate] = await Promise.all([
|
663
|
+
this.contract.minMembershipRateLimit(),
|
664
|
+
this.contract.maxMembershipRateLimit()
|
665
|
+
]);
|
666
|
+
|
667
|
+
const minRateNum = ethers.BigNumber.from(minRate).toNumber();
|
668
|
+
const maxRateNum = ethers.BigNumber.from(maxRate).toNumber();
|
669
|
+
|
670
|
+
if (rateLimit < minRateNum || rateLimit > maxRateNum) {
|
664
671
|
throw new Error(
|
665
|
-
`Rate limit must be between ${
|
672
|
+
`Rate limit must be between ${minRateNum} and ${maxRateNum} messages per epoch`
|
666
673
|
);
|
667
674
|
}
|
668
675
|
}
|
@@ -689,11 +696,11 @@ export class RLNBaseContract {
|
|
689
696
|
}
|
690
697
|
|
691
698
|
private async getMemberIndex(
|
692
|
-
|
699
|
+
idCommitmentBigInt: bigint
|
693
700
|
): Promise<ethers.BigNumber | undefined> {
|
694
701
|
try {
|
695
702
|
const events = await this.contract.queryFilter(
|
696
|
-
this.contract.filters.MembershipRegistered(
|
703
|
+
this.contract.filters.MembershipRegistered(idCommitmentBigInt)
|
697
704
|
);
|
698
705
|
if (events.length === 0) return undefined;
|
699
706
|
|
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 {
|
@@ -30,11 +30,11 @@ export class RLNCredentialsManager {
|
|
30
30
|
protected started = false;
|
31
31
|
protected starting = false;
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
public contract: undefined | RLNBaseContract;
|
34
|
+
public signer: undefined | ethers.Signer;
|
35
35
|
|
36
36
|
protected keystore = Keystore.create();
|
37
|
-
|
37
|
+
public credentials: undefined | DecryptedCredentials;
|
38
38
|
|
39
39
|
public zerokit: undefined | Zerokit;
|
40
40
|
|
@@ -43,30 +43,6 @@ export class RLNCredentialsManager {
|
|
43
43
|
this.zerokit = zerokit;
|
44
44
|
}
|
45
45
|
|
46
|
-
public get contract(): undefined | RLNBaseContract {
|
47
|
-
return this._contract;
|
48
|
-
}
|
49
|
-
|
50
|
-
public set contract(contract: RLNBaseContract | undefined) {
|
51
|
-
this._contract = contract;
|
52
|
-
}
|
53
|
-
|
54
|
-
public get signer(): undefined | ethers.Signer {
|
55
|
-
return this._signer;
|
56
|
-
}
|
57
|
-
|
58
|
-
public set signer(signer: ethers.Signer | undefined) {
|
59
|
-
this._signer = signer;
|
60
|
-
}
|
61
|
-
|
62
|
-
public get credentials(): undefined | DecryptedCredentials {
|
63
|
-
return this._credentials;
|
64
|
-
}
|
65
|
-
|
66
|
-
public set credentials(credentials: DecryptedCredentials | undefined) {
|
67
|
-
this._credentials = credentials;
|
68
|
-
}
|
69
|
-
|
70
46
|
public get provider(): undefined | ethers.providers.Provider {
|
71
47
|
return this.contract?.provider;
|
72
48
|
}
|
@@ -102,12 +78,12 @@ export class RLNCredentialsManager {
|
|
102
78
|
log.info("Using provided keystore");
|
103
79
|
}
|
104
80
|
|
105
|
-
this.
|
106
|
-
this.
|
107
|
-
this.
|
81
|
+
this.credentials = credentials;
|
82
|
+
this.signer = signer!;
|
83
|
+
this.contract = new RLNBaseContract({
|
108
84
|
address: address!,
|
109
85
|
signer: signer!,
|
110
|
-
rateLimit: rateLimit ?? this.zerokit?.
|
86
|
+
rateLimit: rateLimit ?? this.zerokit?.rateLimit
|
111
87
|
});
|
112
88
|
|
113
89
|
log.info("RLNCredentialsManager successfully started");
|
@@ -160,8 +136,8 @@ export class RLNCredentialsManager {
|
|
160
136
|
*/
|
161
137
|
public async useCredentials(id: string, password: Password): Promise<void> {
|
162
138
|
log.info(`Attempting to use credentials with ID: ${id}`);
|
163
|
-
this.
|
164
|
-
if (this.
|
139
|
+
this.credentials = await this.keystore?.readCredential(id, password);
|
140
|
+
if (this.credentials) {
|
165
141
|
log.info("Successfully loaded credentials");
|
166
142
|
} else {
|
167
143
|
log.warn("Failed to load credentials");
|
@@ -179,7 +155,7 @@ export class RLNCredentialsManager {
|
|
179
155
|
LINEA_CONTRACT.address;
|
180
156
|
|
181
157
|
if (address === LINEA_CONTRACT.address) {
|
182
|
-
chainId = LINEA_CONTRACT.chainId;
|
158
|
+
chainId = LINEA_CONTRACT.chainId.toString();
|
183
159
|
log.info(`Using Linea contract with chainId: ${chainId}`);
|
184
160
|
}
|
185
161
|
|
package/src/identity.ts
CHANGED
@@ -28,13 +28,4 @@ export class IdentityCredential {
|
|
28
28
|
idCommitmentBigInt
|
29
29
|
);
|
30
30
|
}
|
31
|
-
|
32
|
-
public toJSON(): Record<string, number[]> {
|
33
|
-
return {
|
34
|
-
idTrapdoor: Array.from(this.IDTrapdoor),
|
35
|
-
idNullifier: Array.from(this.IDNullifier),
|
36
|
-
idSecretHash: Array.from(this.IDSecretHash),
|
37
|
-
idCommitment: Array.from(this.IDCommitment)
|
38
|
-
};
|
39
|
-
}
|
40
31
|
}
|