diff --git a/include/bitcoin/database/impl/query/confirm.ipp b/include/bitcoin/database/impl/query/confirm.ipp index ce63f2845..bb9345a0b 100644 --- a/include/bitcoin/database/impl/query/confirm.ipp +++ b/include/bitcoin/database/impl/query/confirm.ipp @@ -704,6 +704,17 @@ bool CLASS::set_unstrong(const header_link& link) NOEXCEPT // ======================================================================== } +TEMPLATE +bool CLASS::set_prevouts(const header_link&, const block&) NOEXCEPT +{ + // ======================================================================== + const auto scope = store_.get_transactor(); + + // TODO: implement. + return {}; + // ======================================================================== +} + TEMPLATE bool CLASS::initialize(const block& genesis) NOEXCEPT { diff --git a/include/bitcoin/database/impl/query/optional.ipp b/include/bitcoin/database/impl/query/optional.ipp index 9c74c409d..79a662867 100644 --- a/include/bitcoin/database/impl/query/optional.ipp +++ b/include/bitcoin/database/impl/query/optional.ipp @@ -198,14 +198,23 @@ bool CLASS::get_filter_head(hash_digest& out, return true; } +TEMPLATE +bool CLASS::set_filter_body(const header_link& link, + const block& block) NOEXCEPT +{ + filter bytes{}; + + // compute_filter is only false if prevouts are missing. + return system::neutrino::compute_filter(bytes, block) && + set_filter_body(link, bytes); +} + TEMPLATE bool CLASS::set_filter_body(const header_link&, const filter&) NOEXCEPT { - ////// GUARD (filter redundancy) - ////// This is only fully effective if there is a single database thread. - ////if (!to_filter(link).is_terminal()) - //// return true; + if (!neutrino_enabled()) + return true; // ======================================================================== const auto scope = store_.get_transactor(); @@ -226,10 +235,8 @@ TEMPLATE bool CLASS::set_filter_head(const header_link&, const hash_digest&) NOEXCEPT { - ////// GUARD (filter redundancy) - ////// This is only fully effective if there is a single database thread. - ////if (!to_filter(link).is_terminal()) - //// return true; + if (!neutrino_enabled()) + return true; // ======================================================================== const auto scope = store_.get_transactor(); diff --git a/include/bitcoin/database/query.hpp b/include/bitcoin/database/query.hpp index 76328ad51..b83dddf41 100644 --- a/include/bitcoin/database/query.hpp +++ b/include/bitcoin/database/query.hpp @@ -510,6 +510,7 @@ class query /// Block association relies on strong (confirmed or pending). bool set_strong(const header_link& link) NOEXCEPT; bool set_unstrong(const header_link& link) NOEXCEPT; + bool set_prevouts(const header_link& link, const block& block) NOEXCEPT; code block_confirmable(const header_link& link) const NOEXCEPT; ////code tx_confirmable(const tx_link& link, const context& ctx) const NOEXCEPT; code unspent_duplicates(const header_link& coinbase, @@ -538,6 +539,7 @@ class query /// Neutrino, set during validation with prevouts (surrogate-keyed). bool get_filter_body(filter& out, const header_link& link) const NOEXCEPT; bool get_filter_head(hash_digest& out, const header_link& link) const NOEXCEPT; + bool set_filter_body(const header_link& link, const block& block) NOEXCEPT; bool set_filter_body(const header_link& link, const filter& body) NOEXCEPT; bool set_filter_head(const header_link& link, const hash_digest& head) NOEXCEPT;