bitcoin/src
fanquake 5abbc9afec
Merge bitcoin/bitcoin#24832: index: Verify the block filter hash when reading the filter from disk.
e734228d85 Update GCSFilter benchmarks (Calvin Kim)
aee9a8140b Add GCSFilterDecodeSkipCheck benchmark (Patrick Strateman)
299023c1d9 Add GCSFilterDecode and GCSBlockFilterGetHash benchmarks. (Patrick Strateman)
b0a53d50d9 Make sanity check in GCSFilter constructor optional (Patrick Strateman)

Pull request description:

  This PR picks up the abandoned #19280

  BlockFilterIndex was depending on `GolombRiceDecode()` during the filter decode to sanity check that the filter wasn't corrupt. However, we can check for corruption by ensuring that the encoded blockfilter's hash matches up with the one stored in the index database.

  Benchmarks that were added in #19280 showed that checking the hash is much faster.

  The benchmarks were changed to nanobench and the relevant benchmarks were like below, showing a clear win for the hash check method.

  ```
  |             ns/elem |              elem/s |    err% |        ins/elem |       bra/elem |   miss% |     total | benchmark
  |--------------------:|--------------------:|--------:|----------------:|---------------:|--------:|----------:|:----------
  |              531.40 |        1,881,819.43 |    0.3% |        3,527.01 |         411.00 |    0.2% |      0.01 | `DecodeCheckedGCSFilter`
  |          258,220.50 |            3,872.66 |    0.1% |    2,990,092.00 |     586,706.00 |    1.7% |      0.01 | `DecodeGCSFilter`
  |           13,036.77 |           76,706.09 |    0.3% |       64,238.24 |         513.04 |    0.2% |      0.01 | `BlockFilterGetHash`
  ```

ACKs for top commit:
  mzumsande:
    Code Review ACK e734228d85
  theStack:
    Code-review ACK e734228d85
  stickies-v:
    ACK e734228d85
  ryanofsky:
    Code review ACK e734228d85, with caveat that I mostly paid attention to the main code, not the changes to the benchmark. Only changes since last review were changes to the benchmark code.

Tree-SHA512: 02b86eab7b554e1a57a15b17a4d6d71faa91b556c637b0da29f0c9ee76597a110be8e3b4d0c158d4cab04af0623de18b764837be0ec2a72afcfe1ad9c78a83c6
2022-07-07 17:59:02 +01:00
..
bench Merge bitcoin/bitcoin#24832: index: Verify the block filter hash when reading the filter from disk. 2022-07-07 17:59:02 +01:00
common refactor: make GetRand a template, remove GetRandInt 2022-04-22 09:04:39 -05:00
compat compat: remove glibcxx sanity checks 2022-05-28 09:43:02 +01:00
config
consensus Remove LOCKTIME_MEDIAN_TIME_PAST constant 2022-06-22 09:54:15 +02:00
crc32c Update crc32c subtree 2021-09-29 14:10:29 +02:00
crypto build: test for timingsafe_bcmp 2022-06-10 12:39:08 +01:00
index Merge bitcoin/bitcoin#24832: index: Verify the block filter hash when reading the filter from disk. 2022-07-07 17:59:02 +01:00
init scripted-diff: Avoid incompatibility with CMake AUTOUIC feature 2022-06-14 10:38:51 +02:00
interfaces settings: Add resetSettings() method 2022-05-19 11:32:56 -04:00
ipc refactor: Block unsafe fs::path std::string conversion calls 2021-10-05 11:10:47 -04:00
kernel mempool: Use m_limit for UpdateTransactionsFromBlock 2022-06-28 15:49:15 -04:00
leveldb build: Minor leveldb subtree update 2022-03-02 15:25:48 +01:00
logging util, refactor: Add UNIQUE_NAME helper macro 2022-02-16 14:59:20 +02:00
minisketch Update minisketch subtree to latest master 2022-06-29 16:35:02 +01:00
node Merge bitcoin/bitcoin#25500: refactor: Move inbound eviction logic to its own translation unit 2022-07-07 17:54:37 +01:00
policy Merge bitcoin/bitcoin#25290: [kernel 3a/n] Decouple CTxMemPool from ArgsManager 2022-06-29 09:13:31 +02:00
primitives Merge bitcoin/bitcoin#24350: Primitives: Correct CTransaction deserialization docstring 2022-02-19 09:35:10 +01:00
qt Merge bitcoin-core/gui#617: Reset options, notify user about backup creation 2022-06-29 00:35:06 +02:00
rpc Merge bitcoin/bitcoin#25471: rpc: Disallow gettxoutsetinfo queries for a specific block with use_index=false 2022-07-01 14:56:23 +02:00
script sign: Use sigdata taproot spenddata when signing 2022-06-27 16:47:48 -04:00
secp256k1 Update secp256k1 subtree to latest upstream master 2022-06-11 14:55:18 +01:00
support build: globally define NOMINMAX 2022-06-20 12:22:05 +01:00
test Merge bitcoin/bitcoin#25500: refactor: Move inbound eviction logic to its own translation unit 2022-07-07 17:54:37 +01:00
univalue refactor: cleanups post unsubtree'ing univalue 2022-06-15 12:56:44 +01:00
util Merge bitcoin/bitcoin#24836: add RPC (-regtest only) for testing package policy 2022-06-30 15:43:50 +01:00
wallet Merge bitcoin/bitcoin#25507: wallet: don't add change fee to target if subtracting fees from output 2022-07-06 11:01:07 -04:00
zmq scripted-diff: remove duplicate categories from LogPrint output 2022-06-06 12:12:03 +02:00
.bear-tidy-config tidy: enable modernize-use-nullptr 2022-04-26 10:43:33 +01:00
.clang-format Use c++17 in clang-format 2021-11-12 11:46:34 +01:00
.clang-tidy tidy: use modernize-use-default-member-init 2022-05-17 17:19:07 +01:00
addrdb.cpp Merge bitcoin/bitcoin#24925: refactor: make GetRand a template, remove GetRandInt 2022-05-12 08:57:22 +02:00
addrdb.h [net] Move asmap into NetGroupManager 2022-04-20 14:29:29 +01:00
addrman_impl.h [netgroupman] Add GetMappedAS() and GetGroup() 2022-04-20 14:35:52 +01:00
addrman.cpp Remove redundant nLastTry check 2022-06-08 13:35:32 +02:00
addrman.h [net] Move asmap into NetGroupManager 2022-04-20 14:29:29 +01:00
arith_uint256.cpp Merge bitcoin/bitcoin#24077: util: Make base_uint::GetHex() and base_uint::SetHex() not depend on uint256 2022-04-14 07:15:22 +02:00
arith_uint256.h Remove duplicate static_asserts 2022-04-14 19:26:22 +02:00
attributes.h
banman.cpp scripted-diff: Avoid incompatibility with CMake AUTOUIC feature 2022-06-14 10:38:51 +02:00
banman.h refactor: Add thread safety annotation to BanMan::SweepBanned() 2022-05-20 15:17:00 +02:00
base58.cpp scripted-diff: Rename ValidAsCString to ContainsNoNUL 2022-04-27 14:16:35 +02:00
base58.h refactor: Remove defunct attributes.h includes 2022-05-21 13:54:33 -05:00
bech32.cpp Avoid implicit-integer-sign-change in bech32.cpp 2022-02-25 09:43:54 +01:00
bech32.h Make Bech32 LocateErrors return error list rather than using out-arg 2021-12-06 14:17:41 +13:00
bitcoin-chainstate.cpp kernel: SanityChecks: Return an error struct 2022-06-02 12:22:46 -04:00
bitcoin-cli-res.rc windres: use PACKAGE_VERSION rather than building more version numbers 2021-08-17 16:54:47 +08:00
bitcoin-cli.cpp compat: Consolidate mingw-w64 ASLR workaround for upstream libsecp changes 2022-06-11 14:55:13 +01:00
bitcoin-tx-res.rc windres: use PACKAGE_VERSION rather than building more version numbers 2021-08-17 16:54:47 +08:00
bitcoin-tx.cpp compat: Consolidate mingw-w64 ASLR workaround for upstream libsecp changes 2022-06-11 14:55:13 +01:00
bitcoin-util-res.rc windres: use PACKAGE_VERSION rather than building more version numbers 2021-08-17 16:54:47 +08:00
bitcoin-util.cpp compat: Consolidate mingw-w64 ASLR workaround for upstream libsecp changes 2022-06-11 14:55:13 +01:00
bitcoin-wallet-res.rc windres: use PACKAGE_VERSION rather than building more version numbers 2021-08-17 16:54:47 +08:00
bitcoin-wallet.cpp compat: Consolidate mingw-w64 ASLR workaround for upstream libsecp changes 2022-06-11 14:55:13 +01:00
bitcoind-res.rc windres: use PACKAGE_VERSION rather than building more version numbers 2021-08-17 16:54:47 +08:00
bitcoind.cpp scripted-diff: Avoid incompatibility with CMake AUTOUIC feature 2022-06-14 10:38:51 +02:00
blockencodings.cpp Remove fUseWTXID parameter from CBlockHeaderAndShortTxIDs constructor 2022-05-17 10:37:10 +01:00
blockencodings.h Remove fUseWTXID parameter from CBlockHeaderAndShortTxIDs constructor 2022-05-17 10:37:10 +01:00
blockfilter.cpp Make sanity check in GCSFilter constructor optional 2022-05-02 16:04:00 +09:00
blockfilter.h Make sanity check in GCSFilter constructor optional 2022-05-02 16:04:00 +09:00
chain.cpp Avoid integer sanitizer warnings in chain.o 2022-01-25 10:49:46 +01:00
chain.h Add doc/design/libraries.md 2022-02-15 09:29:53 -05:00
chainparams.cpp refactor: introduce single-separator split helper SplitString 2022-04-11 22:19:46 +02:00
chainparams.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
chainparamsbase.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
chainparamsbase.h
chainparamsseeds.h net: Update hardcoded seeds for 23.x 2022-02-22 15:15:27 +01:00
checkqueue.h Increase threadsafety annotation coverage 2022-05-12 02:25:55 +10:00
clientversion.cpp refactor: shift CopyrightHolders() and LicenseInfo() to clientversion.cpp 2022-02-22 15:36:19 +00:00
clientversion.h refactor: shift CopyrightHolders() and LicenseInfo() to clientversion.cpp 2022-02-22 15:36:19 +00:00
coins.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
coins.h refactor: remove unused methods {CDBIterator,CCoinsViewDBCursor}::GetValueSize() 2022-06-21 16:19:10 +02:00
compat.h build: globally define NOMINMAX 2022-06-20 12:22:05 +01:00
compressor.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
compressor.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
core_io.h refactor: Remove defunct attributes.h includes 2022-05-21 13:54:33 -05:00
core_memusage.h
core_read.cpp core_read: Replace boost::split with SplitString 2022-05-04 07:34:47 +02:00
core_write.cpp refactor: add stdd:: includes to core_write 2022-03-30 20:11:15 +01:00
cuckoocache.h Add FastRange32 function and use it throughout the codebase 2022-01-07 13:37:47 -05:00
dbwrapper.cpp Use more specific path when including memenv.h header 2022-06-23 15:33:01 +02:00
dbwrapper.h refactor: remove unused method CDBWrapper::CompactRange 2022-06-23 13:59:25 +02:00
deploymentinfo.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
deploymentinfo.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
deploymentstatus.cpp validation: move g_versionbitscache into ChainstateManager 2022-05-10 12:09:33 +10:00
deploymentstatus.h validation: move g_versionbitscache into ChainstateManager 2022-05-10 12:09:33 +10:00
dummywallet.cpp wallet: ensure wallet files are not reused across chains 2022-02-16 15:02:26 +02:00
external_signer.cpp parsing external signer master fingerprint string as bytes instead of caring for lower/upper case in ExternalSigner::SignTransaction 2022-05-07 11:09:52 +02:00
external_signer.h refactor: make ExternalSigner NetworkArg() and m_chain private 2021-06-16 10:48:58 +02:00
flatfile.cpp Disallow more unsafe string->path conversions allowed by path append operators 2022-04-21 12:01:00 -05:00
flatfile.h
fs.cpp build: globally define NOMINMAX 2022-06-20 12:22:05 +01:00
fs.h Disallow more unsafe string->path conversions allowed by path append operators 2022-04-21 12:01:00 -05:00
hash.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
hash.h refactor: Remove defunct attributes.h includes 2022-05-21 13:54:33 -05:00
httprpc.cpp scripted-diff: Use getInt<T> over get_int/get_int64 2022-05-18 19:15:03 +02:00
httprpc.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
httpserver.cpp Merge bitcoin/bitcoin#25338: scripted-diff: Avoid incompatibility with CMake AUTOUIC feature 2022-06-15 08:10:38 +02:00
httpserver.h Merge bitcoin/bitcoin#24681: build: Bump libevent minimum version up to 2.1.8 2022-04-06 13:19:36 +01:00
i2p.cpp net: rename Sock::Reset() to Sock::Close() and make it private 2022-06-22 09:19:43 +02:00
i2p.h Increase threadsafety annotation coverage 2022-05-12 02:25:55 +10:00
indirectmap.h
init.cpp rephrase error for invalid timeout 2022-06-30 14:16:04 +05:30
init.h Move init::SanityCheck to kernel::SanityCheck 2022-06-02 11:42:12 -04:00
key_io.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
key_io.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
key.cpp refactor: Use Span of std::byte in CExtKey::SetSeed 2022-04-27 19:53:37 +02:00
key.h refactor: Use Span of std::byte in CExtKey::SetSeed 2022-04-27 19:53:37 +02:00
logging.cpp logging: fix logging empty threadname 2022-06-02 22:30:30 +08:00
logging.h logging: add LogPrintfCategory to log unconditionally with category 2022-06-08 14:02:54 +02:00
Makefile.am Merge bitcoin/bitcoin#25500: refactor: Move inbound eviction logic to its own translation unit 2022-07-07 17:54:37 +01:00
Makefile.bench.include Merge bitcoin/bitcoin#24852: util: optimize HexStr 2022-05-04 20:36:09 +02:00
Makefile.crc32c.include build: Create .la library for crc32c 2022-04-26 16:25:38 -04:00
Makefile.leveldb.include Use more specific path when including memenv.h header 2022-06-23 15:33:01 +02:00
Makefile.minisketch.include build: add minisketch build file and include it 2021-10-21 09:37:30 +08:00
Makefile.qt_locale.include qt: Pre-branch translation updates for 23.x 2022-02-28 16:59:56 +01:00
Makefile.qt.include qt, refactor: Add transactionoverviewwidget.cpp source file 2022-06-14 16:55:22 +02:00
Makefile.qttest.include build: Remove vestigial LIBLEVELDB_SSE42 2022-04-11 16:56:34 -04:00
Makefile.test_fuzz.include build: Don't add unrelated libs to LIBTEST_* 2022-04-11 16:56:34 -04:00
Makefile.test_util.include build: Don't add unrelated libs to LIBTEST_* 2022-04-11 16:56:34 -04:00
Makefile.test.include fuzz: add low-level target for txorphanage 2022-07-06 22:13:54 +08:00
Makefile.univalue.include Integrate univalue into our buildsystem 2021-10-11 20:46:25 +08:00
mapport.cpp Don't use zero as null pointer constant (-Wzero-as-null-pointer-constant) 2022-04-26 10:41:45 +01:00
mapport.h
mempool_args.cpp mempool: Introduce (still-unused) MemPoolLimits 2022-06-28 15:46:10 -04:00
mempool_args.h mempool: Introduce (still-unused) MemPoolLimits 2022-06-28 15:46:10 -04:00
memusage.h
merkleblock.cpp
merkleblock.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
net_permissions.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
net_permissions.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
net_processing.cpp Merge bitcoin/bitcoin#25454: p2p: Avoid multiple getheaders messages in flight to the same peer 2022-07-04 21:28:21 +01:00
net_processing.h Pass Peer& to Misbehaving() 2022-05-27 16:59:45 +02:00
net_types.cpp scripted-diff: Use getInt<T> over get_int/get_int64 2022-05-18 19:15:03 +02:00
net_types.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
net.cpp [net] Move eviction logic to its own file 2022-07-06 18:13:54 +02:00
net.h [net] Move eviction logic to its own file 2022-07-06 18:13:54 +02:00
netaddress.cpp refactor: use C++11 default initializers 2022-05-17 17:18:58 +01:00
netaddress.h refactor: Remove defunct attributes.h includes 2022-05-21 13:54:33 -05:00
netbase.cpp scripted-diff: Convert global Mutexes to GlobalMutexes 2022-05-21 01:23:23 +10:00
netbase.h net: use Sock::SetSockOpt() instead of standalone SetSocketNoDelay() 2022-04-15 09:39:25 +02:00
netgroup.cpp [netgroup] Use nStartByte as offset for the last byte of the group 2022-04-25 15:09:14 +02:00
netgroup.h [netgroupman] Remove NetGroupManager::GetAsmap() 2022-04-20 14:35:53 +01:00
netmessagemaker.h
noui.cpp scripted-diff: Avoid incompatibility with CMake AUTOUIC feature 2022-06-14 10:38:51 +02:00
noui.h
outputtype.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
outputtype.h refactor: Remove defunct attributes.h includes 2022-05-21 13:54:33 -05:00
pow.cpp
pow.h
prevector.h Merge bitcoin/bitcoin#24962: prevector: enforce is_trivially_copyable_v 2022-05-16 16:25:47 +02:00
protocol.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
protocol.h Remove no-op TIME_INIT on deser 2022-05-30 13:55:39 +02:00
psbt.cpp psbt: Implement merge for Taproot fields 2022-06-27 16:47:48 -04:00
psbt.h Implement de/ser of PSBT's Taproot fields 2022-06-27 16:47:48 -04:00
pubkey.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
pubkey.h Add serialization methods to XOnlyPubKey 2022-06-27 16:47:48 -04:00
random.cpp Use consistent wording in log 2022-06-21 22:54:55 +07:00
random.h Merge bitcoin/bitcoin#24925: refactor: make GetRand a template, remove GetRandInt 2022-05-12 08:57:22 +02:00
randomenv.cpp tidy: add readability-redundant-declaration 2022-05-01 10:39:40 +01:00
randomenv.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
rest.cpp rest/getutxos: Don't construct empty mempool 2022-06-15 17:28:55 -04:00
rest.h Handle query string when parsing data format 2022-03-10 12:01:53 +01:00
reverse_iterator.h
scheduler.cpp refactor: use C++11 default initializers 2022-05-17 17:18:58 +01:00
scheduler.h Increase threadsafety annotation coverage 2022-05-12 02:25:55 +10:00
serialize.h scripted-diff: rename BytePtr to AsBytePtr 2022-04-26 09:41:45 +01:00
shutdown.cpp scripted-diff: Avoid incompatibility with CMake AUTOUIC feature 2022-06-14 10:38:51 +02:00
shutdown.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
signet.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
signet.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
span.h scripted-diff: rename BytePtr to AsBytePtr 2022-04-26 09:41:45 +01:00
streams.h scripted-diff: Rename nReadPos to m_read_pos in streams.h 2022-02-09 17:21:04 +01:00
sync.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
sync.h sync.h: Imply negative assertions when calling LOCK 2022-05-21 01:23:23 +10:00
threadinterrupt.cpp
threadinterrupt.h Increase threadsafety annotation coverage 2022-05-12 02:25:55 +10:00
threadsafety.h
timedata.cpp scripted-diff: Avoid incompatibility with CMake AUTOUIC feature 2022-06-14 10:38:51 +02:00
timedata.h timedata: make it possible to reset the state 2022-03-02 15:40:30 +01:00
tinyformat.h Use C++17 [[fallthrough]] attribute, and drop -Wno-implicit-fallthrough 2021-07-05 08:59:38 +03:00
torcontrol.cpp logging: use LogPrintfCategory rather than a manual category 2022-06-08 14:02:54 +02:00
torcontrol.h torcontrol: Query Tor for correct -onion configuration 2022-03-15 01:33:52 +00:00
txdb.cpp refactor: remove unused methods {CDBIterator,CCoinsViewDBCursor}::GetValueSize() 2022-06-21 16:19:10 +02:00
txdb.h Remove utxo db upgrade code 2022-03-10 13:05:29 +01:00
txmempool.cpp Merge bitcoin/bitcoin#25290: [kernel 3a/n] Decouple CTxMemPool from ArgsManager 2022-06-29 09:13:31 +02:00
txmempool.h Merge bitcoin/bitcoin#25290: [kernel 3a/n] Decouple CTxMemPool from ArgsManager 2022-06-29 09:13:31 +02:00
txorphanage.cpp scripted-diff: Update txorphanage naming convention 2021-02-27 01:08:09 +10:00
txorphanage.h [net processing] Add Orphanage empty consistency check 2021-07-20 13:12:42 +01:00
txrequest.cpp scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
txrequest.h
uint256.cpp
uint256.h Use spans of std::byte in serialize 2022-01-02 11:40:31 +01:00
undo.h
validation.cpp Merge bitcoin/bitcoin#25290: [kernel 3a/n] Decouple CTxMemPool from ArgsManager 2022-06-29 09:13:31 +02:00
validation.h mempool: Pass in -mempoolexpiry instead of referencing gArgs 2022-06-28 15:42:23 -04:00
validationinterface.cpp refactor: Remove defunct attributes.h includes 2022-05-21 13:54:33 -05:00
validationinterface.h scripted-diff: Rename MainSignalsInstance() class to MainSignalsImpl() 2022-05-09 18:35:44 +02:00
version.h
versionbits.cpp Sanity assert GetAncestor() != nullptr where appropriate 2022-05-05 15:55:44 +02:00
versionbits.h Increase threadsafety annotation coverage 2022-05-12 02:25:55 +10:00
walletinitinterface.h Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
warnings.cpp scripted-diff: Convert global Mutexes to GlobalMutexes 2022-05-21 01:23:23 +10:00
warnings.h scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00