Skip to content

Instantly share code, notes, and snippets.

@luke7211
Last active March 4, 2019 09:49
Show Gist options
  • Save luke7211/0bc30957908f401672c3597db5c48f08 to your computer and use it in GitHub Desktop.
Save luke7211/0bc30957908f401672c3597db5c48f08 to your computer and use it in GitHub Desktop.
#!/usr/bin/env node
var bigInt = require("big-integer");
var Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/zWDtcNMhNMHMyMYpiVs5"))
const createBloom = function (data) {
return addBloom(0, data)
}
const bit_numbers = function(s) {
s1 = s.substring(2,6) // byte pair 1
b1 = parseInt(s1,16) & 2047
s2 = s.substring(6,10) // byte pair 2
b2 = parseInt(s2,16) & 2047
s3 = s.substring(10,14) // byte pair 3
b3 = parseInt(s3,16) & 2047
return [b1,b2,b3]
}
const add_bits = function(binaryfilter, bits) {
result = new bigInt(binaryfilter)
.or(bigInt(2).pow(bits[0]))
.or(bigInt(2).pow(bits[1]))
.or(bigInt(2).pow(bits[2]))
return result
}
const addBloom = function (binaryfilter, data) {
return add_bits(binaryfilter, bit_numbers(web3.sha3(data)))
}
const contains = function (current_bloom, data) {
return (current_bloom.or(createBloom(data)).equals(current_bloom))
}
bloomFilter = createBloom ("rock")
console.log("createBloom('rock')")
console.log(bloomFilter.toString())
bloomFilter = addBloom(bloomFilter, "blues")
console.log("addBloom('blues')")
console.log(bloomFilter.toString())
console.log("contains 'punk'")
console.log(contains(bloomFilter, "punk"))
console.log("contains 'rock'")
console.log(contains(bloomFilter, "rock"))
console.log("contains 'blues'")
console.log(contains(bloomFilter, "blues"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment