v30.3-roots.1 · Commit 3: [PATCH 03/68] feat(policy): preserve Roots relay and network controls on Core 30.3
src/init.cpp
Before: src/init.cpp · After: src/init.cpp
File metadata
index def3211ef412c9f1769739cc10a43dda3becb286..b98bf0f6a8a0e7aa90c34253a3ad44f12e2bcf81 100644
Download original patch · Release notes
Diff rows 1–184 of 184. Line numbers refer to the original before/after files.
+ Added− RemovedUnmarked lines are context.
Scroll the code area horizontally to read long lines. The two line-number columns refer to before and after.
src/init.cpp
CHANGED
|
@@ -492,6 +492,10 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
|
|
492
492
|
argsman.AddArg("-blocknotify=<cmd>", "Execute command when the best block changes (%s in cmd is replaced by block hash)", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
|
493
493
|
#endif
|
|
494
494
|
argsman.AddArg("-blockreconstructionextratxn=<n>", strprintf("Extra transactions to keep in memory for compact block reconstructions (default: %u)", DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
|
495
|
+
argsman.AddArg("-blockreconstructionextratxnsize=<n>",
|
|
496
|
+
strprintf("Upper limit of memory usage (in megabytes) for keeping extra transactions in memory for compact block reconstructions (default: %s)",
|
|
497
|
+
DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN_SIZE / 1000000),
|
|
498
|
+
ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
|
495
499
|
argsman.AddArg("-blocksonly", strprintf("Whether to reject transactions from network peers. Disables automatic broadcast and rebroadcast of transactions, unless the source peer has the 'forcerelay' permission. RPC transactions are not affected. (default: %u)", DEFAULT_BLOCKSONLY), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
|
496
500
|
argsman.AddArg("-coinstatsindex", strprintf("Maintain coinstats index used by the gettxoutsetinfo RPC (default: %u)", DEFAULT_COINSTATSINDEX), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
|
497
501
|
argsman.AddArg("-conf=<file>", strprintf("Specify path to read-only configuration file. Relative paths will be prefixed by datadir location (only useable from command line, not configuration file) (default: %s)", BITCOIN_CONF_FILENAME), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
|
@@ -558,8 +562,10 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
|
|
558
562
|
argsman.AddArg("-i2pacceptincoming", strprintf("Whether to accept inbound I2P connections (default: %i). Ignored if -i2psam is not set. Listening for inbound I2P connections is done through the SAM proxy, not by binding to a local address and port.", DEFAULT_I2P_ACCEPT_INCOMING), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
|
559
563
|
argsman.AddArg("-onlynet=<net>", "Make automatic outbound connections only to network <net> (" + Join(GetNetworkNames(), ", ") + "). Inbound and manual connections are not affected by this option. It can be specified multiple times to allow multiple networks.", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
|
560
564
|
argsman.AddArg("-v2transport", strprintf("Support v2 transport (default: %u)", DEFAULT_V2_TRANSPORT), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
|
561
|
-
argsman.AddArg("-peerbloomfilters", strprintf("Support filtering of blocks and transaction with bloom filters (default: %u)", DEFAULT_PEERBLOOMFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
|
565
|
+
argsman.AddArg("-v2onlyclearnet", strprintf("Disallow outbound v1 connections on IPV4/IPV6 (default: %u). Enable this option only if you really need it. Use -listen=0 to disable inbound connections since they can be unencrypted.", false), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CONNECTION);
|
|
566
|
+
argsman.AddArg("-peerbloomfilters", strprintf("Support filtering of blocks and transactions with bloom filters (default: %s)", DEFAULT_PEERBLOOMFILTERS ? "1" : "localhost only"), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
|
562
567
|
argsman.AddArg("-peerblockfilters", strprintf("Serve compact block filters to peers per BIP 157 (default: %u)", DEFAULT_PEERBLOCKFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
|
568
|
+
argsman.AddArg("-feefilter", strprintf("Tell other nodes to filter invs to us by our mempool min fee (default: %u)", DEFAULT_FEEFILTER), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CONNECTION);
|
|
563
569
|
argsman.AddArg("-txreconciliation", strprintf("Enable transaction reconciliations per BIP 330 (default: %d)", DEFAULT_TXRECONCILIATION_ENABLE), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CONNECTION);
|
|
564
570
|
argsman.AddArg("-port=<port>", strprintf("Listen for connections on <port> (default: %u, testnet3: %u, testnet4: %u, signet: %u, regtest: %u). Not relevant for I2P (see doc/i2p.md). If set to a value x, the default onion listening port will be set to x+1.", defaultChainParams->GetDefaultPort(), testnetChainParams->GetDefaultPort(), testnet4ChainParams->GetDefaultPort(), signetChainParams->GetDefaultPort(), regtestChainParams->GetDefaultPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
|
565
571
|
const std::string proxy_doc_for_value =
|
|
@@ -658,23 +664,38 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
|
|
658
664
|
argsman.AddArg("-dustrelayfee=<amt>", strprintf("Fee rate (in %s/kvB) used to define dust, the value of an output such that it will cost more than its value in fees at this fee rate to spend it. (default: %s)", CURRENCY_UNIT, FormatMoney(DUST_RELAY_TX_FEE)), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::NODE_RELAY);
|
|
659
665
|
argsman.AddArg("-acceptstalefeeestimates", strprintf("Read fee estimates even if they are stale (%sdefault: %u) fee estimates are considered stale if they are %s hours old", "regtest only; ", DEFAULT_ACCEPT_STALE_FEE_ESTIMATES, Ticks<std::chrono::hours>(MAX_FILE_AGE)), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
|
660
666
|
argsman.AddArg("-bytespersigop", strprintf("Equivalent bytes per sigop in transactions for relay and mining (default: %u)", DEFAULT_BYTES_PER_SIGOP), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
667
|
+
argsman.AddArg("-bytespersigopstrict", strprintf("Minimum bytes per sigop in transactions we relay and mine (default: %u)", DEFAULT_BYTES_PER_SIGOP_STRICT), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
661
668
|
argsman.AddArg("-datacarrier", strprintf("Relay and mine data carrier transactions (default: %u)", DEFAULT_ACCEPT_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
669
|
+
argsman.AddArg("-datacarriercost", strprintf("Treat data carrier bytes as at least N vbytes each (default: %s)", DEFAULT_WEIGHT_PER_DATA_BYTE / 4.0), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
662
670
|
argsman.AddArg("-datacarriersize",
|
|
663
671
|
strprintf("Relay and mine transactions whose data-carrying raw scriptPubKeys in aggregate "
|
|
664
672
|
"are of this size or less, allowing multiple outputs (default: %u)",
|
|
665
673
|
MAX_OP_RETURN_RELAY),
|
|
666
674
|
ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
675
|
+
argsman.AddArg("-permitbaredatacarrier", strprintf("Relay data carrier outputs without OP_RETURN (default: %u)", DEFAULT_PERMITBAREDATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
676
|
+
argsman.AddArg("-acceptnonstddatacarrier", strprintf("Relay nonstandard data carrier outputs (default: %u)", DEFAULT_ACCEPT_NON_STD_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
677
|
+
argsman.AddArg("-permitephemeral", "Permit ephemeral policy exceptions: send, dust, and anchor", ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
678
|
+
argsman.AddArg("-subdustfeepenalty", strprintf("Apply the sub-dust fee penalty to relay policy (default: %u)", DEFAULT_SUBDUSTFEEPENALTY), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
679
|
+
argsman.AddArg("-maxscriptsize=<n>", strprintf("Maximum size of scripts (including the witness stack) we relay and mine (default: %s)", DEFAULT_SCRIPT_SIZE_POLICY_LIMIT), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
680
|
+
argsman.AddArg("-maxtxlegacysigops", strprintf("Maximum legacy sigops in transactions we relay and mine (default: %s)", MAX_TX_LEGACY_SIGOPS), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
681
|
+
argsman.AddArg("-mempoolreplacement", "Set RBF policy: 0 disables, fee,optin honors signaling, and fee,-optin enables full RBF (default: fee,-optin)", ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
682
|
+
argsman.AddArg("-mempooltruc", "Set TRUC policy: reject, accept, or enforce (default: enforce)", ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
683
|
+
argsman.AddArg("-minrelaycoinblocks=<n>", strprintf("Minimum coin blocks a transaction must spend to be relayed (default: %s)", DEFAULT_MINRELAYCOINBLOCKS), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
684
|
+
argsman.AddArg("-minrelaymaturity=<n>", strprintf("Minimum input maturity before relay (default: %s)", DEFAULT_MINRELAYMATURITY), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
667
685
|
argsman.AddArg("-permitbaremultisig", strprintf("Relay transactions creating non-P2SH multisig outputs (default: %u)", DEFAULT_PERMIT_BAREMULTISIG), ArgsManager::ALLOW_ANY,
|
|
668
686
|
OptionsCategory::NODE_RELAY);
|
|
687
|
+
argsman.AddArg("-spkreuse=<policy>", "Set script reuse policy: allow or conflict (default: allow)", ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
669
688
|
argsman.AddArg("-minrelaytxfee=<amt>", strprintf("Fees (in %s/kvB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: %s)",
|
|
670
689
|
CURRENCY_UNIT, FormatMoney(DEFAULT_MIN_RELAY_TX_FEE)), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
671
690
|
argsman.AddArg("-whitelistforcerelay", strprintf("Add 'forcerelay' permission to whitelisted peers with default permissions. This will relay transactions even if the transactions were already in the mempool. (default: %d)", DEFAULT_WHITELISTFORCERELAY), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
672
691
|
argsman.AddArg("-whitelistrelay", strprintf("Add 'relay' permission to whitelisted peers with default permissions. This will accept relayed transactions even when not relaying transactions (default: %d)", DEFAULT_WHITELISTRELAY), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
|
|
673
692
|
|
|
674
693
|
|
|
675
|
-
argsman.AddArg("-blockmaxweight=<n>", strprintf("Set maximum BIP141 block weight (default: %d)", DEFAULT_BLOCK_MAX_WEIGHT), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::BLOCK_CREATION);
|
|
694
|
+
argsman.AddArg("-blockmaxsize=<n>", strprintf("Set maximum block size in bytes (default: %d)", DEFAULT_BLOCK_MAX_SIZE), ArgsManager::ALLOW_ANY, OptionsCategory::BLOCK_CREATION);
|
|
695
|
+
argsman.AddArg("-blockmaxweight=<n>", strprintf("Set maximum BIP141 block weight (default: %d)", DEFAULT_BLOCK_MAX_WEIGHT), ArgsManager::ALLOW_ANY, OptionsCategory::BLOCK_CREATION);
|
|
676
696
|
argsman.AddArg("-blockreservedweight=<n>", strprintf("Reserve space for the fixed-size block header plus the largest coinbase transaction the mining software may add to the block. (default: %d).", DEFAULT_BLOCK_RESERVED_WEIGHT), ArgsManager::ALLOW_ANY, OptionsCategory::BLOCK_CREATION);
|
|
677
697
|
argsman.AddArg("-blockmintxfee=<amt>", strprintf("Set lowest fee rate (in %s/kvB) for transactions to be included in block creation. (default: %s)", CURRENCY_UNIT, FormatMoney(DEFAULT_BLOCK_MIN_TX_FEE)), ArgsManager::ALLOW_ANY, OptionsCategory::BLOCK_CREATION);
|
|
698
|
+
argsman.AddArg("-blockprioritysize=<n>", strprintf("Set maximum size of high-priority/low-fee transactions in bytes (default: %d)", DEFAULT_BLOCK_PRIORITY_SIZE), ArgsManager::ALLOW_ANY, OptionsCategory::BLOCK_CREATION);
|
|
678
699
|
argsman.AddArg("-blockversion=<n>", "Override block version to test forking scenarios", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::BLOCK_CREATION);
|
|
679
700
|
|
|
680
701
|
argsman.AddArg("-rest", strprintf("Accept public REST requests (default: %u)", DEFAULT_REST_ENABLE), ArgsManager::ALLOW_ANY, OptionsCategory::RPC);
|
|
@@ -961,6 +982,8 @@ bool AppInitParameterInteraction(const ArgsManager& args)
|
|
|
961
982
|
// Signal NODE_P2P_V2 if BIP324 v2 transport is enabled.
|
|
962
983
|
if (args.GetBoolArg("-v2transport", DEFAULT_V2_TRANSPORT)) {
|
|
963
984
|
g_local_services = ServiceFlags(g_local_services | NODE_P2P_V2);
|
|
985
|
+
} else if (args.GetBoolArg("-v2onlyclearnet", false)) {
|
|
986
|
+
return InitError(_("Cannot set -v2onlyclearnet to true when v2transport is disabled."));
|
|
964
987
|
}
|
|
965
988
|
|
|
966
989
|
// Signal NODE_COMPACT_FILTERS if peerblockfilters and basic filters index are both enabled.
|
|
@@ -1051,6 +1074,13 @@ bool AppInitParameterInteraction(const ArgsManager& args)
|
|
|
1051
1074
|
}
|
|
1052
1075
|
}
|
|
1053
1076
|
|
|
1077
|
+
if (args.IsArgSet("-blockmaxsize")) {
|
|
1078
|
+
const auto max_block_size = args.GetIntArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE);
|
|
1079
|
+
if (max_block_size > MAX_BLOCK_SERIALIZED_SIZE) {
|
|
1080
|
+
return InitError(strprintf(_("Specified -blockmaxsize (%d) exceeds consensus maximum block size (%d)"), max_block_size, MAX_BLOCK_SERIALIZED_SIZE));
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1054
1084
|
{
|
|
1055
1085
|
const auto block_reserved_weight = args.GetIntArg("-blockreservedweight", DEFAULT_BLOCK_RESERVED_WEIGHT);
|
|
1056
1086
|
if (block_reserved_weight > MAX_BLOCK_WEIGHT) {
|
|
@@ -1061,7 +1091,12 @@ bool AppInitParameterInteraction(const ArgsManager& args)
|
|
|
1061
1091
|
}
|
|
1062
1092
|
}
|
|
1063
1093
|
|
|
1094
|
+
g_script_size_policy_limit = args.GetIntArg("-maxscriptsize", g_script_size_policy_limit);
|
|
1064
1095
|
nBytesPerSigOp = args.GetIntArg("-bytespersigop", nBytesPerSigOp);
|
|
1096
|
+
nBytesPerSigOpStrict = args.GetIntArg("-bytespersigopstrict", nBytesPerSigOpStrict);
|
|
1097
|
+
|
|
1098
|
+
const std::string spk_reuse = args.GetArg("-spkreuse", DEFAULT_SPKREUSE);
|
|
1099
|
+
SpkReuseMode = (spk_reuse == "allow" || args.GetBoolArg("-spkreuse", false)) ? SRM_ALLOW : SRM_REJECT;
|
|
1065
1100
|
|
|
1066
1101
|
if (!g_wallet_init_interface.ParameterInteraction()) return false;
|
|
1067
1102
|
|
|
@@ -1193,6 +1228,10 @@ bool CheckHostPortOptions(const ArgsManager& args) {
|
|
|
1193
1228
|
}
|
|
1194
1229
|
}
|
|
1195
1230
|
|
|
1231
|
+
if (auto parsed = args.GetFixedPointArg("-datacarriercost", 2)) {
|
|
1232
|
+
g_weight_per_data_byte = ((*parsed * WITNESS_SCALE_FACTOR) + 99) / 100;
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1196
1235
|
for ([[maybe_unused]] const auto& [param_name, unix, suffix_allowed] : std::vector<std::tuple<std::string, bool, bool>>{
|
|
1197
1236
|
// arg name UNIX socket support =suffix allowed
|
|
1198
1237
|
{"-i2psam", false, false},
|
|
@@ -2002,6 +2041,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
|
|
2002
2041
|
connOptions.m_peer_connect_timeout = peer_connect_timeout;
|
|
2003
2042
|
connOptions.whitelist_forcerelay = args.GetBoolArg("-whitelistforcerelay", DEFAULT_WHITELISTFORCERELAY);
|
|
2004
2043
|
connOptions.whitelist_relay = args.GetBoolArg("-whitelistrelay", DEFAULT_WHITELISTRELAY);
|
|
2044
|
+
connOptions.disable_v1conn_clearnet = args.GetBoolArg("-v2onlyclearnet", false);
|
|
2005
2045
|
|
|
2006
2046
|
// Port to bind to if `-bind=addr` is provided without a `:port` suffix.
|
|
2007
2047
|
const uint16_t default_bind_port =
|
|
@@ -2043,10 +2083,12 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
|
|
2043
2083
|
return InitError(ResolveErrMsg("bind", bind_arg));
|
|
2044
2084
|
}
|
|
2045
2085
|
|
|
2086
|
+
NetPermissionFlags all_permission_flags{NetPermissionFlags::None};
|
|
2046
2087
|
for (const std::string& strBind : args.GetArgs("-whitebind")) {
|
|
2047
2088
|
NetWhitebindPermissions whitebind;
|
|
2048
2089
|
bilingual_str error;
|
|
2049
2090
|
if (!NetWhitebindPermissions::TryParse(strBind, whitebind, error)) return InitError(error);
|
|
2091
|
+
NetPermissions::AddFlag(all_permission_flags, whitebind.m_flags);
|
|
2050
2092
|
connOptions.vWhiteBinds.push_back(whitebind);
|
|
2051
2093
|
}
|
|
2052
2094
|
|
|
@@ -2063,17 +2105,31 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
|
|
2063
2105
|
}
|
|
2064
2106
|
}
|
|
2065
2107
|
|
|
2108
|
+
connOptions.listenonion = args.GetBoolArg("-listenonion", DEFAULT_LISTEN_ONION);
|
|
2109
|
+
|
|
2066
2110
|
CService onion_service_target;
|
|
2067
2111
|
if (!connOptions.onion_binds.empty()) {
|
|
2068
2112
|
onion_service_target = connOptions.onion_binds.front();
|
|
2069
2113
|
} else if (!connOptions.vBinds.empty()) {
|
|
2070
2114
|
onion_service_target = connOptions.vBinds.front();
|
|
2115
|
+
if (connOptions.listenonion) {
|
|
2116
|
+
std::string alternate_connections{"clearnet"}, only_from_localhost;
|
|
2117
|
+
if (onion_service_target.IsBindAny()) {
|
|
2118
|
+
only_from_localhost = " from localhost";
|
|
2119
|
+
} else if (onion_service_target.IsLocal()) {
|
|
2120
|
+
alternate_connections = "local";
|
|
2121
|
+
}
|
|
2122
|
+
InitWarning(strprintf(_("You are using a common listening port (%s) for both Tor and %s connections. All connections to this port%s will be assumed to be Tor connections, and will be denied any whitelist permissions. If this is not your intent, setup a separate -bind=<addr>[:<port>]=onion configuration, or set -listenonion=0."),
|
|
2123
|
+
onion_service_target.ToStringAddrPort(),
|
|
2124
|
+
alternate_connections,
|
|
2125
|
+
only_from_localhost));
|
|
2126
|
+
}
|
|
2071
2127
|
} else {
|
|
2072
2128
|
onion_service_target = DefaultOnionServiceTarget(default_bind_port_onion);
|
|
2073
2129
|
connOptions.onion_binds.push_back(onion_service_target);
|
|
2074
2130
|
}
|
|
2075
2131
|
|
|
2076
|
-
if (args.GetBoolArg("-listenonion", DEFAULT_LISTEN_ONION)) {
|
|
2132
|
+
if (connOptions.listenonion) {
|
|
2077
2133
|
if (connOptions.onion_binds.size() > 1) {
|
|
2078
2134
|
InitWarning(strprintf(_("More than one onion bind address is provided. Using %s "
|
|
2079
2135
|
"for the automatically created Tor onion service."),
|
|
@@ -2088,11 +2144,18 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
|
|
2088
2144
|
Discover();
|
|
2089
2145
|
}
|
|
2090
2146
|
|
|
2091
|
-
for (const auto& net : args.GetArgs("-whitelist")) {
|
|
2147
|
+
std::vector<std::string> whitelist_opts = args.GetArgs("-whitelist");
|
|
2148
|
+
if ((g_local_services & NODE_BLOOM) != NODE_BLOOM && args.GetBoolArg("-peerbloomfilters", true)) {
|
|
2149
|
+
// If peerbloomfilters isn't specified, enable it only for localhost by default.
|
|
2150
|
+
whitelist_opts.emplace_back("in,out,bloomfilter@127.0.0.0/8");
|
|
2151
|
+
whitelist_opts.emplace_back("in,out,bloomfilter@[::1]/128");
|
|
2152
|
+
}
|
|
2153
|
+
for (const auto& net : whitelist_opts) {
|
|
2092
2154
|
NetWhitelistPermissions subnet;
|
|
2093
2155
|
ConnectionDirection connection_direction;
|
|
2094
2156
|
bilingual_str error;
|
|
2095
2157
|
if (!NetWhitelistPermissions::TryParse(net, subnet, connection_direction, error)) return InitError(error);
|
|
2158
|
+
NetPermissions::AddFlag(all_permission_flags, subnet.m_flags);
|
|
2096
2159
|
if (connection_direction & ConnectionDirection::In) {
|
|
2097
2160
|
connOptions.vWhitelistedRangeIncoming.push_back(subnet);
|
|
2098
2161
|
}
|
|
@@ -2101,6 +2164,11 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
|
|
2101
2164
|
}
|
|
2102
2165
|
}
|
|
2103
2166
|
|
|
2167
|
+
if (NetPermissions::HasFlag(all_permission_flags, NetPermissionFlags::BlockFilters_Explicit) &&
|
|
2168
|
+
g_enabled_filter_types.count(BlockFilterType::BASIC) != 1) {
|
|
2169
|
+
return InitError(_("Cannot grant blockfilters permission without -blockfilterindex."));
|
|
2170
|
+
}
|
|
2171
|
+
|
|
2104
2172
|
connOptions.vSeedNodes = args.GetArgs("-seednode");
|
|
2105
2173
|
|
|
2106
2174
|
const auto connect = args.GetArgs("-connect");
|