UNPKG

thor-devkit

Version:

Typescript library to aid DApp development on VeChain Thor

69 lines 4.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Bloom = void 0; const blake2b_1 = require("./blake2b"); const buffer_1 = require("buffer"); /** * 2048 bits Bloom filter */ class Bloom { /** estimate k(number of hash functions) according to item count */ static estimateK(itemCount) { const k = Math.round(this.BITS_LENGTH / itemCount * Math.LN2); return Math.max(Math.min(k, this.MAX_K), 1); } /** * new bloom filter instance * @param k number of hash functions * @param bits leave it out to construct an empty one */ constructor(k, bits) { if (bits) { this.bits = bits; } else { this.bits = buffer_1.Buffer.alloc(Bloom.BITS_LENGTH / 8); } this.k = k; } /** * add item * @param item */ add(item) { this.distribute(item, (index, bit) => { // tslint:disable-next-line:no-bitwise this.bits[index] |= bit; return true; }); } /** * test if an item contained. (false positive) * @param item */ test(item) { return this.distribute(item, (index, bit) => { // tslint:disable-next-line:no-bitwise return (this.bits[index] & bit) === bit; }); } distribute(item, cb) { const hash = (0, blake2b_1.blake2b256)(item); for (let i = 0; i < this.k; i++) { // tslint:disable-next-line:no-bitwise const d = (hash[i * 2 + 1] + (hash[i * 2] << 8)) % Bloom.BITS_LENGTH; // tslint:disable-next-line:no-bitwise const bit = 1 << (d % 8); if (!cb(Math.floor(d / 8), bit)) { return false; } } return true; } } exports.Bloom = Bloom; /** number of hash functions */ Bloom.MAX_K = 16; /** bit length */ Bloom.BITS_LENGTH = 2048; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvb20uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYmxvb20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQXNDO0FBQ3RDLG1DQUErQjtBQUUvQjs7R0FFRztBQUNILE1BQWEsS0FBSztJQU1kLG1FQUFtRTtJQUM1RCxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQWlCO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzdELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUtEOzs7O09BSUc7SUFDSCxZQUFZLENBQVMsRUFBRSxJQUFhO1FBQ2hDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNwQixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ25ELENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSSxHQUFHLENBQUMsSUFBWTtRQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNqQyxzQ0FBc0M7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUE7WUFDdkIsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSSxJQUFJLENBQUMsSUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hDLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUE7UUFDM0MsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVksRUFBRSxFQUEyQztRQUN4RSxNQUFNLElBQUksR0FBRyxJQUFBLG9CQUFVLEVBQUMsSUFBSSxDQUFDLENBQUE7UUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QixzQ0FBc0M7WUFDdEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFBO1lBQ3BFLHNDQUFzQztZQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDeEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixPQUFPLEtBQUssQ0FBQTtZQUNoQixDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQzs7QUFoRUwsc0JBaUVDO0FBaEVHLCtCQUErQjtBQUNSLFdBQUssR0FBRyxFQUFFLENBQUE7QUFDakMsaUJBQWlCO0FBQ00saUJBQVcsR0FBRyxJQUFJLENBQUEifQ==