fix: bloom filter protobuf decoding (#2529)

* SDS: add bloom filter test

* fix: ensure bloom filter can be decoded from protobuf
This commit is contained in:
fryorcraken 2025-08-05 14:55:57 +10:00 committed by GitHub
parent 103f21ef85
commit 449797d5c1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 34 additions and 1 deletions

View File

@ -124,7 +124,7 @@ export class BloomFilter {
hashN: (item: string, n: number, maxValue: number) => number
): BloomFilter {
const bloomFilter = new BloomFilter(options, hashN);
const view = new DataView(bytes.buffer);
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
for (let i = 0; i < bloomFilter.data.length; i++) {
bloomFilter.data[i] = view.getBigUint64(i * 8, false);
}

View File

@ -0,0 +1,33 @@
import { expect } from "chai";
import { DefaultBloomFilter } from "../bloom_filter/bloom.js";
import { decodeMessage, encodeMessage, Message } from "./events.js";
import { DEFAULT_BLOOM_FILTER_OPTIONS } from "./message_channel.js";
describe("Message serialization", () => {
it("Bloom filter", () => {
const messageId = "first";
const bloomFilter = new DefaultBloomFilter(DEFAULT_BLOOM_FILTER_OPTIONS);
bloomFilter.insert(messageId);
const message: Message = {
messageId: "123",
channelId: "my-channel",
causalHistory: [],
lamportTimestamp: 0,
bloomFilter: bloomFilter.toBytes()
};
const bytes = encodeMessage(message);
const decMessage = decodeMessage(bytes);
const decBloomFilter = DefaultBloomFilter.fromBytes(
decMessage!.bloomFilter!,
DEFAULT_BLOOM_FILTER_OPTIONS
);
expect(decBloomFilter.lookup(messageId)).to.be.true;
});
});