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.
#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.
* 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
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.
* 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.
* 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
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.
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.
* 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
* 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
* 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()
* 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
* 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
* 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.
* 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
* 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
* 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