diff options
-rw-r--r-- | src/blockfilter.cpp | 21 | ||||
-rw-r--r-- | src/blockfilter.h | 6 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/blockfilter.cpp b/src/blockfilter.cpp index 1119b54901..124cbcfd92 100644 --- a/src/blockfilter.cpp +++ b/src/blockfilter.cpp @@ -233,3 +233,24 @@ BlockFilter::BlockFilter(BlockFilterType filter_type, const CBlock& block, const throw std::invalid_argument("unknown filter_type"); } } + +uint256 BlockFilter::GetHash() const +{ + const std::vector<unsigned char>& data = GetEncodedFilter(); + + uint256 result; + CHash256().Write(data.data(), data.size()).Finalize(result.begin()); + return result; +} + +uint256 BlockFilter::ComputeHeader(const uint256& prev_header) const +{ + const uint256& filter_hash = GetHash(); + + uint256 result; + CHash256() + .Write(filter_hash.begin(), filter_hash.size()) + .Write(prev_header.begin(), prev_header.size()) + .Finalize(result.begin()); + return result; +} diff --git a/src/blockfilter.h b/src/blockfilter.h index 010f868aee..46833ac0be 100644 --- a/src/blockfilter.h +++ b/src/blockfilter.h @@ -106,6 +106,12 @@ public: return m_filter.GetEncoded(); } + // Compute the filter hash. + uint256 GetHash() const; + + // Compute the filter header given the previous one. + uint256 ComputeHeader(const uint256& prev_header) const; + template <typename Stream> void Serialize(Stream& s) const { s << m_block_hash |