Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions include/bitcoin/node/chasers/chaser_validate.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ class BCN_API chaser_validate
static constexpr auto relaxed = std::memory_order_relaxed;
using atomic_counter = std::atomic<size_t>;
using atomic_counter_ptr = std::shared_ptr<atomic_counter>;
using threshold_group = signatures::threshold_group;
using threshold = system::chain::threshold;
using missed = signatures::miss;

/// Batching helpers.
Expand All @@ -104,15 +104,15 @@ class BCN_API chaser_validate
void do_fire(missed miss, size_t count) NOEXCEPT;
bool do_ecdsa(const system::hash_digest& digest,
const system::ec_compressed& point, const system::ec_signature& sign,
const header_link& link) NOEXCEPT;
const header_link& link, const atomic_counter_ptr& sequence) NOEXCEPT;
bool do_schnorr(const system::hash_digest& digest,
const system::ec_xonly& point, const system::ec_signature& sign,
const header_link& link) NOEXCEPT;
const header_link& link, const atomic_counter_ptr& sequence) NOEXCEPT;
bool do_multisig(const system::hash_digest& digest,
const system::ec_compresseds& points,
const system::ec_signatures& signs, const header_link& link,
const atomic_counter_ptr& sequence) NOEXCEPT;
bool do_threshold(const threshold_group& group, const header_link& link,
bool do_threshold(const threshold& batch, const header_link& link,
const atomic_counter_ptr& sequence) NOEXCEPT;

// Capture helpers.
Expand Down
2 changes: 2 additions & 0 deletions src/chasers/chaser_validate_batch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ code chaser_validate::start_batch() NOEXCEPT
error::batch1 : error::success;
}

// batched_ is redundant with the combined set of ecdsa/schnorr unfailed block
// identifiers stored in the two batch tables, so just a sort optimization.
void chaser_validate::push_batch(const header_link& link, size_t height) NOEXCEPT
{
BC_ASSERT(stranded());
Expand Down
56 changes: 35 additions & 21 deletions src/chasers/chaser_validate_capture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ using namespace system::chain;
using namespace database;
using namespace std::placeholders;

// Shared pointers required for lifetime in handler parameters.
BC_PUSH_WARNING(NO_VALUE_OR_CONST_REF_SHARED_PTR)
BC_PUSH_WARNING(SMART_PTR_NOT_NEEDED)
BC_PUSH_WARNING(NO_THROW_IN_NOEXCEPT)

// Capture handlers.
Expand Down Expand Up @@ -63,46 +66,55 @@ void chaser_validate::do_fire(missed miss, size_t count) NOEXCEPT

bool chaser_validate::do_ecdsa(const hash_digest& digest,
const ec_compressed& point, const ec_signature& sign,
const header_link& link) NOEXCEPT
const header_link& link, const atomic_counter_ptr& sequence) NOEXCEPT
{
++ecdsa_;
const auto set = archive().set_signature(digest, point, sign, link);
const auto id = (*sequence)++;
if (is_limited<uint16_t>(id)) return false;
const auto group = narrow_cast<uint16_t>(id);
const auto set = archive().set_signature(digest, point, sign, group, link);
if (!set) fault(error::batch5);
return set;
}

bool chaser_validate::do_schnorr(const hash_digest& digest,
const ec_xonly& point, const ec_signature& sign,
const header_link& link) NOEXCEPT
const header_link& link, const atomic_counter_ptr& sequence) NOEXCEPT
{
++schnorr_;
const auto set = archive().set_signature(digest, point, sign, link);
const auto id = (*sequence)++;
if (is_limited<uint16_t>(id)) return false;
const auto group = narrow_cast<uint16_t>(id);
const auto set = archive().set_signature(digest, point, sign, group, link);
if (!set) fault(error::batch6);
return set;
}

bool chaser_validate::do_multisig(const hash_digest& ,
const ec_compresseds& points, const ec_signatures& BC_DEBUG_ONLY(signs),
const header_link& , const atomic_counter_ptr& ) NOEXCEPT
bool chaser_validate::do_multisig(const hash_digest& digest,
const ec_compresseds& points, const ec_signatures& signs,
const header_link& link, const atomic_counter_ptr& sequence) NOEXCEPT
{
BC_ASSERT(points.size() == signs.size());

multisig_ += points.size();
////const auto set = archive().set_signatures(digest, points, signs,
//// (*sequence)++, link);
////if (!set) fault(error::batch7);
////return set;
return true;
const auto id = (*sequence)++;
if (is_limited<uint16_t>(id)) return false;
const auto group = narrow_cast<uint16_t>(id);
const auto set = archive().set_signatures(digest, points, signs, group, link);
if (!set) fault(error::batch7);
return set;
}

bool chaser_validate::do_threshold(const threshold_group& group,
const header_link& , const atomic_counter_ptr& ) NOEXCEPT
bool chaser_validate::do_threshold(const threshold& batch,
const header_link& link, const atomic_counter_ptr& sequence) NOEXCEPT
{
threshold_ += group.entries.size();
////const auto set = archive().set_signatures(group, (*sequence)++, link);
////if (!set) fault(error::batch8);
////return set;
return true;
threshold_ += batch.tuples.size();
const auto id = (*sequence)++;
if (is_limited<uint16_t>(id)) return false;
const auto group = narrow_cast<uint16_t>(id);
const auto set = archive().set_signatures(batch, group, link);
if (!set) fault(error::batch8);
return set;
}

std::string chaser_validate::log_rate(const std::string& name,
Expand All @@ -128,8 +140,8 @@ signatures chaser_validate::get_capture(const header_link& link) NOEXCEPT
.enabled = true,
.log = BIND_THIS(do_log, _1),
.fire = BIND_THIS(do_fire, _1, _2),
.ecdsa = BIND_THIS(do_ecdsa, _1, _2, _3, link),
.schnorr = BIND_THIS(do_schnorr, _1, _2, _3, link),
.ecdsa = BIND_THIS(do_ecdsa, _1, _2, _3, link, sequence),
.schnorr = BIND_THIS(do_schnorr, _1, _2, _3, link, sequence),
.multisig = BIND_THIS(do_multisig, _1, _2, _3, link, sequence),
.threshold = BIND_THIS(do_threshold, _1, link, sequence)
};
Expand All @@ -154,6 +166,8 @@ void chaser_validate::log_captures() const NOEXCEPT
LOGV(log_ratio("Capture rate threshold ", threshold_, threshold_ + zero));
}

BC_POP_WARNING()
BC_POP_WARNING()
BC_POP_WARNING()

} // namespace node
Expand Down
Loading