Skip to content

Commit d41e5bd

Browse files
committed
chore: apply review suggestions
- Fast bail-out if SetSecretKeyShare() is supplied with blank ProTx hash - Pass reference instead of copy to DataCleanupHelper() - Refactor ProcessContribQGETDATA result processing to be more legible - Squash down two strprintf calls into one - Validate verification vector availability before access
1 parent 8a3ad09 commit d41e5bd

File tree

4 files changed

+17
-9
lines changed

4 files changed

+17
-9
lines changed

src/active/quorums.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@ MessageProcessingResult QuorumParticipant::ProcessContribQDATA(CNode& pfrom, CDa
137137
CQuorum& quorum, CQuorumDataRequest& request)
138138
{
139139
if (request.GetDataMask() & CQuorumDataRequest::ENCRYPTED_CONTRIBUTIONS) {
140-
if (WITH_LOCK(quorum.cs_vvec_shShare, return quorum.quorumVvec->size() != size_t(quorum.params.threshold))) {
140+
if (WITH_LOCK(quorum.cs_vvec_shShare, return !quorum.HasVerificationVectorInternal()
141+
|| quorum.quorumVvec->size() != size_t(quorum.params.threshold))) {
141142
// Don't bump score because we asked for it
142143
LogPrint(BCLog::LLMQ, "QuorumParticipant::%s -- %s: No valid quorum verification vector available, from peer=%d\n", __func__, NetMsgType::QDATA, pfrom.GetId());
143144
return {};

src/llmq/quorums.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ uint256 MakeQuorumKey(const CQuorum& q)
2626
return hw.GetHash();
2727
}
2828

29-
void DataCleanupHelper(CDBWrapper& db, std::set<uint256> skip_list, bool compact)
29+
void DataCleanupHelper(CDBWrapper& db, const std::set<uint256>& skip_list, bool compact)
3030
{
3131
const auto prefixes = {DB_QUORUM_QUORUM_VVEC, DB_QUORUM_SK_SHARE};
3232

@@ -124,7 +124,7 @@ bool CQuorum::SetVerificationVector(const std::vector<CBLSPublicKey>& quorumVecI
124124

125125
bool CQuorum::SetSecretKeyShare(const CBLSSecretKey& secretKeyShare, const uint256& protx_hash)
126126
{
127-
if (!secretKeyShare.IsValid() || (secretKeyShare.GetPublicKey() != GetPubKeyShare(GetMemberIndex(protx_hash)))) {
127+
if (protx_hash.IsNull() || !secretKeyShare.IsValid() || (secretKeyShare.GetPublicKey() != GetPubKeyShare(GetMemberIndex(protx_hash)))) {
128128
return false;
129129
}
130130
LOCK(cs_vvec_shShare);

src/llmq/quorums.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <uint256.h>
1818
#include <util/time.h>
1919

20+
#include <set>
2021
#include <string>
2122
#include <vector>
2223

@@ -34,7 +35,7 @@ extern const std::string DB_QUORUM_SK_SHARE;
3435
extern const std::string DB_QUORUM_QUORUM_VVEC;
3536

3637
uint256 MakeQuorumKey(const CQuorum& q);
37-
void DataCleanupHelper(CDBWrapper& db, std::set<uint256> skip_list, bool compact = false);
38+
void DataCleanupHelper(CDBWrapper& db, const std::set<uint256>& skip_list, bool compact = false);
3839

3940
/**
4041
* Object used as a key to store CQuorumDataRequest

src/llmq/quorumsman.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -481,16 +481,22 @@ MessageProcessingResult CQuorumManager::ProcessMessage(CNode& pfrom, CConnman& c
481481
}
482482

483483
// Check if request wants ENCRYPTED_CONTRIBUTIONS data
484-
MessageProcessingResult ret{};
484+
CQuorumDataRequest::Errors ret_err{CQuorumDataRequest::Errors::NONE};
485+
MessageProcessingResult qdata_ret{}, ret{};
485486
if (m_handler) {
486487
ret = m_handler->ProcessContribQGETDATA(request_limit_exceeded, ssResponseData, *pQuorum, request, pQuorumBaseBlockIndex);
487488
if (auto request_err = request.GetError(); request_err != CQuorumDataRequest::Errors::NONE &&
488489
request_err != CQuorumDataRequest::Errors::UNDEFINED) {
489-
auto qdata_ret = sendQDATA(request_err, request_limit_exceeded);
490-
return ret.empty() ? qdata_ret : ret;
490+
ret_err = request_err;
491491
}
492492
}
493-
return ret.empty() ? sendQDATA(CQuorumDataRequest::Errors::NONE, request_limit_exceeded, ssResponseData) : ret;
493+
// sendQDATA also pushes a message independent of the returned value
494+
if (ret_err != CQuorumDataRequest::Errors::NONE) {
495+
qdata_ret = sendQDATA(ret_err, request_limit_exceeded);
496+
} else {
497+
qdata_ret = sendQDATA(CQuorumDataRequest::Errors::NONE, request_limit_exceeded, ssResponseData);
498+
}
499+
return ret.empty() ? qdata_ret : ret;
494500
}
495501

496502
if (msg_type == NetMsgType::QDATA) {
@@ -518,7 +524,7 @@ MessageProcessingResult CQuorumManager::ProcessMessage(CNode& pfrom, CConnman& c
518524
}
519525

520526
if (request.GetError() != CQuorumDataRequest::Errors::NONE) {
521-
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- %s: %s, from peer=%d\n", __func__, msg_type, strprintf("Error %d (%s)", request.GetError(), request.GetErrorString()), pfrom.GetId());
527+
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- %s: Error %d (%s), from peer=%d\n", __func__, msg_type, request.GetError(), request.GetErrorString(), pfrom.GetId());
522528
return {};
523529
}
524530

0 commit comments

Comments
 (0)