bitcoin/src
Wladimir J. van der Laan cffa5ee132
Merge #11531: Check that new headers are not a descendant of an invalid block (more effeciently)
f3d4adf Make p2p-acceptablock not an extended test (Matt Corallo)
00dcda6 [qa] test that invalid blocks on an invalid chain get a disconnect (Matt Corallo)
015a525 Reject headers building on invalid chains by tracking invalidity (Matt Corallo)
932f118 Accept unrequested blocks with work equal to our tip (Matt Corallo)
3d9c70c Stop always storing blocks from whitelisted peers (Matt Corallo)
3b4ac43 Rewrite p2p-acceptblock in preparation for slight behavior changes (Matt Corallo)

Pull request description:

  @sdaftuar pointed out that the version in #11487 was somewhat DoS-able as someone could feed you a valid chain that forked off the the last checkpoint block and force you to do lots of work just walking backwards across blocks for each new block they gave you. We came up with a few proposals but settled on the one implemented here as likely the simplest without obvious DoS issues. It uses our existing on-load mapBlockIndex walk to make sure everything that descends from an invalid block is marked as such, and then simply caches blocks which we attempted to connect but which were found to be invalid. To avoid DoS issues during IBD, this will need to depend on #11458.

  Includes tests from #11487.

Tree-SHA512: 46aff8332908e122dae72ceb5fe8cd241902c2281a87f58a5fb486bf69d46458d84a096fdcb5f3e8e07fbcf7466232b10c429f4d67855425f11b38ac0bf612e1
2017-11-01 14:42:08 +01:00
..
bench Remove countMaskInv caching in bench framework 2017-09-11 15:51:36 -04:00
compat Merge #11144: Move local include to before system includes 2017-08-28 17:57:44 +02:00
config
consensus Merge #8498: Near-Bugfix: Optimization: Minimize the number of times it is checked that no money... 2017-10-11 10:45:22 +02:00
crypto Merge #11143: Fix include path for bitcoin-config.h 2017-09-05 23:15:55 +02:00
leveldb Update LevelDB with latest Bitcoin-specific patches 2017-08-01 12:40:42 -07:00
obj
obj-test
policy Avoid division by zero in the case of a corrupt estimates file 2017-10-13 08:41:45 +02:00
primitives Merge #8330: Structure Packing Optimizations in C{,Mutable}Transaction 2017-09-06 20:14:52 +02:00
qt Merge #11499: [Qt] Add upload and download info to the peerlist (debug menu) 2017-10-22 15:33:11 -10:00
rpc Merge #11456: Replace relevant services logic with a function suite. 2017-10-13 15:31:19 -07:00
script Merge #9572: Skip witness sighash cache for non-segwit transactions 2017-10-05 19:49:42 +02:00
secp256k1 Bump secp256k1 subtree 2017-09-29 16:02:39 +02:00
support Refactor: Modernize disallowed copy constructors/assignment 2017-09-16 13:06:05 +03:00
test Merge #10409: [tests] Add fuzz testing for BlockTransactions and BlockTransactionsRequest 2017-10-28 16:22:20 +02:00
univalue Bump univalue and fix json formatting in tests 2017-09-29 14:35:46 +02:00
wallet Make listsinceblock refuse unknown block hash 2017-10-26 07:10:59 -04:00
zmq Merge #10809: optim: mark a few classes final 2017-08-21 18:25:48 +02:00
.clang-format Merge #10193: scripted-diff: Remove #include <boost/foreach.hpp> 2017-07-04 18:05:18 +02:00
Makefile.am Fix automake warnings when running autogen.sh 2017-10-21 12:05:36 +08:00
Makefile.bench.include build: Make "make clean" remove all files created when running "make check" 2017-10-04 14:54:41 +02:00
Makefile.leveldb.include build: verify that the assembler can handle crc32 functions 2017-07-13 12:49:05 -04:00
Makefile.qt.include [Build] Add AM_OBJCXXFLAGS and QT_PIE_FLAGS to OBJCXXFLAGS to future-proof darwin targets 2017-10-21 12:13:25 +08:00
Makefile.qttest.include Remove redundant testutil files 2017-09-05 15:02:17 +12:00
Makefile.test.include Merge #11433: qa: Restore bitcoin-util-test py2 compatibility 2017-10-03 21:25:00 +02:00
addrdb.cpp Deduplicate addrdb.cpp and use CHashWriter/Verifier 2017-06-01 16:42:07 -07:00
addrdb.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
addrman.cpp scripted-diff: Use the C++11 keyword nullptr to denote the pointer literal instead of the macro NULL 2017-08-07 07:36:37 +02:00
addrman.h when clearing addrman clear mapInfo and mapAddr 2017-09-05 17:32:06 -07:00
amount.h Consensus: Policy: MOVEONLY: Move CFeeRate out of the consensus module 2017-05-03 18:00:13 +02:00
arith_uint256.cpp Fix instantiation and array accesses in class base_uint<BITS> 2017-06-07 17:21:29 +00:00
arith_uint256.h Prefer compile-time checking over run-time checking 2017-08-17 00:42:32 +02:00
base58.cpp Merge #10961: Improve readability of DecodeBase58Check(...) 2017-10-09 16:41:06 +02:00
base58.h Implement {Encode,Decode}Destination without CBitcoinAddress 2017-09-23 14:45:01 -07:00
bech32.cpp Import Bech32 C++ reference code & tests 2017-09-28 16:02:16 -07:00
bech32.h Import Bech32 C++ reference code & tests 2017-09-28 16:02:16 -07:00
bitcoin-cli-res.rc
bitcoin-cli.cpp rpc: Handle `getinfo` locally in bitcoin-cli w/ `-getinfo` 2017-09-27 21:53:07 -04:00
bitcoin-tx-res.rc
bitcoin-tx.cpp Merge #10898: Fix invalid checks (NULL checks after dereference, redundant checks, etc.) 2017-10-12 23:55:50 +02:00
bitcoind-res.rc
bitcoind.cpp Init: Remove redundant exit(EXIT_FAILURE) instances and replace with return false 2017-10-16 22:16:36 +01:00
blockencodings.cpp Fix typos 2017-07-15 14:28:40 +02:00
blockencodings.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
bloom.cpp scripted-diff: Remove #include <boost/foreach.hpp> 2017-06-22 03:48:52 +02:00
bloom.h
chain.cpp fix typo in comment of chain.cpp 2017-10-09 19:14:47 +02:00
chain.h Ensure that data types are consistent 2017-09-07 11:17:35 +08:00
chainparams.cpp Remove my testnet DNS seed as I currently don't have the capacity to keep it up to date. 2017-10-19 12:47:19 +02:00
chainparams.h Implement BIP173 addresses and tests 2017-09-28 16:24:30 -07:00
chainparamsbase.cpp Merge #10825: net: set regtest JSON-RPC port to 18443 to avoid conflict with testnet 18332 2017-09-06 01:18:35 +02:00
chainparamsbase.h Chainparams: Use a regular factory for creating chainparams 2017-05-03 18:15:47 +02:00
chainparamsseeds.h p2p: Hardcoded seeds update pre-0.15 branch 2017-07-30 14:04:51 +02:00
checkpoints.cpp scripted-diff: Use the C++11 keyword nullptr to denote the pointer literal instead of the macro NULL 2017-08-07 07:36:37 +02:00
checkpoints.h
checkqueue.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
clientversion.cpp Correct typo in comments 2017-09-29 14:50:30 +08:00
clientversion.h Fix build warning from #error text 2017-04-07 14:37:25 -04:00
coins.cpp Use nullptr instead of zero (0) as the null pointer constant 2017-08-16 10:24:18 +02:00
coins.h Refactor: Modernize disallowed copy constructors/assignment 2017-09-16 13:06:05 +03:00
compat.h Move CloseSocket out of SetSocketNonBlocking and pass SOCKET by const reference in SetSocket* functions 2017-07-22 09:11:55 +02:00
compressor.cpp Fix subscript[0] in compressor.cpp 2017-07-08 13:33:01 -07:00
compressor.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
core_io.h Pass serialization flags and whether to include hex to TxToUniv 2017-08-17 10:42:51 -07:00
core_memusage.h Avoid dereference-of-casted-pointer 2017-07-07 10:45:31 -07:00
core_read.cpp Fix signed/unsigned comparison warning introduced in c8e29d7ff0. 2017-07-12 14:03:42 -04:00
core_write.cpp Introduce wrappers around CBitcoinAddress 2017-09-06 13:07:45 -07:00
cuckoocache.h Fix header guards using reserved identifiers 2017-08-26 02:56:53 +03:00
dbwrapper.cpp Merge #10701: Remove the virtual specifier for functions with the override specifier 2017-09-04 18:06:44 -07:00
dbwrapper.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
fs.cpp Remove unused Boost includes 2017-06-09 10:25:26 +02:00
fs.h [Trivial] Add BITCOIN_FS_H endif footer in fs.h 2017-05-19 02:01:28 -07:00
hash.cpp Cleanup (safe, it was checked) subscript[0] in MurmurHash3 (and cleanup MurmurHash3 to be more clear). 2017-07-08 13:33:01 -07:00
hash.h Squashed 'src/secp256k1/' changes from 84973d393..0b7024185 2017-09-29 16:00:20 +02:00
httprpc.cpp Fix uninitialized URI in batch RPC requests 2017-10-03 15:25:00 -04:00
httprpc.h Remove unnecessary forward class declarations in header files 2017-06-12 20:37:43 +02:00
httpserver.cpp Merge #11006: Improve shutdown process 2017-10-18 16:06:27 +02:00
httpserver.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
indirectmap.h
init.cpp Merge #11495: [trivial] Make namespace explicit for is_regular_file 2017-10-18 16:35:19 +02:00
init.h init: Factor out AppInitLockDataDirectory 2017-07-17 14:56:52 +02:00
key.cpp scripted-diff: Use the C++11 keyword nullptr to denote the pointer literal instead of the macro NULL 2017-08-07 07:36:37 +02:00
key.h Remove some unused functions and methods 2017-09-21 23:40:33 -07:00
keystore.cpp Remove unused Boost includes 2017-06-09 10:25:26 +02:00
keystore.h Merge #10916: add missing lock to crypter GetKeys() 2017-09-07 22:04:18 +02:00
limitedmap.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
memusage.h scripted-diff: Remove #include <boost/foreach.hpp> 2017-06-22 03:48:52 +02:00
merkleblock.cpp Consolidate CMerkleBlock constructor into a single method 2017-09-20 20:35:54 -07:00
merkleblock.h Consolidate CMerkleBlock constructor into a single method 2017-09-20 20:35:54 -07:00
miner.cpp Deprecate confusing blockmaxsize, fix getmininginfo output 2017-09-11 15:51:25 -04:00
miner.h Remove nBlockMaxSize from miner opt struct as it is no longer used. 2017-09-18 23:40:38 +00:00
net.cpp Switch DNSSeed-needed metric to any-automatic-nodes, not services 2017-10-13 13:29:25 -04:00
net.h Rename fAddnode to a more-descriptive "manual_connection" 2017-10-13 13:25:58 -04:00
net_processing.cpp Merge #11531: Check that new headers are not a descendant of an invalid block (more effeciently) 2017-11-01 14:42:08 +01:00
net_processing.h Permit disconnection of outbound peers on bad/slow chains 2017-10-26 13:43:53 -04:00
netaddress.cpp scripted-diff: Use the C++11 keyword nullptr to denote the pointer literal instead of the macro NULL 2017-08-07 07:36:37 +02:00
netaddress.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
netbase.cpp Fix a vs. an typo 2017-10-09 10:37:40 +02:00
netbase.h net: remove now-unused functions 2017-09-18 13:47:47 -04:00
netmessagemaker.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
noui.cpp
noui.h
pow.cpp scripted-diff: Use the C++11 keyword nullptr to denote the pointer literal instead of the macro NULL 2017-08-07 07:36:37 +02:00
pow.h
prevector.h Fix header guards using reserved identifiers 2017-08-26 02:56:53 +03:00
protocol.cpp Merge #9544: [trivial] Add end of namespace comments. Improve consistency. 2017-06-26 13:40:26 +02:00
protocol.h Replace relevant services logic with a function suite. 2017-10-13 13:25:57 -04:00
pubkey.cpp Remove dead store in ecdsa_signature_parse_der_lax. 2017-08-17 14:28:35 +02:00
pubkey.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
random.cpp Merge #10843: Add attribute [[noreturn]] (C++11) to functions that will not return 2017-08-22 09:38:49 +02:00
random.h Merge #10377: Use rdrand as entropy source on supported platforms 2017-06-14 15:22:15 +02:00
rest.cpp Remove duplicate uriParts.size() > 0 check 2017-10-02 15:47:44 +02:00
reverse_iterator.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
reverselock.h
scheduler.cpp Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
scheduler.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
serialize.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
streams.h Refactor: Modernize disallowed copy constructors/assignment 2017-09-16 13:06:05 +03:00
sync.cpp Remove unused fTry from push_lock 2017-09-30 22:43:55 +01:00
sync.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
threadinterrupt.cpp
threadinterrupt.h
threadsafety.h
timedata.cpp scripted-diff: stop using the gArgs wrappers 2017-08-14 17:02:10 +02:00
timedata.h
tinyformat.h [Util] Update tinyformat.h 2017-10-29 21:12:12 +08:00
torcontrol.cpp Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
torcontrol.h
txdb.cpp Merge #10770: Drop upgrade-cancel callback registration for a generic "cancelable" 2017-09-07 09:21:04 -07:00
txdb.h Merge #11107: Fix races in AppInitMain and others with lock and atomic bools 2017-10-05 15:03:36 +02:00
txmempool.cpp Merge #8498: Near-Bugfix: Optimization: Minimize the number of times it is checked that no money... 2017-10-11 10:45:22 +02:00
txmempool.h Make float <-> int casts explicit outside of test, qt, CFeeRate 2017-09-11 15:51:37 -04:00
ui_interface.cpp
ui_interface.h Drop upgrade-cancel callback registration for a generic "resumeable" 2017-08-20 20:04:15 -04:00
uint256.cpp Changing &vec[0] to vec.data(), what 9804 missed 2017-09-08 10:36:26 +12:00
uint256.h Remove some unused functions and methods 2017-09-21 23:40:33 -07:00
undo.h Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
util.cpp Merge #10939: [init] Check non-emptiness of -blocknotify command prior to executing 2017-10-04 14:54:09 +02:00
util.h Squashed 'src/secp256k1/' changes from 84973d393..0b7024185 2017-09-29 16:00:20 +02:00
utilmoneystr.cpp
utilmoneystr.h doc: Add comment to use ValueFromAmount/AmountFromValue for JSON, not utilmoneystr 2017-08-07 17:10:42 +02:00
utilstrencodings.cpp Allow setting nMinimumChainWork on command line 2017-09-05 15:05:28 -04:00
utilstrencodings.h Implement BIP173 addresses and tests 2017-09-28 16:24:30 -07:00
utiltime.cpp scripted-diff: Use the C++11 keyword nullptr to denote the pointer literal instead of the macro NULL 2017-08-07 07:36:37 +02:00
utiltime.h [logging] log system time and mock time 2017-05-10 15:49:00 -04:00
validation.cpp Merge #11531: Check that new headers are not a descendant of an invalid block (more effeciently) 2017-11-01 14:42:08 +01:00
validation.h Disconnect outbound peers relaying invalid headers 2017-10-27 16:29:12 -04:00
validationinterface.cpp Fix validationinterface build on super old boost/clang 2017-10-02 18:24:59 -04:00
validationinterface.h Remove declaration of unused function: void UpdatedTransaction(const uint256 &) 2017-07-15 20:04:04 +02:00
version.h Remove unused constant MEMPOOL_GD_VERSION 2017-06-09 01:45:36 +02:00
versionbits.cpp Declare single-argument (non-converting) constructors "explicit" 2017-08-16 16:33:25 +02:00
versionbits.h scripted-diff: Use the C++11 keyword nullptr to denote the pointer literal instead of the macro NULL 2017-08-07 07:36:37 +02:00
warnings.cpp scripted-diff: stop using the gArgs wrappers 2017-08-14 17:02:10 +02:00
warnings.h remove some unused functions 2017-07-22 09:55:57 +02:00