Commit Graph

11428 Commits

Author SHA1 Message Date
Wladimir J. van der Laan
3ddf3dc62b
Merge #9868: Abstract out the command line options for block assembly
277b472 Run miner_tests with fixed options (Pieter Wuille)
48faf0b Abstract out BlockAssembler options (Pieter Wuille)

Tree-SHA512: 8e910904864c8653fb0358d820a4181d0496bdcbc3454c17a742af7505bfb59f7078c6d0faa9c753bdaf23b6d93d228a09913cc867fbddccd515483ebe7bfad0
2019-01-22 22:56:54 -06:00
Wladimir J. van der Laan
3977923553
Merge #9861: Trivial: Debug log ambiguity fix for peer addrs
6d37ee8 Trivial: Debug log ambiguity fix for peer addrs (keystrike)

Tree-SHA512: 9605f12bffd067427a206655c29b0b42689e9b28c313d1f6d6b0ef71351277b98b40f2e2a2ec0ac83c095a9f6f54e7a87762da400a56d2a833f8c2d14e5ac8d5
2019-01-22 22:56:05 -06:00
Wladimir J. van der Laan
8264e15cd4
Merge #9822: Remove block file location upgrade code
4b183d3 Remove block file location upgrade code (Marko Bencun)

Tree-SHA512: fac1fce95341e0df645c08c7e794195b22b54df08826aa8728f2f97aede1e42f724f8133781b97f836d4a392d044d08c846bce471a6b478582014f8be501a712
2019-01-22 22:55:58 -06:00
Wladimir J. van der Laan
f51d2e0947
Merge #9732: [Trivial] Remove nonsense #undef foreach
467df39 Remove nonsense #undef foreach (John Newbery)

Tree-SHA512: b8c3c6654eb8a9e5008a1923bee46f7ef9f8216c8f4f1b4662d82c26410ca8d8afe41e24e48a3e2e8b2a25c81c33795a4073dabfe357caf0aa820519d4fffc71
2019-01-22 22:55:54 -06:00
Wladimir J. van der Laan
3e10ff63f8
Merge #9867: Replace remaining sprintf with snprintf
19cafc6 test: Replace remaining sprintf with snprintf (Wladimir J. van der Laan)
0a17714 uint256: replace sprintf with HexStr and reverse-iterator (Wladimir J. van der Laan)

Tree-SHA512: 2ba1dd4d25e1cbfff4d67b2f483448aa7c34ab5c799cddd48ba5826e5fa6df425abe35e244aaf4c52db9fccfb4d2a25a14bb4597bf9d1fce95991f270da6bb26
2019-01-22 22:55:48 -06:00
MarcoFalke
0d38c16e79
Merge #9350: [Trivial] Adding label for amount inside of tx_valid/tx_invalid.json
988ce2d Adding 'amount' label to tx_valid/tx_invalid.json files (Chris Stewart)

Tree-SHA512: 11c216c6565ecaa5ff4eb6122f87d3b28f89db52d1e473c0678f61c240e133698adb05e717bfb9d3db36409dfb230b902dca4029a58633be36c9f85e0db3d973
2019-01-22 22:55:43 -06:00
UdjinM6
d2ddc2a008
A couple of fixes/refactorings for CDKGSessionHandler (#2637)
* Fix confusion: `quorumHash` is both a class member and an argument of a function

Rename `height` too while at it

* Make sure height and hash we pass to InitNewQuorum are related

* Don't update expectedQuorumHash, make it const

This also streamlines logic a bit

* Compact phase calculation

* Decouple invCs and cs_vPendingMasternodes

Not an issue atm but we'd better avoid any potential interlocking if possible

* wrap `%` in `()`

Co-Authored-By: UdjinM6 <UdjinM6@users.noreply.github.com>
2019-01-22 16:33:42 +03:00
UdjinM6
b2b97f258f
Fix some strings, docs and cmd-line/rpc help messages (#2632)
* No need to translate "Dash"

* Fix missing dashification

* Update docs

* Fix cmd-line params help

- `bool` should have no `=<smth>`
- non-`bool` should have proper `<smth>`

* Fix `quorum dkgstatus` help

* add llmq/ into files.md
2019-01-22 16:33:20 +03:00
Alexander Block
e7981e468d Remove fLLMQAllowDummyCommitments from consensus params (#2636)
This should have been removed together with removal of the dummy DKG
2019-01-22 14:16:30 +03:00
Alexander Block
b0ad1425e2 Review fixes (mostly if/else related but no change in logic) 2019-01-22 05:32:56 +01:00
Alexander Block
c905f1fe10 Initialize g_connman before initializing the LLMQ system
Background threads of the LLMQ system use g_connman, so it should be
initialized before.
2019-01-21 15:22:38 +01:00
UdjinM6
b8d069bcdd fix/cleanup qt rpcnestedtests 2019-01-21 14:42:08 +01:00
Alexander Block
0cc1cf2798 Add receivedFinalCommitment flag to CDKGDebugSessionStatus 2019-01-21 14:42:08 +01:00
Alexander Block
23d7ed80d5 Implement "quorum sign/hasrecsig/isconflicting" RPCs 2019-01-21 14:42:08 +01:00
Alexander Block
316b6bf0de Faster re-requesting of recovered sigs
These are quite important and waiting for 2 minutes when the first peer
did not send it is not acceptable.
2019-01-21 14:42:08 +01:00
Alexander Block
c38f889e77 Implement processing, verifcation and propagation of signature shares 2019-01-21 14:42:08 +01:00
Alexander Block
43fd1b352f Implement CSigningManager to process and propagage recovered signatures 2019-01-21 14:42:08 +01:00
Alexander Block
56ee83a766 Add ReadDataStream to CDBWrapper to allow manual deserialization 2019-01-18 11:58:58 +01:00
Alexander Block
b6346a2f68 Implement CBLSInsecureBatchVerifier for convenient batch verification 2019-01-18 11:57:40 +01:00
Alexander Block
dd8f245888 Implement IsBanned to allow checking for banned nodes outside of net_processing.cpp 2019-01-17 18:51:48 +01:00
Alexander Block
49de417265 Implement CFixedVarIntsBitSet and CAutoBitSet 2019-01-17 18:51:48 +01:00
Alexander Block
b627528cef Use void as return type for WriteContributions 2019-01-17 15:25:43 +01:00
Alexander Block
edac100f5c Fix "quorum" RPCs help and unify logic in the sub-commands RPC entry point 2019-01-16 11:38:44 +01:00
Alexander Block
217f3941d5 Skip starting of cache populator thread in case we don't have a valid vvec 2019-01-16 10:07:47 +01:00
Alexander Block
679a9895b6 Add comments about why it's ok to ignore some failures 2019-01-16 10:07:47 +01:00
Alexander Block
15c34ccbd8 Implement CQuorum and CQuorumManager 2019-01-15 15:47:24 +01:00
UdjinM6
8e4fe3660e
[PrivateSend] Fallback to less participants if possible, fix too long timeouts on server side (#2616)
* Fallback to less participants on timeouts if possible

* Only bump nTimeLastSuccessfulStep when state is changed

* Consistency: always set state first before relaying smth to clients
2019-01-15 16:05:26 +03:00
UdjinM6
ee808d819a
Add checkbox to show only masternodes the wallet has keys for (#2627) 2019-01-15 15:46:02 +03:00
UdjinM6
000fabfcc6
Merge pull request #2630 from UdjinM6/mergemastertodevelop
Merge `master` into `develop`
2019-01-15 15:45:33 +03:00
UdjinM6
4671c989d3
Merge pull request #2617 from codablock/pr_llmq_dkg
Implement LLMQ DKG
2019-01-15 15:44:34 +03:00
UdjinM6
fff50af3c6 Revert "Set CLIENT_VERSION_IS_RELEASE to true (#2591)"
This reverts commit b5670c4753.
2019-01-14 20:36:57 +03:00
UdjinM6
2c88ba78d1 Merge branch 'master' into develop 2019-01-14 20:31:59 +03:00
Alexander Block
b5670c4753 Set CLIENT_VERSION_IS_RELEASE to true (#2591) 2019-01-14 11:56:13 +03:00
UdjinM6
a05eeb21ea
Update immer to c89819df92191d6969a6a22c88c72943b8e25016 (#2626) 2019-01-14 11:52:19 +03:00
Alexander Block
a22f1bffed
Remove support for "0" as an alternative to "" when the default is requested (#2622) (#2624)
* Remove support for "0" as an alternative to "" when the default is requested

* Update src/rpc/rpcevo.cpp

Co-Authored-By: codablock <ablock84@gmail.com>
2019-01-14 08:45:40 +01:00
Alexander Block
fed4716c0a
Remove support for "0" as an alternative to "" when the default is requested (#2622)
* Remove support for "0" as an alternative to "" when the default is requested

* Update src/rpc/rpcevo.cpp

Co-Authored-By: codablock <ablock84@gmail.com>
2019-01-12 14:17:16 +01:00
UdjinM6
8b7771a311 Add some consts 2019-01-11 13:45:32 +01:00
Alexander Block
0b1347c0d3 Pass self-created message to CDKGPendingMessages instead of processing them 2019-01-11 13:43:19 +01:00
UdjinM6
02c7932f49
Add owner and voting addresses to rpc output, unify it across different methods (#2618)
* Add `owneraddress` and `votingaddress` to json representation of provider txes and rpc output

* Rearrange/unify things a bit

* Add votingAddress to CSimplifiedMNListEntry json

* Use addresses in error messages too

* More unification

* Swap keyIDOwner/keyIDVoting with corresponding addresses in ToString()

* Drop keyIDOwner/keyIDVoting from json and rpc

* More unification: s/operatorRewardAddress/operatorPayoutAddress/

* More unification/cleanup: use specific name instead of just bitcoinAddress

* Fix dip3 test
2019-01-11 13:05:58 +03:00
UdjinM6
10b3736bd8
[0.13.0.x] Translations201901 (#2592)
* fix source files

* make translate: en strings

* ru

* fi

* vi

* pl

* bg, de, it, ko, nl, sk, tr, zh_CN

* es, th

* ar

dash_ar.ts: Mismatch between 'Are you sure you want to start masternode %1?' and 'هل أنت متأكد أنك تريد بدء ماسترنود 1%؟'
dash_ar.ts: Mismatch between 'Output debugging information (default: %u, supplying <category> is optional)' and 'معلومات تصحيح الخرج  <category>ا(ختياري)'

* ar, es, pt, tr

dash_ar.ts: Mismatch between 'Are you sure you want to start masternode %1?' and 'هل أنت متأكد أنك تريد بدء ماسترنود 1%؟'
dash_ar.ts: Mismatch between 'Output debugging information (default: %u, supplying <category> is optional)' and 'معلومات تصحيح الخرج

* fi

* fr, zh_TW

* ja
2019-01-11 12:54:38 +03:00
UdjinM6
18e1edabff
Backport 2618 to v0.13.0.x (#2619)
Add owner and voting addresses to rpc output, unify it across different methods.
Also fix keyid option in `masternode list` rpc.
2019-01-11 12:53:54 +03:00
Alexander Block
a3b01dfbe5 Gracefully shutdown on evodb inconsistency instead of crashing (#2611) (#2620) 2019-01-11 12:53:19 +03:00
Alexander Block
c948c0ff31 Fix help for optional parameters in "quorum dkgstatus" 2019-01-11 09:15:06 +01:00
Alexander Block
957652bf37 Fix help for "quorum dkgstatus" and remove support for "0" proTxHash 2019-01-11 09:12:17 +01:00
Alexander Block
b7b436b7d4 Apply review suggestions to rpcquorums.cpp 2019-01-11 07:35:57 +01:00
Alexander Block
3fe9910633 Drop unused overload of GetMasternodeQuorums 2019-01-11 07:31:54 +01:00
UdjinM6
5daeedabf0 Batched logger should not break log parsing
It's expected to have timestamp to be the first thing in every row if it's not a whitespace
2019-01-11 07:07:54 +01:00
Alexander Block
5958f8b81d Remove dkgRndSleepTime from consensus params and make sleeping it non-random 2019-01-10 07:07:58 +01:00
Alexander Block
0dae46c2fb Move RandBool() into random.h/cpp 2019-01-09 12:16:12 +01:00
Alexander Block
e1901d24aa Handle review suggestions 2019-01-09 12:16:12 +01:00
Alexander Block
352edbd33e Introduce SPORK_18_QUORUM_DEBUG_ENABLED to enable/disable LLMQ debug messages 2019-01-09 12:16:12 +01:00
Alexander Block
324406bfed Implement debugging messages and RPC for LLMQ DKGs 2019-01-09 12:16:12 +01:00
Alexander Block
098b094959 Pass scheduler to InitLLMQSystem 2019-01-09 12:16:12 +01:00
Alexander Block
6836f8c38b Implement LLMQ DKG 2019-01-09 12:16:12 +01:00
Alexander Block
318b598139 Prepare inter-quorum masternode connections 2019-01-09 12:16:11 +01:00
Alexander Block
4bf736f332 Add cxxtimer header only libraries
https://github.com/andremaravilha/cxxtimer
Commit: 7d208ebba79e85da8efae5a4b8996846a68bee0f
2019-01-09 12:16:11 +01:00
Alexander Block
c6be8cfcd6 Allow to skip malleability check when deserializing BLS primitives
Useful when many sigs need to be deserialized and at the same time the hash
of these is never used.
2019-01-09 12:16:11 +01:00
Alexander Block
9d25bb1d8f Add batched logger 2019-01-09 12:16:11 +01:00
Alexander Block
0df3871d14 Remove dummy DKG 2019-01-09 12:16:11 +01:00
UdjinM6
55f205eba1
A couple of fixes for masternode list rpc (#2615)
* fix payee

* add keyidowner/keyidvoting/pubkeyoperator ifields/filter to "json" option

* fix whitespaces
2019-01-08 13:36:35 +03:00
UdjinM6
fa18d3e102
More fixes for PrivateSend after 2612 (#2614)
* Fix CPrivateSendServer::IsSessionReady()

Also move it to cpp

* Make sure nSessionMaxParticipants is initialized properly

* Adjust logging

* adjust log a bit more
2019-01-08 13:36:12 +03:00
UdjinM6
bade332733
Fix 2612 (#2613) 2019-01-07 18:01:14 +03:00
PastaPastaPasta
5c5932eb93 [PrivateSend] Allow more than 3 mixing participants (#2612) 2019-01-07 13:21:10 +03:00
UdjinM6
0acfbf640d
Gracefully shutdown on evodb inconsistency instead of crashing (#2611) 2019-01-07 12:58:09 +03:00
PastaPastaPasta
07dcddb4ca Backports 0.15 pr2 (#2597)
* Merge #9815: Trivial: use EXIT_ codes instead of magic numbers

a87d02a use EXIT_ codes instead of magic numbers (Marko Bencun)

* Merge #9801: Removed redundant parameter from mempool.PrioritiseTransaction

eaea2bb Removed redundant parameter from mempool.PrioritiseTransaction (gubatron)

* remove extra parameter (see 3a3745bb) in dash specific code

* Merge #9819: Remove harmless read of unusued priority estimates

bc8fd12 Remove harmless read of unusued priority estimates (Alex Morcos)

* Merge #9766: Add --exclude option to rpc-tests.py

c578408 Add exclude option to rpc-tests.py (John Newbery)

* Merge #9577: Fix docstrings in qa tests

3f95a80 Fix docstrings in qa tests (John Newbery)

* Merge #9823: qa: Set correct path for binaries in rpc tests

3333ad0 qa: Set correct path for binaries in rpc tests (MarcoFalke)

* Merge #9833: Trivial: fix comments referencing AppInit2

ef9f495 Trivial: fix comments referencing AppInit2 (Marko Bencun)

* Merge #9612: [trivial] Rephrase the definition of difficulty.

dc222f8 Trivial: Rephrase the definition of difficulty in the code. (Karl-Johan Alm)

* Merge #9847: Extra test vector for BIP32

30aedcb BIP32 extra test vector (Pieter Wuille)

* Merge #9839: [qa] Make import-rescan.py watchonly check reliable

864890a [qa] Make import-rescan.py watchonly check reliable (Russell Yanofsky)

Tree-SHA512: ea0e2b1d4fc8f35174c3d575fb751b428daf6ad3aa944fad4e3ddcc9195e4f17051473acabc54203b1d27cca64cf911b737ab92e986c40ef384410652e2dbea1

* Change back file params
2019-01-07 12:55:35 +03:00
Alexander Block
7d58d87f43 Remove a few sporks which are not used anymore (#2607)
* Remove SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT

And always enforce payments.

* Remove SPORK_10_MASTERNODE_PAY_UPDATED_NODES and SPORK_10_MASTERNODE_PAY_UPDATED_NODES
2019-01-03 23:08:51 +03:00
Alexander Block
d1910eaff4 Refactor remains of CMasternode/-Man into CMasternodeMeta/-Man (#2606)
* 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
2019-01-03 23:08:34 +03:00
Alexander Block
cdc8ae9436 Don't hold CDeterministicMNManager::cs while calling signals (#2608)
This is causing potential deadlocks due to governance calling back into
CDeterministicMNManager but with a differnent lock order.
2019-01-03 15:24:28 +03:00
Alexander Block
968eb3fc5d Add real timestamp to log output when mock time is enabled (#2604)
* Implement IsMockTime to test for mock time

* Add real timestamp to log output when mock time is enabled

This makes debugging on Travis easier as it gives a hint about timing
behavior.
2019-01-03 12:21:19 +03:00
PastaPastaPasta
a49f4123e5 Backports 0.15 pr1 (#2590)
* Merge #9744: Remove unused module from rpc-tests

a432aa0 Remove unused module from rpc-tests (Takashi Mitsuta)

* Merge #9696: [trivial] Fix recently introduced typos in comments

0c9b9b7 [trivial] Fix recently introduced typos in comments (practicalswift)

* Merge #9657: Improve rpc-tests.py

a6a3e58 Various review markups for rpc-tests.py improvements (John Newbery)
3de3ccd Refactor rpc-tests.py (John Newbery)
afd38e7 Improve rpc-tests.py arguments (John Newbery)
91bffff Use argparse in rpc_tests.py (John Newbery)
1581ecb Use configparser in rpc-tests.py (John Newbery)

* Merge #9724: Qt/Intro: Add explanation of IBD process

f6d18f5 Qt/Intro: Explain a bit more what will happen first time (Luke Dashjr)
50c5657 Qt/Intro: Storage shouldn't grow significantly with pruning enabled (Luke Dashjr)
9adb694 Qt/Intro: Move sizeWarningLabel text into C++ code (Luke Dashjr)

* Merge #9794: Minor update to qrencode package builder

1bfe6b4 Use package name variable inside $(package)_file_name variable (Mitchell Cash)

* Merge #9726: netbase: Do not print an error on connection timeouts through proxy

3ddfe29 netbase: Do not print an error on connection timeouts through proxy (Wladimir J. van der Laan)
13f6085 netbase: Make InterruptibleRecv return an error code instead of bool (Wladimir J. van der Laan)

* Merge #9727: Remove fallbacks for boost_filesystem < v3

056aba2 Remove fallbacks for boost_filesystem < v3 (Wladimir J. van der Laan)

* Merge #9485: ZMQ example using python3 and asyncio

b471daf Adddress nits, use asyncio signal handling, create_task (Bob McElrath)
4bb7d1b Add python version checks and 3.4 example (Bob McElrath)
5406d51 Rewrite to not use Polling wrapper for asyncio, link to python2.7 example (Bob McElrath)
5ea5368 ZMQ example using python3 and asyncio (Bob McElrath)

* Merge #9807: RPC doc fix-ups.

851f6a3 [qa][doc] Correct rpc test options in readme (fanquake)
41e7219 [trivial] Add tests_config.ini to .gitignore (fanquake)

* Dashify

Co-Authored-By: PastaPastaPasta <pasta@dashboost.org>

* Change file permissions

* update travis.yml -parallel -> --jobs
2019-01-03 12:18:47 +03:00
Alexander Block
f95aae2b30 Remove all legacy/compatibility MN code (#2600)
* 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)
2019-01-03 12:17:43 +03:00
Alexander Block
78c22ad0fb Multiple fixes for "masternode list"
1. Make strMode lower case before comparing it (keyIDXXX would otherwise
   be case sensitive, leading to confusion for users)
2. Remove "rank" and "keyid" mode from help
3. Add keyIDOwner/keyIDVoting/pubKeyOperator to help and strMode check
4. Remove "pubkey" from strMode check
5. Call ToString() on address instead of whole DMN state
6. Add missing std::setw(10) to "full" mode
2018-12-31 14:05:23 +01:00
Alexander Block
e54f6b274a Use ban score of 10 for invalid DSQ sigs 2018-12-31 14:01:04 +01:00
UdjinM6
536229d170
Apply suggestions from code review
Co-Authored-By: codablock <ablock84@gmail.com>
2018-12-31 13:57:58 +01:00
Alexander Block
1efd773580 Remove non-DIP3 code path in CMasternodePayments::IsScheduled
This relies on mnInfo which is not present anymore as we directly use
deterministicMNManager now.
2018-12-31 08:15:45 +01:00
Alexander Block
4c749b7e94 Directly use deterministicMNManager in "masternode list"
Also remove GetFullMasternodeMap
2018-12-31 08:15:45 +01:00
Alexander Block
0fe97a0459 Remove support for "masternode list rank" 2018-12-31 08:15:45 +01:00
Alexander Block
adc2ec2253 Remove unsupported types/fields from "masternode list" 2018-12-31 08:15:45 +01:00
Alexander Block
4b150e72f1 Directly use deterministicMNManager instead of mnodeman.CountXXX 2018-12-31 08:15:45 +01:00
Alexander Block
4c3bb73045 Remove call to mnodeman.PoSeBan 2018-12-31 08:15:45 +01:00
Alexander Block
0594cd7197 Remove code that is incompatible now due to GetMasternodeRanks returning DMNs now
It's ok to remove this code as we're later going to completely remove it.
Until then, this code is dead nevertheless.
2018-12-31 08:15:45 +01:00
Alexander Block
37541ee00e Change GetMasternodeScores and GetMasternodeRank/s to use CDeterministicMNCPtr
This leaves us with nMinProtocol unused, but this is ok as we will later
remove that argument completely.
2018-12-31 08:15:45 +01:00
Alexander Block
17c792cd3b Remove MN upgrade check in ComputeBlockVersion
Has to be replaced with something new in the future.
2018-12-31 08:15:45 +01:00
Alexander Block
71a6951008 Move logic from FindRandomNotInVec into GetRandomNotUsedMasternode
And adapt it to directly use deterministicMNManager
2018-12-31 08:15:45 +01:00
Alexander Block
2f66d6ada1 Replace uses of mnodeman in PS code when deterministicMNManager can be used directly
Additionally, implement GetLastDsq in CMasternodeMan as a replacement
for direct access to the masternode_info_t object. Will move this variable
to another (PS specific) place later.
2018-12-31 08:15:45 +01:00
Alexander Block
eedb158459 Remove use of mnodeman.GetMasternodeInfo from IX code 2018-12-31 08:15:45 +01:00
Alexander Block
fb13b000b5 Remove support for legacy operator keys in CPrivateSendBroadcastTx 2018-12-31 08:15:45 +01:00
Alexander Block
5f5fcc49cd Remove legacy signatures support in CPrivateSendQueue 2018-12-31 08:15:45 +01:00
Alexander Block
da924519a4 Remove support for legacy signatures in CTxLockVote 2018-12-31 08:15:45 +01:00
Alexander Block
2b2e4f45da Remove a few uses of mnodeman from governance code
And remove them with direct use of deterministicMNManager
2018-12-31 08:15:44 +01:00
Alexander Block
14d8ce03c0 Don't use GetMasternodeInfo in CTxLockVote::IsValid 2018-12-31 08:15:44 +01:00
Alexander Block
1ff241881f Directly use deterministicMNManager in some places 2018-12-31 08:15:44 +01:00
Alexander Block
45f34e130f Implement HasValidMN, HasValidMNByCollateral and GetValidMNByCollateral 2018-12-31 08:15:44 +01:00
Alexander Block
bc29fe160e Remove compatibility code from governance RPCs and directly use deterministicMNManager 2018-12-31 08:15:44 +01:00
Alexander Block
b49ef5d712 Directly use deterministicMNManager when processing DSTX 2018-12-31 08:15:44 +01:00
Alexander Block
ae229e2833 Directly use deterministicMNManager in CGovernanceManager::GetCurrentVotes 2018-12-31 08:15:44 +01:00
Alexander Block
96e0385db8 Let "masternode winner/current" directly use deterministicMNManager 2018-12-31 08:15:44 +01:00
Alexander Block
0c9fb69687 Harden spork15 on testnet (#2586)
* 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.
2018-12-28 19:13:44 +03:00
UdjinM6
361900e461
Bump version to 0.14 (#2589) 2018-12-28 19:12:52 +03:00
Alexander Block
3861c6a82e Add BIP9 deployment for DIP3 on mainnet (#2585) 2018-12-28 16:03:17 +03:00
UdjinM6
0dce846d5a
Add an option to use specific address as a source of funds in protx rpc commands (otherwise use payoutAddress/operatorPayoutAddress) (#2581)
* Add an option to use specific address as a source of funds in protx rpc commands

* fix typo "must"

* Always use payoutAddress (or operatorPayoutAddress) as a default if no fundAddress was specified

* make sure we actually selected some inputs

* fundAddress -> feeSourceAddress

* Align help text with new logic

* fix protx_update_service

* fix protx_revoke

* Add fRequireAllInputs to CCoinControl and use it in FundSpecialTx

This avoids adding all inputs even though they are not needed.

* Allow to specify empty operator payout address and simplify fee code in update_service

DIP3 tests were failing to call "protx update_service" as it did not accept
an empty "operatorPayoutAddress".

This also simplifies handling of the feeSourceAddr.

* Specify source for funds and fees in DIP3 tests
2018-12-28 12:24:48 +03:00
UdjinM6
33f78d70e8
Do not accept sporks with nTimeSigned way too far into the future (#2578) 2018-12-22 13:33:49 +03:00
UdjinM6
587911b36f
Fix IsBlockPayeeValid (#2577)
- should skip while not synced regardless of spork15 state
- add missing logprintf
2018-12-21 18:21:28 +03:00
Alexander Block
03a6865d94 Enforce correct port on mainnet for DIP3 MNs (#2576) 2018-12-21 18:21:12 +03:00
UdjinM6
3f26ed78c7
Backport network checks missing in CActiveDeterministicMasternodeManager::Init() (#2572)
* Backport network checks missing in CActiveDeterministicMasternodeManager::Init()

* Drop mainnnet/non-mainnet port verification part

moved to 2576
2018-12-21 18:20:43 +03:00
UdjinM6
6c4b3ed8d2 Load sporks before checking blockchain (#2573) 2018-12-20 14:31:23 +01:00
Alexander Block
e71ea29e68
Add ownerAddr and votingAddr to CDeterministicMNState::ToJson (#2571) 2018-12-20 14:28:03 +01:00
Alexander Block
222e5b4f7f
Remove proposal/funding votes from MNs that changed the voting key (#2570)
* Rename onlyOwnerAllowed boolean variables to onlyVotingKeyAllowed

This was misleading.

* Remove invalid proposal votes when MN voting keys change
2018-12-20 14:27:48 +01:00
Alexander Block
999a519074 Fix optional revocation reason parameter for "protx revoke" and a few help strings (#2568)
* Fix optional revocation reason parameter for "protx revoke"

* Fix "protx revoke" help message

* Remove obsolete help text about masternode operator keys and wallets
2018-12-19 11:11:38 +03:00
UdjinM6
6dfceaba5a Force FlushStateToDisk on ConnectTip/DisconnectTip while not in IBD (#2560) 2018-12-19 08:37:47 +01:00
Alexander Block
858bb52ad5
Show correct operator payee address in DIP3 MN list GUI (#2563)
* Show correct operator payee address in DIP3 MN list GUI

* Rename dest to operatorDest
2018-12-19 08:37:37 +01:00
Alexander Block
1908637228
Remove legacy MN list tabs on spork15 activation (#2567)
* Remove legacy masternode tabs on DIP3 activation

* Move setInvisible call for dip3NoteLabel up

Otherwise it takes a minute until it's actually made invisible.

* Bail out early from updateMyNodeList when spork15 is active

Otherwise we risk accessing destroyed Qt objects.
2018-12-19 08:37:25 +01:00
UdjinM6
3c30a6aff3 Add missing masternodeblsprivkey help text (#2569) 2018-12-19 08:36:06 +01:00
UdjinM6
c089261465 Unify "protx list" options (#2559) 2018-12-17 07:06:45 +01:00
Alexander Block
552d9089e7
Update testnet seeds to point to MNs that are on the new chain (#2558) 2018-12-14 16:34:11 +01:00
Alexander Block
e9f7142ed0
Bump PROTOCOL_VERSION and DMN_PROTO_VERSION to 70213 (#2557)
* Bump PROTOCOL_VERSION and DMN_PROTO_VERSION to 70213

This will disconnect all nodes from the old testnet chain when DIP3 gets
activated through BIP9.

Also update comments where 70212/70213 was referenced.

* Also bump MIN_PEER_PROTO_VERSION_DIP3 and MIN_PRIVATESEND_PEER_PROTO_VERSION
2018-12-14 16:33:58 +01:00
Alexander Block
793e74cc9f Remove temporary fork handling for emergency difficulty reduction on testnet
As we reset testnet, we can also remove the special handling for old blocks.
2018-12-13 21:51:52 +01:00
Alexander Block
79d543e896 Don't check for nSuperblockStartHash on testnet 2018-12-13 20:30:41 +01:00
Alexander Block
24ebcbd12c Remove checkpoints above block 4000 2018-12-13 15:07:40 +01:00
Alexander Block
ab3fe4fa86 Update nMinimumChainWork and defaultAssumeValid for block 4000 2018-12-13 15:07:38 +01:00
Alexander Block
b2d3e220b5 Change DIP0003 deployment to start today 2018-12-13 14:31:09 +01:00
Alexander Block
d6fa7026c9 Change CSV, DIP0001 and BIP147 deployments to start today 2018-12-13 14:31:05 +01:00
Alexander Block
431ef26280 Bump nPowKGWHeight for testnet and cause a fork at height 4001
This will reset testnet so that we can start with a clean state.
2018-12-13 13:57:08 +01:00
Alexander Block
9d33d216b7 Remove temporary code which forked testnet at block 274000 2018-12-13 13:55:46 +01:00
UdjinM6
07309f0ec3 Allow up to MASTERNODE_MAX_MIXING_TXES (5) DSTXes per MN in a row (#2552) 2018-12-13 09:13:02 +01:00
UdjinM6
3e97b0cbdb Make sure that we can get inputType and fUseInstantSend regardless of the way recipients are sorted (#2550)
* Make sure that we can get inputType and fUseInstantSend regardless of the way recipients are sorted

* Move "for" loops outside of "if"s
2018-12-13 09:12:45 +01:00
UdjinM6
1a7c29b97c Revert "Sort recipients in SendCoins dialog via BIP69 rule (#2546)" (#2549)
This reverts commit 18cd5965cc.
2018-12-13 09:12:22 +01:00
UdjinM6
ca0aec2a32 Match recipients with txouts by scriptPubKey in reassignAmounts() (#2548)
* Match recipients with txouts by scriptPubKey in reassignAmounts()

* Drop no longer used nChangePosRet from reassignAmounts() params
2018-12-13 09:12:07 +01:00
UdjinM6
378dadd0f7 Ensure EvoDB consistency for quorum commitments by storing the best block hash (#2537)
* Ensure EvoDB consistency by storing the best block hash

This approach is similar to the one used for chainstate currently.
Ensures that:
- nodes that upgraded after DIP3 has all the data processed correctly (they will crash and require reindex);
- evodb/ is removed when blocks/ is removed (otherwise sync will fail due to duplicate records).

* Implement CEvoDB::VerifyBestBlock/WriteBestBlock and call them from ConnectBlock/DisconnectBlock

* Fix walletbackup.py
2018-12-13 09:11:50 +01:00
UdjinM6
2127a426b8 Further refactoring of CQuorumBlockProcessor (#2545)
* Switch GetQuorumBlockHash from CBlockIndex* to nHeight

* `pindexPrev -> pindex` for ProcessCommitment

* Switch IsCommitmentRequired from CBlockIndex* to block height

* Switch GetMinableCommitment/Tx from CBlockIndex* to block height

* Add `AssertLockHeld(cs_main);`

Co-Authored-By: UdjinM6 <UdjinM6@users.noreply.github.com>
2018-12-13 09:04:08 +01:00
Alexander Block
09730e1c59
Bail out from update methods in MasternodeList when shutdown is requested (#2551) 2018-12-13 07:55:42 +01:00
Alexander Block
1522656d6f
Correctly handle spent collaterals for MNs that were registered in the same block (#2553)
* Move spent collateral handling to the bottom of BuildNewListFromBlock

* Handle conflicts with spent collaterals in mempool
2018-12-13 07:49:50 +01:00
UdjinM6
18cd5965cc Sort recipients in SendCoins dialog via BIP69 rule (#2546) 2018-12-10 14:57:22 +01:00
Alexander Block
5830353373
Track operator key changes in mempool and handle conflicts (#2540)
* Track ProTx operator key changes in mempool

* Remove ProTx conflicts from mempool when ProUpRegTx or ProUpRevTx changed keys

* Only allow one operator key change per MN in in mempool
2018-12-10 09:14:19 +01:00
Alexander Block
88f7bf0d82
Don't delete/add values to the unique property map when it's null (#2538)
* Don't delete/add values to the unique property map when it's null

This happens when revoking operator keys, as the revoked MN will then have
the address and operator keys set to the null representation. We shouldn't
add the null value to the unique property map as otherwise future revokes
crash in an assert.

* Assert that no null values are passed to Add/DeleteUniqueProperty

* Check for null values before calling Add/DeleteUniqueProperty

* Apply suggestions from code review

Co-Authored-By: codablock <ablock84@gmail.com>

* Add user generated default constructors to BLS primitives

Fixes build issues on Mac:

In file included from evo/deterministicmns.cpp:5:
./evo/deterministicmns.h:375:24: error: default initialization of an object of const type 'const CBLSPublicKey' without a user-provided default constructor
        static const T nullValue;
                       ^
2018-12-10 08:31:09 +01:00
UdjinM6
15414dac29 Refactor CQuorumBlockProcessor and CDeterministicMNManager (#2536)
* Refactor CDeterministicMNManager::ProcessBlock: pintexPrev -> pindex->pprev and/or adjust logic accordingly

* Refactor CQuorumBlockProcessor::ProcessBlock: pintexPrev -> pindex->pprev and/or adjust logic accordingly

* Drop unused
2018-12-10 06:05:29 +01:00
Alexander Block
63b58b1e92
Reintroduce BLSInit to correctly set secure alloctor callbacks (#2543)
https://github.com/dashpay/dash/pull/2409 removed the need to call the
Init method of the Chia BLS library, but we also accidently removed the
initialization of the secure allocator.
2018-12-10 06:04:48 +01:00
Alexander Block
d9b28fe1ad
Introduce dummy (ping-like) contributions for the dummy DKG (#2542)
* Implement creation and propagation of dummy contributions

These act as a ping which is broadcast a few blocks before the dummy
commitments are created. They are meant to determine online/offline members.

* Use information about received dummy contributions to determine validMembers

* Fix PoSe tests

* Fix dummy DKG phase progress in PoSe tests and give tests more time

Mine one block at a time until we reach the mining phase.
2018-12-10 06:04:33 +01:00
Alexander Block
df0d0cce77
Watch for changes in operator key and disable local MN (#2541) 2018-12-10 06:04:13 +01:00
Alexander Block
511dc3714c
Remove ProTxs from mempool that refer to a ProRegTx for which the collateral was spent (#2539)
* Track TXs in mempool which refer to an existing ProTx

* When a block is added, remove TXs that refer to ProTxs with spent collaterals

* Initalize evoDb and deterministicMNManager in BasicTestingSetup

instead of TestingSetup. Now that the mempool uses deterministicMNManager,
we need to initialize it for all tests that might use the mempool.
2018-12-10 06:03:57 +01:00
Solar Designer
cbd0303529 Serialize the block header in CBlockHeader::GetHash() (#2531)
* Serialize the block header in CBlockHeader::GetHash()

* Switch from CDataStream to CVectorWriter

Co-Authored-By: solardiz <solar@openwall.com>
2018-12-10 05:40:08 +01:00
Alexander Block
5185dd5b73
Use correct time field when removing pre-DIP3 votes (#2535)
nTime is not the timestamp from the vote object. nCreationTime is the
correct field to use.

This fixes continues deletion of votes.
2018-12-06 14:44:14 +01:00
Alexander Block
225c2135e2
Allow skipping of MN payments with zero duffs (#2534)
* Allow skipping of MN payments with zero duffs

In case a MNO uses an operator reward of 100%, the normal reward will be 0
duffs. It doesn't make sense to enforce these payments.

This will cause a fork when miners start to mine with the new version, but
only for nodes that didn't upgrade.

* Apply suggestions from code review

Co-Authored-By: codablock <ablock84@gmail.com>
2018-12-06 14:43:54 +01:00
Alexander Block
d94092b60b
Fix spork propagation while in IBD and fix spork integration tests (#2533)
* Fix spork syncing issue in sporks tests

https://github.com/dashpay/dash/pull/2522 caused an issue with sporks syncing
in tests. The introduced time check in CMasternodeSync::ProcessTick causes
masternode sync to never start when mocktime is enabled, so this commit
disables mocktime for sporks.py.

Disabling mocktime however leads to fInitialDownload never becoming false
in CMasternodeSync::UpdatedBlockTip, so mnsync is never started. To fix
this, the tests now create a block before connecting the last node.

This however doesn't work because node1 will ignore the "getheaders" request
from node2 as it has not finished mnsync yet...so we also have to force
finish mnsync for node1.

* Also respond with getdata for announced sporks while in IBD

There was never a good reason to ignore spork announcements while in IBD.
At the same time, this poses the risk of missing out on sporks while in IBD.
This also fixes an issue in sporks testing, as nodes did not request for
announced sporks.

* Use wait_to_sync instead of custom loop
2018-12-06 14:43:36 +01:00
UdjinM6
9100c69eb9 Allow filtering by proTxHash on DIP3 MN tab (#2532) 2018-12-06 11:32:42 +01:00
Alexander Block
2161199210
Fix wrong total MN count in UI and "masternode count" RPC (#2527)
* Use CountMasternodes() in ClientModel::getMasternodeCountString

* Use CountMasternodes() for total count in masternode_count

* Fix CountMasternodes() to give correct number of masternodes with spork15 enabled

Also change CountEnabled to not call CountMasternodes anymore but instead
have its own implementation which uses GetValidMNsCount instead of GetAllMNsCount

* Apply review suggestions
2018-12-06 11:32:15 +01:00
Alexander Block
8f8878a94f
Add dummy/hidden column to carry the proTxHash per MN list entry... (#2530)
...and use this in GetSelectedDIP3MN. This fixes copy/paste issues with MNs
that don't have a valid address (PoSe banned).
2018-12-06 08:09:23 +01:00
Alexander Block
7c75008642
Also stop asking other peers for a TX when ProcessTxLockRequest fails (#2529)
This is moving up the RemoveAskFor call above the ProcessTxLockRequest
call. If ProcessTxLockRequest fails, we should not re-request the same
TX/IX from other nodes as it will continue to fail.
2018-12-06 08:08:54 +01:00
Alexander Block
19a6f718d3
Don't respond with getdata for legacy inv types when spork15 is active (#2528)
Avoid unnecessary traffic from non-upgraded nodes.
2018-12-06 08:07:33 +01:00
Alexander Block
d2ca9eddee
Fix multiple issues with governance voting after spork15 activation (#2526)
* Check resulting signature for validity when signing with BLS operator keys

* Support specifying proTxHash when using "gobject vote-alias"

The "alias-name" is now interpreted as proTxHash when deterministic MN lists
are active.

The classical "alias" as found in masternode.conf has no meaning after
spork15 activation.

* Don't use masternode.conf list in gobject_vote_many when spork15 is active

Keys don't match anymore so we should only rely on the deterministic list
and the local wallet's keys.

* Check for pwalletMain not being null in gobject_vote_many

* Allow to use vote-conf for non-proposal votes when spork15 is active

This fixes sentinel not being able to create triggers on testnet.

* Fix error message

* Fix no-wallet compilation and check for pwalletMain at runtime
2018-12-06 08:07:10 +01:00
Alexander Block
60867978d6
Avoid printing DIP3/DIP4 related logs twice (#2525)
All logging that happens in BuildNewListFromBlock is currently printed twice.
This is because BuildNewListFromBlock is called while processing the block
and also while calculating the DIP4 MN list commitment.

This commit adds the debugLogs to this method to allow omitting logs while
called from the DIP4 code.
2018-12-06 08:06:37 +01:00
UdjinM6
08dc178711 Drop pre-DIP3 votes from current votes per MN per object (#2524) 2018-12-06 08:06:21 +01:00
Alexander Block
7037f7c999
Bail out from GetBlockTxOuts in case nBlockHeight is above tip+1 (#2523)
In the future, we should make sure that this method is only called for the
currently mined block or for old blocks, but never for non-existing blocks
further in the future.
2018-12-06 08:05:57 +01:00
UdjinM6
3a6bd8d235 Call ProcessTick every second, handle tick cooldown inside (#2522) 2018-12-06 08:05:36 +01:00
UdjinM6
973a7f6dd6 Fix GUI warnings in debug.log (#2521)
Specifically:

```
GUI: QMetaObject::connectSlotsByName: No matching signal for on_extraInfoDIP3_doubleClicked()
GUI: QMetaObject::connectSlotsByName: No matching signal for on_copyProTxHash_clicked()
GUI: QMetaObject::connectSlotsByName: No matching signal for on_copyCollateralOutpoint_clicked()
```
2018-12-06 08:05:05 +01:00
PastaPastaPasta
818f0f4647 Allow consuming specific UTXO in gobject prepare command (#2482)
* Implement optional CoinControl for gobject prepare

* Removes duplicate `);` from merge error

Co-Authored-By: PastaPastaPasta <pasta@dashboost.org>

* Fix equality check allowing more relevant help output

* Pass COutPoint as const reference

Co-Authored-By: PastaPastaPasta <pasta@dashboost.org>

* Remove unnecessary SetNull call

Co-Authored-By: PastaPastaPasta <pasta@dashboost.org>

* Specify proposal fee

Co-Authored-By: PastaPastaPasta <pasta@dashboost.org>
2018-12-03 21:00:09 +03:00
Salisbury
1270b71229 Use a verbosity instead of two verbose parameters (#2506) 2018-12-03 16:49:21 +01:00
Alexander Block
22dcec71a8
Punish nodes which keep requesting and then rejecting blocks (#2518)
* Move deserialization of REJECT message fields out of if(fDebug)

* Ban nodes which keep requesting and then rejecting blocks

* Don't read/deserialize reject hash twice

* Only use ban score of 1
2018-12-03 16:48:48 +01:00
Alexander Block
0224914200
Print the state object when ProcessSpecialTxsInBlock fails in ConnectBlock (#2516)
Currently, when any DIP2/3/6 validation fails, there is no error message
printed that shows what exactly went wrong.
2018-12-03 16:48:29 +01:00
Alexander Block
0c1b683a06 Clear votes which were created before spork15 activation and use operator key for non-funding votes (#2512)
* 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
2018-11-29 21:51:53 +03:00
Alexander Block
f6f6d075dc Still support "protx list" and "protx diff" when wallet is disabled at compile time (#2511)
* Don't fully remove protx commands when ENABLE_WALLET is not set

* Check for wallet support at run-time for protx commands

* Only show subcommands that require the wallet when ENABLE_WALLET is set

* Add and use CheckWalletOwnsKey which is able to check wallet support at runtime

* Properly handle disabled wallets in "protx list"

This now also handles the case where ENABLE_WALLET is not defined.

* Drop comment that doesn't fully apply anymore
2018-11-29 21:51:31 +03:00
Alexander Block
5a3f64310b Deserialize CFinalCommitmentTxPayload instead of CFinalCommitment in TxToJSON (#2510)
* Deserialize CFinalCommitmentTxPayload instead of CFinalCommitment in TxToJSON

* Implement ToJson for CFinalCommitmentTxPayload and use it in TxToJSON

Otherwise the nVersion and nHeight members of it are not shown.
2018-11-29 21:51:04 +03:00
Alexander Block
5da4c97284 Use "registered" as default for "protx list" (#2513)
"wallet" was confusing too many users as it shows an empty list if the local
wallet does not own any keys for any MN.
2018-11-29 15:31:37 +03:00
Alexander Block
f96563462b
Fix check for nTemporaryTestnetForkDIP3Height (#2508)
This caused a crash when performing a full-sync.
2018-11-29 09:12:51 +01:00
Alexander Block
fc6d651c43
Fix crashes in "protx" RPCs when wallet is disabled (#2509) 2018-11-29 09:12:41 +01:00
Alexander Block
35550a3f93
Add quorumModifierHash to instant send lock vote (#2505)
* Let GetMasternodeRank also return the block hash at the given height

* Add outpointConfirmedBlock to CTxLockVote and verify it

* Match order of parameters with member order

* Rename outpointConfirmedBlock to quorumModifierHash

* Add overload of GetMasternodeRank that does not return the block hash
2018-11-28 11:43:28 +01:00
Alexander Block
812834dc5f
Put height into mined commitments and use it instead of the special handling of quorumVvecHash (#2501)
* Allow to skip sig verification for CFinalCommitment::Verify

* Add CFinalCommitmentTxPayload and CheckLLMQCommitment and use it

As described in https://github.com/dashpay/dips/pull/31 (see discussion).

* Properly ban nodes for invalid commitments
2018-11-27 08:04:08 +01:00
UdjinM6
ed53fce470 Revert "Apply similar logic to vecMasternodesUsed" (#2503)
This reverts commit ebb120005292bc077d6dd7c4ce8adbe25167bf16.
2018-11-27 08:03:41 +01:00
thephez
ba49a4a160 Trivial: protx fund_register RPC help corrections (#2502) 2018-11-27 05:12:11 +01:00
Alexander Block
a4f5ba38b6
Implement CDummyDKG and CDummyCommitment until we have the real DKG merged (#2492)
* Add SPORK_17_QUORUM_DKG_ENABLED spork

* Implement CDummyDKG and CDummyCommitment until we have the real DKG merged

This is only used on testnet/devnet/regtest and will NEVER be used on
mainnet. It is NOT SECURE AT ALL!

See comment in quorums_dummydkg.h for more details.

* Test simple PoSe in DIP3 tests

* Generate 2 instead of 4 blocks per iteration in PoSe tests

4 was based on old chainparams where I used larger phases.

* Only sleep when necessary in PoSe tests

* Fix typo in comment

* Give PoSe tests more time and sync after fast-forward
2018-11-26 16:53:20 +01:00
Alexander Block
a18ca49a22
Disconnect peers with version < 70212 after DIP3 activation via BIP9 (#2497)
* Disconnect peers with version < 70212 after DIP3 activation via BIP9

* Send REJECT and log when diconnecting peers after DIP3 activation
2018-11-26 16:23:17 +01:00
Alexander Block
80656038fa Bump nTemporaryTestnetForkHeight to 274000 (#2498) 2018-11-26 16:23:29 +03:00
UdjinM6
69bffed72f
Do not sort resulting vector in SelectCoinsGroupedByAddresses (#2493)
Apply specific sort in each case separately instead (when needed).
2018-11-26 16:22:39 +03:00
InhumanPerfection
bb11f1a638 Fix recent changes in DSA conditions (#2494)
* pr2487 bugfix

* push reject msg
2018-11-25 23:52:56 +03:00
UdjinM6
6480ad1d5f
Should check dsq queue regardless of the mixing state (#2491) 2018-11-25 16:35:52 +03:00
Alexander Block
66612cc4b5 Add 0 entry to vTxSigOps when adding quorum commitments (#2489)
This fixes a crash observed on Travis. The same crash is likely to happen
outside of Travis as well later.
2018-11-25 16:27:56 +03:00
UdjinM6
67483cd340
Fix dsq/dsa conditions (#2487)
* Apply new dsq rules in StartNewQueue and DSACCEPT

* Apply similar logic to vecMasternodesUsed

* Add extra check for DSACCEPT
2018-11-25 16:27:43 +03:00
UdjinM6
9d4df466b9
Fix CreateDenominated failure for addresses with huge amount of inputs (#2486)
* Allow specifing max number of outpoints to be returned per address in SelectCoinsGroupedByAddresses

Fixes CreateDenominated failure for addresses with huge amount of inputs

* Apply suggested fixes
2018-11-25 16:27:31 +03:00
Alexander Block
0123517b48 Implement PoSe based on information from LLMQ commitments (#2478)
Members which are not in the validMembers bitsets are now PoSe punished.
The maximum PoSe score is dynamic and mostly identical to the number of
registered MNs. Added PoSe scores for failures are then a percentage of
the maximum score, so that we can better control how often failures are
allowed per payment cycle. For LLMQ failures, this is 66% to allow
approximately 2 failures per payment cycle.
2018-11-25 16:27:18 +03:00
PastaPastaPasta
45421b1a3a Add IS parameter for gobject prepare (#2452)
* Add IS parameter for gobject prepare

* Update if statement

Co-Authored-By: PastaPastaPasta <pasta@dashboost.org>

* Update src/rpc/governance.cpp

Co-Authored-By: PastaPastaPasta <pasta@dashboost.org>

* Update src/rpc/governance.cpp

Co-Authored-By: PastaPastaPasta <pasta@dashboost.org>
2018-11-25 16:26:50 +03:00
UdjinM6
65528e9e7b Bump masternodeman cache version (#2467) 2018-11-23 18:15:38 +01:00
Alexander Block
fa8f4a10cc
Include masternodeProTxHash in CTxLockVote (#2484)
* Introduce proTxHash to CActiveMasternodeInfo

* Include masternodeProTxHash in CTxLockVote
2018-11-23 16:33:45 +01:00
UdjinM6
aa495405b3 [GUI] Realign tx filter widgets (#2485)
Also hide watch-only filter when no watch-only addresses are used (corresponding column already has this kind of behaviour).
2018-11-23 16:23:15 +01:00
PastaPastaPasta
da4b5fb16e Remove an unused function from governance object collateral code (#2480) 2018-11-23 15:43:23 +01:00
Alexander Block
22b5952c5a
Implement and enforce DIP6 commitments (#2477)
* Add LLMQ parameters to consensus params

* Add DIP6 quorum commitment special TX

* Implement CQuorumBlockProcessor which validates and handles commitments

* Add quorum commitments to new blocks

* Propagate QFCOMMITMENT messages to all nodes

* Allow special transactions in blocks which have no inputs/outputs

But only for TRANSACTION_QUORUM_COMMITMENT for now.

* Add quorum commitments to self-crafted blocks in DIP3 tests

* Add simple fork logic for current testnet

This should avoid a fork on the current testnet. It only applies to the
current chain which activated DIP3 at height 264000 and block
00000048e6e71d4bd90e7c456dcb94683ae832fcad13e1760d8283f7e89f332f.

When we revert the chain to retest the DIP3 deployment, this fork logic
can be removed again.

* Use quorumVvecHash instead of quorumHash to make null commitments unique

Implementation of https://github.com/dashpay/dips/pull/31

* Re-add quorum commitments after pruning mempool selected blocks

* Refactor CQuorumBlockProcessor::ProcessBlock to have less nested if/else statements

Also add BEGIN/END markers for temporary code.

* Add comments/documentation to LLMQParams

* Move code which determines if a commitment is required into IsCommitmentRequired

This should make the code easier to read and also removes some duplication.

The also changes the error types that are possible from 3 to 2 now. Instead
of having "bad-qc-already-mined" and "bad-qc-not-mining-phase", there is
only "bad-qc-not-allowed" now.

* Use new parameter from consensus parames for the temporary fork
2018-11-23 15:42:09 +01:00
PastaPastaPasta
f4ef388dea Update PS help text for the new denom (#2471) 2018-11-23 15:41:00 +01:00
gladcow
a57e9dea74 Fix filtering of the lock votes for SPV nodes. (#2468)
* check request is not empty to use it for filtering

* Filter vote INVs by tx hash

* fix lock requests filtering

* Apply suggestions from code review

Co-Authored-By: gladcow <sergey@dash.org>
2018-11-23 15:40:19 +01:00
Alexander Block
d40a5ce31f
Properly initialize confirmedHash in CSimplifiedMNListEntry (#2479)
* Properly initialize confirmedHash in CSimplifiedMNListEntry

* Add consensus params for temporary hard-fork on testnet

This hard-fork is required on testnet as we have to fix a few consensus
bugs in DIP3/DIP4. It will also be required to introduce LLMQ commitments
to testnet.

* Add temporary fork-logic for testnet, which sets confirmedHash to null

...before fork activation. Otherwise we'd invalidate all DIP3 blocks on
testnet.

* Bump nTemporaryTestnetForkHeight to 273000
2018-11-23 10:40:46 +01:00
UdjinM6
df7d12b41f Add univalue test for real numbers (#2460) 2018-11-22 06:09:58 +01:00
UdjinM6
2b400f74b5 Base dsq/dstx thresholold on total number of up to date masternodes (#2465)
Mixing on a newer version with small number of upgraded masternodes
causes mixing txes to "stuck" - old nodes refuse to relay dstxes from new ones because
they come from the same masternodes too often. Basing threshold on the total number
of up to date masternodes and not only on a newer (enabled) ones should solve this.
This however will cause mixing to fail if there are not enough masternodes
on the needed protocol version (i.e. at least GetMinMasternodePaymentsProto())
but it's better to stop mixing than having funds kind of spent yet not confirmed
for a long time.
2018-11-22 06:09:35 +01:00
Alexander Block
5ffc31bce4
Forbid version=0 in special TXs (#2473) 2018-11-22 06:05:32 +01:00
Alexander Block
85157f9a9e
Few trivial fixes for DIP2/DIP3 (#2474)
* Fix wrong index for argument to protx_update_service when error is thrown

* Unify and fix variable name in TxToJSON

The UniValue variable name for TRANSACTION_COINBASE was wrong and is fixed
now. Also changed names for all other special TXs to unify names. This
should avoid such errors in the future when new "else if" branches are
copy/pasted.

* Use "proRegTx" instead of "proTx" as key TRANSACTION_PROVIDER_REGISTER payloads
2018-11-22 06:05:20 +01:00
Alexander Block
2ba1ff5216
Use ParseFixedPoint instead of ParseDoubleV in "protx register" commands (#2458) 2018-11-21 08:04:42 +01:00
Alexander Block
7cabbadefd
Implement context menu and extra info on double-click for DIP3 masternode list (#2459)
* Implement context menu and extra info on double-click for DIP3 masternode list

Menu items:
- "Copy ProTx hash"
- "Copy Collateral hash"

On double click:
Show simple message box with the json representation of the DMN.

* Fix review comments
2018-11-21 08:04:19 +01:00
InhumanPerfection
e049f9c1ea fix protx register rpc help (#2461) 2018-11-21 08:02:54 +01:00
PastaPastaPasta
eb2103760b trivail, clarifies help text for protx register (#2462) 2018-11-21 08:02:15 +01:00
UdjinM6
9232a455c8 Do not hold cs_main while emitting messages in WalletModel::prepareTransaction (#2463)
* Do not hold cs_main while emitting messages

Fixes potential deadlock:
```
POTENTIAL DEADLOCK DETECTED
Previous lock order was:
 (1) cs_deqsessions  privatesend-client.cpp:966
 (2) cs_main  privatesend-client.cpp:816
Current lock order is:
 (2) cs_main  qt/walletmodel.cpp:299
 wallet->cs_wallet  qt/walletmodel.cpp:299
 (1) cs_deqsessions  privatesend-client.cpp:350
```

* Keep CWalletTx* newTx in inner scope
2018-11-21 08:01:47 +01:00
strophy
76e93c7d7b Corrections to incorrect syntax in RPC help (#2466)
* Fix incorrect inline help for "protx update_registrar"

Initial ProRegTx does not define a field named "collateralAddress". It is not necessary to use the collateral address to receive payout, any Dash address can be defined here.

* Fix incorrect syntax for "protx revoke" inline help

"operatorKey" is required here
2018-11-21 07:57:47 +01:00
UdjinM6
12aba2592d Updating translations for de, es, fi, nl, pt, sk, zh_CN, zh_TW (#2451)
* Updating de, es, fi, nl, pt, sk, zh_CN, zh_TW

Known issues:
dash_zh_CN.ts: Mismatch between 'Start &all' and '启动全部(%A)'
dash_zh_CN.ts: Mismatch between 'Open the %1 debug log file from the current data directory. This can take a few seconds for large log files.' and '打开当前目录中的调试日志文件。日志文件大的话可能要等上几秒钟。'
dash_zh_CN.ts: Mismatch between 'Too many %f denominations, removing.' and '太多面额化资金,正在移除。'
dash_zh_CN.ts: Mismatch between 'Initialization sanity check failed. %s is shutting down.' and '初始化完整性检查失败。% 即将

* Fix issues in zh_CN
2018-11-16 18:40:23 +01:00
Alexander Block
cf2b547b7c
Implement tab for DIP3 MN list (#2454)
* Implement tab for DIP3 MN list

* Update src/qt/masternodelist.cpp

Co-Authored-By: codablock <ablock84@gmail.com>

* Change "x.xx% to UNSPECIFIED" to "x.xx% but not claimed" for opeartor reward
2018-11-16 18:19:49 +01:00
Alexander Block
102d127494
Merge pull request #2446 from codablock/pr_dip3_tests
Fix integration tests and add P2SH/multisig tests for DIP3 payees
2018-11-16 09:38:36 +01:00
Alexander Block
58b7041279
Merge pull request #2447 from codablock/pr_dip4_fixdiff
Fix "protx diff" and MNLISTDIFF P2P message to not always return all MNs
2018-11-16 09:37:35 +01:00
Alexander Block
79d7af5d16
Merge pull request #2448 from codablock/pr_dip3_p2shoperatorewards
Allow P2SH/multisig addresses for operator rewards
2018-11-16 09:37:07 +01:00
UdjinM6
624e50949e Remove few leftovers of -instantsenddepth 2018-11-15 21:56:13 +03:00
UdjinM6
88498ba139
Apply suggestions from code review
Co-Authored-By: codablock <ablock84@gmail.com>
2018-11-15 15:24:24 +01:00
Alexander Block
83aac461bc Allow P2SH/multisig addresses for operator rewards
There is no reason left to stick with the P2PKH limitation
2018-11-15 13:24:46 +01:00
Alexander Block
b5947f2997 Implement BuildSimplifiedDiff in CDeterministicMNList
And use it instead of BuildDiff in DIP4
2018-11-15 10:42:39 +01:00
Alexander Block
6edad37457 Use ForEachMN and GetMN in BuildDiff instead of directly accessing mnMap 2018-11-15 10:41:14 +01:00
Alexander Block
3c1f44c3a2 Make sure protx_update_registrar adds enough funds for the fees
FundSpecialTx must take the size of signature into account.
2018-11-15 08:05:38 +01:00
Alexander Block
f4ec3db067
Merge pull request #2442 from UdjinM6/spectx
Various fixes for special txes
2018-11-15 05:18:44 +01:00
Alexander Block
684f9ae0bf
Merge pull request #2445 from codablock/pr_dip3_removerestriction
Remove restriction of payeeAddress being the same as collateralAddress
2018-11-15 05:17:43 +01:00
Alexander Block
d130f25ac3 Fix check for number of params to protx_update_service (#2443) 2018-11-14 18:57:17 +01:00
Alexander Block
f5864254cf Do not use keyIDCollateralAddress anymore when spork15 is active 2018-11-14 18:44:39 +01:00
Alexander Block
5ccf556f3a GetMasternodeInfo with payee argument should do nothing when DIP3 is active
Also change ComputeBlockVersion to directly use mnList.GetMNPayee()
2018-11-14 18:44:39 +01:00
Alexander Block
927e8bd796 Also forbid reusing collateral key for owner/voting keys
We previously only checked for the payee key.
2018-11-14 18:44:39 +01:00
Alexander Block
826e7d063a Move internal collateral check to the else branch of the external collateral check 2018-11-14 18:44:39 +01:00
Alexander Block
dc404e7550 Allow P2SH for payout scripts 2018-11-14 18:44:39 +01:00
Alexander Block
9adf8ad738 Remove restriction that forced use of same addresses for payout and collateral 2018-11-14 18:44:39 +01:00
UdjinM6
6761fa49f1 More checks for tx type 2018-11-14 16:59:10 +03:00
UdjinM6
b843696638 Be more specific about tx version in conditions
We don't want to set rules for version 4+ txes atm.
2018-11-14 16:58:05 +03:00
UdjinM6
c975a986b2 no cs_main in specialtxes 2018-11-14 16:58:03 +03:00
UdjinM6
8bd5b231bf Log mempool payload errors instead of crashing via assert 2018-11-14 16:57:41 +03:00
UdjinM6
658b7afd18 Make error messages re payload a bit more specific 2018-11-14 16:57:41 +03:00
Alexander Block
4ad2f647c2 Use proTxHash instead of outpoint when calculating masternode scores (#2440)
* Track confirmedHash of masternodes

* Also include confirmedHash in DIP4

* Implement CalculateQuorum and CalculateScores in CDeterministicMNList

* Use new ProRegTx based scoring function in GetMasternodeScores

* Update test vectors for simplifiedmns_merkleroots tests
2018-11-13 15:24:14 +03:00
UdjinM6
adf9c87e2e
Fix protx/bls rpc help (#2438) 2018-11-13 15:23:52 +03:00
UdjinM6
579c83e881
Add coinbase_payload to getblocktemplate help (#2437) 2018-11-13 15:23:31 +03:00
Alexander Block
3685c85e7f Show BIP9 progress in getblockchaininfo (#2435)
* Implement VersionBitsCountBlocksInWindow

This gives the count of blocks that voted for the given BIP9 deployment

* Add additional information to BIP9 softforks returned by getblockchaininfo

* make sure progress doesn't exceed 1
2018-11-12 18:08:58 +03:00
UdjinM6
46462d6829
Add a column for IS lock status on Transactions tab (#2433)
* Drop colorizing for IS

* Add IS column

* Add IS filter
2018-11-12 18:08:31 +03:00
Alexander Block
c27e62935f
Allow reusing of external collaterals in DIP3 (#2427)
* Allow to reuse collaterals and addresses in ProRegTx

This also requires to move out the duplication check from CheckService to
the 2 individual ProTx check methods.

* Implement replacement logic for reused collaterals

* Add tests for new replacement logic
2018-11-10 10:54:16 +01:00
Alexander Block
76a38f6ceb
Update defaultAssumeValid, nMinimumChainWork and checkpoints (#2428)
* Update defaultAssumeValid and nMinimumChainWork for mainnet

* Update defaultAssumeValid and nMinimumChainWork for testnet

* Add checkpoint for mainnet

* Add checkpoint for testnet
2018-11-10 10:54:01 +01:00
UdjinM6
5ecd91b054 Fix ps collateral/denom creation tx category confusion (#2430)
* fix ps collateral/denom creation tx confusion

* clarify the logic of detecting PrivateSendMakeCollaterals/PrivateSendCreateDenominations category
2018-11-10 10:53:29 +01:00
Alexander Block
0e9ad207ae
Update hardcoded seeds (#2429)
* Update seeds for mainnet

* Update seeds for testnet
2018-11-10 06:29:14 +01:00
PastaPastaPasta
42ee369b17 [Formatting] masternodelist.* clang+manual format (#2426)
* format

* clang suggested changes to be reverted

* Revert "clang suggested changes to be reverted"

This reverts commit 2c1e7744be1a2f6dd07772f222c656b2ebaa7718.
2018-11-09 09:48:51 +03:00
UdjinM6
da3e3db4dd
Fix sub-command help for masternode, gobject and protx rpcs (#2425)
Fixes #2424
2018-11-09 09:48:26 +03:00
thephez
adad3fcfe3 RPC: protx help corrections (#2422)
* RPC - Correct protx register_prepare help example

Use collateral hash and index instead of address

* RPC - Change protx register help ECDSA address to BLS operator key

* RPC - protx register_prepare help correction

Should direct to protx register help, not protx register_fund

* RPC - protx help typo
2018-11-08 20:03:50 +03:00
UdjinM6
262454791c
Add 5th denom, drop deprecated logic and bump min PS version (#2318)
* Bump PS
- add 5th denom (0.001)
- always allow OP_RETURN in PS collaterals
- collateral amount is always 1/10 of the smallest denom
- bump MIN_PRIVATESEND_PEER_PROTO_VERSION to 70211

* drop backward compatibility in dsa/dsq serialization

* Use GetSmallestDenomination() in GetCollateralAmount()

* bump MIN_PRIVATESEND_PEER_PROTO_VERSION to 70212
2018-11-07 10:39:25 +03:00
UdjinM6
e961c71343
Translations 201811 (#2249)
* update en source

* remove pt_BR

it's no longer present on Transifex

* Update existing translations

NOTE: there are some mismatches in zh_CN

dash_zh_CN.ts: Mismatch between 'Start &all' and '启动全部(%A)'
dash_zh_CN.ts: Mismatch between 'Open the %1 debug log file from the current data directory. This can take a few seconds for large log files.' and '打开当前目录中的调试日志文件。日志文件大的话可能要等上几秒钟。'
dash_zh_CN.ts: Mismatch between 'Too many %f denominations, removing.' and '太多面额化资金,正在移除。'
dash_zh_CN.ts: Mismatch between 'Initialization sanity check failed. %s is shutting down.' and '初始化完整性检查失败。% 即将关闭。'

* Add ar, ko, th

NOTE: there are 2 mismatches in ar

dash_ar.ts: Mismatch between '(of %1 GB needed)' and '(على 1% جيغابايت محتاجة)'
dash_ar.ts: Mismatch between 'Output debugging information (default: %u, supplying <category> is optional)' and 'معلومات تصحيح الخرج  <category>ا(ختياري)'

* update bg, it, ja, ko, nl, pl, th

* fix ru

* add tr

* fix
2018-11-07 10:39:06 +03:00
PastaPastaPasta
f0df5bffa6 Clang evo folder and activemasternode.* (#2418)
* clang + manual formatting

* clang activemasternode.*

* bump copyright

* weirdness correction
2018-11-06 11:54:23 +03:00
PastaPastaPasta
98bdf35f9d bump PS copyright (#2417) 2018-11-05 12:29:33 +03:00
PastaPastaPasta
e9bb822c10 Clang format PrivateSend files (#2373) 2018-11-05 12:29:07 +03:00
UdjinM6
1d56dffdaf
Unify help display logic for various "complex" rpc commands (#2415)
* Unify help display logic for various "complex" rpc commands

* add [[ noreturn ]] attribute and drop dummy returns
2018-11-05 12:28:38 +03:00
Alexander Block
9da9d575aa Allow collaterals for non-DIP3 MNs which were created after DIP3/BIP9 activation (#2412)
* Remove reference to now removed "protocolVersion"

* Allow to use non-DIP3 collaterals after DIP3 activation

This removes a rule which only made sense when we assumed all collaterals
would remain in DIP3 ProRegTx transactions after DIP3 activation.

As we allow to refer external collaterals now, this rule should vanish as
well.

* Sleep in case block time is ahead of real time

See comment. This was not a problem before as we had enough time passed
between the last block that caused this and the start-alias call.
Now we added another start-alias call which is directly after we generated
many blocks.
2018-11-04 14:55:50 +03:00
UdjinM6
23f169c44a
Drop custom PS logic for guessing fees etc. from SelectCoins (#2371)
* drop most of custom PS logic from SelectCoins and inject it into regular flow (i.e. SelectCoinsMinConf)

* different priority for different denoms

* move CompareByPriority higher

* update comment

Co-Authored-By: UdjinM6 <udjinm6@gmail.com>
2018-11-04 14:55:16 +03:00
thephez
02442673d2 Trivial: Correct protx diff RPC help (#2410) 2018-11-02 11:18:05 +03:00
Alexander Block
5e829a3b1b Update Chia bls-signature to latest version (#2409)
Brings in:
1. https://github.com/Chia-Network/bls-signatures/pull/41
2. https://github.com/Chia-Network/bls-signatures/pull/46
3. A few commits from https://github.com/codablock/bls-signatures are now
   merged into upstream.

This removes the need for manual initialization of the BLS library. This is
now done internally and in a thread-safe way.

Also switch to using tags instead of raw commit hashes. Makes testing
easier and also removes the risk of Github deleting commits due to
cleanup jobs.
2018-11-02 00:59:11 +03:00
thephez
1f56600c4b Trivial: Protx operator reward clarification (#2407)
Add decimal places to clarify:
1. Non-integers are valid (e.g. 3.25)
2. Granularity - anything beyond x.xx is rounded (e.g. 3.259 -> 3.26)

This is due to DIP3 allowing values 0-10000 for operator reward (1/10000
= 0.01%)
2018-11-02 00:58:36 +03:00
UdjinM6
7e8f07bb92
A couple of fixes for shutdown sequence (#2406)
* 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
2018-11-02 00:58:17 +03:00
UdjinM6
9c455caea9
A couple of fixes for init steps (#2405)
* fLiteMode should be set via GetBoolArg before first usage

Also move related stuff to be closer to each other

* Cleanup Dash-specific init steps

* Move deterministicMNManager creation slightly higher for consistensy
2018-11-02 00:58:01 +03:00
thephez
7011fec1b4 RPC: Add help details for the bls RPC (#2403)
* RPC: Add help details for the bls RPC

* RPC: Refactor to match gobject RPC behavior

* RPC: Use command instead of strCommand for consistency within file

* RPC: BLS help cleanup

* RCP: Remove leading underscore on bls_help
2018-11-02 00:57:43 +03:00
Alexander Block
30a2b283a8 Sign ProRegTx collaterals with a string message instead of payload hash, split protx register into prepare/submit (#2395) 2018-11-02 00:57:10 +03:00
Alexander Block
70eb710b12
Undefine DOUBLE after include Chia BLS headers (#2400)
These cause compilation errors on some platforms.
Observed this when I tried to cross compile win32
locally on a Debian Stretch machine.
2018-10-31 10:58:02 +01:00
Alexander Block
052af81b4b
Ensure correct order of destruction for BLS secure allocator (#2401)
Uses the same trick as LockedPoolManager::Instance()
2018-10-31 10:57:14 +01:00
UdjinM6
c6cf4d9a47
Relay txes through MN network faster than through regular nodes (#2397)
* Half the delay for relaying txes to Masternode outbound peers comparing to regular ones

* No delay for relaying txes if our node is a Masternode
2018-10-30 13:00:04 +03:00
UdjinM6
4a78b161ff
PrivateSend spending txes should have "outgoing" icon on overview screen (#2396) 2018-10-30 12:59:50 +03:00
Anton Suprunchuk
50f133ad0a Add merkle tree and coinbase transaction to the protx diff rpc command (#2392) 2018-10-30 12:59:32 +03:00
Alexander Block
e34701295d Fix crash when deterministic MN list is empty and keep paying superblocks in this case (#2387)
* Don't crash when spork15 is enabled but no MNs have been registered

* Don't bail out when no masternode payee is found

We should pay superblocks even if no masternode payee is found.

* Add missing newline to LogPrint call

* Handle review comments
2018-10-30 12:59:03 +03:00
Alexander Block
9eb9c99d59 Bump version to 0.13.0 (#2386) 2018-10-26 19:43:08 +03:00
Alexander Block
28a6007a40 Prepare DIP3 for testnet and reuse DIP3 deployment for autoix deployment (#2389)
* Add BIP9 parameters for DIP3 deployment on testnet

* Remove autoix BIP9 deployment and reuse DIP3 deployment

* Add BIP9CheckMasternodesUpgraded to chain params

This controls if miners should check for upgraded masternodes first before
adding BIP9 bits to the block version. This only makes sense in network
where masternodes are up and running before BIP9 activation, which is not
necessarely the case in regtest and devnet.

Also refactor ComputeBlockVersion to use fCheckMasternodesUpgraded instead
of the inverse fAssumeMasternodeIsUpgraded. It is set to false by default
and only set to true in CreateNewBlock.

* Check for upgraded masternodes for DIP3 activation (only mainnet and testnet)

* Bump PROTOCOL_VERSION and DMN_PROTO_VERSION

We probably have nodes with 70211 already running on testnet.
2018-10-26 19:42:52 +03:00
Alexander Block
e66c4e184f Don't revert to INV based block announcements when the previous block is the devnet genesis block (#2388)
Assume that the other node already has the previous block if it matches
the devnet genesis block.
2018-10-26 19:42:28 +03:00
Alexander Block
b5142ee2ce Implement RemoveAskFor to indicate that we're not interested in an item anymore (#2384)
* 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
2018-10-26 19:42:11 +03:00
Alexander Block
d1debfc267
Implement mt_pooled_secure_allocator and use it for BLS secure allocation (#2375)
* Add pooled_secure_allocator and mt_pooled_secure_allocator

* Use mt_pooled_secure_allocator for BLS secure allocation

The old solution relied on thread-local-storage and was thus not compatible
to libc6 2.11 (which is the minimum supported version we use).

Also, the old solution turned out to be erroneous. It would have crashed
or memory leaked when ownership of CBLSPrivateKey would be handled over
to another thread.

* Add new header files to Makefile.am

* Fix copyright headers of new files

* Bail out early from secure deallocation

* Clean up global BLS keys when shutting down
2018-10-26 07:04:22 +02:00
Alexander Block
733cd95123
Remove global fDIP0003ActiveAtTip and fix wrong use of VersionBitsState in auto IX (#2380)
* Remove global fDIP0003ActiveAtTip flag and always use VersionBitsState

fDIP0003ActiveAtTip was used much more often when introduced but turned out
to be not very useful in most places. Always use VersionBitsState now.

* Fix wrong use of VersionBitsState auto IX

* Make sure isAutoLockBip9Active flag is reset in case of chain reorgs
2018-10-26 07:03:33 +02:00
Alexander Block
25b6dae9ea
Code style and RPC help string cleanups for DIP2/DIP3 (#2379)
* Fix code style in DIP2/DIP3 code (single statement ifs with curly braces)

* Fix DIP3 RPC help strings

* Handle review comments

* Handle more review comments
2018-10-26 07:03:14 +02:00
PastaPastaPasta
6433a944a0 [Trivial] typo Groupped -> Grouped (#2374) 2018-10-25 17:32:08 +03:00
PastaPastaPasta
59932401bb Change internal references of Darksend to PrivateSend (#2372)
* Change all references to darksend to privatesend

* comment references to darksend
2018-10-25 17:31:32 +03:00
Alexander Block
e3df910822 Allow referencing other TX outputs for ProRegTx collateral (#2366)
* Pass CCoinsView reference to special TX handling methods

* Allow referencing other TX outputs for ProRegTx collateral

* Remove "collateralAmount" from "protx register"

* Rename "protx register" to "protx fund_register"

* Remove UpdateSpork15Value from CDeterministicMNManager

Was not used/implemented anymore

* Lock masternode collaterals after chain/DIP3 is fully initialized

Otherwise detection of collaterals does not work.

* Implement new "protx register" RPC which uses existing collaterals

* Remove "masternode info" RPC

It is not consistent with other "masternode" RPCs anymore as it requires
the ProRegTx hash while all other RPCs work with the collateral.

* Load sporks from disk cache before initializing the chain

Otherwise spork15 is not loaded when we check it for the first time.

* Implement "protx info" RPC

* Use "protx info" instead of "masternode info" in DIP3 tests

* Test external collaterals for ProTx

* Handle review comments

* Don't pass CCoinView reference when it's not used

* Revert "Pass CCoinsView reference to special TX handling methods"

This reverts commit 28688724e112c8fe18e44aef055768dbbc068d7d.

* Use GetUTXOCoin instead of now removed coinsView

Also remove collateral height check as GetUTXOCoin only returns confirmed
coins.

* Add conflict handling for external collaterals to mempool

* Handle review comments (squashed Github suggestions)

Co-Authored-By: codablock <ablock84@gmail.com>
2018-10-25 17:29:50 +03:00
thephez
0ad2906c54 Clarify addlocked description in getbalance RPC (#2364)
* Trivial - Typo in getbalance RPC

* Clarify addlocked description in getbalance RPC

Co-Authored-By: thephez <thephez@gmail.com>
2018-10-25 17:29:00 +03:00
Alexander Block
e3046adb3e
Clear devNetParams and mimic behavior of other param types (#2367)
* Clear devNetParams and mimic behavior of other param types

Mainnet, testnet and regtest params are global and thus zero initialized,
we should mimic the same for devnet params.

Not doing so results in all kinds of issues on devnet.

* Remove unnecessary <string.h> includein chainparamsbase.cpp
2018-10-25 09:17:37 +02:00
thephez
fdfb077428 Update ProRegTx serialization order (#2378)
Makes consistent with both DIP-3 and the order above
2018-10-25 09:17:02 +02:00
Alexander Block
1c25356ff8
Allow to use low difficulty and higher block rewards for devnet (#2369)
* Allow to use low difficulty and higher block rewards for devnet

Configurable through -minimumdifficultyblocks, -highsubsidyblocks and -highsubsidyfactor

* Fix review comments

* Handle review comments
2018-10-25 09:16:38 +02:00
Alexander Block
53e12b7b40
Don't bail out from ProcessMasternodeConnections in regtest (#2368)
We actually do masternode testing now and we will rely on this behavior
2018-10-24 13:31:45 +02:00
Alexander Block
3c9237aa40
Use VersionBitsState instead of VersionBitsTipState to avoid cs_main lock (#2370)
It wasn't even locked, which causes AssertLockHeld to fail.
2018-10-24 13:31:22 +02:00
PastaPastaPasta
c4351fd328 revert 737, DEFAULT_TRANSACTION_MAXFEE = 0.1 * COIN (#2362) 2018-10-23 14:16:17 +03:00
Alexander Block
eaa856eb78 Remove nProtocolVersion and add mode/type fields to DIP3 (#2358)
* Remove nProtocolVersion fields from deterministic masternode lists

This field was part of my initial implementation from DIP3. One of the last
changes of DIP3 was then to remove this field, which I did not bring back
into code yet. This commit removes it now.

We use PROTOCOL_VERSION now in cases were compatibility in the the pre-DIP3
list is needed.

* Add type and mode fields in DIP3 special TXs

These were added to DIP3 but not in-code yet.

* Add DMN_PROTO_VERSION
2018-10-23 14:15:38 +03:00
Alexander Block
c9d2745188 Use BLS keys for the DIP3 operator key (#2352)
* Use BLS keys for operator keys

* Add "bls generate" RPC to generate BLS keys

* Use unique_ptr to store blsKeyOperator and blsPubKeyOperator

Needed because the Chia BLS library crashes when keys are created before
the library is initialized, even if keys are not used. This is the case here
as we have static instances here.

* Remove unnecessary CheckSignature calls

This seems to be some garbage I left in by mistake.

* Fixed review comments

* Fix rpc help for operator keys

All keys that are used as examples are random. None of the secret keys
belongs to any of the public keys.

* Use .GetHash() instead of ::SerializeHash() for BLS pubkeys in txmempool.cpp

* Rename mapProTxBlsPubKeys to mapProTxBlsPubKeyHashes
2018-10-21 22:45:16 +03:00
Alexander Block
7b76bbb575 Update Chia BLS libs to latest master (#2357)
* Undefine ERROR before including chia BLS stuff to avoid warnings

* Update Chia BLS libs to latest master
2018-10-20 17:08:54 +03:00
Alexander Block
e2de632f8c Move handling of size != SerSize into SetBuf/GetBuf (#2356)
* Move handling of size >= SerSize into SetBuf/GetBuf

Instead of performing this in the individual implementations of
InternalSetBuf and InternalGetBuf

* Assert that size if GetBuf is always SerSize
2018-10-20 17:08:40 +03:00
UdjinM6
90ad75911a
Fix auto-IS and tests (#2331)
* fix CTxLockRequest::GetMinFee()

* Force regular IS txes to include MIN_FEE * n_inputs fee on creation regardless of auto-IS status

* set_autoix_spork_state should bump mocked time

* make sure IS fee matches the expected one

* turn off spork16 and test all types of txes again
2018-10-15 14:59:57 +03:00
UdjinM6
f7b0b57596
Pick rounds with the most inputs available to mix first (#2278)
* Alternative solution: pick rounds with the most inputs available to mix first

* randomly skip some inputs when we have at least one of this denom already

* More randomization in PrepareDenominate

* fix `vecSteps[nBit] >= 1 ?` and adjust speed/privacy ratio for more speed i.e. `GetRandInt(5) == 0`

* fix typos

* no comments
2018-10-15 14:58:47 +03:00
UdjinM6
6867827a53
Merge pull request #2296 from codablock/pr_blsstuff
Add BLS libraries, wrappers, helpers and benchmarks
2018-10-15 14:53:16 +03:00
Alexander Block
4641916984 Review fixes 2018-10-12 20:53:57 +02:00
Alexander Block
9c8e4ac76b Move bls stuff from crypto/ to bls/ 2018-10-12 19:39:26 +02:00
Spencer Lievens
43e757bee5 Amend SERIALIZATION_VERSION_STRING string for spork cache (#2339) 2018-10-11 17:34:52 +03:00
Spencer Lievens
bed1ded8be Remove duplicated check (#2336) 2018-10-11 17:34:03 +03:00
Nathan Marley
89f744d064 pack of small cleanup fixes / optimizations (#2334)
* 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.
2018-10-11 17:33:48 +03:00
gladcow
9603c52900 Trivial: Codestyle fixes in InstantSend code (#2332) 2018-10-11 17:33:22 +03:00
UdjinM6
727e940c0c
Fix recently introduced PS bugs (#2330)
* backward compatibility fix for dsq

* fix StartNewQueue
2018-10-11 17:32:51 +03:00
PastaPastaPasta
8deb8e90f2 Modernize Gov Methods (#2326)
* governance.* formatting and copyright bump

* manual changes gov.cpp

* Modernize ConvertVoteOutcome, ConvertSignalToString and  ConvertOutcomeToString

* move breaks

* add braces instead of inlining

* Revert "Modernize ConvertVoteOutcome, ConvertSignalToString and  ConvertOutcomeToString"

This reverts commit 41bc3d3d863076cd5e6b10ca7706100963cd51b0.

* Modernize ConvertVoteOutcome, ConvertSignalToString and  ConvertOutcomeToString

* fix bugs

* make "NONE" lowercase

* revert merge error

* @InhumanPerfection comments fix

* whoops
2018-10-11 17:32:31 +03:00
UdjinM6
b3fc236af5
Fix mnodeman.cs vs cs_vPendingMasternodes vs cs_main deadlock (#2200)
Decouple cs_vPendingMasternodes from mnodeman.cs to fix the issue. Also drop deprecated/unused stuff in mnv preparation while at it.
2018-10-11 17:32:05 +03:00
Alexander Block
80fd096b07 Add ECDSA benchmarks 2018-10-10 08:49:10 +02:00
Alexander Block
78675d9bb0 Add BLS and DKG benchmarks 2018-10-10 08:49:10 +02:00
Alexander Block
3ee27c1681 Add highly parallelized worker/helper for BLS/DKG calculations 2018-10-10 08:49:10 +02:00
Alexander Block
aa3b0aa8a4 Add simple helpers/wrappers for BLS+AES based integrated encryption schemes (IES) 2018-10-10 08:49:10 +02:00
Alexander Block
9ccf6f584d Implement wrappers around Chia BLS lib
# Conflicts:
#	configure.ac
2018-10-10 08:49:09 +02:00
Alexander Block
b0d0093d73 Add helper to rename all threads of a ctpl::thread_pool 2018-10-04 16:46:48 +02:00
Alexander Block
47a1622552 Add ctpl header only library
A simple C++ thread pool library

https://github.com/vit-vit/CTPL
Commit: 437e135dbd94eb65b45533d9ce8ee28b5bd37b6d
2018-10-04 16:46:48 +02:00
Alexander Block
eaef902025 Don't use boost range adaptors in CDeterministicMNList (#2327)
These cause crashes when used in for loops. Reason is very likely that
temporary CDeterministicMNList objects are destroyed before entering the
loop while the adaptors rely on these objects.

Discovered in one of our devnets while calling "protx list"
2018-10-02 12:03:05 +03:00
Nathan Marley
07208a4ae2 document spork system with doxygen comments (#2301)
This is an initial shot at an on-going WIP, which will add documentation via
Doxygen comments to (especially) Dash-specific features in the codebase.
2018-10-02 12:02:27 +03:00
gladcow
f7ab6c469c M-of-N-like sporks (#2288)
* support set of keys to sign spork

* several addresses support in -sporkkey

* tests for multykey sporks

* command line option -minsporkkeys

* make spork active only after given number of signers

* use signature in spork hash calculation

* test for new and old spork messages interaction

* add multikeyspork.py to integration tests

* change test to have ability to distinguish default spork value

* require min spork keys number to be more than the half of the common spork keys number

* calc current spork value with majority of signers

* set test nodes time in integration test

* extract keyid from signed spork message directly

* change -sporkaddr option syntax to process several addresses

* codestyle fixes

* fix test comments

* codestyle fixes

* simplify CSporkManager::SporkValueIsActive

* Calc signature hash without signature field

* do not restore pubkey ids from cach

* Calc different keyids to check signature because not all sporks can be synced at moment

* codestyle fixes

* Fix CSporkManager::CheckAndRemove to use several keys

* codestyle fixes

* Correct processing of not actual spork6 value with GetSignerKeyID
2018-09-30 20:01:33 +03:00
Nathan Marley
a5aca049dd rename vars in mnsync to make more sense (#2308)
* rename vars in mnsync to make more sense

nRequestedMasternodeAssets -> nCurrentAsset
nRequestedMasternodeAttempt -> nPeerCount

* rename var to nTriedPeerCount
2018-09-30 14:02:52 +03:00
PastaPastaPasta
ee6a5a33b7 Gov cleanup + copyright bump (#2324)
* governance.* formatting and copyright bump

* manual changes gov.cpp

* clang and copyright bump

* gov-exc.h clang and copyright bump

* gov-obj.* clang and copyright bump

* gov-val.* clang and copyright bump

* gov-vote.* clang and copyright bump

* gov-votedb.* clang and copyright bump

* fix some weirdness

* Modernize ConvertVoteOutcome, ConvertSignalToString and  ConvertOutcomeToString

* add braces

* move breaks

* add braces instead of inlining

* Revert "Modernize ConvertVoteOutcome, ConvertSignalToString and  ConvertOutcomeToString"

This reverts commit 41bc3d3d863076cd5e6b10ca7706100963cd51b0.

* drop unused function
2018-09-28 10:56:17 +03:00
UdjinM6
bd8c54d12e
A bit more verbosity for some critical errors (#2316) 2018-09-28 10:55:30 +03:00
UdjinM6
a4ff2a19a7
Fix some warnings and do a couple of other trivial cleanups (#2315)
* Fix various warnings

* A couple of trivial cleanups

* fix 2320
2018-09-28 10:55:11 +03:00
gladcow
5454bea377 Automatic InstantSend locks for "simple" transactions (#2140)
* add locktransaction rpc call

* Remove special instantsend fee for simple transactions

* Function to check if trx is simple enough to be autolocked

* Automatic lock for all received from peers simple trxes

If we get a new transaction with CInv message and it is "simple" and
is accepted in mempool, we initiate its lock. We don't lock orphan trxes
that accepted in mempool after this trx because they are locked by other
peers.

* Automatically lock simple trxes in wallet

* protocol bump for InstantSend without special fee

* Add function to detect used mempool share

* Mempool threshold for auto IX locks

* Add SPORK_16_INSTANTSEND_AUTOLOCKS spork

* Make autolocks active only when spork SPORK_16_INSTANTSEND_AUTOLOCKS is active

* BIP9 autolocks activation

* revert increasing min peer protocol version for mn rank

* move IsTrxSimple check to CTxLockRequest class

* make MAX_INPUTS_FOR_AUTO_IX private member of CTxLockRequest class

* make AUTO_IX_MEMPOOL_THRESHOLD private member of CInstantSend class

* remove locktransaction RPC call

* tests for automatic IS locks

* fix mempool threshod calculation

* bump mocktime in activate_autoix_bip9

* set node times

* no need to spam the node with gettransaction rpc requests that often

* use `spork active` instead of leaking spork logic into tests

* codestyle fixes

* add test description in comments

* fix typo

* sync test nodes more often during BIP9 activation

* Use 4th bit in BIP9 activation

* Fix comments according codestyle guide

* Call AcceptLockRequest and Vote at the first node creating autoix lock

* fix mempool used memory calculation

* rallback not necessary change in CWallet::CreateTransaction

* test for stopping autolocks for full mempool

* Inject "simple autolockable" txes into txlockrequest logic
2018-09-26 17:17:47 +03:00
UdjinM6
547b81dd0d
log gobject prepare params (#2317) 2018-09-26 17:16:40 +03:00
UdjinM6
d932d2c4e1
Add instantlock field to getrawtransaction rpc output (#2314) 2018-09-26 17:16:22 +03:00
UdjinM6
c2958733e6
CSporkManager::Clear() should not alter sporkPubKeyID and sporkPrivKey (#2313) 2018-09-26 17:15:58 +03:00
UdjinM6
8c0dca2826
Add versioning to spork cache (#2312) 2018-09-26 17:15:02 +03:00
Nathan Marley
2c1a17909e cleanup: remove unused vars, includes, functions (#2306) 2018-09-20 15:41:16 +03:00
UdjinM6
85a958a360
Drop dummy copy constructors in CPrivateSend*Session (#2305)
* Switch vecSessions to deque and drop dummy copy constructors

* s/vec/deq/ for PS vecSessions/cs_vecsessions
2018-09-20 15:40:43 +03:00
PastaPastaPasta
3d48824b48 Update .clang-format to more accurately show the actual style (#2299)
* updated clang formatting

* add `BreakConstructorInitializers: AfterColon`

* revert column limit change

* AlignConsecutiveAssignments: true

* Revert "AlignConsecutiveAssignments: true"

This reverts commit fc4a4a54f7b0d9e725179a3ee1bf0808c08b0da6.
2018-09-20 15:40:00 +03:00
PastaPastaPasta
8ea40102c0 Remove leftover RBF code from BTC (#2297)
* Remove leftover RBF code from BTC

* remove rbf #include

* remove rbf in rpc-tests

* removes replace-by-fee.py

* remove help text related to rbf

* remove comment text relating to rbf

* remove "-mempoolreplacement" cli option

* Remove (effectively dead) RBF code which would never have been called anyway and some assosiated variables

* since `setConflicts` is always empty, this is dead code

* Since we don't have RBF, don't have to do this check. Also, since `setConflicts` is always empty this is dead code

* removes unneccesary if as it will always be true

* remove unused `set<uint256> setConflicts`

* Removes replacement of conflicting txs, as conflicting txs are never accepted

* removes RBF from `validForFeeEstimation`

* removes (probably) unnecessary lock

* remove replacing part of the AcceptToMemoryPool and AcceptToMemoryPoolWIthTime

* fixes err in ps.cpp, didn't remove arg

* RBF in net_processing.cpp

* remove arg in ps-server.cpp

* removes another arg in PS code

* removes rawtx.c AcceptToMemoryPool arg

* removes arg in txvalidationcache_tests.cpp

* remove extra args

* forgot an arg

* fix typo in 82898b0

* remove unused fEnableReplacement in validation.h

* remove the removal reason REPLACED in txmempool.h

* removed unused variable

* comment typo
2018-09-20 15:39:34 +03:00
UdjinM6
3cc4ac1376
Fix crash bug with duplicate inputs within a transaction (#2302)
* Fix crash bug with duplicate inputs within a transaction

Introduced by #9049

* Remove redundant parameter fCheckDuplicateInputs from CheckTransaction
2018-09-19 15:04:35 +03:00
UdjinM6
31759a44d6
Fix tx inv throughput (#2300)
Bumps 4x per 1MB due to 4x smaller block times and accounts for blocks >1MB as in https://reviews.bitcoinabc.org/rABC4ae37d54ba3db21609ef8b704ed7f4377b9cece7
2018-09-19 15:04:03 +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
UdjinM6
c6a0c55417
A couple of small fixes for mixing collaterals (#2294)
* No reasons to create mixing collaterals if we can't create denoms to mix

* Include non-anonymizable inputs when trying to make mixing collaterals
2018-09-15 13:19:00 +03:00
UdjinM6
d192d642f6
Move heavy coin selection out of the loop in SubmitDenominate (#2274)
* extend CTxOut constructor

* Move heavy coin selection out of the loop in SubmitDenominate
2018-09-15 13:18:32 +03:00
Alexander Block
016681cd38 Add support for serialization of bitsets and tuples (#2293)
* Add serialization support for dynamic and fixed size bitsets

* Support serialization of std::tuple
2018-09-14 18:53:49 +03:00
Alexander Block
9d90b4fa47 Honor filterInventoryKnown for non-tx/non-block items (#2292) 2018-09-14 18:53:26 +03:00
Alexander Block
6adc236d0e Only use dataDir in CEvoDB when not in-memory (#2291) 2018-09-14 18:53:09 +03:00
Alexander Block
8a878bfcfd Call InitializeCurrentBlockTip and activeMasternodeManager->Init after importing has finished (#2286)
While importing, IsInitialBlockDownload always returns true, meaning that
the call to UpdatedBlockTip will also receive true as fInitialDownload.

UpdatedBlockTip is never called again unless a block is mined.
Mining of new blocks in regtest however only starts after mnsync has
finished, which will never happen as it waits for the next call to
UpdatedBlockTip.
2018-09-12 14:13:17 +03:00
Alexander Block
2a95dd30c5 Fix locking issues in DIP3 unit tests (#2285)
* Don't use GetTransaction in CheckProUpRegTx

GetTransaction locks mempool.cs internally. This brings messes up the locking
order of cs_main, mempool.cs and CCheckQueue::ControlMutex.

* Lock cs_main in TestChainSetup::CreateBlock when updating CbTx
2018-09-12 14:13:00 +03:00
PastaPastaPasta
1e74bcace9 [ZMQ] Notify when an IS double spend is attempted (#2262)
* Implement IS Double spend notifications in zmq

* copy/paste error

* typo

* Send both conflicting and conflicts against as ZMQ notifications

* CTransaction based not hash based

* @UdjinM6 requested changes
2018-09-12 14:12:44 +03:00
UdjinM6
28e0476f4c
Squash two logic branches in SubmitDenominate into one (#2270) 2018-09-11 21:33:06 +03:00
Alexander Block
6b3d650280 After DIP3 activation, allow voting with voting keys stored in your wallet (#2281)
* Implement temporary solution to allow voting with owner keys from your wallet

Will later be removed and properly reimplemented when cleaning up
legacy masternode code

* When MN keys from masternode.conf are used, only allow voting when they match with keyIDVoting
2018-09-11 17:33:07 +03:00
Alexander Block
47ca06ab33 DIP3 integration tests (#2280)
* Implement dip3 integration tests

This tests the full upgrade path from legacy MNs to deterministic MNs

* Invoke UpdatedBlockTip signal when invalidateblock RPC is called

Currently, UpdatedBlockTip would only be called if the invalidation resulted
in another chain becoming the longest one. This is inconsistent behavior
and was spotted when running dip3 integration tests.
2018-09-11 17:32:45 +03:00
UdjinM6
9b6eb4765f
Include inputs with max rounds in SelectCoinsDark/SelectCoinsByDenominations (#2277) 2018-09-11 17:32:18 +03:00
UdjinM6
55d7bb9009
Add an option to disable popups for PS mixing txes (#2272)
* Add an option to disable popups for PS mixing txes

* capital S
2018-09-11 17:31:46 +03:00
UdjinM6
38ccfef3be
Identify PS collateral payments in transaction list a bit more accurate (#2271)
This have to be updated due to new rules for PS collateral - we allow OP_RETURN outputs and "non-exact" inputs (1x<=X<2x) now.
2018-09-11 17:31:18 +03:00
UdjinM6
737353c84c
Fix IsBlockValueValid/IsOldBudgetBlockValueValid (#2276) 2018-09-10 17:12:32 +03:00
Alexander Block
c3d6b06518 Remove redundant check for unknown commands in masternode RPC (#2279) 2018-09-10 13:23:42 +03:00
Alexander Block
bc7924d418 Add unit tests for DIP3 and DIP4 2018-09-05 18:40:53 +02:00
Alexander Block
d653ace99e Update CbTx in TestChainSetup
We need to update the CbTx's merkle root for the masternode list here as
tests might add transactions into a block which cause the list to change.
2018-09-05 18:40:53 +02:00
Alexander Block
9674be8f96 Refactor TestChain100Setup to allow different test chain setups
Allows testing of features which depend on BIP9 deployments
2018-09-05 18:40:53 +02:00
UdjinM6
ad31dbbd73
Add more variance to coin selection in PS mixing (#2261)
* Lean towards "from high to low" branch but still mix via "from low to high" one someties

* Try to mix non-duplicate txids only

* Lean towards edges but still mix starting from the middle sometimes

If failed when started from the middle try mixing from the edges right away.

Note: liqudity providers always start from 0

* map -> set

* Refactor nRoundStart calculations
2018-09-05 19:35:33 +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
d8247dfffa Use refactored payment logic when spork15 is active
Related to https://github.com/dashpay/dash/pull/2237
2018-09-05 14:06:50 +02:00
Alexander Block
60002b7ddb Payout and enforce operator reward payments 2018-09-05 14:06:50 +02:00
Alexander Block
2c481f0f86 Implement deterministic version of CMasternodePayments::IsScheduled
Needed for privatesend when choosing masternodes
2018-09-05 14:06:50 +02:00
Alexander Block
44706dc88a Implement projection of MN reward winners in "masternode winners" 2018-09-05 14:06:50 +02:00
Alexander Block
e6b699bc26 Enforce MN and superblock payments in same block
1. Enforce payment to masternodes in IsBlockPayeeValid even if superblocks
   are triggered. This new rule only gets activated when spork15 activates.

2. Always enforce masternode payments when spork15 is activated and ignore
   spork8 in that case. spork8 can be removed after spork15 activation
   and hardening of the spork15 height into consensus params.
2018-09-05 14:06:31 +02:00
Alexander Block
19fbf8ab76 Move cs_main lock from CMasternode::UpdateLastPaid to CMasternodeMan
Ensure correct locking order to fix deadlock.
2018-09-05 14:06:31 +02:00
Alexander Block
dc7292afa9 Implement new MN payments logic and add compatibility code 2018-09-05 14:06:31 +02:00
PastaPastaPasta
fded838c9d RPC folder: Cleaned up brackets on if, while, for, BOOST_FOREACH. Some whitespace fixes (#2257)
* Cleaned up brackets on if, while, for, BOOST_FOREACH. Some whitespace fixes

* gov, mn and mining cleanup

* Revert "Cleaned up brackets on if, while, for, BOOST_FOREACH. Some whitespace fixes"

This reverts commit 4a2a1b0645c5195025d0c7e6dad2e01a93efbfd6.

* Revert "gov, mn and mining cleanup"

This reverts commit 7cb91aabc67df0ab60db4ee84e3aaaf6cf6b7881.

* cleanup some dash specific

* "if(" -> "if ("     "for(" -> "for (" + corrected some else blocks
2018-09-05 15:04:24 +03:00
UdjinM6
8c9cb29092
Revert 2075 (#2259)
* Revert "Require all participants to submit equal number of inputs (#2075)"

This reverts commit 7ac4b972ab.

* Backward compatibility for nInputCount
2018-09-05 14:19:03 +03:00
UdjinM6
b164bcc7a5
Split PS into Manager and Session and allow running multiple mixing sessions in parallel (client side) (#2203)
* Split PS into Manager and Session

* Adjust log messages accordingly

* add -privatesendsessions cmd-line option

* address review comments

* bump MAX_OUTBOUND_MASTERNODE_CONNECTIONS to 30

+10 for parallel mixing

* protect vecSessions

* constructors

* Rewrite CMasternodeMan::ProcessMasternodeConnections() to use CPrivateSendClientManager::GetMixingMasternodesInfo().

This should solve potential deadlock cs_vecqueue vs cs_vNodes.

* Drop no longer used IsMixingMasternode()

* lock cs_wallet when mixing uses balance related functions
2018-09-04 13:54:59 +03:00
Alexander Block
d4530eb7d5 Put all masternodes in MASTERNODE_ENABLED state when spork15 is active 2018-09-03 13:31:40 +02:00
Alexander Block
31b4f83543 Forbid starting of legacy masternodes with non matching ProTx collateral values
If the masternode is already upgraded to ProTx, it's address and key
must match with the started masternode.
2018-09-03 13:31:40 +02:00
Alexander Block
2d8f1244cf Implement 'masternode info <proTxHash>' RPC 2018-09-03 13:31:40 +02:00
Alexander Block
e2a9dbbce1 Better "masternode status" for deterministic masternodes 2018-09-03 13:31:40 +02:00
Alexander Block
50ac6fb3aa Throw exception when trying to invoke start-xxx RPC in deterministic mode 2018-09-03 13:31:40 +02:00
Alexander Block
5050a92053 Add compatibility code for FindRandomNotInVec and GetMasternodeScores 2018-09-03 13:31:40 +02:00
Alexander Block
cc73422f88 Add methods to add/remove (non-)deterministic MNs 2018-09-03 13:31:40 +02:00
Alexander Block
7d14566bcd Add compatibility code to CMasternodeMan so that old code is still compatible
...when deterministic MNs are activated.
2018-09-03 13:31:40 +02:00
Alexander Block
27e8b48a60 Stop executing legacy MN list code when spork 15 is activated 2018-09-03 13:31:40 +02:00
Alexander Block
6764dafece Skip initial masternode list sync if spork 15 is active 2018-09-03 13:31:40 +02:00
Alexander Block
d90b139967 Implement CActiveDeterministicMasternodeManager 2018-09-03 13:31:40 +02:00
UdjinM6
a5e65aa373
Erase mnListCache entry on UndoBlock (#2254) 2018-09-03 13:18:20 +03:00
Alexander Block
88e7888de9 Try using cache in GetListForBlock before reading from disk (#2253)
* Try using cache in GetListForBlock before reading from disk

* Use std::list for vecDiff
2018-09-03 13:17:41 +03:00
Alexander Block
fced9a4b86 Ban peers that send us MNLISTDIFF messages
These are only meant to be sent to SPV clients
2018-09-03 10:46:52 +02:00
Alexander Block
d3ac86206c Implement GETMNLISTDIFF and MNLISTDIFF P2P messages
Also add "protx diff" RPC
2018-09-03 10:46:52 +02:00
Alexander Block
bcc0719578 Calculate and enforce DIP4 masternodes merkle root in CbTx
Also add "coinbase_payload" field to block templates
2018-09-03 10:46:51 +02:00
Alexander Block
0a086898f5 Implement and enforce CbTx with correct block height and deprecate BIP34 2018-09-03 10:46:40 +02:00
Alexander Block
58aa813649 Implement "protx revoke" RPC 2018-08-31 17:06:33 +02:00
Alexander Block
9653af2f30 Classes, validation and update logic for CProUpRevTX 2018-08-31 17:06:33 +02:00
Alexander Block
185416b970 Implement "protx update_registrar" RPC 2018-08-31 17:06:24 +02:00
Alexander Block
1c68d11077 Classes, validation and update logic for CProUpRegTX 2018-08-31 17:06:24 +02:00
Alexander Block
32951f795c Implement "protx update_service" RPC 2018-08-31 17:06:24 +02:00
Alexander Block
8aca3b0404 Also check duplicate addresses for CProUpServTX in CTxMemPool 2018-08-31 17:06:24 +02:00
Alexander Block
923fd67395 Implement CProUpServTx logic in CDeterministicMNManager 2018-08-31 17:06:24 +02:00
Alexander Block
6ec0d7aea5 Classes and basic validation of ProUpServTx 2018-08-31 17:06:24 +02:00
Alexander Block
255403e927 Include proTx data in json formatted transactions 2018-08-31 15:33:09 +02: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
5295c78cca Fix typo in "penalty" (#2247) 2018-08-31 12:33:37 +03:00
Alexander Block
c566ce75d9 Update copyright in specialtx.h/cpp 2018-08-30 19:47:48 +02:00
Alexander Block
5e3abeca24 Implement "protx list" RPC 2018-08-30 19:47:48 +02:00
Alexander Block
2c172873aa Don't allow non-ProTx masternode collaterals after DIP3 activation 2018-08-30 19:47:48 +02:00
Alexander Block
5461e92bf4 Add spork to control deterministic MN lists activation 2018-08-30 19:47:48 +02:00
Alexander Block
9e8a867149 Implementation of deterministic MNs list 2018-08-30 19:47:48 +02:00
Alexander Block
76fd308947 Automatically lock ProTx collaterals when TX is added/loaded to wallet
Avoid accidential spending of ProTx collaterals.
2018-08-30 19:47:38 +02:00
Alexander Block
cdd723ede6 Conflict handling for ProRegTx in mempool 2018-08-30 19:47:38 +02:00
Alexander Block
c772423468 Implement "protx register" RPC 2018-08-30 19:47:38 +02:00
Alexander Block
958b84ace3 Implementation of ProRegTx with basic validation (no processing) 2018-08-30 19:47:30 +02:00
Alexander Block
c9a72e8880 Introduce CEvoDB for all evo related things, e.g. DIP3
Also add transaction handling to ConnectTip and DisconnectTip and a few
other places where blocks are processed.
2018-08-30 19:47:22 +02:00
Alexander Block
4531f6b896 Implement CDBTransaction and CScopedDBTransaction
Allows easier commit/rollback handling, especially useful when AcceptBlock
fails and things need to be reverted.
2018-08-29 15:49:31 +02:00
Alexander Block
e002c50b04 Add "immer" functional/immutable containers library (#2244)
Add "immer" functional/immutable containers library
2018-08-29 16:31:21 +03:00
Alexander Block
e225cebcdb Use previous block for CheckSpecialTx (#2243)
We actually can't use the current block as that one might not be fully
processed/built yet.
2018-08-29 16:26:16 +03:00
gladcow
1c25658044 Refactor masternode and gobject RPCs to support help command subCommand syntax (#2240)
* Support help for masternode rpc call subcommands

* Support help for gobject rpc call subcommands

* squash ifs for conditions to show help

* remove code duplication for masternode list and masternodelist help calls
2018-08-29 14:36:35 +03:00
UdjinM6
40eee1775f
Fix sync in regtest (again) (#2241)
Should only call SwitchToNextAsset() while being in specific state and not on every tick
2018-08-29 13:02:54 +03:00
Alexander Block
fb4d301a20 Add extraPayloadSize/extraPayload fields to RPC help 2018-08-29 11:45:53 +02:00
Alexander Block
8af7f62232 Account for extraPayload when calculating fees in FundTransaction 2018-08-29 11:36:14 +02:00
Alexander Block
61bbe54ab3 Add Get-/SetTxPayload helpers 2018-08-29 11:36:14 +02:00
Alexander Block
cebf71bbc3 Stubs for special TX validation and processing 2018-08-29 11:36:14 +02:00
Alexander Block
d6c5a72e2f Basic validation of version 3 TXs in CheckTransaction 2018-08-29 11:36:14 +02:00
Alexander Block
a3c4ee3fda DIP2 changes to CTransaction and CMutableTransaction 2018-08-29 11:36:14 +02:00
Alexander Block
d20100ecd4 DIP0003 deployment 2018-08-29 11:36:14 +02:00
Alexander Block
b6896387ae Move DIP1 transaction size checks out of ContextualCheckBlock and use ContextualCheckTransaction instead (#2238)
* Pass consensus params to ContextualCheckTransaction

As we do with ContextualCheckBlock

* Use ContextualCheckTransaction in ContextualCheckBlock instead of duplicating the check

* Fix pindexPrev parameter signature in ContextualCheckTransaction
2018-08-28 14:43:58 +03:00
Alexander Block
e415fd049a Revert CMasternodePayments::IsTransactionValid to the logic before the recent refactorings (#2237)
partially reverts #2216
2018-08-27 15:48:45 +03:00
Nathan Marley
73c2ddde7a extract sporkmanager from sporkmessage (#2234)
The SporkMessage is a lower-level construct which shouldn't be aware of
SporkManager. This commit moves the `sporkManager.IsSporkActive()` calls
outside the SporkMessage functions. This follows the dependency injection
pattern and makes it easier to test SporkMessage as well.
2018-08-22 17:46:27 +03:00