Commit Graph

62 Commits

Author SHA1 Message Date
UdjinM6
1681d6366f
Replace Dash-specific threads with Dash-specific scheduled tasks (#2043)
* Replace Dash-specific threads with scheduled tasks

* Fix rare crash when trying to shutdown wallet during mixing

Should stop PS and release all keys _before_ wallet is destroyed.

* fix nowallet

* update doc
2018-07-16 15:47:37 +03:00
Nathan Marley
e23339d6f0 use nullptr in Dash-specific code (#2166)
This is recommended in modern C++ code as nullptr is more type-safe and can't
be converted to an integer, unlike NULL.
2018-07-12 12:08:43 +03:00
Nathan Marley
fd70a1eb92 iterator cleanup in several places (#2164)
* iterator cleanup in Dash-specific code

* const

* *Pair/pair

* it++ -> ++it
2018-07-12 12:07:51 +03:00
InhumanPerfection
0d5426343d Fix an edge case in PrepareDenominate (#2138)
* PrepareDenominate fix

* Fix conditions
2018-06-22 18:57:46 +03:00
UdjinM6
dbbedc031c
Fix JoinExistingQueue bug (#2100)
10s denoms were ignored due to the value overflow
2018-06-06 10:59:09 +03:00
UdjinM6
7ac4b972ab
Require all participants to submit equal number of inputs (#2075)
Activates via SPORK_6_NEW_SIGS to avoid nInputCount malleability
2018-05-26 21:03:23 +03:00
UdjinM6
b07503f013
Some cleanup (mostly trivial) (#2038)
* Drop CInstantSend::IsEnoughOrphanVotesForTxAndOutPoint

* small cleanup in rpc tests

* move some pieces from .h to .cpp

* fix few log outputs

* fix some comments

* some trivial fixes + readability
2018-04-20 13:53:23 +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
4d442376e9
Limit the scope of cs_wallet lock in CPrivateSendClient::PrepareDenominate() (#1997) 2018-03-20 14:05:39 +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
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
UdjinM6
5b1c4d8a11
Few (mostly trivial) cleanups and fixes (#1940)
* Drop nBudgetProposalEstablishingTime

* Refactor: replace `== COutPoint()` with `.IsNull()`

* Refactor: add `operator bool()` to CMasternodePing

* Refactor: actually use `operator bool()` for CPendingDsaRequest

* Refactor: fixing code style in TrafficGraphData

* Fix some comments and whitespaces

* Drop CGovernanceVote::GetTypeHash()

* Drop legacy X11 code

No longer used... if it ever was used at all.

* Move `<boost/foreach.hpp>` out of coins.h

* Simplify CMasternodeBlockPayees::GetRequiredPaymentsString()

Also less of boost::lexical_cast

* Drop CTxDSIn::nSentTimes

* Fix few warnings

* fix warning (timer)

* fix nit
2018-02-21 19:32:08 +03:00
UdjinM6
c656133502
Switch masternode id in Dash data structures from CTxIn to COutPoint (#1933)
* Switch masternode id in Dash data structures from CTxIn to COutPoint (including p2p level)

* outpoint -> masternodeOutpoint in DSEG
2018-02-15 10:29:44 +03:00
UdjinM6
0bd8c8e43a
Refactor: vecTxIn -> vecOutPoints for CompactTallyItem (#1932) 2018-02-15 10:29:31 +03:00
UdjinM6
d7f55d5083
Switch nTimeLastSuccessfulStep from GetTimeMillis() to GetTime() (#1923)
This makes PS mockable. And we don't need that much of a precision here anyway.
2018-02-12 15:47:53 +03:00
UdjinM6
204b1fe997
Drop unnecessary AcceptToMemoryPool in PS (and corresponding cs-main locks), just relay what we have (#1922) 2018-02-12 15:47:35 +03:00
UdjinM6
271c249e15
Skip next mn payments winners when selecting a MN to mix on (#1921) 2018-02-12 15:47:20 +03:00
thephez
ca89c7b870 [Trivial] Update PrivateSend denominations in comments / typo fixes (#1910) 2018-02-08 08:46:44 +03:00
UdjinM6
a7fa07a30e
Drop BOOST_FOREACH and use references in loops (const ref where applicable, Dash code only) (#1899)
* Drop BOOST_FOREACH in Dash-specific code (only), no changes in behavior

* Use references in loops (use const references where applicable) in Dash-specific code (only)

And adjust related code to make it compilable.

* Loop through nodes via connman.ForEachNode in dsq Relay instead of creating a copy
2018-02-06 14:09:33 +03:00
UdjinM6
1b1a440f4f
Do not send dash-specific requests to masternodes before we are fully connected (#1882)
* Do not send dash-specific requests to masternodes before we are fully connected

Open all masternode connections via CConnman::ThreadOpenMasternodeConnections only. Queue requests and process them after some timeout.

* drop excessive `mnodeman.`

* switch from queues to maps of pending requests

* adjust few strings, add TODO for POOL_STATE_CONNECTING

* fix

* there can be only one pending dsa request per ps client
2018-02-01 04:10:52 +03:00
UdjinM6
054abdbfa4
Merge pull request #1867 from codablock/pr_backport_bitcoin_0.14-10
Backport missing PRs from Bitcoin 0.14 - Part 10
2018-01-26 14:55:56 +03:00
UdjinM6
b1817dd936
Introduce CDarksendAccept class (for DSACCEPT messages) (#1875) 2018-01-26 04:11:15 +03:00
UdjinM6
88646bd0d0
Rename fMasterNode to fMasternodeMode to clarify its meaning and to avoid confusion with CNode::fMasternode (#1874) 2018-01-26 04:11:01 +03:00
Wladimir J. van der Laan
3f1929fb0d Merge #9659: Net: Turn some methods and params/variables const
0729102 Net: pass interruptMsgProc as const where possible (Jorge Timón)
fc7f2ff Net: Make CNetMsgMaker more const (Jorge Timón)
d45955f Net: CConnman: Make some methods const (Jorge Timón)
2018-01-23 09:24:27 +01:00
Alexander Block
b84afb2512 Allow to filter for fully connected nodes when calling CopyNodeVector (#1864)
And use this where needed. This avoids warnings about unset version fields
and is also generally a good thing (we really should only communicate with
nodes we know are good)
2018-01-22 16:17:11 +03:00
Wladimir J. van der Laan
8f423499dd Merge #9283: A few more CTransactionRef optimizations
91335ba Remove unused MakeTransactionRef overloads (Pieter Wuille)
6713f0f Make FillBlock consume txn_available to avoid shared_ptr copies (Pieter Wuille)
62607d7 Convert COrphanTx to keep a CTransactionRef (Pieter Wuille)
c44e4c4 Make AcceptToMemoryPool take CTransactionRef (Pieter Wuille)
2018-01-18 07:33:43 +01:00
Wladimir J. van der Laan
525c049316 Merge #8580: Make CTransaction actually immutable
81e3228 Make CTransaction actually immutable (Pieter Wuille)
42fd8de Make DecodeHexTx return a CMutableTransaction (Pieter Wuille)
c3f5673 Make CWalletTx store a CTransactionRef instead of inheriting (Pieter Wuille)
a188353 Switch GetTransaction to returning a CTransactionRef (Pieter Wuille)
2018-01-17 17:30:38 +01:00
Pieter Wuille
5c0b55a7c0 Merge #9128: net: Decouple CConnman and message serialization
c7be56d net: push only raw data into CConnman (Cory Fields)
2ec935d net: add CVectorWriter and CNetMsgMaker (Cory Fields)
b7695c2 net: No need to check individually for disconnection anymore (Cory Fields)
fedea8a net: don't send any messages before handshake or after requested disconnect (Cory Fields)
d74e352 net: Set feelers to disconnect at the end of the version message (Cory Fields)
2018-01-17 17:27:22 +01:00
Alexander Block
532b9fa3db Use OpenNetworkConnection instead of calling ConnectNode directly in Dash code (#1857)
ConnectNode is meant to be private and should not be leaked outside of
CConnman. This leaking resulted in multiple problems with AddRef/Release
behaviour. We use OpenNetworkConnectio/OpenMasternodeConnection from now on
and use appropriate ForNode calls to access the CNode* instance.

This commit also changes the behaviour for already connected nodes which
are afterwards requested for a masternode connection. We don't set
fMasternode=true anymore on such nodes, which means it won't be auto
disconnected anymore from ProcessMasternodeConnections.
2018-01-17 18:09:08 +03:00
Wladimir J. van der Laan
848f3389b4 Merge #9016: Return useful error message on ATMP failure
169bdab Return useful error message on ATMP failure (instagibbs)
2018-01-13 13:44:38 +01:00
Wladimir J. van der Laan
beef6e7841 Merge #8990: moveonly: move coincontrol to src/wallet
1ae5839 moveonly: move `coincontrol` to `src/wallet` (Wladimir J. van der Laan)
2018-01-13 13:44:37 +01:00
UdjinM6
9965d51bb6
Avoid reference leakage in CKeyHolderStorage::AddKey (#1840) 2018-01-09 14:11:43 +03:00
UdjinM6
d69ad9d619
Skip existing masternode conections on mixing (#1833) 2018-01-09 12:17:54 +03:00
UdjinM6
287d367c3c
Fix -liquidityprovider option (#1829)
revert to pre-1248 logic for liquidity providers
2018-01-06 13:06:22 +03:00
UdjinM6
1d620d1f9b
Fix calls to AcceptToMemoryPool in PS submodules (#1823) 2017-12-30 01:05:33 +03:00
Wladimir J. van der Laan
00c84ca53e Merge #8065: Addrman offline attempts
6182d10 Do not increment nAttempts by more than one for every Good connection. (Gregory Maxwell)
c769c4a Avoid counting failed connect attempts when probably offline. (Gregory Maxwell)
2017-12-22 16:33:55 +01:00
Pieter Wuille
7b25879463 Merge #8059: Remove unneeded feerate param from RelayTransaction/AcceptToMemoryPool.
d87b198 Remove unneeded feerate param from RelayTransaction/AcceptToMemoryPool. (Gregory Maxwell)
2017-12-21 18:50:13 +01:00
Alexander Block
aa584522da Dash related changes for feefilter 2017-12-19 13:18:30 +01:00
UdjinM6
f4502099a4
make CheckDSTXes() private, execute it on both client and server (#1736) 2017-12-07 12:42:47 +03:00
UdjinM6
7e96af4e65
Refactor PrivateSend (#1735)
* make infoMixingMasternode private

* move PS queue entries expiration checks (and cs_darksend) to CPrivateSendBase

* drop CTxDSOut

* move prevPubKey out of CTxIn into CTxDSIn and use CTxDSIn explicitly

* drop CPrivateSendClient::NewBlock

* move IsDenominatedAmount to CPrivateSend

* move IsCollateralAmount to CPrivateSend

* drop darksend-relay.cpp/h

* drop GetMasternodeByRank
2017-12-04 09:06:07 +03:00
UdjinM6
312663b4be
Remove support for local masternodes (#1706) 2017-11-01 18:11:39 +03:00
UdjinM6
8e9289e12b Keep track of wallet UTXOs and use them for PS balances and rounds calculations (#1655)
* keep track of wallet UTXOs and use them for PS balances and rounds calculations

* fix
2017-09-27 20:43:16 +03:00
UdjinM6
8c15f5f878 speedup MakeCollateralAmounts by skiping denominated inputs early (#1631) 2017-09-27 20:42:53 +03:00
UdjinM6
ea793a71f1 Make sure mixing masternode follows bip69 before signing final mixing tx (#1510)
* Make sure mixing tx follows bip69 before signing it

* bump MIN_PRIVATESEND_PEER_PROTO_VERSION to 70208
2017-09-22 04:53:15 +03:00
Oleg Girko
753b1e486b Eliminate remaining uses of g_connman in Dash-specific code. (#1635)
This monstrous change eliminates all remaining uses of
g_connman global variable in Dash-specific code.

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

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

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

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

The normal overload has this code in the beginning:

    if(!masternodeSync.IsMasternodeListSynced()) return;

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

Signed-off-by: Oleg Girko <ol@infoserver.lv>
2017-09-19 17:51:38 +03:00
UdjinM6
33e460f306 Fix losing keys on PrivateSend (#1616)
* reserve colateral keey only if needed

reserve colateral keey only if needed -> fix losing one key on every
subsequent CreateDonominate

* Adding KeyHolder and KeyHolderStorage

Adding KeyHolder and KeyHolderStorage to store keys used in PrivateSend
until status of mixing is known.

* Removing ClearOn... methods. Instead of calling directly KeepAll/ReplaceAll.

* remove usage of shared_ptr

* use unique_ptr

* follow naming convention

* use CKeyHolderStorage in CreateDenominated too

* adjust log messages

* return keys on POOL_STATE_ERROR, keep keys on POOL_STATE_SUCCESS

* Disable copy/assign and allow move

* Use keyHolderStorageDenom for collateral output in CreateDenominated
2017-09-11 17:14:55 +03:00
UdjinM6
05da4557d0 Refactor masternode management (#1611)
* Store masternodes in a map instead of a vector, drop unused functions in CMasternodeMan

* CTxIn vin -> COutPoint outpoint

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

* update GetMasternodeInfo

* safe version of GetNextMasternodeInQueueForPayment

* fix ProcessMasternodeConnections

* bump CMasternodeMan::SERIALIZATION_VERSION_STRING
2017-09-11 17:13:48 +03:00
UdjinM6
82595b1b91 fix number of blocks to wait after successful mixing tx (#1597) 2017-09-03 16:30:58 +03:00
UdjinM6
4f5455000e Use GetAdjustedTime instead of GetTime when dealing with network-wide timestamps (#1590) 2017-08-29 02:51:44 +03:00
UdjinM6
fe81d641da drop pCurrentBlockIndex and use cached block height instead (nCachedBlockHeight) (#1579) 2017-08-25 15:57:05 +03:00