Skip to content

Commit 8286bdf

Browse files
knstUdjinM6
andcommitted
fix: assert in signing_shares - amount of members can match with amount of attempts
Co-Authored-By: UdjinM6 <UdjinM6@users.noreply.github.com>
1 parent d754799 commit 8286bdf

File tree

3 files changed

+5
-5
lines changed

3 files changed

+5
-5
lines changed

src/llmq/signing_shares.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -807,9 +807,9 @@ void CSigSharesManager::TryRecoverSig(const CQuorumCPtr& quorum, const uint256&
807807
sigman.ProcessRecoveredSig(rs);
808808
}
809809

810-
CDeterministicMNCPtr CSigSharesManager::SelectMemberForRecovery(const CQuorumCPtr& quorum, const uint256 &id, size_t attempt)
810+
CDeterministicMNCPtr CSigSharesManager::SelectMemberForRecovery(const CQuorumCPtr& quorum, const uint256 &id, int attempt)
811811
{
812-
assert(size_t(attempt) < quorum->members.size());
812+
assert(attempt < quorum->params.recoveryMembers);
813813

814814
std::vector<std::pair<uint256, CDeterministicMNCPtr>> v;
815815
v.reserve(quorum->members.size());
@@ -819,7 +819,7 @@ CDeterministicMNCPtr CSigSharesManager::SelectMemberForRecovery(const CQuorumCPt
819819
}
820820
std::sort(v.begin(), v.end());
821821

822-
return v[attempt].second;
822+
return v[attempt % v.size()].second;
823823
}
824824

825825
void CSigSharesManager::CollectSigSharesToRequest(std::unordered_map<NodeId, std::unordered_map<uint256, CSigSharesInv, StaticSaltedHasher>>& sigSharesToRequest)

src/llmq/signing_shares.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ class CSigSharesManager : public CRecoveredSigsListener
434434

435435
void HandleNewRecoveredSig(const CRecoveredSig& recoveredSig) override;
436436

437-
static CDeterministicMNCPtr SelectMemberForRecovery(const CQuorumCPtr& quorum, const uint256& id, size_t attempt);
437+
static CDeterministicMNCPtr SelectMemberForRecovery(const CQuorumCPtr& quorum, const uint256& id, int attempt);
438438

439439
private:
440440
// all of these return false when the currently processed message should be aborted (as each message actually contains multiple messages)

src/rpc/quorums.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,7 @@ static RPCHelpMan quorum_selectquorum()
732732
ret.pushKV("quorumHash", quorum->qc->quorumHash.ToString());
733733

734734
UniValue recoveryMembers(UniValue::VARR);
735-
for (size_t i = 0; i < size_t(quorum->params.recoveryMembers); i++) {
735+
for (int i = 0; i < quorum->params.recoveryMembers; ++i) {
736736
auto dmn = llmq_ctx.shareman->SelectMemberForRecovery(quorum, id, i);
737737
recoveryMembers.push_back(dmn->proTxHash.ToString());
738738
}

0 commit comments

Comments
 (0)