f305cf77b6
* Indicate success when signing was unnecessary * Fix typo in name of LLMQ_400_60 * Move RemoveAskFor call for CLSIGs into ProcessNewChainLock In case we got INV items for the same CLSIG that we recreated through HandleNewRecoveredSig, (re-)requesting of the CLSIG from other peers becomes unnecessary. * Move Cleanup() call in CChainLocksHandler::UpdatedBlockTip up We bail out early in a few situations from this method, so that Cleanup() might not be called while its at the bottom. * Bail out from CChainLocksHandler::UpdatedBlockTip if we already got the CLSIG * Call RemoveAskFor when QFCOMMITMENT was received Otherwise we might end up re-requesting it for a very long time when the commitment INV was received shortly before it got mined. * Call RemoveSigSharesForSession when a recovered sig is received Otherwise we end up with session data in node states lingering around until a fake "timeout" occurs (can be seen in the logs). * Better handling of false-positive conflicts in CSigningManager The old code was emitting a lot of messages in logs as it treated sigs for exactly the same session as a conflict. This commit fixes this by looking at the signHash before logging. Also handle a corner-case where a recovered sig might be deleted between the HasRecoveredSigForId and GetRecoveredSigById call. * Don't run into session timeout when sig shares come in slow Instead of just tracking when the first share was received, we now also track when the last (non-duplicate) share was received. Sessios will now timeout 5 minutes after the first share arrives, or 1 minute after the last one arrived.
91 lines
2.5 KiB
C++
91 lines
2.5 KiB
C++
// Copyright (c) 2018-2019 The Dash Core developers
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include "quorums_init.h"
|
|
|
|
#include "quorums.h"
|
|
#include "quorums_blockprocessor.h"
|
|
#include "quorums_commitment.h"
|
|
#include "quorums_chainlocks.h"
|
|
#include "quorums_debug.h"
|
|
#include "quorums_dkgsessionmgr.h"
|
|
#include "quorums_signing.h"
|
|
#include "quorums_signing_shares.h"
|
|
|
|
#include "scheduler.h"
|
|
|
|
namespace llmq
|
|
{
|
|
|
|
static CBLSWorker blsWorker;
|
|
|
|
void InitLLMQSystem(CEvoDB& evoDb, CScheduler* scheduler, bool unitTests)
|
|
{
|
|
quorumDKGDebugManager = new CDKGDebugManager(scheduler);
|
|
quorumBlockProcessor = new CQuorumBlockProcessor(evoDb);
|
|
quorumDKGSessionManager = new CDKGSessionManager(evoDb, blsWorker);
|
|
quorumManager = new CQuorumManager(evoDb, blsWorker, *quorumDKGSessionManager);
|
|
quorumSigSharesManager = new CSigSharesManager();
|
|
quorumSigningManager = new CSigningManager(unitTests);
|
|
chainLocksHandler = new CChainLocksHandler(scheduler);
|
|
}
|
|
|
|
void DestroyLLMQSystem()
|
|
{
|
|
delete chainLocksHandler;
|
|
chainLocksHandler = nullptr;
|
|
delete quorumSigningManager;
|
|
quorumSigningManager = nullptr;
|
|
delete quorumSigSharesManager;
|
|
quorumSigSharesManager = nullptr;
|
|
delete quorumManager;
|
|
quorumManager = NULL;
|
|
delete quorumDKGSessionManager;
|
|
quorumDKGSessionManager = NULL;
|
|
delete quorumBlockProcessor;
|
|
quorumBlockProcessor = nullptr;
|
|
delete quorumDKGDebugManager;
|
|
quorumDKGDebugManager = nullptr;
|
|
}
|
|
|
|
void StartLLMQSystem()
|
|
{
|
|
if (quorumDKGDebugManager) {
|
|
quorumDKGDebugManager->StartScheduler();
|
|
}
|
|
if (quorumDKGSessionManager) {
|
|
quorumDKGSessionManager->StartMessageHandlerPool();
|
|
}
|
|
if (quorumSigSharesManager) {
|
|
quorumSigSharesManager->RegisterAsRecoveredSigsListener();
|
|
quorumSigSharesManager->StartWorkerThread();
|
|
}
|
|
if (chainLocksHandler) {
|
|
chainLocksHandler->RegisterAsRecoveredSigsListener();
|
|
}
|
|
}
|
|
|
|
void StopLLMQSystem()
|
|
{
|
|
if (chainLocksHandler) {
|
|
chainLocksHandler->UnregisterAsRecoveredSigsListener();
|
|
}
|
|
if (quorumSigSharesManager) {
|
|
quorumSigSharesManager->StopWorkerThread();
|
|
quorumSigSharesManager->UnregisterAsRecoveredSigsListener();
|
|
}
|
|
if (quorumDKGSessionManager) {
|
|
quorumDKGSessionManager->StopMessageHandlerPool();
|
|
}
|
|
}
|
|
|
|
void InterruptLLMQSystem()
|
|
{
|
|
if (quorumSigSharesManager) {
|
|
quorumSigSharesManager->InterruptWorkerThread();
|
|
}
|
|
}
|
|
|
|
}
|