diff --git a/include/bitcoin/database/impl/query/signatures.ipp b/include/bitcoin/database/impl/query/signatures.ipp index ac58decfd..68bfe3534 100644 --- a/include/bitcoin/database/impl/query/signatures.ipp +++ b/include/bitcoin/database/impl/query/signatures.ipp @@ -26,25 +26,29 @@ namespace libbitcoin { namespace database { TEMPLATE -bool CLASS::verify_ecdsa_signatures(header_links& links) NOEXCEPT +bool CLASS::verify_ecdsa_signatures(const stopper& cancel, + header_links& links) NOEXCEPT { + // False return only implies canceled. using batch = system::ecdsa::batch; const auto count = store_.ecdsa.count().value; const auto ptr = store_.ecdsa.get_memory(); const auto rows = system::pointer_cast(ptr->data()); - links = batch::verify({ rows, count }, store_.turbo()); - return true; + links = batch::verify(cancel, { rows, count }); + return !cancel; } TEMPLATE -bool CLASS::verify_schnorr_signatures(header_links& links) NOEXCEPT +bool CLASS::verify_schnorr_signatures(const stopper& cancel, + header_links& links) NOEXCEPT { + // False return only implies canceled. using batch = system::schnorr::batch; const auto count = store_.schnorr.count().value; const auto ptr = store_.schnorr.get_memory(); const auto rows = system::pointer_cast(ptr->data()); - links = batch::verify({ rows, count }, store_.turbo()); - return true; + links = batch::verify(cancel, { rows, count }); + return !cancel; } // setters diff --git a/include/bitcoin/database/query.hpp b/include/bitcoin/database/query.hpp index 3a6ddd1c4..c9aab7c87 100644 --- a/include/bitcoin/database/query.hpp +++ b/include/bitcoin/database/query.hpp @@ -585,8 +585,8 @@ class query /// Signature verification. bool purge_ecdsa_signatures() NOEXCEPT; bool purge_schnorr_signatures() NOEXCEPT; - bool verify_ecdsa_signatures(header_links&) NOEXCEPT; - bool verify_schnorr_signatures(header_links&) NOEXCEPT; + bool verify_ecdsa_signatures(const stopper& cancel,header_links&) NOEXCEPT; + bool verify_schnorr_signatures(const stopper& cancel, header_links&) NOEXCEPT; /// Confirmation. /// ----------------------------------------------------------------------- diff --git a/include/bitcoin/database/types/type.hpp b/include/bitcoin/database/types/type.hpp index 8e0afb6a1..def8a2dc3 100644 --- a/include/bitcoin/database/types/type.hpp +++ b/include/bitcoin/database/types/type.hpp @@ -58,7 +58,6 @@ using index = table::transaction::ix::integer; /// Common std aliases. /// --------------------------------------------------------------------------- -using stopper = std::atomic_bool; using hash_option = std::optional; /// Common system aliases. diff --git a/test/query/signatures.cpp b/test/query/signatures.cpp index fd1bc21bb..e1b752f17 100644 --- a/test/query/signatures.cpp +++ b/test/query/signatures.cpp @@ -45,7 +45,7 @@ BOOST_AUTO_TEST_CASE(query__verify_ecdsa_signatures__empty__empty) header_links links{}; BOOST_REQUIRE_EQUAL(query.ecdsa_records(), 0u); - BOOST_REQUIRE(query.verify_ecdsa_signatures(links)); + BOOST_REQUIRE(query.verify_ecdsa_signatures({}, links)); BOOST_REQUIRE(links.empty()); } @@ -58,7 +58,7 @@ BOOST_AUTO_TEST_CASE(query__verify_ecdsa_signatures__one_valid__empty) header_links links{}; BOOST_REQUIRE_EQUAL(query.ecdsa_records(), 1u); - BOOST_REQUIRE(query.verify_ecdsa_signatures(links)); + BOOST_REQUIRE(query.verify_ecdsa_signatures({}, links)); BOOST_REQUIRE(links.empty()); } @@ -72,7 +72,7 @@ BOOST_AUTO_TEST_CASE(query__verify_ecdsa_signatures__one_invalid__expected_link) header_links links{}; BOOST_REQUIRE_EQUAL(query.ecdsa_records(), 1u); - BOOST_REQUIRE(query.verify_ecdsa_signatures(links)); + BOOST_REQUIRE(query.verify_ecdsa_signatures({}, links)); BOOST_REQUIRE_EQUAL(links.size(), 1u); BOOST_REQUIRE_EQUAL(links.front(), expected); } @@ -95,7 +95,7 @@ BOOST_AUTO_TEST_CASE(query__verify_ecdsa_signatures__various__expected_links) header_links links{}; BOOST_REQUIRE_EQUAL(query.ecdsa_records(), 8u); - BOOST_REQUIRE(query.verify_ecdsa_signatures(links)); + BOOST_REQUIRE(query.verify_ecdsa_signatures({}, links)); BOOST_REQUIRE_EQUAL(links.size(), 2u); // Order is not guaranteed. @@ -123,7 +123,7 @@ BOOST_AUTO_TEST_CASE(query__verify_schnorr_signatures__empty__empty) header_links links{}; BOOST_REQUIRE_EQUAL(query.schnorr_records(), 0u); - BOOST_REQUIRE(query.verify_schnorr_signatures(links)); + BOOST_REQUIRE(query.verify_schnorr_signatures({}, links)); BOOST_REQUIRE(links.empty()); } @@ -136,7 +136,7 @@ BOOST_AUTO_TEST_CASE(query__verify_schnorr_signatures__one_valid__empty) header_links links{}; BOOST_REQUIRE_EQUAL(query.schnorr_records(), 1u); - BOOST_REQUIRE(query.verify_schnorr_signatures(links)); + BOOST_REQUIRE(query.verify_schnorr_signatures({}, links)); BOOST_REQUIRE(links.empty()); } @@ -150,7 +150,7 @@ BOOST_AUTO_TEST_CASE(query__verify_schnorr_signatures__one_invalid__expected_lin header_links links{}; BOOST_REQUIRE_EQUAL(query.schnorr_records(), 1u); - BOOST_REQUIRE(query.verify_schnorr_signatures(links)); + BOOST_REQUIRE(query.verify_schnorr_signatures({}, links)); BOOST_REQUIRE_EQUAL(links.size(), 1u); BOOST_REQUIRE_EQUAL(links.front(), expected); } @@ -173,7 +173,7 @@ BOOST_AUTO_TEST_CASE(query__verify_schnorr_signatures__various__expected_links) header_links links{}; BOOST_REQUIRE_EQUAL(query.schnorr_records(), 8u); - BOOST_REQUIRE(query.verify_schnorr_signatures(links)); + BOOST_REQUIRE(query.verify_schnorr_signatures({}, links)); BOOST_REQUIRE_EQUAL(links.size(), 2u); // Order is not guaranteed.