Page MenuHomePhabricator

net: Replace libnatpmp with built-in PCP+NATPMP implementation
ClosedPublic

Authored by PiRK on Mar 31 2026, 08:18.

Details

Reviewers
Fabien
Group Reviewers
Restricted Project
Maniphest Tasks
Restricted Maniphest Task
Commits
rABC90911dd747d7: net: Replace libnatpmp with built-in PCP+NATPMP implementation
Summary

This PR adds PCP (Port Control Protocol) from 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.


crypto: Add missing WriteBE16 function

Also add fuzz test, mimicing the WriteLE16 one.

https://github.com/bitcoin/bitcoin/pull/30043/changes/754e4254388ec8ac1be6cf807bf300cd43fd3da5


net: Add PCP and NATPMP implementation

Add a RFC 6886 NATPMP and RFC 6887 Port Control Protocol (PCP)
implementation, to replace libnatpmp.

https://github.com/bitcoin/bitcoin/pull/30043/changes/97c97177cdb2f596aa7d4a65c4bde87de50a96f2


net: Replace libnatpmp with built-in NATPMP+PCP implementation in mapport

https://github.com/bitcoin/bitcoin/pull/30043/changes/52f8ef66c61b82457a161f3b90cc87f57d1dda80


qt: Changes for built-in PCP+NAT-PMP

Change option help, and remove conditionals.

https://github.com/bitcoin/bitcoin/pull/30043/changes/7b04709862f48e9020c7bef79cb31dd794cf91d0


cmake: remove natpmp dependency and configuration


depends: Drop natpmp and associated option from depends

https://github.com/bitcoin/bitcoin/pull/30043/changes/061c3e32a26c6c04bf734d62627403758d7e51d9


This concludes backport of core#30043
Depends on D19759
Ref T3982

Test Plan

ninja all check-all
More unit tests in D19761

Event Timeline

Tail of the build log:

[401/594] Linking C executable src/secp256k1/examples/ecdsa_example
[402/594] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[403/594] Linking C executable src/secp256k1/examples/ecdh_example
[404/594] Building CXX object src/CMakeFiles/bitcoin-cli.dir/bitcoin-cli.cpp.o
[405/594] Linking C executable src/secp256k1/examples/schnorr_example
[406/594] Building CXX object src/CMakeFiles/server.dir/wallet/init.cpp.o
[407/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockindex.cpp.o
[408/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/str.cpp.o
[409/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/logging.cpp.o
[410/594] Building C object src/secp256k1/CMakeFiles/internal-bench.dir/src/bench_internal.c.o
[411/594] Building C object src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o
[412/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/coins.cpp.o
[413/594] Linking C executable src/secp256k1/internal-bench
[414/594] Linking C executable src/secp256k1/ecmult-bench
[415/594] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[416/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/random.cpp.o
[417/594] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
[418/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[419/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockfilter.cpp.o
[420/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/transaction_utils.cpp.o
[421/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/net.cpp.o
[422/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[423/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[424/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[425/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[426/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/mining.cpp.o
[427/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/validation.cpp.o
[428/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[429/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/txmempool.cpp.o
[430/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/wallet.cpp.o
[431/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[432/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[433/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[434/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[435/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[436/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[437/594] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
[438/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[439/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[440/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[441/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[442/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[443/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[444/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[445/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[446/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[447/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[448/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[449/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[450/594] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[451/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[452/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[453/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[454/594] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[455/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[456/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[457/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[458/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang failed with exit code 1

Tail of the build log:

[412/604] Linking C executable src/secp256k1/examples/ecdsa_example
[413/604] Linking C executable src/secp256k1/examples/ecdh_example
[414/604] Linking C executable src/secp256k1/examples/schnorr_example
[415/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/logging.cpp.o
[416/604] Building CXX object src/CMakeFiles/server.dir/torcontrol.cpp.o
[417/604] Building CXX object src/CMakeFiles/server.dir/txmempool.cpp.o
[418/604] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
[419/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockindex.cpp.o
[420/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/str.cpp.o
[421/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/coins.cpp.o
[422/604] Building CXX object src/CMakeFiles/bitcoind.dir/bitcoind.cpp.o
[423/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/random.cpp.o
[424/604] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[425/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/transaction_utils.cpp.o
[426/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[427/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/net.cpp.o
[428/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[429/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockfilter.cpp.o
[430/604] Building CXX object src/CMakeFiles/server.dir/wallet/init.cpp.o
[431/604] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[432/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[433/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[434/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/mining.cpp.o
[435/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[436/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[437/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/validation.cpp.o
[438/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/txmempool.cpp.o
[439/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/wallet.cpp.o
[440/604] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
[441/604] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[442/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[443/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[444/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[445/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[446/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[447/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[448/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[449/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[450/604] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[451/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[452/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[453/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[454/604] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[455/604] Linking CXX static library chronik/libchronik-bridge.a
[456/604] Linking CXX static library chronik/libchronik.a
[457/604] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[458/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[459/604] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[460/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[461/604] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[462/604] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[463/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[464/604] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[465/604] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[466/604] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[467/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[468/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[469/604] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang-tidy failed with exit code 1

Tail of the build log:

[618/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/chacha20.cpp.o
[619/672] Linking CXX executable src/bitcoin-chainstate
FAILED: src/bitcoin-chainstate 
: && /usr/bin/c++ -Werror -g -O2 -fuse-ld=gold -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -lstdc++fs -fPIE -pie src/CMakeFiles/bitcoin-chainstate.dir/bitcoin-chainstate.cpp.o -o src/bitcoin-chainstate  /usr/lib/x86_64-linux-gnu/libjemalloc_pic.a  -lstdc++fs  src/libbitcoinkernel.a  src/crypto/libcrypto.a  src/crypto/libcrypto_sse4.1.a  src/crypto/libcrypto_avx2.a  src/crypto/libcrypto_shani.a  src/univalue/libunivalue.a  src/secp256k1/libsecp256k1.a  src/leveldb/libleveldb.a  src/crc32c/libcrc32c.a  /usr/lib/x86_64-linux-gnu/libjemalloc_pic.a  -lm  -lstdc++fs && :
/work/src/net.cpp:2359: error: undefined reference to 'GetLocalAddresses()'
collect2: error: ld returned 1 exit status
[620/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/ccoins_caching.cpp.o
[621/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/examples.cpp.o
[622/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/guiutil.cpp.o
[623/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoingui.cpp.o
[624/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/crypto_hash.cpp.o
[625/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/checkqueue.cpp.o
[626/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/data.cpp.o
[627/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/hashpadding.cpp.o
[628/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoin.cpp.o
[629/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/lockedpool.cpp.o
[630/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/gcs_filter.cpp.o
[631/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/crypto_aes.cpp.o
[632/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/merkle_root.cpp.o
[633/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/pool.cpp.o
[634/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/checkblock.cpp.o
[635/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rollingbloom.cpp.o
[636/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/block_assemble.cpp.o
[637/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/poly1305.cpp.o
[638/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/bench.cpp.o
[639/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/util_time.cpp.o
[640/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/streams_findbyte.cpp.o
[641/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/strencodings.cpp.o
[642/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/duplicate_inputs.cpp.o
[643/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/chained_tx.cpp.o
[644/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/platformstyle.cpp.o
[645/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/prevector.cpp.o
[646/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qvaluecombobox.cpp.o
[647/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/load_external.cpp.o
[648/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/nanobench.cpp.o
[649/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/peer_eviction.cpp.o
[650/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/verify_script.cpp.o
[651/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/mempool_eviction.cpp.o
[652/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin_locale.cpp.o
[653/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin.cpp.o
[654/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qvalidatedlineedit.cpp.o
[655/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/mempool_stress.cpp.o
[656/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rpc_mempool.cpp.o
[657/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/readwriteblock.cpp.o
[658/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rpc_blockchain.cpp.o
[659/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/trafficgraphwidget.cpp.o
[660/672] Linking CXX executable src/bench/bitcoin-bench
[661/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/utilitydialog.cpp.o
[662/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/splashscreen.cpp.o
[663/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/peertablemodel.cpp.o
[664/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/optionsdialog.cpp.o
[665/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/optionsmodel.cpp.o
[666/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/rpcconsole.cpp.o
[667/672] Linking CXX static library src/qt/libbitcoin-qt-base.a
[668/672] Automatic MOC for target bitcoin-qt
[669/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/bitcoin-qt_autogen/mocs_compilation.cpp.o
[670/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/main.cpp.o
[671/672] Linking CXX executable src/qt/bitcoin-qt
ninja: build stopped: cannot make progress due to previous errors.
Build build-without-wallet failed with exit code 1

Tail of the build log:

[374/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/net.cpp.o
[375/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/deserialize.cpp.o
[376/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/pow.cpp.o
[377/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_parsing.cpp.o
[378/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/protocol.cpp.o
[379/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/primitives_transaction.cpp.o
[380/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/psbt.cpp.o
[381/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/random.cpp.o
[382/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/rolling_bloom_filter.cpp.o
[383/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_bitcoin_consensus.cpp.o
[384/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_flags.cpp.o
[385/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script.cpp.o
[386/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_descriptor_cache.cpp.o
[387/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/process_message.cpp.o
[388/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/process_messages.cpp.o
[389/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/signature_checker.cpp.o
[390/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_interpreter.cpp.o
[391/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_ops.cpp.o
[392/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/secp256k1_ecdsa_signature_parse_der_lax.cpp.o
[393/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/scriptnum_ops.cpp.o
[394/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/secp256k1_ec_seckey_import_export_der.cpp.o
[395/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/span.cpp.o
[396/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[397/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/tx_in.cpp.o
[398/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/system.cpp.o
[399/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[400/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_sigcache.cpp.o
[401/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_sign.cpp.o
[402/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/tx_out.cpp.o
[403/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/string.cpp.o
[404/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[405/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/timedata.cpp.o
[406/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/socks5.cpp.o
[407/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/strprintf.cpp.o
[408/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[409/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/util.cpp.o
[410/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/txrequest.cpp.o
[411/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/transaction.cpp.o
[412/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[413/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[414/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[415/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/validation_load_mempool.cpp.o
[416/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[417/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[418/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[419/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[420/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[421/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[422/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[423/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[424/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[425/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[426/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[427/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[428/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[429/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[430/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[431/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-fuzzer failed with exit code 1

Tail of the build log:

[401/594] Linking C executable src/secp256k1/examples/ecdh_example
[402/594] Linking C executable src/secp256k1/examples/schnorr_example
[403/594] Building CXX object src/CMakeFiles/server.dir/validationinterface.cpp.o
[404/594] Building CXX object src/CMakeFiles/server.dir/torcontrol.cpp.o
[405/594] Building CXX object src/CMakeFiles/server.dir/rpc/avalanche.cpp.o
[406/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/logging.cpp.o
[407/594] Building CXX object src/CMakeFiles/server.dir/txmempool.cpp.o
[408/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockindex.cpp.o
[409/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/str.cpp.o
[410/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/coins.cpp.o
[411/594] Building CXX object src/CMakeFiles/bitcoind.dir/bitcoind.cpp.o
[412/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/random.cpp.o
[413/594] Building CXX object src/CMakeFiles/server.dir/rpc/rawtransaction.cpp.o
[414/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[415/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockfilter.cpp.o
[416/594] Building CXX object src/CMakeFiles/server.dir/wallet/init.cpp.o
[417/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[418/594] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[419/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/net.cpp.o
[420/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[421/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/transaction_utils.cpp.o
[422/594] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
[423/594] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[424/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[425/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/mining.cpp.o
[426/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[427/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/txmempool.cpp.o
[428/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[429/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/validation.cpp.o
[430/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/wallet.cpp.o
[431/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[432/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[433/594] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[434/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[435/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[436/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[437/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[438/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[439/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[440/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[441/594] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
[442/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[443/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[444/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[445/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[446/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[447/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[448/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[449/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[450/594] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[451/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[452/594] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[453/594] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[454/594] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[455/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[456/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[457/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[458/594] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang failed with exit code 1

Tail of the build log:

[374/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_flags.cpp.o
[375/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/parse_univalue.cpp.o
[376/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/pow.cpp.o
[377/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_parsing.cpp.o
[378/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/deserialize.cpp.o
[379/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/primitives_transaction.cpp.o
[380/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/protocol.cpp.o
[381/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/net.cpp.o
[382/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/random.cpp.o
[383/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/signature_checker.cpp.o
[384/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_bitcoin_consensus.cpp.o
[385/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/rolling_bloom_filter.cpp.o
[386/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_descriptor_cache.cpp.o
[387/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script.cpp.o
[388/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/process_message.cpp.o
[389/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_ops.cpp.o
[390/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/process_messages.cpp.o
[391/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/tx_in.cpp.o
[392/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_interpreter.cpp.o
[393/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/tx_out.cpp.o
[394/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/secp256k1_ec_seckey_import_export_der.cpp.o
[395/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/secp256k1_ecdsa_signature_parse_der_lax.cpp.o
[396/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[397/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[398/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[399/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[400/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[401/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[402/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/scriptnum_ops.cpp.o
[403/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/span.cpp.o
[404/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[405/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[406/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_sigcache.cpp.o
[407/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/timedata.cpp.o
[408/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/script_sign.cpp.o
[409/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/system.cpp.o
[410/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/string.cpp.o
[411/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/socks5.cpp.o
[412/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/strprintf.cpp.o
[413/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[414/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[415/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[416/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/util.cpp.o
[417/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/txrequest.cpp.o
[418/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[419/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/transaction.cpp.o
[420/437] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/validation_load_mempool.cpp.o
[421/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[422/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[423/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[424/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[425/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[426/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[427/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[428/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[429/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[430/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[431/437] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-fuzzer failed with exit code 1

Tail of the build log:

[618/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/ccoins_caching.cpp.o
[619/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/clientmodel.cpp.o
[620/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/data.cpp.o
[621/672] Linking CXX executable src/bitcoin-chainstate
FAILED: src/bitcoin-chainstate 
: && /usr/bin/c++ -Werror -g -O2 -fuse-ld=gold -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -lstdc++fs -fPIE -pie src/CMakeFiles/bitcoin-chainstate.dir/bitcoin-chainstate.cpp.o -o src/bitcoin-chainstate  /usr/lib/x86_64-linux-gnu/libjemalloc_pic.a  -lstdc++fs  src/libbitcoinkernel.a  src/crypto/libcrypto.a  src/crypto/libcrypto_sse4.1.a  src/crypto/libcrypto_avx2.a  src/crypto/libcrypto_shani.a  src/univalue/libunivalue.a  src/secp256k1/libsecp256k1.a  src/leveldb/libleveldb.a  src/crc32c/libcrc32c.a  /usr/lib/x86_64-linux-gnu/libjemalloc_pic.a  -lm  -lstdc++fs && :
/work/src/net.cpp:2360: error: undefined reference to 'GetLocalAddresses()'
collect2: error: ld returned 1 exit status
[622/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/examples.cpp.o
[623/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/guiutil.cpp.o
[624/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoingui.cpp.o
[625/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/crypto_hash.cpp.o
[626/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/lockedpool.cpp.o
[627/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/checkqueue.cpp.o
[628/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/optionsmodel.cpp.o
[629/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/optionsdialog.cpp.o
[630/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/nanobench.cpp.o
[631/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/pool.cpp.o
[632/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/hashpadding.cpp.o
[633/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/poly1305.cpp.o
[634/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoin.cpp.o
[635/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/gcs_filter.cpp.o
[636/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rollingbloom.cpp.o
[637/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/block_assemble.cpp.o
[638/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/merkle_root.cpp.o
[639/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/streams_findbyte.cpp.o
[640/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/strencodings.cpp.o
[641/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/crypto_aes.cpp.o
[642/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/util_time.cpp.o
[643/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/checkblock.cpp.o
[644/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/platformstyle.cpp.o
[645/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qvalidatedlineedit.cpp.o
[646/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qvaluecombobox.cpp.o
[647/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/prevector.cpp.o
[648/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/chained_tx.cpp.o
[649/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/bench.cpp.o
[650/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/duplicate_inputs.cpp.o
[651/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/verify_script.cpp.o
[652/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin_locale.cpp.o
[653/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin.cpp.o
[654/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/load_external.cpp.o
[655/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/peer_eviction.cpp.o
[656/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/mempool_eviction.cpp.o
[657/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/mempool_stress.cpp.o
[658/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/readwriteblock.cpp.o
[659/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rpc_blockchain.cpp.o
[660/672] Building CXX object src/bench/CMakeFiles/bitcoin-bench.dir/rpc_mempool.cpp.o
[661/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/utilitydialog.cpp.o
[662/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/trafficgraphwidget.cpp.o
[663/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/peertablemodel.cpp.o
[664/672] Linking CXX executable src/bench/bitcoin-bench
[665/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/splashscreen.cpp.o
[666/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/rpcconsole.cpp.o
[667/672] Linking CXX static library src/qt/libbitcoin-qt-base.a
[668/672] Automatic MOC for target bitcoin-qt
[669/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/bitcoin-qt_autogen/mocs_compilation.cpp.o
[670/672] Building CXX object src/qt/CMakeFiles/bitcoin-qt.dir/main.cpp.o
[671/672] Linking CXX executable src/qt/bitcoin-qt
ninja: build stopped: cannot make progress due to previous errors.
Build build-without-wallet failed with exit code 1
The build failed due to an unexpected infrastructure outage. The administrators have been notified to investigate. Sorry for the inconvenience.
PiRK published this revision for review.Mar 31 2026, 15:28
PiRK planned changes to this revision.Mar 31 2026, 18:06

I need to improve the comments layout

move more comments to their own line

Fabien requested changes to this revision.Mar 31 2026, 20:19
Fabien added a subscriber: Fabien.
Fabien added inline comments.
src/common/pcp.cpp
463

this else is not needed

src/crypto/common.h
66

you don't need the (char *) cast ?

src/mapport.cpp
87

move the comments on their own line

This revision now requires changes to proceed.Mar 31 2026, 20:19

Please also remove the -DENABLE_NATPMP from all our build scripts, and the dependency from all our packaging files

comments to own lines, remove unneeded elses

This revision is now accepted and ready to land.Apr 1 2026, 14:33