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

Commit

Permalink
Merge pull request #35 from waku-org/fix/epoch-decoding
Browse files Browse the repository at this point in the history
  • Loading branch information
fryorcraken authored Oct 10, 2022
2 parents 6ecdc59 + 8eb7779 commit ccac829
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 3 deletions.
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

0 comments on commit ccac829

Please sign in to comment.