diff options
Diffstat (limited to 'src/bloom.h')
-rw-r--r-- | src/bloom.h | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/src/bloom.h b/src/bloom.h index 191ffa19b3..bb17f59c86 100644 --- a/src/bloom.h +++ b/src/bloom.h @@ -32,14 +32,14 @@ enum bloomflags /** * BloomFilter is a probabilistic filter which SPV clients provide - * so that we can filter the transactions we sends them. + * so that we can filter the transactions we send them. * * This allows for significantly more efficient transaction and block downloads. * - * Because bloom filters are probabilistic, an SPV node can increase the false- - * positive rate, making us send them transactions which aren't actually theirs, + * Because bloom filters are probabilistic, a SPV node can increase the false- + * positive rate, making us send it transactions which aren't actually its, * allowing clients to trade more bandwidth for more privacy by obfuscating which - * keys are owned by them. + * keys are controlled by them. */ class CBloomFilter { @@ -53,6 +53,10 @@ private: unsigned int Hash(unsigned int nHashNum, const std::vector<unsigned char>& vDataToHash) const; + // Private constructor for CRollingBloomFilter, no restrictions on size + CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweak); + friend class CRollingBloomFilter; + public: /** * Creates a new bloom filter which will provide the given fp rate when filled with the given number of elements @@ -97,4 +101,28 @@ public: void UpdateEmptyFull(); }; +/** + * RollingBloomFilter is a probabilistic "keep track of most recently inserted" set. + * Construct it with the number of items to keep track of, and a false-positive rate. + * + * contains(item) will always return true if item was one of the last N things + * insert()'ed ... but may also return true for items that were not inserted. + */ +class CRollingBloomFilter +{ +public: + CRollingBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweak); + + void insert(const std::vector<unsigned char>& vKey); + bool contains(const std::vector<unsigned char>& vKey) const; + + void clear(); + +private: + unsigned int nBloomSize; + unsigned int nInsertions; + CBloomFilter b1, b2; +}; + + #endif // BITCOIN_BLOOM_H |