Commit Graph

37 Commits

Author SHA1 Message Date
Nathan Marley
2c1a17909e cleanup: remove unused vars, includes, functions (#2306) 2018-09-20 15:41:16 +03:00
UdjinM6
0471fa8847
Drop MAX_GOVERNANCE_OBJECT_DATA_SIZE (and maxgovobjdatasize in rpc) (#2298) 2018-09-19 15:03:30 +03:00
UdjinM6
76599aad3c
Drop (pre-)70208 compatibility code (#2295) 2018-09-15 13:19:31 +03:00
Alexander Block
cb37c39725 Bump PROTOCOL_VERSION to 70211, bump MIN_* protocols to 70210 (#2256)
Bump PROTOCOL_VERSION to 70211, bump MIN_* protocols to 70210
2018-09-05 19:34:56 +03:00
Alexander Block
25545fc1e7 Split keyIDMasternode into keyIDOwner/keyIDOperator/keyIDVoting (#2248)
* 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
2018-08-31 16:31:59 +03:00
Alexander Block
d946f21bd9 Masternode related refactorings in preparation of DIP3 (#2212)
* Split CActiveMasternode into CActiveMasternodeInfo and CLegacyActiveMasternodeManager

* Use CKeyID instead of CPubKey whenever possible in masternode code

* Rename activeMasternode to activeMasternodeInfo and make it a struct

* Rename pubKeyIDXXX to keyIDXXX

* Bump SERIALIZATION_VERSION_STRING

* Fix build error after rebase

* Fix compilation warning/error with clang
2018-08-11 22:55:56 +03:00
UdjinM6
a5643f899d
Switch RequestGovernanceObjectVotes from pointers to hashes (#2189)
* No need for pointers to gobjects, can simply use hashes in RequestGovernanceObjectVotes

* Drop `swap` and `=` in GovernanceObject

Were used for shuffling, no longer needed
2018-07-25 18:09:30 +03:00
UdjinM6
23ba94b370
Bump remaining min protocols (#2097)
* bump MIN_GOVERNANCE_PEER_PROTO_VERSION

* bump MIN_MASTERNODE_PAYMENT_PROTO_VERSION_2
2018-06-06 19:06:52 +03:00
UdjinM6
a3bcc4307d
Refactor governance (#1993)
* Refactor CGovernanceObject::IsValidLocally()

* Refactor CGovernanceObject::ProcessVote()

* Refactor CGovernanceObject::CountMatchingVotes()

* Refactor CGovernanceObjectVoteFile::HasVote()

* Refactor CGovernance* (more consts and refs)

* Refactor CGovernanceManager::HaveVoteForHash()

* Refactor CGovernanceManager::SerializeVoteForHash()

* Refactor CGovernanceManager::SyncSingleObjAndItsVotes()
2018-03-20 14:04:59 +03:00
UdjinM6
89380b4c92
Drop watchdogs, replace them with sentinel pings (#1949)
* Drop watchdogs, replace them with sentinel pings

* Address review comments

* revert `()`
2018-02-25 08:33:27 +03:00
UdjinM6
99273f63aa
Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (#1937)
* Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (gobject)

* Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (gobjvote)

* Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (mnw)

* Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (txlvote)

* Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (dsq)

* Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (dstx)

* Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (spork)

* Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (mnb)

* Actually care about old signature format in mnp, otherwise we can start banning peers rather quickly

* Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (mnv)

* Unify sign/verify code a bit by using GetSignatureHash() (even when it matches GetHash())

* fix docs

* address review comments

* fix log output (copy/paste error)

* Replace custom GetSignatureHash/GetHash with serialization (where applicable)

* Convert from/to old format in SerializationOp only for p2p

* fix
2018-02-16 17:54:53 +03:00
UdjinM6
aadec37354
Change format of gobject, store/transmit vchData instead of hex-encoded string of a string (#1934)
* Change format of gobject, store/transmit vchData instead of hex-encoded string

* fix (limited string for old format)
2018-02-15 17:43:17 +03:00
UdjinM6
c656133502
Switch masternode id in Dash data structures from CTxIn to COutPoint (#1933)
* Switch masternode id in Dash data structures from CTxIn to COutPoint (including p2p level)

* outpoint -> masternodeOutpoint in DSEG
2018-02-15 10:29:44 +03:00
UdjinM6
580c4884c1
Fix trigger execution and expiration (#1920)
* Move trigger expiration logic into CSuperblock and handle executed/non-executed triggers differently

* Actually execute triggers
2018-02-12 21:35:10 +03:00
UdjinM6
d5ef77ba99
Refactor: use constant refs and Ret suffix (#1928)
* Refactor function params from `std::string` to `const std::string&`

* Refactor more function params to use const references
2018-02-12 15:49:00 +03:00
Nathan Marley
8ea1bd0f55 remove unused method GetObjectSubtype (#1914)
I believe this was stubbed to eventually read the string in the 1st
field of the inner array in the gobject JSON. Currently only Sentinel
uses this and I would like to move to just a single JSON object, so
don't think this is necessary any longer.
2018-02-12 15:45:38 +03:00
UdjinM6
e0b6988a45
Various fixes and refactoring for Cache*Map classes (#1896)
* 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
2018-02-06 14:08:43 +03:00
Alexander Block
7765c87e79 Remove nType and nVersion from Dash related serialization code
Also remove bogus "nVersion = this->nVersion" assignments. These were
leftovers from old times.
2018-01-15 06:14:15 +01:00
thephez
3f3705c476 [Trivial] Typo/doc updates and RPC help formatting (#1758)
* Protocol Doc - correct type of DSQ nTime and fReady fields

* Basic typo correction

* RPC help typos
 - Change port in DisconnectNode example from Bitcoin port -> Dash port
 - Correct order of chainwork in getblockheader/getblockheaders help to
match actual output
 - Add missing fields to getmininginfo/getblocktemplate help output

* Remove duplicate generate field in getmininginfo output

* Fix generate field type info / description in getmininginfo output
2017-12-06 01:17:45 +03:00
Oleg Girko
753b1e486b Eliminate remaining uses of g_connman in Dash-specific code. (#1635)
This monstrous change eliminates all remaining uses of
g_connman global variable in Dash-specific code.

Unlike previous changes eliminating g_connman use
that were isolated to particular modules, this one covers
multiple modules simultaneously because they are so interdependent
that change in one module was quickly spreading to others.

This is mostly invariant change that was done by
* changing all functions using g_connman to use connman argument,
* changing all functions calling these functions to use connman argument,
* repeating previous step until there's nothing to change.

After multiple iterations, this process converged to final result,
producing code that is mostly equivalent to original one, but passing
CConnman instance through arguments instead of global variable.

The only exception to equivalence of resulting code is that I had to
create overload of CMasternodeMan::CheckAndRemove() method without arguments
that does nothing just for use in CFlatDB<CMasternodeMan>::Dump() and
CFlatDB<CMasternodeMan>::Load() methods.
Normal CMasternodeMan::CheckAndRemove() overload now has argument of
CConnman& type and is used everywhere else.

The normal overload has this code in the beginning:

    if(!masternodeSync.IsMasternodeListSynced()) return;

Masternode list is not synced yet when we load "mncache.dat" file,
and we save "mncache.dat" file on shutdown, so I presume that it's OK
to use overload that does nothing in both cases.

Signed-off-by: Oleg Girko <ol@infoserver.lv>
2017-09-19 17:51:38 +03:00
UdjinM6
05da4557d0 Refactor masternode management (#1611)
* Store masternodes in a map instead of a vector, drop unused functions in CMasternodeMan

* CTxIn vin -> COutPoint outpoint

* do not use CMasternodeMan::Find outside of the class

* update GetMasternodeInfo

* safe version of GetNextMasternodeInQueueForPayment

* fix ProcessMasternodeConnections

* bump CMasternodeMan::SERIALIZATION_VERSION_STRING
2017-09-11 17:13:48 +03:00
UdjinM6
8012f2ca7f drop masternode index (#1580) 2017-08-25 15:57:19 +03:00
Ilya Savinov
109c5fd1d8 Fixed issues with propagation of governance objects (#1489)
* process governance objects in CheckMasternodeOrphanObjects as usual

* code refactoring: SetRateChecksHelper class added

* fixed race condition issues with propagation of governance objects

* change GetCollateralConfirmations signature

* code refactoring

* reduced minimum number of collateral confirmations required for relaying proposals

* bug fixes and improvements
2017-07-05 03:31:50 +03:00
UdjinM6
9ed9474a9e Drop support for pre-12.1 nodes (#1394) 2017-03-14 09:22:00 +03:00
Tim Flynn
0bc6d92334 Define current votes by creation time instead of arrival time (#1360) 2017-02-23 16:29:00 +04:00
UdjinM6
57fd9e9e2a fix watchdogs (#1346)
* fix watchdogs:
- do not accept if CreationTime is out of bounds (using CreationTime, not local time now)
- do not sync expired
- fix disk serialization

* drop watchdogs early, avoid adding//removing

* clean mapWatchdogObjects when object is deleted via votes
2017-02-17 04:48:42 +04:00
Tim Flynn
1f7b46c2c0 Restore 5 Dash fee for proposal creation (#1302) 2017-02-02 12:51:02 +04:00
Tim Flynn
399330d42d Improve governance syncing efficiency with bloom filter (#1299)
* Use bloom filter for governance vote syncing

Modify masternode-sync to send bloom filters

Correctly initialize bloom filter

Set fUseFilter argument

Increase bloom filter size to account for multiple signals

Set bloom filter parameters

Use constants for bloom filter parameters

Added filter size check

Added filter size check in masternode-sync

Update bloom filter

Changed bloom parameters

* Bump protocol version

* Update sync time for inv's

* Changes based on code review comments

* Make bloom filter size network dependent

* Fix network dependent filter parameters

* Remove unneeded constant definition

* Move constant definition

* Add blank line
2017-02-02 12:50:44 +04:00
UdjinM6
f1ee9d9c71 Change governance sync process (#1265)
* On gov sync first sync objs, then ask for votes on per-obj basis from different peers.

This should help to sync obj list initially and split the load among many peers. Also adds ability to catch up votes later after the sync.

* ask for all objects, do this in cycles

* Fix Sync() code, better readability

* ask multiple nodes at once when possible, perf boost for large numper of objs

* Addressed comments: pass reference, more peer version check
2017-01-18 00:02:38 +04:00
UdjinM6
ba8d8ae027 remove unused pindex from IsValidLocally, fix cs_main in rpc (#1243) 2017-01-03 22:32:52 +04:00
UdjinM6
a0c93ebaa5 cleanup/fix includes: (#1214)
- some were not used, some were included twice, some were in the wrong place, some were missing (but it compiled because some were in the wrong place)
- organized a bit better, grouped dash specific includes in original bitcoin files, should save some time solving conflicts when/if merging patches later
2016-12-20 17:27:59 +04:00
Holger Schinzel
e1702cd4ec bump copyright notice to 2017 (#1207) 2016-12-20 17:26:45 +04:00
Tim Flynn
8c16880b15 Fix governance hash (#1208)
* Add vinMasternode to governance object hash and bump protocols

* Add collateral hash to governance object hash

* Added signature to object hash

* Revert "Add collateral hash to governance object hash"

This reverts commit 2f60c280f3.
2016-12-20 07:25:20 +04:00
Tim Flynn
df5abf1468 Convert masternode rate checks to use object timestamp (#1198)
* Change rate check logic to avoid DoS attacks

* Convert rate check to use object timestamp instead of arrival time

* Update cached variables before checking for superblocks

* Ensure that last times are monotonically non-decreasing

* Bump governance manager serialization format

* Improved rate check error reporting
2016-12-11 10:17:38 +04:00
Tim Flynn
8126e92441 Merge #1185: Trigger removel changes
- Do not expire superblock triggers on execution
  - Expire trigger objects about 1 day (576 blocks) after their event height is past
2016-12-03 20:46:08 +01:00
Tim Flynn
ecdc160119 Governance object deletion changes (#1167)
* Increase quorum for object deletion to 2/3 of MN network

* Implement expiration of watchdog objects

* Remove objects from the watchdog map itself

* Message fix for invalid objects
2016-11-25 18:08:48 +04:00
Tim Flynn
1b90d66ab6 Implement orphan object and vote timeouts (#1166) 2016-11-24 22:12:05 +04:00