@@ -126,6 +126,7 @@ class CSigningManager
126
126
127
127
// Incoming and not verified yet
128
128
std::unordered_map<NodeId, std::list<CRecoveredSig>> pendingRecoveredSigs;
129
+ std::list<std::pair<CRecoveredSig, CQuorumCPtr>> pendingReconstructedRecoveredSigs;
129
130
130
131
// must be protected by cs
131
132
FastRandomContext rnd;
@@ -142,13 +143,18 @@ class CSigningManager
142
143
143
144
void ProcessMessage (CNode* pnode, const std::string& strCommand, CDataStream& vRecv, CConnman& connman);
144
145
146
+ // This is called when a recovered signature was was reconstructed from another P2P message and is known to be valid
147
+ // This is the case for example when a signature appears as part of InstantSend or ChainLocks
148
+ void PushReconstructedRecoveredSig (const CRecoveredSig& recoveredSig, const CQuorumCPtr& quorum);
149
+
145
150
private:
146
151
void ProcessMessageRecoveredSig (CNode* pfrom, const CRecoveredSig& recoveredSig, CConnman& connman);
147
152
bool PreVerifyRecoveredSig (NodeId nodeId, const CRecoveredSig& recoveredSig, bool & retBan);
148
153
149
154
void CollectPendingRecoveredSigsToVerify (size_t maxUniqueSessions,
150
155
std::unordered_map<NodeId, std::list<CRecoveredSig>>& retSigShares,
151
156
std::unordered_map<std::pair<Consensus::LLMQType, uint256>, CQuorumCPtr, StaticSaltedHasher>& retQuorums);
157
+ bool ProcessPendingReconstructedRecoveredSigs ();
152
158
bool ProcessPendingRecoveredSigs (CConnman& connman); // called from the worker thread of CSigSharesManager
153
159
void ProcessRecoveredSig (NodeId nodeId, const CRecoveredSig& recoveredSig, const CQuorumCPtr& quorum, CConnman& connman);
154
160
void Cleanup (); // called from the worker thread of CSigSharesManager
0 commit comments