From 603a99b008c279b084a3ecea7051cb0766fde325 Mon Sep 17 00:00:00 2001 From: Sasha Date: Thu, 15 Feb 2024 23:56:26 +0100 Subject: [PATCH] decouple utils, remove global variables --- package-lock.json | 4 +-- src/contract/index.ts | 1 + src/{ => contract}/rln_contract.spec.ts | 0 src/{ => contract}/rln_contract.ts | 0 src/index.ts | 4 +-- src/rln.ts | 34 +++++++------------------ src/utils/bytes.ts | 18 +++++++++++++ src/utils/index.ts | 2 ++ src/{ => utils}/metamask.ts | 0 9 files changed, 34 insertions(+), 29 deletions(-) create mode 100644 src/contract/index.ts rename src/{ => contract}/rln_contract.spec.ts (100%) rename src/{ => contract}/rln_contract.ts (100%) create mode 100644 src/utils/bytes.ts create mode 100644 src/utils/index.ts rename src/{ => utils}/metamask.ts (100%) diff --git a/package-lock.json b/package-lock.json index 0dbabc3..6beb0a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@waku/rln", - "version": "0.1.1", + "version": "0.1.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@waku/rln", - "version": "0.1.1", + "version": "0.1.2", "license": "MIT OR Apache-2.0", "dependencies": { "@chainsafe/bls-keystore": "^3.0.0", diff --git a/src/contract/index.ts b/src/contract/index.ts new file mode 100644 index 0000000..24ac169 --- /dev/null +++ b/src/contract/index.ts @@ -0,0 +1 @@ +export { RLNContract } from "./rln_contract.js"; diff --git a/src/rln_contract.spec.ts b/src/contract/rln_contract.spec.ts similarity index 100% rename from src/rln_contract.spec.ts rename to src/contract/rln_contract.spec.ts diff --git a/src/rln_contract.ts b/src/contract/rln_contract.ts similarity index 100% rename from src/rln_contract.ts rename to src/contract/rln_contract.ts diff --git a/src/index.ts b/src/index.ts index d0eed69..923ab4c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,17 +4,17 @@ import { RLN_STORAGE_ABI, SEPOLIA_CONTRACT, } from "./constants.js"; +import { RLNContract } from "./contract/index.js"; import { createRLN } from "./create.js"; import { Keystore } from "./keystore/index.js"; -import { extractMetaMaskSigner } from "./metamask.js"; import { IdentityCredential, Proof, ProofMetadata, RLNInstance, } from "./rln.js"; -import { RLNContract } from "./rln_contract.js"; import { MerkleRootTracker } from "./root_tracker.js"; +import { extractMetaMaskSigner } from "./utils/index.js"; export { createRLN, diff --git a/src/rln.ts b/src/rln.ts index 373f881..7569d03 100644 --- a/src/rln.ts +++ b/src/rln.ts @@ -13,6 +13,7 @@ import { buildBigIntFromUint8Array, writeUIntLE } from "./byte_utils.js"; import type { RLNDecoder, RLNEncoder } from "./codec.js"; import { createRLNDecoder, createRLNEncoder } from "./codec.js"; import { SEPOLIA_CONTRACT } from "./constants.js"; +import { RLNContract } from "./contract/index.js"; import { dateToEpoch, epochIntToBytes } from "./epoch.js"; import { Keystore } from "./keystore/index.js"; import type { @@ -20,35 +21,11 @@ import type { EncryptedCredentials, } from "./keystore/index.js"; import { KeystoreEntity, Password } from "./keystore/types.js"; -import { extractMetaMaskSigner } from "./metamask.js"; import verificationKey from "./resources/verification_key.js"; -import { RLNContract } from "./rln_contract.js"; +import { concatenate, extractMetaMaskSigner } from "./utils/index.js"; import * as wc from "./witness_calculator.js"; import { WitnessCalculator } from "./witness_calculator.js"; -/** - * Concatenate Uint8Arrays - * @param input - * @returns concatenation of all Uint8Array received as input - */ -function concatenate(...input: Uint8Array[]): Uint8Array { - let totalLength = 0; - for (const arr of input) { - totalLength += arr.length; - } - const result = new Uint8Array(totalLength); - let offset = 0; - for (const arr of input) { - result.set(arr, offset); - offset += arr.length; - } - return result; -} - -const stringEncoder = new TextEncoder(); - -const DEPTH = 20; - async function loadWitnessCalculator(): Promise { const url = new URL("./resources/rln.wasm", import.meta.url); const response = await fetch(url); @@ -68,10 +45,16 @@ async function loadZkey(): Promise { export async function create(): Promise { await (init as any)?.(); zerokitRLN.init_panic_hook(); + const witnessCalculator = await loadWitnessCalculator(); const zkey = await loadZkey(); + + const stringEncoder = new TextEncoder(); const vkey = stringEncoder.encode(JSON.stringify(verificationKey)); + + const DEPTH = 20; const zkRLN = zerokitRLN.newRLN(DEPTH, zkey, vkey); + return new RLNInstance(zkRLN, witnessCalculator); } @@ -405,6 +388,7 @@ export class RLNInstance { } generateSeededIdentityCredential(seed: string): IdentityCredential { + const stringEncoder = new TextEncoder(); const seedBytes = stringEncoder.encode(seed); // TODO: rename this function in zerokit rln-wasm const memKeys = zerokitRLN.generateSeededExtendedMembershipKey( diff --git a/src/utils/bytes.ts b/src/utils/bytes.ts new file mode 100644 index 0000000..bc00ff0 --- /dev/null +++ b/src/utils/bytes.ts @@ -0,0 +1,18 @@ +/** + * Concatenate Uint8Arrays + * @param input + * @returns concatenation of all Uint8Array received as input + */ +export function concatenate(...input: Uint8Array[]): Uint8Array { + let totalLength = 0; + for (const arr of input) { + totalLength += arr.length; + } + const result = new Uint8Array(totalLength); + let offset = 0; + for (const arr of input) { + result.set(arr, offset); + offset += arr.length; + } + return result; +} diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..2aebf9e --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,2 @@ +export { extractMetaMaskSigner } from "./metamask.js"; +export { concatenate } from "./bytes.js"; diff --git a/src/metamask.ts b/src/utils/metamask.ts similarity index 100% rename from src/metamask.ts rename to src/utils/metamask.ts