This PR decouples PeerManager from our global args manager by introducing PeerManager::Options.
net processing, refactor: Decouple PeerManager from gArgs #27499
pull dergoegge wants to merge 6 commits into bitcoin:master from dergoegge:2023-04-peerman-opts changing 9 files +87 −37-
dergoegge commented at 12:13 PM on April 20, 2023: member
-
DrahtBot commented at 12:13 PM on April 20, 2023: contributor
<!--e57a25ab6845829454e8d69fc972939a-->
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.
<!--021abf342d371248e50ceaed478a90ca-->
Reviews
See the guideline for information on the review process.
Type Reviewers ACK stickies-v, TheCharlatan Concept ACK glozow, hebasto, theuni If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.
<!--174a7506f384e20aa4161008e828411d-->
Conflicts
Reviewers, this pull request conflicts with the following ones:
- #28043 (fuzz: Test headers pre-sync through p2p interface by dergoegge)
- #28031 (Package Relay 1/3: Introduce TxPackageTracker as Orphan Resolution Module by glozow)
- #27385 (net, refactor: extract Network and BIP155Network logic to node/network by jonatack)
- #26621 (refactor: Continue moving application data from CNode to Peer by dergoegge)
- #25572 (refactor: Introduce EvictionManager and use it for the inbound eviction logic by dergoegge)
- #25268 (refactor: Introduce EvictionManager by dergoegge)
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.
- DrahtBot added the label CI failed on Apr 20, 2023
- dergoegge force-pushed on Apr 20, 2023
- DrahtBot removed the label CI failed on Apr 20, 2023
-
in src/init.cpp:1559 in 2bf38a3f22 outdated
1552 | @@ -1553,8 +1553,12 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) 1553 | ChainstateManager& chainman = *Assert(node.chainman); 1554 | 1555 | assert(!node.peerman); 1556 | - node.peerman = PeerManager::make(*node.connman, *node.addrman, node.banman.get(), 1557 | - chainman, *node.mempool, ignores_incoming_txs); 1558 | + node.peerman = PeerManager::make(*node.connman, *node.addrman, 1559 | + chainman, *node.mempool, 1560 | + PeerManager::Options{ 1561 | + .banman = node.banman.get(),
TheCharlatan commented at 10:01 AM on April 21, 2023:Why is the
banmanmoved into the options?
dergoegge commented at 10:34 AM on April 21, 2023:I thought it makes sense because the banman is optional but happy to move it out, no strong opinion on this. Let me know what you prefer.
Will leave this unresolved for a bit to let others chime in as well.
in src/net_processing.cpp:1820 in 2bf38a3f22 outdated
1797 | + Options opts) 1798 | : m_chainparams(chainman.GetParams()), 1799 | m_connman(connman), 1800 | m_addrman(addrman), 1801 | - m_banman(banman), 1802 | + m_banman(opts.banman),
TheCharlatan commented at 10:09 AM on April 21, 2023:Doesn't this leave us with two pointers, one in
m_banmanand the other inm_opts.banmanthat is never used?
dergoegge commented at 10:35 AM on April 21, 2023:Yea, could get rid of m_banman or not have banman in the options in the first place...
stickies-v commented at 2:33 PM on July 18, 2023:I agree that we shouldn't have it in both places. No view on what's better (and if we want to move it to opts at all). If no one has a strong view, probably best to minimize churn and leave it as is?
dergoegge commented at 3:33 PM on July 18, 2023:Will leave as is, can be done in a follow up
stickies-v commented at 12:14 PM on July 19, 2023:As discussed offline, what I meant with "leave it as is" is to not move banman in this PR, i.e. reverting the change in this PR.
dergoegge commented at 12:29 PM on July 19, 2023:Removed banman from the options on latest push
in src/init.cpp:1562 in b51fdf2ce7 outdated
1557 | @@ -1558,6 +1558,8 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) 1558 | PeerManager::Options{ 1559 | .banman = node.banman.get(), 1560 | .ignore_incoming_txs = ignores_incoming_txs, 1561 | + .reconcile_txs = 1562 | + args.GetBoolArg("-txreconciliation", DEFAULT_TXRECONCILIATION_ENABLE),
TheCharlatan commented at 10:15 AM on April 21, 2023:Could reading from the args be moved to their own
ApplyArgsManOptionsfunction like in variousnode/*_args.cppfiles? Then the test code wouldn't have to repeat the logic here.
dergoegge commented at 3:50 PM on April 21, 2023:Done on the latest push
TheCharlatan commented at 10:42 AM on April 21, 2023: contributorConcept ACK
dergoegge force-pushed on Apr 21, 2023dergoegge force-pushed on Apr 21, 2023DrahtBot added the label CI failed on Apr 21, 2023dergoegge force-pushed on Apr 22, 2023DrahtBot removed the label CI failed on Apr 22, 2023glozow added the label Refactoring on May 8, 2023glozow added the label P2P on May 8, 2023dergoegge force-pushed on Jul 7, 2023in src/test/util/setup_common.cpp:1 in 450866412a outdated
stickies-v commented at 1:37 PM on July 18, 2023:I think the entire diff in this file can be removed on commit 450866412a43088415b14d360997bd248c9c53a2?
stickies-v commented at 2:09 PM on July 18, 2023:I think you now get to remove
#include <common/args.h>🥳
dergoegge commented at 3:33 PM on July 18, 2023:Done
dergoegge commented at 3:35 PM on July 18, 2023:Done
stickies-v commented at 12:37 PM on July 19, 2023:What's the rationale for using
m_node.banman.get()instead ofnullptror instead of the locally constructedbanman.get()? This comment applies to all 4 changes in this file.
dergoegge commented at 1:04 PM on July 19, 2023:That was a mistake on my side. Reverted in the latest push
in src/node/peerman_args.cpp:14 in 4a31d4ce13 outdated
9 | +void ApplyArgsManOptions(const ArgsManager& argsman, PeerManager::Options& options) 10 | +{ 11 | + options.reconcile_txs = 12 | + argsman.GetBoolArg("-txreconciliation", DEFAULT_TXRECONCILIATION_ENABLE); 13 | + options.max_orphan_txs = 14 | + (uint32_t)std::max(int64_t{0}, argsman.GetIntArg("-maxorphantx", DEFAULT_MAX_ORPHAN_TRANSACTIONS));
stickies-v commented at 1:53 PM on July 18, 2023:nit: I think we try to avoid C-style casts?
static_cast<uint32_t>(std::max(int64_t{0}, argsman.GetIntArg("-maxorphantx", DEFAULT_MAX_ORPHAN_TRANSACTIONS)));
in src/init.cpp:1545 in 4a31d4ce13 outdated
1538 | @@ -1538,9 +1539,16 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) 1539 | 1540 | ChainstateManager& chainman = *Assert(node.chainman); 1541 | 1542 | + 1543 | + PeerManager::Options peerman_opts; 1544 | + peerman_opts.banman = node.banman.get(); 1545 | + peerman_opts.ignore_incoming_txs = ignores_incoming_txs;
stickies-v commented at 2:15 PM on July 18, 2023:nit: I find designated initializers a bit more readable but maybe that's personal? (here and in
setup_common.cpp)PeerManager::Options peerman_opts{ .banman = node.banman.get(), .ignore_incoming_txs = ignores_incoming_txs, };
dergoegge commented at 3:33 PM on July 18, 2023:Done
in src/net_processing.cpp:489 in 4a31d4ce13 outdated
485 | @@ -486,8 +486,8 @@ class PeerManagerImpl final : public PeerManager 486 | { 487 | public: 488 | PeerManagerImpl(CConnman& connman, AddrMan& addrman, 489 | - BanMan* banman, ChainstateManager& chainman, 490 | - CTxMemPool& pool, bool ignore_incoming_txs); 491 | + ChainstateManager& chainman, CTxMemPool& pool, 492 | + Options opts);
stickies-v commented at 2:28 PM on July 18, 2023:Maybe worth introducing move semantics here?
<details> <summary>git diff on 4a31d4ce13436fb52ef15df4db3e2937e11d2ab7</summary>
diff --git a/src/init.cpp b/src/init.cpp index 923da24a7..0b276d7cd 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1540,15 +1540,17 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) ChainstateManager& chainman = *Assert(node.chainman); - PeerManager::Options peerman_opts; - peerman_opts.banman = node.banman.get(); - peerman_opts.ignore_incoming_txs = ignores_incoming_txs; - ApplyArgsManOptions(args, peerman_opts); - - assert(!node.peerman); - node.peerman = PeerManager::make(*node.connman, *node.addrman, - chainman, *node.mempool, - peerman_opts); + { + PeerManager::Options peerman_opts; + peerman_opts.banman = node.banman.get(); + peerman_opts.ignore_incoming_txs = ignores_incoming_txs; + ApplyArgsManOptions(args, peerman_opts); + + assert(!node.peerman); + node.peerman = PeerManager::make(*node.connman, *node.addrman, + chainman, *node.mempool, + std::move(peerman_opts)); + } RegisterValidationInterface(node.peerman.get()); // ********************************************************* Step 8: start indexers diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 3298a280a..7ceb01618 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -487,7 +487,7 @@ class PeerManagerImpl final : public PeerManager public: PeerManagerImpl(CConnman& connman, AddrMan& addrman, ChainstateManager& chainman, CTxMemPool& pool, - Options opts); + Options&& opts); /** Overridden from CValidationInterface. */ void BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexConnected) override @@ -1807,14 +1807,14 @@ std::optional<std::string> PeerManagerImpl::FetchBlock(NodeId peer_id, const CBl std::unique_ptr<PeerManager> PeerManager::make(CConnman& connman, AddrMan& addrman, ChainstateManager& chainman, CTxMemPool& pool, - Options opts) + Options&& opts) { - return std::make_unique<PeerManagerImpl>(connman, addrman, chainman, pool, opts); + return std::make_unique<PeerManagerImpl>(connman, addrman, chainman, pool, std::move(opts)); } PeerManagerImpl::PeerManagerImpl(CConnman& connman, AddrMan& addrman, ChainstateManager& chainman, CTxMemPool& pool, - Options opts) + Options&& opts) : m_chainparams(chainman.GetParams()), m_connman(connman), m_addrman(addrman), diff --git a/src/net_processing.h b/src/net_processing.h index e192277ec..db82ca911 100644 --- a/src/net_processing.h +++ b/src/net_processing.h @@ -54,7 +54,7 @@ public: static std::unique_ptr<PeerManager> make(CConnman& connman, AddrMan& addrman, ChainstateManager& chainman, CTxMemPool& pool, - Options opts); + Options&& opts); virtual ~PeerManager() { } /** diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp index 026d5913b..c8f5fe096 100644 --- a/src/test/util/setup_common.cpp +++ b/src/test/util/setup_common.cpp @@ -272,12 +272,14 @@ TestingSetup::TestingSetup( m_node.args->GetIntArg("-checkaddrman", 0)); m_node.banman = std::make_unique<BanMan>(m_args.GetDataDirBase() / "banlist", nullptr, DEFAULT_MISBEHAVING_BANTIME); m_node.connman = std::make_unique<ConnmanTestMsg>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman); // Deterministic randomness for tests. - PeerManager::Options peerman_opts; - peerman_opts.banman = m_node.banman.get(); - ApplyArgsManOptions(*m_node.args, peerman_opts); - m_node.peerman = PeerManager::make(*m_node.connman, *m_node.addrman, - *m_node.chainman, *m_node.mempool, - peerman_opts); + { + PeerManager::Options peerman_opts; + peerman_opts.banman = m_node.banman.get(); + ApplyArgsManOptions(*m_node.args, peerman_opts); + m_node.peerman = PeerManager::make(*m_node.connman, *m_node.addrman, + *m_node.chainman, *m_node.mempool, + std::move(peerman_opts)); + } { CConnman::Options options; options.m_msgproc = m_node.peerman.get();<details>
dergoegge commented at 3:33 PM on July 18, 2023:We don't do this to any of the other Options we have (afaict). There is also little benefit since this only happens once at startup.
stickies-v commented at 12:22 PM on July 19, 2023:To summarize offline discussion:
CNodeuses move semantics for this, but as you pointed out we construct many moreCNodeinstances than we doPeerManagers. I'm not sure if the decreased readability trade-off is worth the benefits/sticking to best practices, so happy to have this marked as resolved.stickies-v commented at 2:34 PM on July 18, 2023: contributorConcept ACK
dergoegge force-pushed on Jul 18, 2023dergoegge force-pushed on Jul 19, 2023in src/net_processing.cpp:489 in 499222f82f outdated
484 | @@ -486,8 +485,8 @@ class PeerManagerImpl final : public PeerManager 485 | { 486 | public: 487 | PeerManagerImpl(CConnman& connman, AddrMan& addrman, 488 | - BanMan* banman, ChainstateManager& chainman, 489 | - CTxMemPool& pool, bool ignore_incoming_txs); 490 | + ChainstateManager& chainman, CTxMemPool& pool, 491 | + BanMan* banman, Options opts);
stickies-v commented at 12:37 PM on July 19, 2023:Probably no need to switch the parameter placement of
banman?dergoegge force-pushed on Jul 19, 2023DrahtBot added the label CI failed on Jul 19, 2023dergoegge force-pushed on Jul 19, 2023in src/net_processing.h:54 in f317796ad2 outdated
42 | @@ -43,9 +43,17 @@ struct CNodeStateStats { 43 | class PeerManager : public CValidationInterface, public NetEventsInterface 44 | { 45 | public: 46 | + struct Options { 47 | + bool ignore_incoming_txs{false}; 48 | + bool reconcile_txs{false}; 49 | + uint32_t max_orphan_txs{DEFAULT_MAX_ORPHAN_TRANSACTIONS}; 50 | + size_t max_extra_txs{DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN}; 51 | + bool capture_messages{false};
stickies-v commented at 1:50 PM on July 19, 2023:I wouldn't use hardcoded default values here, but instead use the globals (e.g.
DEFAULT_TXRECONCILIATION_ENABLE), and update the logic inpeerman_args.cppto only override Options members if they are set as cli args.
dergoegge commented at 3:09 PM on July 19, 2023:Done
DrahtBot removed the label CI failed on Jul 19, 2023dergoegge force-pushed on Jul 19, 2023in src/node/txreconciliation.h:15 in e3ddc5cc96 outdated
10 | @@ -11,8 +11,6 @@ 11 | #include <memory> 12 | #include <tuple> 13 | 14 | -/** Whether transaction reconciliation protocol should be enabled by default. */ 15 | -static constexpr bool DEFAULT_TXRECONCILIATION_ENABLE{false};
stickies-v commented at 4:49 PM on July 19, 2023:nit: with this change,
#include <node/txreconciliation.h>can be removed frominit.cpp
TheCharlatan commented at 2:15 PM on July 24, 2023:Moving it to the place where it is actually used seems like a good idea, no?
in src/node/peerman_args.cpp:5 in e3ddc5cc96 outdated
0 | @@ -0,0 +1,25 @@ 1 | +#include <node/peerman_args.h> 2 | + 3 | +#include <common/args.h> 4 | +#include <net_processing.h> 5 | +#include <node/txreconciliation.h>
stickies-v commented at 4:50 PM on July 19, 2023:nit: no longer needed
dergoegge commented at 4:38 PM on July 24, 2023:done
in src/net_processing.h:49 in e3ddc5cc96 outdated
44 | @@ -43,9 +45,17 @@ struct CNodeStateStats { 45 | class PeerManager : public CValidationInterface, public NetEventsInterface 46 | { 47 | public: 48 | + struct Options { 49 | + bool ignore_incoming_txs{false};
stickies-v commented at 5:26 PM on July 19, 2023:nit: probably best to use
DEFAULT_BLOCKSONLYto make it explicit whatfalserefers to, and keep it in sync?bool ignore_incoming_txs{DEFAULT_BLOCKSONLY};Alternatively (but I don't think using
peerman_optslike this is elegant, just throwing out ideas), could deduplicate it entirely:<details> <summary>git diff on e3ddc5cc96cf9f6339e7828c570fa5ad5130918a</summary>
diff --git a/src/init.cpp b/src/init.cpp index dd7a359a2..8b62690f7 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1169,7 +1169,11 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) fListen = args.GetBoolArg("-listen", DEFAULT_LISTEN); fDiscover = args.GetBoolArg("-discover", true); - const bool ignores_incoming_txs{args.GetBoolArg("-blocksonly", DEFAULT_BLOCKSONLY)}; + + PeerManager::Options peerman_opts{ + .ignore_incoming_txs = ignores_incoming_txs, + }; + ApplyArgsManOptions(args, peerman_opts); { @@ -1217,7 +1221,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) assert(!node.fee_estimator); // Don't initialize fee estimation with old data if we don't relay transactions, // as they would never get updated. - if (!ignores_incoming_txs) { + if (!peerman_opts.ignore_incoming_txs) { bool read_stale_estimates = args.GetBoolArg("-acceptstalefeeestimates", DEFAULT_ACCEPT_STALE_FEE_ESTIMATES); if (read_stale_estimates && (chainparams.GetChainType() != ChainType::REGTEST)) { return InitError(strprintf(_("acceptstalefeeestimates is not supported on %s chain."), chainparams.GetChainTypeString())); @@ -1539,12 +1543,6 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) ChainstateManager& chainman = *Assert(node.chainman); - - PeerManager::Options peerman_opts{ - .ignore_incoming_txs = ignores_incoming_txs, - }; - ApplyArgsManOptions(args, peerman_opts); - assert(!node.peerman); node.peerman = PeerManager::make(*node.connman, *node.addrman, node.banman.get(), chainman, diff --git a/src/net_processing.h b/src/net_processing.h index 041dd2c73..afafa169f 100644 --- a/src/net_processing.h +++ b/src/net_processing.h @@ -46,7 +46,7 @@ class PeerManager : public CValidationInterface, public NetEventsInterface { public: struct Options { - bool ignore_incoming_txs{false}; + bool ignore_incoming_txs{DEFAULT_BLOCKSONLY}; bool reconcile_txs{DEFAULT_TXRECONCILIATION_ENABLE}; uint32_t max_orphan_txs{DEFAULT_MAX_ORPHAN_TRANSACTIONS}; size_t max_extra_txs{DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN}; diff --git a/src/node/peerman_args.cpp b/src/node/peerman_args.cpp index 871f23f9d..c21a2ce32 100644 --- a/src/node/peerman_args.cpp +++ b/src/node/peerman_args.cpp @@ -8,6 +8,8 @@ namespace node { void ApplyArgsManOptions(const ArgsManager& argsman, PeerManager::Options& options) { + if (auto value{argsman.GetBoolArg("-blocksonly")}) options.ignore_incoming_txs = *value; + if (auto value{argsman.GetBoolArg("-txreconciliation")}) options.reconcile_txs = *value; if (auto value{argsman.GetIntArg("-maxorphantx")}) {</summary>
dergoegge commented at 4:38 PM on July 24, 2023:done
stickies-v approvedstickies-v commented at 6:44 PM on July 19, 2023: contributorACK 064ac73d0715fb2c371e68f8d4d234fee002299b
dergoegge requested review from TheCharlatan on Jul 24, 2023in src/net_processing.h:47 in 864a95cbee outdated
42 | @@ -43,9 +43,13 @@ struct CNodeStateStats { 43 | class PeerManager : public CValidationInterface, public NetEventsInterface 44 | { 45 | public: 46 | + struct Options { 47 | + bool ignore_incoming_txs{false};
glozow commented at 1:56 PM on July 24, 2023:Lost the comment while moving this from net_processing.cpp. I think it would be good to have doxygen comments on all of these members of
Options./** Whether this node is running in -blocksonly mode */ bool ignore_incoming_txs{false};
dergoegge commented at 4:38 PM on July 24, 2023:Done
stickies-v commented at 3:02 PM on July 25, 2023:@glozow's comment re documenting Options members addressed in https://github.com/bitcoin/bitcoin/pull/28149
glozow commented at 2:05 PM on July 24, 2023: memberconcept ACK
hebasto commented at 2:16 PM on July 24, 2023: memberConcept ACK.
[net processing] Introduce PeerManager options 8b87725921[net processing] Use ignore_incoming_txs from m_opts 4cfb7b925fdergoegge force-pushed on Jul 24, 2023[net processing] Move -txreconciliation to PeerManager::Options fa9e6d80d1[net processing] Move -maxorphantx to PeerManager::Options 567c4e0b6a[net processing] Move -blockreconstructionextratxn to PeerManager::Options bd59bda26b[net processing] Move -capturemessages to PeerManager::Options 23c7b51ddddergoegge force-pushed on Jul 24, 2023dergoegge commented at 4:38 PM on July 24, 2023: memberTouched up all the nits, also rebased
stickies-v approvedstickies-v commented at 5:24 PM on July 24, 2023: contributorre-ACK 23c7b51ddd2888cf7fb260c439f004bd28768473
TheCharlatan approvedTheCharlatan commented at 6:52 PM on July 24, 2023: contributorACK 23c7b51ddd2888cf7fb260c439f004bd28768473
theuni approvedtheuni commented at 7:23 PM on July 24, 2023: memberConcept ACK and quick review ACK.
My only nit is that
size_t max_extra_txsis platform dependent and says nothing about its upper bound. Similarly, from a quick glance, I thinkmax_orphan_txscould wrap from the command line?(I realize these aren't new problems, they're just highlighted here)
Maybe as a followup we could add some pedantic checks in init to make sure they're sane values that fit into 32bits and make
max_orphan_txsauint32_t. Please ignore if those checks exist and I'm not seeing them.dergoegge commented at 9:31 AM on July 25, 2023: memberMaybe as a followup we could add some pedantic checks in init to make sure they're sane values that fit into 32bits and make max_orphan_txs a uint32_t. Please ignore if those checks exist and I'm not seeing them.
Thanks for pointing this out. I agree that some sane limits/checks would make sense for these settings as users could shoot themselves in the foot otherwise. I will leave this for a follow-up though as this isn't a new problem.
fanquake merged this on Jul 25, 2023fanquake closed this on Jul 25, 2023in src/node/peerman_args.cpp:21 in 23c7b51ddd
16 | + if (auto value{argsman.GetIntArg("-blockreconstructionextratxn")}) { 17 | + options.max_extra_txs = size_t(std::max(int64_t{0}, *value)); 18 | + } 19 | + 20 | + if (auto value{argsman.GetBoolArg("-capturemessages")}) options.capture_messages = *value; 21 | +}
maflcko commented at 10:40 AM on July 25, 2023:You forgot to read
-blocksonlyin this function
stickies-v commented at 10:55 AM on July 25, 2023:I think this is on purpose since we use
ignore_incoming_txsfor multiple purposes, see also my suggested diff in #27499 (review) (although I now see it can be simplified even further by not passingignores_incoming_txsto theOptionsconstructor at all). So, I don't think it's forgotten, but room for improvement in follow-up? Happy to open a pull for this if you think it's an improvement.
maflcko commented at 11:06 AM on July 25, 2023:Yeah, I don't see what is wrong with your diff (apart from it not compiling).
I just don't get the point of adding the
ApplyArgsManOptionshelper when it is not used consistently. Might as well not add it in the first place?
stickies-v commented at 3:01 PM on July 25, 2023:Agreed. Addressed in #28148.
stickies-v commented at 3:03 PM on July 25, 2023: contributorMaybe as a followup we could add some pedantic checks in init to make sure they're sane values that fit into 32bits and make
max_orphan_txsauint32_t.Addressed in https://github.com/bitcoin/bitcoin/pull/28149
achow101 referenced this in commit 272c4f3f10 on Jul 27, 2023glozow referenced this in commit 0d9a13ddd8 on Aug 9, 2023sidhujag referenced this in commit 1d2c550a15 on Aug 9, 2023Fabcien referenced this in commit cdd9740bd3 on Jul 12, 2024bitcoin locked this on Jul 24, 2024Labels
github-metadata-mirror
This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-02 21:13 UTC
This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me