7942951e3fRemove unused g_best_block (Ryan Ofsky)e3a560ca68rpc: use waitTipChanged for longpoll (Ryan Ofsky)460687a09cRemove unused CRPCSignals (Sjors Provoost)dca923150eReplace RPCNotifyBlockChange with waitTipChanged() (Sjors Provoost)2a40ee1121rpc: check for negative timeout arg in waitfor* (Sjors Provoost)de7c855b3arpc: recommend -rpcclienttimeout=0 for waitfor* (Sjors Provoost)77ec072925rpc: fix waitfornewblock description (Sjors Provoost)285fe9fb51rpc: add test for waitforblock and waitfornewblock (Sjors Provoost)b94b27cf05Add waitTipChanged to Mining interface (Sjors Provoost)7eccdaf160node: Track last block that received a blockTip notification (Sjors Provoost)ebb8215f23Rename getTipHash() to getTip() and return BlockRef (Sjors Provoost)89a8f74bbbrefactor: rename BlockKey to BlockRef (Sjors Provoost) Pull request description: This continues the work in #30200 so that a future Stratum v2 Template Provider (see #29432) can avoid accessing node internals. It needs to know when a new block arrives in order to push new templates to connected clients. `waitTipChanged()` uses a new kernel notification `notifications().m_tip_block_mutex`, which this PR also introduces (a previous version used `g_best_block`). In order to ensure the new method works as intended, the `waitfornewblock`, `waitforblock` and `waitforblockheight` RPC methods are refactored to use it. This allows removing `RPCNotifyBlockChange`. There's a commit to add (direct) tests for the methods that are about to be refactored: - `waitfornewblock` was already implicitly tested by `feature_shutdown.py`. - `waitforblockheight` by `feature_coinstatsindex.py` and `example_test.py` This PR renames `getTipHash()` to `getTip()` and returns a `BlockRef` (renamed from `BlockKey`) so that callers can use either the height or hash. The later commits make trivial improvements to the `waitfor*` RPC calls (not needed for this PR). The `waitTipChanged()` method could probably also be used for the longpoll functionality in `getblocktemplate`, but I'm a bit reluctant to touch that. `RPCServer::OnStarted` no longer does anything and `RPCServer::OnStopped` merely prints a log statement. They were added in #5711 as a refactor. This PR drops them entirely. Finally `g_best_block` is also dropped. ACKs for top commit: achow101: ACK7942951e3fryanofsky: Code review ACK7942951e3f. Just rebased since last review TheCharlatan: Re-ACK7942951e3fTree-SHA512: a5559446b4000c95e07aad33284b7ee2e57aafd87e1ae778b3825d59689566d047a8047e47a10f76e6e341e7dc72fd265a65afbc0a9c011d17c4cafd55031837
src/node/
The src/node/ directory contains code that needs to access node state
(state in CChain, CBlockIndex, CCoinsView, CTxMemPool, and similar
classes).
Code in src/node/ is meant to be segregated from code in
src/wallet/ and src/qt/, to ensure wallet and GUI
code changes don't interfere with node operation, to allow wallet and GUI code
to run in separate processes, and to perhaps eventually allow wallet and GUI
code to be maintained in separate source repositories.
As a rule of thumb, code in one of the src/node/,
src/wallet/, or src/qt/ directories should avoid
calling code in the other directories directly, and only invoke it indirectly
through the more limited src/interfaces/ classes.
This directory is at the moment
sparsely populated. Eventually more substantial files like
src/validation.cpp and
src/txmempool.cpp might be moved there.