dash/src/governance/governance-votedb.cpp

129 lines
3.7 KiB
C++
Raw Normal View History

// Copyright (c) 2014-2021 The Dash Core developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
Backport 11651 (#3358) * scripted-diff: Replace #include "" with #include <> (ryanofsky) -BEGIN VERIFY SCRIPT- for f in \ src/*.cpp \ src/*.h \ src/bench/*.cpp \ src/bench/*.h \ src/compat/*.cpp \ src/compat/*.h \ src/consensus/*.cpp \ src/consensus/*.h \ src/crypto/*.cpp \ src/crypto/*.h \ src/crypto/ctaes/*.h \ src/policy/*.cpp \ src/policy/*.h \ src/primitives/*.cpp \ src/primitives/*.h \ src/qt/*.cpp \ src/qt/*.h \ src/qt/test/*.cpp \ src/qt/test/*.h \ src/rpc/*.cpp \ src/rpc/*.h \ src/script/*.cpp \ src/script/*.h \ src/support/*.cpp \ src/support/*.h \ src/support/allocators/*.h \ src/test/*.cpp \ src/test/*.h \ src/wallet/*.cpp \ src/wallet/*.h \ src/wallet/test/*.cpp \ src/wallet/test/*.h \ src/zmq/*.cpp \ src/zmq/*.h do base=${f%/*}/ relbase=${base#src/} sed -i "s:#include \"\(.*\)\"\(.*\):if test -e \$base'\\1'; then echo \"#include <\"\$relbase\"\\1>\\2\"; else echo \"#include <\\1>\\2\"; fi:e" $f done -END VERIFY SCRIPT- Signed-off-by: Pasta <pasta@dashboost.org> * scripted-diff: Replace #include "" with #include <> (Dash Specific) -BEGIN VERIFY SCRIPT- for f in \ src/bls/*.cpp \ src/bls/*.h \ src/evo/*.cpp \ src/evo/*.h \ src/governance/*.cpp \ src/governance/*.h \ src/llmq/*.cpp \ src/llmq/*.h \ src/masternode/*.cpp \ src/masternode/*.h \ src/privatesend/*.cpp \ src/privatesend/*.h do base=${f%/*}/ relbase=${base#src/} sed -i "s:#include \"\(.*\)\"\(.*\):if test -e \$base'\\1'; then echo \"#include <\"\$relbase\"\\1>\\2\"; else echo \"#include <\\1>\\2\"; fi:e" $f done -END VERIFY SCRIPT- Signed-off-by: Pasta <pasta@dashboost.org> * build: Remove -I for everything but project root Remove -I from build system for everything but the project root, and built-in dependencies. Signed-off-by: Pasta <pasta@dashboost.org> # Conflicts: # src/Makefile.test.include * qt: refactor: Use absolute include paths in .ui files * qt: refactor: Changes to make include paths absolute This makes all include paths in the GUI absolute. Many changes are involved as every single source file in src/qt/ assumes to be able to use relative includes. Signed-off-by: Pasta <pasta@dashboost.org> # Conflicts: # src/qt/dash.cpp # src/qt/optionsmodel.cpp # src/qt/test/rpcnestedtests.cpp * test: refactor: Use absolute include paths for test data files * Recommend #include<> syntax in developer notes * refactor: Include obj/build.h instead of build.h * END BACKPORT #11651 Remove trailing whitespace causing travis failure * fix backport 11651 Signed-off-by: Pasta <pasta@dashboost.org> * More of 11651 * fix blockchain.cpp Signed-off-by: pasta <pasta@dashboost.org> * Add missing "qt/" in includes * Add missing "test/" in includes * Fix trailing whitespaces Co-authored-by: Wladimir J. van der Laan <laanwj@gmail.com> Co-authored-by: Russell Yanofsky <russ@yanofsky.org> Co-authored-by: MeshCollider <dobsonsa68@gmail.com> Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
2020-03-19 23:46:56 +01:00
#include <governance/governance-votedb.h>
CGovernanceObjectVoteFile::CGovernanceObjectVoteFile() :
nMemoryVotes(0),
listVotes(),
mapVoteIndex()
{
}
CGovernanceObjectVoteFile::CGovernanceObjectVoteFile(const CGovernanceObjectVoteFile& other) :
nMemoryVotes(other.nMemoryVotes),
listVotes(other.listVotes),
mapVoteIndex()
{
RebuildIndex();
}
void CGovernanceObjectVoteFile::AddVote(const CGovernanceVote& vote)
{
A pack of small fixes (#1992) * Make sure gobject collateral was mined `CGovernanceObject::IsCollateralValid()` would still fail for non-mined collateral later trying to check confirmations * Fix powLimit for mainnet/testnet That's a legacy thing, slightly rising it to match the actual bit-shifted value has no effect because real values are already lower. Also clarify values for all networks in comments. * Check for script addresses in CSuperblock::ParsePaymentSchedule() Sentinel should already be downvoting such triggers if they would exist, no need to store/relay them. * Do not process already known valid vote twice in CGovernanceObject::ProcessVote() This should be handled by `CGovernanceManager::ProcessVote()` but imo it's better to have this at the `CGovernanceObject::ProcessVote()` level as well. * Make sure CGovernanceObjectVoteFile::AddVote() never adds/updates already known votes The way `CGovernanceObjectVoteFile::AddVote()` is used (i.e. wrapped in `CGovernanceObjectVoteFile::HasVote()` condition) it's already the case. Hoever nothing would guarantee consistency if it would be used elsewhere without such wrapper, so it's better to have similar check inside. * Do not even try mnb recovery when -connect is set `CConnman::ThreadOpenMasternodeConnections()` thread won't even start when `-connect` is set, so no need to ask for recovery, there is nothing that is going to be able to process such request. * No need for SIGHASH_ANYONECANPAY in PS collateral signature Collateral is just a normal tx created and signed by each participant individually, there is no need for special sig types. * Release semMasternodeOutbound in CConnman::Interrupt() Re-align Dash code with Bitcoin.
2018-03-19 14:08:32 +01:00
uint256 nHash = vote.GetHash();
// make sure to never add/update already known votes
if (HasVote(nHash))
return;
listVotes.push_front(vote);
A pack of small fixes (#1992) * Make sure gobject collateral was mined `CGovernanceObject::IsCollateralValid()` would still fail for non-mined collateral later trying to check confirmations * Fix powLimit for mainnet/testnet That's a legacy thing, slightly rising it to match the actual bit-shifted value has no effect because real values are already lower. Also clarify values for all networks in comments. * Check for script addresses in CSuperblock::ParsePaymentSchedule() Sentinel should already be downvoting such triggers if they would exist, no need to store/relay them. * Do not process already known valid vote twice in CGovernanceObject::ProcessVote() This should be handled by `CGovernanceManager::ProcessVote()` but imo it's better to have this at the `CGovernanceObject::ProcessVote()` level as well. * Make sure CGovernanceObjectVoteFile::AddVote() never adds/updates already known votes The way `CGovernanceObjectVoteFile::AddVote()` is used (i.e. wrapped in `CGovernanceObjectVoteFile::HasVote()` condition) it's already the case. Hoever nothing would guarantee consistency if it would be used elsewhere without such wrapper, so it's better to have similar check inside. * Do not even try mnb recovery when -connect is set `CConnman::ThreadOpenMasternodeConnections()` thread won't even start when `-connect` is set, so no need to ask for recovery, there is nothing that is going to be able to process such request. * No need for SIGHASH_ANYONECANPAY in PS collateral signature Collateral is just a normal tx created and signed by each participant individually, there is no need for special sig types. * Release semMasternodeOutbound in CConnman::Interrupt() Re-align Dash code with Bitcoin.
2018-03-19 14:08:32 +01:00
mapVoteIndex.emplace(nHash, listVotes.begin());
++nMemoryVotes;
RemoveOldVotes(vote);
}
bool CGovernanceObjectVoteFile::HasVote(const uint256& nHash) const
{
return mapVoteIndex.find(nHash) != mapVoteIndex.end();
}
bool CGovernanceObjectVoteFile::SerializeVoteToStream(const uint256& nHash, CDataStream& ss) const
{
refactor: misc. governance refactoring (#3958) * fix typos Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * governance: remove all typedefs for iterators, use auto instead Signed-off-by: pasta <pasta@dashboost.org> * remove redundant size_type Signed-off-by: pasta <pasta@dashboost.org> * Remove unused and singly used typedefs Signed-off-by: pasta <pasta@dashboost.org> * remove unused code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor as explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * remove singly used typedef Signed-off-by: pasta <pasta@dashboost.org> * pass const reference, and don't copy for no reason Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * typo Signed-off-by: pasta <pasta@dashboost.org> * make constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: 'virtual' is redundant since the function is already declared 'override' Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: Prefer using 'override' or (rarely) 'final' instead of 'virtual' Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * remove unused include Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded semicolon Signed-off-by: pasta <pasta@dashboost.org> * fix typos Signed-off-by: pasta <pasta@dashboost.org> * fix typo Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove commented out code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused spork Signed-off-by: pasta <pasta@dashboost.org> * remove boolean check where always true Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * Remove nCount completely Signed-off-by: pasta <pasta@dashboost.org> * Use default path Signed-off-by: pasta <pasta@dashboost.org>
2021-01-26 04:31:31 +01:00
auto it = mapVoteIndex.find(nHash);
if (it == mapVoteIndex.end()) {
return false;
}
ss << *(it->second);
return true;
}
std::vector<CGovernanceVote> CGovernanceObjectVoteFile::GetVotes() const
{
std::vector<CGovernanceVote> vecResult;
refactor: misc. governance refactoring (#3958) * fix typos Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * governance: remove all typedefs for iterators, use auto instead Signed-off-by: pasta <pasta@dashboost.org> * remove redundant size_type Signed-off-by: pasta <pasta@dashboost.org> * Remove unused and singly used typedefs Signed-off-by: pasta <pasta@dashboost.org> * remove unused code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor as explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * remove singly used typedef Signed-off-by: pasta <pasta@dashboost.org> * pass const reference, and don't copy for no reason Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * typo Signed-off-by: pasta <pasta@dashboost.org> * make constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: 'virtual' is redundant since the function is already declared 'override' Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: Prefer using 'override' or (rarely) 'final' instead of 'virtual' Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * remove unused include Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded semicolon Signed-off-by: pasta <pasta@dashboost.org> * fix typos Signed-off-by: pasta <pasta@dashboost.org> * fix typo Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove commented out code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused spork Signed-off-by: pasta <pasta@dashboost.org> * remove boolean check where always true Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * Remove nCount completely Signed-off-by: pasta <pasta@dashboost.org> * Use default path Signed-off-by: pasta <pasta@dashboost.org>
2021-01-26 04:31:31 +01:00
for (auto it = listVotes.begin(); it != listVotes.end(); ++it) {
vecResult.push_back(*it);
}
return vecResult;
}
void CGovernanceObjectVoteFile::RemoveVotesFromMasternode(const COutPoint& outpointMasternode)
{
refactor: misc. governance refactoring (#3958) * fix typos Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * governance: remove all typedefs for iterators, use auto instead Signed-off-by: pasta <pasta@dashboost.org> * remove redundant size_type Signed-off-by: pasta <pasta@dashboost.org> * Remove unused and singly used typedefs Signed-off-by: pasta <pasta@dashboost.org> * remove unused code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor as explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * remove singly used typedef Signed-off-by: pasta <pasta@dashboost.org> * pass const reference, and don't copy for no reason Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * typo Signed-off-by: pasta <pasta@dashboost.org> * make constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: 'virtual' is redundant since the function is already declared 'override' Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: Prefer using 'override' or (rarely) 'final' instead of 'virtual' Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * remove unused include Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded semicolon Signed-off-by: pasta <pasta@dashboost.org> * fix typos Signed-off-by: pasta <pasta@dashboost.org> * fix typo Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove commented out code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused spork Signed-off-by: pasta <pasta@dashboost.org> * remove boolean check where always true Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * Remove nCount completely Signed-off-by: pasta <pasta@dashboost.org> * Use default path Signed-off-by: pasta <pasta@dashboost.org>
2021-01-26 04:31:31 +01:00
auto it = listVotes.begin();
while (it != listVotes.end()) {
if (it->GetMasternodeOutpoint() == outpointMasternode) {
--nMemoryVotes;
mapVoteIndex.erase(it->GetHash());
listVotes.erase(it++);
} else {
++it;
}
}
}
std::set<uint256> CGovernanceObjectVoteFile::RemoveInvalidVotes(const COutPoint& outpointMasternode, bool fProposal)
{
std::set<uint256> removedVotes;
refactor: misc. governance refactoring (#3958) * fix typos Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * governance: remove all typedefs for iterators, use auto instead Signed-off-by: pasta <pasta@dashboost.org> * remove redundant size_type Signed-off-by: pasta <pasta@dashboost.org> * Remove unused and singly used typedefs Signed-off-by: pasta <pasta@dashboost.org> * remove unused code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor as explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * remove singly used typedef Signed-off-by: pasta <pasta@dashboost.org> * pass const reference, and don't copy for no reason Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * typo Signed-off-by: pasta <pasta@dashboost.org> * make constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: 'virtual' is redundant since the function is already declared 'override' Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: Prefer using 'override' or (rarely) 'final' instead of 'virtual' Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * remove unused include Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded semicolon Signed-off-by: pasta <pasta@dashboost.org> * fix typos Signed-off-by: pasta <pasta@dashboost.org> * fix typo Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove commented out code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused spork Signed-off-by: pasta <pasta@dashboost.org> * remove boolean check where always true Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * Remove nCount completely Signed-off-by: pasta <pasta@dashboost.org> * Use default path Signed-off-by: pasta <pasta@dashboost.org>
2021-01-26 04:31:31 +01:00
auto it = listVotes.begin();
while (it != listVotes.end()) {
if (it->GetMasternodeOutpoint() == outpointMasternode) {
bool useVotingKey = fProposal && (it->GetSignal() == VOTE_SIGNAL_FUNDING);
if (!it->IsValid(useVotingKey)) {
removedVotes.emplace(it->GetHash());
--nMemoryVotes;
mapVoteIndex.erase(it->GetHash());
listVotes.erase(it++);
continue;
}
}
++it;
}
return removedVotes;
}
void CGovernanceObjectVoteFile::RemoveOldVotes(const CGovernanceVote& vote)
{
refactor: misc. governance refactoring (#3958) * fix typos Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * governance: remove all typedefs for iterators, use auto instead Signed-off-by: pasta <pasta@dashboost.org> * remove redundant size_type Signed-off-by: pasta <pasta@dashboost.org> * Remove unused and singly used typedefs Signed-off-by: pasta <pasta@dashboost.org> * remove unused code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor as explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * remove singly used typedef Signed-off-by: pasta <pasta@dashboost.org> * pass const reference, and don't copy for no reason Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * typo Signed-off-by: pasta <pasta@dashboost.org> * make constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: 'virtual' is redundant since the function is already declared 'override' Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: Prefer using 'override' or (rarely) 'final' instead of 'virtual' Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * remove unused include Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded semicolon Signed-off-by: pasta <pasta@dashboost.org> * fix typos Signed-off-by: pasta <pasta@dashboost.org> * fix typo Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove commented out code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused spork Signed-off-by: pasta <pasta@dashboost.org> * remove boolean check where always true Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * Remove nCount completely Signed-off-by: pasta <pasta@dashboost.org> * Use default path Signed-off-by: pasta <pasta@dashboost.org>
2021-01-26 04:31:31 +01:00
auto it = listVotes.begin();
while (it != listVotes.end()) {
if (it->GetMasternodeOutpoint() == vote.GetMasternodeOutpoint() // same masternode
&& it->GetParentHash() == vote.GetParentHash() // same governance object (e.g. same proposal)
&& it->GetSignal() == vote.GetSignal() // same signal (e.g. "funding", "delete", etc.)
&& it->GetTimestamp() < vote.GetTimestamp()) // older than new vote
{
--nMemoryVotes;
mapVoteIndex.erase(it->GetHash());
listVotes.erase(it++);
} else {
++it;
}
}
}
void CGovernanceObjectVoteFile::RebuildIndex()
{
mapVoteIndex.clear();
nMemoryVotes = 0;
refactor: misc. governance refactoring (#3958) * fix typos Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * governance: remove all typedefs for iterators, use auto instead Signed-off-by: pasta <pasta@dashboost.org> * remove redundant size_type Signed-off-by: pasta <pasta@dashboost.org> * Remove unused and singly used typedefs Signed-off-by: pasta <pasta@dashboost.org> * remove unused code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor as explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded initialization Signed-off-by: pasta <pasta@dashboost.org> * remove singly used typedef Signed-off-by: pasta <pasta@dashboost.org> * pass const reference, and don't copy for no reason Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * typo Signed-off-by: pasta <pasta@dashboost.org> * make constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: 'virtual' is redundant since the function is already declared 'override' Signed-off-by: pasta <pasta@dashboost.org> * Clang-Tidy: Prefer using 'override' or (rarely) 'final' instead of 'virtual' Signed-off-by: pasta <pasta@dashboost.org> * use default for trivial destructor Signed-off-by: pasta <pasta@dashboost.org> * remove unused include Signed-off-by: pasta <pasta@dashboost.org> * remove unneeded semicolon Signed-off-by: pasta <pasta@dashboost.org> * fix typos Signed-off-by: pasta <pasta@dashboost.org> * fix typo Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused typedef Signed-off-by: pasta <pasta@dashboost.org> * remove commented out code Signed-off-by: pasta <pasta@dashboost.org> * mark constructor explicit Signed-off-by: pasta <pasta@dashboost.org> * remove unused spork Signed-off-by: pasta <pasta@dashboost.org> * remove boolean check where always true Signed-off-by: pasta <pasta@dashboost.org> * make method const Signed-off-by: pasta <pasta@dashboost.org> * Remove nCount completely Signed-off-by: pasta <pasta@dashboost.org> * Use default path Signed-off-by: pasta <pasta@dashboost.org>
2021-01-26 04:31:31 +01:00
auto it = listVotes.begin();
while (it != listVotes.end()) {
CGovernanceVote& vote = *it;
uint256 nHash = vote.GetHash();
if (mapVoteIndex.find(nHash) == mapVoteIndex.end()) {
mapVoteIndex[nHash] = it;
++nMemoryVotes;
++it;
} else {
listVotes.erase(it++);
}
}
}