forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
refactor: split off governance masternode-only logic to GovernanceSigner, drop Relay()s and use periodic relay instead, minor cleanup
#6838
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 1 commit
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
fefbe27
refactor: replace `Sign` functions with direct activeman call
kwvg 2b74e15
refactor: move masternode mode logic to `governance/signing.cpp`
kwvg bd6af83
refactor: separate masternode mode logic into dedicated signer class
kwvg 757ded3
refactor: remove need for access to private members
kwvg 63448ff
refactor: abstract away parent implementation from signer
kwvg 3811924
governance: drop `Relay()` from `CGovernance{Object,Vote}`
kwvg df589c7
governance: introduce task for relaying governance objects
kwvg e224991
governance: add lock annotations for `cs_relay`
kwvg 4d96f5f
refactor: move `DoMaintenance()` inside `Schedule()`
kwvg 1777919
refactor: use `std::chrono` for governance time constants
kwvg d19e1f3
fix: add `nullptr` check before using `FindGovernanceObject()` retval
kwvg c516fd3
refactor: apply review suggestions
kwvg 700e069
refactor: cleanup headers and forward decls
kwvg b51cd1d
lint: apply most `clang-format` suggestions, update circular allowlist
kwvg File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -14,7 +14,6 @@ | |
| #include <governance/common.h> | ||
| #include <governance/validators.h> | ||
| #include <masternode/meta.h> | ||
| #include <masternode/node.h> | ||
| #include <masternode/sync.h> | ||
| #include <net_processing.h> | ||
| #include <netfulfilledman.h> | ||
|
|
@@ -75,6 +74,7 @@ CGovernanceManager::CGovernanceManager(CMasternodeMetaMan& mn_metaman, CNetFulfi | |
| m_mn_sync{mn_sync}, | ||
| nTimeLastDiff(0), | ||
| nCachedBlockHeight(0), | ||
| mapPostponedObjects(), | ||
| fRateChecksEnabled(true), | ||
| votedFundingYesTriggerHash(std::nullopt), | ||
| mapTrigger{} | ||
|
|
@@ -140,6 +140,12 @@ bool CGovernanceManager::SerializeVoteForHash(const uint256& nHash, CDataStream& | |
| return cmapVoteToObject.Get(nHash, pGovobj) && pGovobj->GetVoteFile().SerializeVoteToStream(nHash, ss); | ||
| } | ||
|
|
||
| void CGovernanceManager::AddPostponedObject(const CGovernanceObject& govobj) | ||
| { | ||
| LOCK(cs); | ||
| mapPostponedObjects.insert(std::make_pair(govobj.GetHash(), govobj)); | ||
| } | ||
|
|
||
| MessageProcessingResult CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv) | ||
| { | ||
| if (!IsValid()) return {}; | ||
|
|
@@ -998,6 +1004,11 @@ void CGovernanceManager::RequestGovernanceObject(CNode* pfrom, const uint256& nH | |
| connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::MNGOVERNANCESYNC, nHash, filter)); | ||
| } | ||
|
|
||
| void CGovernanceManager::AddInvalidVote(const CGovernanceVote& vote) | ||
| { | ||
| cmapInvalidVotes.Insert(vote.GetHash(), vote); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. note: it appears we never use this as a map; only as a set. We should consider refactoring this. |
||
| } | ||
|
|
||
| int CGovernanceManager::RequestGovernanceObjectVotes(CNode& peer, CConnman& connman, const PeerManager& peerman) const | ||
| { | ||
| const std::vector<CNode*> vNodeCopy{&peer}; | ||
|
|
@@ -1246,7 +1257,7 @@ UniValue CGovernanceManager::ToJson() const | |
| return jsonObj; | ||
| } | ||
|
|
||
| void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman, PeerManager& peerman, const CActiveMasternodeManager* const mn_activeman) | ||
| void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, PeerManager& peerman) | ||
| { | ||
| // Note this gets called from ActivateBestChain without cs_main being held | ||
| // so it should be safe to lock our mutex here without risking a deadlock | ||
|
|
@@ -1257,12 +1268,6 @@ void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, CConnman& co | |
| return; | ||
| } | ||
|
|
||
| if (mn_activeman) { | ||
| const auto sb_opt = CreateSuperblockCandidate(pindex->nHeight); | ||
| const auto trigger_opt = CreateGovernanceTrigger(sb_opt, peerman, *mn_activeman); | ||
| VoteGovernanceTriggers(trigger_opt, connman, peerman, *mn_activeman); | ||
| } | ||
|
|
||
| nCachedBlockHeight = pindex->nHeight; | ||
| LogPrint(BCLog::GOBJECT, "CGovernanceManager::UpdatedBlockTip -- nCachedBlockHeight: %d\n", nCachedBlockHeight); | ||
|
|
||
|
|
@@ -1655,11 +1660,9 @@ void CGovernanceManager::ExecuteBestSuperblock(const CDeterministicMNList& tip_m | |
| // All checks are done in CSuperblock::IsValid via IsBlockValueValid and IsBlockPayeeValid, | ||
| // tip wouldn't be updated if anything was wrong. Mark this trigger as executed. | ||
| pSuperblock->SetExecuted(); | ||
| ResetVotedFundingTrigger(); | ||
| } | ||
| } | ||
|
|
||
|
|
||
| bool AreSuperblocksEnabled(const CSporkManager& sporkman) | ||
| { | ||
| return sporkman.IsSporkActive(SPORK_9_SUPERBLOCKS_ENABLED); | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@coderabbitai is this line needed? shouldn't a map like this be automatically initialized properly?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Length of output: 3326
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change was made while trying to trim the header count in
governance/governance.hby moving the constructor's definition into the source file so we don't have to include heavier headers and can make do with a forward declaration.It could probably be reversed but no strong feelings either way.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.