aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/blockfilter.cpp21
-rw-r--r--src/blockfilter.h6
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