{
 "number": 19460,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/19460",
 "title": "multiprocess: Add bitcoin-wallet -ipcconnect option",
 "author": "ryanofsky",
 "author_association": "MEMBER",
 "created_at": "2020-07-07T18:53:19Z",
 "updated_at": "2026-09-13T15:38:04Z",
 "age_days": 2262,
 "draft": true,
 "labels": [
  "Wallet",
  "Build system",
  "Utils/log/libs"
 ],
 "milestone": null,
 "base": "master",
 "head_sha": "d8bb996bdf6dc5aacc41517bb24d78b996e8510c",
 "head_ref": "pr/ipc-connect",
 "head_repo": "ryanofsky/bitcoin",
 "head_history": [
  {
   "t": "2020-07-14T13:47:35Z",
   "sha": "ff67a5d4c7a4899179f43fcfec4c61ef4bd7a1eb"
  },
  {
   "t": "2020-07-14T18:28:55Z",
   "sha": "01618ced5266687d44c4c1608ee4b0cd16246f24"
  },
  {
   "t": "2020-08-12T20:23:17Z",
   "sha": "9848b221b9d506b00292b3e42f5eb2e63be184a1"
  },
  {
   "t": "2020-08-28T05:37:25Z",
   "sha": "46a1080bf12a5eab477d5d7d217d4e91039ec308"
  },
  {
   "t": "2020-09-28T12:26:43Z",
   "sha": "9d1735d3a09be71913476685d52164aac3971f28"
  },
  {
   "t": "2020-10-02T13:30:45Z",
   "sha": "37cdd7961d35e5bb6565c18fefbcc21d0c148cf1"
  },
  {
   "t": "2020-11-25T16:30:26Z",
   "sha": "ecbc82571a38fde2ce2bb521a029c1c3b3f21a86"
  },
  {
   "t": "2020-12-11T18:36:01Z",
   "sha": "f7f1579cac06d88803ca4735e969bca0c5c60e35"
  },
  {
   "t": "2020-12-18T04:53:13Z",
   "sha": "891dd70a865684fa1110104a31208f37905b81d2"
  },
  {
   "t": "2020-12-18T11:45:13Z",
   "sha": "a87cdf40e41b568ba71516558c915d084b878917"
  },
  {
   "t": "2021-02-01T17:09:41Z",
   "sha": "bae198be312b96c6ad7b681d60139577c17e4435"
  },
  {
   "t": "2021-02-04T01:24:01Z",
   "sha": "e45f05658f8a37aa1cf5a3a2add638dac50f6ee1"
  },
  {
   "t": "2021-02-21T22:50:26Z",
   "sha": "49b5450388c956b3d3b7cb5d484e9672da048aa4"
  },
  {
   "t": "2021-03-09T16:45:44Z",
   "sha": "991e75e27386649f44c83da48ff0b58fefad2d3e"
  },
  {
   "t": "2021-03-24T23:16:26Z",
   "sha": "b126a68bd974a57bd80eb5cc776ae5015c09392d"
  },
  {
   "t": "2021-03-29T15:16:50Z",
   "sha": "73520db5d73e53a5cf2fd52cc1223986dd4691e7"
  },
  {
   "t": "2021-04-10T20:16:04Z",
   "sha": "16a0cb494c78d058a73c0775d94951d8c0dd8386"
  },
  {
   "t": "2021-05-24T21:55:34Z",
   "sha": "87e231f5c01d0c542ba26a648fc3b229f8fb2c13"
  },
  {
   "t": "2021-06-02T00:59:28Z",
   "sha": "602d47bef1f345f5ec72b2c8c2cda81c435a15dd"
  },
  {
   "t": "2021-06-17T22:19:42Z",
   "sha": "d3b976ba02ee7330ba615305889a9b0ebf220437"
  },
  {
   "t": "2021-06-23T20:19:51Z",
   "sha": "69942db6341f1586ace576bb568212703ed69cee"
  },
  {
   "t": "2021-08-18T13:05:32Z",
   "sha": "977f384064f88bf56a4b6241abeb6bab0175816e"
  },
  {
   "t": "2021-10-06T17:14:38Z",
   "sha": "6efe30f4583bb8cf438430be6a891c7b40d5c212"
  },
  {
   "t": "2021-11-01T14:42:21Z",
   "sha": "dd5bbe8cdcf79b9ea0e1262f07d50f4de1e94424"
  },
  {
   "t": "2022-01-11T00:21:33Z",
   "sha": "40c88d90c0b6e78f796a715136a3a2a7dd9bd19d"
  },
  {
   "t": "2022-01-13T21:10:21Z",
   "sha": "e36c0f18eaefe03e0a8de3e124c743fb3b5e59db"
  },
  {
   "t": "2022-09-21T03:33:34Z",
   "sha": "78edb2eeb7afb5556f2ead1c2007b20eef08dd20"
  },
  {
   "t": "2022-09-21T11:00:25Z",
   "sha": "ca3bcd067b087c01664fb649c31e380c47e246dc"
  },
  {
   "t": "2022-09-21T13:48:48Z",
   "sha": "9195716053b919f28a5e94d9a3b5d314762f464d"
  },
  {
   "t": "2022-09-26T18:48:04Z",
   "sha": "940c516653297888d72e010b6cf087b3ff067795"
  },
  {
   "t": "2023-02-10T13:41:46Z",
   "sha": "31bad7d8f6c5145b162ccf9236f39897c4fd53ce"
  },
  {
   "t": "2023-02-10T20:43:24Z",
   "sha": "44c62070aa2826a65f60606cfb3370820124664b"
  },
  {
   "t": "2023-02-28T21:33:16Z",
   "sha": "bfee9483fd6ee30fcee91bdaa28c8b9e2b783535"
  },
  {
   "t": "2023-05-02T18:50:23Z",
   "sha": "8e92f94bf3abacb631199318bf8d59940b19136b"
  },
  {
   "t": "2023-05-04T12:33:11Z",
   "sha": "bbefbd3c199b189188d6427b4564b17477c6d50e"
  },
  {
   "t": "2024-07-26T19:39:33Z",
   "sha": "73b9931f3faa10ced6fbf292630efc60f1a68466"
  },
  {
   "t": "2024-09-19T11:06:11Z",
   "sha": "d6b1e089bb2ab22348dde3cd6cb607c27e062649"
  },
  {
   "t": "2024-09-26T14:07:17Z",
   "sha": "9ac7b38d94ffe2ced3cd52121bf06b3a6162fbad"
  },
  {
   "t": "2024-12-06T19:23:05Z",
   "sha": "be6795a292645871f1976daaa00fd19b11bea6ae"
  },
  {
   "t": "2025-03-18T15:17:32Z",
   "sha": "240bc4798a3c4e991e153d6660509c78323fe937"
  },
  {
   "t": "2025-03-19T20:24:20Z",
   "sha": "ce32dc3958c9e3610bd7113551a8a43396d0019d"
  },
  {
   "t": "2025-03-20T15:08:44Z",
   "sha": "511f5a9be75b2e07dd45f497206b6fa844ef58a8"
  },
  {
   "t": "2025-03-25T13:16:46Z",
   "sha": "217d194899bee6f15d947f50dde9c2956e72aed5"
  },
  {
   "t": "2025-10-15T00:41:16Z",
   "sha": "46674480d74ded12605b0b35db6697f8d0a9ae81"
  },
  {
   "t": "2025-10-22T09:29:00Z",
   "sha": "3540003e44f6edf1e077921286708bf8bc414de4"
  },
  {
   "t": "2025-11-20T18:51:24Z",
   "sha": "8c6e331a9b6e6bffa0f9f6e404270e8e697df326"
  },
  {
   "t": "2025-12-12T12:18:11Z",
   "sha": "0b53075537953146ea24df8b0eeccc75a4215ae3"
  },
  {
   "t": "2025-12-16T02:09:51Z",
   "sha": "152880afdb0f98c4d859acd2f8275d34fe5f3f24"
  },
  {
   "t": "2026-01-07T16:34:39Z",
   "sha": "5124e765ad63cfa8e6ae2dec27d427e4f9012018"
  },
  {
   "t": "2026-04-01T11:27:03Z",
   "sha": "9e32a6918781e1df2675bebd3a0267753b0bd654"
  },
  {
   "t": "2026-07-14T18:11:48Z",
   "sha": "b39a59767a6ff555c9a9e4949c45fd54bcbd1f0f"
  },
  {
   "t": "2026-08-18T15:09:28Z",
   "sha": "9a8e51ae7319bdb6937d65a0456a9935d3e36430"
  },
  {
   "t": "2026-09-09T00:53:01Z",
   "sha": "d8bb996bdf6dc5aacc41517bb24d78b996e8510c"
  }
 ],
 "additions": 4008,
 "deletions": 549,
 "changed_files": 139,
 "commit_count": 25,
 "size_bucket": "XL",
 "mergeable_state": "clean",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {},
   "conflicts": [
    {
     "number": 36188,
     "title": "crypto: plug hardware optimized SHA256 into libsecp256k1's context",
     "author": "furszy"
    },
    {
     "number": 36167,
     "title": "[RFC] Enable `-Wunused`",
     "author": "fanquake"
    },
    {
     "number": 36097,
     "title": "mining: replace interrupt methods with cancellation arguments",
     "author": "xyzconstant"
    },
    {
     "number": 35932,
     "title": "ipc: make ipc::disconnectIncoming wait for in-progress calls to complete",
     "author": "ryanofsky"
    },
    {
     "number": 35911,
     "title": "Warn on and add missing [[noreturn]]",
     "author": "fanquake"
    },
    {
     "number": 35511,
     "title": "RFC: consensus: Make `CAmount` a class",
     "author": "hodlinator"
    },
    {
     "number": 34603,
     "title": "wallet: Fix detection of symlinks on Windows",
     "author": "achow101"
    },
    {
     "number": 32387,
     "title": "ipc: add windows support",
     "author": "ryanofsky"
    },
    {
     "number": 31672,
     "title": "rpc: add cpu_load to getpeerinfo",
     "author": "vasild"
    },
    {
     "number": 31507,
     "title": "build: Use clang-cl to build on Windows natively",
     "author": "hebasto"
    },
    {
     "number": 30342,
     "title": "kernel, logging: Pass Logger instances to kernel objects",
     "author": "ryanofsky"
    },
    {
     "number": 29700,
     "title": "kernel, refactor: return error status on all fatal errors",
     "author": "ryanofsky"
    },
    {
     "number": 27052,
     "title": "test: rpc: add last block announcement time to getpeerinfo result",
     "author": "LarryRuane"
    },
    {
     "number": 26022,
     "title": "Add util::ResultPtr class",
     "author": "ryanofsky"
    },
    {
     "number": 25665,
     "title": "refactor: Add util::Result failure types and ability to merge result values",
     "author": "ryanofsky"
    }
   ]
  }
 },
 "acks_parsed": {},
 "acks_tally": {
  "ack": 0,
  "stale_ack": 0,
  "concept_ack": 0,
  "approach_ack": 0,
  "nack": 0,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 3,
  "changes_requested": 1,
  "distinct_reviewers": [
   "Korosiua1206",
   "RonSherfey",
   "ajtowns",
   "jonasschnelli",
   "maflcko"
  ]
 },
 "signals": {
  "needs_rebase": false,
  "ci_failed": false,
  "mergeable_state": "clean",
  "last_author_activity": "2026-09-09T00:53:01Z",
  "last_reviewer_activity": "2026-04-27T14:15:46Z",
  "last_reviewer": "ajtowns",
  "author_silent_days": 8,
  "waiting_on_author_days": 0,
  "days_since_update": 4
 },
 "refs": {
  "mentioned": [
   10102,
   13926,
   15454,
   19099,
   19160,
   19561,
   19619,
   19725,
   19993,
   20365,
   20464,
   20687,
   20715,
   21541,
   21850,
   22059,
   22061,
   25737,
   26067,
   26298,
   28978,
   29409,
   35084,
   36176
  ],
  "depends_on": [
   29409
  ],
  "fixes": [],
  "linked_issues": [],
  "references": [
   {
    "number": 29409,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "multiprocess: Add capnp wrapper for Chain interface"
   },
   {
    "number": 10102,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "Multiprocess bitcoin"
   },
   {
    "number": 35084,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-07-29",
    "title": "ipc: Add nonunix platform support"
   },
   {
    "number": 13926,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2019-01-31",
    "title": "[Tools] bitcoin-wallet - a tool for creating and managing wallets offline"
   },
   {
    "number": 15454,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-09-18",
    "title": "Remove the automatic creation and loading of the default wallet"
   },
   {
    "number": 19099,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-08-31",
    "title": "refactor: Move wallet methods out of chain.h and node.h"
   },
   {
    "number": 19160,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-04-27",
    "title": "multiprocess: Add basic spawn and IPC support"
   },
   {
    "number": 19561,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-07-30",
    "title": "refactor: Pass ArgsManager into functions that register args"
   },
   {
    "number": 19619,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-09-06",
    "title": "Remove wallet.dat path handling from wallet.cpp, rpcwallet.cpp"
   },
   {
    "number": 19725,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-09-26",
    "title": "[RPC] Add connection type to getpeerinfo, improve logs"
   },
   {
    "number": 19993,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-09-23",
    "title": "refactor: Signet fixups"
   },
   {
    "number": 20365,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-12-16",
    "title": "wallettool: add parameter to create descriptors wallet"
   },
   {
    "number": 20464,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-02-01",
    "title": "refactor: Treat CDataStream bytes as uint8_t"
   },
   {
    "number": 20687,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-12-18",
    "title": "wallet: Add missing check for -descriptors wallet tool option"
   },
   {
    "number": 20715,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-02-04",
    "title": "util: Add ArgsManager::GetCommand() and use it in bitcoin-wallet"
   },
   {
    "number": 21541,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-03-29",
    "title": "ci: Build depends only once for Android build"
   },
   {
    "number": 21850,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-05-24",
    "title": "Remove `GetDataDir(net_specific)` function"
   },
   {
    "number": 22059,
    "type": "issue",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "Cirrus CI: Linker OOMKilled"
   },
   {
    "number": 22061,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-05-26",
    "title": "ci: Bump multiprocess memory"
   },
   {
    "number": 25737,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2022-09-21",
    "title": "rpc: treat univalue type check error as RPC_TYPE_ERROR, not RPC_MISC_ERROR"
   },
   {
    "number": 26067,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2022-09-20",
    "title": "util: improve bitcoin-wallet exit codes"
   },
   {
    "number": 26298,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2022-12-07",
    "title": "refactor: Move src/interfaces/*.cpp files to libbitcoin_common.a"
   },
   {
    "number": 28978,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2024-01-02",
    "title": "doc: Add multiprocess design doc"
   },
   {
    "number": 36176,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-09-07",
    "title": "wallet: avoid a crash when creating a wallet with -nosettings"
   }
  ],
  "conflicts": [
   36188,
   36167,
   36097,
   35932,
   35911,
   35511,
   34603,
   32387,
   31672,
   31507,
   30342,
   29700,
   27052,
   26022,
   25665
  ]
 },
 "stack": {
  "shares_commits_with": [
   10102,
   19461,
   29409
  ],
  "based_on": [
   10102,
   29409
  ],
  "base_for": [
   19461
  ]
 },
 "review_paths": [],
 "body": "**This is based on #29409 + # + #10102.** The non-base commits are:\n\n- [`d8bb996bdf6` multiprocess: Add bitcoin-wallet -ipcconnect option](https://github.com/bitcoin/bitcoin/pull/19460/commits/d8bb996bdf6dc5aacc41517bb24d78b996e8510c)\n\n---\n\nBuilding 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.\n\nThe 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 https://github.com/bitcoin/bitcoin/pull/13926#issuecomment-455187379.\n\nThis 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.\n\nThe 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.\n\nThese changes require multiprocess support and this PR has no effect unless bitcoin is configured with `--enable-multiprocess` as described in [doc/multiprocess.md](https://github.com/bitcoin/bitcoin/blob/master/doc/multiprocess.md)\n\n---\n\nThis PR is part of the [process separation project](https://github.com/bitcoin/bitcoin/issues/28722).",
 "commits": [
  {
   "sha": "ae6b583256cd0972a09f38ecf65d0005dbd34028",
   "date": "2026-09-08T08:13:51Z",
   "message": "Add capnp serialization code for bitcoin types\n\n- Add capnp ToBlob, ToArray, Wrap, Serialize, and Unserialize helper functions\n- Add support for std::chrono::seconds capnp serialization\n- Add support for util::Result and util::Expected capnp serialization"
  },
  {
   "sha": "4466e5ce9b7652f8af32dd70d89124be67626240",
   "date": "2026-09-08T08:13:51Z",
   "message": "Add capnp wrapper for Handler interface"
  },
  {
   "sha": "7b997424a951e7421a8d44d8f9ba3733eeff9ec6",
   "date": "2026-09-08T08:13:51Z",
   "message": "Add capnp wrapper for Chain interface"
  },
  {
   "sha": "c2dfc0c57f3a9d54aca0783cd9fc236c4b84c330",
   "date": "2026-09-08T08:13:51Z",
   "message": "multiprocess: Expose Chain interface\n\nExpose Chain interface to external processes spawning or connecting to\nbitcoin-node."
  },
  {
   "sha": "d9cfcf89bb58e83ff9620e7cfaf896a5275dc217",
   "date": "2026-09-08T08:13:51Z",
   "message": "build: suppress -Wc++23-lambda-attributes in warn_interface\n\nLambda [[noreturn]] attributes before the parameter list are a C++23\nextension intentionally used in C++20 builds (needed for compatibility\nwith -Wmissing-noreturn). Suppress the extension warning rather than\nremoving the attributes or working around them.\n\nUses the existing IF_CHECK_PASSED idiom so GCC, which silently ignores\nunknown -Wno-* flags, is unaffected.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "bc86e9270e6dd853e378326c11ac4a068190057d",
   "date": "2026-09-08T08:13:51Z",
   "message": "Merge branch 'pr/ipc-chain' into pr/ipc"
  },
  {
   "sha": "c0ae4dfa0048cc576ec4b112dd0275e2683f52d7",
   "date": "2026-09-08T08:13:51Z",
   "message": "test: Increase feature_block.py and feature_taproot.py timeouts\n\nNeeded because BlockConnected notifications are a lot slower with the wallet\nrunning in separate process."
  },
  {
   "sha": "f274686c60e783be469823bcaf32acee221def7b",
   "date": "2026-09-08T08:13:51Z",
   "message": "test: Fix multiprocess test for unclean shutdown on kill"
  },
  {
   "sha": "32937a817c00b419b965adc173d85fe48cfa109c",
   "date": "2026-09-08T08:13:51Z",
   "message": "util: Add util::Result workaround to be compatible with libmultiprocess\n\nMake default constructor more generic so it doesn't only work with void types."
  },
  {
   "sha": "12ae360d84d8fe4adadd51e7f6a6a89d7183ed7e",
   "date": "2026-09-08T08:13:51Z",
   "message": "test: characterize btcsignals callback destruction timing\n\nAdd tests pinning down when a callback object (and any state it owns)\nis destroyed. Currently disconnect() only disables the callback: the\nobject stays alive until a later connect() call on the same signal\ngarbage collects it and every connection handle referencing it has been\nreleased; with no connection handle held it lives until the signal\nitself is destroyed.\n\nThis differs from boost::signals2, which btcsignals aims to be\napi-compatible with: there, disconnecting destroys the slot's function\nobject as soon as no emission is using it.\n\nNo behavior change; these tests document the status quo so the next\ncommit changing the destruction timing has a clear before/after diff.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>"
  },
  {
   "sha": "d5c694aeb15b8d02d594239fe0bf0db21bea5015",
   "date": "2026-09-08T08:13:51Z",
   "message": "btcsignals: destroy callbacks eagerly on disconnect\n\nPreviously a disconnected callback and any state it owned could stay\nalive indefinitely: destruction required both a later connect() call on\nthe same signal to garbage collect it and release of every connection\nhandle referencing it. That made destruction timing unpredictable for\ncallbacks that own resources whose release has side effects, and it\ndiverges from boost::signals2, which destroys a disconnected slot's\nfunction object as soon as no emission is running it. (The concrete\nfallout was in multiprocess bitcoin-gui, where node notification\ncallbacks own IPC proxy objects: their deferred destruction kept\nbitcoin-node from exiting and hung interface_gui.py until timeout.)\n\nMake disconnect() destroy the callback, deferring only while a\nconcurrent emission is mid-call into it, matching boost::signals2\nsemantics. The previous commit's characterization tests are updated;\ntheir diff shows the ownership change.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>"
  },
  {
   "sha": "66821528e4ec431d38451c4c2dcdda2c19779d51",
   "date": "2026-09-08T08:13:51Z",
   "message": "btcsignals: fall back to atomic_load/store without __cpp_lib_atomic_shared_ptr\n\nstd::atomic<shared_ptr<T>> is a C++20 library feature, but library\nimplementations are not required to ship all C++20 features at once;\n__cpp_lib_atomic_shared_ptr is the feature-test macro that indicates its\npresence. Without it, the generic std::atomic<T> requires trivially copyable\nT \u2014 shared_ptr is not, causing build failures on macOS (Xcode 16.2),\nFreeBSD 15.1, and the MSan/TSan custom libc++ builds in CI.\n\nFall back to the C++14 atomic_load/atomic_store free functions, which are\nspecifically overloaded for shared_ptr. The fallback is intended to be\ntemporary: those functions are deprecated in C++20 and will eventually be\nremoved, so the #else branch can be dropped once all CI platforms carry the\nC++20 specialization.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "8fc97929d966468e77c8a57e5fc286375d1b5f66",
   "date": "2026-09-08T08:13:51Z",
   "message": "multiprocess: Add capnp serialization code for bitcoin types"
  },
  {
   "sha": "897a9c3b3e3c3a170b14c1a7863915037a019424",
   "date": "2026-09-08T08:13:51Z",
   "message": "interfaces, refactor: Change WalletLoader::restoreWallet parameter order\n\nLibmultiprocess requires output parameters to be ordered after input parameter,\nso move warnings parameter last. Problematic order was introduced in\n4ec2d18a0734f44c0a74f05b59ad1269d323dfdb from\nhttps://github.com/bitcoin-core/gui/pull/877"
  },
  {
   "sha": "d5bfd35ca8e24ffd3b8fd0c939e6d65754676453",
   "date": "2026-09-08T08:13:51Z",
   "message": "multiprocess: Add capnp wrapper for Wallet interface"
  },
  {
   "sha": "99442afacb28a2f580a3bfd67fd4fae6b4a20841",
   "date": "2026-09-08T08:13:51Z",
   "message": "multiprocess: Add capnp wrapper for Node interface"
  },
  {
   "sha": "8eb998f88fffd66a2aaec8492d49743b7d8fbb88",
   "date": "2026-09-08T08:13:51Z",
   "message": "multiprocess: Make bitcoin-gui spawn a bitcoin-node process\n\nSpawn node subprocess instead of running node code internally"
  },
  {
   "sha": "48ca9f18b126b6609bcaf35617fcccaa98313540",
   "date": "2026-09-08T08:13:51Z",
   "message": "multiprocess: Make bitcoin-node spawn a bitcoin-wallet process\n\nSpawn wallet subprocess instead of running wallet code internally"
  },
  {
   "sha": "8f40dedc6d6473ef74aa1a4eafa0a5f25c5f1e42",
   "date": "2026-09-08T08:13:51Z",
   "message": "multiprocess: Add debug.log .wallet/.gui suffixes\n\nAdd .wallet/.gui suffixes to log files created by bitcoin-gui and\nbitcoin-wallet processes so they don't clash with bitcoin-node log file."
  },
  {
   "sha": "c941fc462b51d1dfbadb87217d4951dfa909f93e",
   "date": "2026-09-08T08:13:51Z",
   "message": "doc: Multiprocess misc doc and comment updates"
  },
  {
   "sha": "4c842beaae2e97d7934800c8433da9632b21c0ff",
   "date": "2026-09-08T08:13:51Z",
   "message": "Squashed 'src/ipc/libmultiprocess/' changes from e8de5c7b68e..4d454a81da6\n\n4d454a81da6 Merge bitcoin-core/libmultiprocess#358: refactor: Enable readability-container-contains\ndba99582b32 Merge bitcoin-core/libmultiprocess#357: doc: Update Cap'n Proto version to match minimum\n00923922ac3 Merge bitcoin-core/libmultiprocess#356: ci: Remove hard-coded -j4 from sanitize config\nfa101113b50 refactor: Enable readability-container-contains\n81f824b025f doc: Update Cap'n Proto version to match minimum\nfa30e2093c7 ci: Remove hard-coded -j4 from sanitize config\nf2e8df82ede Merge bitcoin-core/libmultiprocess#350: cmake: add type-unordered-set.h and version.h to public headers\n0e146c0468d Merge bitcoin-core/libmultiprocess#349: type-context: fix async disconnect race condition found by antithesis\n49f95e26326 Merge bitcoin-core/libmultiprocess#212: ci: add newdeps job testing newer versions of cmake and capnproto\n914dc839f27 proxy: fix data race between server request threads and disconnect handling\n275c8eefdfb Merge bitcoin-core/libmultiprocess#345: Remove trailing whitespace and Add -Wtrailing-whitespace to default ci config\ncd7162fb832 Merge bitcoin-core/libmultiprocess#304: proxy: fix BuildList to use non-const iteration for interface types\n9b136782af1 ci: Add -Wtrailing-whitespace to default config\n2f4be9ec6ea refactor: Remove trailing whitespace\n2448d282ccd cmake: add type-unordered-set.h and version.h to public headers\nb3fc922ee4a ci: add newdeps job testing newest versions of cmake and capnproto\n390b5f901f1 Merge bitcoin-core/libmultiprocess#344: test: listen_tests and connect_tests follow-ups\nd6f8588d1ab proxy: fix BuildList to use non-const iteration for interface types\ne18ca520f45 Merge bitcoin-core/libmultiprocess#343: test: fix race in connect_tests disconnect-deferred-failure test\nc39c7850c66 doc: note construct() call in valid init interface test\nb9c36c61751 test: close sockets unconditionally and check errors with KJ_SYSCALL\n7eb741e6359 test: drop unnecessary KJ_EXPECT(true)\n113f1d4d287 test: join server thread unconditionally in connect tests\n44bc4630bc1 test: drop mp:: prefixes in connect tests\n038d33eb31e test: share DefaultLogHandler between test files\nb54a1633085 test: drop TestSetup socket members in connect tests\n70467c5a727 test: add m_ prefix to TestSetup members in connect tests\ncc260f2526f test: replace capnp fix link with upstream PR\n137a6e4e039 test: fix race in connect_tests disconnect-deferred-failure test\n8dab0d4bdeb Merge bitcoin-core/libmultiprocess#341: ci: add -Wextra-semi to llvm config\nb3b134eed8b ci: add -Wextra-semi to llvm config\nbdd0cd69418 Merge bitcoin-core/libmultiprocess#339: refactor: add `[[noreturn]]` attributes\na779a09764c ci: add -Wmissing-noreturn\n636aaff576b refactor: add missing [[noreturn]] attributes\ncc11c2b1b41 Merge bitcoin-core/libmultiprocess#338: test: check ReadList return value\n2d6e863c77a Merge bitcoin-core/libmultiprocess#334: ci: Set CMAKE_BUILD_PARALLEL_LEVEL to enable parallelism by default\nd4d10ff98ab Merge bitcoin-core/libmultiprocess#332: ci: add -Wextra-semi to default config\nb540e70f25f Merge bitcoin-core/libmultiprocess#324: proxy: Name threads spawned by the event loop\ne5e367e785c Merge bitcoin-core/libmultiprocess#312: util: report back child errors to parent and throw\n2220df68c91 Merge bitcoin-core/libmultiprocess#298: Fix error handling when creating clients (`mp::ConnectStream`)\n51defb79ef7 Merge bitcoin-core/libmultiprocess#340: ci: Update `capnproto` prerequisites on NetBSD\n7e94790b08a ci: Update `capnproto` prerequisites on NetBSD\n9f25ffca5b0 test: Cover OS thread names for worker, pool, and async threads\n648a18589c4 proxy: Name threads spawned by the event loop\n49834b2609e ci: add -Wextra-semi to default config\nfae9a637e35 example: Remove unused kj/async.h include\nbb473690c97 Fix error handling when creating clients\n44d191420c6 Add test coverage for ConnectStream\n231361ae5af Correct stale UnixListener doc comment\n060c1a50d03 Extract `UnixListener` class to a dedicated file\n62f25af06c3 test: check ReadList return value\nce51d737255 ci: Set CMAKE_BUILD_PARALLEL_LEVEL to enable parallism in build jobs by default\n67302cd132a Merge bitcoin-core/libmultiprocess#331: Remove code for Cap'n Proto versions before 0.9\nf13c64ab54e Merge bitcoin-core/libmultiprocess#330: ci: Compile with minimum supported g++ in olddeps\n8e026f66252 Merge bitcoin-core/libmultiprocess#327: build: avoid unnecessary capnp-rpc dependency for mpgen\ne5206e9eb5b Merge bitcoin-core/libmultiprocess#325: cmake: Remove `QUIET` option from `find_package(CapnProto ...)`\n879efea2bc7 Merge bitcoin-core/libmultiprocess#321: ci: Roll NetBSD releases to 11.0, drop 9.4\nabf127a3141 Merge bitcoin-core/libmultiprocess#317: ipc: Fix mpgen capnp tool path for vcpkg/Windows builds\nc437d7f107e Merge bitcoin-core/libmultiprocess#310: test: cover immediate client disconnects for `ListenConnections`\n31bff8a673f Merge bitcoin-core/libmultiprocess#307: refactor: memcpy -> std::ranges::copy\nf355108b0a0 Merge bitcoin-core/libmultiprocess#303: type-chrono: Add CustomBuildField/CustomReadField overloads for std::chrono::time_point\n2d678177c14 Merge bitcoin-core/libmultiprocess#296: ci: Bump channel to nixos-26.05\n3f05b11624c util: kill and reap child on SpawnProcess error\n4a56c1837a7 util: report back child error to parent and throw\na9e70dbe775 ci: Add NetBSD release 11.0\n2d33b14fb0e ci: Switch to default compiler on NetBSD 9.4\n36f74002775 ci: Drop NetBSD release 9.4\nbd508311b56 refactor: Drop stray semicolons after function definitions\n788f17a8509 Remove code for Cap'n Proto versions before 0.9\n7402affd0ce ci: Pin oldeps config to older nixpkgs channel to compile older cmake with older gcc\nedf63435624 ci: Compile with minimum supported g++-11 in olddeps\nfa47449afe1 cmake: avoid unnecessary capnp-rpc dependency for mpgen\na494b764de5 cmake: Remove `QUIET` option from `find_package(CapnProto ...)`\n26452e02d75 refactor: memcpy -> std::ranges::copy\ne1dcc6eb182 Merge bitcoin-core/libmultiprocess#316: cmake: Fix stale codegen when mpgen binary changes\n7a72df02e2d type-chrono: Add CustomBuildField/CustomReadField overloads for std::chrono::time_point\n45b685c3f58 type-number, type-chrono: Fix static assert signed/unsigned comparisons\n45f6255975d type-number: exclude bool from the integral overload\n8d6d4649482 Merge bitcoin-core/libmultiprocess#315: Fix startup race in example\na6fc80d2547 Merge bitcoin-core/libmultiprocess#311: bugfix: clear FD_CLOEXEC in child instead of parent before fork\n496fb84e69f test: cover immediate client disconnects for `ListenConnections`\n36c6c63520e doc: Document reference-counted EventLoop lifetime\n3a997e113cf Fix startup race in mpexample\nf5c15ce33ff Merge bitcoin-core/libmultiprocess#323: refactor: access ThreadContext through CurrentThread(), ci: switch Bitcoin Core to master\n66298c737f4 ci: Switch back to Bitcoin Core's master branch\n86b48105018 refactor: access ThreadContext through CurrentThread()\neea9c64f6e1 cmake: Fix stale codegen when mpgen binary changes\na26a08496b8 cmake: Fix mpgen capnp tool path for vcpkg/Windows builds\n140d9ba6ff7 test: allow custom log handler in `ListenSetup`\n1e0c7ff9a51 util: Clear FD_CLOEXEC in child instead of parent before fork\n8550ee6a317 util, refactor: Add ChildFail helper for post-fork child errors\n17eab90b526 test: Fix typo in listen_tests.cpp\nce865a9ba86 refactor: Directly use value in CustomBuildField\n3f221b5bfd7 Merge bitcoin-core/libmultiprocess#274: Add nonunix platform support\n1b0f6056062 doc: Remove trailing whitespace\nd8f8ca3119f ipc: Wrap mpgen main() in try-catch to print errors\nfbe5a14ad46 ci: Check out bitcoin/bitcoin PR #35084 instead of master\n39d3690d83d types: Replace SFINAE with requires clauses to avoid MSVC C2039 error\nba68520203c proxy, refactor: Fix C4305 truncation warning in Accessor on MSVC\n1d81d47811e util, refactor: Fix PtrOrValue constructor for move-only types on MSVC\nb883fe1e527 proxy: Fix shutdownWrite() exception handling on macOS with dynamic libraries\n0012411ccc6 proxy: Call shutdownWrite() in Connection destructor\n38312ad1912 proxy, refactor: Change ConnectStream and ServeStream to accept stream objects\ne96d5d742ab proxy, refactor: Replace EventLoop wakeup fd integers with KJ stream objects\ndb4f9a3d739 cmake: Bump minimum required Cap'n Proto version to 0.9\n652934fb793 util, refactor: Add SocketPair() and use it in SpawnProcess\n1c6ef7a26c0 util, refactor: Do not fork() and exec() separately\n1389cf3132f util, refactor: Add SpawnConnectInfo type alias and use it\nc7ca1f00b62 util, refactor: Add SocketId type alias and use it\nbe46a35203c util, refactor: Add ProcessId type alias and use it\n91a78db7808 doc: Bump version 13 > 14\nfa2c56ec27f ci: Bump channel to nixos-26.05\n\ngit-subtree-dir: src/ipc/libmultiprocess\ngit-subtree-split: 4d454a81da61b1094cee939b80e5e2f9880d420d"
  },
  {
   "sha": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
   "date": "2026-09-08T08:13:51Z",
   "message": "combine_logs: Handle multiprocess wallet log files"
  },
  {
   "sha": "567c2e020fd0bb115166bde963861b7bbbda5739",
   "date": "2026-09-08T08:13:51Z",
   "message": "Merge commit '4c842beaae2e97d7934800c8433da9632b21c0ff' into pr/subtree-14"
  },
  {
   "sha": "d00ce388b39a620c3e8b52f64029d2c407a2de0f",
   "date": "2026-09-08T08:13:51Z",
   "message": "Merge branch 'pr/ipc' into pr/ipc-connect"
  },
  {
   "sha": "d8bb996bdf6dc5aacc41517bb24d78b996e8510c",
   "date": "2026-09-08T08:13:51Z",
   "message": "multiprocess: Add bitcoin-wallet -ipcconnect option\n\nAdd `-ipcconnect` option to `bitcoin-wallet` to allow connecting to a bitcoin\nnode process over IPC.  The `bitcoin-wallet` tool doesn't really do anything with its\nconnection to the node yet, but it could potentially run or serve RPCs that\nrequire being online.\n\nExample usage:\n\n    src/bitcoin-node -regtest -debug -ipcbind=unix\n    src/bitcoin-wallet -regtest -ipcconnect=unix info"
  }
 ],
 "timeline": [
  {
   "t": "2020-07-14T13:47:35Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "ff67a5d4c7a4899179f43fcfec4c61ef4bd7a1eb"
  },
  {
   "t": "2020-07-14T13:55:18Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 96c4cd092ed354858dfc457fafaec766b85c6e0d -> ff67a5d4c7a4899179f43fcfec4c61ef4bd7a1eb ([`pr/ipc-connect.2`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.2) -> [`pr/ipc-connect.3`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.3), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.2-rebase..pr/ipc-connect.3)) 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 https://github.com/bitcoin/bitcoin/pull/19461#discussion_r452402137\nRebased ff67a5d4c7a4899179f43fcfec4c61ef4bd7a1eb -> 01618ced5266687d44c4c1608ee4b0cd16246f24 ([`pr/ipc-connect.3`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.3) -> [`pr/ipc-connect.4`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.4), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.3-rebase..pr/ipc-connect.4)) on top of #10102 pr/ipc.119\nRebased 01618ced5266687d44c4c1608ee4b0cd16246f24 -> 9848b221b9d506b00292b3e42f5eb2e63be184a1 ([`pr/ipc-connect.4`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.4) -> [`pr/ipc-connect.5`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.5), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.4-rebase..pr/ipc-connect.5)) due to conflicts with #19561 on top of #10102 pr/ipc.123\nRebased 9848b221b9d506b00292b3e42f5eb2e63be184a1 -> 46a1080bf12a5eab477d5d7d217d4e91039ec308 ([`pr/ipc-connect.5`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.5) -> [`pr/ipc-connect.6`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.6), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.5-rebase..pr/ipc-connect.6)) due to conflict with bitcoin-core/gui#35 on top of #10102 pr/ipc.125\nRebased 46a1080bf12a5eab477d5d7d217d4e91039ec308 -> 9d1735d3a09be71913476685d52164aac3971f28 ([`pr/ipc-connect.6`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.6) -> [`pr/ipc-connect.7`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.7), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.6-rebase..pr/ipc-connect.7)) due to conflict with #19099, #19619, #15454, #19725, #19993 on top of #10102 pr/ipc.131\nRebased 9d1735d3a09be71913476685d52164aac3971f28 -> 37cdd7961d35e5bb6565c18fefbcc21d0c148cf1 ([`pr/ipc-connect.7`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.7) -> [`pr/ipc-connect.8`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.8), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.7-rebase..pr/ipc-connect.8)) on top of #10102 pr/ipc.133\nRebased 37cdd7961d35e5bb6565c18fefbcc21d0c148cf1 -> ecbc82571a38fde2ce2bb521a029c1c3b3f21a86 ([`pr/ipc-connect.8`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.8) -> [`pr/ipc-connect.9`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.9), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.8-rebase..pr/ipc-connect.9)) on top of #10102 pr/ipc.134\nRebased ecbc82571a38fde2ce2bb521a029c1c3b3f21a86 -> f7f1579cac06d88803ca4735e969bca0c5c60e35 ([`pr/ipc-connect.9`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.9) -> [`pr/ipc-connect.10`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.10), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.9-rebase..pr/ipc-connect.10)) on top of #10102 pr/ipc.137\nRebased f7f1579cac06d88803ca4735e969bca0c5c60e35 -> 891dd70a865684fa1110104a31208f37905b81d2 ([`pr/ipc-connect.10`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.10) -> [`pr/ipc-connect.11`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.11), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.10-rebase..pr/ipc-connect.11)) on top of #10102 pr/ipc.138 due to conflict with #20365"
  },
  {
   "t": "2020-07-14T18:28:55Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "01618ced5266687d44c4c1608ee4b0cd16246f24"
  },
  {
   "t": "2020-08-12T20:23:17Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "9848b221b9d506b00292b3e42f5eb2e63be184a1"
  },
  {
   "t": "2020-08-28T05:37:25Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "46a1080bf12a5eab477d5d7d217d4e91039ec308"
  },
  {
   "t": "2020-09-28T12:26:43Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "9d1735d3a09be71913476685d52164aac3971f28"
  },
  {
   "t": "2020-10-02T13:30:45Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "37cdd7961d35e5bb6565c18fefbcc21d0c148cf1"
  },
  {
   "t": "2020-11-25T16:30:26Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "ecbc82571a38fde2ce2bb521a029c1c3b3f21a86"
  },
  {
   "t": "2020-12-11T18:36:01Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "f7f1579cac06d88803ca4735e969bca0c5c60e35"
  },
  {
   "t": "2020-12-18T04:53:13Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "891dd70a865684fa1110104a31208f37905b81d2"
  },
  {
   "t": "2020-12-18T08:02:39Z",
   "kind": "comment",
   "who": "jonasschnelli",
   "assoc": "CONTRIBUTOR",
   "text": "Impressive change. Again!\n\nConceptual I'm not yet convinced.\nMy understanding is/was that `bitcoin-wallet` is an offline wallet exploring and manipulation tool without the requirement of a node or online connectivity.\nThings that require a node, should IMO go into wallet RPC calls.\nBut my conceptual understanding might be old and rusty (happy to get convinced).\n\nThings 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.\n\nOr is this also an attempt to decouple the wallet from the node (in the long run)?"
  },
  {
   "t": "2020-12-18T11:34:06Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nTo 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)\n\n---\n\nRebased 891dd70a865684fa1110104a31208f37905b81d2 -> a87cdf40e41b568ba71516558c915d084b878917 ([`pr/ipc-connect.11`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.11) -> [`pr/ipc-connect.12`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.12), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.11-rebase..pr/ipc-connect.12)) due to conflict with #20687\nRebased a87cdf40e41b568ba71516558c915d084b878917 -> bae198be312b96c6ad7b681d60139577c17e4435 ([`pr/ipc-connect.12`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.12) -> [`pr/ipc-connect.13`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.13), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.12-rebase..pr/ipc-connect.13)) on top of #10102 pr/ipc.140 due to #19160 updates\nRebased bae198be312b96c6ad7b681d60139577c17e4435 -> e45f05658f8a37aa1cf5a3a2add638dac50f6ee1 ([`pr/ipc-connect.13`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.13) -> [`pr/ipc-connect.14`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.14), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.13-rebase..pr/ipc-connect.14)) on top of #10102 pr/ipc.142 due to silent conflict with #20464 (https://cirrus-ci.com/task/6558387276087296)\nRebased e45f05658f8a37aa1cf5a3a2add638dac50f6ee1 -> 49b5450388c956b3d3b7cb5d484e9672da048aa4 ([`pr/ipc-connect.14`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.14) -> [`pr/ipc-connect.15`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.15), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.14-rebase..pr/ipc-connect.15)) on top of #10102 pr/ipc.143 due to conflict with #20715\nRebased 49b5450388c956b3d3b7cb5d484e9672da048aa4 -> 991e75e27386649f44c83da48ff0b58fefad2d3e ([`pr/ipc-connect.15`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.15) -> [`pr/ipc-connect.16`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.16), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.15-rebase..pr/ipc-connect.16)) on top of #10102 pr/ipc.145 with can connect / can listen cleanup\nRebased 991e75e27386649f44c83da48ff0b58fefad2d3e -> b126a68bd974a57bd80eb5cc776ae5015c09392d ([`pr/ipc-connect.16`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.16) -> [`pr/ipc-connect.17`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.17), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.16-rebase..pr/ipc-connect.17)) on top of #10102 pr/ipc.146\nRebased b126a68bd974a57bd80eb5cc776ae5015c09392d -> 73520db5d73e53a5cf2fd52cc1223986dd4691e7 ([`pr/ipc-connect.17`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.17) -> [`pr/ipc-connect.18`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.18), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.17-rebase..pr/ipc-connect.18)) after #21541 to fix APK cirrus caching errors https://cirrus-ci.com/task/5270118180585472\nRebased 73520db5d73e53a5cf2fd52cc1223986dd4691e7 -> 16a0cb494c78d058a73c0775d94951d8c0dd8386 ([`pr/ipc-connect.18`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.18) -> [`pr/ipc-connect.19`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.19), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.18-rebase..pr/ipc-connect.19)) on top of #10102 pr/ipc.148\nRebased 16a0cb494c78d058a73c0775d94951d8c0dd8386 -> 87e231f5c01d0c542ba26a648fc3b229f8fb2c13 ([`pr/ipc-connect.19`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.19) -> [`pr/ipc-connect.20`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.20), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.19-rebase..pr/ipc-connect.20)) due to silent conflict with #21850 on top of #10102 pr/ipc.149\nRebased 87e231f5c01d0c542ba26a648fc3b229f8fb2c13 -> 602d47bef1f345f5ec72b2c8c2cda81c435a15dd ([`pr/ipc-connect.20`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.20) -> [`pr/ipc-connect.21`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.21), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.20-rebase..pr/ipc-connect.21)) on top of #10102 pr/ipc.149 after #22061 to fix #22059\nRebased 602d47bef1f345f5ec72b2c8c2cda81c435a15dd -> d3b976ba02ee7330ba615305889a9b0ebf220437 ([`pr/ipc-connect.21`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.21) -> [`pr/ipc-connect.22`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.22), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.21-rebase..pr/ipc-connect.22)) on top of #10102 pr/ipc.153\nRebased d3b976ba02ee7330ba615305889a9b0ebf220437 -> 69942db6341f1586ace576bb568212703ed69cee ([`pr/ipc-connect.22`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.22) -> [`pr/ipc-connect.23`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.23), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.22-rebase..pr/ipc-connect.23)) on top of #10102 pr/ipc.154\nRebased 69942db6341f1586ace576bb568212703ed69cee -> 977f384064f88bf56a4b6241abeb6bab0175816e ([`pr/ipc-connect.23`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.23) -> [`pr/ipc-connect.24`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.24), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.23-rebase..pr/ipc-connect.24)) on top of #10102 pr/ipc.158\nRebased 977f384064f88bf56a4b6241abeb6bab0175816e -> 6efe30f4583bb8cf438430be6a891c7b40d5c212 ([`pr/ipc-connect.24`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.24) -> [`pr/ipc-connect.25`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.25), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.24-rebase..pr/ipc-connect.25)) on top of #10102 pr/ipc.161\nRebased 6efe30f4583bb8cf438430be6a891c7b40d5c212 -> dd5bbe8cdcf79b9ea0e1262f07d50f4de1e94424 ([`pr/ipc-connect.25`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.25) -> [`pr/ipc-connect.26`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.26), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.25-rebase..pr/ipc-connect.26)) on top of #10102 pr/ipc.163\nRebased dd5bbe8cdcf79b9ea0e1262f07d50f4de1e94424 -> 40c88d90c0b6e78f796a715136a3a2a7dd9bd19d ([`pr/ipc-connect.26`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.26) -> [`pr/ipc-connect.27`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.27), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.26-rebase..pr/ipc-connect.27)) on top of #10102 pr/ipc.172\nRebased 40c88d90c0b6e78f796a715136a3a2a7dd9bd19d -> e36c0f18eaefe03e0a8de3e124c743fb3b5e59db ([`pr/ipc-connect.27`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.27) -> [`pr/ipc-connect.28`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.28), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.27-rebase..pr/ipc-connect.28)) on top of #10102 pr/ipc.173\nRebased e36c0f18eaefe03e0a8de3e124c743fb3b5e59db -> 78edb2eeb7afb5556f2ead1c2007b20eef08dd20 ([`pr/ipc-connect.28`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.28) -> [`pr/ipc-connect.29`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.29), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.28-rebase..pr/ipc-connect.29)) on top of #10102 pr/ipc.180\nRebased 78edb2eeb7afb5556f2ead1c2007b20eef08dd20 -> ca3bcd067b087c01664fb649c31e380c47e246dc ([`pr/ipc-connect.29`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.29) -> [`pr/ipc-connect.30`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.30), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.29-rebase..pr/ipc-connect.30)) due to conflict with #26067\nUpdated ca3bcd067b087c01664fb649c31e380c47e246dc -> 9195716053b919f28a5e94d9a3b5d314762f464d ([`pr/ipc-connect.30`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.30) -> [`pr/ipc-connect.31`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.31), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.30..pr/ipc-connect.31)) to fix strerror locale-dependent lint error\nRebased 9195716053b919f28a5e94d9a3b5d314762f464d -> 940c516653297888d72e010b6cf087b3ff067795 ([`pr/ipc-connect.31`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.31) -> [`pr/ipc-connect.32`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.32), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.31-rebase..pr/ipc-connect.32)) on top of #10102 pr/ipc.182 to fix conflict with #25737\nRebased 940c516653297888d72e010b6cf087b3ff067795 -> 31bad7d8f6c5145b162ccf9236f39897c4fd53ce ([`pr/ipc-connect.32`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.32) -> [`pr/ipc-connect.33`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.33), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.32-rebase..pr/ipc-connect.33)) on top of #10102 pr to fix conflict with #26298\nRebased 31bad7d8f6c5145b162ccf9236f39897c4fd53ce -> 44c62070aa2826a65f60606cfb3370820124664b ([`pr/ipc-connect.33`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.33) -> [`pr/ipc-connect.34`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.34), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.33-rebase..pr/ipc-connect.34)) on top of rebased pr/ipc.185 to fix abstract virtual class silent merge conflict cirrus failure"
  },
  {
   "t": "2020-12-18T11:45:13Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "a87cdf40e41b568ba71516558c915d084b878917"
  },
  {
   "t": "2021-02-01T17:09:41Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "bae198be312b96c6ad7b681d60139577c17e4435"
  },
  {
   "t": "2021-02-04T01:24:01Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "e45f05658f8a37aa1cf5a3a2add638dac50f6ee1"
  },
  {
   "t": "2021-02-21T22:50:26Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "49b5450388c956b3d3b7cb5d484e9672da048aa4"
  },
  {
   "t": "2021-03-09T16:45:44Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "991e75e27386649f44c83da48ff0b58fefad2d3e"
  },
  {
   "t": "2021-03-24T23:16:26Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "b126a68bd974a57bd80eb5cc776ae5015c09392d"
  },
  {
   "t": "2021-03-29T15:16:50Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "73520db5d73e53a5cf2fd52cc1223986dd4691e7"
  },
  {
   "t": "2021-04-10T20:16:04Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "16a0cb494c78d058a73c0775d94951d8c0dd8386"
  },
  {
   "t": "2021-04-11T15:24:53Z",
   "kind": "review",
   "who": "RonSherfey",
   "assoc": "NONE",
   "state": "CHANGES_REQUESTED",
   "commit": "16a0cb494c78d058a73c0775d94951d8c0dd8386",
   "text": "Requested changes"
  },
  {
   "t": "2021-05-24T21:55:34Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "87e231f5c01d0c542ba26a648fc3b229f8fb2c13"
  },
  {
   "t": "2021-05-31T08:40:30Z",
   "kind": "review",
   "who": "RonSherfey",
   "assoc": "NONE",
   "state": "APPROVED",
   "commit": "87e231f5c01d0c542ba26a648fc3b229f8fb2c13",
   "text": "approved changes"
  },
  {
   "t": "2021-06-02T00:59:28Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "602d47bef1f345f5ec72b2c8c2cda81c435a15dd"
  },
  {
   "t": "2021-06-17T22:19:42Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d3b976ba02ee7330ba615305889a9b0ebf220437"
  },
  {
   "t": "2021-06-23T20:19:51Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "69942db6341f1586ace576bb568212703ed69cee"
  },
  {
   "t": "2021-08-18T13:05:32Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "977f384064f88bf56a4b6241abeb6bab0175816e"
  },
  {
   "t": "2021-08-22T15:53:27Z",
   "kind": "review",
   "who": "RonSherfey",
   "assoc": "NONE",
   "state": "APPROVED",
   "commit": "977f384064f88bf56a4b6241abeb6bab0175816e",
   "text": "Approved changes"
  },
  {
   "t": "2021-10-06T17:14:38Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "6efe30f4583bb8cf438430be6a891c7b40d5c212"
  },
  {
   "t": "2021-11-01T14:42:21Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "dd5bbe8cdcf79b9ea0e1262f07d50f4de1e94424"
  },
  {
   "t": "2022-01-11T00:21:33Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "40c88d90c0b6e78f796a715136a3a2a7dd9bd19d"
  },
  {
   "t": "2022-01-13T21:10:21Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "e36c0f18eaefe03e0a8de3e124c743fb3b5e59db"
  },
  {
   "t": "2022-09-21T03:33:34Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "78edb2eeb7afb5556f2ead1c2007b20eef08dd20"
  },
  {
   "t": "2022-09-21T11:00:25Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "ca3bcd067b087c01664fb649c31e380c47e246dc"
  },
  {
   "t": "2022-09-21T13:48:48Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "9195716053b919f28a5e94d9a3b5d314762f464d"
  },
  {
   "t": "2022-09-26T18:48:04Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "940c516653297888d72e010b6cf087b3ff067795"
  },
  {
   "t": "2023-02-10T13:41:46Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "31bad7d8f6c5145b162ccf9236f39897c4fd53ce"
  },
  {
   "t": "2023-02-10T20:43:24Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "44c62070aa2826a65f60606cfb3370820124664b"
  },
  {
   "t": "2023-02-28T21:33:16Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "bfee9483fd6ee30fcee91bdaa28c8b9e2b783535"
  },
  {
   "t": "2023-05-02T18:50:23Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8e92f94bf3abacb631199318bf8d59940b19136b"
  },
  {
   "t": "2023-05-04T12:33:11Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "bbefbd3c199b189188d6427b4564b17477c6d50e"
  },
  {
   "t": "2024-05-09T05:47:36Z",
   "kind": "review",
   "who": "Korosiua1206",
   "assoc": "NONE",
   "state": "APPROVED",
   "commit": "bbefbd3c199b189188d6427b4564b17477c6d50e",
   "text": ""
  },
  {
   "t": "2024-07-26T19:39:33Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "73b9931f3faa10ced6fbf292630efc60f1a68466"
  },
  {
   "t": "2024-09-19T11:06:11Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d6b1e089bb2ab22348dde3cd6cb607c27e062649"
  },
  {
   "t": "2024-09-26T14:07:17Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "9ac7b38d94ffe2ced3cd52121bf06b3a6162fbad"
  },
  {
   "t": "2024-12-06T19:23:05Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "be6795a292645871f1976daaa00fd19b11bea6ae"
  },
  {
   "t": "2025-03-18T15:17:32Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "240bc4798a3c4e991e153d6660509c78323fe937"
  },
  {
   "t": "2025-03-19T20:24:20Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "ce32dc3958c9e3610bd7113551a8a43396d0019d"
  },
  {
   "t": "2025-03-19T20:26:46Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Updated 240bc4798a3c4e991e153d6660509c78323fe937 -> ce32dc3958c9e3610bd7113551a8a43396d0019d ([`pr/ipc-connect.42`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.42) -> [`pr/ipc-connect.43`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.43), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.42..pr/ipc-connect.43)) 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\nRebased ce32dc3958c9e3610bd7113551a8a43396d0019d -> 511f5a9be75b2e07dd45f497206b6fa844ef58a8 ([`pr/ipc-connect.43`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.43) -> [`pr/ipc-connect.44`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.44), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.43-rebase..pr/ipc-connect.44)) on top of updated base pr/ipc.216\n\nRebased 511f5a9be75b2e07dd45f497206b6fa844ef58a8 -> 217d194899bee6f15d947f50dde9c2956e72aed5 ([`pr/ipc-connect.44`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.44) -> [`pr/ipc-connect.45`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.45), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.44-rebase..pr/ipc-connect.45)) on top of updated base pr/ipc.217 to fix std::span conflict https://cirrus-ci.com/task/5166515827245056\n\nRebased 217d194899bee6f15d947f50dde9c2956e72aed5 -> 46674480d74ded12605b0b35db6697f8d0a9ae81 ([`pr/ipc-connect.45`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.45) -> [`pr/ipc-connect.46`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.46), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.45-rebase..pr/ipc-connect.46))\n\nRebased 46674480d74ded12605b0b35db6697f8d0a9ae81 -> 3540003e44f6edf1e077921286708bf8bc414de4 ([`pr/ipc-connect.46`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.46) -> [`pr/ipc-connect.47`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.47), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.46-rebase..pr/ipc-connect.47))\n\nRebased 3540003e44f6edf1e077921286708bf8bc414de4 -> 8c6e331a9b6e6bffa0f9f6e404270e8e697df326 ([`pr/ipc-connect.47`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.47) -> [`pr/ipc-connect.48`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.48), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.47-rebase..pr/ipc-connect.48)) on top of #10102 pr/ipc.225\n\nRebased 8c6e331a9b6e6bffa0f9f6e404270e8e697df326 -> 0b53075537953146ea24df8b0eeccc75a4215ae3 ([`pr/ipc-connect.48`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.48) -> [`pr/ipc-connect.49`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.49), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.48-rebase..pr/ipc-connect.49))\n\nRebased 0b53075537953146ea24df8b0eeccc75a4215ae3 -> 152880afdb0f98c4d859acd2f8275d34fe5f3f24 ([`pr/ipc-connect.49`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.49) -> [`pr/ipc-connect.50`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.50), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.49-rebase..pr/ipc-connect.50))\n\nRebased 152880afdb0f98c4d859acd2f8275d34fe5f3f24 -> 5124e765ad63cfa8e6ae2dec27d427e4f9012018 ([`pr/ipc-connect.50`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.50) -> [`pr/ipc-connect.51`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.51), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.50-rebase..pr/ipc-connect.51)) on top of #10102 pr/ipc.228\n\nRebased 5124e765ad63cfa8e6ae2dec27d427e4f9012018 -> 9e32a6918781e1df2675bebd3a0267753b0bd654 ([`pr/ipc-connect.51`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.51) -> [`pr/ipc-connect.52`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.52), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.51-rebase..pr/ipc-connect.52)) on top of #10102 pr/ipc.232\n\nRebased 9e32a6918781e1df2675bebd3a0267753b0bd654 -> b39a59767a6ff555c9a9e4949c45fd54bcbd1f0f ([`pr/ipc-connect.52`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.52) -> [`pr/ipc-connect.53`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.53), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.52-rebase..pr/ipc-connect.53)) on top of #10102 pr/ipc.236\n\nRebased b39a59767a6ff555c9a9e4949c45fd54bcbd1f0f -> a8ea190f4632357df6dc63eb39a36ac29bf51b0d ([`pr/ipc-connect.53`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.53) -> [`pr/ipc-connect.54`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.54), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.53-rebase..pr/ipc-connect.54)) on top of #10102 pr/ipc.241\n\nRebased a8ea190f4632357df6dc63eb39a36ac29bf51b0d -> d8bb996bdf6dc5aacc41517bb24d78b996e8510c ([`pr/ipc-connect.54`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.54) -> [`pr/ipc-connect.55`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-connect.55), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-connect.54-rebase..pr/ipc-connect.55)) on top of #10102 pr/ipc.245 due to conflicts with #36176"
  },
  {
   "t": "2025-03-20T15:08:44Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "511f5a9be75b2e07dd45f497206b6fa844ef58a8"
  },
  {
   "t": "2025-03-25T13:16:46Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "217d194899bee6f15d947f50dde9c2956e72aed5"
  },
  {
   "t": "2025-09-27T07:49:59Z",
   "kind": "comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "text": "I guess on the next rebase, this would have to revert https://github.com/bitcoin/bitcoin/pull/33459 ?"
  },
  {
   "t": "2025-09-30T14:08:42Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThanks! I incorporated this into next #10102 update (will push when #29409 passes CI, currently there are clang-tidy errors)"
  },
  {
   "t": "2025-10-15T00:41:16Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "46674480d74ded12605b0b35db6697f8d0a9ae81"
  },
  {
   "t": "2025-10-22T09:29:00Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "3540003e44f6edf1e077921286708bf8bc414de4"
  },
  {
   "t": "2025-11-20T18:51:24Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8c6e331a9b6e6bffa0f9f6e404270e8e697df326"
  },
  {
   "t": "2025-12-12T12:18:11Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "0b53075537953146ea24df8b0eeccc75a4215ae3"
  },
  {
   "t": "2025-12-16T02:09:51Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "152880afdb0f98c4d859acd2f8275d34fe5f3f24"
  },
  {
   "t": "2026-01-07T16:34:39Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "5124e765ad63cfa8e6ae2dec27d427e4f9012018"
  },
  {
   "t": "2026-04-01T11:27:03Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "9e32a6918781e1df2675bebd3a0267753b0bd654"
  },
  {
   "t": "2026-04-27T14:15:46Z",
   "kind": "comment",
   "who": "ajtowns",
   "assoc": "MEMBER",
   "text": "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](https://github.com/bitcoin/bitcoin/pull/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."
  },
  {
   "t": "2026-07-14T18:11:48Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "b39a59767a6ff555c9a9e4949c45fd54bcbd1f0f"
  },
  {
   "t": "2026-08-18T15:09:28Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "9a8e51ae7319bdb6937d65a0456a9935d3e36430"
  },
  {
   "t": "2026-09-09T00:53:01Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d8bb996bdf6dc5aacc41517bb24d78b996e8510c"
  }
 ],
 "labels_log": [
  {
   "t": "2020-07-07T20:35:16Z",
   "action": "labeled",
   "label": "Build system",
   "who": "DrahtBot"
  },
  {
   "t": "2020-07-07T20:35:16Z",
   "action": "labeled",
   "label": "Docs",
   "who": "DrahtBot"
  },
  {
   "t": "2020-07-07T20:35:16Z",
   "action": "labeled",
   "label": "GUI",
   "who": "DrahtBot"
  },
  {
   "t": "2020-07-07T20:35:16Z",
   "action": "labeled",
   "label": "P2P",
   "who": "DrahtBot"
  },
  {
   "t": "2020-07-07T20:35:16Z",
   "action": "labeled",
   "label": "RPC/REST/ZMQ",
   "who": "DrahtBot"
  },
  {
   "t": "2020-07-07T20:35:16Z",
   "action": "labeled",
   "label": "Tests",
   "who": "DrahtBot"
  },
  {
   "t": "2020-07-07T20:35:16Z",
   "action": "labeled",
   "label": "Utils/log/libs",
   "who": "DrahtBot"
  },
  {
   "t": "2020-07-07T20:35:17Z",
   "action": "labeled",
   "label": "Wallet",
   "who": "DrahtBot"
  },
  {
   "t": "2020-07-11T12:43:55Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-07-14T19:51:30Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-07-30T16:25:17Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-08-12T23:27:29Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-08-13T09:55:15Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-08-28T07:04:22Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-08-31T10:17:34Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-09-17T07:21:35Z",
   "action": "unlabeled",
   "label": "Docs",
   "who": "ajtowns"
  },
  {
   "t": "2020-09-17T07:21:35Z",
   "action": "unlabeled",
   "label": "GUI",
   "who": "ajtowns"
  },
  {
   "t": "2020-09-17T07:21:35Z",
   "action": "unlabeled",
   "label": "P2P",
   "who": "ajtowns"
  },
  {
   "t": "2020-09-17T07:21:35Z",
   "action": "unlabeled",
   "label": "RPC/REST/ZMQ",
   "who": "ajtowns"
  },
  {
   "t": "2020-09-17T07:21:35Z",
   "action": "unlabeled",
   "label": "Tests",
   "who": "ajtowns"
  },
  {
   "t": "2020-09-28T13:10:40Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-10-27T10:04:19Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-11-25T17:30:23Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-12-02T13:16:07Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-12-11T20:13:54Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-12-16T15:56:58Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-12-18T05:57:53Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-12-18T08:03:34Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-12-18T12:19:38Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-01-07T15:06:55Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-02-01T17:20:58Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-02-04T10:01:43Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-02-21T23:11:06Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-03-02T11:58:59Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-03-09T17:01:20Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-03-11T14:56:16Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-03-25T00:18:48Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-03-30T11:13:35Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-04-10T21:49:15Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-04-27T11:17:32Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-05-24T22:09:49Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-06-09T07:49:01Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-06-18T00:04:57Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-06-23T13:13:06Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-06-23T21:32:57Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-06-24T12:12:48Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-08-18T14:42:20Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-09-24T13:54:28Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-10-06T18:22:11Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-10-15T09:40:52Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-11-01T15:05:25Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2021-11-10T20:21:56Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-01-11T00:31:59Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-01-11T10:39:02Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-01-13T21:23:40Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-01-31T18:50:00Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-09-21T11:16:47Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-09-25T15:57:56Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-09-26T19:22:48Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-12-06T11:41:08Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-02-10T14:00:25Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-02-17T19:17:42Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-02-28T22:34:20Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-03-11T10:52:15Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-05-02T19:59:46Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-05-30T16:04:54Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-26T20:01:53Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-26T22:08:50Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-08-16T10:34:36Z",
   "action": "labeled",
   "label": "Needs CMake port",
   "who": "hebasto"
  },
  {
   "t": "2024-08-28T10:05:39Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-08-29T05:17:53Z",
   "action": "unlabeled",
   "label": "Needs CMake port",
   "who": "maflcko"
  },
  {
   "t": "2024-09-19T12:28:49Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-09-25T22:31:05Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-09-26T15:18:09Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-11-21T14:07:59Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-12-06T21:26:25Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-01-29T13:34:20Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-03-19T21:00:31Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "ryanofsky"
  },
  {
   "t": "2025-03-25T16:38:49Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-04-02T14:26:01Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-10-15T00:58:24Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-11-12T17:19:00Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-11-20T19:29:33Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-11-20T22:00:39Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-04T15:18:28Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-12T13:18:39Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-01-07T17:52:05Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-02-04T20:42:44Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-04-01T11:36:02Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-07T12:41:50Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-14T19:07:28Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-29T09:19:41Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-18T17:01:28Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-21T08:44:42Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-09-09T02:41:36Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  }
 ],
 "state_log": [
  {
   "t": "2023-09-20T16:09:31Z",
   "kind": "convert_to_draft",
   "who": "achow101"
  }
 ],
 "text_chars": 37611,
 "text_tokens_estimate": 9402,
 "changed_paths": [
  "CMakeLists.txt",
  "contrib/devtools/circular-dependencies.py",
  "doc/design/libraries.md",
  "doc/multiprocess.md",
  "src/CMakeLists.txt",
  "src/bitcoin-cli.cpp",
  "src/bitcoin-wallet.cpp",
  "src/bitcoind.cpp",
  "src/init.cpp",
  "src/init.h",
  "src/init/basic.cpp",
  "src/init/bitcoin-gui.cpp",
  "src/init/bitcoin-node.cpp",
  "src/init/bitcoin-wallet-ipc.cpp",
  "src/init/common.cpp",
  "src/init/common.h",
  "src/interfaces/chain.h",
  "src/interfaces/init.h",
  "src/interfaces/ipc.h",
  "src/interfaces/wallet.h",
  "src/ipc/CMakeLists.txt",
  "src/ipc/capnp/chain-types.h",
  "src/ipc/capnp/chain.capnp",
  "src/ipc/capnp/chain.cpp",
  "src/ipc/capnp/common-types.h",
  "src/ipc/capnp/common.capnp",
  "src/ipc/capnp/common.cpp",
  "src/ipc/capnp/common.h",
  "src/ipc/capnp/context.h",
  "src/ipc/capnp/handler-types.h",
  "src/ipc/capnp/handler.capnp",
  "src/ipc/capnp/init-types.h",
  "src/ipc/capnp/init.capnp",
  "src/ipc/capnp/init.cpp",
  "src/ipc/capnp/node-types.h",
  "src/ipc/capnp/node.capnp",
  "src/ipc/capnp/node.cpp",
  "src/ipc/capnp/node.h",
  "src/ipc/capnp/wallet-types.h",
  "src/ipc/capnp/wallet.capnp",
  "src/ipc/capnp/wallet.cpp",
  "src/ipc/capnp/wallet.h",
  "src/ipc/context.h",
  "src/ipc/interfaces.cpp",
  "src/ipc/libmultiprocess/.clang-tidy",
  "src/ipc/libmultiprocess/.github/workflows/bitcoin-core-ci.yml",
  "src/ipc/libmultiprocess/.github/workflows/ci.yml",
  "src/ipc/libmultiprocess/CMakeLists.txt",
  "src/ipc/libmultiprocess/ci/README.md",
  "src/ipc/libmultiprocess/ci/configs/default.bash",
  "src/ipc/libmultiprocess/ci/configs/freebsd.bash",
  "src/ipc/libmultiprocess/ci/configs/llvm.bash",
  "src/ipc/libmultiprocess/ci/configs/macos.bash",
  "src/ipc/libmultiprocess/ci/configs/netbsd.bash",
  "src/ipc/libmultiprocess/ci/configs/newdeps.bash",
  "src/ipc/libmultiprocess/ci/configs/olddeps.bash",
  "src/ipc/libmultiprocess/ci/configs/openbsd.bash",
  "src/ipc/libmultiprocess/ci/configs/sanitize.bash",
  "src/ipc/libmultiprocess/ci/scripts/ci.sh",
  "src/ipc/libmultiprocess/cmake/TargetCapnpSources.cmake",
  "src/ipc/libmultiprocess/cmake/compat_config.cmake",
  "src/ipc/libmultiprocess/cmake/pthread_checks.cmake",
  "src/ipc/libmultiprocess/doc/design.md",
  "src/ipc/libmultiprocess/doc/install.md",
  "src/ipc/libmultiprocess/doc/usage.md",
  "src/ipc/libmultiprocess/doc/versions.md",
  "src/ipc/libmultiprocess/example/calculator.cpp",
  "src/ipc/libmultiprocess/example/example.cpp",
  "src/ipc/libmultiprocess/example/printer.cpp",
  "src/ipc/libmultiprocess/include/mp/config.h.in",
  "src/ipc/libmultiprocess/include/mp/proxy-io.h",
  "src/ipc/libmultiprocess/include/mp/proxy-types.h",
  "src/ipc/libmultiprocess/include/mp/proxy.h",
  "src/ipc/libmultiprocess/include/mp/type-char.h",
  "src/ipc/libmultiprocess/include/mp/type-chrono.h",
  "src/ipc/libmultiprocess/include/mp/type-context.h",
  "src/ipc/libmultiprocess/include/mp/type-data.h",
  "src/ipc/libmultiprocess/include/mp/type-function.h",
  "src/ipc/libmultiprocess/include/mp/type-interface.h",
  "src/ipc/libmultiprocess/include/mp/type-map.h",
  "src/ipc/libmultiprocess/include/mp/type-number.h",
  "src/ipc/libmultiprocess/include/mp/type-string.h",
  "src/ipc/libmultiprocess/include/mp/type-struct.h",
  "src/ipc/libmultiprocess/include/mp/type-threadmap.h",
  "src/ipc/libmultiprocess/include/mp/util.h",
  "src/ipc/libmultiprocess/include/mp/version.h",
  "src/ipc/libmultiprocess/shell.nix",
  "src/ipc/libmultiprocess/src/mp/gen.cpp",
  "src/ipc/libmultiprocess/src/mp/proxy.cpp",
  "src/ipc/libmultiprocess/src/mp/util.cpp",
  "src/ipc/libmultiprocess/test/CMakeLists.txt",
  "src/ipc/libmultiprocess/test/mp/test/common.h",
  "src/ipc/libmultiprocess/test/mp/test/connect_tests.cpp",
  "src/ipc/libmultiprocess/test/mp/test/foo-types.h",
  "src/ipc/libmultiprocess/test/mp/test/foo.capnp",
  "src/ipc/libmultiprocess/test/mp/test/foo.h",
  "src/ipc/libmultiprocess/test/mp/test/listen_tests.cpp",
  "src/ipc/libmultiprocess/test/mp/test/spawn_tests.cpp",
  "src/ipc/libmultiprocess/test/mp/test/test.cpp",
  "src/ipc/libmultiprocess/test/mp/test/unixlistener.h",
  "src/ipc/stub.cpp",
  "src/net.h",
  "src/net_processing.h",
  "src/netbase.h",
  "src/node/interfaces.cpp",
  "src/policy/fees/block_policy_estimator.h",
  "src/qt/bitcoin.cpp",
  "src/qt/bitcoin.h",
  "src/qt/test/apptests.cpp",
  "src/qt/test/apptests.h",
  "src/qt/walletcontroller.cpp",
  "src/rpc/request.h",
  "src/test/btcsignals_tests.cpp",
  "src/test/util/setup_common.cpp",
  "src/util/btcsignals.h",
  "src/util/result.h",
  "src/wallet/coincontrol.h",
  "src/wallet/init.cpp",
  "src/wallet/interfaces.cpp",
  "src/wallet/types.h",
  "src/wallet/wallet.h",
  "src/wallet/wallettool.cpp",
  "src/wallet/wallettool.h",
  "test/functional/combine_logs.py",
  "test/functional/feature_block.py",
  "test/functional/feature_config_args.py",
  "test/functional/feature_taproot.py",
  "test/functional/test_framework/test_node.py",
  "test/functional/wallet_createwallet.py",
  "test/functional/wallet_descriptor.py",
  "test/functional/wallet_encryption.py",
  "test/functional/wallet_fast_rescan.py",
  "test/functional/wallet_groups.py",
  "test/functional/wallet_importdescriptors.py",
  "test/functional/wallet_multiwallet.py",
  "test/functional/wallet_reorgsrestore.py",
  "test/functional/wallet_resendwallettransactions.py",
  "test/functional/wallet_transactiontime_rescan.py",
  "test/lint/git-subtree-check.sh"
 ],
 "files": [
  {
   "path": "CMakeLists.txt",
   "add": 14,
   "del": 0
  },
  {
   "path": "contrib/devtools/circular-dependencies.py",
   "add": 1,
   "del": 1
  },
  {
   "path": "doc/design/libraries.md",
   "add": 1,
   "del": 1
  },
  {
   "path": "doc/multiprocess.md",
   "add": 6,
   "del": 0
  },
  {
   "path": "src/CMakeLists.txt",
   "add": 9,
   "del": 3
  },
  {
   "path": "src/bitcoin-cli.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/bitcoin-wallet.cpp",
   "add": 19,
   "del": 3
  },
  {
   "path": "src/bitcoind.cpp",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/init.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/init.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/init/basic.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/init/bitcoin-gui.cpp",
   "add": 8,
   "del": 20
  },
  {
   "path": "src/init/bitcoin-node.cpp",
   "add": 23,
   "del": 12
  },
  {
   "path": "src/init/bitcoin-wallet-ipc.cpp",
   "add": 85,
   "del": 0
  },
  {
   "path": "src/init/common.cpp",
   "add": 2,
   "del": 1
  },
  {
   "path": "src/init/common.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/interfaces/chain.h",
   "add": 5,
   "del": 4
  },
  {
   "path": "src/interfaces/init.h",
   "add": 4,
   "del": 1
  },
  {
   "path": "src/interfaces/ipc.h",
   "add": 4,
   "del": 1
  },
  {
   "path": "src/interfaces/wallet.h",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/ipc/CMakeLists.txt",
   "add": 19,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/chain-types.h",
   "add": 112,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/chain.capnp",
   "add": 189,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/chain.cpp",
   "add": 208,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/common-types.h",
   "add": 251,
   "del": 2
  },
  {
   "path": "src/ipc/capnp/common.capnp",
   "add": 84,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/common.cpp",
   "add": 51,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/common.h",
   "add": 27,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/context.h",
   "add": 14,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/handler-types.h",
   "add": 10,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/handler.capnp",
   "add": 17,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/init-types.h",
   "add": 25,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/init.capnp",
   "add": 9,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/init.cpp",
   "add": 40,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/node-types.h",
   "add": 110,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/node.capnp",
   "add": 213,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/node.cpp",
   "add": 97,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/node.h",
   "add": 40,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/wallet-types.h",
   "add": 55,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/wallet.capnp",
   "add": 269,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/wallet.cpp",
   "add": 251,
   "del": 0
  },
  {
   "path": "src/ipc/capnp/wallet.h",
   "add": 36,
   "del": 0
  },
  {
   "path": "src/ipc/context.h",
   "add": 5,
   "del": 0
  },
  {
   "path": "src/ipc/interfaces.cpp",
   "add": 6,
   "del": 4
  },
  {
   "path": "src/ipc/libmultiprocess/.clang-tidy",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/.github/workflows/bitcoin-core-ci.yml",
   "add": 3,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/.github/workflows/ci.yml",
   "add": 15,
   "del": 9
  },
  {
   "path": "src/ipc/libmultiprocess/CMakeLists.txt",
   "add": 17,
   "del": 7
  },
  {
   "path": "src/ipc/libmultiprocess/ci/README.md",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/default.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/freebsd.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/llvm.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/macos.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/netbsd.bash",
   "add": 1,
   "del": 7
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/newdeps.bash",
   "add": 6,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/olddeps.bash",
   "add": 4,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/openbsd.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/sanitize.bash",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/ipc/libmultiprocess/ci/scripts/ci.sh",
   "add": 18,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/cmake/TargetCapnpSources.cmake",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/cmake/compat_config.cmake",
   "add": 0,
   "del": 42
  },
  {
   "path": "src/ipc/libmultiprocess/cmake/pthread_checks.cmake",
   "add": 8,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/doc/design.md",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/ipc/libmultiprocess/doc/install.md",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/doc/usage.md",
   "add": 6,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/doc/versions.md",
   "add": 8,
   "del": 2
  },
  {
   "path": "src/ipc/libmultiprocess/example/calculator.cpp",
   "add": 4,
   "del": 9
  },
  {
   "path": "src/ipc/libmultiprocess/example/example.cpp",
   "add": 7,
   "del": 5
  },
  {
   "path": "src/ipc/libmultiprocess/example/printer.cpp",
   "add": 4,
   "del": 9
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/config.h.in",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/proxy-io.h",
   "add": 74,
   "del": 28
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/proxy-types.h",
   "add": 31,
   "del": 12
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/proxy.h",
   "add": 8,
   "del": 6
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-char.h",
   "add": 9,
   "del": 3
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-chrono.h",
   "add": 25,
   "del": 2
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-context.h",
   "add": 15,
   "del": 3
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-data.h",
   "add": 2,
   "del": 3
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-function.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-interface.h",
   "add": 10,
   "del": 10
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-map.h",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-number.h",
   "add": 24,
   "del": 15
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-string.h",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-struct.h",
   "add": 12,
   "del": 12
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-threadmap.h",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/util.h",
   "add": 63,
   "del": 15
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/version.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/shell.nix",
   "add": 12,
   "del": 6
  },
  {
   "path": "src/ipc/libmultiprocess/src/mp/gen.cpp",
   "add": 39,
   "del": 41
  },
  {
   "path": "src/ipc/libmultiprocess/src/mp/proxy.cpp",
   "add": 94,
   "del": 35
  },
  {
   "path": "src/ipc/libmultiprocess/src/mp/util.cpp",
   "add": 216,
   "del": 31
  },
  {
   "path": "src/ipc/libmultiprocess/test/CMakeLists.txt",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/common.h",
   "add": 27,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/connect_tests.cpp",
   "add": 212,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/foo-types.h",
   "add": 6,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/foo.capnp",
   "add": 12,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/foo.h",
   "add": 31,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/listen_tests.cpp",
   "add": 47,
   "del": 77
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/spawn_tests.cpp",
   "add": 28,
   "del": 5
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/test.cpp",
   "add": 190,
   "del": 6
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/unixlistener.h",
   "add": 84,
   "del": 0
  },
  {
   "path": "src/ipc/stub.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/net.h",
   "add": 3,
   "del": 0
  },
  {
   "path": "src/net_processing.h",
   "add": 3,
   "del": 0
  },
  {
   "path": "src/netbase.h",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/node/interfaces.cpp",
   "add": 10,
   "del": 4
  },
  {
   "path": "src/policy/fees/block_policy_estimator.h",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/qt/bitcoin.cpp",
   "add": 18,
   "del": 3
  },
  {
   "path": "src/qt/bitcoin.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/qt/test/apptests.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/qt/test/apptests.h",
   "add": 5,
   "del": 1
  },
  {
   "path": "src/qt/walletcontroller.cpp",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/rpc/request.h",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/test/btcsignals_tests.cpp",
   "add": 46,
   "del": 0
  },
  {
   "path": "src/test/util/setup_common.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/util/btcsignals.h",
   "add": 69,
   "del": 9
  },
  {
   "path": "src/util/result.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/wallet/coincontrol.h",
   "add": 3,
   "del": 0
  },
  {
   "path": "src/wallet/init.cpp",
   "add": 8,
   "del": 0
  },
  {
   "path": "src/wallet/interfaces.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/wallet/types.h",
   "add": 5,
   "del": 0
  },
  {
   "path": "src/wallet/wallet.h",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/wallet/wallettool.cpp",
   "add": 5,
   "del": 6
  },
  {
   "path": "src/wallet/wallettool.h",
   "add": 5,
   "del": 1
  },
  {
   "path": "test/functional/combine_logs.py",
   "add": 12,
   "del": 0
  },
  {
   "path": "test/functional/feature_block.py",
   "add": 10,
   "del": 2
  },
  {
   "path": "test/functional/feature_config_args.py",
   "add": 1,
   "del": 0
  },
  {
   "path": "test/functional/feature_taproot.py",
   "add": 1,
   "del": 0
  },
  {
   "path": "test/functional/test_framework/test_node.py",
   "add": 31,
   "del": 8
  },
  {
   "path": "test/functional/wallet_createwallet.py",
   "add": 1,
   "del": 1
  },
  {
   "path": "test/functional/wallet_descriptor.py",
   "add": 1,
   "del": 1
  },
  {
   "path": "test/functional/wallet_encryption.py",
   "add": 1,
   "del": 1
  },
  {
   "path": "test/functional/wallet_fast_rescan.py",
   "add": 4,
   "del": 4
  },
  {
   "path": "test/functional/wallet_groups.py",
   "add": 3,
   "del": 3
  },
  {
   "path": "test/functional/wallet_importdescriptors.py",
   "add": 1,
   "del": 1
  },
  {
   "path": "test/functional/wallet_multiwallet.py",
   "add": 6,
   "del": 6
  },
  {
   "path": "test/functional/wallet_reorgsrestore.py",
   "add": 1,
   "del": 1
  },
  {
   "path": "test/functional/wallet_resendwallettransactions.py",
   "add": 4,
   "del": 4
  },
  {
   "path": "test/functional/wallet_transactiontime_rescan.py",
   "add": 1,
   "del": 0
  },
  {
   "path": "test/lint/git-subtree-check.sh",
   "add": 2,
   "del": 1
  }
 ],
 "test_lines": 173,
 "git": {
  "head": "d8bb996bdf6dc5aacc41517bb24d78b996e8510c",
  "head_matches_backup": true,
  "base": "33a363ea250839ca31ea043b7500789d2e5d844b",
  "commits": [
   {
    "sha": "ae6b583256",
    "subject": "Add capnp serialization code for bitcoin types",
    "files": 2,
    "add": 157,
    "del": 2
   },
   {
    "sha": "4466e5ce9b",
    "subject": "Add capnp wrapper for Handler interface",
    "files": 3,
    "add": 28,
    "del": 0
   },
   {
    "sha": "7b997424a9",
    "subject": "Add capnp wrapper for Chain interface",
    "files": 10,
    "add": 587,
    "del": 7
   },
   {
    "sha": "c2dfc0c57f",
    "subject": "multiprocess: Expose Chain interface",
    "files": 3,
    "add": 6,
    "del": 0
   },
   {
    "sha": "d9cfcf89bb",
    "subject": "build: suppress -Wc++23-lambda-attributes in warn_interface",
    "files": 1,
    "add": 14,
    "del": 0
   },
   {
    "sha": "bc86e9270e",
    "subject": "Merge branch 'pr/ipc-chain' into pr/ipc",
    "files": 14,
    "add": 778,
    "del": 9
   },
   {
    "sha": "c0ae4dfa00",
    "subject": "test: Increase feature_block.py and feature_taproot.py timeouts",
    "files": 3,
    "add": 12,
    "del": 2
   },
   {
    "sha": "f274686c60",
    "subject": "test: Fix multiprocess test for unclean shutdown on kill",
    "files": 1,
    "add": 15,
    "del": 0
   },
   {
    "sha": "32937a817c",
    "subject": "util: Add util::Result workaround to be compatible with libmultiprocess",
    "files": 2,
    "add": 6,
    "del": 1
   },
   {
    "sha": "12ae360d84",
    "subject": "test: characterize btcsignals callback destruction timing",
    "files": 1,
    "add": 59,
    "del": 0
   },
   {
    "sha": "d5c694aeb1",
    "subject": "btcsignals: destroy callbacks eagerly on disconnect",
    "files": 2,
    "add": 52,
    "del": 29
   },
   {
    "sha": "66821528e4",
    "subject": "btcsignals: fall back to atomic_load/store without __cpp_lib_atomic_shared_ptr",
    "files": 1,
    "add": 25,
    "del": 1
   },
   {
    "sha": "8fc97929d9",
    "subject": "multiprocess: Add capnp serialization code for bitcoin types",
    "files": 6,
    "add": 161,
    "del": 1
   },
   {
    "sha": "897a9c3b3e",
    "subject": "interfaces, refactor: Change WalletLoader::restoreWallet parameter order",
    "files": 3,
    "add": 4,
    "del": 4
   },
   {
    "sha": "d5bfd35ca8",
    "subject": "multiprocess: Add capnp wrapper for Wallet interface",
    "files": 13,
    "add": 763,
    "del": 1
   },
   {
    "sha": "99442afacb",
    "subject": "multiprocess: Add capnp wrapper for Node interface",
    "files": 9,
    "add": 356,
    "del": 24
   },
   {
    "sha": "8eb998f88f",
    "subject": "multiprocess: Make bitcoin-gui spawn a bitcoin-node process",
    "files": 10,
    "add": 102,
    "del": 22
   },
   {
    "sha": "48ca9f18b1",
    "subject": "multiprocess: Make bitcoin-node spawn a bitcoin-wallet process",
    "files": 9,
    "add": 173,
    "del": 12
   },
   {
    "sha": "8f40dedc6d",
    "subject": "multiprocess: Add debug.log .wallet/.gui suffixes",
    "files": 31,
    "add": 99,
    "del": 63
   },
   {
    "sha": "c941fc462b",
    "subject": "doc: Multiprocess misc doc and comment updates",
    "files": 2,
    "add": 7,
    "del": 1
   },
   {
    "sha": "4c842beaae",
    "subject": "Squashed 'src/ipc/libmultiprocess/' changes from e8de5c7b68e..4d454a81da6",
    "files": 56,
    "add": 1398,
    "del": 420
   },
   {
    "sha": "13e14ac995",
    "subject": "combine_logs: Handle multiprocess wallet log files",
    "files": 1,
    "add": 4,
    "del": 0
   },
   {
    "sha": "567c2e020f",
    "subject": "Merge commit '4c842beaae2e97d7934800c8433da9632b21c0ff' into pr/subtree-14",
    "files": 56,
    "add": 1398,
    "del": 420
   },
   {
    "sha": "d00ce388b3",
    "subject": "Merge branch 'pr/ipc' into pr/ipc-connect",
    "files": 80,
    "add": 2579,
    "del": 119
   },
   {
    "sha": "d8bb996bdf",
    "subject": "multiprocess: Add bitcoin-wallet -ipcconnect option",
    "files": 5,
    "add": 31,
    "del": 10
   }
  ],
  "patch_truncated": true
 },
 "input_hash": "f40696936a3721fb",
 "extracted_at": "2026-09-17T16:15:31+00:00"
}