mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-05 14:06:27 -05:00
Merge #19464: net: remove -banscore configuration option
06059b0c2a
net: rename DEFAULT_BANSCORE_THRESHOLD to DISCOURAGEMENT_THRESHOLD (Jon Atack)1d4024bca8
net: remove -banscore configuration option (Jon Atack) Pull request description: per https://github.com/bitcoin/bitcoin/pull/19219#issuecomment-652684340, https://github.com/bitcoin/bitcoin/pull/19219#discussion_r443074487 and https://github.com/bitcoin/bitcoin/pull/19219#issuecomment-652699592. Edit: now split into 3 straightforward PRs: - net: remove -banscore configuration option (this PR) - rpc: deprecate banscore field in getpeerinfo (#19469, *merged*) - gui: no longer display banscores (TBA in the gui repo) ACKs for top commit: MarcoFalke: review ACK06059b0c2a
📙 vasild: ACK06059b0c
Tree-SHA512: 03fad249986e0896697033fbb8ba2cbfaae7d7603b1fb2a38b3d41db697630d238623f4d732b9098c82af249ce5a1767dd432b7ca0fec10544e23d24fbd57c50
This commit is contained in:
commit
b93c4244b9
7 changed files with 17 additions and 15 deletions
|
@ -121,6 +121,11 @@ Build System
|
||||||
Updated settings
|
Updated settings
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
|
- The `-banscore` configuration option, which modified the default threshold for
|
||||||
|
disconnecting and discouraging misbehaving peers, has been removed as part of
|
||||||
|
changes in this release to the handling of misbehaving peers. Refer to the
|
||||||
|
section, "Changes regarding misbehaving peers", for details. (#19464)
|
||||||
|
|
||||||
- The `-debug=db` logging category, which was deprecated in 0.20 and replaced by
|
- The `-debug=db` logging category, which was deprecated in 0.20 and replaced by
|
||||||
`-debug=walletdb` to distinguish it from `coindb`, has been removed. (#19202)
|
`-debug=walletdb` to distinguish it from `coindb`, has been removed. (#19202)
|
||||||
|
|
||||||
|
|
|
@ -431,7 +431,6 @@ void SetupServerArgs(NodeContext& node)
|
||||||
|
|
||||||
gArgs.AddArg("-addnode=<ip>", "Add a node to connect to and attempt to keep the connection open (see the `addnode` RPC command help for more info). This option can be specified multiple times to add multiple nodes.", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
gArgs.AddArg("-addnode=<ip>", "Add a node to connect to and attempt to keep the connection open (see the `addnode` RPC command help for more info). This option can be specified multiple times to add multiple nodes.", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||||
gArgs.AddArg("-asmap=<file>", strprintf("Specify asn mapping used for bucketing of the peers (default: %s). Relative paths will be prefixed by the net-specific datadir location.", DEFAULT_ASMAP_FILENAME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
gArgs.AddArg("-asmap=<file>", strprintf("Specify asn mapping used for bucketing of the peers (default: %s). Relative paths will be prefixed by the net-specific datadir location.", DEFAULT_ASMAP_FILENAME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
gArgs.AddArg("-banscore=<n>", strprintf("Threshold for disconnecting and discouraging misbehaving peers (default: %u)", DEFAULT_BANSCORE_THRESHOLD), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
|
||||||
gArgs.AddArg("-bantime=<n>", strprintf("Default duration (in seconds) of manually configured bans (default: %u)", DEFAULT_MISBEHAVING_BANTIME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
gArgs.AddArg("-bantime=<n>", strprintf("Default duration (in seconds) of manually configured bans (default: %u)", DEFAULT_MISBEHAVING_BANTIME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||||
gArgs.AddArg("-bind=<addr>", "Bind to given address and always listen on it. Use [host]:port notation for IPv6", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
gArgs.AddArg("-bind=<addr>", "Bind to given address and always listen on it. Use [host]:port notation for IPv6", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||||
gArgs.AddArg("-connect=<ip>", "Connect only to the specified node; -noconnect disables automatic connections (the rules for this peer are the same as for -addnode). This option can be specified multiple times to connect to multiple nodes.", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
gArgs.AddArg("-connect=<ip>", "Connect only to the specified node; -noconnect disables automatic connections (the rules for this peer are the same as for -addnode). This option can be specified multiple times to connect to multiple nodes.", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||||
|
|
|
@ -1031,7 +1031,8 @@ unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increment peer's misbehavior score. If the new value surpasses banscore (specified on startup or by default), mark node to be discouraged, meaning the peer might be disconnected & added to the discouragement filter.
|
* Increment peer's misbehavior score. If the new value >= DISCOURAGEMENT_THRESHOLD, mark the node
|
||||||
|
* to be discouraged, meaning the peer might be disconnected and added to the discouragement filter.
|
||||||
*/
|
*/
|
||||||
void Misbehaving(NodeId pnode, int howmuch, const std::string& message) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
|
void Misbehaving(NodeId pnode, int howmuch, const std::string& message) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
|
||||||
{
|
{
|
||||||
|
@ -1043,9 +1044,8 @@ void Misbehaving(NodeId pnode, int howmuch, const std::string& message) EXCLUSIV
|
||||||
return;
|
return;
|
||||||
|
|
||||||
state->nMisbehavior += howmuch;
|
state->nMisbehavior += howmuch;
|
||||||
int banscore = gArgs.GetArg("-banscore", DEFAULT_BANSCORE_THRESHOLD);
|
|
||||||
std::string message_prefixed = message.empty() ? "" : (": " + message);
|
std::string message_prefixed = message.empty() ? "" : (": " + message);
|
||||||
if (state->nMisbehavior >= banscore && state->nMisbehavior - howmuch < banscore)
|
if (state->nMisbehavior >= DISCOURAGEMENT_THRESHOLD && state->nMisbehavior - howmuch < DISCOURAGEMENT_THRESHOLD)
|
||||||
{
|
{
|
||||||
LogPrint(BCLog::NET, "%s: %s peer=%d (%d -> %d) DISCOURAGE THRESHOLD EXCEEDED%s\n", __func__, state->name, pnode, state->nMisbehavior-howmuch, state->nMisbehavior, message_prefixed);
|
LogPrint(BCLog::NET, "%s: %s peer=%d (%d -> %d) DISCOURAGE THRESHOLD EXCEEDED%s\n", __func__, state->name, pnode, state->nMisbehavior-howmuch, state->nMisbehavior, message_prefixed);
|
||||||
state->m_should_discourage = true;
|
state->m_should_discourage = true;
|
||||||
|
|
|
@ -23,6 +23,8 @@ static const unsigned int DEFAULT_MAX_ORPHAN_TRANSACTIONS = 100;
|
||||||
static const unsigned int DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN = 100;
|
static const unsigned int DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN = 100;
|
||||||
static const bool DEFAULT_PEERBLOOMFILTERS = false;
|
static const bool DEFAULT_PEERBLOOMFILTERS = false;
|
||||||
static const bool DEFAULT_PEERBLOCKFILTERS = false;
|
static const bool DEFAULT_PEERBLOCKFILTERS = false;
|
||||||
|
/** Threshold for marking a node to be discouraged, e.g. disconnected and added to the discouragement filter. */
|
||||||
|
static const int DISCOURAGEMENT_THRESHOLD{100};
|
||||||
|
|
||||||
class PeerLogicValidation final : public CValidationInterface, public NetEventsInterface {
|
class PeerLogicValidation final : public CValidationInterface, public NetEventsInterface {
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -232,14 +232,14 @@ BOOST_AUTO_TEST_CASE(DoS_banning)
|
||||||
dummyNode1.fSuccessfullyConnected = true;
|
dummyNode1.fSuccessfullyConnected = true;
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
Misbehaving(dummyNode1.GetId(), 100); // Should get banned
|
Misbehaving(dummyNode1.GetId(), DISCOURAGEMENT_THRESHOLD); // Should be discouraged
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
LOCK2(cs_main, dummyNode1.cs_sendProcessing);
|
LOCK2(cs_main, dummyNode1.cs_sendProcessing);
|
||||||
BOOST_CHECK(peerLogic->SendMessages(&dummyNode1));
|
BOOST_CHECK(peerLogic->SendMessages(&dummyNode1));
|
||||||
}
|
}
|
||||||
BOOST_CHECK(banman->IsDiscouraged(addr1));
|
BOOST_CHECK(banman->IsDiscouraged(addr1));
|
||||||
BOOST_CHECK(!banman->IsDiscouraged(ip(0xa0b0c001|0x0000ff00))); // Different IP, not banned
|
BOOST_CHECK(!banman->IsDiscouraged(ip(0xa0b0c001|0x0000ff00))); // Different IP, not discouraged
|
||||||
|
|
||||||
CAddress addr2(ip(0xa0b0c002), NODE_NONE);
|
CAddress addr2(ip(0xa0b0c002), NODE_NONE);
|
||||||
CNode dummyNode2(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr2, 1, 1, CAddress(), "", true);
|
CNode dummyNode2(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr2, 1, 1, CAddress(), "", true);
|
||||||
|
@ -255,7 +255,7 @@ BOOST_AUTO_TEST_CASE(DoS_banning)
|
||||||
LOCK2(cs_main, dummyNode2.cs_sendProcessing);
|
LOCK2(cs_main, dummyNode2.cs_sendProcessing);
|
||||||
BOOST_CHECK(peerLogic->SendMessages(&dummyNode2));
|
BOOST_CHECK(peerLogic->SendMessages(&dummyNode2));
|
||||||
}
|
}
|
||||||
BOOST_CHECK(!banman->IsDiscouraged(addr2)); // 2 not banned yet...
|
BOOST_CHECK(!banman->IsDiscouraged(addr2)); // 2 not discouraged yet...
|
||||||
BOOST_CHECK(banman->IsDiscouraged(addr1)); // ... but 1 still should be
|
BOOST_CHECK(banman->IsDiscouraged(addr1)); // ... but 1 still should be
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
|
@ -279,7 +279,6 @@ BOOST_AUTO_TEST_CASE(DoS_banscore)
|
||||||
auto peerLogic = MakeUnique<PeerLogicValidation>(connman.get(), banman.get(), *m_node.scheduler, *m_node.chainman, *m_node.mempool);
|
auto peerLogic = MakeUnique<PeerLogicValidation>(connman.get(), banman.get(), *m_node.scheduler, *m_node.chainman, *m_node.mempool);
|
||||||
|
|
||||||
banman->ClearBanned();
|
banman->ClearBanned();
|
||||||
gArgs.ForceSetArg("-banscore", "111"); // because 11 is my favorite number
|
|
||||||
CAddress addr1(ip(0xa0b0c001), NODE_NONE);
|
CAddress addr1(ip(0xa0b0c001), NODE_NONE);
|
||||||
CNode dummyNode1(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr1, 3, 1, CAddress(), "", true);
|
CNode dummyNode1(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr1, 3, 1, CAddress(), "", true);
|
||||||
dummyNode1.SetSendVersion(PROTOCOL_VERSION);
|
dummyNode1.SetSendVersion(PROTOCOL_VERSION);
|
||||||
|
@ -288,7 +287,7 @@ BOOST_AUTO_TEST_CASE(DoS_banscore)
|
||||||
dummyNode1.fSuccessfullyConnected = true;
|
dummyNode1.fSuccessfullyConnected = true;
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
Misbehaving(dummyNode1.GetId(), 100);
|
Misbehaving(dummyNode1.GetId(), DISCOURAGEMENT_THRESHOLD - 11);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
LOCK2(cs_main, dummyNode1.cs_sendProcessing);
|
LOCK2(cs_main, dummyNode1.cs_sendProcessing);
|
||||||
|
@ -313,7 +312,6 @@ BOOST_AUTO_TEST_CASE(DoS_banscore)
|
||||||
BOOST_CHECK(peerLogic->SendMessages(&dummyNode1));
|
BOOST_CHECK(peerLogic->SendMessages(&dummyNode1));
|
||||||
}
|
}
|
||||||
BOOST_CHECK(banman->IsDiscouraged(addr1));
|
BOOST_CHECK(banman->IsDiscouraged(addr1));
|
||||||
gArgs.ForceSetArg("-banscore", ToString(DEFAULT_BANSCORE_THRESHOLD));
|
|
||||||
|
|
||||||
bool dummy;
|
bool dummy;
|
||||||
peerLogic->FinalizeNode(dummyNode1.GetId(), dummy);
|
peerLogic->FinalizeNode(dummyNode1.GetId(), dummy);
|
||||||
|
@ -338,7 +336,7 @@ BOOST_AUTO_TEST_CASE(DoS_bantime)
|
||||||
|
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
Misbehaving(dummyNode.GetId(), 100);
|
Misbehaving(dummyNode.GetId(), DISCOURAGEMENT_THRESHOLD);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
LOCK2(cs_main, dummyNode.cs_sendProcessing);
|
LOCK2(cs_main, dummyNode.cs_sendProcessing);
|
||||||
|
|
|
@ -74,7 +74,6 @@ static const int64_t DEFAULT_MAX_TIP_AGE = 24 * 60 * 60;
|
||||||
static const bool DEFAULT_CHECKPOINTS_ENABLED = true;
|
static const bool DEFAULT_CHECKPOINTS_ENABLED = true;
|
||||||
static const bool DEFAULT_TXINDEX = false;
|
static const bool DEFAULT_TXINDEX = false;
|
||||||
static const char* const DEFAULT_BLOCKFILTERINDEX = "0";
|
static const char* const DEFAULT_BLOCKFILTERINDEX = "0";
|
||||||
static const unsigned int DEFAULT_BANSCORE_THRESHOLD = 100;
|
|
||||||
/** Default for -persistmempool */
|
/** Default for -persistmempool */
|
||||||
static const bool DEFAULT_PERSIST_MEMPOOL = true;
|
static const bool DEFAULT_PERSIST_MEMPOOL = true;
|
||||||
/** Default for using fee filter */
|
/** Default for using fee filter */
|
||||||
|
|
|
@ -26,7 +26,7 @@ from test_framework.util import (
|
||||||
wait_until,
|
wait_until,
|
||||||
)
|
)
|
||||||
|
|
||||||
banscore = 10
|
DISCOURAGEMENT_THRESHOLD = 100
|
||||||
|
|
||||||
|
|
||||||
class CLazyNode(P2PInterface):
|
class CLazyNode(P2PInterface):
|
||||||
|
@ -70,7 +70,7 @@ class CNodeNoVersionBan(CLazyNode):
|
||||||
# NOTE: implementation-specific check here. Remove if bitcoind ban behavior changes
|
# NOTE: implementation-specific check here. Remove if bitcoind ban behavior changes
|
||||||
def on_open(self):
|
def on_open(self):
|
||||||
super().on_open()
|
super().on_open()
|
||||||
for i in range(banscore):
|
for _ in range(DISCOURAGEMENT_THRESHOLD):
|
||||||
self.send_message(msg_verack())
|
self.send_message(msg_verack())
|
||||||
|
|
||||||
# Node that never sends a version. This one just sits idle and hopes to receive
|
# Node that never sends a version. This one just sits idle and hopes to receive
|
||||||
|
@ -106,7 +106,6 @@ class P2PVersionStore(P2PInterface):
|
||||||
class P2PLeakTest(BitcoinTestFramework):
|
class P2PLeakTest(BitcoinTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.num_nodes = 1
|
self.num_nodes = 1
|
||||||
self.extra_args = [['-banscore=' + str(banscore)]]
|
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
no_version_bannode = self.nodes[0].add_p2p_connection(CNodeNoVersionBan(), send_version=False, wait_for_verack=False)
|
no_version_bannode = self.nodes[0].add_p2p_connection(CNodeNoVersionBan(), send_version=False, wait_for_verack=False)
|
||||||
|
|
Loading…
Add table
Reference in a new issue