multiprocess: Add bitcoin-wallet -ipcconnect option #19460

pull ryanofsky wants to merge 26 commits into bitcoin:master from ryanofsky:pr/ipc-connect changing 136 files +3796 −533
  1. ryanofsky commented at 6:53 PM on July 7, 2020: contributor

    <!-- begin based-on -->

    This is based on #29409 + # + #10102. The non-base commits are:


    Building on #10102, this adds an -ipcconnect option to bitcoin-wallet and an -ipcbind option to bitcoin-node (both enabled by default in multiprocess builds) so bitcoin node will listen on a <datadir>/sockets/node.sock unix socket, and bitcoin-wallet will connect to it.

    The idea is that bitcoin-wallet can be extended in the future to have some online functionality. For example, there could be a bitcoin-wallet sync command that will update balances and sync latest transactions to an unloaded wallet, or a bitcoin-wallet serve subcommand that loads a wallet and serves RPC requests, or a bitcoin-wallet shell subcommand that allows running RPC methods interactively like the GUI console, or just general support for bitcoin-wallet <rpc method> <rpc params> invocations suggested #13926 (comment).

    This PR is small and doesn't do much. The only visible change is that bitcoin-wallet now checks whether a node socket exists on startup and prints "Connected to IPC address" if it can connect it it.

    The default bitcoin-wallet connect option is -ipcconnect=auto, which connects if possible as described above, and proceeds offline if not possible. Other supported options are -noipcconnect to disable ipc, -ipcconnect to require a connection and fail if it can't be established, and -ipcconnect=unix:<socket> to require a connection and use a custom socket path.

    These changes require multiprocess support and this PR has no effect unless bitcoin is configured with --enable-multiprocess as described in doc/multiprocess.md


    This PR is part of the process separation project.

  2. DrahtBot added the label Build system on Jul 7, 2020
  3. DrahtBot added the label Docs on Jul 7, 2020
  4. DrahtBot added the label GUI on Jul 7, 2020
  5. DrahtBot added the label P2P on Jul 7, 2020
  6. DrahtBot added the label RPC/REST/ZMQ on Jul 7, 2020
  7. DrahtBot added the label Tests on Jul 7, 2020
  8. DrahtBot added the label Utils/log/libs on Jul 7, 2020
  9. DrahtBot added the label Wallet on Jul 7, 2020
  10. DrahtBot commented at 9:07 PM on July 7, 2020: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--006a51241073e994b41acfe9ec718e94-->

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/19460.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline and AI policy for information on the review process. A summary of reviews will appear here.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #35932 (ipc: make ipc::disconnectIncoming wait for in-progress calls to complete by ryanofsky)
    • #35911 (Warn on and add missing [[noreturn]] by fanquake)
    • #34617 (fees: wallet: remove block policy fee estimator internals from wallet by ismaelsadeeq)
    • #34603 (wallet: Fix detection of symlinks on Windows by achow101)
    • #34405 (wallet: skip APS when no partial spend exists by 8144225309)
    • #34075 (fees: Introduce Mempool Based Fee Estimation to reduce overestimation by ismaelsadeeq)
    • #32387 (ipc: add windows support by ryanofsky)
    • #31672 (rpc: add cpu_load to getpeerinfo by vasild)
    • #31507 (build: Use clang-cl to build on Windows natively by hebasto)
    • #31260 (scripted-diff: Type-safe settings retrieval by ryanofsky)
    • #30342 (kernel, logging: Pass Logger instances to kernel objects by ryanofsky)
    • #29700 (kernel, refactor: return error status on all fatal errors by ryanofsky)
    • #27052 (test: rpc: add last block announcement time to getpeerinfo result by LarryRuane)
    • #26022 (Add util::ResultPtr class by ryanofsky)
    • #25722 (refactor: Use util::Result class for wallet loading by ryanofsky)
    • #25665 (refactor: Add util::Result failure types and ability to merge result values by ryanofsky)
    • #24230 (indexes: Stop using node internal types and locking cs_main, improve sync logic by ryanofsky)

    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.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

    LLM Linter (✨ experimental)

    Possible typos and grammar issues:

    • rearraning parameters -> rearranging parameters [misspelled in the wallet.capnp TODO comment]
    • nonunix platforms -> non-Unix platforms [misspelled term in versions.md]

    <sup>2026-08-18 15:10:10</sup>

  11. DrahtBot added the label Needs rebase on Jul 11, 2020
  12. ryanofsky force-pushed on Jul 14, 2020
  13. ryanofsky commented at 1:55 PM on July 14, 2020: contributor

    Rebased 96c4cd092ed354858dfc457fafaec766b85c6e0d -> ff67a5d4c7a4899179f43fcfec4c61ef4bd7a1eb (pr/ipc-connect.2 -> pr/ipc-connect.3, compare) on top of #10102 pr/ipc.118 fixing tool_wallet.py test https://travis-ci.org/github/bitcoin/bitcoin/jobs/705900546 https://cirrus-ci.com/build/5236734818516992 and -ipcconnect suggestion #19461 (review) Rebased ff67a5d4c7a4899179f43fcfec4c61ef4bd7a1eb -> 01618ced5266687d44c4c1608ee4b0cd16246f24 (pr/ipc-connect.3 -> pr/ipc-connect.4, compare) on top of #10102 pr/ipc.119 Rebased 01618ced5266687d44c4c1608ee4b0cd16246f24 -> 9848b221b9d506b00292b3e42f5eb2e63be184a1 (pr/ipc-connect.4 -> pr/ipc-connect.5, compare) due to conflicts with #19561 on top of #10102 pr/ipc.123 Rebased 9848b221b9d506b00292b3e42f5eb2e63be184a1 -> 46a1080bf12a5eab477d5d7d217d4e91039ec308 (pr/ipc-connect.5 -> pr/ipc-connect.6, compare) due to conflict with bitcoin-core/gui#35 on top of #10102 pr/ipc.125 Rebased 46a1080bf12a5eab477d5d7d217d4e91039ec308 -> 9d1735d3a09be71913476685d52164aac3971f28 (pr/ipc-connect.6 -> pr/ipc-connect.7, compare) due to conflict with #19099, #19619, #15454, #19725, #19993 on top of #10102 pr/ipc.131 Rebased 9d1735d3a09be71913476685d52164aac3971f28 -> 37cdd7961d35e5bb6565c18fefbcc21d0c148cf1 (pr/ipc-connect.7 -> pr/ipc-connect.8, compare) on top of #10102 pr/ipc.133 Rebased 37cdd7961d35e5bb6565c18fefbcc21d0c148cf1 -> ecbc82571a38fde2ce2bb521a029c1c3b3f21a86 (pr/ipc-connect.8 -> pr/ipc-connect.9, compare) on top of #10102 pr/ipc.134 Rebased ecbc82571a38fde2ce2bb521a029c1c3b3f21a86 -> f7f1579cac06d88803ca4735e969bca0c5c60e35 (pr/ipc-connect.9 -> pr/ipc-connect.10, compare) on top of #10102 pr/ipc.137 Rebased f7f1579cac06d88803ca4735e969bca0c5c60e35 -> 891dd70a865684fa1110104a31208f37905b81d2 (pr/ipc-connect.10 -> pr/ipc-connect.11, compare) on top of #10102 pr/ipc.138 due to conflict with #20365

  14. ryanofsky force-pushed on Jul 14, 2020
  15. DrahtBot removed the label Needs rebase on Jul 14, 2020
  16. DrahtBot added the label Needs rebase on Jul 30, 2020
  17. ryanofsky force-pushed on Aug 12, 2020
  18. DrahtBot removed the label Needs rebase on Aug 12, 2020
  19. DrahtBot added the label Needs rebase on Aug 13, 2020
  20. ryanofsky force-pushed on Aug 28, 2020
  21. DrahtBot removed the label Needs rebase on Aug 28, 2020
  22. DrahtBot added the label Needs rebase on Aug 31, 2020
  23. ajtowns removed the label Docs on Sep 17, 2020
  24. ajtowns removed the label GUI on Sep 17, 2020
  25. ajtowns removed the label P2P on Sep 17, 2020
  26. ajtowns removed the label RPC/REST/ZMQ on Sep 17, 2020
  27. ajtowns removed the label Tests on Sep 17, 2020
  28. ryanofsky force-pushed on Sep 28, 2020
  29. DrahtBot removed the label Needs rebase on Sep 28, 2020
  30. ryanofsky force-pushed on Oct 2, 2020
  31. DrahtBot added the label Needs rebase on Oct 27, 2020
  32. ryanofsky force-pushed on Nov 25, 2020
  33. DrahtBot removed the label Needs rebase on Nov 25, 2020
  34. DrahtBot added the label Needs rebase on Dec 2, 2020
  35. ryanofsky force-pushed on Dec 11, 2020
  36. DrahtBot removed the label Needs rebase on Dec 11, 2020
  37. DrahtBot added the label Needs rebase on Dec 16, 2020
  38. ryanofsky force-pushed on Dec 18, 2020
  39. DrahtBot removed the label Needs rebase on Dec 18, 2020
  40. jonasschnelli commented at 8:02 AM on December 18, 2020: contributor

    Impressive change. Again!

    Conceptual I'm not yet convinced. My understanding is/was that bitcoin-wallet is an offline wallet exploring and manipulation tool without the requirement of a node or online connectivity. Things that require a node, should IMO go into wallet RPC calls. But my conceptual understanding might be old and rusty (happy to get convinced).

    Things like bitcoin-wallet shell would be nice though. I guess we would just need to make sure the IPC/node option is completely optional and thus the offline functionality (for things that can work offline) is still guaranteed.

    Or is this also an attempt to decouple the wallet from the node (in the long run)?

  41. DrahtBot added the label Needs rebase on Dec 18, 2020
  42. ryanofsky commented at 11:34 AM on December 18, 2020: contributor

    My understanding is/was that bitcoin-wallet is an offline wallet exploring and manipulation tool without the requirement of a node or online connectivity.

    To address any concern here, there's no thought of changing this. This PR gives bitcoin-wallet tool ability to do online things as well as offline things. It doesn't require a node or take away the ability to do offline things. Even if you require separate bitcoin-wallet-online-stuff and bitcoin-wallet-offline-only binaries, it only needs build changes not code changes (a new automake entry and src/init/bitcoin-wallet-offline-only.cpp stub)


    Rebased 891dd70a865684fa1110104a31208f37905b81d2 -> a87cdf40e41b568ba71516558c915d084b878917 (pr/ipc-connect.11 -> pr/ipc-connect.12, compare) due to conflict with #20687 Rebased a87cdf40e41b568ba71516558c915d084b878917 -> bae198be312b96c6ad7b681d60139577c17e4435 (pr/ipc-connect.12 -> pr/ipc-connect.13, compare) on top of #10102 pr/ipc.140 due to #19160 updates Rebased bae198be312b96c6ad7b681d60139577c17e4435 -> e45f05658f8a37aa1cf5a3a2add638dac50f6ee1 (pr/ipc-connect.13 -> pr/ipc-connect.14, compare) on top of #10102 pr/ipc.142 due to silent conflict with #20464 (https://cirrus-ci.com/task/6558387276087296) Rebased e45f05658f8a37aa1cf5a3a2add638dac50f6ee1 -> 49b5450388c956b3d3b7cb5d484e9672da048aa4 (pr/ipc-connect.14 -> pr/ipc-connect.15, compare) on top of #10102 pr/ipc.143 due to conflict with #20715 Rebased 49b5450388c956b3d3b7cb5d484e9672da048aa4 -> 991e75e27386649f44c83da48ff0b58fefad2d3e (pr/ipc-connect.15 -> pr/ipc-connect.16, compare) on top of #10102 pr/ipc.145 with can connect / can listen cleanup Rebased 991e75e27386649f44c83da48ff0b58fefad2d3e -> b126a68bd974a57bd80eb5cc776ae5015c09392d (pr/ipc-connect.16 -> pr/ipc-connect.17, compare) on top of #10102 pr/ipc.146 Rebased b126a68bd974a57bd80eb5cc776ae5015c09392d -> 73520db5d73e53a5cf2fd52cc1223986dd4691e7 (pr/ipc-connect.17 -> pr/ipc-connect.18, compare) after #21541 to fix APK cirrus caching errors https://cirrus-ci.com/task/5270118180585472 Rebased 73520db5d73e53a5cf2fd52cc1223986dd4691e7 -> 16a0cb494c78d058a73c0775d94951d8c0dd8386 (pr/ipc-connect.18 -> pr/ipc-connect.19, compare) on top of #10102 pr/ipc.148 Rebased 16a0cb494c78d058a73c0775d94951d8c0dd8386 -> 87e231f5c01d0c542ba26a648fc3b229f8fb2c13 (pr/ipc-connect.19 -> pr/ipc-connect.20, compare) due to silent conflict with #21850 on top of #10102 pr/ipc.149 Rebased 87e231f5c01d0c542ba26a648fc3b229f8fb2c13 -> 602d47bef1f345f5ec72b2c8c2cda81c435a15dd (pr/ipc-connect.20 -> pr/ipc-connect.21, compare) on top of #10102 pr/ipc.149 after #22061 to fix #22059 Rebased 602d47bef1f345f5ec72b2c8c2cda81c435a15dd -> d3b976ba02ee7330ba615305889a9b0ebf220437 (pr/ipc-connect.21 -> pr/ipc-connect.22, compare) on top of #10102 pr/ipc.153 Rebased d3b976ba02ee7330ba615305889a9b0ebf220437 -> 69942db6341f1586ace576bb568212703ed69cee (pr/ipc-connect.22 -> pr/ipc-connect.23, compare) on top of #10102 pr/ipc.154 Rebased 69942db6341f1586ace576bb568212703ed69cee -> 977f384064f88bf56a4b6241abeb6bab0175816e (pr/ipc-connect.23 -> pr/ipc-connect.24, compare) on top of #10102 pr/ipc.158 Rebased 977f384064f88bf56a4b6241abeb6bab0175816e -> 6efe30f4583bb8cf438430be6a891c7b40d5c212 (pr/ipc-connect.24 -> pr/ipc-connect.25, compare) on top of #10102 pr/ipc.161 Rebased 6efe30f4583bb8cf438430be6a891c7b40d5c212 -> dd5bbe8cdcf79b9ea0e1262f07d50f4de1e94424 (pr/ipc-connect.25 -> pr/ipc-connect.26, compare) on top of #10102 pr/ipc.163 Rebased dd5bbe8cdcf79b9ea0e1262f07d50f4de1e94424 -> 40c88d90c0b6e78f796a715136a3a2a7dd9bd19d (pr/ipc-connect.26 -> pr/ipc-connect.27, compare) on top of #10102 pr/ipc.172 Rebased 40c88d90c0b6e78f796a715136a3a2a7dd9bd19d -> e36c0f18eaefe03e0a8de3e124c743fb3b5e59db (pr/ipc-connect.27 -> pr/ipc-connect.28, compare) on top of #10102 pr/ipc.173 Rebased e36c0f18eaefe03e0a8de3e124c743fb3b5e59db -> 78edb2eeb7afb5556f2ead1c2007b20eef08dd20 (pr/ipc-connect.28 -> pr/ipc-connect.29, compare) on top of #10102 pr/ipc.180 Rebased 78edb2eeb7afb5556f2ead1c2007b20eef08dd20 -> ca3bcd067b087c01664fb649c31e380c47e246dc (pr/ipc-connect.29 -> pr/ipc-connect.30, compare) due to conflict with #26067 Updated ca3bcd067b087c01664fb649c31e380c47e246dc -> 9195716053b919f28a5e94d9a3b5d314762f464d (pr/ipc-connect.30 -> pr/ipc-connect.31, compare) to fix strerror locale-dependent lint error Rebased 9195716053b919f28a5e94d9a3b5d314762f464d -> 940c516653297888d72e010b6cf087b3ff067795 (pr/ipc-connect.31 -> pr/ipc-connect.32, compare) on top of #10102 pr/ipc.182 to fix conflict with #25737 Rebased 940c516653297888d72e010b6cf087b3ff067795 -> 31bad7d8f6c5145b162ccf9236f39897c4fd53ce (pr/ipc-connect.32 -> pr/ipc-connect.33, compare) on top of #10102 pr to fix conflict with #26298 Rebased 31bad7d8f6c5145b162ccf9236f39897c4fd53ce -> 44c62070aa2826a65f60606cfb3370820124664b (pr/ipc-connect.33 -> pr/ipc-connect.34, compare) on top of rebased pr/ipc.185 to fix abstract virtual class silent merge conflict cirrus failure

  43. ryanofsky force-pushed on Dec 18, 2020
  44. DrahtBot removed the label Needs rebase on Dec 18, 2020
  45. DrahtBot added the label Needs rebase on Jan 7, 2021
  46. ryanofsky force-pushed on Feb 1, 2021
  47. DrahtBot removed the label Needs rebase on Feb 1, 2021
  48. ryanofsky force-pushed on Feb 4, 2021
  49. DrahtBot added the label Needs rebase on Feb 4, 2021
  50. ryanofsky force-pushed on Feb 21, 2021
  51. DrahtBot removed the label Needs rebase on Feb 21, 2021
  52. DrahtBot added the label Needs rebase on Mar 2, 2021
  53. ryanofsky force-pushed on Mar 9, 2021
  54. DrahtBot removed the label Needs rebase on Mar 9, 2021
  55. DrahtBot added the label Needs rebase on Mar 11, 2021
  56. ryanofsky force-pushed on Mar 24, 2021
  57. DrahtBot removed the label Needs rebase on Mar 25, 2021
  58. ryanofsky force-pushed on Mar 29, 2021
  59. DrahtBot added the label Needs rebase on Mar 30, 2021
  60. ryanofsky force-pushed on Apr 10, 2021
  61. DrahtBot removed the label Needs rebase on Apr 10, 2021
  62. RonSherfey changes_requested
  63. RonSherfey commented at 3:24 PM on April 11, 2021: none

    Requested changes

  64. laanwj referenced this in commit ac219dcbcc on Apr 27, 2021
  65. DrahtBot added the label Needs rebase on Apr 27, 2021
  66. ryanofsky force-pushed on May 24, 2021
  67. DrahtBot removed the label Needs rebase on May 24, 2021
  68. RonSherfey approved
  69. RonSherfey commented at 8:40 AM on May 31, 2021: none

    approved changes

  70. ryanofsky force-pushed on Jun 2, 2021
  71. DrahtBot added the label Needs rebase on Jun 9, 2021
  72. ryanofsky force-pushed on Jun 17, 2021
  73. DrahtBot removed the label Needs rebase on Jun 18, 2021
  74. DrahtBot added the label Needs rebase on Jun 23, 2021
  75. ryanofsky force-pushed on Jun 23, 2021
  76. DrahtBot removed the label Needs rebase on Jun 23, 2021
  77. DrahtBot added the label Needs rebase on Jun 24, 2021
  78. ryanofsky force-pushed on Aug 18, 2021
  79. DrahtBot removed the label Needs rebase on Aug 18, 2021
  80. RonSherfey approved
  81. RonSherfey commented at 3:53 PM on August 22, 2021: none

    Approved changes

  82. DrahtBot added the label Needs rebase on Sep 24, 2021
  83. ryanofsky force-pushed on Oct 6, 2021
  84. DrahtBot removed the label Needs rebase on Oct 6, 2021
  85. DrahtBot added the label Needs rebase on Oct 15, 2021
  86. ryanofsky force-pushed on Nov 1, 2021
  87. DrahtBot removed the label Needs rebase on Nov 1, 2021
  88. DrahtBot added the label Needs rebase on Nov 10, 2021
  89. ryanofsky force-pushed on Jan 11, 2022
  90. DrahtBot removed the label Needs rebase on Jan 11, 2022
  91. DrahtBot added the label Needs rebase on Jan 11, 2022
  92. ryanofsky force-pushed on Jan 13, 2022
  93. DrahtBot removed the label Needs rebase on Jan 13, 2022
  94. DrahtBot added the label Needs rebase on Jan 31, 2022
  95. ryanofsky force-pushed on Sep 21, 2022
  96. ryanofsky force-pushed on Sep 21, 2022
  97. DrahtBot removed the label Needs rebase on Sep 21, 2022
  98. ryanofsky force-pushed on Sep 21, 2022
  99. DrahtBot added the label Needs rebase on Sep 25, 2022
  100. ryanofsky force-pushed on Sep 26, 2022
  101. DrahtBot removed the label Needs rebase on Sep 26, 2022
  102. DrahtBot added the label Needs rebase on Dec 6, 2022
  103. ryanofsky force-pushed on Feb 10, 2023
  104. DrahtBot removed the label Needs rebase on Feb 10, 2023
  105. ryanofsky force-pushed on Feb 10, 2023
  106. DrahtBot added the label Needs rebase on Feb 17, 2023
  107. ryanofsky force-pushed on Feb 28, 2023
  108. DrahtBot removed the label Needs rebase on Feb 28, 2023
  109. DrahtBot added the label Needs rebase on Mar 11, 2023
  110. ryanofsky force-pushed on May 2, 2023
  111. DrahtBot removed the label Needs rebase on May 2, 2023
  112. ryanofsky force-pushed on May 4, 2023
  113. DrahtBot added the label Needs rebase on May 30, 2023
  114. achow101 marked this as a draft on Sep 20, 2023
  115. Korosiua1206 approved
  116. knst referenced this in commit 84b33517e3 on Jul 13, 2024
  117. knst referenced this in commit 1c917c76f0 on Jul 15, 2024
  118. knst referenced this in commit 56dd686404 on Jul 16, 2024
  119. knst referenced this in commit 9002342f94 on Jul 23, 2024
  120. knst referenced this in commit a08b66693f on Jul 23, 2024
  121. knst referenced this in commit 040c188de2 on Jul 24, 2024
  122. knst referenced this in commit 172d9d0be4 on Jul 24, 2024
  123. ryanofsky force-pushed on Jul 26, 2024
  124. DrahtBot removed the label Needs rebase on Jul 26, 2024
  125. DrahtBot commented at 10:08 PM on July 26, 2024: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Debug: https://github.com/bitcoin/bitcoin/runs/27980208691</sub>

    <details><summary>Hints</summary>

    Make sure to run all tests locally, according to the documentation.

    The failure may happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  126. DrahtBot added the label CI failed on Jul 26, 2024
  127. knst referenced this in commit 3411577473 on Jul 27, 2024
  128. knst referenced this in commit a7993de34b on Aug 3, 2024
  129. knst referenced this in commit aa2d3b8164 on Aug 7, 2024
  130. hebasto added the label Needs CMake port on Aug 16, 2024
  131. DrahtBot added the label Needs rebase on Aug 28, 2024
  132. maflcko removed the label Needs CMake port on Aug 29, 2024
  133. achow101 referenced this in commit df3f63ccfa on Sep 9, 2024
  134. ryanofsky force-pushed on Sep 19, 2024
  135. DrahtBot removed the label Needs rebase on Sep 19, 2024
  136. DrahtBot added the label Needs rebase on Sep 25, 2024
  137. ryanofsky force-pushed on Sep 26, 2024
  138. DrahtBot removed the label Needs rebase on Sep 26, 2024
  139. DrahtBot added the label Needs rebase on Nov 21, 2024
  140. ryanofsky force-pushed on Dec 6, 2024
  141. DrahtBot removed the label Needs rebase on Dec 6, 2024
  142. DrahtBot added the label Needs rebase on Jan 29, 2025
  143. ryanofsky force-pushed on Mar 18, 2025
  144. ryanofsky force-pushed on Mar 19, 2025
  145. ryanofsky commented at 8:26 PM on March 19, 2025: contributor

    Updated 240bc4798a3c4e991e153d6660509c78323fe937 -> ce32dc3958c9e3610bd7113551a8a43396d0019d (pr/ipc-connect.42 -> pr/ipc-connect.43, compare) to fix CI failure in tool_wallet.py https://cirrus-ci.com/task/4513424845045760 where bitcoin-wallet throws an exception because the temporary directory name is too long and it causes a "Unix address path "..." exceeded maximum socket path length" error Rebased ce32dc3958c9e3610bd7113551a8a43396d0019d -> 511f5a9be75b2e07dd45f497206b6fa844ef58a8 (pr/ipc-connect.43 -> pr/ipc-connect.44, compare) on top of updated base pr/ipc.216

    <!-- begin push-45 -->

    Rebased 511f5a9be75b2e07dd45f497206b6fa844ef58a8 -> 217d194899bee6f15d947f50dde9c2956e72aed5 (pr/ipc-connect.44 -> pr/ipc-connect.45, compare)<!-- end --> on top of updated base pr/ipc.217 to fix std::span conflict https://cirrus-ci.com/task/5166515827245056

    <!-- begin push-46 -->

    Rebased 217d194899bee6f15d947f50dde9c2956e72aed5 -> 46674480d74ded12605b0b35db6697f8d0a9ae81 (pr/ipc-connect.45 -> pr/ipc-connect.46, compare)<!-- end -->

    <!-- begin push-47 -->

    Rebased 46674480d74ded12605b0b35db6697f8d0a9ae81 -> 3540003e44f6edf1e077921286708bf8bc414de4 (pr/ipc-connect.46 -> pr/ipc-connect.47, compare)<!-- end -->

    <!-- begin push-48 -->

    Rebased 3540003e44f6edf1e077921286708bf8bc414de4 -> 8c6e331a9b6e6bffa0f9f6e404270e8e697df326 (pr/ipc-connect.47 -> pr/ipc-connect.48, compare)<!-- end --> on top of #10102 pr/ipc.225

    <!-- begin push-49 -->

    Rebased 8c6e331a9b6e6bffa0f9f6e404270e8e697df326 -> 0b53075537953146ea24df8b0eeccc75a4215ae3 (pr/ipc-connect.48 -> pr/ipc-connect.49, compare)<!-- end -->

    <!-- begin push-50 -->

    Rebased 0b53075537953146ea24df8b0eeccc75a4215ae3 -> 152880afdb0f98c4d859acd2f8275d34fe5f3f24 (pr/ipc-connect.49 -> pr/ipc-connect.50, compare)<!-- end -->

    <!-- begin push-51 -->

    Rebased 152880afdb0f98c4d859acd2f8275d34fe5f3f24 -> 5124e765ad63cfa8e6ae2dec27d427e4f9012018 (pr/ipc-connect.50 -> pr/ipc-connect.51, compare)<!-- end --> on top of #10102 pr/ipc.228

    <!-- begin push-52 -->

    Rebased 5124e765ad63cfa8e6ae2dec27d427e4f9012018 -> 9e32a6918781e1df2675bebd3a0267753b0bd654 (pr/ipc-connect.51 -> pr/ipc-connect.52, compare)<!-- end --> on top of #10102 pr/ipc.232

    <!-- begin push-53 -->

    Rebased 9e32a6918781e1df2675bebd3a0267753b0bd654 -> b39a59767a6ff555c9a9e4949c45fd54bcbd1f0f (pr/ipc-connect.52 -> pr/ipc-connect.53, compare)<!-- end --> on top of #10102 pr/ipc.236

    <!-- begin push-54 -->

    Rebased b39a59767a6ff555c9a9e4949c45fd54bcbd1f0f -> a8ea190f4632357df6dc63eb39a36ac29bf51b0d (pr/ipc-connect.53 -> pr/ipc-connect.54, compare)<!-- end --> on top of #10102 pr/ipc.241

  146. ryanofsky removed the label Needs rebase on Mar 19, 2025
  147. ryanofsky force-pushed on Mar 20, 2025
  148. ryanofsky force-pushed on Mar 25, 2025
  149. DrahtBot removed the label CI failed on Mar 25, 2025
  150. DrahtBot added the label Needs rebase on Apr 2, 2025
  151. maflcko commented at 7:49 AM on September 27, 2025: member

    I guess on the next rebase, this would have to revert #33459 ?

  152. ryanofsky commented at 2:08 PM on September 30, 2025: contributor

    I guess on the next rebase, this would have to revert #33459 ?

    Thanks! I incorporated this into next #10102 update (will push when #29409 passes CI, currently there are clang-tidy errors)

  153. ryanofsky force-pushed on Oct 15, 2025
  154. DrahtBot removed the label Needs rebase on Oct 15, 2025
  155. ryanofsky force-pushed on Oct 22, 2025
  156. DrahtBot added the label Needs rebase on Nov 12, 2025
  157. ryanofsky force-pushed on Nov 20, 2025
  158. DrahtBot removed the label Needs rebase on Nov 20, 2025
  159. DrahtBot added the label CI failed on Nov 20, 2025
  160. DrahtBot commented at 10:00 PM on November 20, 2025: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task lint: https://github.com/bitcoin/bitcoin/actions/runs/19547951188/job/55972518109</sub> <sub>LLM reason (✨ experimental): Subtree lint check failed: a subtree directory was touched without a proper subtree merge.</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  161. DrahtBot added the label Needs rebase on Dec 4, 2025
  162. ryanofsky force-pushed on Dec 12, 2025
  163. DrahtBot removed the label Needs rebase on Dec 12, 2025
  164. ryanofsky force-pushed on Dec 16, 2025
  165. ryanofsky force-pushed on Jan 7, 2026
  166. DrahtBot removed the label CI failed on Jan 7, 2026
  167. DrahtBot added the label Needs rebase on Feb 4, 2026
  168. ryanofsky force-pushed on Apr 1, 2026
  169. DrahtBot removed the label Needs rebase on Apr 1, 2026
  170. ajtowns commented at 2:15 PM on April 27, 2026: contributor

    Why is this overloading daemon behaviour on an existing cli tool, instead of introducing a new binary like bitcoin-node or bitcoin-gui did? I can't see any discussion of this approach/conflict on irc or in #28978; though a [comment in #13926](/bitcoin-bitcoin/13926/#pullrequestreview-166662143) suggested bitcoind-wallet could be an option around the time that PR stole the name from multiprocess. bitcoin-walletd or bitcoin-ipc-wallet or bitcoin-wallet-ipc could also work afaics. Combining the two just seems like more work and a potential footgun for users to me.

  171. Kino1994 referenced this in commit 31930f118b on Jun 28, 2026
  172. BigcoinBGC referenced this in commit 76d7830689 on Jun 30, 2026
  173. DrahtBot added the label Needs rebase on Jul 7, 2026
  174. ab4cus referenced this in commit 5dcbdd80c0 on Jul 8, 2026
  175. Add capnp serialization code for bitcoin types
    - Add capnp ToBlob, ToArray, Wrap, Serialize, and Unserialize helper functions
    - Add support for std::chrono::seconds capnp serialization
    - Add support for util::Result capnp serialization
    16a55c7f8a
  176. Add capnp wrapper for Handler interface 84e9b8ae2e
  177. Add capnp wrapper for Chain interface 72c2513992
  178. multiprocess: Expose Chain interface
    Expose Chain interface to external processes spawning or connecting to
    bitcoin-node.
    2eb914c634
  179. ryanofsky force-pushed on Jul 14, 2026
  180. DrahtBot removed the label Needs rebase on Jul 14, 2026
  181. DrahtBot added the label Needs rebase on Jul 29, 2026
  182. Merge branch 'pr/ipc-chain' into pr/ipc 284352063d
  183. test: Increase feature_block.py and feature_taproot.py timeouts
    Needed because BlockConnected notifications are a lot slower with the wallet
    running in separate process.
    b5693414f1
  184. test: Fix multiprocess test for unclean shutdown on kill 6d7ebd20d0
  185. util: Add util::Result workaround to be compatible with libmultiprocess
    Make default constructor more generic so it doesn't only work with void types.
    c99360a8d8
  186. Squashed 'src/ipc/libmultiprocess/' changes from e8de5c7b68e..275c8eefdfb
    275c8eefdfb Merge bitcoin-core/libmultiprocess#345: Remove trailing whitespace and Add -Wtrailing-whitespace to default ci config
    cd7162fb832 Merge bitcoin-core/libmultiprocess#304: proxy: fix BuildList to use non-const iteration for interface types
    9b136782af1 ci: Add -Wtrailing-whitespace to default config
    2f4be9ec6ea refactor: Remove trailing whitespace
    390b5f901f1 Merge bitcoin-core/libmultiprocess#344: test: listen_tests and connect_tests follow-ups
    d6f8588d1ab proxy: fix BuildList to use non-const iteration for interface types
    e18ca520f45 Merge bitcoin-core/libmultiprocess#343: test: fix race in connect_tests disconnect-deferred-failure test
    c39c7850c66 doc: note construct() call in valid init interface test
    b9c36c61751 test: close sockets unconditionally and check errors with KJ_SYSCALL
    7eb741e6359 test: drop unnecessary KJ_EXPECT(true)
    113f1d4d287 test: join server thread unconditionally in connect tests
    44bc4630bc1 test: drop mp:: prefixes in connect tests
    038d33eb31e test: share DefaultLogHandler between test files
    b54a1633085 test: drop TestSetup socket members in connect tests
    70467c5a727 test: add m_ prefix to TestSetup members in connect tests
    cc260f2526f test: replace capnp fix link with upstream PR
    137a6e4e039 test: fix race in connect_tests disconnect-deferred-failure test
    8dab0d4bdeb Merge bitcoin-core/libmultiprocess#341: ci: add -Wextra-semi to llvm config
    b3b134eed8b ci: add -Wextra-semi to llvm config
    bdd0cd69418 Merge bitcoin-core/libmultiprocess#339: refactor: add `[[noreturn]]` attributes
    a779a09764c ci: add -Wmissing-noreturn
    636aaff576b refactor: add missing [[noreturn]] attributes
    cc11c2b1b41 Merge bitcoin-core/libmultiprocess#338: test: check ReadList return value
    2d6e863c77a Merge bitcoin-core/libmultiprocess#334: ci: Set CMAKE_BUILD_PARALLEL_LEVEL to enable parallelism by default
    d4d10ff98ab Merge bitcoin-core/libmultiprocess#332: ci: add -Wextra-semi to default config
    b540e70f25f Merge bitcoin-core/libmultiprocess#324: proxy: Name threads spawned by the event loop
    e5e367e785c Merge bitcoin-core/libmultiprocess#312: util: report back child errors to parent and throw
    2220df68c91 Merge bitcoin-core/libmultiprocess#298: Fix error handling when creating clients (`mp::ConnectStream`)
    51defb79ef7 Merge bitcoin-core/libmultiprocess#340: ci: Update `capnproto` prerequisites on NetBSD
    7e94790b08a ci: Update `capnproto` prerequisites on NetBSD
    9f25ffca5b0 test: Cover OS thread names for worker, pool, and async threads
    648a18589c4 proxy: Name threads spawned by the event loop
    49834b2609e ci: add -Wextra-semi to default config
    fae9a637e35 example: Remove unused kj/async.h include
    bb473690c97 Fix error handling when creating clients
    44d191420c6 Add test coverage for ConnectStream
    231361ae5af Correct stale UnixListener doc comment
    060c1a50d03 Extract `UnixListener` class to a dedicated file
    62f25af06c3 test: check ReadList return value
    ce51d737255 ci: Set CMAKE_BUILD_PARALLEL_LEVEL to enable parallism in build jobs by default
    67302cd132a Merge bitcoin-core/libmultiprocess#331: Remove code for Cap'n Proto versions before 0.9
    f13c64ab54e Merge bitcoin-core/libmultiprocess#330: ci: Compile with minimum supported g++ in olddeps
    8e026f66252 Merge bitcoin-core/libmultiprocess#327: build: avoid unnecessary capnp-rpc dependency for mpgen
    e5206e9eb5b Merge bitcoin-core/libmultiprocess#325: cmake: Remove `QUIET` option from `find_package(CapnProto ...)`
    879efea2bc7 Merge bitcoin-core/libmultiprocess#321: ci: Roll NetBSD releases to 11.0, drop 9.4
    abf127a3141 Merge bitcoin-core/libmultiprocess#317: ipc: Fix mpgen capnp tool path for vcpkg/Windows builds
    c437d7f107e Merge bitcoin-core/libmultiprocess#310: test: cover immediate client disconnects for `ListenConnections`
    31bff8a673f Merge bitcoin-core/libmultiprocess#307: refactor: memcpy -> std::ranges::copy
    f355108b0a0 Merge bitcoin-core/libmultiprocess#303: type-chrono: Add CustomBuildField/CustomReadField overloads for std::chrono::time_point
    2d678177c14 Merge bitcoin-core/libmultiprocess#296: ci: Bump channel to nixos-26.05
    3f05b11624c util: kill and reap child on SpawnProcess error
    4a56c1837a7 util: report back child error to parent and throw
    a9e70dbe775 ci: Add NetBSD release 11.0
    2d33b14fb0e ci: Switch to default compiler on NetBSD 9.4
    36f74002775 ci: Drop NetBSD release 9.4
    bd508311b56 refactor: Drop stray semicolons after function definitions
    788f17a8509 Remove code for Cap'n Proto versions before 0.9
    7402affd0ce ci: Pin oldeps config to older nixpkgs channel to compile older cmake with older gcc
    edf63435624 ci: Compile with minimum supported g++-11 in olddeps
    fa47449afe1 cmake: avoid unnecessary capnp-rpc dependency for mpgen
    a494b764de5 cmake: Remove `QUIET` option from `find_package(CapnProto ...)`
    26452e02d75 refactor: memcpy -> std::ranges::copy
    e1dcc6eb182 Merge bitcoin-core/libmultiprocess#316: cmake: Fix stale codegen when mpgen binary changes
    7a72df02e2d type-chrono: Add CustomBuildField/CustomReadField overloads for std::chrono::time_point
    45b685c3f58 type-number, type-chrono: Fix static assert signed/unsigned comparisons
    45f6255975d type-number: exclude bool from the integral overload
    8d6d4649482 Merge bitcoin-core/libmultiprocess#315: Fix startup race in example
    a6fc80d2547 Merge bitcoin-core/libmultiprocess#311: bugfix: clear FD_CLOEXEC in child instead of parent before fork
    496fb84e69f test: cover immediate client disconnects for `ListenConnections`
    36c6c63520e doc: Document reference-counted EventLoop lifetime
    3a997e113cf Fix startup race in mpexample
    f5c15ce33ff Merge bitcoin-core/libmultiprocess#323: refactor: access ThreadContext through CurrentThread(), ci: switch Bitcoin Core to master
    66298c737f4 ci: Switch back to Bitcoin Core's master branch
    86b48105018 refactor: access ThreadContext through CurrentThread()
    eea9c64f6e1 cmake: Fix stale codegen when mpgen binary changes
    a26a08496b8 cmake: Fix mpgen capnp tool path for vcpkg/Windows builds
    140d9ba6ff7 test: allow custom log handler in `ListenSetup`
    1e0c7ff9a51 util: Clear FD_CLOEXEC in child instead of parent before fork
    8550ee6a317 util, refactor: Add ChildFail helper for post-fork child errors
    17eab90b526 test: Fix typo in listen_tests.cpp
    ce865a9ba86 refactor: Directly use value in CustomBuildField
    3f221b5bfd7 Merge bitcoin-core/libmultiprocess#274: Add nonunix platform support
    1b0f6056062 doc: Remove trailing whitespace
    d8f8ca3119f ipc: Wrap mpgen main() in try-catch to print errors
    fbe5a14ad46 ci: Check out bitcoin/bitcoin PR #35084 instead of master
    39d3690d83d types: Replace SFINAE with requires clauses to avoid MSVC C2039 error
    ba68520203c proxy, refactor: Fix C4305 truncation warning in Accessor on MSVC
    1d81d47811e util, refactor: Fix PtrOrValue constructor for move-only types on MSVC
    b883fe1e527 proxy: Fix shutdownWrite() exception handling on macOS with dynamic libraries
    0012411ccc6 proxy: Call shutdownWrite() in Connection destructor
    38312ad1912 proxy, refactor: Change ConnectStream and ServeStream to accept stream objects
    e96d5d742ab proxy, refactor: Replace EventLoop wakeup fd integers with KJ stream objects
    db4f9a3d739 cmake: Bump minimum required Cap'n Proto version to 0.9
    652934fb793 util, refactor: Add SocketPair() and use it in SpawnProcess
    1c6ef7a26c0 util, refactor: Do not fork() and exec() separately
    1389cf3132f util, refactor: Add SpawnConnectInfo type alias and use it
    c7ca1f00b62 util, refactor: Add SocketId type alias and use it
    be46a35203c util, refactor: Add ProcessId type alias and use it
    91a78db7808 doc: Bump version 13 > 14
    fa2c56ec27f ci: Bump channel to nixos-26.05
    
    git-subtree-dir: src/ipc/libmultiprocess
    git-subtree-split: 275c8eefdfb256acda1c3ad5a250ecafa3d2f1be
    f7e3b453e4
  187. test: characterize btcsignals callback destruction timing
    Add tests pinning down when a callback object (and any state it owns)
    is destroyed. Currently disconnect() only disables the callback: the
    object stays alive until a later connect() call on the same signal
    garbage collects it and every connection handle referencing it has been
    released; with no connection handle held it lives until the signal
    itself is destroyed.
    
    This differs from boost::signals2, which btcsignals aims to be
    api-compatible with: there, disconnecting destroys the slot's function
    object as soon as no emission is using it.
    
    No behavior change; these tests document the status quo so the next
    commit changing the destruction timing has a clear before/after diff.
    
    Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
    ae67ee61ab
  188. Merge commit 'f7e3b453e4d3e9594cc7c08929e36f0442be45a0' into pr/subtree-14 31f8fab184
  189. btcsignals: destroy callbacks eagerly on disconnect
    Previously a disconnected callback and any state it owned could stay
    alive indefinitely: destruction required both a later connect() call on
    the same signal to garbage collect it and release of every connection
    handle referencing it. That made destruction timing unpredictable for
    callbacks that own resources whose release has side effects, and it
    diverges from boost::signals2, which destroys a disconnected slot's
    function object as soon as no emission is running it. (The concrete
    fallout was in multiprocess bitcoin-gui, where node notification
    callbacks own IPC proxy objects: their deferred destruction kept
    bitcoin-node from exiting and hung interface_gui.py until timeout.)
    
    Make disconnect() destroy the callback, deferring only while a
    concurrent emission is mid-call into it, matching boost::signals2
    semantics. The previous commit's characterization tests are updated;
    their diff shows the ownership change.
    
    Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
    f05754a5b1
  190. build: suppress -Wc++23-lambda-attributes in warn_interface
    Lambda [[noreturn]] attributes before the parameter list are a C++23
    extension intentionally used in C++20 builds (needed for compatibility
    with -Wmissing-noreturn). Suppress the extension warning rather than
    removing the attributes or working around them.
    
    Uses the existing IF_CHECK_PASSED idiom so GCC, which silently ignores
    unknown -Wno-* flags, is unaffected.
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    05ddcb1e1a
  191. btcsignals: fall back to atomic_load/store without __cpp_lib_atomic_shared_ptr
    std::atomic<shared_ptr<T>> is a C++20 library feature, but library
    implementations are not required to ship all C++20 features at once;
    __cpp_lib_atomic_shared_ptr is the feature-test macro that indicates its
    presence. Without it, the generic std::atomic<T> requires trivially copyable
    T — shared_ptr is not, causing build failures on macOS (Xcode 16.2),
    FreeBSD 15.1, and the MSan/TSan custom libc++ builds in CI.
    
    Fall back to the C++14 atomic_load/atomic_store free functions, which are
    specifically overloaded for shared_ptr. The fallback is intended to be
    temporary: those functions are deprecated in C++20 and will eventually be
    removed, so the #else branch can be dropped once all CI platforms carry the
    C++20 specialization.
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    6572239bb4
  192. multiprocess: Add capnp serialization code for bitcoin types 9f1dab87ff
  193. interfaces, refactor: Change WalletLoader::restoreWallet parameter order
    Libmultiprocess requires output parameters to be ordered after input parameter,
    so move warnings parameter last. Problematic order was introduced in
    4ec2d18a0734f44c0a74f05b59ad1269d323dfdb from
    https://github.com/bitcoin-core/gui/pull/877
    906254e0b6
  194. multiprocess: Add capnp wrapper for Wallet interface 90275ad54d
  195. multiprocess: Add capnp wrapper for Node interface 0a8a50ca9e
  196. multiprocess: Make bitcoin-gui spawn a bitcoin-node process
    Spawn node subprocess instead of running node code internally
    1e95e889fe
  197. multiprocess: Make bitcoin-node spawn a bitcoin-wallet process
    Spawn wallet subprocess instead of running wallet code internally
    f7723e6fdc
  198. multiprocess: Add debug.log .wallet/.gui suffixes
    Add .wallet/.gui suffixes to log files created by bitcoin-gui and
    bitcoin-wallet processes so they don't clash with bitcoin-node log file.
    cb3d099961
  199. doc: Multiprocess misc doc and comment updates 31aadbe43b
  200. combine_logs: Handle multiprocess wallet log files a0405dc0a3
  201. Merge branch 'pr/ipc' into pr/ipc-connect 65e66d70d8
  202. multiprocess: Add bitcoin-wallet -ipcconnect option
    Add `-ipcconnect` option to `bitcoin-wallet` to allow connecting to a bitcoin
    node process over IPC.  The `bitcoin-wallet` tool doesn't really do anything with its
    connection to the node yet, but it could potentially run or serve RPCs that
    require being online.
    
    Example usage:
    
        src/bitcoin-node -regtest -debug -ipcbind=unix
        src/bitcoin-wallet -regtest -ipcconnect=unix info
    a8ea190f46
  203. test-each-commit: Increase fetch depth
    Needed due to base PR, can be dropped before merge
    9a8e51ae73
  204. ryanofsky force-pushed on Aug 18, 2026
  205. DrahtBot removed the label Needs rebase on Aug 18, 2026
  206. Kino1994 referenced this in commit 17443e59e2 on Aug 19, 2026
  207. DrahtBot added the label Needs rebase on Aug 21, 2026
  208. DrahtBot commented at 8:44 AM on August 21, 2026: contributor

    <!--cf906140f33d8803c4a75a2196329ecb-->

    🐙 This pull request conflicts with the target branch and needs rebase.


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-08-21 14:54 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me