elements/src
Wladimir J. van der Laan 651e343888
Merge #16974: Walk pindexBestHeader back to ChainActive().Tip() if it is invalid
0a50019fde Walk pindexBestHeader back to ChainActive().Tip() if it is invalid (Matt Corallo)

Pull request description:

  Instead of keeping pindexBestHeader set to the best header we've
  ever seen, reset it back to our validated tip if we find an ancestor
  of it turns out to be invalid. While the name is now a bit confusing,
  this matches much better with how it is used in practice, see below.
  Further, this opens up more use-cases for it in the future, namely
  aggressively searching for new peers in case we have discovered
  (possibly via some covert channel) headers which we do not know to be
  invalid, but which we cannot find block data for.

  Places pindexBestHeader is used:

   * Various GUI displays of the best header and getblockchaininfo["headers"],
     I don't think changing this is bad, and if anything this is less confusing
     in the presence of an invalid block.
   * IsCurrentForFeeEstimation(): If anything I think ensuring pindexBestHeader
     isn't some crazy invalid chain is better than the alternative, even in the
     case where you are rejecting the current chain due to hardware error (since
     hopefully in that case you won't get any new blocks anyway).
   * ConnectBlock assumevalid checks: We use pindexBestHeader to check that the
     block we're connecting leads to something with nMinimumChainWork (preventing
     a user-set assumevalid from having bogus work) and that the block we're
     connecting leads to pindexBestHeader (I'm not too worried about this one -
     it's nice to "disable" assumevalid if we have a long invalid headers chain,
     but I don't see it as a critical protection).
   * BlockRequestAllowed() uses pindexBestHeader as its target to ensure the
     requested block is within a month of the "current chain". I don't think this
     is a meaningful difference, if we're rejecting the current tip we're
     trivially fingerprintable anyway, and if the chain really does have a bunch
     of invalid crap near the tip, using the best not-invalid header is likely a
     better criteria.
   * ProcessGetBlockData uses pindexBestHeader as the "current chain" definition
     of whether a block request is "historical" for the purpose of bandwidth
     limiting. Similarly, I don't see why this is a meaningful change.
   * We use pindexBestHeader for requesting missing headers on receipt of a
     headers/compact block message or block inv as well as for initial getheaders.
     I think this is definitely wrong, using the best not-invalid header for such
     requests is much better.
   * We use pindexBestHeader to define the "current chain" for deciding when
     we're close to done with initial headers sync. I don't think this is a
     meaningful change.
   * We use pindexBestHeader to decide if initial headers sync has timed out. If
     we're rejecting the chain due to hardware error this may result in
     additional cases where we ban a peer, but this is already true, so I think
     its fine.

ACKs for top commit:
  fjahr:
    ACK 0a50019fde
  kallewoof:
    ACK 0a50019fde
  ariard:
    utACK 0a50019

Tree-SHA512: 2ecfa973a9878a00313ae7ede94a9bd7710e0caf55b544b10bbc46dc463a0478cbaf477e6cdd072356d5a0c5fb3848e9339284af785a2995c20bae8bd23f23e5
2020-02-03 12:28:38 +01:00
..
bench Merge #17261: Make ScriptPubKeyMan an actual interface and the wallet to have multiple 2020-01-30 17:21:21 +13:00
compat scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
config
consensus scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
crypto Merge #17691: doc: Add missed copyright headers 2020-01-16 15:58:35 -05:00
index scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
interfaces Refactor: Replace SigningProvider pointers with unique_ptrs 2020-01-23 16:35:08 -05:00
leveldb
logging scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
node Merge #17156: psbt: check that various indexes and amounts are within bounds 2020-01-29 19:39:50 +08:00
policy scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
primitives scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
qt Merge #17937: gui: Remove WalletView and BitcoinGUI circular dependency 2020-02-01 10:11:24 +01:00
rpc Merge #16702: p2p: supplying and using asmap to improve IP bucketing in addrman 2020-01-29 13:55:43 +01:00
script Merge #17261: Make ScriptPubKeyMan an actual interface and the wallet to have multiple 2020-01-30 17:21:21 +13:00
secp256k1
support scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
test Merge #16115: On bitcoind startup, write config args to debug.log 2020-01-31 11:10:56 +13:00
univalue Update univalue subtree 2019-10-30 16:24:02 -04:00
util on startup, write config options to debug.log 2020-01-29 15:44:00 -07:00
wallet Merge #17585: rpc: deprecate getaddressinfo label 2020-02-02 21:35:46 +13:00
zmq scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
.clang-format util: Add AllowShortCaseLabelsOnASingleLine option 2019-10-14 13:24:54 +03:00
addrdb.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
addrdb.h Convert addrdb/addrman to new serialization 2020-01-02 11:05:36 -08:00
addrman.cpp Merge #16702: p2p: supplying and using asmap to improve IP bucketing in addrman 2020-01-29 13:55:43 +01:00
addrman.h Merge #16702: p2p: supplying and using asmap to improve IP bucketing in addrman 2020-01-29 13:55:43 +01:00
amount.h
arith_uint256.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
arith_uint256.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
attributes.h
banman.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
banman.h scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
base58.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
base58.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
bech32.cpp Add some general std::vector utility functions 2019-10-16 08:56:57 -07:00
bech32.h
bitcoin-cli-res.rc
bitcoin-cli.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
bitcoin-tx-res.rc
bitcoin-tx.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
bitcoin-wallet-res.rc
bitcoin-wallet.cpp bitcoin-wallet: Use PACKAGE_NAME in usage help 2020-01-14 18:19:00 +00:00
bitcoind-res.rc
bitcoind.cpp Merge #16839: Replace Connman and BanMan globals with NodeContext local 2019-10-30 12:35:41 +01:00
blockencodings.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
blockencodings.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
blockfilter.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
blockfilter.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
bloom.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
bloom.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
chain.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
chain.h Convert chain to new serialization 2020-01-13 08:24:44 -08:00
chainparams.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
chainparams.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
chainparamsbase.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
chainparamsbase.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
chainparamsseeds.h contrib: Remove invalid nodes from seeds list 2019-10-02 08:51:12 +02:00
checkqueue.h refactor: Remove redundant conditional 2020-01-21 14:07:42 +00:00
clientversion.cpp
clientversion.h
coins.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
coins.h Convert compression.h to new serialization framework 2020-01-21 20:29:11 -08:00
compat.h
compressor.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
compressor.h Convert compression.h to new serialization framework 2020-01-21 20:29:11 -08:00
core_io.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
core_memusage.h
core_read.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
core_write.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
cuckoocache.h Use correct C++11 header for std::swap() 2019-11-29 21:23:25 +02:00
dbwrapper.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
dbwrapper.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
dummywallet.cpp scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
flatfile.cpp
flatfile.h
fs.cpp scripted-diff: Add missed copyright headers 2020-01-04 20:18:28 +02:00
fs.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
hash.cpp
hash.h
httprpc.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
httprpc.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
httpserver.cpp net: Avoid using C-style NUL-terminated strings as arguments in the netbase interface 2020-01-08 12:35:59 +00:00
httpserver.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
indirectmap.h
init.cpp on startup, write config options to debug.log 2020-01-29 15:44:00 -07:00
init.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
key.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
key.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
key_io.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
key_io.h
limitedmap.h
logging.cpp scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
logging.h scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
Makefile.am Merge #16702: p2p: supplying and using asmap to improve IP bucketing in addrman 2020-01-29 13:55:43 +01:00
Makefile.bench.include [test] move wallet helper functions into test library 2019-11-25 16:40:09 +01:00
Makefile.leveldb.include
Makefile.qt.include Merge #17513: refactor, qt: Nuke some circular dependencies 2019-11-21 19:38:39 +01:00
Makefile.qt_locale.include Restore English translation option 2020-01-06 22:58:47 -05:00
Makefile.qttest.include build: Create test utility library from src/test/util/ 2019-11-21 21:13:08 +01:00
Makefile.test.include Merge #18009: tests: Add fuzzing harness for strprintf(…) 2020-01-31 02:56:49 +13:00
Makefile.test_util.include [test] move wallet helper functions into test library 2019-11-25 16:40:09 +01:00
memusage.h
merkleblock.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
merkleblock.h
miner.cpp rpc: Remove mempool global from miner 2019-12-23 06:12:10 +07:00
miner.h rpc: Remove mempool global from miner 2019-12-23 06:12:10 +07:00
net.cpp Merge #16702: p2p: supplying and using asmap to improve IP bucketing in addrman 2020-01-29 13:55:43 +01:00
net.h Merge #16702: p2p: supplying and using asmap to improve IP bucketing in addrman 2020-01-29 13:55:43 +01:00
net_permissions.cpp net: Avoid using C-style NUL-terminated strings as arguments in the netbase interface 2020-01-08 12:35:59 +00:00
net_permissions.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
net_processing.cpp net: reference instead of copy in BlockConnected range loop 2020-02-02 10:27:47 +01:00
net_processing.h Use rolling bloom filter of recent block tx's for AlreadyHave() check 2020-01-29 09:37:21 -05:00
net_types.h refactor: Remove addrdb.h dependency from node.h 2019-10-29 11:30:12 +02:00
netaddress.cpp Merge #16702: p2p: supplying and using asmap to improve IP bucketing in addrman 2020-01-29 13:55:43 +01:00
netaddress.h Merge #16702: p2p: supplying and using asmap to improve IP bucketing in addrman 2020-01-29 13:55:43 +01:00
netbase.cpp Merge #17754: net: Don't allow resolving of std::string with embedded NUL characters. Add tests. 2020-01-22 20:20:45 +01:00
netbase.h net: Avoid using C-style NUL-terminated strings as arguments in the netbase interface 2020-01-08 12:35:59 +00:00
netmessagemaker.h
noui.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
noui.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
optional.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
outputtype.cpp Store p2sh scripts in AddAndGetDestinationForScript 2020-01-23 16:35:08 -05:00
outputtype.h List output types in an array in order to be iterated over 2020-01-23 16:35:06 -05:00
pow.cpp
pow.h
prevector.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
protocol.cpp p2p: Remove BIP61 reject messages 2019-10-02 10:39:14 -04:00
protocol.h Merge #17474: Bugfix: GUI: Recognise NETWORK_LIMITED in formatServicesStr 2019-12-11 17:00:27 -05:00
psbt.cpp Merge #17156: psbt: check that various indexes and amounts are within bounds 2020-01-29 19:39:50 +08:00
psbt.h Fix doxygen errors 2020-01-16 18:25:11 -08:00
pubkey.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
pubkey.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
random.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
random.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
randomenv.cpp Put bounds on the number of CPUID leaves explored 2019-11-20 10:54:08 -08:00
randomenv.h [MOVEONLY] Move perfmon data gathering to new randomenv module 2019-11-12 14:50:44 -08:00
rest.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
reverse_iterator.h
reverselock.h
scheduler.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
scheduler.h scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
serialize.h Add FORMATTER_METHODS, similar to SERIALIZE_METHODS, but for formatters 2020-01-18 07:43:22 -08:00
shutdown.cpp
shutdown.h
span.h
streams.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
sync.cpp scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
sync.h scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
threadinterrupt.cpp
threadinterrupt.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
threadsafety.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
timedata.cpp scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
timedata.h
tinyformat.h util: Update tinyformat to upstream 2019-12-06 10:02:08 +01:00
torcontrol.cpp net: Avoid using C-style NUL-terminated strings as arguments in the netbase interface 2020-01-08 12:35:59 +00:00
torcontrol.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
txdb.cpp Convert compression.h to new serialization framework 2020-01-21 20:29:11 -08:00
txdb.h scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
txmempool.cpp Make UpdateTransactionsFromBlock use Epochs 2020-01-14 19:30:13 -08:00
txmempool.h Merge #17925: Improve UpdateTransactionsFromBlock with Epochs 2020-02-03 11:54:34 +01:00
ui_interface.cpp scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
ui_interface.h scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
uint256.cpp refactor: define a UINT256_ONE global constant 2020-01-23 16:35:08 -05:00
uint256.h refactor: define a UINT256_ONE global constant 2020-01-23 16:35:08 -05:00
undo.h Convert compression.h to new serialization framework 2020-01-21 20:29:11 -08:00
validation.cpp Merge #16974: Walk pindexBestHeader back to ChainActive().Tip() if it is invalid 2020-02-03 12:28:38 +01:00
validation.h scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
validationinterface.cpp scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
validationinterface.h scripted-diff: Bump copyright of files changed in 2020 2020-01-15 02:18:00 +07:00
version.h
versionbits.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
versionbits.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
versionbitsinfo.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
versionbitsinfo.h
walletinitinterface.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
warnings.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
warnings.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00