Commit Graph

11387 Commits

Author SHA1 Message Date
Alexander Block
dd21d046f5 Avoid unnecessary calls to parentIt->GetKey 2019-04-05 13:37:25 +02:00
Alexander Block
d34ec78664 Update wallet transactions when confirmed IS locks are removed 2019-04-05 08:18:56 +02:00
Alexander Block
b897505f85 Remove the need for maintaining the last ChainLocked block in the DB 2019-04-05 08:05:12 +02:00
Alexander Block
8e7083cb89 Use db.RemoveConfirmedISLocks() in NotifyChainLock to remove confirmed locks
Also move the actual logic into HandleFullyConfirmedBlock and call it
from NotifyChainLock and UpdatedBlockTip.
2019-04-05 08:05:12 +02:00
Alexander Block
4577438e87 Implement RemoveConfirmedInstantSendLocks to prune confirmed IS locks from DB 2019-04-05 08:05:12 +02:00
Alexander Block
d6e7758519 Keep track of when IS locks were mined 2019-04-05 06:36:09 +02:00
Alexander Block
20ec1de4c6
Merge pull request #2833 from codablock/pr_dip4_quorums
Implement quorum merkle roots for DIP4 coinbases and add quorums to MNLISTDIFF
2019-04-05 05:58:05 +02:00
UdjinM6
0a6416e064 Wipe llmq db on reindex (#2835) 2019-04-05 05:57:46 +02:00
Peter Bushnell
4af5ea8a7f Remove netfulfilledman.h duplicate (#2834) 2019-04-05 05:57:33 +02:00
UdjinM6
208406df71 Re-introduce nInstantSendKeepLock check for LLMQ-based IS when spork19 is OFF (#2829) 2019-04-05 05:55:30 +02:00
Alexander Block
7d765a0fce Track best block to later know if a DB upgrade is needed 2019-04-04 17:58:51 +02:00
UdjinM6
1a25c2084c Apply suggestions from code review
Co-Authored-By: codablock <ablock84@gmail.com>
2019-04-04 17:41:30 +02:00
Alexander Block
44a3b9c90f Don't use pindex->GetBlockHash() in ProcessCommitment
The block hash is not necessarily set at this point, for example when
coming from TestBlockValidity().
2019-04-04 12:27:35 +02:00
Alexander Block
f9dbe3ed50 Track in which block a quorum commitment was mined
And return it in GetMinedCommitment and the "quorum info" RPC
2019-04-04 12:27:35 +02:00
Alexander Block
ba459663be Add deletedQuorums and newQuorums to CSimplifiedMNListEntry 2019-04-04 12:27:35 +02:00
Alexander Block
8f7929bed8 Implement and enforce quorum commitment merkle roots in coinbases
This bumps CCbTx::CURRENT_VERSION to 2 and enforces the new version after
DIP8 BIP9 activation.
2019-04-04 12:27:35 +02:00
Alexander Block
07620746a5 Implement GetMined(AndActive)CommitmentsUntilBlock and use it in ScanQuorums
This fixes a bug in ScanQuorums which made it return quorums which were not
mined at the time of pindexStart. This was due to quorumHashes being based
on older blocks (the phase=0 block) which are ancestors of pindexStart even
if the commitment was actually mined in a later block.

GetMinedAndActiveCommitmentsUntilBlock is also going to be used for quorum
commitment merkle roots in CCbTx.

This also removes GetFirstMinedQuorumHash as it's not needed anymore.
2019-04-04 12:27:35 +02:00
Alexander Block
d5250a333a Track at which height a quorum commitment was mined
Also add upgrade code to allow smooth upgrades from v13 to v14.
2019-04-04 12:27:35 +02:00
Alexander Block
806948f90e Store the full commitment in CQuorum
Instead of just individual fields of it.
2019-04-04 12:27:35 +02:00
Alexander Block
b67f6a0dc6 Implement CDBTransactionIterator
This iterator allows merged iteration of the key/values from the parent and
the not-yet-committed key/values from the transaction. This also works for
nested transactions (as used in CEvoDB).

It's interface mimics CDBIterator.
2019-04-04 12:27:35 +02:00
Alexander Block
6d1599bc68 Change CDBTransaction to compare keys by their serialized form
...instead of comparing by using the keys < operator.
There are 2 reasons for this:
1. This better mimics the behavior of CDBWrapper. Otherwise there is
   a chance of discrepancy when it comes to key equality.
2. Next commit will introduce CDBTransactionIterator, which relies on
   CDBTransaction and CDBWrapper being compatible in the way keys are
   compared.
2019-04-04 12:27:35 +02:00
Alexander Block
5482083eba Support passing CDataStream as key into CDBWrapper/CDBBatch/CDBIterator
This allow to pre-serialize keys in advance and pass the serialized form
into these classes.
2019-04-04 12:27:35 +02:00
Alexander Block
b0850fad06
Do not skip pushing of vMatch and vHashes in CMerkleBlock (#2826)
Even if its a TX type which we don't want in merkle blocks. Wrongfully
omitting the pushes causes invalid partial merkle trees, which in turn
causes SPV nodes to ban us.
2019-04-04 08:11:04 +02:00
Alexander Block
122566768e
Specify DIP3 enforcement block height/hash for mainnet params (#2824) 2019-04-04 06:39:38 +02:00
Nathan Marley
58589fb50a Trivial: Fix a couple typos (#2818)
* sp: s/signReqeust/signRequest/g

* sp: s/documenation/documentation/
2019-04-04 06:39:28 +02:00
UdjinM6
992922c495 Specify DIP3 enforcement block height/hash for mainnet params 2019-04-03 12:15:41 +03:00
Alexander Block
a370bbfe3d Update immer library to current master (0a718d2d76bab6ebdcf43de943bd6c7d2dbfe2f9) (#2821)
* Update immer library to current master (0a718d2d76bab6ebdcf43de943bd6c7d2dbfe2f9)

* Temporary fix for alignof(std::max_align_t) on MinGW 32bit builds

See https://github.com/arximboldi/immer/issues/78
2019-04-01 14:10:49 +03:00
UdjinM6
9f04855ae0
Fix blsWorker (#2820)
Use a pointer instead of a static variable, start/stop together with other llmq modules.
2019-04-01 14:10:39 +03:00
UdjinM6
377dd3b822
There can be no two votes which differ by the outcome only (#2819) 2019-04-01 14:10:28 +03:00
UdjinM6
a87909ec35
Keep the most recent gobject votes only (#2815)
* Keep the most recent gobject vote only

We don't need to store full vote data for old votes - we never relay them to other nodes anyway.
Still keep old hashes to avoid re-requesting data etc.

* add comment

* Drop getvotes rpc

* Compare vote signals, do not compare hashes

Also add comments
2019-04-01 14:10:01 +03:00
Alexander Block
010752d4eb Set fAllowMultiplePorts to true for testnet (#2817)
On testnet it's quite usual to have multiple MNs on the same IP. Now that
we have LLMQs and DKGs which require deterministic intra quorum connections,
we must allow them to connect to each other even if the IPs are shared very
often.
2019-03-30 17:55:34 +03:00
Nathan Marley
74d999e568 Remove watchdogs from existence (#2816) 2019-03-30 17:55:20 +03:00
thephez
bfc288afb4 Update getblock rpc help text (#2814) 2019-03-30 17:55:04 +03:00
UdjinM6
aeba4afce9
Fix vote ratecheck (#2813) 2019-03-30 17:54:39 +03:00
UdjinM6
ad7defba92
Drop all kind of invalid votes from all types of gobjects (#2812)
* Drop all kind of invalid votes from all types of gobjects

Currently we only do so for proposal "funding" votes which looks incomplete.

* Apply review suggestions
2019-03-30 17:54:22 +03:00
thephez
e75760fa7c Update "listtransactions" and "listsinceblock" RPC help (#2811)
- Move "confirmations" to match actual RPC output order
2019-03-30 14:30:30 +01:00
UdjinM6
8987a6c3e0
Update "debug" rpc help text (#2810)
* Update "debug" rpc help text

* add missing "qt" category

* add a note about non-matching categories
2019-03-28 12:15:54 +03:00
UdjinM6
4b4234f390
Refactor: fix layer violation for LLMQ based IS in UI (#2808)
Ignoring the same issue for legacy IS because it's going to be removed later.
2019-03-27 11:42:27 +03:00
UdjinM6
614cb6c2e6
Fix getgovernanceinfo rpc help text (#2809) 2019-03-27 10:34:40 +03:00
UdjinM6
39ba45f3c7
Show chainlocked txes as fully confirmed (#2807) 2019-03-27 10:34:22 +03:00
UdjinM6
f87035d146
Fix qt tests and actually run them (#2801)
* Fix qt tests and run them when compiling with DDEBUG_LOCKORDER flag

* Drop "NO_QT=1"
2019-03-25 19:24:24 +03:00
UdjinM6
162acc5a0d
Fix potential deadlock in LoadWallet() (#2806)
* Fix potential deadlock in LoadWallet()

```
POTENTIAL DEADLOCK DETECTED
Previous lock order was:
 (1) cs_main  wallet/wallet.cpp:3881
 (2) cs_wallet  wallet/wallet.cpp:3881
Current lock order is:
 (2) pwallet->cs_wallet  wallet/walletdb.cpp:589
 (1) cs_main  wallet/wallet.cpp:1252
```

* Add comment in CWallet::MarkConflicted re new cs_main lock in CWalletDB::LoadWallet()
2019-03-25 18:33:07 +03:00
UdjinM6
81eeff1c54
Fix devnet genesis check in InitBlockIndex() (#2805) 2019-03-25 18:32:48 +03:00
Alexander Block
4d8ef35120 Reset local/static cache in LogAcceptCategory when categories change (#2804)
* Reset local/static cache in LogAcceptCategory when categories change

Without this, it is always required to first set debug to 0, wait a few
seconds (until LogAcceptCategory is called by all affected threads) and
then call "debug somecategory". Otherwise "ptrCategory" never gets updated.

This PR also stores a cache counter locally and globally and updates
"ptrCategory" when the counters do not match.

* Lock cs_args in LogAcceptCategory
2019-03-25 18:32:21 +03:00
UdjinM6
4a79f7a700
Few trivial cleanups (#2803)
* fix typo

* align `=`s

* fix warniing
2019-03-25 09:15:46 +03:00
UdjinM6
5057ad511c
Drop DBG macros uses from governance modules (#2802)
Replace it with regular "governance" category limited LogPrint-s where it makes sense.
2019-03-25 09:15:32 +03:00
UdjinM6
29a9e24b42
Prepare Dash-related stuff before starting ThreadImport (#2800)
* Prepare Dash-related stuff before starting ThreadImport

* Ensure activeMasternodeManager is not null in ThreadImport when DIP3 is active and we are running in masternode mode
2019-03-25 09:14:57 +03:00
Alexander Block
8f280f3466
Split "llmq" debug category into "llmq", "llmq-dkg" and "llmq-sigs" (#2799)
* Use llmq-sig log category for CSigSharesManager

* Use llmq-dkg log category for DKG related logging
2019-03-25 05:48:18 +01:00
Alexander Block
15c720dd43 Stop tracking interested/participating nodes and send/announce to MNAUTH peers (#2798)
* Pass CNode* to IsMasternodeQuorumNode and let it also check verifiedProRegTxHash

This makes IsMasternodeQuorumNode return true on incoming peer connections
as well.

* Let GetMasternodeQuorumNodes also take verifiedProRegTxHash into account

This makes it return NodeIds for incoming peer connections as well.

* Remove AddParticipatingNode and the need for it

This was needed in the past when we were unable to identify incoming
connections from other quorum members. Now that we have MNAUTH, we can
easily identify all connected members.

* Don't track interestedIn quorums in CSigSharesNodeState anymore

Same as with the previous commit, we're now able to easily identify which
nodes to announce sig shares to.

* Remove unused CConnman::GetMasternodeQuorumAddresses
2019-03-22 17:21:34 +03:00
Alexander Block
f20620b0a5 Also handle MNAUTH on non-masternodes (#2797)
No real reason to ignore this message. It might become useful in the future.
2019-03-22 17:21:20 +03:00