@waku/rln 0.1.1-fa49e29 → 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 +69844 -44998
- package/dist/codec.d.ts +7 -4
- package/dist/codec.js +15 -5
- package/dist/codec.js.map +1 -1
- package/dist/{constants.js → contract/constants.js} +3 -3
- 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/{rln_contract.d.ts → contract/rln_contract.d.ts} +13 -11
- package/dist/{rln_contract.js → contract/rln_contract.js} +50 -33
- 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 +8 -5
- package/dist/index.js +8 -12
- package/dist/index.js.map +1 -1
- package/dist/keystore/cipher.js +1 -1
- package/dist/keystore/cipher.js.map +1 -1
- package/dist/keystore/credential_validation_generated.js.map +1 -1
- package/dist/keystore/index.d.ts +2 -0
- package/dist/keystore/index.js.map +1 -1
- package/dist/keystore/keystore.d.ts +11 -11
- package/dist/keystore/keystore.js +33 -21
- package/dist/keystore/keystore.js.map +1 -1
- package/dist/keystore/keystore_validation_generated.js.map +1 -1
- package/dist/keystore/schema_validator.js.map +1 -1
- package/dist/keystore/types.d.ts +25 -5
- package/dist/message.d.ts +1 -1
- package/dist/message.js +7 -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 +135 -174
- 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 +22 -27
- package/src/codec.ts +18 -9
- package/src/create.ts +9 -0
- package/src/identity.ts +27 -0
- package/src/index.ts +10 -19
- package/src/message.ts +5 -5
- package/src/proof.ts +67 -0
- package/src/rln.ts +219 -260
- 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 -7
- package/dist/byte_utils.js +0 -33
- package/dist/byte_utils.js.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/epoch.js.map +0 -1
- package/dist/rln_contract.js.map +0 -1
- package/dist/witness_calculator.js.map +0 -1
- package/src/byte_utils.ts +0 -49
- package/src/constants.ts +0 -68
- package/src/epoch.ts +0 -30
- package/src/rln_contract.ts +0 -346
- package/src/witness_calculator.d.ts +0 -8
- package/src/witness_calculator.js +0 -335
- /package/dist/{constants.d.ts → contract/constants.d.ts} +0 -0
- /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
CHANGED
@@ -1,29 +1,13 @@
|
|
1
|
-
import {
|
1
|
+
import { createDecoder, createEncoder } from "@waku/core";
|
2
|
+
import init from "@waku/zerokit-rln-wasm";
|
2
3
|
import * as zerokitRLN from "@waku/zerokit-rln-wasm";
|
3
|
-
import {
|
4
|
-
import {
|
4
|
+
import { createRLNDecoder, createRLNEncoder } from "./codec.js";
|
5
|
+
import { RLNContract, SEPOLIA_CONTRACT } from "./contract/index.js";
|
6
|
+
import { Keystore } from "./keystore/index.js";
|
5
7
|
import verificationKey from "./resources/verification_key.js";
|
6
|
-
import * as wc from "./witness_calculator.js";
|
7
|
-
|
8
|
-
|
9
|
-
* @param input
|
10
|
-
* @returns concatenation of all Uint8Array received as input
|
11
|
-
*/
|
12
|
-
function concatenate(...input) {
|
13
|
-
let totalLength = 0;
|
14
|
-
for (const arr of input) {
|
15
|
-
totalLength += arr.length;
|
16
|
-
}
|
17
|
-
const result = new Uint8Array(totalLength);
|
18
|
-
let offset = 0;
|
19
|
-
for (const arr of input) {
|
20
|
-
result.set(arr, offset);
|
21
|
-
offset += arr.length;
|
22
|
-
}
|
23
|
-
return result;
|
24
|
-
}
|
25
|
-
const stringEncoder = new TextEncoder();
|
26
|
-
const DEPTH = 20;
|
8
|
+
import * as wc from "./resources/witness_calculator.js";
|
9
|
+
import { extractMetaMaskSigner } from "./utils/index.js";
|
10
|
+
import { Zerokit } from "./zerokit.js";
|
27
11
|
async function loadWitnessCalculator() {
|
28
12
|
const url = new URL("./resources/rln.wasm", import.meta.url);
|
29
13
|
const response = await fetch(url);
|
@@ -39,172 +23,149 @@ async function loadZkey() {
|
|
39
23
|
* @returns RLNInstance
|
40
24
|
*/
|
41
25
|
export async function create() {
|
42
|
-
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
27
|
+
await init?.();
|
43
28
|
zerokitRLN.init_panic_hook();
|
44
29
|
const witnessCalculator = await loadWitnessCalculator();
|
45
30
|
const zkey = await loadZkey();
|
31
|
+
const stringEncoder = new TextEncoder();
|
46
32
|
const vkey = stringEncoder.encode(JSON.stringify(verificationKey));
|
33
|
+
const DEPTH = 20;
|
47
34
|
const zkRLN = zerokitRLN.newRLN(DEPTH, zkey, vkey);
|
48
|
-
|
49
|
-
|
50
|
-
export class IdentityCredential {
|
51
|
-
constructor(IDTrapdoor, IDNullifier, IDSecretHash, IDCommitment, IDCommitmentBigInt) {
|
52
|
-
this.IDTrapdoor = IDTrapdoor;
|
53
|
-
this.IDNullifier = IDNullifier;
|
54
|
-
this.IDSecretHash = IDSecretHash;
|
55
|
-
this.IDCommitment = IDCommitment;
|
56
|
-
this.IDCommitmentBigInt = IDCommitmentBigInt;
|
57
|
-
}
|
58
|
-
static fromBytes(memKeys) {
|
59
|
-
const idTrapdoor = memKeys.subarray(0, 32);
|
60
|
-
const idNullifier = memKeys.subarray(32, 64);
|
61
|
-
const idSecretHash = memKeys.subarray(64, 96);
|
62
|
-
const idCommitment = memKeys.subarray(96);
|
63
|
-
const idCommitmentBigInt = buildBigIntFromUint8Array(idCommitment);
|
64
|
-
return new IdentityCredential(idTrapdoor, idNullifier, idSecretHash, idCommitment, idCommitmentBigInt);
|
65
|
-
}
|
66
|
-
}
|
67
|
-
const proofOffset = 128;
|
68
|
-
const rootOffset = proofOffset + 32;
|
69
|
-
const epochOffset = rootOffset + 32;
|
70
|
-
const shareXOffset = epochOffset + 32;
|
71
|
-
const shareYOffset = shareXOffset + 32;
|
72
|
-
const nullifierOffset = shareYOffset + 32;
|
73
|
-
const rlnIdentifierOffset = nullifierOffset + 32;
|
74
|
-
export class ProofMetadata {
|
75
|
-
constructor(nullifier, shareX, shareY, externalNullifier) {
|
76
|
-
this.nullifier = nullifier;
|
77
|
-
this.shareX = shareX;
|
78
|
-
this.shareY = shareY;
|
79
|
-
this.externalNullifier = externalNullifier;
|
80
|
-
}
|
81
|
-
}
|
82
|
-
export class Proof {
|
83
|
-
constructor(proofBytes) {
|
84
|
-
if (proofBytes.length < rlnIdentifierOffset)
|
85
|
-
throw "invalid proof";
|
86
|
-
// parse the proof as proof<128> | share_y<32> | nullifier<32> | root<32> | epoch<32> | share_x<32> | rln_identifier<32>
|
87
|
-
this.proof = proofBytes.subarray(0, proofOffset);
|
88
|
-
this.merkleRoot = proofBytes.subarray(proofOffset, rootOffset);
|
89
|
-
this.epoch = proofBytes.subarray(rootOffset, epochOffset);
|
90
|
-
this.shareX = proofBytes.subarray(epochOffset, shareXOffset);
|
91
|
-
this.shareY = proofBytes.subarray(shareXOffset, shareYOffset);
|
92
|
-
this.nullifier = proofBytes.subarray(shareYOffset, nullifierOffset);
|
93
|
-
this.rlnIdentifier = proofBytes.subarray(nullifierOffset, rlnIdentifierOffset);
|
94
|
-
}
|
95
|
-
extractMetadata() {
|
96
|
-
const externalNullifier = poseidonHash(this.epoch, this.rlnIdentifier);
|
97
|
-
return new ProofMetadata(this.nullifier, this.shareX, this.shareY, externalNullifier);
|
98
|
-
}
|
99
|
-
}
|
100
|
-
export function proofToBytes(p) {
|
101
|
-
return concatenate(p.proof, p.merkleRoot, p.epoch, p.shareX, p.shareY, p.nullifier, p.rlnIdentifier);
|
102
|
-
}
|
103
|
-
export function poseidonHash(...input) {
|
104
|
-
const inputLen = writeUIntLE(new Uint8Array(8), input.length, 0, 8);
|
105
|
-
const lenPrefixedData = concatenate(inputLen, ...input);
|
106
|
-
return zerokitRLN.poseidonHash(lenPrefixedData);
|
107
|
-
}
|
108
|
-
export function sha256(input) {
|
109
|
-
const inputLen = writeUIntLE(new Uint8Array(8), input.length, 0, 8);
|
110
|
-
const lenPrefixedData = concatenate(inputLen, input);
|
111
|
-
return zerokitRLN.hash(lenPrefixedData);
|
35
|
+
const zerokit = new Zerokit(zkRLN, witnessCalculator);
|
36
|
+
return new RLNInstance(zerokit);
|
112
37
|
}
|
113
38
|
export class RLNInstance {
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
}
|
131
|
-
|
132
|
-
|
133
|
-
// the order of serialization is |id_commitment_len<8>|id_commitment<var>|
|
134
|
-
const idCommitmentLen = writeUIntLE(new Uint8Array(8), idCommitments.length, 0, 8);
|
135
|
-
const idCommitmentBytes = concatenate(idCommitmentLen, ...idCommitments);
|
136
|
-
zerokitRLN.setLeavesFrom(this.zkRLN, index, idCommitmentBytes);
|
137
|
-
}
|
138
|
-
deleteMember(index) {
|
139
|
-
zerokitRLN.deleteLeaf(this.zkRLN, index);
|
140
|
-
}
|
141
|
-
getMerkleRoot() {
|
142
|
-
return zerokitRLN.getRoot(this.zkRLN);
|
143
|
-
}
|
144
|
-
serializeMessage(uint8Msg, memIndex, epoch, idKey) {
|
145
|
-
// calculate message length
|
146
|
-
const msgLen = writeUIntLE(new Uint8Array(8), uint8Msg.length, 0, 8);
|
147
|
-
// Converting index to LE bytes
|
148
|
-
const memIndexBytes = writeUIntLE(new Uint8Array(8), memIndex, 0, 8);
|
149
|
-
// [ id_key<32> | id_index<8> | epoch<32> | signal_len<8> | signal<var> ]
|
150
|
-
return concatenate(idKey, memIndexBytes, epoch, msgLen, uint8Msg);
|
151
|
-
}
|
152
|
-
async generateRLNProof(msg, index, epoch, idSecretHash) {
|
153
|
-
if (epoch == undefined) {
|
154
|
-
epoch = epochIntToBytes(dateToEpoch(new Date()));
|
39
|
+
zerokit;
|
40
|
+
started = false;
|
41
|
+
starting = false;
|
42
|
+
_contract;
|
43
|
+
_signer;
|
44
|
+
keystore = Keystore.create();
|
45
|
+
_credentials;
|
46
|
+
constructor(zerokit) {
|
47
|
+
this.zerokit = zerokit;
|
48
|
+
}
|
49
|
+
get contract() {
|
50
|
+
return this._contract;
|
51
|
+
}
|
52
|
+
get signer() {
|
53
|
+
return this._signer;
|
54
|
+
}
|
55
|
+
async start(options = {}) {
|
56
|
+
if (this.started || this.starting) {
|
57
|
+
return;
|
155
58
|
}
|
156
|
-
|
157
|
-
|
59
|
+
this.starting = true;
|
60
|
+
try {
|
61
|
+
const { credentials, keystore } = await RLNInstance.decryptCredentialsIfNeeded(options.credentials);
|
62
|
+
const { signer, registryAddress } = await this.determineStartOptions(options, credentials);
|
63
|
+
if (keystore) {
|
64
|
+
this.keystore = keystore;
|
65
|
+
}
|
66
|
+
this._credentials = credentials;
|
67
|
+
this._signer = signer;
|
68
|
+
this._contract = await RLNContract.init(this, {
|
69
|
+
registryAddress: registryAddress,
|
70
|
+
signer: signer
|
71
|
+
});
|
72
|
+
this.started = true;
|
73
|
+
}
|
74
|
+
finally {
|
75
|
+
this.starting = false;
|
158
76
|
}
|
159
|
-
if (epoch.length != 32)
|
160
|
-
throw "invalid epoch";
|
161
|
-
if (idSecretHash.length != 32)
|
162
|
-
throw "invalid id secret hash";
|
163
|
-
if (index < 0)
|
164
|
-
throw "index must be >= 0";
|
165
|
-
const serialized_msg = this.serializeMessage(msg, index, epoch, idSecretHash);
|
166
|
-
const rlnWitness = zerokitRLN.getSerializedRLNWitness(this.zkRLN, serialized_msg);
|
167
|
-
const inputs = zerokitRLN.RLNWitnessToJson(this.zkRLN, rlnWitness);
|
168
|
-
const calculatedWitness = await this.witnessCalculator.calculateWitness(inputs, false); // no sanity check being used in zerokit
|
169
|
-
const proofBytes = zerokitRLN.generate_rln_proof_with_witness(this.zkRLN, calculatedWitness, rlnWitness);
|
170
|
-
return new Proof(proofBytes);
|
171
77
|
}
|
172
|
-
|
173
|
-
let
|
174
|
-
|
175
|
-
|
78
|
+
async determineStartOptions(options, credentials) {
|
79
|
+
let chainId = credentials?.membership.chainId;
|
80
|
+
const registryAddress = credentials?.membership.address ||
|
81
|
+
options.registryAddress ||
|
82
|
+
SEPOLIA_CONTRACT.address;
|
83
|
+
if (registryAddress === SEPOLIA_CONTRACT.address) {
|
84
|
+
chainId = SEPOLIA_CONTRACT.chainId;
|
176
85
|
}
|
177
|
-
|
178
|
-
|
86
|
+
const signer = options.signer || (await extractMetaMaskSigner());
|
87
|
+
const currentChainId = await signer.getChainId();
|
88
|
+
if (chainId && chainId !== currentChainId) {
|
89
|
+
throw Error(`Failed to start RLN contract, chain ID of contract is different from current one: contract-${chainId}, current network-${currentChainId}`);
|
179
90
|
}
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
if (
|
187
|
-
|
91
|
+
return {
|
92
|
+
signer,
|
93
|
+
registryAddress
|
94
|
+
};
|
95
|
+
}
|
96
|
+
static async decryptCredentialsIfNeeded(credentials) {
|
97
|
+
if (!credentials) {
|
98
|
+
return {};
|
188
99
|
}
|
189
|
-
|
190
|
-
|
100
|
+
if ("identity" in credentials) {
|
101
|
+
return { credentials };
|
191
102
|
}
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
103
|
+
const keystore = Keystore.fromString(credentials.keystore);
|
104
|
+
if (!keystore) {
|
105
|
+
return {};
|
106
|
+
}
|
107
|
+
const decryptedCredentials = await keystore.readCredential(credentials.id, credentials.password);
|
108
|
+
return {
|
109
|
+
keystore,
|
110
|
+
credentials: decryptedCredentials
|
111
|
+
};
|
112
|
+
}
|
113
|
+
async registerMembership(options) {
|
114
|
+
if (!this.contract) {
|
115
|
+
throw Error("RLN Contract is not initialized.");
|
116
|
+
}
|
117
|
+
let identity = "identity" in options && options.identity;
|
118
|
+
if ("signature" in options) {
|
119
|
+
identity = this.zerokit.generateSeededIdentityCredential(options.signature);
|
120
|
+
}
|
121
|
+
if (!identity) {
|
122
|
+
throw Error("Missing signature or identity to register membership.");
|
201
123
|
}
|
202
|
-
|
203
|
-
|
124
|
+
return this.contract.registerWithIdentity(identity);
|
125
|
+
}
|
126
|
+
/**
|
127
|
+
* Changes credentials in use by relying on provided Keystore earlier in rln.start
|
128
|
+
* @param id: string, hash of credentials to select from Keystore
|
129
|
+
* @param password: string or bytes to use to decrypt credentials from Keystore
|
130
|
+
*/
|
131
|
+
async useCredentials(id, password) {
|
132
|
+
this._credentials = await this.keystore?.readCredential(id, password);
|
133
|
+
}
|
134
|
+
async createEncoder(options) {
|
135
|
+
const { credentials: decryptedCredentials } = await RLNInstance.decryptCredentialsIfNeeded(options.credentials);
|
136
|
+
const credentials = decryptedCredentials || this._credentials;
|
137
|
+
if (!credentials) {
|
138
|
+
throw Error("Failed to create Encoder: missing RLN credentials. Use createRLNEncoder directly.");
|
204
139
|
}
|
205
|
-
|
206
|
-
|
207
|
-
|
140
|
+
await this.verifyCredentialsAgainstContract(credentials);
|
141
|
+
return createRLNEncoder({
|
142
|
+
encoder: createEncoder(options),
|
143
|
+
rlnInstance: this,
|
144
|
+
index: credentials.membership.treeIndex,
|
145
|
+
credential: credentials.identity
|
146
|
+
});
|
147
|
+
}
|
148
|
+
async verifyCredentialsAgainstContract(credentials) {
|
149
|
+
if (!this._contract) {
|
150
|
+
throw Error("Failed to verify chain coordinates: no contract initialized.");
|
151
|
+
}
|
152
|
+
const registryAddress = credentials.membership.address;
|
153
|
+
const currentRegistryAddress = this._contract.registry.address;
|
154
|
+
if (registryAddress !== currentRegistryAddress) {
|
155
|
+
throw Error(`Failed to verify chain coordinates: credentials contract address=${registryAddress} is not equal to registryContract address=${currentRegistryAddress}`);
|
156
|
+
}
|
157
|
+
const chainId = credentials.membership.chainId;
|
158
|
+
const network = await this._contract.registry.provider.getNetwork();
|
159
|
+
const currentChainId = network.chainId;
|
160
|
+
if (chainId !== currentChainId) {
|
161
|
+
throw Error(`Failed to verify chain coordinates: credentials chainID=${chainId} is not equal to registryContract chainID=${currentChainId}`);
|
162
|
+
}
|
163
|
+
}
|
164
|
+
createDecoder(contentTopic) {
|
165
|
+
return createRLNDecoder({
|
166
|
+
rlnInstance: this,
|
167
|
+
decoder: createDecoder(contentTopic)
|
168
|
+
});
|
208
169
|
}
|
209
170
|
}
|
210
171
|
//# sourceMappingURL=rln.js.map
|
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
|
+
}
|