Commit Graph

18 Commits

Author SHA1 Message Date
UdjinM6
b91018ace1 Dash-specific adaptations for 18699 2022-04-07 10:13:47 +05:30
PastaPastaPasta
fe0ebb3c04
refactor: fix numerous compilation warnings (#4682)
* style: use clang-tidy style named parameters

* refactor: make IsTimeOutOfBounds testable by having current time be a parameter

* style: use x-> not (*x).

* refactor: make SelectCoinsGroupedByAddresses return a vector, remove out param

previous semantics was return false if the vecTally vector was empty. Now we just let the caller check if it is empty or not

* refactor: fix some sign-compare warnings

* refactor: consistently pre-declare stuff as struct / class inline with underlying type

* refactor: don't return const bool

* refactor: use ref to string

* refactor: use = default for CompactTallyItem

* refactor: adjust "initialization" ordering

* refactor: adjust how we handle negatives in GetProjectedMNPayees, use std::min

* refactor: don't bind a reference to a temporary value

* refactor: use a ref

* refactor: ensure attempt in SelectMemberForRecovery is non-negative.

* refactor: remove unused this capture

* refactor: fix numerous sign-compare warnings

* refactor: more consistently use size_t, use empty()
2022-02-11 19:15:26 +03:00
UdjinM6
52d3546a70
Partially revert 4652 (#4674)
Using `string_view` results in things like `nSessionDenom: 2 (\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)` etc. for some reason
2022-02-02 12:08:50 +03:00
PastaPastaPasta
22f335e268
refactor: some refactoring in coinjoin code (#4652)
* Make numerous coinjoin functions constexpr

* remove empty function

Signed-off-by: Pasta <pasta@dashboost.org>

* remove InitStandardDenominations calls

Signed-off-by: Pasta <pasta@dashboost.org>

* use default constructors, add constexpr to CCoinJoinStatusUpdate constructor

Signed-off-by: Pasta <pasta@dashboost.org>

* remove default constructor

Signed-off-by: Pasta <pasta@dashboost.org>
2022-01-11 03:57:37 +03:00
PastaPastaPasta
7b78390015
refactor: Include adjustments (#4526)
* include adjustments

* fix macOs build failure

Signed-off-by: pasta <pasta@dashboost.org>

* expcitly include array in spork.h

* sort includes in most files
2021-10-25 16:55:34 +03:00
UdjinM6
4606c50643 mutex: refactor coinjoin mutex locking logic 2021-10-22 08:15:38 +05:30
PastaPastaPasta
501cdaa91b
refac: use make_unique and constexpr (#4493)
* use make_unique

* use constexpr everywhere possible in dash code
2021-10-11 00:41:53 +03:00
PastaPastaPasta
9da186bb61
refactor: Various small improvements (#4471)
* bls: use constexpr int instead of #define

* lint: bump c++ version to 17

* test: use BOOST_CHECK_EQUAL instead of BOOST_ASSERT, call boost assert in another location

* coinjoin: fix typo

* drop redundant LLMQType cast

* use numeric_limits instead of magic value

* net_processing.cpp whitespace fixes

* Add some const

* use std::all_of instead of raw for loop

* Introduce UNINITIALIZED_SESSION_ID and use it instead of a magic number

Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
2021-10-01 14:44:40 +03:00
PastaPastaPasta
7508790282
Coinjoin cs adjustments (#4463)
* Adjust coinjoin-client-options.* by making values atomic, removing CCriticalSection, and adjusting constructor to be default

* coinjoin-client.* adjust cs_deqsessions usage

* coinjoin add GUARDED_BY notations

* coinjoin make some values atomic

* coinjoin: move lock to where needed

* Ensure values are properly protected

* LOCK(cs_vecqueue) as needed

* Ensure vecOutputs is properly protected

Signed-off-by: pasta <pasta@dashboost.org>
2021-09-30 21:58:33 +03:00
PastaPastaPasta
f65b789f9a
Refac: misc coinjoin refactoring and spelling / grammar fixes (#4304)
* refactor: misc coinjoin refactoring

* fix spelling / grammar recommendations in coinjoin
2021-07-30 03:01:02 +03:00
Wladimir J. van der Laan
5c913efd1d
Merge #13443: Removed unused == operator from CMutableTransaction.
55771b7c6a8d4a204c63e70db73a0071c41a0dc4 Removed unused == operator from CMutableTransaction. (lucash.dev@gmail.com)

Pull request description:

  This removes the unused == operator from `CMutableTransaction`.

  The motivation is that unused code has a cost but offers no benefit (in general), while also adding the risk of introducing silent bugs. On top of that this particular code is quite inefficient, unnecessarily calculating the hash (it could, say, compare serializations). So if anyone ever needs to use a == comparison on `CMutableTransaction`, they'd be better of having to reimplement it (and add tests) than relying on code that's not being maintained.

  Note: after this, trying to use the == operator on CMutableTransactions results in a compilation error:
  ```
  ./primitives/transaction.h:405:15: error: invalid operands to binary expression ('CMutableTransaction' and
        'CMutableTransaction')
  ```

Tree-SHA512: a565af563e09d99347b6fe419f6d48c750b1377295af293a3e0c3c0d815e58aede8d7058987a68d66cfa7ed023e5d3285b12afabd17d0ff9cf11322ba3ce20fe
2021-06-28 02:31:50 +03:00
PastaPastaPasta
f09731f014
refactor: misc refactoring in instantsend, llmq, coinjoin (#4212)
* instantsend: make stuff const where possible

Signed-off-by: pasta <pasta@dashboost.org>

* instantsend: remove unused `params`

Signed-off-by: pasta <pasta@dashboost.org>

* instantsend: combine two nested if's into one

Signed-off-by: pasta <pasta@dashboost.org>

* instantsend: use auto in spots where possible and clear

Signed-off-by: pasta <pasta@dashboost.org>

* coinjoin: make IsValidStructure const

Signed-off-by: pasta <pasta@dashboost.org>

* coinjoin: divide by an integer to avoid double implicit conversions

Signed-off-by: pasta <pasta@dashboost.org>

* coinjoin: make unused parameter unnamed

Signed-off-by: pasta <pasta@dashboost.org>

* quorums.* use const and use references where possible

Signed-off-by: pasta <pasta@dashboost.org>

* quorums.h don't return const when returning by value

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_blockprocessor.cpp remove redundant casts and combine two if statements

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_blockprocessor.cpp make values const

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_chainlocks.cpp access static function statically

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_chainlocks.h remove commented out include

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_commitment.cpp remove redundant casts

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_debug.cpp remove redundant casts and add const

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_dkgsession.cpp use const where possible

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_dkgsessionhandler.cpp use const where possible

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_dkgsessionhandler.cpp don't use std::move which apparently prevents "copy elision" in this instance

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_dkgsessionhandler.cpp use const

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_dkgsessionmgr.cpp misc refactoring

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_signing.* misc refactoring

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_signing_shares.* misc refactoring

Signed-off-by: pasta <pasta@dashboost.org>

* quorums_utils.cpp misc refactoring

Signed-off-by: pasta <pasta@dashboost.org>
2021-06-26 16:10:53 +03:00
Wladimir J. van der Laan
82659a4eb8 Merge #12257: [wallet] Use destination groups instead of coins in coin select
232f96f5c8a3920c09db92f4dbac2ad7d10ce8cf doc: Add release notes for -avoidpartialspends (Karl-Johan Alm)
e00b4699cc6d2ee5697d38dd6607eb2631c9b77a clean-up: Remove no longer used ivars from CInputCoin (Karl-Johan Alm)
43e04d13b1ffc02b1082176e87f420198b40c7b1 wallet: Remove deprecated OutputEligibleForSpending (Karl-Johan Alm)
0128121101fb3ee82f3abd3973a967a4226ffe0e test: Add basic testing for wallet groups (Karl-Johan Alm)
59d6f7b4e2f847ec1f2ff46c84e6157655984f85 wallet: Switch to using output groups instead of coins in coin selection (Karl-Johan Alm)
87ebce25d66952f5ce565bb5130dcf5e24049872 wallet: Add output grouping (Karl-Johan Alm)
bb629cb9dc567cc819724d9f4852652926e60cbf Add -avoidpartialspends and m_avoid_partial_spends (Karl-Johan Alm)
65b3eda458221644616d0fdd6ba0fe01bdbce893 wallet: Add input bytes to CInputCoin (Karl-Johan Alm)
a443d7a0ca333b0bae63e04b5d476f9ad9c7aeac moveonly: CoinElegibilityFilter into coinselection.h (Karl-Johan Alm)
173e18a289088c6087ba6fac708e322aa63b7a94 utils: Add insert() convenience templates (Karl-Johan Alm)

Pull request description:

  This PR adds an optional (off by default) `-avoidpartialspends` flag, which changes coin select to use output groups rather than outputs, where each output group corresponds to all outputs with the same destination.

  It is a privacy improvement, as each time you spend some output, any other output that is publicly associated with the destination (address) will also be spent at the same time, at the cost of fee increase for cases where coin select without group restriction would find a more optimal set of coins (see example below).

  For regular use without address reuse, this PR should have no effect on the user experience whatsoever; it only affects users who, for some reason, have multiple outputs with the same destination (i.e. address reuse).

  Nodes with this turned off will still try to avoid partial spending, if the fee of the resulting transaction is not greater than the fee of the original transaction.

  Example: a node has four outputs linked to two addresses `A` and `B`:

  * 1.0 btc to `A`
  * 0.5 btc to `A`
  * 1.0 btc to `B`
  * 0.5 btc to `B`

  The node sends 0.2 btc to `C`. Without `-avoidpartialspends`, the following coin selection will occur:
  * 0.5 btc to `A` or `B` is picked
  * 0.2 btc is output to `C`
  * 0.3 - fee is output to (unique change address)

  With `-avoidpartialspends`, the following will instead happen:
  * Both of (0.5, 1.0) btc to `A` or `B` is picked (one or the other pair)
  * 0.2 btc is output to `C`
  * 1.3 - fee is output to (unique change address)

  As noted, the pro here is that, assuming nobody sends to the address after you spend from it, you will only ever use one address once. The con is that the transaction becomes slightly larger in this case, because it is overpicking outputs to adhere to the no partial spending rule.

  This complements #10386, in particular it addresses @luke-jr and @gmaxwell's concerns in https://github.com/bitcoin/bitcoin/pull/10386#issuecomment-300667926 and https://github.com/bitcoin/bitcoin/pull/10386#issuecomment-302361381.

  Together with `-avoidreuse`, this fully addresses the concerns in #10065 I believe.

Tree-SHA512: 24687a4490ba59cf4198ed90052944ff4996653a4257833bb52ed24d058b3e924800c9b3790aeb6be6385b653b49e304453e5d7ff960e64c682fc23bfc447621

# Conflicts:
#	src/Makefile.am
#	src/bench/coin_selection.cpp
#	src/wallet/coincontrol.h
#	src/wallet/coinselection.cpp
#	src/wallet/coinselection.h
#	src/wallet/init.cpp
#	src/wallet/test/coinselector_tests.cpp
#	src/wallet/wallet.cpp
#	src/wallet/wallet.h
#	test/functional/test_runner.py
2021-06-24 13:21:20 -04:00
UdjinM6
011a178c60
Other Dash-specific serializations 2021-05-28 12:31:13 +03:00
PastaPastaPasta
c5b919d084
Update copyright (#4115)
* run: `python3 contrib/devtools/copyright_header.py update .`

* bump copyright year
2021-04-20 22:33:02 +03:00
PastaPastaPasta
5074e6df9e
Extensive include refactoring (#4095)
* Simple changes, mostly just includes

* Continued include changes combined with using pointers to avoid including more than necessary in headers

* remove dup include

* masternode-utils.cpp include net.h in all builds

* resolve linter -7 +11

* drop quorums.h from dkgsessionhandler.cpp

* Add `<utilstrencodings.h>`

* Initialize lastMNListForVotingKeys

* Refactor GetMinedCommitment to return sharedptr

Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
2021-04-15 23:41:16 -04:00
PastaPastaPasta
a565437849
refactor: move some protocol constants (#4022)
* governance/net: move protocol constants into version.h, drop GOVERNANCE_FILTER_PROTO_VERSION

Signed-off-by: pasta <pasta@dashboost.org>

* drop GOVERNANCE_FILTER_PROTO_VERSION

Signed-off-by: pasta <pasta@dashboost.org>

* move MIN_COINJOIN_PEER_PROTO_VERSION into version.h and adjust includes accordingly

Signed-off-by: pasta <pasta@dashboost.org>
2021-03-19 11:11:41 +03:00
dustinface
ae506bae66
refactor: PrivateSend -> CoinJoin + Move the tab (#4038)
* qt|wallet|privatesend: Rename PrivateSend to CoinJoin in GUI strings

* qt: Move CoinJoin next to Transactions

* qt: Adjust status tip of privateSendCoinsMenuAction

Co-authored-by: thephez <thephez@users.noreply.github.com>

* rename: privateSend -> coinJoin

* rename: privatesend -> coinjoin

* rename: PrivateSend -> CoinJoin

* rename: use_ps -> use_cj

* rename: PRIVATESEND -> COINJOIN

* rename: privatesend -> coinjoin for files and folders

* refactor: Re-order coinjoin files in cmake/make files

* refactor: Re-order coinjoin includes where it makes sense

* test: Update lint-circular-dependencies.sh

* Few cleanups

* test: test/coinjoin_tests.cpp -> wallet/test/coinjoin_test.cpp

* s/AdvancedPSUI/AdvancedCJUI/g

* s/privateSentAmountChanged/coinJoinAmountChanged/g

* wallet: Rename "ps_salt" backwards compatible

* Minimal PrivateSend -> CoinJoin migration for settings and cmd-line

* wallet: Fix privatesendrounds -> coinjoinrounds migration

* qt: Migrate nPrivateSendAmount -> nCoinJoinAmount

* `-coinjoindenoms` never existed

* Migrate all PS options/settings

* rpc: Formatting only

* qt: Make Send/CoinJoin tabs a bit more distinguishable

Co-authored-by: thephez <thephez@users.noreply.github.com>
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
2021-03-17 18:36:11 -04:00