Skip to content
This repository was archived by the owner on Feb 16, 2025. It is now read-only.

fix: epoch decoding #35

Merged
merged 2 commits into from
Oct 10, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 46 additions & 1 deletion src/codec.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
} from "js-waku/lib/waku_message/version_1";

import { RLNDecoder, RLNEncoder } from "./codec.js";
import { epochBytesToInt } from "./epoch.js";
import { RlnMessage } from "./message.js";

import * as rln from "./index.js";
Expand Down Expand Up @@ -47,7 +48,6 @@ describe("RLN codec with version 0", () => {

expect(bytes).to.not.be.undefined;
const protoResult = await rlnDecoder.fromWireToProtoObj(bytes!);

expect(protoResult).to.not.be.undefined;
const msg = (await rlnDecoder.fromProtoObj(protoResult!))!;

Expand Down Expand Up @@ -267,3 +267,48 @@ describe("RLN codec with version 1", () => {
expect(msg.timestamp).to.not.be.undefined;
});
});

describe("RLN Codec - epoch", () => {
it("toProtoObj", async function () {
const rlnInstance = await rln.create();
const memKeys = rlnInstance.generateMembershipKey();
const index = 0;
const payload = new Uint8Array([1, 2, 3, 4, 5]);

rlnInstance.insertMember(memKeys.IDCommitment);

const rlnEncoder = new RLNEncoder(
new EncoderV0(TestContentTopic),
rlnInstance,
index,
memKeys
);
const rlnDecoder = new RLNDecoder(
rlnInstance,
new DecoderV0(TestContentTopic)
);

const proto = await rlnEncoder.toProtoObj({ payload });

expect(proto).to.not.be.undefined;
const msg = (await rlnDecoder.fromProtoObj(
proto!
)) as RlnMessage<MessageV0>;

const epochBytes = proto!.rateLimitProof!.epoch;
const epoch = epochBytesToInt(epochBytes);

expect(msg).to.not.be.undefined;
expect(msg.rateLimitProof).to.not.be.undefined;

expect(msg.verify()).to.be.true;
expect(msg.epoch).to.not.be.undefined;
expect(msg.epoch!.toString(10).length).to.eq(9);
expect(msg.epoch).to.eq(epoch);

expect(msg.contentTopic).to.eq(TestContentTopic);
expect(msg.msg.version).to.eq(0);
expect(msg.payload).to.deep.eq(payload);
expect(msg.timestamp).to.not.be.undefined;
});
});
2 changes: 1 addition & 1 deletion src/codec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export class RLNEncoder implements Encoder {
if (!protoMessage) return;

protoMessage.rateLimitProof = await this.generateProof(message);
log("Proof generated", message.rateLimitProof);
log("Proof generated", protoMessage.rateLimitProof);
return protoMessage;
}

Expand Down
2 changes: 1 addition & 1 deletion src/epoch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export function epochIntToBytes(epoch: number): Uint8Array {
}

export function epochBytesToInt(bytes: Uint8Array): number {
const dv = new DataView(bytes.buffer);
const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
const epoch = dv.getUint32(0, true);
log("decoded epoch", epoch, bytes);
return epoch;
Expand Down