@vechain/connex-driver
Version:
Connex framework driver implementation
32 lines • 2.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.newFilter = newFilter;
const thor_devkit_1 = require("thor-devkit");
function newFilter(bits, k) {
const nBits = bits.length * 8;
return {
contains(key) {
let hash = (0, thor_devkit_1.blake2b256)(key).readUInt32BE(0);
const delta = (hash >>> 17) | (hash << 15 >>> 0);
for (let i = 0; i < k; i++) {
const bitPos = hash % nBits;
const index = bitPos >>> 3;
const bit = 1 << (bitPos % 8);
if (!(bits[index] & bit)) {
return false;
}
hash = (hash + delta) >>> 0;
}
return true;
}
};
}
// // test vector
// const bits = Buffer.from('63b2a4758c74e246c818e080b870437f5327a15cf81172512d98e61c54361a851ba8f108420e6b2b74a4196fb8e7bfe2b96c985e49abddb21c0600063997c93edb7c54921551600bcfc80fb62bfcd045c030b328eb8b5498e06dce610d22e901201226226441b8da094141526e0e58f5baf53064d63d598a4024bf68e0', 'hex')
// const f = newFilter(bits, 6)
// for (let i = 0; i < 100; i++) {
// if (!f.contains(Buffer.from(i + ''))) {
// throw new Error('should return true')
// }
// }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvb20uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYmxvb20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSw4QkFrQkM7QUFwQkQsNkNBQXdDO0FBRXhDLFNBQWdCLFNBQVMsQ0FBQyxJQUFZLEVBQUUsQ0FBUztJQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUM3QixPQUFPO1FBQ0gsUUFBUSxDQUFDLEdBQVc7WUFDaEIsSUFBSSxJQUFJLEdBQUcsSUFBQSx3QkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUMxQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFBO2dCQUMzQixNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFBO2dCQUMxQixNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0JBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN2QixPQUFPLEtBQUssQ0FBQTtnQkFDaEIsQ0FBQztnQkFDRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQy9CLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7S0FDSixDQUFBO0FBQ0wsQ0FBQztBQUNELGlCQUFpQjtBQUNqQixnU0FBZ1M7QUFDaFMsK0JBQStCO0FBQy9CLGtDQUFrQztBQUNsQyw4Q0FBOEM7QUFDOUMsZ0RBQWdEO0FBQ2hELFFBQVE7QUFDUixJQUFJIn0=