Skip to content

Commit c20dfd8

Browse files
committed
fix: cycleHash should represent a cycle starting block of the signing quorum
1 parent bcd14b0 commit c20dfd8

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

src/llmq/instantsend.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -672,21 +672,26 @@ void CInstantSendManager::TrySignInstantSendLock(const CTransaction& tx)
672672
islock.inputs.emplace_back(in.prevout);
673673
}
674674

675-
{
676-
const auto &llmq_params_opt = Params().GetLLMQ(llmqType);
677-
assert(llmq_params_opt);
678-
LOCK(cs_main);
679-
const auto dkgInterval = llmq_params_opt->dkgInterval;
680-
const auto quorumHeight = m_chainstate.m_chain.Height() - (m_chainstate.m_chain.Height() % dkgInterval);
681-
islock.cycleHash = m_chainstate.m_chain[quorumHeight]->GetBlockHash();
682-
}
683-
684675
auto id = islock.GetRequestId();
685676

686677
if (sigman.HasRecoveredSigForId(llmqType, id)) {
687678
return;
688679
}
689680

681+
const auto& llmq_params_opt = Params().GetLLMQ(llmqType);
682+
assert(llmq_params_opt);
683+
const auto quorum = SelectQuorumForSigning(llmq_params_opt.value(), m_chainstate.m_chain, qman, id);
684+
685+
if (!quorum) {
686+
LogPrint(BCLog::INSTANTSEND, "CInstantSendManager::%s -- failed to select quorum. islock id=%s, txid=%s\n",
687+
__func__, id.ToString(), tx.GetHash().ToString());
688+
return;
689+
}
690+
691+
const int cycle_height = quorum->m_quorum_base_block_index->nHeight -
692+
quorum->m_quorum_base_block_index->nHeight % llmq_params_opt->dkgInterval;
693+
islock.cycleHash = quorum->m_quorum_base_block_index->GetAncestor(cycle_height)->GetBlockHash();
694+
690695
{
691696
LOCK(cs_creating);
692697
auto e = creatingInstantSendLocks.emplace(id, std::move(islock));
@@ -696,7 +701,7 @@ void CInstantSendManager::TrySignInstantSendLock(const CTransaction& tx)
696701
txToCreatingInstantSendLocks.emplace(tx.GetHash(), &e.first->second);
697702
}
698703

699-
sigman.AsyncSignIfMember(llmqType, shareman, id, tx.GetHash());
704+
sigman.AsyncSignIfMember(llmqType, shareman, id, tx.GetHash(), quorum->m_quorum_base_block_index->GetBlockHash());
700705
}
701706

702707
void CInstantSendManager::HandleNewInstantSendLockRecoveredSig(const llmq::CRecoveredSig& recoveredSig)

0 commit comments

Comments
 (0)