@@ -876,7 +876,9 @@ void CSigningManager::UnregisterRecoveredSigsListener(CRecoveredSigsListener* l)
876876 recoveredSigsListeners.erase (itRem, recoveredSigsListeners.end ());
877877}
878878
879- bool CSigningManager::AsyncSignIfMember (Consensus::LLMQType llmqType, CSigSharesManager& shareman, const uint256& id, const uint256& msgHash, const uint256& quorumHash, bool allowReSign)
879+ bool CSigningManager::AsyncSignIfMember (Consensus::LLMQType llmqType, CSigSharesManager& shareman, const uint256& id,
880+ const uint256& msgHash, const uint256& quorumHash, bool allowReSign,
881+ bool allowDiffMsgHashSigning)
880882{
881883 if (m_mn_activeman == nullptr ) return false ;
882884 if (m_mn_activeman->GetProTxHash ().IsNull ()) return false ;
@@ -911,9 +913,15 @@ bool CSigningManager::AsyncSignIfMember(Consensus::LLMQType llmqType, CSigShares
911913 uint256 prevMsgHash;
912914 db.GetVoteForId (llmqType, id, prevMsgHash);
913915 if (msgHash != prevMsgHash) {
914- LogPrintf (" CSigningManager::%s -- already voted for id=%s and msgHash=%s. Not voting on conflicting msgHash=%s\n " , __func__,
915- id.ToString (), prevMsgHash.ToString (), msgHash.ToString ());
916- return false ;
916+ if (allowDiffMsgHashSigning) {
917+ LogPrintf (" CSigningManager::%s -- already voted for id=%s and msgHash=%s. Signing for different msgHash=%s\n " ,
918+ __func__, id.ToString (), prevMsgHash.ToString (), msgHash.ToString ());
919+ hasVoted = false ;
920+ } else {
921+ LogPrintf (" CSigningManager::%s -- already voted for id=%s and msgHash=%s. Not voting on conflicting msgHash=%s\n " ,
922+ __func__, id.ToString (), prevMsgHash.ToString (), msgHash.ToString ());
923+ return false ;
924+ }
917925 } else if (allowReSign) {
918926 LogPrint (BCLog::LLMQ, " CSigningManager::%s -- already voted for id=%s and msgHash=%s. Resigning!\n " , __func__,
919927 id.ToString (), prevMsgHash.ToString ());
0 commit comments