elements/src/node
Ava Chow c33eb2360e
Merge bitcoin/bitcoin#30043: net: Replace libnatpmp with built-in PCP+NATPMP implementation
5c7cacf649 ci: Remove natpmp build option and libnatpmp dependency (laanwj)
7e7ec984da doc: Remove mention of natpmp build options (laanwj)
061c3e32a2 depends: Drop natpmp and associated option from depends (laanwj)
20a18bf6aa build: Drop libnatpmp from build system (laanwj)
7b04709862 qt: Changes for built-in PCP+NAT-PMP (laanwj)
52f8ef66c6 net: Replace libnatpmp with built-in NATPMP+PCP implementation in mapport (laanwj)
97c97177cd net: Add PCP and NATPMP implementation (laanwj)
d72df63d16 net: Use GetLocalAddresses in Discover (laanwj)
e02030432b net: Add netif utility (laanwj)
754e425438 crypto: Add missing WriteBE16 function (laanwj)

Pull request description:

  Continues #30005. Closes #17012..

  This PR adds PCP (Port Control Protocol) from [RFC6887](https://datatracker.ietf.org/doc/html/rfc6887).  This adds, in addition to the existing IPv4 port mapping (which now uses PCP, with fallback to NAT-PMP), support for IPv6 pinholing-that is, opening a port on the firewall to make it reachable.

  PCP, like NAT-PMP is a simple UDP-based protocol, and the implementation is self-contained, so this gets rid of lthe libnatpnp dependency without adding a new one. It should otherwise be a drop-in replacement. NAT-PMP fallback is implemented so this will not make router support worse.

  For now it is disabled by default, though in the future (not in this PR) we could consider enable it by default to increase the number of connectable nodes without adding significant attack surface.

  To test:
  ```bash
  bitcoind -regtest -natpmp=1 -debug=net
  ```

  (most of the changes in this PR are, ironically, removing the libnatpmp dependency and associated build system and build docs)

  ## TODO

  - [x] Default gateway discovery on Linux / FreeBSD
  - [x] Default gateway discovery on Windows
  - [x] Default gateway discovery on MacOS
  - [x] Either solve FreeBSD compile issue (probably upstream issue) or remove FreeBSD support

  ## Things to consider for follow-up PRs

  - https://github.com/bitcoin/bitcoin/pull/30043#discussion_r1658764974 avoid unreachable nets (not given to -onlynet=)

  - https://github.com/bitcoin/bitcoin/pull/30043#discussion_r1658949236 could announce an addr:port where we do not listen (no -bind)

  - https://github.com/bitcoin/bitcoin/pull/30043#discussion_r1684368824 could announce the wrong port because it uses GetListenPort()

  - https://github.com/bitcoin/bitcoin/pull/30043#discussion_r1679709347 if we requested one port but another was assigned, then which one to use in the renewal?

  - https://github.com/bitcoin/bitcoin/pull/30043#discussion_r1772017020 Use `GetAdapterAddresses` to discover local addresses for Windows

ACKs for top commit:
  Sjors:
    ACK 5c7cacf649
  achow101:
    ACK 5c7cacf649
  vasild:
    ACK 5c7cacf649

Tree-SHA512: e35b69e56d5f5449a3d48a799f9b7b65107c65eeb3e245c2c1e9d42221e469ca5ead90afae423160601cd664dd553a51c859e04f4492f335b064aae3bf23e3bc
2024-09-30 16:27:47 -04:00
..
abort.cpp refactor: remove warnings globals 2024-06-13 11:20:49 +01:00
abort.h refactor: remove warnings globals 2024-06-13 11:20:49 +01:00
blockmanager_args.cpp Add -blocksxor boolean option 2024-07-26 17:30:53 +02:00
blockmanager_args.h Add [[nodiscard]] where ignoring a Result return type is an error 2023-05-29 13:12:45 +02:00
blockstorage.cpp streams: remove unused code 2024-09-19 07:33:02 -04:00
blockstorage.h validation: Use span for ImportBlocks paths 2024-08-30 12:39:46 +02:00
caches.cpp validation: drop maximum -dbcache 2024-05-28 08:36:28 +02:00
caches.h Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
chainstate.cpp blockman: Replace m_reindexing with m_blockfiles_indexed 2024-06-07 19:18:46 +02:00
chainstate.h kernel: Add less confusing reindex options 2024-06-07 19:17:11 +02:00
chainstatemanager_args.cpp node: use uint256::FromUserHex for -assumevalid parsing 2024-08-23 13:53:40 +01:00
chainstatemanager_args.h refactor: Move {MAX,DEFAULT}_SCRIPTCHECK_THREADS constants 2023-10-03 10:52:17 +01:00
coin.cpp Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
coin.h scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
coins_view_args.cpp move-only: Extract common/args and common/config.cpp from util/system 2023-04-19 10:48:30 +02:00
coins_view_args.h refactor, txdb: Add CoinsViewOptions struct 2023-02-10 04:39:11 -04:00
connection_types.cpp net: expose transport types/session IDs of connections in RPC and logs 2023-10-02 18:11:11 -04:00
connection_types.h net: expose transport types/session IDs of connections in RPC and logs 2023-10-02 18:11:11 -04:00
context.cpp Introduce Mining interface 2024-06-18 18:47:51 +02:00
context.h kernel: Move background load thread to node context 2024-09-13 16:10:31 +02:00
database_args.cpp move-only: Extract common/args and common/config.cpp from util/system 2023-04-19 10:48:30 +02:00
database_args.h refactor, dbwrapper: Add DBParams and DBOptions structs 2023-02-10 04:39:11 -04:00
eviction.cpp [net] Move eviction logic to its own file 2022-07-06 18:13:54 +02:00
eviction.h [net] Move eviction logic to its own file 2022-07-06 18:13:54 +02:00
interface_ui.cpp util: Move util/string.h functions to util namespace 2024-05-16 10:16:08 -05:00
interface_ui.h add missing #include <cstdint> for GCC 15 2024-08-12 11:15:11 +01:00
interfaces.cpp Merge bitcoin/bitcoin#30043: net: Replace libnatpmp with built-in PCP+NATPMP implementation 2024-09-30 16:27:47 -04:00
kernel_notifications.cpp node: Track last block that received a blockTip notification 2024-09-17 09:24:01 +02:00
kernel_notifications.h node: Track last block that received a blockTip notification 2024-09-17 09:24:01 +02:00
mempool_args.cpp add deprecation warning for mempoolfullrbf 2024-08-07 10:19:52 +01:00
mempool_args.h refactor: Replace std::optional<bilingual_str> with util::Result 2023-05-24 08:55:47 -04:00
mempool_persist.cpp streams: remove AutoFile::Get() entirely 2024-09-13 21:59:29 -04:00
mempool_persist.h mempool: move LoadMempool/DumpMempool to node 2024-06-26 22:47:09 +00:00
mempool_persist_args.cpp move-only: Extract common/args and common/config.cpp from util/system 2023-04-19 10:48:30 +02:00
mempool_persist_args.h refactor: Move fs.* to util/fs.* 2023-03-23 12:55:18 +01:00
miner.cpp Drop unneeded nullptr check from CreateNewBlock() 2024-09-13 10:14:53 +02:00
miner.h Merge bitcoin/bitcoin#30194: refactor: use recommended type hiding on multi_index types 2024-08-07 20:00:28 +01:00
mini_miner.cpp MiniMiner: use FeeFrac in AncestorFeerateComparator 2024-07-09 17:22:51 +01:00
mini_miner.h Don't use iterator addresses in IteratorComparator 2024-06-19 10:14:31 +01:00
minisketchwrapper.cpp Use steady clock in SeedStrengthen and FindBestImplementation 2023-03-02 14:48:28 +01:00
minisketchwrapper.h Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
peerman_args.cpp Merge bitcoin/bitcoin#28149: net processing: clamp PeerManager::Options user input 2023-08-09 14:26:03 +02:00
peerman_args.h [net processing] Introduce PeerManager options 2023-07-24 18:30:59 +02:00
protocol_version.h Rename version.h to node/protocol_version.h 2023-11-30 11:28:31 +01:00
psbt.cpp scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
psbt.h Add src/node/* code to node:: namespace 2022-01-06 22:14:16 -05:00
README.md
timeoffsets.cpp refactor: remove warnings globals 2024-06-13 11:20:49 +01:00
timeoffsets.h refactor: remove warnings globals 2024-06-13 11:20:49 +01:00
transaction.cpp rpc: clarify ALREADY_IN_CHAIN rpc errors 2024-08-05 15:45:58 +01:00
transaction.h util: move fees.h and error.h to common/messages.h 2024-05-16 10:16:08 -05:00
txreconciliation.cpp random: get rid of GetRand by inlining 2024-07-01 12:39:53 -04:00
txreconciliation.h [net processing] Move -txreconciliation to PeerManager::Options 2023-07-24 18:35:28 +02:00
types.h rpc: clarify ALREADY_IN_CHAIN rpc errors 2024-08-05 15:45:58 +01:00
utxo_snapshot.cpp streams: remove unused code 2024-09-19 07:33:02 -04:00
utxo_snapshot.h assumeutxo: Drop block height from metadata 2024-08-08 23:55:06 +02:00
warnings.cpp Use WITH_LOCK in Warnings::Set 2024-07-06 13:00:53 -04:00
warnings.h refactor: remove warnings globals 2024-06-13 11:20:49 +01:00

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.