From 3cd8612cd7719c0a4dfa104bae3467b562d567d7 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Sat, 26 Jul 2025 13:52:59 +0300 Subject: [PATCH 1/8] doc/zmq: fix unix socket path example Following https://github.com/bitcoin/bitcoin/blob/75a5c8258ec5309fe506438aa3815608430b53d6/doc/release-notes/release-notes-28.0.md?plain=1#L105 Github-Pull: #33070 Rebased-From: e83699a626b8a41c8fb9d0450e14e06a29a98bb8 --- doc/zmq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/zmq.md b/doc/zmq.md index 0a74d6eef97..44cdc0e2c26 100644 --- a/doc/zmq.md +++ b/doc/zmq.md @@ -84,7 +84,7 @@ For instance: $ bitcoind -zmqpubhashtx=tcp://127.0.0.1:28332 \ -zmqpubhashtx=tcp://192.168.1.2:28332 \ -zmqpubhashblock="tcp://[::1]:28333" \ - -zmqpubrawtx=ipc:///tmp/bitcoind.tx.raw \ + -zmqpubrawtx=unix:/tmp/bitcoind.tx.raw \ -zmqpubhashtxhwm=10000 Each PUB notification has a topic and body, where the header From 9437415024da7dd51705e46e4243f7e1694acaf5 Mon Sep 17 00:00:00 2001 From: deadmanoz Date: Tue, 29 Jul 2025 07:22:11 +0000 Subject: [PATCH 2/8] tracing: fix pointer argument handling in mempool_monitor.py The BPF code was incorrectly passing pointer variables by value to bpf_usdt_readarg(), causing the function to fail silently and resulting in transaction hashes and reason strings displaying as zeros or garbage. This fix adds the missing reference operator (&) when passing pointer variables to bpf_usdt_readarg(), allowing the function to properly write the pointer values and enabling correct display of transaction hashes and removal/rejection reasons. Fixes the regression introduced in ec47ba349d where bpf_usdt_readarg_p was replaced with bpf_usdt_readarg but the calling convention wasn't properly updated for pointer arguments. Github-Pull: #33086 Rebased-From: 0ce041ea88dbea2bdfaf21fd0e60a86012498f0a --- contrib/tracing/mempool_monitor.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/contrib/tracing/mempool_monitor.py b/contrib/tracing/mempool_monitor.py index 22efa91783f..eb29b374158 100755 --- a/contrib/tracing/mempool_monitor.py +++ b/contrib/tracing/mempool_monitor.py @@ -66,7 +66,7 @@ BPF_PERF_OUTPUT(replaced_events); int trace_added(struct pt_regs *ctx) { struct added_event added = {}; void *phash = NULL; - bpf_usdt_readarg(1, ctx, phash); + bpf_usdt_readarg(1, ctx, &phash); bpf_probe_read_user(&added.hash, sizeof(added.hash), phash); bpf_usdt_readarg(2, ctx, &added.vsize); bpf_usdt_readarg(3, ctx, &added.fee); @@ -78,9 +78,9 @@ int trace_added(struct pt_regs *ctx) { int trace_removed(struct pt_regs *ctx) { struct removed_event removed = {}; void *phash = NULL, *preason = NULL; - bpf_usdt_readarg(1, ctx, phash); + bpf_usdt_readarg(1, ctx, &phash); bpf_probe_read_user(&removed.hash, sizeof(removed.hash), phash); - bpf_usdt_readarg(2, ctx, preason); + bpf_usdt_readarg(2, ctx, &preason); bpf_probe_read_user_str(&removed.reason, sizeof(removed.reason), preason); bpf_usdt_readarg(3, ctx, &removed.vsize); bpf_usdt_readarg(4, ctx, &removed.fee); @@ -93,9 +93,9 @@ int trace_removed(struct pt_regs *ctx) { int trace_rejected(struct pt_regs *ctx) { struct rejected_event rejected = {}; void *phash = NULL, *preason = NULL; - bpf_usdt_readarg(1, ctx, phash); + bpf_usdt_readarg(1, ctx, &phash); bpf_probe_read_user(&rejected.hash, sizeof(rejected.hash), phash); - bpf_usdt_readarg(2, ctx, preason); + bpf_usdt_readarg(2, ctx, &preason); bpf_probe_read_user_str(&rejected.reason, sizeof(rejected.reason), preason); rejected_events.perf_submit(ctx, &rejected, sizeof(rejected)); return 0; @@ -104,12 +104,12 @@ int trace_rejected(struct pt_regs *ctx) { int trace_replaced(struct pt_regs *ctx) { struct replaced_event replaced = {}; void *phash_replaced = NULL, *phash_replacement = NULL; - bpf_usdt_readarg(1, ctx, phash_replaced); + bpf_usdt_readarg(1, ctx, &phash_replaced); bpf_probe_read_user(&replaced.replaced_hash, sizeof(replaced.replaced_hash), phash_replaced); bpf_usdt_readarg(2, ctx, &replaced.replaced_vsize); bpf_usdt_readarg(3, ctx, &replaced.replaced_fee); bpf_usdt_readarg(4, ctx, &replaced.replaced_entry_time); - bpf_usdt_readarg(5, ctx, phash_replacement); + bpf_usdt_readarg(5, ctx, &phash_replacement); bpf_probe_read_user(&replaced.replacement_hash, sizeof(replaced.replacement_hash), phash_replacement); bpf_usdt_readarg(6, ctx, &replaced.replacement_vsize); bpf_usdt_readarg(7, ctx, &replaced.replacement_fee); From a18b53f99e4bf7f038dac635f27bddf17d285010 Mon Sep 17 00:00:00 2001 From: will Date: Sun, 27 Jul 2025 21:51:39 +0100 Subject: [PATCH 3/8] guix: warn SOURCE_DATE_EPOCH set in guix-codesign Currently there is a warning for this in guix-build, but we also need one in guix-codesign, otherwise the codesigned hashes are not reproducible. Move common functionality into prelude and call the function in both guix actions. Github-Pull: #33073 Rebased-From: 1bed0f734b3f2dd876193b5cad303bfab1d250d5 --- contrib/guix/guix-build | 14 +------------- contrib/guix/guix-codesign | 6 ++++++ contrib/guix/libexec/prelude.bash | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/contrib/guix/guix-build b/contrib/guix/guix-build index 715568c1543..ee285bf322c 100755 --- a/contrib/guix/guix-build +++ b/contrib/guix/guix-build @@ -73,19 +73,7 @@ mkdir -p "$VERSION_BASE" # SOURCE_DATE_EPOCH should not unintentionally be set ################ -if [ -n "$SOURCE_DATE_EPOCH" ] && [ -z "$FORCE_SOURCE_DATE_EPOCH" ]; then -cat << EOF -ERR: Environment variable SOURCE_DATE_EPOCH is set which may break reproducibility. - - Aborting... - -Hint: You may want to: - 1. Unset this variable: \`unset SOURCE_DATE_EPOCH\` before rebuilding - 2. Set the 'FORCE_SOURCE_DATE_EPOCH' environment variable if you insist on - using your own epoch -EOF -exit 1 -fi +check_source_date_epoch ################ # Build directories should not exist diff --git a/contrib/guix/guix-codesign b/contrib/guix/guix-codesign index dedee135b4a..ac7aae3a180 100755 --- a/contrib/guix/guix-codesign +++ b/contrib/guix/guix-codesign @@ -67,6 +67,12 @@ EOF exit 1 fi +################ +# SOURCE_DATE_EPOCH should not unintentionally be set +################ + +check_source_date_epoch + ################ # The codesignature git worktree should not be dirty ################ diff --git a/contrib/guix/libexec/prelude.bash b/contrib/guix/libexec/prelude.bash index f7fc932dfd3..d25c371a10c 100644 --- a/contrib/guix/libexec/prelude.bash +++ b/contrib/guix/libexec/prelude.bash @@ -21,6 +21,26 @@ check_tools() { done } +################ +# SOURCE_DATE_EPOCH should not unintentionally be set +################ + +check_source_date_epoch() { + if [ -n "$SOURCE_DATE_EPOCH" ] && [ -z "$FORCE_SOURCE_DATE_EPOCH" ]; then + cat << EOF +ERR: Environment variable SOURCE_DATE_EPOCH is set which may break reproducibility. + + Aborting... + +Hint: You may want to: + 1. Unset this variable: \`unset SOURCE_DATE_EPOCH\` before rebuilding + 2. Set the 'FORCE_SOURCE_DATE_EPOCH' environment variable if you insist on + using your own epoch +EOF + exit 1 + fi +} + check_tools cat env readlink dirname basename git ################ From 264418f80cea7fd5ae818a2a2887fab62de2b0a2 Mon Sep 17 00:00:00 2001 From: Chris Stewart Date: Wed, 30 Jul 2025 10:27:05 -0500 Subject: [PATCH 4/8] doc: Add rel note for breaking change in dumptxoutset RPC This was missed in the v29.0 release notes. --- doc/release-notes.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index 0519f3b8366..74355ba7442 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -48,6 +48,12 @@ Notable changes - #32521 policy: make pathological transactions packed with legacy sigops non-standard +### RPC + +- The `dumptxoutset` RPC now requires a `type` parameter to be specified. To maintain pre + v29.0 behavior, use the `latest` parameter. Documenting this change was missed in the v29.0 + release notes. (#30808) + ### Updated Settings - The `-maxmempool` and `-dbcache` startup parameters are now capped on From a08886d5640a808e302108575ffbebd7df5f8f11 Mon Sep 17 00:00:00 2001 From: Bufo Date: Tue, 13 May 2025 13:44:40 +0200 Subject: [PATCH 5/8] doc: move `cmake -B build -LH` up in Unix build docs Github-Pull: #33088 Rebased-From: 6757052fc439bedd1fa88ee1d23b4f17cf2c4f7a --- doc/build-unix.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/doc/build-unix.md b/doc/build-unix.md index 9c46df2a9cb..9696063cd1d 100644 --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -9,6 +9,10 @@ To Build ```bash cmake -B build +``` +Run `cmake -B build -LH` to see the full list of available options. + +```bash cmake --build build # Append "-j N" for N parallel jobs cmake --install build # Optional ``` @@ -171,13 +175,6 @@ In this case there is no dependency on SQLite or Berkeley DB. Mining is also possible in disable-wallet mode using the `getblocktemplate` RPC call. -Additional Configure Flags --------------------------- -A list of additional configure flags can be displayed with: - - cmake -B build -LH - - Setup and Build Example: Arch Linux ----------------------------------- This example lists the steps necessary to setup and build a command line only distribution of the latest changes on Arch Linux: From 4e8abca44506ac39166e4a7372f8ee0f6d1def0a Mon Sep 17 00:00:00 2001 From: 0xb10c Date: Mon, 4 Aug 2025 16:20:05 +0200 Subject: [PATCH 6/8] rpc: fix getpeerinfo ping duration unit docs The getpeerinfo docs incorrectly specified the ping durations as milliseconds. This was incorrectly changed in a3789c700b5a43efd4b366b4241ae840d63f2349 (released in v25; master since Sept. 2022). The correct duration unit is seconds. Also, remove the documentation of the getpeerinfo RPC response from the ping RPC since it's incomplete. Better to just reference the getpeerinfo RPC and it's documenation for this. Github-Pull: #33133 Rebased-From: 1252eeb997df2eb12c33d92eb1a5c9d6643a67ff --- src/rpc/net.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index bda07365e0e..9942386c7fc 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -80,7 +80,7 @@ static RPCHelpMan ping() { return RPCHelpMan{"ping", "\nRequests that a ping be sent to all other nodes, to measure ping time.\n" - "Results provided in getpeerinfo, pingtime and pingwait fields are decimal seconds.\n" + "Results are provided in getpeerinfo.\n" "Ping command is handled in queue with all other commands, so it measures processing backlog, not just network ping.\n", {}, RPCResult{RPCResult::Type::NONE, "", ""}, @@ -145,9 +145,9 @@ static RPCHelpMan getpeerinfo() {RPCResult::Type::NUM, "bytesrecv", "The total bytes received"}, {RPCResult::Type::NUM_TIME, "conntime", "The " + UNIX_EPOCH_TIME + " of the connection"}, {RPCResult::Type::NUM, "timeoffset", "The time offset in seconds"}, - {RPCResult::Type::NUM, "pingtime", /*optional=*/true, "The last ping time in milliseconds (ms), if any"}, - {RPCResult::Type::NUM, "minping", /*optional=*/true, "The minimum observed ping time in milliseconds (ms), if any"}, - {RPCResult::Type::NUM, "pingwait", /*optional=*/true, "The duration in milliseconds (ms) of an outstanding ping (if non-zero)"}, + {RPCResult::Type::NUM, "pingtime", /*optional=*/true, "The last ping time in seconds, if any"}, + {RPCResult::Type::NUM, "minping", /*optional=*/true, "The minimum observed ping time in seconds, if any"}, + {RPCResult::Type::NUM, "pingwait", /*optional=*/true, "The duration in seconds of an outstanding ping (if non-zero)"}, {RPCResult::Type::NUM, "version", "The peer version, such as 70001"}, {RPCResult::Type::STR, "subver", "The string version"}, {RPCResult::Type::BOOL, "inbound", "Inbound (true) or Outbound (false)"}, From 2b9738a0835f50845ed183e124347b07b7bcce10 Mon Sep 17 00:00:00 2001 From: Chris Stewart Date: Fri, 1 Aug 2025 16:33:13 -0500 Subject: [PATCH 7/8] test: Fix 'getdescriptoractivity' RPCHelpMan, add test to verify 'spend_vin' is the correct field Github-Pull: #33119 Rebased-From: 3543bfdfec345cf2c952143c31674ef02de2a64b --- src/rpc/blockchain.cpp | 2 +- test/functional/rpc_getdescriptoractivity.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 2c4e471babf..8cbca51ccbf 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -2625,7 +2625,7 @@ static RPCHelpMan getdescriptoractivity() {RPCResult::Type::STR_HEX, "blockhash", /*optional=*/true, "The blockhash this spend appears in (omitted if unconfirmed)"}, {RPCResult::Type::NUM, "height", /*optional=*/true, "Height of the spend (omitted if unconfirmed)"}, {RPCResult::Type::STR_HEX, "spend_txid", "The txid of the spending transaction"}, - {RPCResult::Type::NUM, "spend_vout", "The vout of the spend"}, + {RPCResult::Type::NUM, "spend_vin", "The input index of the spend"}, {RPCResult::Type::STR_HEX, "prevout_txid", "The txid of the prevout"}, {RPCResult::Type::NUM, "prevout_vout", "The vout of the prevout"}, {RPCResult::Type::OBJ, "prevout_spk", "", ScriptPubKeyDoc()}, diff --git a/test/functional/rpc_getdescriptoractivity.py b/test/functional/rpc_getdescriptoractivity.py index a0dc43718bc..6ddbdfd52d0 100755 --- a/test/functional/rpc_getdescriptoractivity.py +++ b/test/functional/rpc_getdescriptoractivity.py @@ -182,6 +182,7 @@ class GetBlocksActivityTest(BitcoinTestFramework): assert result['activity'][2]['type'] == 'spend' assert result['activity'][2]['spend_txid'] == sent2['txid'] + assert result['activity'][2]['spend_vin'] == 0 assert result['activity'][2]['prevout_txid'] == sent1['txid'] assert result['activity'][2]['blockhash'] == blockhash_2 From b9e637bd0ee4d1da5f587ec33cbed9ee28c07daf Mon Sep 17 00:00:00 2001 From: fanquake Date: Mon, 28 Jul 2025 10:29:43 +0100 Subject: [PATCH 8/8] doc: update release notes for 29.x --- doc/release-notes.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc/release-notes.md b/doc/release-notes.md index 74355ba7442..e4cf2f0b50d 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -110,6 +110,7 @@ Notable changes - #32837 depends: fix libevent _WIN32_WINNT usage - #32943 depends: Force CMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE - #32954 cmake: Drop no longer necessary "cmakeMinimumRequired" object +- #33073 guix: warn SOURCE_DATE_EPOCH set in guix-codesign ### Gui @@ -132,6 +133,10 @@ Notable changes - #32777 doc: fix Transifex 404s - #32846 doc: clarify that the "-j N" goes after the "--build build" part - #32858 doc: Add workaround for vcpkg issue with paths with embedded spaces +- #33070 doc/zmq: fix unix socket path example +- #33088 doc: move cmake -B build -LH up in Unix build docs +- #33133 rpc: fix getpeerinfo ping duration unit docs +- #33119 rpc: Fix 'getdescriptoractivity' RPCHelpMan, add test to verify fix ### CI @@ -142,19 +147,24 @@ Notable changes - #32187 refactor: Remove spurious virtual from final ~CZMQNotificationInterface - #32454 tracing: fix invalid argument in mempool_monitor - #32771 contrib: tracing: Fix read of pmsg_type in p2p_monitor.py +- #33086 contrib: [tracing] fix pointer argument handling in mempool_monitor.py Credits ======= Thanks to everyone who directly contributed to this release: +- 0xB10C - achow101 - Antoine Poinsot - benthecarman - bigspider - Brandon Odiwuor - brunoerg +- Bufo +- Christewart - davidgumberg +- deadmanoz - dergoegge - enirox001 - fanquake @@ -174,6 +184,7 @@ Thanks to everyone who directly contributed to this release: - nervana21 - pablomartin4btc - rkrux +- romanz - ryanofsky - Sjors - theStack