Skip to content

Commit 2ec9f33

Browse files
committed
continue implementation
1 parent b4a2a43 commit 2ec9f33

File tree

5 files changed

+52
-17
lines changed

5 files changed

+52
-17
lines changed

src/dsnotificationinterface.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <llmq/chainlocks.h>
2020
#include <llmq/context.h>
2121
#include <llmq/dkgsessionmgr.h>
22+
#include <llmq/ehf_signals.h>
2223
#include <llmq/instantsend.h>
2324
#include <llmq/quorums.h>
2425

src/llmq/chainlocks.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ void CChainLocksHandler::UpdatedBlockTip()
207207
// EnforceBestChainLock switching chains.
208208
// atomic[If tryLockChainTipScheduled is false, do (set it to true] and schedule signing).
209209
if (bool expected = false; tryLockChainTipScheduled.compare_exchange_strong(expected, true)) {
210+
// TODO: use here pindexRev instead m_chainstate.m_chain.Tip()
210211
scheduler->scheduleFromNow([&]() {
211212
CheckActiveState();
212213
EnforceBestChainLock();

src/llmq/context.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ LLMQContext::LLMQContext(CChainState& chainstate, CConnman& connman, CEvoDB& evo
4646
llmq::quorumInstantSendManager = std::make_unique<llmq::CInstantSendManager>(*llmq::chainLocksHandler, chainstate, connman, *llmq::quorumManager, *sigman, *shareman, sporkman, mempool, *::masternodeSync, peerman, unit_tests, wipe);
4747
return llmq::quorumInstantSendManager.get();
4848
}()},
49-
ehfSignalsHandler{std::make_unique<llmq:CEHFSignalsHandler>(mnhfman)}
49+
ehfSignalsHandler{std::make_unique<llmq:CEHFSignalsHandler>(*sigman, *shareman, mnhfman)}
5050
{
5151
// NOTE: we use this only to wipe the old db, do NOT use it for anything else
5252
// TODO: remove it in some future version

src/llmq/ehf_signals.cpp

+45-14
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66

77
//#include <scheduler.h>
88

9-
namespace llmq;
9+
namespace llmq {
1010

1111

1212
//std::unique_ptr<CEHFSignalsHandler> ehfSignalsHandler;
1313

14-
CEHFSignalsHandler::CEHFSignalsHandler(CMNHFManager& mnhfManager) :
14+
CEHFSignalsHandler::CEHFSignalsHandler(CSigningManager& sigman, CSigSharesManager& shareman,
15+
CMNHFManager& mnhfManager) :
16+
sigman(sigman),
17+
shareman(shareman),
1518
mnhfManager(mnhfManager)
1619
/*,
1720
scheduler(std::make_unique<CScheduler>()),
@@ -47,19 +50,47 @@ void CEHFSignalsHandler::Stop()
4750
sigman.UnregisterRecoveredSigsListener(this);
4851
}
4952

50-
void CEHFSignalsHandler::UpdatedBlockTip()
53+
void CEHFSignalsHandler::UpdatedBlockTip(const CBlockIndex* const pindexNew)
5154
{
52-
// don't call TrySignChainTip directly but instead let the scheduler call it. This way we ensure that cs_main is
53-
// never locked and TrySignChainTip is not called twice in parallel. Also avoids recursive calls due to
54-
// EnforceBestChainLock switching chains.
55-
// atomic[If tryLockChainTipScheduled is false, do (set it to true] and schedule signing).
56-
if (bool expected = false; tryLockChainTipScheduled.compare_exchange_strong(expected, true)) {
57-
scheduler->scheduleFromNow([&]() {
58-
CheckActiveState();
59-
EnforceBestChainLock();
60-
TrySignChainTip();
61-
tryLockChainTipScheduled = false;
62-
}, std::chrono::seconds{0});
55+
/*
56+
scheduler->scheduleFromNow([&]() {
57+
CheckActiveState();
58+
EnforceBestChainLock();
59+
TrySignChainTip();
60+
tryLockChainTipScheduled = false;
61+
}, std::chrono::seconds{0});
62+
*/
63+
if (IsV20Active(pindexNew)) {
64+
trySignEHFSignal(bit MN reward);
65+
}
66+
}
67+
68+
void CEHFSignalsHandler::trySignEHFSignal(int bit)
69+
{
70+
if (!fMasternodeMode) {
71+
return;
6372
}
73+
74+
if (!m_mn_sync.IsBlockchainSynced()) {
75+
return;
76+
}
77+
78+
uint256 requestId = ::SerializeHash(std::make_pair(MNHF_REQUESTID_PREFIX, pindex->nHeight));
79+
/*
80+
uint256 msgHash = pindex->GetBlockHash();
81+
82+
{
83+
LOCK(cs);
84+
if (bestChainLock.getHeight() >= pindex->nHeight) {
85+
// might have happened while we didn't hold cs
86+
return;
87+
}
88+
lastSignedHeight = pindex->nHeight;
89+
lastSignedRequestId = requestId;
90+
lastSignedMsgHash = msgHash;
91+
}
92+
*/
93+
94+
sigman.AsyncSignIfMember(Params().GetConsensus().llmqTypeMNHF, shareman, requestId, msgHash);
6495
}
6596

src/llmq/ehf_signals.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,21 @@ class CSigSharesManager;
1717
class CEHFSignalsHandler : public CRecoveredSigsListener
1818
{
1919
private:
20+
CSigningManager& sigman;
21+
CSigSharesManager& shareman;
2022
CMNHFManager& mnhfManager;
2123

2224
/* std::unique_ptr<CScheduler> scheduler;
2325
std::unique_ptr<std::thread> scheduler_thread;
2426
*/
2527
public:
26-
explicit CEHFSignalsHandler(CMNHFManager& mnhfManager);
28+
explicit CEHFSignalsHandler(CSigningManager& sigman, CSigSharesManager& shareman, CMNHFManager& mnhfManager);
2729
~CEHFSignalsHandler();
2830

2931
void Start();
3032
void Stop();
3133

32-
void UpdatedBlockTip();
34+
void UpdatedBlockTip(const CBlockIndex* const pindexNew);
3335

3436
/*
3537
void BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindex) LOCKS_EXCLUDED(cs);

0 commit comments

Comments
 (0)