@waku/rln 0.0.8-4f8118e → 0.0.8-b5f0cbb
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 +46216 -37
- package/dist/.tsbuildinfo +1 -1
- package/dist/byte_utils.d.ts +1 -0
- package/dist/byte_utils.js +24 -0
- package/dist/byte_utils.js.map +1 -0
- package/dist/{encoder.d.ts → codec.d.ts} +6 -4
- package/dist/{encoder.js → codec.js} +10 -7
- package/dist/codec.js.map +1 -0
- package/dist/epoch.d.ts +3 -0
- package/dist/epoch.js +16 -0
- package/dist/epoch.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/message.d.ts +13 -0
- package/dist/message.js +29 -0
- package/dist/message.js.map +1 -0
- package/dist/rln.d.ts +0 -1
- package/dist/rln.js +4 -30
- package/dist/rln.js.map +1 -1
- package/package.json +2 -2
- package/src/byte_utils.ts +39 -0
- package/src/{encoder.ts → codec.ts} +9 -10
- package/src/epoch.ts +21 -0
- package/src/index.ts +2 -1
- package/src/message.ts +37 -0
- package/src/rln.ts +4 -52
- package/dist/encoder.js.map +0 -1
package/src/epoch.ts
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
const DefaultEpochUnitSeconds = 10; // the rln-relay epoch length in seconds
|
2
|
+
|
3
|
+
export function dateToEpoch(
|
4
|
+
timestamp: Date,
|
5
|
+
epochUnitSeconds: number = DefaultEpochUnitSeconds
|
6
|
+
): number {
|
7
|
+
const time = timestamp.getTime();
|
8
|
+
return Math.floor(time / 1000 / epochUnitSeconds);
|
9
|
+
}
|
10
|
+
|
11
|
+
export function epochIntToBytes(epoch: number): Uint8Array {
|
12
|
+
const bytes = new Uint8Array(32);
|
13
|
+
const db = new DataView(bytes.buffer);
|
14
|
+
db.setUint32(0, epoch, true);
|
15
|
+
return bytes;
|
16
|
+
}
|
17
|
+
|
18
|
+
export function epochBytesToInt(bytes: Uint8Array): number {
|
19
|
+
const dv = new DataView(bytes.buffer);
|
20
|
+
return dv.getUint32(0, true);
|
21
|
+
}
|
package/src/index.ts
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import { RLNDecoder, RLNEncoder } from "./codec.js";
|
1
2
|
import type { Proof, RLNInstance } from "./rln.js";
|
2
3
|
import { MembershipKey } from "./rln.js";
|
3
4
|
|
@@ -10,4 +11,4 @@ export async function create(): Promise<RLNInstance> {
|
|
10
11
|
return await rlnModule.create();
|
11
12
|
}
|
12
13
|
|
13
|
-
export { RLNInstance, MembershipKey, Proof };
|
14
|
+
export { RLNInstance, MembershipKey, Proof, RLNEncoder, RLNDecoder };
|
package/src/message.ts
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
import { Message, RateLimitProof } from "js-waku/lib/interfaces";
|
2
|
+
|
3
|
+
import { epochBytesToInt } from "./epoch.js";
|
4
|
+
import { RLNInstance } from "./rln.js";
|
5
|
+
|
6
|
+
export class RlnMessage<T extends Message> implements Message {
|
7
|
+
constructor(
|
8
|
+
public rlnInstance: RLNInstance,
|
9
|
+
public msg: T,
|
10
|
+
public rateLimitProof?: RateLimitProof
|
11
|
+
) {}
|
12
|
+
|
13
|
+
public verify(): boolean | undefined {
|
14
|
+
return this.rateLimitProof
|
15
|
+
? this.rlnInstance.verifyProof(this.rateLimitProof)
|
16
|
+
: undefined;
|
17
|
+
}
|
18
|
+
|
19
|
+
get payload(): Uint8Array | undefined {
|
20
|
+
return this.msg.payload;
|
21
|
+
}
|
22
|
+
|
23
|
+
get contentTopic(): string | undefined {
|
24
|
+
return this.msg.contentTopic;
|
25
|
+
}
|
26
|
+
|
27
|
+
get timestamp(): Date | undefined {
|
28
|
+
return this.msg.timestamp;
|
29
|
+
}
|
30
|
+
|
31
|
+
get epoch(): number | undefined {
|
32
|
+
const bytes = this.msg.rateLimitProof?.epoch;
|
33
|
+
if (!bytes) return;
|
34
|
+
|
35
|
+
return epochBytesToInt(bytes);
|
36
|
+
}
|
37
|
+
}
|
package/src/rln.ts
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
import init, * as zerokitRLN from "@waku/zerokit-rln-wasm";
|
2
2
|
import { RateLimitProof } from "js-waku/lib/interfaces";
|
3
3
|
|
4
|
+
import { writeUIntLE } from "./byte_utils.js";
|
5
|
+
import { dateToEpoch, epochIntToBytes } from "./epoch.js";
|
4
6
|
import verificationKey from "./resources/verification_key.js";
|
5
7
|
import * as wc from "./witness_calculator.js";
|
6
8
|
import { WitnessCalculator } from "./witness_calculator.js";
|
@@ -67,56 +69,6 @@ export class MembershipKey {
|
|
67
69
|
}
|
68
70
|
}
|
69
71
|
|
70
|
-
// Adapted from https://github.com/feross/buffer
|
71
|
-
|
72
|
-
function checkInt(
|
73
|
-
buf: Uint8Array,
|
74
|
-
value: number,
|
75
|
-
offset: number,
|
76
|
-
ext: number,
|
77
|
-
max: number,
|
78
|
-
min: number
|
79
|
-
): void {
|
80
|
-
if (value > max || value < min)
|
81
|
-
throw new RangeError('"value" argument is out of bounds');
|
82
|
-
if (offset + ext > buf.length) throw new RangeError("Index out of range");
|
83
|
-
}
|
84
|
-
|
85
|
-
const writeUIntLE = function writeUIntLE(
|
86
|
-
buf: Uint8Array,
|
87
|
-
value: number,
|
88
|
-
offset: number,
|
89
|
-
byteLength: number,
|
90
|
-
noAssert?: boolean
|
91
|
-
): Uint8Array {
|
92
|
-
value = +value;
|
93
|
-
offset = offset >>> 0;
|
94
|
-
byteLength = byteLength >>> 0;
|
95
|
-
if (!noAssert) {
|
96
|
-
const maxBytes = Math.pow(2, 8 * byteLength) - 1;
|
97
|
-
checkInt(buf, value, offset, byteLength, maxBytes, 0);
|
98
|
-
}
|
99
|
-
|
100
|
-
let mul = 1;
|
101
|
-
let i = 0;
|
102
|
-
buf[offset] = value & 0xff;
|
103
|
-
while (++i < byteLength && (mul *= 0x100)) {
|
104
|
-
buf[offset + i] = (value / mul) & 0xff;
|
105
|
-
}
|
106
|
-
|
107
|
-
return buf;
|
108
|
-
};
|
109
|
-
|
110
|
-
const DefaultEpochUnitSeconds = 10; // the rln-relay epoch length in seconds
|
111
|
-
|
112
|
-
export function toEpoch(
|
113
|
-
timestamp: Date,
|
114
|
-
epochUnitSeconds: number = DefaultEpochUnitSeconds
|
115
|
-
): Uint8Array {
|
116
|
-
const unix = Math.floor(timestamp.getTime() / 1000 / epochUnitSeconds);
|
117
|
-
return writeUIntLE(new Uint8Array(32), unix, 0, 8);
|
118
|
-
}
|
119
|
-
|
120
72
|
const proofOffset = 128;
|
121
73
|
const rootOffset = proofOffset + 32;
|
122
74
|
const epochOffset = rootOffset + 32;
|
@@ -200,9 +152,9 @@ export class RLNInstance {
|
|
200
152
|
idKey: Uint8Array
|
201
153
|
): Promise<RateLimitProof> {
|
202
154
|
if (epoch == undefined) {
|
203
|
-
epoch =
|
155
|
+
epoch = epochIntToBytes(dateToEpoch(new Date()));
|
204
156
|
} else if (epoch instanceof Date) {
|
205
|
-
epoch =
|
157
|
+
epoch = epochIntToBytes(dateToEpoch(epoch));
|
206
158
|
}
|
207
159
|
|
208
160
|
if (epoch.length != 32) throw "invalid epoch";
|
package/dist/encoder.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAU/C,MAAM,GAAG,GAAG,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAE9C,MAAM,OAAO,UAAU;IAIrB,YACU,OAAgB,EAChB,WAAwB,EACxB,KAAa,EACrB,aAA4B;QAHpB,YAAO,GAAP,OAAO,CAAS;QAChB,gBAAW,GAAX,WAAW,CAAa;QACxB,UAAK,GAAL,KAAK,CAAQ;QAGrB,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,0BAA0B,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAgB;QAC3B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,OAAO,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAgB;QAChC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAEpC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAChD,MAAM,EACN,IAAI,CAAC,KAAK,EACV,OAAO,CAAC,SAAS,EACjB,IAAI,CAAC,KAAK,CACX,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEnC,YAAY,CAAC,cAAc,GAAG,KAAK,CAAC;QAEpC,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAED,MAAM,OAAO,UAAU;IAGrB,YAAoB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAC3C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,WAAW,CAAC,KAAiB;QAC3B,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7D,GAAG,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAmB;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;SAC3C;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC;AACxE,CAAC"}
|