From a4afb9cadbaecb0676e6475ab8d32a52faecb47a Mon Sep 17 00:00:00 2001 From: Jim Posen Date: Tue, 23 Jan 2018 17:32:46 -0800 Subject: blockfilter: Additional helper methods to compute hash and header. --- src/blockfilter.cpp | 21 +++++++++++++++++++++ src/blockfilter.h | 6 ++++++ 2 files changed, 27 insertions(+) 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& 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 void Serialize(Stream& s) const { s << m_block_hash -- cgit v1.2.3