Skip to content

Commit 136f900

Browse files
codablockpanleone
authored andcommitted
cherry-pick dashpay#2833
1 parent d942439 commit 136f900

File tree

5 files changed

+39
-41
lines changed

5 files changed

+39
-41
lines changed

src/llmq/quorums.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ static uint256 MakeQuorumKey(const CQuorum& q)
3434
{
3535
CHashWriter hw(SER_NETWORK, 0);
3636
hw << (uint8_t)q.params.type;
37-
hw << q.pindexQuorum->GetBlockHash();
37+
hw << q.qc.quorumHash;
3838
for (const auto& dmn : q.members) {
3939
hw << dmn->proTxHash;
4040
}
@@ -52,13 +52,12 @@ CQuorum::~CQuorum()
5252
}
5353
}
5454

55-
void CQuorum::Init(const uint256& _minedBlockHash, const CBlockIndex* _pindexQuorum, const std::vector<CDeterministicMNCPtr>& _members, const std::vector<bool>& _validMembers, const CBLSPublicKey& _quorumPublicKey)
55+
void CQuorum::Init(const CFinalCommitment& _qc, const CBlockIndex* _pindexQuorum, const uint256& _minedBlockHash, const std::vector<CDeterministicMNCPtr>& _members)
5656
{
57-
minedBlockHash = _minedBlockHash;
57+
qc = _qc;
5858
pindexQuorum = _pindexQuorum;
5959
members = _members;
60-
validMembers = _validMembers;
61-
quorumPublicKey = _quorumPublicKey;
60+
minedBlockHash = _minedBlockHash;
6261
}
6362

6463
bool CQuorum::IsMember(const uint256& proTxHash) const
@@ -75,15 +74,15 @@ bool CQuorum::IsValidMember(const uint256& proTxHash) const
7574
{
7675
for (size_t i = 0; i < members.size(); i++) {
7776
if (members[i]->proTxHash == proTxHash) {
78-
return validMembers[i];
77+
return qc.validMembers[i];
7978
}
8079
}
8180
return false;
8281
}
8382

8483
CBLSPublicKey CQuorum::GetPubKeyShare(size_t memberIdx) const
8584
{
86-
if (quorumVvec == nullptr || memberIdx >= members.size() || !validMembers[memberIdx]) {
85+
if (quorumVvec == nullptr || memberIdx >= members.size() || !qc.validMembers[memberIdx]) {
8786
return CBLSPublicKey();
8887
}
8988
auto& m = members[memberIdx];
@@ -148,7 +147,7 @@ void CQuorum::StartCachePopulatorThread(std::shared_ptr<CQuorum> _this)
148147
// when then later some other thread tries to get keys, it will be much faster
149148
_this->cachePopulatorThread = std::thread(&TraceThread<std::function<void()> >, "quorum-cachepop", [_this, t] {
150149
for (size_t i = 0; i < _this->members.size() && !_this->stopCachePopulatorThread && !ShutdownRequested(); i++) {
151-
if (_this->validMembers[i]) {
150+
if (_this->qc.validMembers[i]) {
152151
_this->GetPubKeyShare(i);
153152
}
154153
}
@@ -186,7 +185,7 @@ bool CQuorumManager::BuildQuorumFromCommitment(const CFinalCommitment& qc, const
186185
assert(qc.quorumHash == pindexQuorum->GetBlockHash());
187186

188187
auto members = deterministicMNManager->GetAllQuorumMembers((Consensus::LLMQType)qc.llmqType, pindexQuorum);
189-
quorum->Init(minedBlockHash, pindexQuorum, members, qc.validMembers, qc.quorumPublicKey);
188+
quorum->Init(qc, pindexQuorum, minedBlockHash, members);
190189

191190
bool hasValidVvec = false;
192191
if (quorum->ReadContributions(evoDb)) {

src/llmq/quorums.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,10 @@ class CQuorum
3535

3636
public:
3737
const Consensus::LLMQParams& params;
38-
uint256 minedBlockHash;
38+
CFinalCommitment qc;
3939
const CBlockIndex* pindexQuorum;
40+
uint256 minedBlockHash;
4041
std::vector<CDeterministicMNCPtr> members;
41-
std::vector<bool> validMembers;
42-
CBLSPublicKey quorumPublicKey;
4342

4443
// These are only valid when we either participated in the DKG or fully watched it
4544
BLSVerificationVectorPtr quorumVvec;
@@ -55,7 +54,7 @@ class CQuorum
5554
public:
5655
CQuorum(const Consensus::LLMQParams& _params, CBLSWorker& _blsWorker) : params(_params), blsCache(_blsWorker), stopCachePopulatorThread(false) {}
5756
~CQuorum();
58-
void Init(const uint256& minedBlockHash, const CBlockIndex* pindexQuorum, const std::vector<CDeterministicMNCPtr>& members, const std::vector<bool>& validMembers, const CBLSPublicKey& quorumPublicKey);
57+
void Init(const CFinalCommitment& _qc, const CBlockIndex* _pindexQuorum, const uint256& _minedBlockHash, const std::vector<CDeterministicMNCPtr>& _members);
5958

6059
bool IsMember(const uint256& proTxHash) const;
6160
bool IsValidMember(const uint256& proTxHash) const;

src/llmq/quorums_signing.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ bool CSigningManager::PreVerifyRecoveredSig(NodeId nodeId, const CRecoveredSig&
498498
recoveredSig.quorumHash.ToString(), nodeId);
499499
return false;
500500
}
501-
if (!llmq::utils::IsQuorumActive(llmqType, quorum->pindexQuorum->GetBlockHash())) {
501+
if (!llmq::utils::IsQuorumActive(llmqType, quorum->qc.quorumHash)) {
502502
return false;
503503
}
504504

@@ -553,7 +553,7 @@ void CSigningManager::CollectPendingRecoveredSigsToVerify(
553553
it = v.erase(it);
554554
continue;
555555
}
556-
if (!llmq::utils::IsQuorumActive(llmqType, quorum->pindexQuorum->GetBlockHash())) {
556+
if (!llmq::utils::IsQuorumActive(llmqType, quorum->qc.quorumHash)) {
557557
LogPrint(BCLog::LLMQ, "CSigningManager::%s -- quorum %s not active anymore, node=%d\n", __func__,
558558
recSig.quorumHash.ToString(), nodeId);
559559
it = v.erase(it);
@@ -595,7 +595,7 @@ bool CSigningManager::ProcessPendingRecoveredSigs(CConnman& connman)
595595
}
596596

597597
const auto& quorum = quorums.at(std::make_pair((Consensus::LLMQType)recSig.llmqType, recSig.quorumHash));
598-
batchVerifier.PushMessage(nodeId, recSig.GetHash(), llmq::utils::BuildSignHash(recSig), recSig.sig.Get(), quorum->quorumPublicKey);
598+
batchVerifier.PushMessage(nodeId, recSig.GetHash(), llmq::utils::BuildSignHash(recSig), recSig.sig.Get(), quorum->qc.quorumPublicKey);
599599
verifyCount++;
600600
}
601601
}
@@ -863,7 +863,7 @@ CQuorumCPtr CSigningManager::SelectQuorumForSigning(Consensus::LLMQType llmqType
863863
for (size_t i = 0; i < quorums.size(); i++) {
864864
CHashWriter h(SER_NETWORK, 0);
865865
h << (uint8_t)llmqType;
866-
h << quorums[i]->pindexQuorum->GetBlockHash();
866+
h << quorums[i]->qc.quorumHash;
867867
h << selectionHash;
868868
scores.emplace_back(h.GetHash(), i);
869869
}
@@ -880,8 +880,8 @@ bool CSigningManager::VerifyRecoveredSig(Consensus::LLMQType llmqType, int signe
880880
return false;
881881
}
882882

883-
uint256 signHash = llmq::utils::BuildSignHash(llmqParams.type, quorum->pindexQuorum->GetBlockHash(), id, msgHash);
884-
return sig.VerifyInsecure(quorum->quorumPublicKey, signHash);
883+
uint256 signHash = llmq::utils::BuildSignHash(llmqParams.type, quorum->qc.quorumHash, id, msgHash);
884+
return sig.VerifyInsecure(quorum->qc.quorumPublicKey, signHash);
885885
}
886886

887887
} // namespace llmq

src/llmq/quorums_signing_shares.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ void CSigSharesManager::ProcessMessageSigShare(NodeId fromId, const CSigShare& s
479479
if (!quorum) {
480480
return;
481481
}
482-
if (!llmq::utils::IsQuorumActive((Consensus::LLMQType)sigShare.llmqType, quorum->pindexQuorum->GetBlockHash())) {
482+
if (!llmq::utils::IsQuorumActive((Consensus::LLMQType)sigShare.llmqType, quorum->qc.quorumHash)) {
483483
// quorum is too old
484484
return;
485485
}
@@ -490,7 +490,7 @@ void CSigSharesManager::ProcessMessageSigShare(NodeId fromId, const CSigShare& s
490490
if (quorum->quorumVvec == nullptr) {
491491
// TODO we should allow to ask other nodes for the quorum vvec if we missed it in the DKG
492492
LogPrint(BCLog::LLMQ, "CSigSharesManager::%s -- we don't have the quorum vvec for %s, no verification possible. node=%d\n", __func__,
493-
quorum->pindexQuorum->GetBlockHash().ToString(), fromId);
493+
quorum->qc.quorumHash.ToString(), fromId);
494494
return;
495495
}
496496

@@ -499,11 +499,11 @@ void CSigSharesManager::ProcessMessageSigShare(NodeId fromId, const CSigShare& s
499499
BanNode(fromId);
500500
return;
501501
}
502-
// if (!quorum->qc.validMembers[sigShare.quorumMember]) {
503-
// LogPrint(BCLog::LLMQ, "CSigSharesManager::%s -- quorumMember not valid\n", __func__);
504-
// BanNode(fromId);
505-
// return;
506-
// }
502+
if (!quorum->qc.validMembers[sigShare.quorumMember]) {
503+
LogPrint(BCLog::LLMQ, "CSigSharesManager::%s -- quorumMember not valid\n", __func__);
504+
BanNode(fromId);
505+
return;
506+
}
507507

508508
{
509509
LOCK(cs);
@@ -528,7 +528,7 @@ bool CSigSharesManager::PreVerifyBatchedSigShares(NodeId nodeId, const CSigShare
528528
{
529529
retBan = false;
530530

531-
if (!llmq::utils::IsQuorumActive(session.llmqType, session.quorum->pindexQuorum->GetBlockHash())) {
531+
if (!llmq::utils::IsQuorumActive(session.llmqType, session.quorum->qc.quorumHash)) {
532532
// quorum is too old
533533
return false;
534534
}
@@ -557,7 +557,7 @@ bool CSigSharesManager::PreVerifyBatchedSigShares(NodeId nodeId, const CSigShare
557557
retBan = true;
558558
return false;
559559
}
560-
if (!session.quorum->validMembers[quorumMember]) {
560+
if (!session.quorum->qc.validMembers[quorumMember]) {
561561
LogPrintf("CSigSharesManager::%s -- quorumMember not valid\n", __func__);
562562
retBan = true;
563563
return false;
@@ -778,7 +778,7 @@ void CSigSharesManager::TryRecoverSig(const CQuorumCPtr& quorum, const uint256&
778778

779779
auto k = std::make_pair(quorum->params.type, id);
780780

781-
auto signHash = llmq::utils::BuildSignHash(quorum->params.type, quorum->pindexQuorum->GetBlockHash(), id, msgHash);
781+
auto signHash = llmq::utils::BuildSignHash(quorum->params.type, quorum->qc.quorumHash, id, msgHash);
782782
auto sigShares = this->sigShares.GetAllForSignHash(signHash);
783783
if (!sigShares) {
784784
return;
@@ -812,7 +812,7 @@ void CSigSharesManager::TryRecoverSig(const CQuorumCPtr& quorum, const uint256&
812812

813813
CRecoveredSig rs;
814814
rs.llmqType = quorum->params.type;
815-
rs.quorumHash = quorum->pindexQuorum->GetBlockHash();
815+
rs.quorumHash = quorum->qc.quorumHash;
816816
rs.id = id;
817817
rs.msgHash = msgHash;
818818
rs.sig.Set(recoveredSig);
@@ -823,7 +823,7 @@ void CSigSharesManager::TryRecoverSig(const CQuorumCPtr& quorum, const uint256&
823823
// verification because this is unbatched and thus slow verification that happens here.
824824
if (((recoveredSigsCounter++) % 100) == 0) {
825825
auto signHash = llmq::utils::BuildSignHash(rs);
826-
bool valid = recoveredSig.VerifyInsecure(quorum->quorumPublicKey, signHash);
826+
bool valid = recoveredSig.VerifyInsecure(quorum->qc.quorumPublicKey, signHash);
827827
if (!valid) {
828828
// this should really not happen as we have verified all signature shares before
829829
LogPrintf("CSigSharesManager::%s -- own recovered signature is invalid. id=%s, msgHash=%s\n", __func__,
@@ -1521,7 +1521,7 @@ void CSigSharesManager::Sign(const CQuorumCPtr& quorum, const uint256& id, const
15211521

15221522
CBLSSecretKey skShare = quorum->GetSkShare();
15231523
if (!skShare.IsValid()) {
1524-
LogPrint(BCLog::LLMQ, "CSigSharesManager::%s -- we don't have our skShare for quorum %s\n", __func__, quorum->pindexQuorum->GetBlockHash().ToString());
1524+
LogPrint(BCLog::LLMQ, "CSigSharesManager::%s -- we don't have our skShare for quorum %s\n", __func__, quorum->qc.quorumHash.ToString());
15251525
return;
15261526
}
15271527

@@ -1533,7 +1533,7 @@ void CSigSharesManager::Sign(const CQuorumCPtr& quorum, const uint256& id, const
15331533

15341534
CSigShare sigShare;
15351535
sigShare.llmqType = quorum->params.type;
1536-
sigShare.quorumHash = quorum->pindexQuorum->GetBlockHash();
1536+
sigShare.quorumHash = quorum->qc.quorumHash;
15371537
sigShare.id = id;
15381538
sigShare.msgHash = msgHash;
15391539
sigShare.quorumMember = (uint16_t)memberIdx;
@@ -1549,7 +1549,7 @@ void CSigSharesManager::Sign(const CQuorumCPtr& quorum, const uint256& id, const
15491549
sigShare.UpdateKey();
15501550

15511551
LogPrint(BCLog::LLMQ, "CSigSharesManager::%s -- signed sigShare. signHash=%s, id=%s, msgHash=%s, llmqType=%d, quorum=%s, time=%s\n", __func__,
1552-
signHash.ToString(), sigShare.id.ToString(), sigShare.msgHash.ToString(), quorum->params.type, quorum->pindexQuorum->GetBlockHash().ToString(), t.count());
1552+
signHash.ToString(), sigShare.id.ToString(), sigShare.msgHash.ToString(), quorum->params.type, quorum->qc.quorumHash.ToString(), t.count());
15531553
ProcessSigShare(-1, sigShare, *g_connman, quorum);
15541554

15551555
LOCK(cs);
@@ -1564,7 +1564,7 @@ void CSigSharesManager::Sign(const CQuorumCPtr& quorum, const uint256& id, const
15641564
void CSigSharesManager::ForceReAnnouncement(const CQuorumCPtr& quorum, Consensus::LLMQType llmqType, const uint256& id, const uint256& msgHash)
15651565
{
15661566
LOCK(cs);
1567-
auto signHash = llmq::utils::BuildSignHash(llmqType, quorum->pindexQuorum->GetBlockHash(), id, msgHash);
1567+
auto signHash = llmq::utils::BuildSignHash(llmqType, quorum->qc.quorumHash, id, msgHash);
15681568
auto sigs = sigShares.GetAllForSignHash(signHash);
15691569
if (sigs) {
15701570
for (auto& p : *sigs) {

src/rpc/rpcquorums.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ UniValue listquorums(const JSONRPCRequest& request)
141141

142142
auto quorums = llmq::quorumManager->ScanQuorums(p.first, chainActive.Tip(), count);
143143
for (auto& q : quorums) {
144-
v.push_back(q->pindexQuorum->GetBlockHash().ToString());
144+
v.push_back(q->qc.quorumHash.ToString());
145145
}
146146

147147
ret.pushKV(p.second.name, v);
@@ -201,15 +201,15 @@ UniValue getquoruminfo(const JSONRPCRequest& request)
201201
UniValue ret(UniValue::VOBJ);
202202

203203
ret.pushKV("height", quorum->pindexQuorum->nHeight);
204-
ret.pushKV("quorumHash", quorum->pindexQuorum->GetBlockHash().ToString());
204+
ret.pushKV("quorumHash", quorum->qc.quorumHash.ToString());
205205

206206
UniValue membersArr(UniValue::VARR);
207207
for (size_t i = 0; i < quorum->members.size(); i++) {
208208
auto& dmn = quorum->members[i];
209209
UniValue mo(UniValue::VOBJ);
210210
mo.pushKV("proTxHash", dmn->proTxHash.ToString());
211-
mo.pushKV("valid", quorum->validMembers[i]);
212-
if (quorum->validMembers[i]) {
211+
mo.pushKV("valid", quorum->qc.validMembers[i]);
212+
if (quorum->qc.validMembers[i]) {
213213
CBLSPublicKey pubKey = quorum->GetPubKeyShare(i);
214214
if (pubKey.IsValid()) {
215215
mo.pushKV("pubKeyShare", pubKey.ToString());
@@ -219,7 +219,7 @@ UniValue getquoruminfo(const JSONRPCRequest& request)
219219
}
220220

221221
ret.pushKV("members", membersArr);
222-
ret.pushKV("quorumPublicKey", quorum->quorumPublicKey.ToString());
222+
ret.pushKV("quorumPublicKey", quorum->qc.quorumPublicKey.ToString());
223223
CBLSSecretKey skShare = quorum->GetSkShare();
224224
if (includeSkShare && skShare.IsValid()) {
225225
ret.pushKV("secretKeyShare", skShare.ToString());
@@ -374,7 +374,7 @@ UniValue quorumselectquorum(const JSONRPCRequest& request)
374374
if (!quorum) {
375375
throw JSONRPCError(RPC_MISC_ERROR, "no quorums active");
376376
}
377-
ret.pushKV("quorumHash", quorum->pindexQuorum->GetBlockHash().ToString());
377+
ret.pushKV("quorumHash", quorum->qc.quorumHash.ToString());
378378

379379
UniValue recoveryMembers(UniValue::VARR);
380380
for (int i = 0; i < quorum->params.recoveryMembers; i++) {

0 commit comments

Comments
 (0)