No need to send gobject inv for a single gobject, the other node already knows it, so send votes only.
Also, no need to send "fake" stats like "0 votes" when syncing gobjects and "1 object" when syncing votes.
Rename functions accordingly.
* Split up remaining logic from CMasternodeMan into CMasternodeMetaMan and CMasternodeUtils
Also get rid of CMastermode and store remaining meta info
in CMasternodeMetaInfo
* Also allow non-const T in Serialize/Unserialize for shared_ptr
* Rename CActiveDeterministicMasternodeManager to CActiveMasternodeManager
* Fix nowallet compile in masternode-utils.cpp
* Remove CActiveLegacyMasternodeManager
* Remove sentinelping RPC
* Remove unused P2P messages and inv types
There are still places where these are used in the code. The next commits
will clean these up.
* Remove MNB/MNP/MNVERIFY related code from masternode(man).h/cpp
* Remove all legacy code regarding block MN payee voting
* Remove MASTERNODE_SYNC_LIST and MASTERNODE_SYNC_MNW states
Also replace all uses of IsMasternodeListSynced and IsWinnersListSynced
with IsBlockchainSynced.
* Remove unsupported masternode RPCs
* Remove UpdateLastPaid methods
* Remove duplicate deterministicmns.h include
* Remove masternode.conf support
* Remove legacy MN lists support from masternode list GUI
* Remove unnecessary AskForMN call
* Remove compatibility code in CPrivateSendQueue::GetSignatureHash
* Don't add locally calculated MN payee in case GetBlockTxOuts failed
This is not valid in DIP3 mode
* Remove check for IsDeterministicMNsSporkActive in "masternode status"
* Move CMasternode::IsValidNetAddr to CActiveDeterministicMasternodeManager
* Remove use of CMasternode::CheckCollateral in governance code
* Remove uses of MASTERNODE_SENTINEL_PING_MAX_SECONDS/MASTERNODE_SENTINEL_PING_MAX_SECONDS
* Remove support for "-masternodeprivkey"
* Remove pre-DIP3 vote cleanup
* Remove compatibility code for quorumModifierHash/masternodeProTxHash
* Remove check for invalid nBlockHeight in CMasternodePayments::GetBlockTxOuts
...and let it crash instead. We expect this method to be called with the
correct height now (after DIP3 was fully deployed).
* Remove ECDSA based Sign/CheckSignature from CGovernanceObject
Only masternodes sign governance objects, so there is no need for ECDSA
support here anymore.
* Always add superblock and MN reward payments into new block
* Always check block payees (except if fLiteMode==true)
* Always allow superblock and MN payees in same block
* Remove/Fix a few references to masternode.conf and related stuff
Also delete guide-startmany.md and masternode_conf.md
* Implement NotifyMasternodeListChanged signal and call governance maintenance
* Remove non-DIP3 code path from CMasternodeMan::Find
* Remove remaining unused code from CMasternode/CMasternodeMan
* Always load governance.dat on startup
* Mine an empty block instead of incrementing nHeight from chain tip in miner tests
This test is crashing otherwise in GetBlockTxOuts as it tries to access a
previous block that is not existing.
* Skip MN payments verification on historical blocks (pre-DIP3 blocks)
Even though DIP3 was active on BIP9 level, the spork was not active yet at
that point meaning that payments were not enforced at that time.
* Remove unused state and CollateralStatus enums
* Unconditionally return false from IsBlockPayeeValid when IsTransactionValid returns false
IsTransactionValid already handles the case where IsDIP3Active() returns
false, making it return true.
* Add override keyword to CDSNotificationInterface::NotifyMasternodeListChanged
* Fix help for masternodelist status (POSE_BANNED and no OUTPOINT_SPENT)
* Replace IsDeterministicMNsSporkActive with IsDIP3Active
IsDIP3Active will now use a fixed parameter from consensus params.
Values for DIP0003Height/DIP0003Hash need to be updated when spork15
activates on mainnet.
Also enforce correct block hash on testnet/mainnet for DIP3 activation
block.
* Remove SPORK_15_DETERMINISTIC_MNS_ENABLED
* Replace all uses of IsDeterministicMNsSporkActive with IsDIP3Active
* Remove DIP3 upgrade-path tests and directly start with DIP3 enabled tests
* Make -masternodeprivkey non-mandatory
This code will vanish later.
* Clear votes which were created before spork15 activation
* Reject incoming votes which were created pre-DIP3
* Only use voting keys for VOTE_SIGNAL_FUNDING
The other vote signals are meant to be emitted by sentinel and must thus
be signed with the operator key.
* Simplify GetMinVoteTime
* Review suggestions/fixes
* Add missing mutex in CGovernanceObject::RemoveOldVotes
* Do not run scheduled DoMaintenance if shutdown was requested
* Don't dump cache files if the load sequence was interrupted
* Stop privatesend and release keys before wallet flush
* fix typo
* Implement RemoveAskFor to indicate that we're not interested in an item anymore
When an INV item is received from the first node, the item is requested
immediately. If the same item is received from another node, an entry is
added to mapAskFor which marks the item for re-requesting in case the first
node did not respond. When the item is received from the first node,
the item was previously never removed from mapAskFor. Only the later getdata
loop in SendMessages would then gradually remove items from the map. This
is quite delayed however as the entries in mapAskFor have a timeout value.
RemoveAskFor allows to remove all entries from mapAskFor and setAskFor
when we are not interested in the item anymore (e.g. because we received
it already).
* Call RemoveAskFor whenever we receive a message
* Only pass hash instead of CInv object to RemoveAskFor
* remove vector, extra loop in cleanup function
This commit removes 2 loops and a vector which I don't believe are necessary in
CMasternode::FlagGovernanceItemsAsDirty. I could be missing something, but
can't think of any good reason why this was implemented this way.
* use range operator to range over vectors
* remove deprecated wire message types
* mn: simplify govobj map mgmt a bit
* remove extra semicolons
* invert if/else condition and drop else
* remove if/else logic from Qt
This is the entire purpose of the Get<X>String methods on MNP class.
* Revert "remove deprecated wire message types"
This reverts commit 9de88a3fda999555c00cb829d60e322b2fd3800d.
* Revert "remove if/else logic from Qt"
This reverts commit c0f43c9b85274b13a3ac9625775817bc5b53bb9d.
* Split keyIDMasternode into keyIDOwner/keyIDOperator/keyIDVoting
keyIDOwner is the key used for things which should stay in control of the
collateral owner, like proposal voting.
keyIDOperator is the key used for operational things, like signing network
messages, signing trigger/watchdog objects and trigger votes.
keyIDVoting is the key used for proposal voting
Legacy masternodes will always have the same key for all 3 to keep
compatibility.
Using different keys is only allowed after spork15 activation.
* Forbid reusing collateral keys for operator/owner keys and vice versa
* Bump SERIALIZATION_VERSION_STRING in CMasternodeMan
* No need for pointers to gobjects, can simply use hashes in RequestGovernanceObjectVotes
* Drop `swap` and `=` in GovernanceObject
Were used for shuffling, no longer needed
* fix whitespace
* added zmq stuff for governance objects and votes
it seems that zmq is currently not in a working state, need to figure that out.
Need to:
plug in the new methods added
possibly plug in the old methods, as it doesn't look like they are.
* formatting fix. Will probably need to revert for this PR
* continue linking new zmq messages in
* added comment, might need to revert
* fixes error of it not knowing about the classes
* Actually link in, all new govobjects and govvotes should be broadcast over zmq now.
* fix compile error, forgot to change params when copying
* fix compile error
* add imports to the header files in zmqconfig.h
* fixing linking(i think) error
* Revert "added comment, might need to revert"
This reverts commit 2918ea40fe9a96834c4bd89e13cb458cde6814f2.
* Revert "formatting fix. Will probably need to revert for this PR"
This reverts commit ca10558866ab61e3dd0c70541fdcfee6f5115157.
* fix tabs etc
* EOL added
* optimization of hash.begin() @nmarley thoughts?
* remove formatting changes
* iterator i -> it and removal of notifier
* typo in df879f57
* use auto for the iterators
* introduce hash prefix
* implement changes in zmq_sub.py, update the doc, and change argument name to fix typo
* deref iterators before calling methods
* continued e8a4c505
* missed one... continued e8a4c505
* killing some tabs
* fix spacing for setting or comparing iterators
* change order of new variables to match current setup
* re-add elif's I didn't realize got removed
* Revert "fix spacing for setting or comparing iterators"
This reverts commit 8ce2068148dcd275ebba7ee6038d0db1c582b9f3.
* Revert "use auto for the iterators"
This reverts commit cb16cf0760bfaf68c56684877898611802bf2303.
* Revert "missed one... continued e8a4c505"
This reverts commit 2087cf894f7e9682508b4692b89897b4fa4e4b7a.
* Revert "continued e8a4c505"
This reverts commit a78c8ad2c9bb1602242a8f040e17ef958982348c.
* Revert "deref iterators before calling methods"
This reverts commit e8a4c505d1d34360eaf882d92cd8fbc55436cfcc.
* Revert "iterator i -> it and removal of notifier"
This reverts commit 29574248b1a0d05c18d60454d07c77979aae6fb2.
* Revert "fix whitespace"
This reverts commit 612be48d963000b4cbc5f64981a88a3225428b37.
* Revert "typo in df879f5"
* Revert "Optimization of hash.begin()"
* fixes problem with revert
* Udjin complain's a lot ;)
* help text, init.cpp
* add signals in validationinterface.cpp
* Change location of vote notification call.
* remain consistent
* remove unneeded include due to change of notification location
* implement raw notifications
* Mark an object for deletion when the corresponding trigger is deleted
* Mark objects for deletion if creation of corresponding triggers failed
* NULL -> nullptr
* Make sure pObj is not null
And send REJECT msg back to the peer we received the original message from.
Same logic as for MIN_PEER_PROTO_VERSION but using specific proto versions for each submodule.
* Avoid locking cs_main in CMasternode/Ping/Broadcast
Deligate this to CMasternodeMan and use AssertLockHeld instead
* Ensure consistent locking order (cs_main, cs_wallet, mempool.cs, cs_instantsend) in CInstantSend while avoiding potential deadlocks at the same time
* Add missing locks in wallet
* Add missing locks in governance
* Fix cs_vPendingMasternodes vs cs_main potential deadlock
SendVerifyRequest no longer opens connection directly, so no cs_main is needed here
* Drop nBudgetProposalEstablishingTime
* Refactor: replace `== COutPoint()` with `.IsNull()`
* Refactor: add `operator bool()` to CMasternodePing
* Refactor: actually use `operator bool()` for CPendingDsaRequest
* Refactor: fixing code style in TrafficGraphData
* Fix some comments and whitespaces
* Drop CGovernanceVote::GetTypeHash()
* Drop legacy X11 code
No longer used... if it ever was used at all.
* Move `<boost/foreach.hpp>` out of coins.h
* Simplify CMasternodeBlockPayees::GetRequiredPaymentsString()
Also less of boost::lexical_cast
* Drop CTxDSIn::nSentTimes
* Fix few warnings
* fix warning (timer)
* fix nit
* Drop BOOST_FOREACH in Dash-specific code (only), no changes in behavior
* Use references in loops (use const references where applicable) in Dash-specific code (only)
And adjust related code to make it compilable.
* Loop through nodes via connman.ForEachNode in dsq Relay instead of creating a copy
* CacheMap::Insert should not update existing item, should return `false`
* Use `emplace` operator instead of `[]` to add new items in Cache*Map implementation
* Use prefix cm/cmm for CacheMap/CacheMultiMap maps respectively to distinguish them from each other and from std::map-s
* Avoid excessive processing of already known valid votes
Also prettify debug log output a bit
* Drop nCurrentSize from Cache*Map classes
Use `size()` and `empty()` of std classes instead, they have constant complexity since c++11
* Do not create an explicit iterator if it's never used later (in Cache*Map)
* Do not prune last item in CacheMultiMapInsert when trying to insert a duplicate one
0729102 Net: pass interruptMsgProc as const where possible (Jorge Timón)
fc7f2ff Net: Make CNetMsgMaker more const (Jorge Timón)
d45955f Net: CConnman: Make some methods const (Jorge Timón)
And use this where needed. This avoids warnings about unset version fields
and is also generally a good thing (we really should only communicate with
nodes we know are good)
c7be56d net: push only raw data into CConnman (Cory Fields)
2ec935d net: add CVectorWriter and CNetMsgMaker (Cory Fields)
b7695c2 net: No need to check individually for disconnection anymore (Cory Fields)
fedea8a net: don't send any messages before handshake or after requested disconnect (Cory Fields)
d74e352 net: Set feelers to disconnect at the end of the version message (Cory Fields)
* Do not relay `mnp`, `mnb`, `mnw`, `govobj` and `govobjvote` until fully synced
This should massively lower outgoing traffic and load during sync process (especially on mainnet)
* Apply "no sync from me until I'm synced" rule to all nodes