bitcoin/src/bench
W. J. van der Laan cf24152596
Merge bitcoin/bitcoin#21206: refactor: Make CWalletTx sync state type-safe
d8ee8f3cd3 refactor: Make CWalletTx sync state type-safe (Russell Yanofsky)

Pull request description:

  Current `CWalletTx` state representation makes it possible to set inconsistent states that won't be handled correctly by wallet sync code or serialized & deserialized back into the same form.

  For example, it is possible to call `setConflicted` without setting a conflicting block hash, or `setConfirmed` with no transaction index. And it's possible update individual `m_confirm` and `fInMempool` data fields without setting an overall consistent state that can be serialized and handled correctly.

  Fix this without changing behavior by using `std::variant`, instead of an enum and collection of fields, to represent sync state, so state tracking code is safer and more legible.

  This is a first step to fixing state tracking bugs https://github.com/bitcoin-core/bitcoin-devwiki/wiki/Wallet-Transaction-Conflict-Tracking, by adding an extra margin of safety that can prevent new bugs from being introduced as existing bugs are fixed.

ACKs for top commit:
  laanwj:
    re-ACK d8ee8f3cd3
  jonatack:
    Code review ACK d8ee8f3cd3

Tree-SHA512: b9f15e9d99dbdbdd3ef7a76764e11f66949f50e6227e284126f209e4cb106af6d55e9a9e8c7d4aa216ddc92c6d5acc6f4aa4746f209bbd77f03831b51a2841c3
2021-11-25 19:41:53 +01:00
..
data Add deserialize + CheckBlock benchmarks, and a full block hex 2016-11-09 11:27:59 -08:00
.gitignore Ignore bench_bitcoin binary. 2015-10-06 17:46:12 +02:00
addrman.cpp scripted-diff: Rename CAddrMan to AddrMan 2021-09-28 22:21:10 -04:00
base58.cpp scripted-diff: Bump copyright headers 2020-12-31 09:45:41 +01:00
bech32.cpp bench: clean up includes 2021-09-21 14:45:49 +02:00
bench.cpp bench: clean up includes 2021-09-21 14:45:49 +02:00
bench.h bench: various args improvements 2021-09-21 14:45:49 +02:00
bench_bitcoin.cpp scripted-diff: disable unimplemented ArgsManager BOOL/INT/STRING flags 2021-10-25 10:44:17 -04:00
block_assemble.cpp [refactor] Don't call AcceptToMemoryPool() from outside validation.cpp 2021-11-03 14:34:41 +00:00
ccoins_caching.cpp policy: Treat taproot as always active 2021-11-16 08:20:33 +01:00
chacha20.cpp scripted-diff: Bump copyright headers 2020-12-31 09:45:41 +01:00
chacha_poly_aead.cpp Do not run functions with necessary side-effects in assert() 2020-12-06 00:48:09 +00:00
checkblock.cpp Remove gArgs global from CreateChainParams to aid testing 2020-09-29 10:20:05 +02:00
checkqueue.cpp bench: Use CCheckQueue local thread pool 2020-09-24 06:55:34 +03:00
coin_selection.cpp refactor: Make CWalletTx sync state type-safe 2021-11-15 09:11:44 -05:00
crypto_hash.cpp bench: fixed ubsan implicit conversion 2021-09-21 14:45:49 +02:00
data.cpp refactor: init vectors via std::{begin,end} to avoid pointer arithmetic 2021-01-31 17:35:01 +01:00
data.h bench: Move generated data to a dedicated translation unit 2019-07-02 18:11:15 +01:00
duplicate_inputs.cpp scripted-diff: tree-wide: Remove all review-only assertions 2021-06-10 15:05:24 -04:00
examples.cpp Replace current benchmarking framework with nanobench 2020-06-13 12:24:18 +02:00
gcs_filter.cpp scripted-diff: Bump copyright headers 2020-12-31 09:45:41 +01:00
hashpadding.cpp scripted-diff: Bump copyright headers 2020-12-31 09:45:41 +01:00
lockedpool.cpp scripted-diff: Bump copyright headers 2020-12-31 09:45:41 +01:00
mempool_eviction.cpp Move MakeNoLogFileContext to common libtest_util, and use it in bench 2021-03-03 09:17:37 +01:00
mempool_stress.cpp [refactor] pass coinsview and height to check() 2021-10-04 15:00:28 +01:00
merkle_root.cpp Replace current benchmarking framework with nanobench 2020-06-13 12:24:18 +02:00
nanobench.cpp Replace current benchmarking framework with nanobench 2020-06-13 12:24:18 +02:00
nanobench.h bench: update nanobench from 4.3.4 to 4.3.6 2021-09-21 11:46:01 +02:00
peer_eviction.cpp bench: make EvictionProtection.* work with any number of iterations 2021-09-21 14:45:48 +02:00
poly1305.cpp scripted-diff: Bump copyright headers 2020-12-31 09:45:41 +01:00
prevector.cpp Merge #20464: refactor: Treat CDataStream bytes as uint8_t 2021-02-01 15:17:28 +01:00
rollingbloom.cpp scripted-diff: Move bloom to src/common 2021-10-05 11:10:37 +02:00
rpc_blockchain.cpp rpc: Add level 3 verbosity to getblock RPC call. 2021-10-05 10:42:34 +02:00
rpc_mempool.cpp doc: Fix incorrect C++ named args 2021-11-17 09:25:14 +01:00
util_time.cpp scripted-diff: Bump copyright headers 2020-12-31 09:45:41 +01:00
verify_script.cpp refactor: Pass script verify flags as uint32_t 2021-06-14 08:02:45 +02:00
wallet_balance.cpp Remove gArgs from wallet.h and wallet.cpp 2021-11-09 11:27:06 +01:00