Commit Graph

14790 Commits

Author SHA1 Message Date
UdjinM6
a0874b72a9
Validate data size for proposals only (#2004)
There are no watchdogs and it makes no sense to limit triggers by size (invalid triggers are going to be voted down anyway).
512 bytes should be more than enough for any proposal - the only value we do not check size of is URL and with 512 bytes total limit URL has space for almost 300 bytes.
2018-04-05 15:34:26 +03:00
Alexander Block
c0a1099986 Fix instantsend in testnet and regtest (#2016)
#1962 changes the minimum required confirmations for InstantSend to 2 when
running in testnet. This resulted in the quorum rank calculation to pick
blocks which are higher then the current chain tip. This commit fixes this
by calculating the added height based on nInstantSendConfirmationsRequired.

This results in the value 4 for mainnet, so no incompatibility is
introduced. On testnet and regtest, this results in 0.
2018-03-29 18:08:24 +03:00
UdjinM6
72a225b9bf
Few fixes for lite mode (#2014)
* Allow disabling txindex in lite mode

* Do not load/store Dash-specific cache in lite mode

* Do not create/show masternode tab in lite mode

* Do not connect PS actions in lite mode

* Fix sync/ignore block updates in Dash submodules in lite mode
2018-03-29 18:08:00 +03:00
UdjinM6
2f1661678c
Locked txes should not expire until mined and have sufficient confirmations (#2011) 2018-03-29 18:07:40 +03:00
UdjinM6
d1bf615f33
No POOL_STATE_ERROR or POOL_STATE_SUCCESS on masternodes (#2009)
The reason for this removal is that this block was a copy/paste when we spit one huge privatesend file into multiple classes/files trying to make as little changes as possible to not to break anything. If you look at CPrivateSendServer::SetState() you'll notice that these states (POOL_STATE_ERROR and POOL_STATE_SUCCESS) are illegal for masternodes anyway, so no reason to have conditions relying on that or trying to set illigal state.
2018-03-21 14:10:19 +03:00
UdjinM6
d03adb7c39
Check if in masternode mode first and only then do the job (or not) (#2008)
* Check if in masternode mode first and only then do the job (or not)

* address review comment
2018-03-21 14:10:01 +03:00
UdjinM6
846f1d217a
Avoid processing tx lock request twice in the wallet it was sent from (#2007) 2018-03-21 14:09:47 +03:00
UdjinM6
c0c998da35
Fix CInstantSend::GetTxLockRequest() (#2006)
Should fail for empty lock request
2018-03-21 14:09:28 +03:00
UdjinM6
15fac7c7e7
Validate proposals for expiration (#2003)
Postpone this on mainnet until old proposals are done
2018-03-21 14:09:13 +03:00
UdjinM6
b7bd96e2bb
Clarify the warning displayed when encrypting HD wallet (#2002)
* Clarify the warning displayed when encrypting HD wallet

* `dashs` -> `funds`
2018-03-21 14:08:55 +03:00
UdjinM6
c7e9ea9fba
Avoid repeating the full scan in CMasternodeMan::UpdateLastPaid() on non-MNs (#1985)
Instead, remember the block height previous scan was performed at and scan back to that height only (but at least LAST_PAID_SCAN_BLOCKS).
2018-03-21 14:08:35 +03:00
UdjinM6
4930bb9f5f
Don't hold cs_storage in CKeyHolderStorage while calling functions which might lock cs_wallet (#2000)
Co-authored-by: Alexander Block <ablock84@gmail.com>
2018-03-20 14:06:07 +03:00
UdjinM6
4d442376e9
Limit the scope of cs_wallet lock in CPrivateSendClient::PrepareDenominate() (#1997) 2018-03-20 14:05:39 +03:00
UdjinM6
a3bcc4307d
Refactor governance (#1993)
* Refactor CGovernanceObject::IsValidLocally()

* Refactor CGovernanceObject::ProcessVote()

* Refactor CGovernanceObject::CountMatchingVotes()

* Refactor CGovernanceObjectVoteFile::HasVote()

* Refactor CGovernance* (more consts and refs)

* Refactor CGovernanceManager::HaveVoteForHash()

* Refactor CGovernanceManager::SerializeVoteForHash()

* Refactor CGovernanceManager::SyncSingleObjAndItsVotes()
2018-03-20 14:04:59 +03:00
UdjinM6
f28a58e0a9
Refactor and fix restart (#1999)
* Refactor restart

* Correctly interrupt all threads on restart

Fixes the issue with restart when running with `-server`
2018-03-19 16:09:47 +03:00
UdjinM6
7248700b33
Add missing cs_main locks (#1998)
`Misbehaving()` and `State()` require `cs_main` to be locked, this PR adds missing ones (in Dash specific code only).
2018-03-19 16:09:29 +03:00
UdjinM6
ddff32b96a
Fix TransactionRecord::PrivateSendMakeCollaterals tx type (#1996)
CPrivateSendClient::MakeCollateralAmounts() creates inputs of exactly CPrivateSend::GetMaxCollateralAmount()
2018-03-19 16:09:13 +03:00
UdjinM6
4f978a2634
Drop Nx requirements for PS collaterals (#1995) 2018-03-19 16:08:57 +03:00
UdjinM6
9e98c856f2
A pack of small fixes (#1992)
* Make sure gobject collateral was mined

`CGovernanceObject::IsCollateralValid()` would still fail for non-mined collateral later trying to check confirmations

* Fix powLimit for mainnet/testnet

That's a legacy thing, slightly rising it to match the actual bit-shifted value has no effect because real values are already lower.
Also clarify values for all networks in comments.

* Check for script addresses in CSuperblock::ParsePaymentSchedule()

Sentinel should already be downvoting such triggers if they would exist, no need to store/relay them.

* Do not process already known valid vote twice in CGovernanceObject::ProcessVote()

This should be handled by `CGovernanceManager::ProcessVote()` but imo it's better to have this at the `CGovernanceObject::ProcessVote()` level as well.

* Make sure CGovernanceObjectVoteFile::AddVote() never adds/updates already known votes

The way `CGovernanceObjectVoteFile::AddVote()` is used (i.e. wrapped in `CGovernanceObjectVoteFile::HasVote()` condition) it's already the case. Hoever nothing would guarantee consistency if it would be used elsewhere without such wrapper, so it's better to have similar check inside.

* Do not even try mnb recovery when -connect is set

`CConnman::ThreadOpenMasternodeConnections()` thread won't even start when `-connect` is set, so no need to ask for recovery, there is nothing that is going to be able to process such request.

* No need for SIGHASH_ANYONECANPAY in PS collateral signature

Collateral is just a normal tx created and signed by each participant individually, there is no need for special sig types.

* Release semMasternodeOutbound in CConnman::Interrupt()

Re-align Dash code with Bitcoin.
2018-03-19 16:08:32 +03:00
UdjinM6
9b17f2b9c8
Convert gobject count output to json (by default) (#1994)
Old mode is available via `gobject count all`
2018-03-15 22:09:06 +03:00
UdjinM6
1d32d1c327
Add missing includes required for compilation with --disable-wallet flag (#1991) 2018-03-15 22:08:11 +03:00
UdjinM6
a44f48743b
Allow data outputs in PS collaterals (#1984)
* Allow data outputs in PS collaterals

This should allow to
- reduce utxo spam caused by 1x collaterals a bit
- use otherwise non-usable small inputs (in the range of 1-2x) as PS collaterals, which should reduce utxo set even further

Requires protobump

* patch to avoid protobump requirement

* address review comments
2018-03-15 12:22:22 +03:00
UdjinM6
08033ffe4f
Reject Dash-specific messages from obsolete peers (#1983)
And send REJECT msg back to the peer we received the original message from.
Same logic as for MIN_PEER_PROTO_VERSION but using specific proto versions for each submodule.
2018-03-15 12:21:43 +03:00
UdjinM6
e9f63073dc
Warn when more than 50% of masternodes are using newer version (#1963)
* Warn when more than 50% of masternodes are using newer version than our local one (i.e. CLIENT_VERSION)

Closes trac#64

* fix
2018-03-15 12:21:12 +03:00
UdjinM6
04a23bf0c8
Fix the bug in CGovernanceObject::ProcessVote() (#1989)
Introduced in #1977
2018-03-14 20:50:07 +03:00
UdjinM6
4b128b1b94
Fix listaddressbalances (#1987) 2018-03-14 19:14:37 +03:00
Alexander Block
19ea1a7918 Use operator[] instead of emplace in CMasternodePayments::AddPaymentVote (#1980)
Found this when running dip3 integration tests. Votes stopped being
propagated.

When NetMsgType::MASTERNODEPAYMENTVOTE is handled, the payment vote is
already added to mapMasternodePaymentVotes and then marked as not verified.

When AddPaymentVote is then called shortly after that, the emplace does not
update the already added vote.

The real problem here is actually something different. AddPaymentVote is
named badly (should be more like AddOrUpdatePaymentVote) which resulted in
the non-obvious error while refactoring this code (who could have known
that we rely on that side effect?). So I renamed that method as well now.
2018-03-10 15:35:27 +03:00
UdjinM6
7d5223b5e4
Network-specific thresholds for required confirmations (IS) (#1962) 2018-03-10 15:35:09 +03:00
UdjinM6
6536003528
Draw text on top of everything else in TrafficGraphWidget (#1944) 2018-03-10 15:34:50 +03:00
UdjinM6
ca3655f494
Fix some (potential dead)locks (#1977)
* Avoid locking cs_main in CMasternode/Ping/Broadcast

Deligate this to CMasternodeMan and use AssertLockHeld instead

* Ensure consistent locking order (cs_main, cs_wallet, mempool.cs, cs_instantsend) in CInstantSend while avoiding potential deadlocks at the same time

* Add missing locks in wallet

* Add missing locks in governance

* Fix cs_vPendingMasternodes vs cs_main potential deadlock

SendVerifyRequest no longer opens connection directly, so no cs_main is needed here
2018-03-09 17:15:48 +03:00
Alexander Block
2a7e6861d2 Include "clientversion.h" in rpc/masternode.cpp (#1979)
Otherwise it fails to compile when the wallet is disabled at compile time
2018-03-09 15:41:51 +03:00
Alexander Block
ef1a86c3e1 Add dummy CMakeLists.txt file to make development with CLion easier (#1978) 2018-03-09 15:41:28 +03:00
UdjinM6
d115efacb8
[RPC] Few additions to masternodelist (#1971)
* RPC: Add `masternodelist daemon`

* RPC: Add `masternodelist json` and make it default

* RPC: Add `masternodelist sentinel`
2018-03-08 15:22:13 +03:00
crowning-
a9d8e2c5dd [Init] Avoid segfault when called with -enableinstantsend=0 (#1976) 2018-03-08 15:19:25 +03:00
Alexander Block
3200eae9b1 Don't use short version of 'tinyformat/fmt' namespace in util.h (#1975)
* Don't use short version of 'tinyformat/fmt' namespace in util.h

Clion is not able to parse this correctly and messes up all the syntax
checks, marking large parts of C++ files as syntactically invalid, making
it hard to find real syntax errors without trying compilation.

* Also use full namespace name for strprintf in tinyformat.h
2018-03-08 15:18:51 +03:00
UdjinM6
97a07cbc4c
Refactor CMasternodePayment* (#1974)
* Refactor CMasternodePayment*: avoid using `count` and `[]`

Use iterators instead

* Refactor CMasternodePayment*: mark functions as const, pass references, adjust arg name

* Refactor/rename CMasternodePayments::CanVote()

* Refactor CMasternodePayment*: minor trivial changes

* Refactor CMasternodePayment*: reduce number of calls to GetHash()
2018-03-08 15:18:38 +03:00
UdjinM6
4ffa7bac02
Introduce DIP0001Height (#1973)
Block height at which DIP0001 becomes active

Also drop fDIP0001WasLockedIn
2018-03-08 15:18:24 +03:00
UdjinM6
9451782a04
RPC: Add listaddressbalances (#1972) 2018-03-08 15:18:06 +03:00
crowning-
118eeded6d [GUI] Create QR-code for Masternode private key (#1970) 2018-03-08 15:17:34 +03:00
UdjinM6
9ef38c6d73
Switch CNetFulfilledRequestManager and CMasternodeMan maps/funcs to CService (#1967)
* Switch CNetFulfilledRequestManager and CMasternodeMan maps/funcs to CService

This is to make them work correctly on regtest.
We make sure that behaviour on other networks is not affected though.

* Add fAllowMultiplePorts to chainparams

Tweak either we should allow nodes with the same address and multiple ports or not for this specific chain
2018-03-08 15:16:52 +03:00
UdjinM6
929c1584ac
Rename CheckPreviousBlockVotes to CheckBlockVotes and adjust its log output a bit (#1965) 2018-03-05 15:27:05 +03:00
Alexander Block
611879aa6d Use spork addresses instead of raw keys and allow changing them on startup (#1969)
* Support passing CKeyID to CMessageSigner/CHashSigner

* Use Dash addresses instead of raw public keys for sporks

The spork addresses are identical to the previously used public keys.

Also use CKeyID/CKey directly inside CSporkManager instead of parsing the
addresses/keys over and over. The default spork key (from chainparams) is
initialized with InitDefaultSporkAddress(). SetPrivKey parses the private
key now and stores it in sporkPrivKey instead of parsing it in
CSporkMessage::Sign().

* Allow setting of spork address via command line

* Remove unused strMasternodePaymentsPubKey chainparam

Traces from the past...

* Review fixes

1. Remove the need for InitDefaultSporkAddress
2. Remove bogus checks for hex private keys
3. Alphabetical order for new include
4. Add . to help string

* Add regtest spork key

As this key is not meant to be private, the private key is also added in
the form of a comment (for later use in regtests)

* Review fixes
2018-03-02 16:15:04 +03:00
UdjinM6
d2c46a6a32
Update protocol-documentation.md (#1964)
* Update protocol-documentation.md

* typo
2018-03-02 16:13:47 +03:00
UdjinM6
bf0854e58e
Swap expired and sentinel_expired states in order (#1961)
State switching should correlate with spork14 and CMasternode::IsValidForPayment() a bit better now
2018-03-02 16:13:31 +03:00
Alexander Block
9876207ce2 Multiple devnet fixes (#1960)
* Add missing help string for -devnet

* Remove testnet seeds from devnet

* Activate BIP34/65/66 at height 2 instead of 1

Height 1 is the genesis block and not the devnet genesis block. The genesis
block is still at version 1, resulting in re-indexing to fail.
2018-03-02 16:12:31 +03:00
UdjinM6
bab543f3e6
Various RPC fixes (#1958)
* RPC: fix listunspent include_unsafe param usage

* RPC: Add two fields to indicate if some mempool entry is an InstantSend tx and if it was locked or not

* RPC: Add privatesend_balance to getwalletinfo rpc

* RPC: "BTC" -> CURRENCY_UNIT

* RPC: more EnsureWalletIsAvailable in Dash-specific code

* RPC: EnsureWalletIsUnlocked in `gobject prepare`

Also fixes missing cs_wallet lock

* RPC: disable `privatesend` rpc on masternodes completely

* RPC: refactor `spork` rpc

* RPC: Show correct port in HelpExampleRpc

* RPC: few trivial fixes

* fix
2018-03-01 16:18:46 +03:00
Nathan Marley
b0868093b0 simplify gobject JSON format, remove unused fields (#1902)
* simplify gobject JSON format, remove unused fields

This allows gobject format to change from (for example):

```
[
    [
        "proposal",
        {"object": "data-here"}
    ]
]
```

... to simply:

```
{"object": "data-here"}
```

The outer array isn't needed, and the first value in the 2-item tuple is
likewise discarded by DashCore. This change should allow either data
format to exist (we can deprecate/remove the older format later) and
remove the array of different type elements (string, object).

* validator test for legacy and new proposal formats
2018-02-28 02:20:16 +03:00
UdjinM6
1dda9fe6f2
CProposalValidator refactoring and follow up fixes (#1956)
* Refactor CProposalValidator

- fix names
- MAX_NAME_SIZE instead of magic value
- move most functions to private, test actual usage (constructor and Validate), not every single function
- do not store hex string (there is no reason to do so anymore)
- remove (now) unused functions

* Make sure payment_address has no whitespaces

* Fix governance_validators_tests

* Don't allow whitespaces, drop StripWhitespaces and add corresponding tests

* Show validator internal errors on check failure
2018-02-27 16:39:48 +03:00
Alexander Block
e37b6c7dab Fix BIP147 deployment threshold parameter (#1955)
It should be 50 and not 59
2018-02-27 16:39:34 +03:00
UdjinM6
106276a3e2
Adjust/fix log output (#1954)
* fix typo in debug message

* log: specify MN

* log: fix class::func

* log: format log2_work

* log: other minor adjustments
2018-02-26 14:10:20 +03:00