diff --git a/include/bitcoin/database/impl/query/consensus/consensus_states.ipp b/include/bitcoin/database/impl/query/consensus/consensus_states.ipp index 48df52c3e..867b95ac5 100644 --- a/include/bitcoin/database/impl/query/consensus/consensus_states.ipp +++ b/include/bitcoin/database/impl/query/consensus/consensus_states.ipp @@ -236,7 +236,8 @@ bool CLASS::set_block_confirmable(const header_link& link) NOEXCEPT TEMPLATE bool CLASS::set_block_unconfirmable(const header_link& link) NOEXCEPT { - return set_block_state(link, block_state::unconfirmable); + return !store_.mark_unconfirmable() || + set_block_state(link, block_state::unconfirmable); } TEMPLATE diff --git a/include/bitcoin/database/impl/store/store.ipp b/include/bitcoin/database/impl/store/store.ipp index 12b83e41a..740b1d555 100644 --- a/include/bitcoin/database/impl/store/store.ipp +++ b/include/bitcoin/database/impl/store/store.ipp @@ -238,6 +238,12 @@ bool CLASS::turbo() const NOEXCEPT return configuration_.turbo; } +TEMPLATE +bool CLASS::mark_unconfirmable() const NOEXCEPT +{ + return configuration_.mark_unconfirmable; +} + TEMPLATE uint8_t CLASS::interval_depth() const NOEXCEPT { diff --git a/include/bitcoin/database/query.hpp b/include/bitcoin/database/query.hpp index 3ece0caaa..df946ce3f 100644 --- a/include/bitcoin/database/query.hpp +++ b/include/bitcoin/database/query.hpp @@ -582,6 +582,10 @@ class query bool set_signatures(const threshold& group, size_t set, const header_link& link) NOEXCEPT; + // TODO: + bool purge_signatures() NOEXCEPT { return {}; }; + bool verify_signatures(header_links& ) NOEXCEPT { return {}; }; + /// Confirmation. /// ----------------------------------------------------------------------- /// These are not used in consensus confirmation. diff --git a/include/bitcoin/database/settings.hpp b/include/bitcoin/database/settings.hpp index 5a7371db1..6909744a9 100644 --- a/include/bitcoin/database/settings.hpp +++ b/include/bitcoin/database/settings.hpp @@ -42,6 +42,9 @@ struct BCD_API settings /// Enable concurrency in individual client-server queries. bool turbo{ false }; + /// Mark blocks as unconfirmable (disorganize vs. stall). + bool mark_unconfirmable{ true }; + /// Depth of electrum merkle tree interval caching. uint16_t interval_depth{ max_uint8 }; diff --git a/include/bitcoin/database/store.hpp b/include/bitcoin/database/store.hpp index b2a9187ab..73e4a3be8 100644 --- a/include/bitcoin/database/store.hpp +++ b/include/bitcoin/database/store.hpp @@ -86,6 +86,9 @@ class store /// Allows full throttle concurrent query execution (may use 100% CPU). bool turbo() const NOEXCEPT; + /// Mark blocks as unconfirmable (disorganize vs. stall), configuration. + bool mark_unconfirmable() const NOEXCEPT; + /// Depth of electrum merkle tree interval caching. uint8_t interval_depth() const NOEXCEPT; diff --git a/test/settings.cpp b/test/settings.cpp index aa0cffc79..390640b13 100644 --- a/test/settings.cpp +++ b/test/settings.cpp @@ -24,6 +24,7 @@ BOOST_AUTO_TEST_CASE(settings__construct__default__expected) { database::settings configuration; BOOST_REQUIRE_EQUAL(configuration.turbo, false); + BOOST_REQUIRE_EQUAL(configuration.mark_unconfirmable, true); BOOST_REQUIRE_EQUAL(configuration.interval_depth, 255u); BOOST_REQUIRE_EQUAL(configuration.path, "bitcoin");