mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 04:22:55 +01:00
llmq|rpc: Avoid some quorum data related copying (#3974)
* llmq|rpc: Return const reference in CQuorum::GetSkShare * llmq: Refactor BuildQuorumContributions
This commit is contained in:
parent
edc286be46
commit
d9105d8de1
@ -105,7 +105,7 @@ CBLSPublicKey CQuorum::GetPubKeyShare(size_t memberIdx) const
|
|||||||
return blsCache.BuildPubKeyShare(m->proTxHash, quorumVvec, CBLSId(m->proTxHash));
|
return blsCache.BuildPubKeyShare(m->proTxHash, quorumVvec, CBLSId(m->proTxHash));
|
||||||
}
|
}
|
||||||
|
|
||||||
CBLSSecretKey CQuorum::GetSkShare() const
|
const CBLSSecretKey& CQuorum::GetSkShare() const
|
||||||
{
|
{
|
||||||
return skShare;
|
return skShare;
|
||||||
}
|
}
|
||||||
@ -286,19 +286,17 @@ bool CQuorumManager::BuildQuorumContributions(const CFinalCommitment& fqc, std::
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
BLSVerificationVectorPtr quorumVvec;
|
|
||||||
CBLSSecretKey skShare;
|
|
||||||
|
|
||||||
cxxtimer::Timer t2(true);
|
cxxtimer::Timer t2(true);
|
||||||
quorumVvec = blsWorker.BuildQuorumVerificationVector(vvecs);
|
quorum->quorumVvec = blsWorker.BuildQuorumVerificationVector(vvecs);
|
||||||
if (quorumVvec == nullptr) {
|
if (quorum->quorumVvec == nullptr) {
|
||||||
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- failed to build quorumVvec\n", __func__);
|
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- failed to build quorumVvec\n", __func__);
|
||||||
// without the quorum vvec, there can't be a skShare, so we fail here. Failure is not fatal here, as it still
|
// without the quorum vvec, there can't be a skShare, so we fail here. Failure is not fatal here, as it still
|
||||||
// allows to use the quorum as a non-member (verification through the quorum pub key)
|
// allows to use the quorum as a non-member (verification through the quorum pub key)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
skShare = blsWorker.AggregateSecretKeys(skContributions);
|
quorum->skShare = blsWorker.AggregateSecretKeys(skContributions);
|
||||||
if (!skShare.IsValid()) {
|
if (!quorum->skShare.IsValid()) {
|
||||||
|
quorum->skShare.Reset();
|
||||||
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- failed to build skShare\n", __func__);
|
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- failed to build skShare\n", __func__);
|
||||||
// We don't bail out here as this is not a fatal error and still allows us to recover public key shares (as we
|
// We don't bail out here as this is not a fatal error and still allows us to recover public key shares (as we
|
||||||
// have a valid quorum vvec at this point)
|
// have a valid quorum vvec at this point)
|
||||||
@ -307,9 +305,6 @@ bool CQuorumManager::BuildQuorumContributions(const CFinalCommitment& fqc, std::
|
|||||||
|
|
||||||
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- built quorum vvec and skShare. time=%d\n", __func__, t2.count());
|
LogPrint(BCLog::LLMQ, "CQuorumManager::%s -- built quorum vvec and skShare. time=%d\n", __func__, t2.count());
|
||||||
|
|
||||||
quorum->quorumVvec = quorumVvec;
|
|
||||||
quorum->skShare = skShare;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ public:
|
|||||||
int GetMemberIndex(const uint256& proTxHash) const;
|
int GetMemberIndex(const uint256& proTxHash) const;
|
||||||
|
|
||||||
CBLSPublicKey GetPubKeyShare(size_t memberIdx) const;
|
CBLSPublicKey GetPubKeyShare(size_t memberIdx) const;
|
||||||
CBLSSecretKey GetSkShare() const;
|
const CBLSSecretKey& GetSkShare() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void WriteContributions(CEvoDB& evoDb);
|
void WriteContributions(CEvoDB& evoDb);
|
||||||
|
@ -1569,7 +1569,7 @@ CSigShare CSigSharesManager::CreateSigShare(const CQuorumCPtr& quorum, const uin
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
CBLSSecretKey skShare = quorum->GetSkShare();
|
const CBLSSecretKey& skShare = quorum->GetSkShare();
|
||||||
if (!skShare.IsValid()) {
|
if (!skShare.IsValid()) {
|
||||||
LogPrint(BCLog::LLMQ_SIGS, "CSigSharesManager::%s -- we don't have our skShare for quorum %s\n", __func__, quorum->qc.quorumHash.ToString());
|
LogPrint(BCLog::LLMQ_SIGS, "CSigSharesManager::%s -- we don't have our skShare for quorum %s\n", __func__, quorum->qc.quorumHash.ToString());
|
||||||
return {};
|
return {};
|
||||||
|
@ -111,7 +111,7 @@ UniValue BuildQuorumInfo(const llmq::CQuorumCPtr& quorum, bool includeMembers, b
|
|||||||
ret.pushKV("members", membersArr);
|
ret.pushKV("members", membersArr);
|
||||||
}
|
}
|
||||||
ret.pushKV("quorumPublicKey", quorum->qc.quorumPublicKey.ToString());
|
ret.pushKV("quorumPublicKey", quorum->qc.quorumPublicKey.ToString());
|
||||||
CBLSSecretKey skShare = quorum->GetSkShare();
|
const CBLSSecretKey& skShare = quorum->GetSkShare();
|
||||||
if (includeSkShare && skShare.IsValid()) {
|
if (includeSkShare && skShare.IsValid()) {
|
||||||
ret.pushKV("secretKeyShare", skShare.ToString());
|
ret.pushKV("secretKeyShare", skShare.ToString());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user