@@ -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
702707void CInstantSendManager::HandleNewInstantSendLockRecoveredSig (const llmq::CRecoveredSig& recoveredSig)
0 commit comments