0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-02 09:46:52 -05:00
bitcoin-bitcoin-core/src
Wladimir J. van der Laan 67be6d7a17
Merge #16248: Make whitebind/whitelist permissions more flexible
c5b404e8f1 Add functional tests for flexible whitebind/list (nicolas.dorier)
d541fa3918 Replace the use of fWhitelisted by permission checks (nicolas.dorier)
ecd5cf7ea4 Do not disconnect peer for asking mempool if it has NO_BAN permission (nicolas.dorier)
e5b26deaaa Make whitebind/whitelist permissions more flexible (nicolas.dorier)

Pull request description:

  # Motivation

  In 0.19, bloom filter will be disabled by default. I tried to make [a PR](https://github.com/bitcoin/bitcoin/pull/16176) to enable bloom filter for whitelisted peers regardless of `-peerbloomfilters`.

  Bloom filter have non existent privacy and server can omit filter's matches. However, both problems are completely irrelevant when you connect to your own node. If you connect to your own node, bloom filters are the most bandwidth efficient way to synchronize your light client without the need of some middleware like Electrum.

  It is also a superior alternative to BIP157 as it does not require to maintain an additional index and it would work well on pruned nodes.

  When I attempted to allow bloom filters for whitelisted peer, my proposal has been NACKed in favor of [a more flexible approach](https://github.com/bitcoin/bitcoin/pull/16176#issuecomment-500762907) which should allow node operator to set fine grained permissions instead of a global `whitelisted` attribute.

  Doing so will also make follow up idea very easy to implement in a backward compatible way.

  # Implementation details

  The PR propose a new format for `--white{list,bind}`. I added a way to specify permissions granted to inbound connection matching `white{list,bind}`.

  The following permissions exists:
  * ForceRelay
  * Relay
  * NoBan
  * BloomFilter
  * Mempool

  Example:
  * `-whitelist=bloomfilter@127.0.0.1/32`.
  * `-whitebind=bloomfilter,relay,noban@127.0.0.1:10020`.

  If no permissions are specified, `NoBan | Mempool` is assumed. (making this PR backward compatible)

  When we receive an inbound connection, we calculate the effective permissions for this peer by fetching the permissions granted from `whitelist`  and add to it the permissions granted from `whitebind`.

  To keep backward compatibility, if no permissions are specified in `white{list,bind}` (e.g. `--whitelist=127.0.0.1`) then parameters `-whitelistforcerelay` and `-whiterelay` will add the permissions `ForceRelay` and `Relay` to the inbound node.

  `-whitelistforcerelay` and `-whiterelay` are ignored if the permissions flags are explicitly set in `white{bind,list}`.

  # Follow up idea

  Based on this PR, other changes become quite easy to code in a trivially review-able, backward compatible way:

  * Changing `connect` at rpc and config file level to understand the permissions flags.
  * Changing the permissions of a peer at RPC level.

ACKs for top commit:
  laanwj:
    re-ACK c5b404e8f1

Tree-SHA512: adfefb373d09e68cae401247c8fc64034e305694cdef104bdcdacb9f1704277bd53b18f52a2427a5cffdbc77bda410d221aed252bc2ece698ffbb9cf1b830577
2019-08-14 17:07:12 +02:00
..
bench scripted-diff: Use ArgsManager::DEBUG_ONLY flag 2019-07-27 15:05:14 +03:00
compat Document assumptions about C++ compiler 2019-03-05 11:19:32 +01:00
config
consensus Make reasoning about dependencies easier by not including unused dependencies 2019-06-02 17:15:23 +02:00
crypto Add ChaCha20Poly1305@Bitcoin AEAD implementation 2019-06-25 15:13:02 +02:00
index scripted-diff: Make translation bilingual 2019-07-24 16:33:20 +03:00
interfaces Remove p2pEnabled from Chain interface 2019-08-08 22:57:35 -04:00
leveldb Pull leveldb subtree 2019-01-26 12:45:48 -05:00
node Remove p2pEnabled from Chain interface 2019-08-08 22:57:35 -04:00
obj
policy [wallet] abort when attempting to fund a transaction above maxtxfee 2019-06-28 22:44:38 -04:00
primitives Make reasoning about dependencies easier by not including unused dependencies 2019-06-02 17:15:23 +02:00
qt Merge #16248: Make whitebind/whitelist permissions more flexible 2019-08-14 17:07:12 +02:00
rpc Merge #16248: Make whitebind/whitelist permissions more flexible 2019-08-14 17:07:12 +02:00
script descriptor: fix missed m_script_arg arg renaming in #14934 2019-08-14 19:48:13 +08:00
secp256k1 Update the secp256k1 subtree to the latest upstream version 2019-03-31 11:41:05 -07:00
support Improve documentation of memory_cleanse() 2019-07-01 12:59:44 +02:00
test Merge #16248: Make whitebind/whitelist permissions more flexible 2019-08-14 17:07:12 +02:00
univalue Update univalue subtree 2018-09-07 08:21:14 -04:00
util util: refactor upper/lowercase functions 2019-08-08 11:35:14 +09:00
wallet Merge #16557: [wallet] restore coinbase and confirmed/conflicted checks in SubmitMemoryPoolAndRelay() 2019-08-12 13:49:58 -04:00
zmq rpc: switch to using RPCHelpMan.Check() 2019-07-08 09:53:52 +09:00
.clang-format Fix inconsistent namespace formatting guidelines 2018-04-13 15:37:20 -04:00
addrdb.cpp addrdb: Remove temporary files created in SerializeFileDB. Fixes non-determinism in unit tests. 2019-06-14 08:30:43 +02:00
addrdb.h banman: Add, use CBanEntry ctor that takes ban reason 2019-01-16 13:54:18 -05:00
addrman.cpp Make reasoning about dependencies easier by not including unused dependencies 2019-06-02 17:15:23 +02:00
addrman.h [addrman] Ensure collisions eventually get resolved 2019-02-27 16:53:44 -05:00
amount.h Update copyright headers to 2018 2018-12-29 10:15:01 +01:00
arith_uint256.cpp Make reasoning about dependencies easier by not including unused dependencies 2019-06-02 17:15:23 +02:00
arith_uint256.h Use std::numeric_limits<UNSIGNED>::max()) instead of (UNSIGNED)-1 2018-12-04 19:55:04 +02:00
attributes.h Add NODISCARD to all {Decode,Parse}[...](...) functions returning bool. Sort includes. 2018-11-05 17:03:11 +01:00
banman.cpp scripted-diff: Make translation bilingual 2019-07-24 16:33:20 +03:00
banman.h Allow connections from misbehavior banned peers. 2019-01-22 21:10:48 +00:00
base58.cpp scripted-diff: Move util files to separate directory. 2018-11-04 22:46:07 -08:00
base58.h Add NODISCARD to all {Decode,Parse}[...](...) functions returning bool. Sort includes. 2018-11-05 17:03:11 +01:00
bech32.cpp Make objects in range declarations immutable by default. Avoid unnecessary copying of objects in range declarations. 2018-08-27 18:19:33 +02:00
bech32.h Fix missing or inconsistent include guards 2018-03-22 16:23:04 +01:00
bitcoin-cli-res.rc
bitcoin-cli.cpp Use ArgsManager::NETWORK_ONLY flag 2019-07-27 22:51:58 +03:00
bitcoin-tx-res.rc
bitcoin-tx.cpp scripted-diff: Use ArgsManager::DEBUG_ONLY flag 2019-07-27 15:05:14 +03:00
bitcoin-wallet-res.rc [tools] Add wallet inspection and modification tool 2019-01-30 16:26:52 -05:00
bitcoin-wallet.cpp Use ArgsManager::NETWORK_ONLY flag 2019-07-27 22:51:58 +03:00
bitcoind-res.rc
bitcoind.cpp Trivial: add missing space 2019-07-28 13:33:10 -10:00
blockencodings.cpp CorruptionPossible -> BLOCK_MUTATED 2019-05-02 15:14:12 -04:00
blockencodings.h disallow oversized CBlockHeaderAndShortTxIDs 2018-11-13 12:41:41 -08:00
blockfilter.cpp init: Add CLI option to enable block filter index. 2019-04-06 12:10:55 -07:00
blockfilter.h init: Add CLI option to enable block filter index. 2019-04-06 12:10:55 -07:00
bloom.cpp refactor: Improve CRollingBloomFilter::reset by using std::fill 2019-05-22 15:55:50 +01:00
bloom.h Removes unsed CBloomFilter constructor. 2018-08-13 01:24:55 +02:00
chain.cpp refactor: combine Chain::findFirstBlockWithTime/findFirstBlockWithTimeAndHeight 2019-03-27 18:29:48 -04:00
chain.h refactor: combine Chain::findFirstBlockWithTime/findFirstBlockWithTimeAndHeight 2019-03-27 18:29:48 -04:00
chainparams.cpp Remove wallet settings from chainparams 2019-07-16 16:22:14 -04:00
chainparams.h Remove wallet settings from chainparams 2019-07-16 16:22:14 -04:00
chainparamsbase.cpp scripted-diff: Use ArgsManager::DEBUG_ONLY flag 2019-07-27 15:05:14 +03:00
chainparamsbase.h Remove wallet settings from chainparams 2019-07-16 16:22:14 -04:00
chainparamsseeds.h net: Update hardcoded seeds 2018-08-13 13:57:15 +02:00
checkqueue.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
clientversion.cpp Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
clientversion.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
coins.cpp move-onlyish: move CCoinsViewErrorCatcher out of init.cpp 2019-07-21 21:00:31 -04:00
coins.h move-onlyish: move CCoinsViewErrorCatcher out of init.cpp 2019-07-21 21:00:31 -04:00
compat.h windows: Set _WIN32_WINNT to 0x0601 (Windows 7) 2019-01-23 16:28:27 +08:00
compressor.cpp Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
compressor.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
core_io.h Move PSBT decoding functions from core_io to psbt.cpp 2019-03-26 17:38:00 -07:00
core_memusage.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
core_read.cpp Include core_io.h from core_read.cpp 2019-06-06 08:00:33 +02:00
core_write.cpp Make reasoning about dependencies easier by not including unused dependencies 2019-06-02 17:15:23 +02:00
cuckoocache.h Make objects in range declarations immutable by default. Avoid unnecessary copying of objects in range declarations. 2018-08-27 18:19:33 +02:00
dbwrapper.cpp Replace deprecated Boost Filesystem function 2019-04-30 10:05:54 +03:00
dbwrapper.h scripted-diff: Move util files to separate directory. 2018-11-04 22:46:07 -08:00
dummywallet.cpp Bugfix: dummywallet: Add -ignorepartialspends to list of ignored wallet options 2019-04-28 04:42:38 +00:00
flatfile.cpp Style cleanup. 2019-02-22 17:38:45 -08:00
flatfile.h Style cleanup. 2019-02-22 17:38:45 -08:00
fs.cpp Avoid redefine warning 2019-04-10 12:16:52 +01:00
fs.h Replace deprecated Boost Filesystem function 2019-04-30 10:05:54 +03:00
hash.cpp Extract CSipHasher to it's own file in crypto/ directory. 2018-11-05 09:25:15 -08:00
hash.h Squashed 'src/secp256k1/' changes from 0b70241850..b19c000063 2019-03-31 11:41:05 -07:00
httprpc.cpp scripted-diff: Make translation bilingual 2019-07-24 16:33:20 +03:00
httprpc.h Cleanup StartRest() 2018-08-11 09:34:47 +03:00
httpserver.cpp Remove global symbols: Avoid using the global namespace if possible 2019-05-25 23:23:11 +02:00
httpserver.h [build] Add several util units 2019-04-09 17:53:08 -04:00
indirectmap.h
init.cpp Make whitebind/whitelist permissions more flexible 2019-08-11 11:33:27 +09:00
init.h Pass chain and client variables where needed 2018-11-06 11:44:40 -04:00
key.cpp Make reasoning about dependencies easier by not including unused dependencies 2019-06-02 17:15:23 +02:00
key.h CKey: add method to negate the key 2019-03-27 13:59:50 +01:00
key_io.cpp Replace CScriptID and CKeyID in CTxDestination with dedicated types 2019-04-29 10:15:23 -04:00
key_io.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
limitedmap.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
logging.cpp test: Log to debug.log in all tests 2019-06-20 12:12:24 -04:00
logging.h test: Log to debug.log in all tests 2019-06-20 12:12:24 -04:00
Makefile.am Make whitebind/whitelist permissions more flexible 2019-08-11 11:33:27 +09:00
Makefile.bench.include Merge #15649: Add ChaCha20Poly1305@Bitcoin AEAD 2019-07-11 22:00:16 +02:00
Makefile.leveldb.include build: Remove WINVER pre define in Makefile.leveldb.inlcude 2019-01-26 09:28:48 +08:00
Makefile.qt.include build: Stop translating PACKAGE_NAME 2019-06-26 11:01:37 -04:00
Makefile.qttest.include scripted-diff: Rename test_bitcoin to test/setup_common 2019-04-11 10:12:36 -04:00
Makefile.test.include Move ismine to wallet module 2019-06-19 18:06:30 -04:00
memusage.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
merkleblock.cpp Make reasoning about dependencies easier by not including unused dependencies 2019-06-02 17:15:23 +02:00
merkleblock.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
miner.cpp Make reasoning about dependencies easier by not including unused dependencies 2019-06-02 17:15:23 +02:00
miner.h [rpc] mining: Omit uninitialized currentblockweight, currentblocktx 2019-02-12 11:34:57 -05:00
net.cpp Replace the use of fWhitelisted by permission checks 2019-08-11 11:33:28 +09:00
net.h Replace the use of fWhitelisted by permission checks 2019-08-11 11:33:28 +09:00
net_permissions.cpp Make whitebind/whitelist permissions more flexible 2019-08-11 11:33:27 +09:00
net_permissions.h Make whitebind/whitelist permissions more flexible 2019-08-11 11:33:27 +09:00
net_processing.cpp Replace the use of fWhitelisted by permission checks 2019-08-11 11:33:28 +09:00
net_processing.h refactor : use RelayTransaction in BroadcastTransaction utility 2019-07-24 19:47:56 -04:00
netaddress.cpp Fix spelling errors identified by codespell 1.15.0 2019-06-11 17:18:16 +02:00
netaddress.h netaddress: Update CNetAddr for ORCHIDv2 2019-05-15 14:21:48 -04:00
netbase.cpp util: refactor upper/lowercase functions 2019-08-08 11:35:14 +09:00
netbase.h util: refactor upper/lowercase functions 2019-08-08 11:35:14 +09:00
netmessagemaker.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
noui.cpp Merge #16277: [Tests] Suppress output in test_bitcoin for expected errors 2019-08-01 15:17:10 +02:00
noui.h Suppress output in test_bitcoin for expected errors 2019-07-03 14:03:21 +02:00
optional.h Remove 'boost::optional'-related gcc warnings 2019-01-30 22:44:28 +02:00
outputtype.cpp Move various SigningProviders to signingprovider.{cpp,h} 2019-07-09 16:20:18 -04:00
outputtype.h Move various SigningProviders to signingprovider.{cpp,h} 2019-07-09 16:20:18 -04:00
pow.cpp Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
pow.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
prevector.h Merge #12324: speed up Unserialize_impl for prevector 2019-06-18 17:12:02 +02:00
protocol.cpp scripted-diff: Move util files to separate directory. 2018-11-04 22:46:07 -08:00
protocol.h Remove unused bits from the service flags enum 2019-07-12 14:14:54 -04:00
psbt.cpp Merge #15427: Add support for descriptors to utxoupdatepsbt 2019-07-02 16:53:22 +02:00
psbt.h Move various SigningProviders to signingprovider.{cpp,h} 2019-07-09 16:20:18 -04:00
pubkey.cpp Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
pubkey.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
random.cpp net: Use mockable time for tx download 2019-06-17 14:12:32 -04:00
random.h net: Use mockable time for tx download 2019-06-17 14:12:32 -04:00
rest.cpp rpc: migrate JSONRPCRequest functionality into request.cpp 2019-07-05 11:22:02 +09:00
reverse_iterator.h scripted-diff: Remove trailing whitespaces 2018-07-24 20:46:23 +01:00
reverselock.h
scheduler.cpp Switch all RNG code to the built-in PRNG. 2019-01-16 16:34:56 -08:00
scheduler.h trivial: correct parameter name in comments 2019-02-10 17:17:32 -05:00
serialize.h Merge #12324: speed up Unserialize_impl for prevector 2019-06-18 17:12:02 +02:00
shutdown.cpp Break circular dependency: init -> * -> init by extracting shutdown.h 2018-06-25 00:08:49 -04:00
shutdown.h Break circular dependency: init -> * -> init by extracting shutdown.h 2018-06-25 00:08:49 -04:00
span.h Add more methods to Span class 2018-07-27 11:52:18 -07:00
streams.h Trivial: Doxygenize existing CBufferedFile and VectorReader comments 2019-01-25 12:32:37 -08:00
sync.cpp Replace remaining fprintf with tfm::format manually 2019-06-13 11:46:38 -04:00
sync.h scripted-diff: Rename LockAnnotation to LockAssertion 2019-05-17 13:29:04 +02:00
threadinterrupt.cpp Merge #11640: Make LOCK, LOCK2, TRY_LOCK work with CWaitableCriticalSection 2018-08-31 16:00:38 +02:00
threadinterrupt.h Update copyright headers to 2018 2018-12-29 10:15:01 +01:00
threadsafety.h Move LockAnnotation from threadsafety.h (imported code) to sync.h (our code) 2019-05-17 13:29:04 +02:00
timedata.cpp scripted-diff: Make translation bilingual 2019-07-24 16:33:20 +03:00
timedata.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
tinyformat.h tinyformat: Add doc to Bitcoin Core specific strprintf 2019-06-13 09:30:40 -04:00
torcontrol.cpp fix: tor: Call event_base_loopbreak from the event's callback 2019-07-17 15:32:38 +01:00
torcontrol.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
txdb.cpp scripted-diff: Make translation bilingual 2019-07-24 16:33:20 +03:00
txdb.h init: Add CLI option to enable block filter index. 2019-04-06 12:10:55 -07:00
txmempool.cpp validation: Add missing mempool locks 2019-06-07 11:07:09 +02:00
txmempool.h txmempool: Remove unused default value MemPoolRemovalReason::UNKNOWN 2019-07-22 07:40:24 -04:00
ui_interface.cpp Merge #16092: Don't use global (external) symbols for symbols that are used in only one translation unit 2019-06-18 15:59:53 -04:00
ui_interface.h Add MSG_NOPREFIX flag for user messages 2019-06-19 19:22:34 +03:00
uint256.cpp Merge #14734: fix an undefined behavior in uint::SetHex 2019-07-03 14:18:29 +02:00
uint256.h uint256: Remove unnecessary crypto/common.h use 2018-09-18 14:27:05 +09:00
undo.h Extract CSipHasher to it's own file in crypto/ directory. 2018-11-05 09:25:15 -08:00
validation.cpp [mempool] log correct messages when CPFP fails 2019-07-26 16:21:26 -04:00
validation.h Merge #15681: [mempool] Allow one extra single-ancestor transaction per package 2019-07-19 20:00:12 +02:00
validationinterface.cpp Make reasoning about dependencies easier by not including unused dependencies 2019-06-02 17:15:23 +02:00
validationinterface.h Remove extra CBlockIndex declaration 2019-06-25 15:02:34 -04:00
version.h Update copyright headers to 2018 2018-07-27 07:15:02 -04:00
versionbits.cpp MOVEONLY: Move versionbits info out of versionbits.o 2018-09-23 22:55:11 +02:00
versionbits.h MOVEONLY: Move versionbits info out of versionbits.o 2018-09-23 22:55:11 +02:00
versionbitsinfo.cpp MOVEONLY: Move versionbits info out of versionbits.o 2018-09-23 22:55:11 +02:00
versionbitsinfo.h MOVEONLY: Move versionbits info out of versionbits.o 2018-09-23 22:55:11 +02:00
walletinitinterface.h Remove direct node->wallet calls in init.cpp 2018-11-06 11:44:40 -04:00
warnings.cpp scripted-diff: Make translation bilingual 2019-07-24 16:33:20 +03:00
warnings.h Merge #13780: 0.17: Pre-branch maintenance 2018-08-08 13:55:27 +02:00