diff options
author | Gregory Maxwell <greg@xiph.org> | 2013-08-18 20:21:06 -0700 |
---|---|---|
committer | Gregory Maxwell <greg@xiph.org> | 2013-08-20 02:27:26 -0700 |
commit | 37c6389c5a0ca63ae3573440ecdfe95d28ad8f07 (patch) | |
tree | 51ef4367b16dc75bd60d4de0da261b65cebf4f2d /src/bloom.h | |
parent | 4bc9a192696273c88966c39debf8d17f16ebe471 (diff) |
Performance optimization for bloom filters.
This reduces a peer's ability to attack network resources by
using a full bloom filter, but without reducing the usability
of bloom filters. It sets a default match everything filter
for peers and it generalizes a prior optimization to
cover more cases.
Diffstat (limited to 'src/bloom.h')
-rw-r--r-- | src/bloom.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/bloom.h b/src/bloom.h index 389ae748e6..f482bfcc10 100644 --- a/src/bloom.h +++ b/src/bloom.h @@ -42,6 +42,8 @@ class CBloomFilter { private: std::vector<unsigned char> vData; + bool isFull; + bool isEmpty; unsigned int nHashFuncs; unsigned int nTweak; unsigned char nFlags; @@ -57,9 +59,7 @@ public: // It should generally always be a random value (and is largely only exposed for unit testing) // nFlags should be one of the BLOOM_UPDATE_* enums (not _MASK) CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweak, unsigned char nFlagsIn); - // Using a filter initialized with this results in undefined behavior - // Should only be used for deserialization - CBloomFilter() {} + CBloomFilter() : isFull(true) {} IMPLEMENT_SERIALIZE ( @@ -83,6 +83,9 @@ public: // Also adds any outputs which match the filter to the filter (to match their spending txes) bool IsRelevantAndUpdate(const CTransaction& tx, const uint256& hash); + + // Checks for empty and full filters to avoid wasting cpu + void UpdateEmptyFull(); }; #endif /* BITCOIN_BLOOM_H */ |