@waku/rln 0.1.1 → 0.1.2-126bce3
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 +56178 -8761
- package/dist/codec.d.ts +7 -4
- package/dist/codec.js +15 -5
- package/dist/codec.js.map +1 -1
- package/dist/{constants.d.ts → contract/constants.d.ts} +2 -2
- package/dist/contract/constants.js +67 -0
- package/dist/contract/constants.js.map +1 -0
- package/dist/contract/index.d.ts +2 -0
- package/dist/contract/index.js +3 -0
- package/dist/contract/index.js.map +1 -0
- package/dist/contract/rln_contract.d.ts +46 -0
- package/dist/contract/rln_contract.js +211 -0
- package/dist/contract/rln_contract.js.map +1 -0
- package/dist/create.d.ts +2 -0
- package/dist/create.js +8 -0
- package/dist/create.js.map +1 -0
- package/dist/identity.d.ts +9 -0
- package/dist/identity.js +24 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.js +9 -12
- 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 +205 -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 +10 -4
- package/dist/message.js.map +1 -1
- package/dist/proof.d.ts +21 -0
- package/dist/proof.js +49 -0
- package/dist/proof.js.map +1 -0
- package/dist/resources/verification_key.d.ts +9 -9
- package/dist/resources/witness_calculator.js.map +1 -0
- package/dist/rln.d.ts +55 -46
- package/dist/rln.js +136 -183
- package/dist/rln.js.map +1 -1
- package/dist/root_tracker.js +5 -2
- package/dist/root_tracker.js.map +1 -1
- package/dist/utils/bytes.d.ts +20 -0
- package/dist/utils/bytes.js +64 -0
- package/dist/utils/bytes.js.map +1 -0
- package/dist/utils/epoch.js.map +1 -0
- package/dist/utils/hash.d.ts +2 -0
- package/dist/utils/hash.js +13 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/metamask.d.ts +2 -0
- package/dist/utils/metamask.js +12 -0
- package/dist/utils/metamask.js.map +1 -0
- package/dist/zerokit.d.ts +19 -0
- package/dist/zerokit.js +105 -0
- package/dist/zerokit.js.map +1 -0
- package/package.json +38 -28
- package/src/codec.ts +18 -9
- package/src/create.ts +9 -0
- package/src/identity.ts +27 -0
- package/src/index.ts +16 -18
- package/src/message.ts +9 -5
- package/src/proof.ts +67 -0
- package/src/rln.ts +220 -270
- package/src/root_tracker.ts +4 -1
- package/src/zerokit.ts +181 -0
- package/bundle/assets/rln_wasm_bg-6f96f821.wasm +0 -0
- package/dist/.tsbuildinfo +0 -1
- package/dist/byte_utils.d.ts +0 -1
- package/dist/byte_utils.js +0 -24
- package/dist/byte_utils.js.map +0 -1
- package/dist/constants.js +0 -14
- package/dist/constants.js.map +0 -1
- package/dist/epoch.js.map +0 -1
- package/dist/rln_contract.d.ts +0 -34
- package/dist/rln_contract.js +0 -159
- package/dist/rln_contract.js.map +0 -1
- package/dist/witness_calculator.js.map +0 -1
- package/src/byte_utils.ts +0 -39
- package/src/constants.ts +0 -14
- package/src/epoch.ts +0 -30
- package/src/rln_contract.ts +0 -268
- package/src/witness_calculator.d.ts +0 -8
- package/src/witness_calculator.js +0 -335
- /package/dist/{witness_calculator.d.ts → resources/witness_calculator.d.ts} +0 -0
- /package/dist/{witness_calculator.js → resources/witness_calculator.js} +0 -0
- /package/dist/{epoch.d.ts → utils/epoch.d.ts} +0 -0
- /package/dist/{epoch.js → utils/epoch.js} +0 -0
package/dist/rln.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rln.js","sourceRoot":"","sources":["../src/rln.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"rln.js","sourceRoot":"","sources":["../src/rln.ts"],"names":[],"mappings":"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"}
|
package/dist/root_tracker.js
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
class RootPerBlock {
|
2
|
+
root;
|
3
|
+
blockNumber;
|
2
4
|
constructor(root, blockNumber) {
|
3
5
|
this.root = root;
|
4
6
|
this.blockNumber = blockNumber;
|
@@ -6,10 +8,11 @@ class RootPerBlock {
|
|
6
8
|
}
|
7
9
|
const maxBufferSize = 20;
|
8
10
|
export class MerkleRootTracker {
|
11
|
+
acceptableRootWindowSize;
|
12
|
+
validMerkleRoots = new Array();
|
13
|
+
merkleRootBuffer = new Array();
|
9
14
|
constructor(acceptableRootWindowSize, initialRoot) {
|
10
15
|
this.acceptableRootWindowSize = acceptableRootWindowSize;
|
11
|
-
this.validMerkleRoots = new Array();
|
12
|
-
this.merkleRootBuffer = new Array();
|
13
16
|
this.pushRoot(0, initialRoot);
|
14
17
|
}
|
15
18
|
backFill(fromBlockNumber) {
|
package/dist/root_tracker.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"root_tracker.js","sourceRoot":"","sources":["../src/root_tracker.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY;
|
1
|
+
{"version":3,"file":"root_tracker.js","sourceRoot":"","sources":["../src/root_tracker.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
/**
|
2
|
+
* Concatenate Uint8Arrays
|
3
|
+
* @param input
|
4
|
+
* @returns concatenation of all Uint8Array received as input
|
5
|
+
*/
|
6
|
+
export declare function concatenate(...input: Uint8Array[]): Uint8Array;
|
7
|
+
export declare function writeUIntLE(buf: Uint8Array, value: number, offset: number, byteLength: number, noAssert?: boolean): Uint8Array;
|
8
|
+
/**
|
9
|
+
* Transforms Uint8Array into BigInt
|
10
|
+
* @param array: Uint8Array
|
11
|
+
* @returns BigInt
|
12
|
+
*/
|
13
|
+
export declare function buildBigIntFromUint8Array(array: Uint8Array, byteOffset?: number): bigint;
|
14
|
+
/**
|
15
|
+
* Fills with zeros to set length
|
16
|
+
* @param array little endian Uint8Array
|
17
|
+
* @param length amount to pad
|
18
|
+
* @returns little endian Uint8Array padded with zeros to set length
|
19
|
+
*/
|
20
|
+
export declare function zeroPadLE(array: Uint8Array, length: number): Uint8Array;
|
@@ -0,0 +1,64 @@
|
|
1
|
+
/**
|
2
|
+
* Concatenate Uint8Arrays
|
3
|
+
* @param input
|
4
|
+
* @returns concatenation of all Uint8Array received as input
|
5
|
+
*/
|
6
|
+
export function concatenate(...input) {
|
7
|
+
let totalLength = 0;
|
8
|
+
for (const arr of input) {
|
9
|
+
totalLength += arr.length;
|
10
|
+
}
|
11
|
+
const result = new Uint8Array(totalLength);
|
12
|
+
let offset = 0;
|
13
|
+
for (const arr of input) {
|
14
|
+
result.set(arr, offset);
|
15
|
+
offset += arr.length;
|
16
|
+
}
|
17
|
+
return result;
|
18
|
+
}
|
19
|
+
// Adapted from https://github.com/feross/buffer
|
20
|
+
function checkInt(buf, value, offset, ext, max, min) {
|
21
|
+
if (value > max || value < min)
|
22
|
+
throw new RangeError('"value" argument is out of bounds');
|
23
|
+
if (offset + ext > buf.length)
|
24
|
+
throw new RangeError("Index out of range");
|
25
|
+
}
|
26
|
+
export function writeUIntLE(buf, value, offset, byteLength, noAssert) {
|
27
|
+
value = +value;
|
28
|
+
offset = offset >>> 0;
|
29
|
+
byteLength = byteLength >>> 0;
|
30
|
+
if (!noAssert) {
|
31
|
+
const maxBytes = Math.pow(2, 8 * byteLength) - 1;
|
32
|
+
checkInt(buf, value, offset, byteLength, maxBytes, 0);
|
33
|
+
}
|
34
|
+
let mul = 1;
|
35
|
+
let i = 0;
|
36
|
+
buf[offset] = value & 0xff;
|
37
|
+
while (++i < byteLength && (mul *= 0x100)) {
|
38
|
+
buf[offset + i] = (value / mul) & 0xff;
|
39
|
+
}
|
40
|
+
return buf;
|
41
|
+
}
|
42
|
+
/**
|
43
|
+
* Transforms Uint8Array into BigInt
|
44
|
+
* @param array: Uint8Array
|
45
|
+
* @returns BigInt
|
46
|
+
*/
|
47
|
+
export function buildBigIntFromUint8Array(array, byteOffset = 0) {
|
48
|
+
const dataView = new DataView(array.buffer);
|
49
|
+
return dataView.getBigUint64(byteOffset, true);
|
50
|
+
}
|
51
|
+
/**
|
52
|
+
* Fills with zeros to set length
|
53
|
+
* @param array little endian Uint8Array
|
54
|
+
* @param length amount to pad
|
55
|
+
* @returns little endian Uint8Array padded with zeros to set length
|
56
|
+
*/
|
57
|
+
export function zeroPadLE(array, length) {
|
58
|
+
const result = new Uint8Array(length);
|
59
|
+
for (let i = 0; i < length; i++) {
|
60
|
+
result[i] = array[i] || 0;
|
61
|
+
}
|
62
|
+
return result;
|
63
|
+
}
|
64
|
+
//# sourceMappingURL=bytes.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/utils/bytes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG,KAAmB;IAChD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC;IAC5B,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gDAAgD;AAChD,SAAS,QAAQ,CACf,GAAe,EACf,KAAa,EACb,MAAc,EACd,GAAW,EACX,GAAW,EACX,GAAW;IAEX,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG;QAC5B,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC,CAAC;IAC5D,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM;QAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,GAAe,EACf,KAAa,EACb,MAAc,EACd,UAAkB,EAClB,QAAkB;IAElB,KAAK,GAAG,CAAC,KAAK,CAAC;IACf,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC;IACtB,UAAU,GAAG,UAAU,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACjD,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,CAAC,GAAG,UAAU,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;IACzC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAiB,EACjB,aAAqB,CAAC;IAEtB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAiB,EAAE,MAAc;IACzD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"epoch.js","sourceRoot":"","sources":["../../src/utils/epoch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,uBAAuB,GAAG,EAAE,CAAC,CAAC,wCAAwC;AAE5E,MAAM,GAAG,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAEpC,MAAM,UAAU,WAAW,CACzB,SAAe,EACf,mBAA2B,uBAAuB;IAElD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,gBAAgB,CAAC,CAAC;IACzD,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7B,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACpC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC;AACf,CAAC"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import * as zerokitRLN from "@waku/zerokit-rln-wasm";
|
2
|
+
import { concatenate, writeUIntLE } from "./bytes.js";
|
3
|
+
export function poseidonHash(...input) {
|
4
|
+
const inputLen = writeUIntLE(new Uint8Array(8), input.length, 0, 8);
|
5
|
+
const lenPrefixedData = concatenate(inputLen, ...input);
|
6
|
+
return zerokitRLN.poseidonHash(lenPrefixedData);
|
7
|
+
}
|
8
|
+
export function sha256(input) {
|
9
|
+
const inputLen = writeUIntLE(new Uint8Array(8), input.length, 0, 8);
|
10
|
+
const lenPrefixedData = concatenate(inputLen, input);
|
11
|
+
return zerokitRLN.hash(lenPrefixedData);
|
12
|
+
}
|
13
|
+
//# sourceMappingURL=hash.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,UAAU,YAAY,CAAC,GAAG,KAAwB;IACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC;IACxD,OAAO,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAiB;IACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1C,CAAC"}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
export { extractMetaMaskSigner } from "./metamask.js";
|
2
|
+
export { concatenate, writeUIntLE, buildBigIntFromUint8Array, zeroPadLE } from "./bytes.js";
|
3
|
+
export { sha256, poseidonHash } from "./hash.js";
|
4
|
+
export { dateToEpoch, epochIntToBytes, epochBytesToInt } from "./epoch.js";
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export { extractMetaMaskSigner } from "./metamask.js";
|
2
|
+
export { concatenate, writeUIntLE, buildBigIntFromUint8Array, zeroPadLE } from "./bytes.js";
|
3
|
+
export { sha256, poseidonHash } from "./hash.js";
|
4
|
+
export { dateToEpoch, epochIntToBytes, epochBytesToInt } from "./epoch.js";
|
5
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,WAAW,EACX,WAAW,EACX,yBAAyB,EACzB,SAAS,EACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { ethers } from "ethers";
|
2
|
+
export const extractMetaMaskSigner = async () => {
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
4
|
+
const ethereum = window.ethereum;
|
5
|
+
if (!ethereum) {
|
6
|
+
throw Error("Missing or invalid Ethereum provider. Please install a Web3 wallet such as MetaMask.");
|
7
|
+
}
|
8
|
+
await ethereum.request({ method: "eth_requestAccounts" });
|
9
|
+
const provider = new ethers.providers.Web3Provider(ethereum, "any");
|
10
|
+
return provider.getSigner();
|
11
|
+
};
|
12
|
+
//# sourceMappingURL=metamask.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"metamask.js","sourceRoot":"","sources":["../../src/utils/metamask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAA4B,EAAE;IACtE,8DAA8D;IAC9D,MAAM,QAAQ,GAAI,MAAc,CAAC,QAAQ,CAAC;IAE1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,CACT,sFAAsF,CACvF,CAAC;IACJ,CAAC;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"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import type { IRateLimitProof } from "@waku/interfaces";
|
2
|
+
import { IdentityCredential } from "./identity.js";
|
3
|
+
import { WitnessCalculator } from "./resources/witness_calculator.js";
|
4
|
+
export declare class Zerokit {
|
5
|
+
private zkRLN;
|
6
|
+
private witnessCalculator;
|
7
|
+
constructor(zkRLN: number, witnessCalculator: WitnessCalculator);
|
8
|
+
generateIdentityCredentials(): IdentityCredential;
|
9
|
+
generateSeededIdentityCredential(seed: string): IdentityCredential;
|
10
|
+
insertMember(idCommitment: Uint8Array): void;
|
11
|
+
insertMembers(index: number, ...idCommitments: Array<Uint8Array>): void;
|
12
|
+
deleteMember(index: number): void;
|
13
|
+
getMerkleRoot(): Uint8Array;
|
14
|
+
serializeMessage(uint8Msg: Uint8Array, memIndex: number, epoch: Uint8Array, idKey: Uint8Array): Uint8Array;
|
15
|
+
generateRLNProof(msg: Uint8Array, index: number, epoch: Uint8Array | Date | undefined, idSecretHash: Uint8Array): Promise<IRateLimitProof>;
|
16
|
+
verifyRLNProof(proof: IRateLimitProof | Uint8Array, msg: Uint8Array): boolean;
|
17
|
+
verifyWithRoots(proof: IRateLimitProof | Uint8Array, msg: Uint8Array, ...roots: Array<Uint8Array>): boolean;
|
18
|
+
verifyWithNoRoot(proof: IRateLimitProof | Uint8Array, msg: Uint8Array): boolean;
|
19
|
+
}
|
package/dist/zerokit.js
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
import * as zerokitRLN from "@waku/zerokit-rln-wasm";
|
2
|
+
import { IdentityCredential } from "./identity.js";
|
3
|
+
import { Proof, proofToBytes } from "./proof.js";
|
4
|
+
import { concatenate, dateToEpoch, epochIntToBytes, writeUIntLE } from "./utils/index.js";
|
5
|
+
export class Zerokit {
|
6
|
+
zkRLN;
|
7
|
+
witnessCalculator;
|
8
|
+
constructor(zkRLN, witnessCalculator) {
|
9
|
+
this.zkRLN = zkRLN;
|
10
|
+
this.witnessCalculator = witnessCalculator;
|
11
|
+
}
|
12
|
+
generateIdentityCredentials() {
|
13
|
+
const memKeys = zerokitRLN.generateExtendedMembershipKey(this.zkRLN); // TODO: rename this function in zerokit rln-wasm
|
14
|
+
return IdentityCredential.fromBytes(memKeys);
|
15
|
+
}
|
16
|
+
generateSeededIdentityCredential(seed) {
|
17
|
+
const stringEncoder = new TextEncoder();
|
18
|
+
const seedBytes = stringEncoder.encode(seed);
|
19
|
+
// TODO: rename this function in zerokit rln-wasm
|
20
|
+
const memKeys = zerokitRLN.generateSeededExtendedMembershipKey(this.zkRLN, seedBytes);
|
21
|
+
return IdentityCredential.fromBytes(memKeys);
|
22
|
+
}
|
23
|
+
insertMember(idCommitment) {
|
24
|
+
zerokitRLN.insertMember(this.zkRLN, idCommitment);
|
25
|
+
}
|
26
|
+
insertMembers(index, ...idCommitments) {
|
27
|
+
// serializes a seq of IDCommitments to a byte seq
|
28
|
+
// the order of serialization is |id_commitment_len<8>|id_commitment<var>|
|
29
|
+
const idCommitmentLen = writeUIntLE(new Uint8Array(8), idCommitments.length, 0, 8);
|
30
|
+
const idCommitmentBytes = concatenate(idCommitmentLen, ...idCommitments);
|
31
|
+
zerokitRLN.setLeavesFrom(this.zkRLN, index, idCommitmentBytes);
|
32
|
+
}
|
33
|
+
deleteMember(index) {
|
34
|
+
zerokitRLN.deleteLeaf(this.zkRLN, index);
|
35
|
+
}
|
36
|
+
getMerkleRoot() {
|
37
|
+
return zerokitRLN.getRoot(this.zkRLN);
|
38
|
+
}
|
39
|
+
serializeMessage(uint8Msg, memIndex, epoch, idKey) {
|
40
|
+
// calculate message length
|
41
|
+
const msgLen = writeUIntLE(new Uint8Array(8), uint8Msg.length, 0, 8);
|
42
|
+
// Converting index to LE bytes
|
43
|
+
const memIndexBytes = writeUIntLE(new Uint8Array(8), memIndex, 0, 8);
|
44
|
+
// [ id_key<32> | id_index<8> | epoch<32> | signal_len<8> | signal<var> ]
|
45
|
+
return concatenate(idKey, memIndexBytes, epoch, msgLen, uint8Msg);
|
46
|
+
}
|
47
|
+
async generateRLNProof(msg, index, epoch, idSecretHash) {
|
48
|
+
if (epoch == undefined) {
|
49
|
+
epoch = epochIntToBytes(dateToEpoch(new Date()));
|
50
|
+
}
|
51
|
+
else if (epoch instanceof Date) {
|
52
|
+
epoch = epochIntToBytes(dateToEpoch(epoch));
|
53
|
+
}
|
54
|
+
if (epoch.length != 32)
|
55
|
+
throw "invalid epoch";
|
56
|
+
if (idSecretHash.length != 32)
|
57
|
+
throw "invalid id secret hash";
|
58
|
+
if (index < 0)
|
59
|
+
throw "index must be >= 0";
|
60
|
+
const serialized_msg = this.serializeMessage(msg, index, epoch, idSecretHash);
|
61
|
+
const rlnWitness = zerokitRLN.getSerializedRLNWitness(this.zkRLN, serialized_msg);
|
62
|
+
const inputs = zerokitRLN.RLNWitnessToJson(this.zkRLN, rlnWitness);
|
63
|
+
const calculatedWitness = await this.witnessCalculator.calculateWitness(inputs, false); // no sanity check being used in zerokit
|
64
|
+
const proofBytes = zerokitRLN.generate_rln_proof_with_witness(this.zkRLN, calculatedWitness, rlnWitness);
|
65
|
+
return new Proof(proofBytes);
|
66
|
+
}
|
67
|
+
verifyRLNProof(proof, msg) {
|
68
|
+
let pBytes;
|
69
|
+
if (proof instanceof Uint8Array) {
|
70
|
+
pBytes = proof;
|
71
|
+
}
|
72
|
+
else {
|
73
|
+
pBytes = proofToBytes(proof);
|
74
|
+
}
|
75
|
+
// calculate message length
|
76
|
+
const msgLen = writeUIntLE(new Uint8Array(8), msg.length, 0, 8);
|
77
|
+
return zerokitRLN.verifyRLNProof(this.zkRLN, concatenate(pBytes, msgLen, msg));
|
78
|
+
}
|
79
|
+
verifyWithRoots(proof, msg, ...roots) {
|
80
|
+
let pBytes;
|
81
|
+
if (proof instanceof Uint8Array) {
|
82
|
+
pBytes = proof;
|
83
|
+
}
|
84
|
+
else {
|
85
|
+
pBytes = proofToBytes(proof);
|
86
|
+
}
|
87
|
+
// calculate message length
|
88
|
+
const msgLen = writeUIntLE(new Uint8Array(8), msg.length, 0, 8);
|
89
|
+
const rootsBytes = concatenate(...roots);
|
90
|
+
return zerokitRLN.verifyWithRoots(this.zkRLN, concatenate(pBytes, msgLen, msg), rootsBytes);
|
91
|
+
}
|
92
|
+
verifyWithNoRoot(proof, msg) {
|
93
|
+
let pBytes;
|
94
|
+
if (proof instanceof Uint8Array) {
|
95
|
+
pBytes = proof;
|
96
|
+
}
|
97
|
+
else {
|
98
|
+
pBytes = proofToBytes(proof);
|
99
|
+
}
|
100
|
+
// calculate message length
|
101
|
+
const msgLen = writeUIntLE(new Uint8Array(8), msg.length, 0, 8);
|
102
|
+
return zerokitRLN.verifyWithRoots(this.zkRLN, concatenate(pBytes, msgLen, msg), new Uint8Array());
|
103
|
+
}
|
104
|
+
}
|
105
|
+
//# sourceMappingURL=zerokit.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"zerokit.js","sourceRoot":"","sources":["../src/zerokit.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@waku/rln",
|
3
|
-
"version": "0.1.
|
3
|
+
"version": "0.1.2-126bce3",
|
4
4
|
"description": "Rate Limit Nullifier for js-waku",
|
5
5
|
"types": "./dist/index.d.ts",
|
6
6
|
"module": "./dist/index.js",
|
@@ -24,15 +24,14 @@
|
|
24
24
|
"scripts": {
|
25
25
|
"prepare": "husky install",
|
26
26
|
"build": "run-s build:**",
|
27
|
+
"build:codegen": "node ./scripts/schema_validator_codegen.js",
|
27
28
|
"build:tsc": "tsc",
|
28
29
|
"build:bundle": "rollup --config rollup.config.js",
|
29
30
|
"size": "npm run build && size-limit",
|
30
31
|
"fix": "run-s fix:*",
|
31
|
-
"fix:prettier": "prettier \"src/**/*.ts\" \"./*.json\" \"*.*js\" \".github/**/*.yml\" --write",
|
32
32
|
"fix:lint": "eslint src --ext .ts --ext .cjs --fix",
|
33
33
|
"test": "run-s test:*",
|
34
34
|
"test:lint": "eslint src --ext .ts",
|
35
|
-
"test:prettier": "prettier \"src/**/*.ts\" \"./*.json\" \"*.*js\" \".github/**/*.yml\" --list-different",
|
36
35
|
"test:spelling": "cspell \"{*.md,.github/*.md,src/**/*.ts}\"",
|
37
36
|
"test:tsc": "tsc -p tsconfig.dev.json",
|
38
37
|
"test:browser": "karma start karma.conf.cjs",
|
@@ -45,7 +44,7 @@
|
|
45
44
|
"crypto": false
|
46
45
|
},
|
47
46
|
"engines": {
|
48
|
-
"node": ">=
|
47
|
+
"node": ">=18"
|
49
48
|
},
|
50
49
|
"publishConfig": {
|
51
50
|
"access": "public",
|
@@ -59,55 +58,63 @@
|
|
59
58
|
"@size-limit/preset-big-lib": "^8.0.0",
|
60
59
|
"@types/app-root-path": "^1.2.4",
|
61
60
|
"@types/chai": "^4.2.15",
|
61
|
+
"@types/chai-as-promised": "^7.1.6",
|
62
62
|
"@types/chai-spies": "^1.0.3",
|
63
|
+
"@types/chai-subset": "^1.3.3",
|
63
64
|
"@types/debug": "^4.1.7",
|
65
|
+
"@types/deep-equal-in-any-order": "^1.0.1",
|
66
|
+
"@types/lodash": "^4.14.199",
|
64
67
|
"@types/mocha": "^9.1.0",
|
65
68
|
"@types/node": "^17.0.6",
|
66
69
|
"@types/tail": "^2.0.0",
|
67
70
|
"@types/uuid": "^8.3.0",
|
68
|
-
"@typescript-eslint/eslint-plugin": "^
|
69
|
-
"@typescript-eslint/parser": "^
|
71
|
+
"@typescript-eslint/eslint-plugin": "^6.6.0",
|
72
|
+
"@typescript-eslint/parser": "^6.21.0",
|
73
|
+
"@waku/interfaces": "^0.0.20",
|
74
|
+
"@waku/message-encryption": "^0.0.23",
|
70
75
|
"@web/rollup-plugin-import-meta-assets": "^1.0.7",
|
76
|
+
"ajv": "^8.12.0",
|
77
|
+
"ajv-formats": "^2.1.1",
|
71
78
|
"app-root-path": "^3.0.0",
|
72
79
|
"chai": "^4.3.4",
|
80
|
+
"chai-as-promised": "^7.1.1",
|
73
81
|
"chai-spies": "^1.0.0",
|
82
|
+
"chai-subset": "^1.6.0",
|
74
83
|
"cspell": "^5.14.0",
|
75
|
-
"
|
76
|
-
"eslint
|
84
|
+
"deep-equal-in-any-order": "^2.0.6",
|
85
|
+
"eslint": "^8.56.0",
|
86
|
+
"eslint-config-prettier": "^9.0.0",
|
77
87
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
78
|
-
"eslint-plugin-functional": "^
|
79
|
-
"eslint-plugin-import": "^2.
|
80
|
-
"eslint-plugin-prettier": "^
|
88
|
+
"eslint-plugin-functional": "^6.0.0",
|
89
|
+
"eslint-plugin-import": "^2.27.5",
|
90
|
+
"eslint-plugin-prettier": "^5.0.1",
|
81
91
|
"fast-check": "^2.25.0",
|
82
92
|
"gh-pages": "^3.2.3",
|
83
93
|
"husky": "^7.0.4",
|
84
94
|
"ignore-loader": "^0.1.2",
|
85
95
|
"isomorphic-fetch": "^3.0.0",
|
86
|
-
"@waku/interfaces": "^0.0.12",
|
87
|
-
"@waku/message-encryption": "^0.0.15",
|
88
|
-
"@waku/core": "^0.0.17",
|
89
96
|
"jsdom": "^19.0.0",
|
90
97
|
"jsdom-global": "^3.0.2",
|
91
|
-
"karma": "^6.
|
92
|
-
"karma-chrome-launcher": "^3.
|
98
|
+
"karma": "^6.4.2",
|
99
|
+
"karma-chrome-launcher": "^3.2.0",
|
100
|
+
"karma-firefox-launcher": "^2.1.2",
|
93
101
|
"karma-mocha": "^2.0.1",
|
94
|
-
"karma-
|
102
|
+
"karma-webkit-launcher": "^2.4.0",
|
103
|
+
"karma-webpack": "github:codymikol/karma-webpack#2337a82beb078c0d8e25ae8333a06249b8e72828",
|
95
104
|
"lint-staged": "^13.0.3",
|
96
105
|
"mocha": "10.1.0",
|
97
106
|
"npm-run-all": "^4.1.5",
|
98
107
|
"p-timeout": "^4.1.0",
|
99
|
-
"
|
108
|
+
"playwright": "^1.40.1",
|
100
109
|
"process": "^0.11.10",
|
101
|
-
"puppeteer": "^13.0.1",
|
102
|
-
"resolve-typescript-plugin": "^1.2.0",
|
103
110
|
"rollup": "^2.75.0",
|
104
111
|
"rollup-plugin-copy": "^3.4.0",
|
105
112
|
"size-limit": "^8.0.0",
|
106
113
|
"tail": "^2.2.0",
|
107
114
|
"ts-loader": "^9.3.1",
|
108
115
|
"ts-node": "^10.9.1",
|
109
|
-
"typedoc": "^0.
|
110
|
-
"typescript": "^
|
116
|
+
"typedoc": "^0.25.7",
|
117
|
+
"typescript": "^5.3.2"
|
111
118
|
},
|
112
119
|
"files": [
|
113
120
|
"dist",
|
@@ -123,14 +130,17 @@
|
|
123
130
|
"lint-staged": {
|
124
131
|
"*.ts": [
|
125
132
|
"eslint --fix"
|
126
|
-
],
|
127
|
-
"*.{ts,md,json,conf*.*js}": [
|
128
|
-
"prettier --write"
|
129
133
|
]
|
130
134
|
},
|
131
135
|
"dependencies": {
|
132
|
-
"@
|
133
|
-
"@waku/
|
134
|
-
"
|
136
|
+
"@chainsafe/bls-keystore": "^3.0.0",
|
137
|
+
"@waku/core": "^0.0.25",
|
138
|
+
"@waku/utils": "^0.0.13",
|
139
|
+
"@waku/zerokit-rln-wasm": "^0.0.13",
|
140
|
+
"debug": "^4.3.4",
|
141
|
+
"ethereum-cryptography": "^2.1.2",
|
142
|
+
"ethers": "^5.7.2",
|
143
|
+
"lodash": "^4.17.21",
|
144
|
+
"uuid": "^9.0.1"
|
135
145
|
}
|
136
146
|
}
|
package/src/codec.ts
CHANGED
@@ -4,12 +4,13 @@ import type {
|
|
4
4
|
IEncoder,
|
5
5
|
IMessage,
|
6
6
|
IProtoMessage,
|
7
|
-
IRateLimitProof
|
7
|
+
IRateLimitProof
|
8
8
|
} from "@waku/interfaces";
|
9
9
|
import debug from "debug";
|
10
10
|
|
11
|
+
import type { IdentityCredential } from "./identity.js";
|
11
12
|
import { RlnMessage, toRLNSignal } from "./message.js";
|
12
|
-
import {
|
13
|
+
import { RLNInstance } from "./rln.js";
|
13
14
|
|
14
15
|
const log = debug("waku:rln:encoder");
|
15
16
|
|
@@ -44,18 +45,19 @@ export class RLNEncoder implements IEncoder {
|
|
44
45
|
|
45
46
|
private async generateProof(message: IMessage): Promise<IRateLimitProof> {
|
46
47
|
const signal = toRLNSignal(this.contentTopic, message);
|
47
|
-
|
48
|
-
console.time("proof_gen_timer");
|
49
|
-
const proof = await this.rlnInstance.generateRLNProof(
|
48
|
+
const proof = await this.rlnInstance.zerokit.generateRLNProof(
|
50
49
|
signal,
|
51
50
|
this.index,
|
52
51
|
message.timestamp,
|
53
52
|
this.idSecretHash
|
54
53
|
);
|
55
|
-
console.timeEnd("proof_gen_timer");
|
56
54
|
return proof;
|
57
55
|
}
|
58
56
|
|
57
|
+
get pubsubTopic(): string {
|
58
|
+
return this.encoder.pubsubTopic;
|
59
|
+
}
|
60
|
+
|
59
61
|
get contentTopic(): string {
|
60
62
|
return this.encoder.contentTopic;
|
61
63
|
}
|
@@ -84,7 +86,14 @@ export const createRLNEncoder = (options: RLNEncoderOptions): RLNEncoder => {
|
|
84
86
|
export class RLNDecoder<T extends IDecodedMessage>
|
85
87
|
implements IDecoder<RlnMessage<T>>
|
86
88
|
{
|
87
|
-
constructor(
|
89
|
+
constructor(
|
90
|
+
private rlnInstance: RLNInstance,
|
91
|
+
private decoder: IDecoder<T>
|
92
|
+
) {}
|
93
|
+
|
94
|
+
get pubsubTopic(): string {
|
95
|
+
return this.decoder.pubsubTopic;
|
96
|
+
}
|
88
97
|
|
89
98
|
get contentTopic(): string {
|
90
99
|
return this.decoder.contentTopic;
|
@@ -97,11 +106,11 @@ export class RLNDecoder<T extends IDecodedMessage>
|
|
97
106
|
}
|
98
107
|
|
99
108
|
async fromProtoObj(
|
100
|
-
|
109
|
+
pubsubTopic: string,
|
101
110
|
proto: IProtoMessage
|
102
111
|
): Promise<RlnMessage<T> | undefined> {
|
103
112
|
const msg: T | undefined = await this.decoder.fromProtoObj(
|
104
|
-
|
113
|
+
pubsubTopic,
|
105
114
|
proto
|
106
115
|
);
|
107
116
|
if (!msg) return;
|
package/src/create.ts
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
import type { RLNInstance } from "./rln.js";
|
2
|
+
|
3
|
+
export async function createRLN(): Promise<RLNInstance> {
|
4
|
+
// A dependency graph that contains any wasm must all be imported
|
5
|
+
// asynchronously. This file does the single async import, so
|
6
|
+
// that no one else needs to worry about it again.
|
7
|
+
const rlnModule = await import("./rln.js");
|
8
|
+
return rlnModule.create();
|
9
|
+
}
|