{
 "number": 10102,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/10102",
 "title": "Multiprocess bitcoin",
 "author": "ryanofsky",
 "author_association": "MEMBER",
 "created_at": "2017-03-27T21:48:26Z",
 "updated_at": "2026-09-13T16:04:10Z",
 "age_days": 3460,
 "draft": true,
 "labels": [
  "GUI",
  "RPC/REST/ZMQ"
 ],
 "milestone": null,
 "base": "master",
 "head_sha": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
 "head_ref": "pr/ipc",
 "head_repo": "ryanofsky/bitcoin",
 "head_history": [
  {
   "t": "2017-04-06T23:36:49Z",
   "sha": "0ca73bc13c3457cd5c3244abfa9fa586d9137117"
  },
  {
   "t": "2017-04-07T20:37:18Z",
   "sha": "1ea8987cc97e578af0179111988a0163c687bec5"
  },
  {
   "t": "2017-04-10T08:57:19Z",
   "sha": "5e28c2fcc2757479d29ca83cd3256584ab908e48"
  },
  {
   "t": "2017-04-10T22:00:59Z",
   "sha": "dda375662d060ce42b5113247301e0289584e14d"
  },
  {
   "t": "2017-04-20T19:25:24Z",
   "sha": "ab0afba3a44255b3eec80f4eebe45a851ae23927"
  },
  {
   "t": "2017-04-20T21:33:23Z",
   "sha": "8d92ff563485d5691e3c737aca36c92e056fe4cf"
  },
  {
   "t": "2017-04-27T17:46:01Z",
   "sha": "8f78f085976bcb0f9093f0b1b4c3c65110ec44aa"
  },
  {
   "t": "2017-04-27T20:57:40Z",
   "sha": "8a603edfe87297c14fd63ae72ea71fc6e726a7bd"
  },
  {
   "t": "2017-04-28T21:42:08Z",
   "sha": "6c3b3f16efd78d2bade738a63d6a71ebe81ab5b9"
  },
  {
   "t": "2017-04-28T21:50:11Z",
   "sha": "f2aaaab884f71501530b558e2bf8ad432d8778d0"
  },
  {
   "t": "2017-05-09T20:01:39Z",
   "sha": "1ab31a93bc917753bb4dd6e8cc0ed001ed1631bf"
  },
  {
   "t": "2017-05-17T15:36:28Z",
   "sha": "1fb346a91523fb1cdef4dd2e1a60b56aa1352a4a"
  },
  {
   "t": "2017-05-23T19:30:47Z",
   "sha": "7fd0adcb81dca2491f7d3b5c5e29f40c2025c500"
  },
  {
   "t": "2017-05-24T16:59:02Z",
   "sha": "b9aa7a6cb3913b7851df25c87a076609c8123d13"
  },
  {
   "t": "2017-05-25T20:05:24Z",
   "sha": "499a057e4b2bfde160ca6914cf851405b4f25fb1"
  },
  {
   "t": "2017-06-02T14:26:08Z",
   "sha": "00f1d1fc757c08954055f54b4621946353620df0"
  },
  {
   "t": "2017-06-02T14:48:13Z",
   "sha": "068d8c8a247662ea051a011c4b50c409292e6d56"
  },
  {
   "t": "2017-06-19T19:10:11Z",
   "sha": "86c435e1c9a2f58377091428dfdcf0e7c21e1f54"
  },
  {
   "t": "2017-08-25T19:07:38Z",
   "sha": "cdb2130059dd57f932bbe4f29cda98e5bb94bdf6"
  },
  {
   "t": "2017-08-25T22:44:40Z",
   "sha": "c4e2c92f790b7e86c3f7095ef37c79f77b44cc6f"
  },
  {
   "t": "2017-09-21T19:12:13Z",
   "sha": "c41f41062f61fc3f26044f7762ca2daa1bee93af"
  },
  {
   "t": "2018-02-14T12:35:33Z",
   "sha": "e2210f84d1faeb974e17402a343de6ac1559710c"
  },
  {
   "t": "2018-02-14T12:48:50Z",
   "sha": "52a2a07e3e7d773b26654a2577dbc66391b2cbcf"
  },
  {
   "t": "2018-02-14T19:38:23Z",
   "sha": "8e93c844ef8adeab6fb8a5c8cc8f8113b4817140"
  },
  {
   "t": "2018-02-23T17:45:38Z",
   "sha": "2b44eed183583750ee9500726f12d94ebe6a70aa"
  },
  {
   "t": "2018-02-26T14:16:16Z",
   "sha": "f94aa8a9c593a51d95479bcdad8f779c75c09fd2"
  },
  {
   "t": "2018-03-02T19:01:33Z",
   "sha": "67cd87e6c2c70f89648c542afb75af21f7b47fee"
  },
  {
   "t": "2018-03-07T14:10:49Z",
   "sha": "2a3338c7f28ce244b01af96c2a2f20d50d16abb0"
  },
  {
   "t": "2018-03-07T20:32:05Z",
   "sha": "fe450d4121aab5a6db42d1633f76de58c0b82c88"
  },
  {
   "t": "2018-03-12T18:47:45Z",
   "sha": "a7019d7b5277c9a86231ec7c383d40a2bd2eff45"
  },
  {
   "t": "2018-03-14T14:47:50Z",
   "sha": "6ad74d823ff3d34082344fa0ff8c8d5c67ca3d60"
  },
  {
   "t": "2018-03-23T21:54:46Z",
   "sha": "a44cc9e5ee4d57390b2777e304ae7582cfa6bfb7"
  },
  {
   "t": "2018-04-06T18:30:21Z",
   "sha": "0cdf7d9b3e8b93ae64f2970be58bc127580f16af"
  },
  {
   "t": "2018-04-07T17:06:21Z",
   "sha": "7b5230d4a801581140e499a21deb01b6d32f9891"
  },
  {
   "t": "2018-04-09T14:50:14Z",
   "sha": "91718344750146df8871aea472fe3a504d222736"
  },
  {
   "t": "2018-04-10T10:39:15Z",
   "sha": "bce089842f951858ca56a5a656d66e60d303dc6f"
  },
  {
   "t": "2018-04-10T13:02:06Z",
   "sha": "d820a2313fe9a4600e7a6d77c4ec06d44a96e4fe"
  },
  {
   "t": "2018-04-11T15:34:51Z",
   "sha": "31d2b21e4c4baa825c40baa2c08cae8262d5d9aa"
  },
  {
   "t": "2018-04-17T14:45:36Z",
   "sha": "922b9f6afabd67b267505a48a9a3f06fc220bd07"
  },
  {
   "t": "2018-04-17T19:26:13Z",
   "sha": "6ef023a8c0486d4c9d843b119c43cab475188261"
  },
  {
   "t": "2018-07-18T17:38:04Z",
   "sha": "c43b2c2754066ca3c6553d48fbd81a43b9272b3b"
  },
  {
   "t": "2018-08-03T19:31:54Z",
   "sha": "9d17bab1d8e3947d3b60e123c0e4d93e8f288d51"
  },
  {
   "t": "2018-08-07T21:06:50Z",
   "sha": "b916d5226d9bbf2b0e5d5b15e4ea6186d9d36591"
  },
  {
   "t": "2018-08-07T21:17:15Z",
   "sha": "7250ba9adbfc18d81c68f4d9a36da84c1a97b78a"
  },
  {
   "t": "2018-08-08T18:44:00Z",
   "sha": "b81a2b01713c4267c3684dcc07bea332abb05d3f"
  },
  {
   "t": "2018-08-09T18:38:51Z",
   "sha": "006286e7310353fbfd143f69e9a319b24bd49e75"
  },
  {
   "t": "2018-08-14T14:43:39Z",
   "sha": "85b23296891032875cbda7a3c70c3422ce04da15"
  },
  {
   "t": "2018-08-21T19:21:27Z",
   "sha": "84af92e496f00608dff749e7b1372964cb20df42"
  },
  {
   "t": "2018-08-22T22:30:07Z",
   "sha": "ca294aa8c036bf62d808450a4555a0806ff7227b"
  },
  {
   "t": "2018-08-23T21:53:26Z",
   "sha": "dd9e4f6909a6aca0cf4b7c16a277b5099b2011cc"
  },
  {
   "t": "2018-08-29T19:12:20Z",
   "sha": "5c345a6fdbebd7579795f3798b65704fd2441987"
  },
  {
   "t": "2018-08-30T20:02:34Z",
   "sha": "6bd29a0fc805c223b4f000f999db15bf0b327881"
  },
  {
   "t": "2018-08-31T17:22:11Z",
   "sha": "2e8bee7b4761a3e61e5266b51d6f7298e2b1bad3"
  },
  {
   "t": "2018-09-04T16:19:15Z",
   "sha": "b65d9eca6e1d365fc63542b6961cfe89188bb083"
  },
  {
   "t": "2018-09-04T17:36:28Z",
   "sha": "8d3df50476fa2f96cf2910238e5a2b3f8380b6e1"
  },
  {
   "t": "2018-09-05T14:52:20Z",
   "sha": "5ce9a948c8ec47762d0a23d1cf7f2ce57386052b"
  },
  {
   "t": "2018-09-14T21:34:46Z",
   "sha": "c1cbca095f1bf10ca4370bfe99b798a5d1e9f268"
  },
  {
   "t": "2018-09-26T20:52:46Z",
   "sha": "382cfabf523cd209adeb3ed9c5fd5d69fea284ab"
  },
  {
   "t": "2018-09-27T18:11:54Z",
   "sha": "ededfe8800fd2647851d4d42dd765cfcd8d69cde"
  },
  {
   "t": "2018-11-01T21:01:26Z",
   "sha": "ee425e2ddff453a5436cffb1e16e5452d8e3892a"
  },
  {
   "t": "2018-11-12T19:21:05Z",
   "sha": "10ad449bb7c6ea3c2fea9f9a32e54e960c5acfd5"
  },
  {
   "t": "2018-11-26T20:53:57Z",
   "sha": "f2233bcfef4147e0268da581f797b1646b0d8447"
  },
  {
   "t": "2018-12-06T19:45:16Z",
   "sha": "da8719d39614e2673047721f9a7ea8e96587b000"
  },
  {
   "t": "2019-01-23T21:10:45Z",
   "sha": "c5bc654324670631d32e530c4cf1dbf9af58841a"
  },
  {
   "t": "2019-02-13T20:09:29Z",
   "sha": "cc23f7434c21e195609e4dff6b8839864a426715"
  },
  {
   "t": "2019-03-04T22:21:11Z",
   "sha": "c5dadccc5da6247975ee3884687a680bc46a9327"
  },
  {
   "t": "2019-03-05T15:17:39Z",
   "sha": "191e240ce66208eb17ca743a6928cb20aa56041e"
  },
  {
   "t": "2019-03-21T13:04:59Z",
   "sha": "3440513a45e94a5f1f0c67ab7409439afbbef673"
  },
  {
   "t": "2019-05-24T19:22:09Z",
   "sha": "c02494769c522f68b2b1d78e8e8dcf9f4ca9a17b"
  },
  {
   "t": "2019-05-24T21:04:22Z",
   "sha": "e35cf68fca5f6cd155ffac0fbb9405df1523668c"
  },
  {
   "t": "2019-05-24T21:29:36Z",
   "sha": "d6359e5c7446378ed288d723e17582bc80eba664"
  },
  {
   "t": "2019-06-01T01:49:02Z",
   "sha": "a06fb3b8600dd14422cee7d4f609ebd50c9a5fbc"
  },
  {
   "t": "2019-06-01T01:59:00Z",
   "sha": "010b7ea29383d0582d190e1299cc300998b231b5"
  },
  {
   "t": "2019-06-01T09:57:57Z",
   "sha": "7de24eff246388b23bcfa23a86aca14986521c30"
  },
  {
   "t": "2019-06-01T14:06:30Z",
   "sha": "fbe1f191135aad35cb0f4ac54c0383f8cd2bbda8"
  },
  {
   "t": "2019-06-08T12:55:16Z",
   "sha": "e0d283dfbd065520b625e8831fbc231445951e0a"
  },
  {
   "t": "2019-06-26T20:40:33Z",
   "sha": "d1085dd405e8e4b3ee755a377fa1a428a8d435d6"
  },
  {
   "t": "2019-06-26T20:43:34Z",
   "sha": "0e2bacb9935da07a2f7eca1596e4f1bf2d583ff5"
  },
  {
   "t": "2019-06-27T15:58:20Z",
   "sha": "1eb44dfdf33d1b8459f8b12180a8112d1b73ab1f"
  },
  {
   "t": "2019-07-10T18:03:01Z",
   "sha": "accd041ff0b5b40798784db5b371d26c30371a24"
  },
  {
   "t": "2019-07-12T21:12:44Z",
   "sha": "3e7885ffa15ade3da189b15366574e9bee60294d"
  },
  {
   "t": "2019-07-15T18:42:41Z",
   "sha": "467cfa3e9d6500bfafb091c8153679f85745f651"
  },
  {
   "t": "2019-07-17T16:38:33Z",
   "sha": "def6e59420d4772d1efffe2eab8608558a1c672a"
  },
  {
   "t": "2019-08-06T19:15:16Z",
   "sha": "3d97f874ce6d86c19d9f65997f657ae30de0cde4"
  },
  {
   "t": "2019-08-06T19:57:03Z",
   "sha": "36f581e8516988463e406869486f399fced47fb2"
  },
  {
   "t": "2019-08-06T21:49:49Z",
   "sha": "de072a9a37bfa84759410f3019433bc43d4ab725"
  },
  {
   "t": "2019-08-20T15:10:19Z",
   "sha": "20ee129209ccf9f6e84893fe27a4dee99e7b5d5c"
  },
  {
   "t": "2019-08-28T20:17:14Z",
   "sha": "8c7f94f9dbc9c257afd7986068f0eeca7ee038a1"
  },
  {
   "t": "2019-08-29T22:52:10Z",
   "sha": "805addc1c2d06131c19675ceb342b7a91ddfebaa"
  },
  {
   "t": "2019-08-30T11:29:55Z",
   "sha": "406278a8b8e68b79e3366629a52acb87ee671500"
  },
  {
   "t": "2019-08-30T19:48:01Z",
   "sha": "908619d8b1f3490a06b3248bc0acd847818f24ed"
  },
  {
   "t": "2019-08-30T20:05:46Z",
   "sha": "665348c7c54c934e247e18bfcf0f5b5435cc11d3"
  },
  {
   "t": "2019-08-30T21:29:02Z",
   "sha": "adbf158a4c02d0dd8f488feae343c39f83e85383"
  },
  {
   "t": "2019-09-18T18:05:51Z",
   "sha": "51c895d0169fc4c18a662b8cfc2b7526b2211d29"
  },
  {
   "t": "2019-09-19T16:37:16Z",
   "sha": "b6066d2b491fb32563b9b69a82f4736b68df9cc7"
  },
  {
   "t": "2020-01-08T22:36:38Z",
   "sha": "d22e3f28d58f2ffd6df1eeaad4625eac673b7b0b"
  },
  {
   "t": "2020-01-09T21:21:59Z",
   "sha": "4a0f0fd6a1a3d38cf5115d21ff0242964f0bba09"
  },
  {
   "t": "2020-01-09T22:23:57Z",
   "sha": "bdd677c32ff38987fa71ae848b6565637c97550d"
  },
  {
   "t": "2020-01-10T20:51:24Z",
   "sha": "2017cca9cff0b0c5bb7a59921ec7b5aece63ac8c"
  },
  {
   "t": "2020-01-24T22:32:01Z",
   "sha": "004a611351a2a5bf81a4cfb706d0458576a54dc7"
  },
  {
   "t": "2020-02-25T21:59:17Z",
   "sha": "7dd8e269cc5ebb479f63aedea0c9994e89671a60"
  },
  {
   "t": "2020-03-05T17:09:30Z",
   "sha": "8f7b2b772d2a8941b34b54c5e3c345309eed83de"
  },
  {
   "t": "2020-03-06T23:55:48Z",
   "sha": "b70b060230eb792f9ce089b047e2ec01292372e7"
  },
  {
   "t": "2020-03-20T13:57:52Z",
   "sha": "0ffff86cffbd1048a435c55e9b6d19f4e0200fb2"
  },
  {
   "t": "2020-03-25T03:07:38Z",
   "sha": "67eb575c5b071ea802bd2fa02b9022b92dd8d9f8"
  },
  {
   "t": "2020-03-25T19:05:42Z",
   "sha": "4d153cc8a61610da91488e2f250dac74c87fad32"
  },
  {
   "t": "2020-04-10T17:55:30Z",
   "sha": "9e4ccac3a842e060b5862c73f4bb8cb2d741cb98"
  }
 ],
 "additions": 3977,
 "deletions": 539,
 "changed_files": 136,
 "commit_count": 23,
 "size_bucket": "XL",
 "mergeable_state": "clean",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {
    "concept_nack": [
     {
      "login": "electorr",
      "url": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-790538884"
     }
    ],
    "concept_ack": [
     {
      "login": "dcousens",
      "url": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-289927205"
     },
     {
      "login": "laanwj",
      "url": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-289999980"
     },
     {
      "login": "jgarzik",
      "url": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-573213164"
     },
     {
      "login": "practicalswift",
      "url": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-573397932"
     },
     {
      "login": "hebasto",
      "url": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-595125863"
     },
     {
      "login": "promag",
      "url": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-715604162"
     },
     {
      "login": "jamesob",
      "url": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-1290404224"
     }
    ],
    "stale_ack": [
     {
      "login": "Sjors",
      "url": "https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-1013193492"
     }
    ]
   },
   "conflicts": [
    {
     "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": {
  "laanwj": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2017-03-29T06:53:25Z",
   "stale": false
  },
  "Sjors": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2018-08-11T13:10:51Z",
   "stale": false
  },
  "jgarzik": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2020-01-10T21:30:41Z",
   "stale": false
  },
  "hebasto": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2020-03-05T09:35:49Z",
   "stale": false
  },
  "electorr": {
   "kind": "nack",
   "hash": null,
   "t": "2021-03-04T11:16:28Z",
   "stale": false
  },
  "jamesob": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2022-10-25T11:32:04Z",
   "stale": false
  }
 },
 "acks_tally": {
  "ack": 0,
  "stale_ack": 0,
  "concept_ack": 5,
  "approach_ack": 0,
  "nack": 1,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 0,
  "changes_requested": 0,
  "distinct_reviewers": [
   "JeremyRubin",
   "Sjors",
   "ViniciusCestarii",
   "achow101",
   "ariard",
   "atangangabbieian4",
   "aureleoules",
   "darosior",
   "dcousens",
   "electorr",
   "fanquake",
   "fingera",
   "gmaxwell",
   "hebasto",
   "ismail120572",
   "jamesob",
   "jb55",
   "jgarzik",
   "jimhashhq",
   "jonasschnelli",
   "jonatack",
   "laanwj",
   "leishman",
   "maflcko",
   "practicalswift",
   "promag",
   "sarkrezahoseinjisus-tech",
   "sipa",
   "willcl-ark"
  ]
 },
 "signals": {
  "needs_rebase": false,
  "ci_failed": false,
  "mergeable_state": "clean",
  "last_author_activity": "2026-09-08T08:13:51Z",
  "last_reviewer_activity": "2026-08-14T20:26:03Z",
  "last_reviewer": "ViniciusCestarii",
  "author_silent_days": 9,
  "waiting_on_author_days": 0,
  "days_since_update": 4
 },
 "refs": {
  "mentioned": [
   116,
   201,
   202,
   203,
   204,
   205,
   206,
   207,
   546,
   2955,
   2956,
   2957,
   2958,
   3075,
   10973,
   12246,
   12677,
   13190,
   15101,
   15114,
   15153,
   15288,
   15454,
   15531,
   15935,
   15937,
   16367,
   16426,
   16963,
   17211,
   17781,
   17905,
   17938,
   17954,
   18027,
   18077,
   18241,
   18249,
   18338,
   18571,
   18588,
   18766,
   19011,
   19060,
   19098,
   19099,
   19160,
   19219,
   19326,
   19425,
   19460,
   19461,
   19499,
   19572,
   19725,
   19829,
   20354,
   20464,
   20588,
   20671,
   20685,
   20721,
   20736,
   20755,
   20786,
   21007,
   21015,
   21035,
   21051,
   21366,
   21404,
   21528,
   21574,
   21639,
   21935,
   22156,
   22215,
   22217,
   22218,
   22219,
   22320,
   22323,
   22339,
   22364,
   22387,
   22570,
   22782,
   22818,
   22848,
   22937,
   22951,
   23006,
   23060,
   23065,
   23289,
   23345,
   23474,
   23497,
   23591,
   23653,
   23721,
   23737,
   23758,
   23828,
   23842,
   24026,
   24039,
   24937,
   25737,
   25957,
   26238,
   26606,
   26672,
   26679,
   26752,
   27596,
   28438,
   28503,
   28508,
   28556,
   28921,
   28929,
   29409,
   31130,
   31212,
   31335,
   31519,
   31634,
   31709,
   31740,
   31741,
   32069,
   32763,
   33003,
   33229,
   33585,
   34020,
   34075,
   35043,
   35084,
   35118,
   35605,
   36176
  ],
  "depends_on": [],
  "fixes": [],
  "linked_issues": [],
  "references": [
   {
    "number": 29409,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "multiprocess: Add capnp wrapper for Chain interface"
   },
   {
    "number": 19460,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "multiprocess: Add bitcoin-wallet -ipcconnect option"
   },
   {
    "number": 19461,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "multiprocess: Add bitcoin-gui -ipcconnect option"
   },
   {
    "number": 35084,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-07-29",
    "title": "ipc: Add nonunix platform support"
   },
   {
    "number": 116,
    "type": "pull",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "Spent per txout"
   },
   {
    "number": 201,
    "type": "pull",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "Linux Capabilities Bounding Set Support"
   },
   {
    "number": 202,
    "type": "pull",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "Linux Capabilities Bounding Set Support"
   },
   {
    "number": 203,
    "type": "pull",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "Add wallet privkey encryption, and use it for all new keys"
   },
   {
    "number": 204,
    "type": "pull",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "fixed french translation"
   },
   {
    "number": 205,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2011-05-09",
    "title": "Case-Insensitive JSON-RPC HTTP Headers"
   },
   {
    "number": 206,
    "type": "issue",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "Report how-long-until-normal-priority"
   },
   {
    "number": 207,
    "type": "issue",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "Problem with fonts on ubuntu Maverick"
   },
   {
    "number": 546,
    "type": "issue",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "Can this commit be removed before 0.4 release? 074d584a04ee80123001728ad63d4fd7e9adb828"
   },
   {
    "number": 2955,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2013-08-30",
    "title": "qt: Use GUIUtil::HtmlEscape to escape HTML"
   },
   {
    "number": 2956,
    "type": "pull",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "Changed \\\"Addresses\\\" tab to \\\"Address book\\\" in GUI"
   },
   {
    "number": 2957,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2013-08-30",
    "title": "fix help prompt"
   },
   {
    "number": 2958,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2013-09-02",
    "title": "[Qt] Display txfee in first sendCoinsDialog message box"
   },
   {
    "number": 3075,
    "type": "issue",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "no tesnet seeds / testnet connection issues via proxy"
   },
   {
    "number": 10973,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2019-03-21",
    "title": "Refactor: separate wallet from node"
   },
   {
    "number": 12246,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2018-09-27",
    "title": "Bugfix: Only run bitcoin-tx tests when bitcoin-tx is enabled"
   },
   {
    "number": 12677,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-09-20",
    "title": "RPC: Add ancestor{count,size,fees} to listunspent output"
   },
   {
    "number": 13190,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2018-05-09",
    "title": "Have gArgs handle printing help"
   },
   {
    "number": 15101,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2019-01-18",
    "title": "gui: Add WalletController"
   },
   {
    "number": 15114,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2019-01-14",
    "title": "Qt: Replace remaining 0 with nullptr"
   },
   {
    "number": 15153,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2019-02-12",
    "title": "gui: Add Open Wallet menu"
   },
   {
    "number": 15288,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2019-03-04",
    "title": "Remove wallet -> node global function calls"
   },
   {
    "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": 15531,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2019-03-05",
    "title": "Suggested interfaces::Chain cleanups from #15288"
   },
   {
    "number": 15935,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-07-23",
    "title": "Add <datadir>/settings.json persistent settings storage"
   },
   {
    "number": 15937,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-08-15",
    "title": "Add loadwallet and createwallet load_on_startup options"
   },
   {
    "number": 16367,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-04-10",
    "title": "Multiprocess build support"
   },
   {
    "number": 16426,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-05-01",
    "title": "Reverse cs_main, cs_wallet lock order and reduce cs_main locking"
   },
   {
    "number": 16963,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-01-08",
    "title": "wallet: Fix unique_ptr usage in boost::signals2"
   },
   {
    "number": 17211,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-10-04",
    "title": "Allow fundrawtransaction and walletcreatefundedpsbt to take external inputs"
   },
   {
    "number": 17781,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-01-02",
    "title": "rpc: Remove mempool global from miner"
   },
   {
    "number": 17905,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-04-10",
    "title": "gui: Avoid redundant tx status updates"
   },
   {
    "number": 17938,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-06-21",
    "title": "Disallow automatic conversion between disparate hash types"
   },
   {
    "number": 17954,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-04-14",
    "title": "wallet: Remove calls to Chain::Lock methods"
   },
   {
    "number": 18027,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2020-06-21",
    "title": "\\\"PSBT Operations\\\" dialog"
   },
   {
    "number": 18077,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2021-01-07",
    "title": "net: Add NAT-PMP port forwarding support"
   }
  ],
  "conflicts": [
   36167,
   36097,
   35932,
   35911,
   35511,
   34603,
   32387,
   31672,
   31507,
   30342,
   29700,
   27052,
   26022,
   25665
  ]
 },
 "stack": {
  "shares_commits_with": [
   19460,
   19461,
   29409
  ],
  "based_on": [
   29409
  ],
  "base_for": [
   19460,
   19461
  ]
 },
 "review_paths": [
  "doc/build-unix.md",
  "src/init.h",
  "src/init/bitcoin-gui.cpp",
  "src/init/bitcoin-node.cpp",
  "src/interfaces/README.md",
  "src/interfaces/base.cpp",
  "src/interfaces/base.h",
  "src/interfaces/capnp/FIXME",
  "src/interfaces/capnp/init.cpp",
  "src/interfaces/capnp/ipc.cpp",
  "src/interfaces/capnp/proxy-codegen.cpp",
  "src/interfaces/capnp/proxy-impl.h",
  "src/interfaces/capnp/proxy.cpp",
  "src/interfaces/capnp/test/foo.cpp",
  "src/interfaces/capnp/util.h",
  "src/interfaces/init.h",
  "src/interfaces/node.cpp",
  "src/ipc/capnp/common-types.h",
  "src/ipc/capnp/handler.capnp",
  "src/ipc/client.cpp",
  "src/ipc/messages.capnp",
  "src/ipc/server.cpp",
  "src/net_processing.h",
  "src/netaddress.h",
  "src/qt/bitcoin.cpp",
  "src/qt/walletmodel.cpp",
  "src/rpc/rawtransaction.cpp",
  "src/wallet/wallet.cpp",
  "test/functional/feature_block.py"
 ],
 "body": "**This is based on # + #29409.** The non-base commits are:\n\n- [`c0ae4dfa004` test: Increase feature_block.py and feature_taproot.py timeouts](https://github.com/bitcoin/bitcoin/pull/10102/commits/c0ae4dfa0048cc576ec4b112dd0275e2683f52d7)\n- [`f274686c60e` test: Fix multiprocess test for unclean shutdown on kill](https://github.com/bitcoin/bitcoin/pull/10102/commits/f274686c60e783be469823bcaf32acee221def7b)\n- [`32937a817c0` util: Add util::Result workaround to be compatible with libmultiprocess](https://github.com/bitcoin/bitcoin/pull/10102/commits/32937a817c00b419b965adc173d85fe48cfa109c)\n- [`12ae360d84d` test: characterize btcsignals callback destruction timing](https://github.com/bitcoin/bitcoin/pull/10102/commits/12ae360d84d8fe4adadd51e7f6a6a89d7183ed7e)\n- [`d5c694aeb15` btcsignals: destroy callbacks eagerly on disconnect](https://github.com/bitcoin/bitcoin/pull/10102/commits/d5c694aeb15b8d02d594239fe0bf0db21bea5015)\n- [`66821528e4e` btcsignals: fall back to atomic_load/store without __cpp_lib_atomic_shared_ptr](https://github.com/bitcoin/bitcoin/pull/10102/commits/66821528e4ec431d38451c4c2dcdda2c19779d51)\n- [`8fc97929d96` multiprocess: Add capnp serialization code for bitcoin types](https://github.com/bitcoin/bitcoin/pull/10102/commits/8fc97929d966468e77c8a57e5fc286375d1b5f66)\n- [`897a9c3b3e3` interfaces, refactor: Change WalletLoader::restoreWallet parameter order](https://github.com/bitcoin/bitcoin/pull/10102/commits/897a9c3b3e3c3a170b14c1a7863915037a019424)\n- [`d5bfd35ca8e` multiprocess: Add capnp wrapper for Wallet interface](https://github.com/bitcoin/bitcoin/pull/10102/commits/d5bfd35ca8e24ffd3b8fd0c939e6d65754676453)\n- [`99442afacb2` multiprocess: Add capnp wrapper for Node interface](https://github.com/bitcoin/bitcoin/pull/10102/commits/99442afacb28a2f580a3bfd67fd4fae6b4a20841)\n- [`8eb998f88ff` multiprocess: Make bitcoin-gui spawn a bitcoin-node process](https://github.com/bitcoin/bitcoin/pull/10102/commits/8eb998f88fffd66a2aaec8492d49743b7d8fbb88)\n- [`48ca9f18b12` multiprocess: Make bitcoin-node spawn a bitcoin-wallet process](https://github.com/bitcoin/bitcoin/pull/10102/commits/48ca9f18b126b6609bcaf35617fcccaa98313540)\n- [`8f40dedc6d6` multiprocess: Add debug.log .wallet/.gui suffixes](https://github.com/bitcoin/bitcoin/pull/10102/commits/8f40dedc6d6473ef74aa1a4eafa0a5f25c5f1e42)\n- [`c941fc462b5` doc: Multiprocess misc doc and comment updates](https://github.com/bitcoin/bitcoin/pull/10102/commits/c941fc462b51d1dfbadb87217d4951dfa909f93e)\n- [`13e14ac9955` combine_logs: Handle multiprocess wallet log files](https://github.com/bitcoin/bitcoin/pull/10102/commits/13e14ac99559c61b7ebe305f579a86ab222ab0db)\n\n---\n\nThis PR adds an `--enable-multiprocess` configure option which builds new `bitcoin-node`, `bitcoin-wallet`, and `bitcoin-gui` executables with relevant functionality isolated into different processes. See [doc/design/multiprocess.md](https://github.com/ryanofsky/bitcoin/tree/pr/ipc/doc/design/multiprocess.md) for usage details and future plans.\n\nThe change is implemented by adding a new [`Init`](https://github.com/ryanofsky/bitcoin/blob/pr/ipc/src/interfaces/init.h) interface that spawns new wallet and node subprocesses that can be controlled over a [socketpair](http://man7.org/linux/man-pages/man2/socketpair.2.html) by calling [`Node`](https://github.com/ryanofsky/bitcoin/blob/pr/ipc/src/interfaces/node.h), [`Wallet`](https://github.com/ryanofsky/bitcoin/blob/pr/ipc/src/interfaces/wallet.h), and [`ChainClient`](https://github.com/ryanofsky/bitcoin/blob/pr/ipc/src/interfaces/chain.h) methods. When running with split processes, you can see the IPC messages going back and forth in `-debug=1` output. Followup PR's #19460 and #19461 add `-ipcbind` and `-ipcconnect` options that allow more flexibility in how processes are connected.\n\nThe IPC protocol used is Cap'n Proto, but this could be swapped out for another protocol. Cap'n Proto types and libraries are only accessed in the [src/ipc/capnp/](https://github.com/ryanofsky/bitcoin/tree/pr/ipc/src/ipc/capnp) directory, and not in any public headers or other parts of bitcoin code.\n\nSlides from a presentation describing this change are available on [google drive](https://docs.google.com/presentation/d/1AeJ-7gD-dItUgs5yH-HoEzLvXaEWe_2ZiGUUxYIXcws/edit). Demo code used in the presentation was from an older version this PR (tag [ipc.21](https://github.com/ryanofsky/bitcoin/releases/tag/pr%2Fipc.21), [commits](https://github.com/ryanofsky/bitcoin/compare/master...pr/ipc.21)).\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": "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": "7b997424a951e7421a8d44d8f9ba3733eeff9ec6",
   "date": "2026-09-08T08:13:51Z",
   "message": "Add capnp wrapper for Chain interface"
  },
  {
   "sha": "567c2e020fd0bb115166bde963861b7bbbda5739",
   "date": "2026-09-08T08:13:51Z",
   "message": "Merge commit '4c842beaae2e97d7934800c8433da9632b21c0ff' into pr/subtree-14"
  },
  {
   "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": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
   "date": "2026-09-08T08:13:51Z",
   "message": "combine_logs: Handle multiprocess wallet log files"
  }
 ],
 "timeline": [
  {
   "t": "2017-03-28T07:38:14Z",
   "kind": "comment",
   "who": "jonasschnelli",
   "assoc": "CONTRIBUTOR",
   "text": "Oh. Nice.\nI expected much more code to achieve this.\n\nConceptually I think this goes into the right direction, though, I'm not sure if this could end up being only a temporary in-between step that may end up being replaced.\nBecause, it may be more effective to split the Qt/d part completely and let them communicate over the p2p protocol (SPV and eventually RPC). More effective because it would also allow to run Qt independent from a trusted full node (if not trusted, use mechanism like full block SPV, etc.).\n\nThough, I'm aware that capnp has an RPC layer. But this would introduce another API (RPC / ZMQ / REST and then capnp RPC).\n\nI'm not saying this is the wrong direction, but we should be careful about adding another API.\n\nThree questions:\n- Would the performance be impractical if we would try to use the existing RPC API?\n- Could the capnp approach (or lets say IPC approach) be designed as a (or the) new API (\"JSON RPC v2\" and replacement for ZMQ)?\n- Does capnp provide a basic form of authentication? Would that even be required?"
  },
  {
   "t": "2017-03-28T09:58:15Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nReason this is currently using capnp is not performance but convenience. Capnp provides a high level API that supports bidirectional, synchronous, and asynchronous calls out of the box and allows me to easily explore implementation choices in bitcoin-qt without having to worry about low level protocol details, write a lot of parameter packing/unpacking boilerplate, and implement things like long polling.\n\nCapnp could definitely be replaced by JSON-RPC, though, and I've gone out of my way to support this by not calling capnp functions or using capnp types or headers anywhere except the `ipc/server.cpp` and `ipc/client.cpp` files. No code outside of these two files has to change in order to move to a different protocol.\n\n[quoted text omitted]\nIt could, but I'm going out of my way right now specifically NOT to add yet another bitcoind public API that could add to the JSON-RPC/REST/ZMQ/-blocknotify/-walletnotify confusion. The IPC here doesn't happen over a TCP port or even a unix socket path but over an anonymous [socketpair](http://man7.org/linux/man-pages/man2/socketpair.2.html) using an inherited file descriptor. (I haven't done a windows implementation yet but [similar things](https://msdn.microsoft.com/en-us/library/ms683463(v=VS.85).aspx) are possible there).\n\nI'm trying to make the change completely internal for now and transparent to users. Bitcoin-qt should still be invoked the same way and behave the same way as before, starting its own node and wallet. It just will happen to do this internally now by forking a bitcoind executable rather than calling in-process functions.\n\nThis change will not add any new command line or GUI options allowing bitcoin-qt to connect to bitcoinds other than the one it spawns internally. Adding these features and supporting new public APIs might be things we want to do in the future, but they would involve downsides and complications that I'm trying to avoid here.\n\n[quoted text omitted]\nIt's not required here because this change doesn't expose any new socket or endpoint, but it could be supported. Capnp's security model is based on [capabilities](https://capnproto.org/rpc.html#security), so to add authentication, you would just define a factory function that takes credentials as parameters and returns a reference to an object exposing the appropriate functionality."
  },
  {
   "t": "2017-03-28T17:23:18Z",
   "kind": "comment",
   "who": "gmaxwell",
   "assoc": "CONTRIBUTOR",
   "text": "I'm really uncomfortable with using capn proto, but fine enough for some example testing stuff!\n\nI'm a fan of this general approach (ignoring the use of capn proto) and I think we should have done something like it a long time ago."
  },
  {
   "t": "2017-03-28T22:39:49Z",
   "kind": "comment",
   "who": "dcousens",
   "assoc": "CONTRIBUTOR",
   "text": "strong concept ACK, but if is feasible, would prefer usage of the existing RPC instead of capn'proto"
  },
  {
   "t": "2017-03-29T06:53:25Z",
   "kind": "comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "text": "Concept ACK, nice.\n\n[quoted text omitted]\nPlease, let's not turn this into a discussion of serialization and RPC frameworks. To be honest that's been one of the things that's putting me off of doing work like this. If you want to suggest what framework to use, please make a thorough investigation of what method would be best to use for our specific use case, and propose that, but let's not start throwing random \"I'm not comfortable with X\" comments.\n\nWe already use google protocol buffers in the GUI for payment requests to in a way that would be the straightforward choice. I'm also happy you didn't choose some XML-based abomonation or ASN.1. But anyhow, not here. For this pull it's fine to use whatever RPC mechanism you're comfortable with.\n\n[quoted text omitted]\nI'm also perfectly fine with keeping the scope here to \"communication between GUI and bitcoind\". This is not the place for introducing another external interface. Might be an option at some point in the future, but for now process isolation is enough motivation."
  },
  {
   "t": "2017-03-29T08:29:01Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/qt/walletmodel.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Yep I guess most of these calls should be turned into async calls and not wait on a response synchronously blocking the GUI. Not necessarily in the first iteration of this, of course."
  },
  {
   "t": "2017-03-29T08:31:06Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/ipc/messages.capnp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Pretty nice. So the IPC endpoint exposes multiple \"objects\". It can also expose multiple instances of one class? (e.g. for multiwallet?)."
  },
  {
   "t": "2017-03-29T08:37:27Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/ipc/client.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Should it pass through parameters? Most of the parameters to `bitcoin-qt` will actually be for the daemon. Or will you provide parameters in a later stage through IPC?"
  },
  {
   "t": "2017-03-29T08:52:59Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/qt/bitcoin.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "The thread group is completely remote in the case of IPC, isn't it? I guess this entire function should be done differently when IPC is used. E.g. send a `shutdown` command to the core, then have the `shutdownResult` event come from remote as response when done."
  },
  {
   "t": "2017-03-29T08:56:29Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/qt/bitcoin.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "How would you handle `uiInterface` in this model, e.g. signals from the server to the client?"
  },
  {
   "t": "2017-03-29T09:35:21Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/ipc/client.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108620012,
   "text": "[quoted text omitted]\n\nThe change I'm working on now (not yet pushed) provides the parameters over IPC. It adds an `ipc::Node::parseParameters` method in `client.h` which calls `ParseParameters()` in bitcoind.\n\n```diff\n+    //! Set command line arguments.\n+    void parseParameters(int argc, const char* const argv[]) const;\n+\n     //! Get help message string.\n     std::string helpMessage(HelpMessageMode mode) const;\n\n+    //! Start node.\n+    bool appInit() const;\n+\n+    //! Stop node.\n+    void appShutdown() const;\n+\n+    //! Return whether shutdown was requested.\n+    bool shutdownRequested() const;\n```\n\n`ParseParameters()` is also called on the `bitcoin-qt` side in current change. This gets the job done, but could be improved later, since really the `bitcoind` global variables set by `ParseParameters()` should not even be linked into `bitcoin-qt`."
  },
  {
   "t": "2017-03-29T09:59:11Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/ipc/messages.capnp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108618794,
   "text": "[quoted text omitted]\n\nYes, the `ipc::Node::wallet()` method right now returns an `ipc::Wallet` interface wrapping pwalletMain, but it could support multiwallet by just adding an argument that indicates a different wallet object to return."
  },
  {
   "t": "2017-03-29T10:02:14Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/qt/bitcoin.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108623210,
   "text": "[quoted text omitted]\n\nYes the change I'm working on now adds `threadGroup` and `scheduler` members to `NodeServer` in `ipc/server.cpp`, removing the current instances in `BitcoinCore`."
  },
  {
   "t": "2017-03-29T10:16:22Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/qt/bitcoin.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108623907,
   "text": "[quoted text omitted]\n\nThis line needs to change to `ipcNode.handleInitMessage(InitMessage)`. If you look at the `ipc::Node::handleInitMessage` implementation, it takes a std::function argument, creates a capnp `InitMessageCallback::Server` object that can invoke it, and sends a reference to that object over the IPC channel to `bitcoind`. `bitcoind` then calls `uiInterface.InitMessage.connect` with a handler that sends messages with the `InitMessageCallback` object."
  },
  {
   "t": "2017-03-29T10:35:58Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/qt/walletmodel.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108618386,
   "text": "[quoted text omitted]\n\nAnother alternative in some of these cases is to consolidate many low level calls into fewer calls of a higher level interface."
  },
  {
   "t": "2017-03-29T10:58:28Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/qt/walletmodel.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108618386,
   "text": "I think that's not optional but a required element of making this asynchronous, otherwise there'd be a lot of roundtrips.\n\nEdit: Though ofcourse one of the things cap'n'proto advertises with is that there is 'zero roundtrip overhead', because of the promise pipelining, but we don't want to depend too strongly on that."
  },
  {
   "t": "2017-03-29T11:00:13Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/ipc/messages.capnp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108618794,
   "text": "Cool. I like this auto-generated IPC stuff. Saves writing a lot of boilerplate."
  },
  {
   "t": "2017-03-29T11:04:37Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/qt/bitcoin.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108623907,
   "text": "So the server then effectively calls an object on the client when the notification happens? No polling/waiting involved? That's great."
  },
  {
   "t": "2017-03-29T11:12:56Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/qt/walletmodel.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "This locking (either of cs_main or wallet->cs_wallet) makes no sense when a remote core is used."
  },
  {
   "t": "2017-03-29T13:06:38Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/qt/bitcoin.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108623907,
   "text": "[quoted text omitted]\n\nYes, though to be clear, there is still polling/waiting happening under the hood. It just gets handled by the capnp event loop, which waits for incoming IPC messages and dispatches to `InitMessageCallback::Server::call` and other server methods. The change I'm working on now (not yet pushed) spawns a new thread in ipc/client.cpp to run the event loop."
  },
  {
   "t": "2017-03-29T13:08:25Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/ipc/server.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "FYI this is quite similar to how fd handles are passed in for the P2P and RPC port in my cloudabi port: https://github.com/laanwj/bitcoin/blob/2017_03_cabi_fs/src/httpserver.cpp#L357 https://github.com/laanwj/bitcoin/blob/2017_03_cabi_fs/src/init.cpp#L1356\n\nIt's a bit of a shame that argument parsing doesn't work here yet so this needs to use manual parsing using C functions :/"
  },
  {
   "t": "2017-03-29T13:09:53Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/qt/walletmodel.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108649962,
   "text": "[quoted text omitted]\n\nYeah, the point of the FIXME_IMPLEMENT_IPC macro is really just to segfault and indicate places in the code which need to be updated to support IPC. Many of them are pretty nonsensical."
  },
  {
   "t": "2017-03-29T13:13:13Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/ipc/server.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108670537,
   "text": "[quoted text omitted]\n\nI think I could change this to at least use GetArg like you are doing in your cloudabi code."
  },
  {
   "t": "2017-03-31T04:19:04Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/ipc/client.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108620012,
   "text": "Right, ideally bitcoin-qt would need only a very small subset of the bitcoind code."
  },
  {
   "t": "2017-03-31T04:23:28Z",
   "kind": "review_comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "path": "src/qt/bitcoin.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108623907,
   "text": "Yes, I understand that, but one of the problems with existing proposals for using RPC to communicate to the server had no way to handle asynchonous notifications, so needed to e.g. poll for new transactions every few seconds. This protocol clearly does support true bidirectional communication.\n\nAs for the capnp event loop, as most of the responses and notifications from the server involve updating the UI, couldn't we integrate that into Qt's event loop? Conceptually that'd be easier. Qt only allows GUI updates from a single thread, so if the capnp event loop is separete, everything will have to be separately ferried through Qt's signal mechanism to get to the GUI thread."
  },
  {
   "t": "2017-04-06T23:34:25Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/qt/bitcoin.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 108623907,
   "text": "[quoted text omitted]\n\nIt should be possible to integrate the qt and capnp event loops (http://stackoverflow.com/questions/33131595/what-is-a-good-way-to-integrate-3rd-party-asynchronous-apis-with-capn-proto-rpc), but for now `StartClient` is just spawning an event loop thread, since this seems like the path of least resistance."
  },
  {
   "t": "2017-04-06T23:36:49Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "0ca73bc13c3457cd5c3244abfa9fa586d9137117"
  },
  {
   "t": "2017-04-06T23:55:49Z",
   "kind": "review",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "bf5f8ed6f0124d65af0198b473cb25513fe84325",
   "text": "Updated and rebased bf5f8ed6f0124d65af0198b473cb25513fe84325 -> 0ca73bc13c3457cd5c3244abfa9fa586d9137117 ([pr/ipc.0](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.0) -> [pr/ipc.1](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.1))\n\nThere's a lot of new changes here. More functions and callbacks have been wrapped, and there's now support for asynchronous calls that don't block event threads in the client and server.\n\nAt this point it would be very helpful to have code review for the main commit (0ca73bc13c3457cd5c3244abfa9fa586d9137117 \"Add barebones IPC framework to bitcoin-qt and bitcoind\"), because all the real infrastructure is now in place, and the main thing left to do is wrap up more functions and callbacks in IPC calls so the GUI can be functional."
  },
  {
   "t": "2017-04-07T20:37:18Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "1ea8987cc97e578af0179111988a0163c687bec5"
  },
  {
   "t": "2017-04-07T20:51:14Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Updated and rebased 0ca73bc13c3457cd5c3244abfa9fa586d9137117 -> 5e28c2fcc2757479d29ca83cd3256584ab908e48 ([pr/ipc.1](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.1) -> [pr/ipc.3](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.3)) to avoid a conflict. Main addition is an expanded [src/ipc/README.md](https://github.com/ryanofsky/bitcoin/tree/pr/ipc/src/ipc/README.md) file.\n\nAgain it would be very helpful to have some code review for the main commit (5e28c2fcc2757479d29ca83cd3256584ab908e48 \"Add barebones IPC framework to bitcoin-qt and bitcoind\"). Giving feedback on the README file would be an easy place to start."
  },
  {
   "t": "2017-04-10T08:57:19Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "5e28c2fcc2757479d29ca83cd3256584ab908e48"
  },
  {
   "t": "2017-04-10T22:00:59Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "dda375662d060ce42b5113247301e0289584e14d"
  },
  {
   "t": "2017-04-10T22:25:37Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Updated 5e28c2fcc2757479d29ca83cd3256584ab908e48 -> dda375662d060ce42b5113247301e0289584e14d ([pr/ipc.3](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.3) -> [pr/ipc.4](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.4))\n\nThis implements two suggestions from @JeremyRubin:\n\n* It includes a small commit demonstrating what it looks like to add a single new method to the API:\n[`dda3756 Add ipc::Node::getNodeCount method`](https://github.com/bitcoin/bitcoin/commit/dda375662d060ce42b5113247301e0289584e14d). This should help give a clearer picture of the layers involved in implementing an IPC call.\n\n* Instead of adding Cap'n Proto code and modifying Qt code in a single commit, it includes a new early commit ([`1407a2b Add ipc::Node and ipc::Wallet interfaces`](https://github.com/bitcoin/bitcoin/commit/1407a2bb0b0a3ab21ae374b58980bb0dc53b12c5) that introduces new [`src/ipc/interfaces.h`](https://github.com/ryanofsky/bitcoin/blob/pr/ipc/src/ipc/interfaces.h)  and [`src/ipc/interfaces.cpp`](https://github.com/ryanofsky/bitcoin/blob/pr/ipc/src/ipc/interfaces.cpp) files and ports Qt code to use them without any Cap'n Proto stuff. This shows the separation between Qt updates and IPC implementation details better and makes it easier to see how a different IPC system could be substituted in for Cap'n Proto. This commit could even be made into a separate PR."
  },
  {
   "t": "2017-04-14T05:44:28Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "@laanwj pointed out in IRC (https://botbot.me/freenode/bitcoin-core-dev/msg/83983170/) that this change could help make the GUI more responsive by preventing Qt event processing from getting blocked, which currently happens in the monolithic `bitcoin-qt` when the main GUI thread makes a call to a slow libbitcoin function, or waits a long time for a `cs_main` or `cs_wallet` lock.\n\nAt the time in IRC, I didn't think this change could directly help gui responsiveness, because although it does move libbitcoin and LOCK calls out of the `bitcoin-qt` process and into the `bitcoind` process, it just replaces these calls with blocking IPCs that make the GUI equally unresponsive when they tie up the main GUI thread.\n\nHowever, this doesn't have to be the case. The place where IPC calls currently block waiting for responses is the `return promise.get_future().get();` line in `ipc::util::Call::send` method here: https://github.com/ryanofsky/bitcoin/blob/pr/ipc.4/src/ipc/util.h#L166\n\nBut the `std::promise` object used in that line could easily be replaced with a Qt-aware promise object that processes GUI events while the promise is blocked. (The Qt-aware promise implementation would check if it is being used on the main GUI thread, and if so use a [local Qt event loop](https://doc.qt.io/archives/qq/qq27-responsive-guis.html#waitinginalocaleventloop) substituting\n`loop.exec()` for `std::future::get()` and `loop.quit()` for `std::promise::set_value()`.)\n\nThis would add more overhead and make the average IPC call a little slower. But it would avoid situations where an unexpectedly slow IPC call ties up the whole gui, so it might be worth doing anyway."
  },
  {
   "t": "2017-04-14T08:00:38Z",
   "kind": "comment",
   "who": "laanwj",
   "assoc": "MEMBER",
   "text": "@ryanofsky Yes, integrating the IPC event loop and Qt event loop would help responsiveness.\nThough I remember there were some issues in some cases with recursively calling into the Qt event loop (e.g. things need to be reentrant, deleteLater stuff runs earlier than expected, to keep in mind)."
  },
  {
   "t": "2017-04-17T12:23:13Z",
   "kind": "comment",
   "who": "sipa",
   "assoc": "MEMBER",
   "text": "@ryanofsky I'm not familiar with Qt or capnproto, but I don't understand what the move to a different process has to do with making things less blocking. Any changes in architecture that would result in less blocks should equally be possible within the same process."
  },
  {
   "t": "2017-04-17T12:29:23Z",
   "kind": "comment",
   "who": "sipa",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nI don't understand the goal here. On itself, there seems little benefit in separating the GUI and the rest into separate processes if those two processes still depend on each other (this is different from separating the wallet from the node, for example, as there as security considerations there... but for that use case the easiest approach seems to just have a lightweight mode and running two instances).\n\nI think it would be awesome if bitcoin-qt could be started and stopped independently to control a bitcoind process in the background, but if that's not the intent, what is the purpose?"
  },
  {
   "t": "2017-04-17T14:15:47Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nLet's say there are 50 places where bitcoin-qt calls a libbitcoin function. That means there are 50 places to update if you want bitcoin-qt handle to events while the function calls are executing. WIth the IPC framework, there is only one place you have to update instead of 50 places (if you want to do this).\n\n[quoted text omitted]\nOk, so you think the benefits are small, and I think they are more significant.\n\n[quoted text omitted]\nThis is trivial once bitcoin-qt is controlling bitcoind across a socket. I'm just implementing the socket part first, without introducing new UI features for now."
  },
  {
   "t": "2017-04-17T18:48:29Z",
   "kind": "comment",
   "who": "sipa",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nOk, that's what I was missing. It wasn't clear to me that this was a just first step towards a more useful separation."
  },
  {
   "t": "2017-04-20T19:25:24Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "ab0afba3a44255b3eec80f4eebe45a851ae23927"
  },
  {
   "t": "2017-04-20T21:33:23Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8d92ff563485d5691e3c737aca36c92e056fe4cf"
  },
  {
   "t": "2017-04-27T17:46:01Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8f78f085976bcb0f9093f0b1b4c3c65110ec44aa"
  },
  {
   "t": "2017-04-27T18:01:04Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "As of 8f78f085976bcb0f9093f0b1b4c3c65110ec44aa ([pr/ipc.7](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.7)), this change is much more complete & functional. You can also now monitor the IPC traffic going back and forth between `bitcoin-qt` and `bitcoind` by setting the `IPC_DEBUG` environment variable (`export IPC_DEBUG=1`)"
  },
  {
   "t": "2017-04-27T20:57:40Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8a603edfe87297c14fd63ae72ea71fc6e726a7bd"
  },
  {
   "t": "2017-04-28T21:42:08Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "6c3b3f16efd78d2bade738a63d6a71ebe81ab5b9"
  },
  {
   "t": "2017-04-28T21:50:11Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "f2aaaab884f71501530b558e2bf8ad432d8778d0"
  },
  {
   "t": "2017-05-09T20:01:39Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "1ab31a93bc917753bb4dd6e8cc0ed001ed1631bf"
  },
  {
   "t": "2017-05-17T15:36:28Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "1fb346a91523fb1cdef4dd2e1a60b56aa1352a4a"
  },
  {
   "t": "2017-05-23T19:30:47Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "7fd0adcb81dca2491f7d3b5c5e29f40c2025c500"
  },
  {
   "t": "2017-05-24T16:59:02Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "b9aa7a6cb3913b7851df25c87a076609c8123d13"
  },
  {
   "t": "2017-05-25T20:05:24Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "499a057e4b2bfde160ca6914cf851405b4f25fb1"
  },
  {
   "t": "2017-06-02T14:26:08Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "00f1d1fc757c08954055f54b4621946353620df0"
  },
  {
   "t": "2017-06-02T14:48:13Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "068d8c8a247662ea051a011c4b50c409292e6d56"
  },
  {
   "t": "2017-06-19T19:10:11Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "86c435e1c9a2f58377091428dfdcf0e7c21e1f54"
  },
  {
   "t": "2017-08-25T19:07:38Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "cdb2130059dd57f932bbe4f29cda98e5bb94bdf6"
  },
  {
   "t": "2017-08-25T22:44:40Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "c4e2c92f790b7e86c3f7095ef37c79f77b44cc6f"
  },
  {
   "t": "2017-09-21T19:12:13Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "c41f41062f61fc3f26044f7762ca2daa1bee93af"
  },
  {
   "t": "2018-02-14T12:35:33Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "e2210f84d1faeb974e17402a343de6ac1559710c"
  },
  {
   "t": "2018-02-14T12:48:50Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "52a2a07e3e7d773b26654a2577dbc66391b2cbcf"
  },
  {
   "t": "2018-02-14T19:38:23Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8e93c844ef8adeab6fb8a5c8cc8f8113b4817140"
  },
  {
   "t": "2018-02-23T17:45:38Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "2b44eed183583750ee9500726f12d94ebe6a70aa"
  },
  {
   "t": "2018-02-26T14:16:16Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "f94aa8a9c593a51d95479bcdad8f779c75c09fd2"
  },
  {
   "t": "2018-03-02T19:01:33Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "67cd87e6c2c70f89648c542afb75af21f7b47fee"
  },
  {
   "t": "2018-03-07T14:10:49Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "2a3338c7f28ce244b01af96c2a2f20d50d16abb0"
  },
  {
   "t": "2018-03-07T20:32:05Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "fe450d4121aab5a6db42d1633f76de58c0b82c88"
  },
  {
   "t": "2018-03-12T18:47:45Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "a7019d7b5277c9a86231ec7c383d40a2bd2eff45"
  },
  {
   "t": "2018-03-14T14:47:50Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "6ad74d823ff3d34082344fa0ff8c8d5c67ca3d60"
  },
  {
   "t": "2018-03-23T21:54:46Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "a44cc9e5ee4d57390b2777e304ae7582cfa6bfb7"
  },
  {
   "t": "2018-04-06T18:30:21Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "0cdf7d9b3e8b93ae64f2970be58bc127580f16af"
  },
  {
   "t": "2018-04-07T17:06:21Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "7b5230d4a801581140e499a21deb01b6d32f9891"
  },
  {
   "t": "2018-04-09T14:50:14Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "91718344750146df8871aea472fe3a504d222736"
  },
  {
   "t": "2018-04-10T10:39:15Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "bce089842f951858ca56a5a656d66e60d303dc6f"
  },
  {
   "t": "2018-04-10T13:02:06Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d820a2313fe9a4600e7a6d77c4ec06d44a96e4fe"
  },
  {
   "t": "2018-04-11T15:34:51Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "31d2b21e4c4baa825c40baa2c08cae8262d5d9aa"
  },
  {
   "t": "2018-04-17T14:45:36Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "922b9f6afabd67b267505a48a9a3f06fc220bd07"
  },
  {
   "t": "2018-04-17T19:26:13Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "6ef023a8c0486d4c9d843b119c43cab475188261"
  },
  {
   "t": "2018-07-18T17:38:04Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "c43b2c2754066ca3c6553d48fbd81a43b9272b3b"
  },
  {
   "t": "2018-08-03T19:31:54Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "9d17bab1d8e3947d3b60e123c0e4d93e8f288d51"
  },
  {
   "t": "2018-08-07T21:06:50Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "b916d5226d9bbf2b0e5d5b15e4ea6186d9d36591"
  },
  {
   "t": "2018-08-07T21:17:15Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "7250ba9adbfc18d81c68f4d9a36da84c1a97b78a"
  },
  {
   "t": "2018-08-08T18:44:00Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "b81a2b01713c4267c3684dcc07bea332abb05d3f"
  },
  {
   "t": "2018-08-09T18:38:51Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "006286e7310353fbfd143f69e9a319b24bd49e75"
  },
  {
   "t": "2018-08-11T12:05:19Z",
   "kind": "review_comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "path": "doc/build-unix.md",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "For MacOS it's `brew install capnp`"
  },
  {
   "t": "2018-08-11T13:10:51Z",
   "kind": "review",
   "who": "Sjors",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "006286e7310353fbfd143f69e9a319b24bd49e75",
   "text": "Concept ACK, ultimately being able to leave bitcoin-node running while starting the GUI on demand, while not having to wait for sync, would be quite nice. We could even have it run in bandwidth conserving mode if the GUI isn't on, but that's all for future PRs.\n\nI got a bunch of warnings and eventually an error on macOS 10.13.6 with QT 5.11.1:  https://gist.github.com/Sjors/c66198496a79fc5fc8bc280f510cf082\n\nShould `capnp` be added to depends (in a future PR) as well?"
  },
  {
   "t": "2018-08-14T14:43:39Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "85b23296891032875cbda7a3c70c3422ce04da15"
  },
  {
   "t": "2018-08-21T19:21:27Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "84af92e496f00608dff749e7b1372964cb20df42"
  },
  {
   "t": "2018-08-21T19:33:34Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Updated 85b23296891032875cbda7a3c70c3422ce04da15 -> 84af92e496f00608dff749e7b1372964cb20df42 ([pr/ipc.46](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.46) -> [pr/ipc.47](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.47)) with various cleanups and fixes for macos.\nUpdated 84af92e496f00608dff749e7b1372964cb20df42 -> ca294aa8c036bf62d808450a4555a0806ff7227b ([pr/ipc.47](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.47) -> [pr/ipc.48](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.48)) with fixes for appveyor / msvc.\n\nThanks for trying this out Sjors. The compiler errors & warnings you encountered should be fixed now, and I did some light ui testing on macos with `src/bitcoin-gui -regtest -printtoconsole -debug`"
  },
  {
   "t": "2018-08-22T22:30:07Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "ca294aa8c036bf62d808450a4555a0806ff7227b"
  },
  {
   "t": "2018-08-23T21:53:26Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "dd9e4f6909a6aca0cf4b7c16a277b5099b2011cc"
  },
  {
   "t": "2018-08-26T10:26:32Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "Compile errors are gone now.\n\nThe `multiprocess=yes/no` line in `./configure` only showed up for me after running `./autogen.sh` again. This was without using the `--enable-multiprocess` argument.\n\nThe documentation suggests multiprocess isn't on by default, but it is:\n\n```\n./configure --disable-bench --disable-zmq --with-miniupnpc=no --with-incompatible-bdb --with-qrencode\n....\nOptions used to compile and link:\n  multiprocess  = yes\n```\n\nI do still see a few warnings that appear related to this change:\n\n```\ninterfaces/capnp/util.cpp:15:90: warning: 'syscall' is deprecated: first deprecated in macOS 10.12 - syscall(2) is unsupported; please switch to a supported interface. For SYS_kdebug_trace use kdebug_signpost(). [-Wdeprecated-declarations]\n    return strprintf(\"%s-%i/%s-%i\", exe_name ? exe_name : \"\", getpid(), thread_name, int(syscall(SYS_gettid)));\n                                                                                         ^\n/usr/include/unistd.h:745:6: note: 'syscall' has been explicitly marked deprecated here\nint      syscall(int, ...);\n         ^\n1 warning generated.\n```\n\nShould the test suite use these new binaries? In order to prevent the functional suite from taking forever to run, perhaps half of the default test suite nodes could use `bitcoind` and the other half `bitcoin-node`?\n\nThe `bitcoin-gui` executable is ignoring `testnet=1` in `bitcoin.conf`. `bitcoin-node` does honor it. When launched with `-testnet` it  correctly sees global options in `bitcoin.conf`., but it missed or incorrectly parses  options for `[test]`. E.g. if I set `dbcache=1000` under `[test]` the GUI shows this:\n\nShould the log file specify which process is generating each entry? Or should each process have its own log file, where the master process just logs \"started/stopped bitcoin-node process PID=....\"?\n\nI did some light GUI testing as well. Sending and receiving works. Using the console I'm getting the following error:\n\n`getblockchaininfo` and even `getbalance` do work, so that's weird.\n\n`createwallet \"test\"` froze the app for me, and didn't create a file. When force quitting QT, it seems bitcoin-node keeps running. But then `bitcoin-cli help` just hangs. `bitcoin-cli stop` responds with `Bitcoin server stopping` but nothing happens in the log file and the process doesn't go away; I had to resort to `kill -9`."
  },
  {
   "t": "2018-08-27T14:50:29Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "@Sjors, this is great! Thanks so much for testing this.\n\n[quoted text omitted]\nSince `--enable-multiprocess` configure option only builds new executables and has no effect on existing ones, the default value is `auto` rather than `no`. This seems like the most convenient behavior, but I coudl change it or try to document it better.\n\n[quoted text omitted]\nI also saw the syscall warning and plan to fix it. It's not serious problem, but a side effect seems to be that bad thread numbers are shown in the debug log.\n\n[quoted text omitted]\nI'm planning on adding `--multiprocess` and `--gui` options to the python test framework to make it easier to switch between `bitcoin`, `bitcoin-qt`, `bitcoin-node`, and `bitcoin-gui` executables. All 4 of these should work, though some tests fail with `bitcoin-node` right now. I think default test mode should use `bitcoind` but travis should be configured to test other binaries, too.\n\n[quoted text omitted]\nInteresting, this is not expected. Will debug.\n\n[quoted text omitted]\nEach process has its own log file and I extended the `combine_logs.py` script to be able to merge them. The log files just have simple suffixes right now so are named `debug.log` `debug.log.wallet` and `debug.log.gui`. The followup change I'm working on to add `-ipconnect` and `-ipcbind` options will allow multiple wallet and gui processes, so these names will no longer be unique and I'll have to add pid suffixes as well.\n\nWriting to a common log file would be another option, but it would require some kind of locking and syncing, so I don't think the complexity would be worth it.\n\n[quoted text omitted]\nThanks! I'll look into the various problems you reported and make fixes."
  },
  {
   "t": "2018-08-28T11:00:37Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThat makes sense, we shouldn't force developers / users to compile the other binaries.\n\n[quoted text omitted]\nMultiple log files seems fine by me, though when logging to console they would ideally be combined."
  },
  {
   "t": "2018-08-29T19:12:20Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "5c345a6fdbebd7579795f3798b65704fd2441987"
  },
  {
   "t": "2018-08-30T20:02:34Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "6bd29a0fc805c223b4f000f999db15bf0b327881"
  },
  {
   "t": "2018-08-31T17:22:11Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "2e8bee7b4761a3e61e5266b51d6f7298e2b1bad3"
  },
  {
   "t": "2018-09-02T18:27:24Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/README.md",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Typo found by `codespell`: bookeeping"
  },
  {
   "t": "2018-09-02T18:28:32Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/init.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Typo found by `codespell`: destuction"
  },
  {
   "t": "2018-09-02T18:29:13Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/init.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Typo found by `codespell`: \u201cdont\u201d should be \u201cdon\u2019t\u201d or \u201cdo not\u201d :-)"
  },
  {
   "t": "2018-09-02T18:30:30Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/util.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Typo found by `codespell`: halfs should be halves :-)"
  },
  {
   "t": "2018-09-03T18:00:33Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/FIXME",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Typo found by `codespell`: paramters"
  },
  {
   "t": "2018-09-03T18:02:09Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy-impl.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Typo found by `codespell`: avaiable"
  },
  {
   "t": "2018-09-04T07:38:55Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/init.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Couldn't `loop_ptr` potentially be a dead pointer here?"
  },
  {
   "t": "2018-09-04T14:58:28Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/README.md",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 214549056,
   "text": "Fixed"
  },
  {
   "t": "2018-09-04T14:59:18Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/capnp/FIXME",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 214741787,
   "text": "Fixed"
  },
  {
   "t": "2018-09-04T15:00:16Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/capnp/init.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 214549080,
   "text": "Fixed"
  },
  {
   "t": "2018-09-04T15:00:25Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/capnp/init.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 214549093,
   "text": "Fixed"
  },
  {
   "t": "2018-09-04T15:18:54Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/capnp/util.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 214549127,
   "text": "Fixed"
  },
  {
   "t": "2018-09-04T15:20:11Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/capnp/init.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 214813508,
   "text": "[quoted text omitted]\n\nGood catch. It could happen if socket was immediately disconnected. Moved onDisconnect handler down to fix this."
  },
  {
   "t": "2018-09-04T16:19:15Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "b65d9eca6e1d365fc63542b6961cfe89188bb083"
  },
  {
   "t": "2018-09-04T16:21:41Z",
   "kind": "review",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "2e8bee7b4761a3e61e5266b51d6f7298e2b1bad3",
   "text": "[quoted text omitted]\n\nRpc help error is fixed now. It was caused by `signrawtransaction` throwing a wallet not found exception during the help request because no wallets are loaded in the node process.\n\n---\n\nRebased ca294aa8c036bf62d808450a4555a0806ff7227b -> dd9e4f6909a6aca0cf4b7c16a277b5099b2011cc ([pr/ipc.48](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.48) -> [pr/ipc.49](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.49))\nRebased dd9e4f6909a6aca0cf4b7c16a277b5099b2011cc -> 5c345a6fdbebd7579795f3798b65704fd2441987 ([pr/ipc.49](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.49) -> [pr/ipc.50](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.50))\nRebased 5c345a6fdbebd7579795f3798b65704fd2441987 -> 6bd29a0fc805c223b4f000f999db15bf0b327881 ([pr/ipc.50](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.50) -> [pr/ipc.51](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.51))\nRebased 6bd29a0fc805c223b4f000f999db15bf0b327881 -> 2e8bee7b4761a3e61e5266b51d6f7298e2b1bad3 ([pr/ipc.51](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.51) -> [pr/ipc.52](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.52))\nUpdated 2e8bee7b4761a3e61e5266b51d6f7298e2b1bad3 -> b65d9eca6e1d365fc63542b6961cfe89188bb083 ([pr/ipc.52](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.52) -> [pr/ipc.53](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.53)) with travis link fix, and fixes for practicalswift comments.\nUpdated b65d9eca6e1d365fc63542b6961cfe89188bb083 -> 8d3df50476fa2f96cf2910238e5a2b3f8380b6e1 ([pr/ipc.53](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.53) -> [pr/ipc.54](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.54)) to fix appveyor link error."
  },
  {
   "t": "2018-09-04T17:36:28Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8d3df50476fa2f96cf2910238e5a2b3f8380b6e1"
  },
  {
   "t": "2018-09-05T14:52:20Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "5ce9a948c8ec47762d0a23d1cf7f2ce57386052b"
  },
  {
   "t": "2018-09-05T14:53:39Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThis is fixed now. It was caused by a bad rebase of this PR, which neglected to call `SetupServerArgs` in the gui process after it was introduced in #13190.\n\nUpdated 8d3df50476fa2f96cf2910238e5a2b3f8380b6e1 -> 5ce9a948c8ec47762d0a23d1cf7f2ce57386052b ([pr/ipc.54](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.54) -> [pr/ipc.55](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.55)) to add missing `SetupServerArgs` call."
  },
  {
   "t": "2018-09-05T20:38:31Z",
   "kind": "review_comment",
   "who": "leishman",
   "assoc": "CONTRIBUTOR",
   "path": "src/wallet/wallet.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "`chainParams` unused?"
  },
  {
   "t": "2018-09-05T20:42:21Z",
   "kind": "review_comment",
   "who": "leishman",
   "assoc": "CONTRIBUTOR",
   "path": "src/rpc/rawtransaction.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "perhaps change `int` to `size_t` to prevent comparison of integers with different sign warning?"
  },
  {
   "t": "2018-09-05T20:57:04Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/wallet/wallet.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 215417703,
   "text": "[quoted text omitted]\n\nWill fix, but this is part of the base PR #10973 (cb0c6b42a096980152a467b98f3c1250f62d4e7e), so it would be better to comment on that PR."
  },
  {
   "t": "2018-09-05T20:58:49Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/rpc/rawtransaction.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 215418823,
   "text": "[quoted text omitted]\n\nWill fix, but this change is part of the base PR #10973 (249bf5006184f81d77d40ee0ede0924c628bf33e), so it would be better to comment on that PR."
  },
  {
   "t": "2018-09-05T21:01:23Z",
   "kind": "review_comment",
   "who": "leishman",
   "assoc": "CONTRIBUTOR",
   "path": "src/wallet/wallet.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 215417703,
   "text": "Ah sorry. Will leave any new comments there."
  },
  {
   "t": "2018-09-06T18:57:00Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThis is fixed in pr/ipc.56"
  },
  {
   "t": "2018-09-14T21:34:46Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "c1cbca095f1bf10ca4370bfe99b798a5d1e9f268"
  },
  {
   "t": "2018-09-21T07:30:05Z",
   "kind": "comment",
   "who": "fingera",
   "assoc": "CONTRIBUTOR",
   "text": "help\ngcc 7.3.0:\n```\n  CXX      interfaces/capnp/libbitcoin_util_a-messages.o\nIn file included from ../../src/interfaces/capnp/proxy.h:6:0,\n                 from ../../src/interfaces/capnp/messages.h:5,\n                 from ./interfaces/capnp/messages.capnp.proxy.h:6,\n                 from ../../src/interfaces/capnp/messages-impl.h:9,\n                 from ../../src/interfaces/capnp/messages.cpp:1:\n../../src/interfaces/capnp/proxy.h: In instantiation of \u2018struct interfaces::capnp::ListOutput<capnp::List<interfaces::capnp::messages::Pair<capnp::Text, capnp::List<capnp::Text> > > >\u2019:\n../../src/interfaces/capnp/proxy-impl.h:945:13:   required from \u2018void interfaces::capnp::BuildField(interfaces::capnp::TypeList<std::map<K, V, std::less<_Key>, std::allocator<std::pair<const _Key, _Tp> > > >, interfaces::capnp::Priority<1>, interfaces::capnp::InvokeContext&, Value&&, Output&&) [with KeyLocalType = std::__cxx11::basic_string<char>; ValueLocalType = std::vector<std::__cxx11::basic_string<char> >; Value = const std::map<std::__cxx11::basic_string<char>, std::vector<std::__cxx11::basic_string<char> > >&; Output = interfaces::capnp::StructField<interfaces::capnp::Accessor<interfaces::capnp::FieldOverrideArgs, 19>, interfaces::capnp::messages::GlobalArgs::Builder>&]\u2019\n../../src/interfaces/capnp/proxy-impl.h:1060:15:   required from \u2018void interfaces::capnp::BuildField(interfaces::capnp::TypeList<const LocalType>, interfaces::capnp::Priority<0>, interfaces::capnp::InvokeContext&, Value&&, Output&&) [with LocalType = std::map<std::__cxx11::basic_string<char>, std::vector<std::__cxx11::basic_string<char> > >; Value = const std::map<std::__cxx11::basic_string<char>, std::vector<std::__cxx11::basic_string<char> > >&; Output = interfaces::capnp::StructField<interfaces::capnp::Accessor<interfaces::capnp::FieldOverrideArgs, 19>, interfaces::capnp::messages::GlobalArgs::Builder>&]\u2019\n../../src/interfaces/capnp/proxy-impl.h:1071:15:   required from \u2018void interfaces::capnp::BuildField(interfaces::capnp::TypeList<LocalType&>, interfaces::capnp::Priority<0>, interfaces::capnp::InvokeContext&, Value&&, Output&&, void*) [with LocalType = const std::map<std::__cxx11::basic_string<char>, std::vector<std::__cxx11::basic_string<char> > >; Value = const std::map<std::__cxx11::basic_string<char>, std::vector<std::__cxx11::basic_string<char> > >&; Output = interfaces::capnp::StructField<interfaces::capnp::Accessor<interfaces::capnp::FieldOverrideArgs, 19>, interfaces::capnp::messages::GlobalArgs::Builder>&]\u2019\n../../src/interfaces/capnp/proxy-impl.h:1098:15:   required from \u2018void interfaces::capnp::BuildOne(interfaces::capnp::TypeList<ValueLocalType>, interfaces::capnp::InvokeContext&, Value&&, Output&&, typename std::enable_if<(index < interfaces::capnp::ProxyType<LocalType>::fields)>::type*) [with long unsigned int index = 0; LocalType = interfaces::capnp::GlobalArgs; Value = const interfaces::capnp::GlobalArgs&; Output = interfaces::capnp::messages::GlobalArgs::Builder&; typename std::enable_if<(index < interfaces::capnp::ProxyType<LocalType>::fields)>::type = void]\u2019\n../../src/interfaces/capnp/proxy-impl.h:1119:16:   required from \u2018void interfaces::capnp::BuildField(interfaces::capnp::TypeList<LocalType>, interfaces::capnp::Priority<1>, interfaces::capnp::InvokeContext&, Value&&, Output&&, typename interfaces::capnp::ProxyType<LocalType>::Struct*) [with LocalType = interfaces::capnp::GlobalArgs; Value = const interfaces::capnp::GlobalArgs&; Output = interfaces::capnp::ValueField<interfaces::capnp::messages::GlobalArgs::Builder>; typename interfaces::capnp::ProxyType<LocalType>::Struct = interfaces::capnp::messages::GlobalArgs]\u2019\n../../src/interfaces/capnp/messages.cpp:52:109:   required from here\n../../src/interfaces/capnp/proxy.h:322:110: error: \u2018B\u2019 is not a class or namespace\n     template<typename B = Builder, typename Arg> auto set(Arg&& arg) const -> AUTO_RETURN(this->m_builder.B::set(m_index, std::forward<Arg>(arg)))\n```"
  },
  {
   "t": "2018-09-26T20:52:46Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "382cfabf523cd209adeb3ed9c5fd5d69fea284ab"
  },
  {
   "t": "2018-09-26T20:56:31Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Thanks for the report @fingera. The gcc compile errors should be fixed now (I've been testing with clang more than gcc recently).\n\n---\n\nUpdated 5ce9a948c8ec47762d0a23d1cf7f2ce57386052b -> f896f063007aa3889caf9d14724357117eca78c1 ([pr/ipc.55](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.55) -> [pr/ipc.56](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.56)) to fix `createwallet` and other wallet RPCs that use `g_rpc_interfaces` global\nRebased f896f063007aa3889caf9d14724357117eca78c1 -> c1cbca095f1bf10ca4370bfe99b798a5d1e9f268 ([pr/ipc.56](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.56) -> [pr/ipc.57](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.57))\nRebased c1cbca095f1bf10ca4370bfe99b798a5d1e9f268 -> 382cfabf523cd209adeb3ed9c5fd5d69fea284ab ([pr/ipc.57](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.57) -> [pr/ipc.58](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.58)) with compile fixes for gcc\nRebased 382cfabf523cd209adeb3ed9c5fd5d69fea284ab -> ededfe8800fd2647851d4d42dd765cfcd8d69cde ([pr/ipc.58](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.58) -> [pr/ipc.59](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.59)) due to conflict with #12246\nRebased ededfe8800fd2647851d4d42dd765cfcd8d69cde -> ee425e2ddff453a5436cffb1e16e5452d8e3892a ([pr/ipc.59](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.59) -> [pr/ipc.60](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.60)) on top of base PR tag [pr/wipc-sep.85](https://github.com/ryanofsky/bitcoin/commits/pr/wipc-sep.85)\nRebased ee425e2ddff453a5436cffb1e16e5452d8e3892a -> 10ad449bb7c6ea3c2fea9f9a32e54e960c5acfd5 ([pr/ipc.60](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.60) -> [pr/ipc.61](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.61)) on top of base PR tag [pr/wipc-sep.87](https://github.com/ryanofsky/bitcoin/commits/pr/wipc-sep.87)\nRebased 10ad449bb7c6ea3c2fea9f9a32e54e960c5acfd5 -> f2233bcfef4147e0268da581f797b1646b0d8447 ([pr/ipc.61](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.61) -> [pr/ipc.62](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.62)) on top of base PR tag [pr/wipc-sep.88](https://github.com/ryanofsky/bitcoin/commits/pr/wipc-sep.88)\nRebased f2233bcfef4147e0268da581f797b1646b0d8447 -> da8719d39614e2673047721f9a7ea8e96587b000 ([pr/ipc.62](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.62) -> [pr/ipc.63](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.63)) on top of base PR tag [pr/wipc-sep.89](https://github.com/ryanofsky/bitcoin/commits/pr/wipc-sep.89)\nRebased da8719d39614e2673047721f9a7ea8e96587b000 -> c5bc654324670631d32e530c4cf1dbf9af58841a ([pr/ipc.63](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.63) -> [pr/ipc.64](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.64)) on top of base PR tag [pr/wipc-sep.93](https://github.com/ryanofsky/bitcoin/commits/pr/wipc-sep.93) and fixing conflicts with #15101, #15114, and others\nRebased c5bc654324670631d32e530c4cf1dbf9af58841a -> cc23f7434c21e195609e4dff6b8839864a426715 ([pr/ipc.64](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.64) -> [pr/ipc.65](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.65)) on top of base PR tag [pr/wipc-sep.95](https://github.com/ryanofsky/bitcoin/commits/pr/wipc-sep.95) and fixing conflicts with #15153\nRebased cc23f7434c21e195609e4dff6b8839864a426715 -> c5dadccc5da6247975ee3884687a680bc46a9327 ([pr/ipc.65](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.65) -> [pr/ipc.66](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.66)) on top of base PR tag [pr/wipc-sep.96](https://github.com/ryanofsky/bitcoin/commits/pr/wipc-sep.96) after #15288 merge\nRebased c5dadccc5da6247975ee3884687a680bc46a9327 -> 191e240ce66208eb17ca743a6928cb20aa56041e ([pr/ipc.66](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.66) -> [pr/ipc.67](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.67)) on top of base PR tag [pr/wipc-sep.97](https://github.com/ryanofsky/bitcoin/commits/pr/wipc-sep.97) fixing conflict with #15531\nRebased 191e240ce66208eb17ca743a6928cb20aa56041e -> 3440513a45e94a5f1f0c67ab7409439afbbef673 ([pr/ipc.67](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.67) -> [pr/ipc.68](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.68)) after #10973 merge"
  },
  {
   "t": "2018-09-27T18:11:54Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "ededfe8800fd2647851d4d42dd765cfcd8d69cde"
  },
  {
   "t": "2018-09-28T10:29:50Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "After upgrading to Mojave I'm having compile issues (as of ededfe8800fd2647851d4d42dd765cfcd8d69cde):\n```sh\nIn file included from interfaces/capnp/proxy-codegen.cpp:4:\nIn file included from /usr/local/Cellar/capnp/0.7.0/include/capnp/blob.h:28:\n/usr/local/Cellar/capnp/0.7.0/include/kj/common.h:36:4: error: \"This code requires C++14. Either your compiler does not support it or it is not enabled.\"\n  #error \"This code requires C++14. Either your compiler does not support it or it is not enabled.\"\n   ^\n/usr/local/Cellar/capnp/0.7.0/include/kj/common.h:39:6: error: \"Pass -std=c++14 on the compiler command line to enable C++14.\"\n    #error \"Pass -std=c++14 on the compiler command line to enable C++14.\"\n     ^\nIn file included from interfaces/capnp/proxy-codegen.cpp:5:\nIn file included from /usr/local/Cellar/capnp/0.7.0/include/capnp/schema-parser.h:30:\nIn file included from /usr/local/Cellar/capnp/0.7.0/include/kj/filesystem.h:28:\n/usr/local/Cellar/capnp/0.7.0/include/kj/function.h:264:3: error: 'auto' return without trailing return type; deduced return types are a C++14 extension\n  auto operator()(Params&&... params) {\n  ^\n/usr/local/Cellar/capnp/0.7.0/include/kj/function.h:268:3: error: 'auto' return without trailing return type; deduced return types are a C++14 extension\n  auto operator()(Params&&... params) const {\n  ^\ninterfaces/capnp/proxy-codegen.cpp:10:10: fatal error: 'interfaces/capnp/proxy.capnp.h' file not found\n```"
  },
  {
   "t": "2018-10-09T07:16:15Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "Compile works again for me. I do still get the `syscall` deprecated in macOS 10.12 warning I mentioned earlier. Some of the tests also throw a [compiler warning](https://gist.github.com/Sjors/fed61c30c76c746c8b0b12a51e92eeb0).\n\nrpc `help`, and `testnet=1` in `bitcoin.conf`, command override in settings screen work for me now.\n\n`createwallet` in the gui console crashes the gui. The node and wallet keep running, but won't shut down using `bitcoin-cli stop`.\n\nDon't forget to update `.gitignore`. Nit: should `bitcoin-gui` be in `src/qt` ?"
  },
  {
   "t": "2018-10-09T07:54:36Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Thanks for testing! I will test the createwallet method, fix git ignores, and clean up the disconnect handling so leftover processes won't stick around if one crashes.\n\nOn location of `bitcoin-gui`, all three executables are intentionally built in the same directory to make spawning processes simple. When `bitcoin-gui` launches `bitcoin-node`, it always looks for a `bitcoin-node` executable in the same directory. Same when `bitcoin-node` runs `bitcoin-wallet`. Trying to build and call executables in different directories would make things unnecessarily complicated, especially if the executables will eventually be installed in the same directory anyway."
  },
  {
   "t": "2018-11-01T21:01:26Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "ee425e2ddff453a5436cffb1e16e5452d8e3892a"
  },
  {
   "t": "2018-11-01T21:14:35Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-428086112\n[quoted text omitted]\n\nUpdated now.\n\nre: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-428086112, https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-416028413\n[quoted text omitted]\n\nShould be fixed now. Worked around using `pthread_threadid_np`, according to http://elliotth.blogspot.com/2012/04/gettid-on-mac-os.html and https://github.com/google/glog/issues/182\n\nre: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-428086112\n[quoted text omitted]\n\nDidn't look in much detail, but these are warnings about signed/unsigned comparisons from checks like: `BOOST_CHECK_EQUAL(reader.size(), 6);`. Could be fixed by changing `6` to `6u`, but I think these warnings must predate this PR.\n\nre: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-428086112 shutdown/hang issues. I'm planning to look into these next."
  },
  {
   "t": "2018-11-02T00:00:38Z",
   "kind": "comment",
   "who": "ismail120572",
   "assoc": "NONE",
   "text": "Pull request"
  },
  {
   "t": "2018-11-02T15:54:09Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/init.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Remove trailing `;` :-)"
  },
  {
   "t": "2018-11-02T15:54:15Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/init.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Remove trailing `;` :-)"
  },
  {
   "t": "2018-11-02T15:55:04Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/init.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "`exe_path` is not a parameter? :-)"
  },
  {
   "t": "2018-11-02T15:56:41Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/wallet/wallet.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Make this implicit conversion explicit since it changes signedness?"
  },
  {
   "t": "2018-11-02T15:58:17Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/node.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Should be `explicit`? :-)"
  },
  {
   "t": "2018-11-02T16:00:02Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/base.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Make `explicit`?\n\nApplies throughout this PR :-)"
  },
  {
   "t": "2018-11-02T16:04:48Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy-codegen.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Always true?"
  },
  {
   "t": "2018-11-02T16:04:58Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy-codegen.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Always true?"
  },
  {
   "t": "2018-11-02T16:05:48Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy-impl.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "`ByteCast` not used?"
  },
  {
   "t": "2018-11-02T16:05:55Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy-impl.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Same here."
  },
  {
   "t": "2018-11-02T16:06:25Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/node.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Not used?"
  },
  {
   "t": "2018-11-02T16:07:03Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Not used?"
  },
  {
   "t": "2018-11-02T16:07:22Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/test/foo.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Not used?"
  },
  {
   "t": "2018-11-02T16:07:34Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Not used?"
  },
  {
   "t": "2018-11-02T16:07:55Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/init.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Missing spaces around `=`"
  },
  {
   "t": "2018-11-02T16:08:19Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/base.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Missing copyright header"
  },
  {
   "t": "2018-11-02T16:08:33Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/base.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Missing copyright header."
  },
  {
   "t": "2018-11-02T16:08:43Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/ipc.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Missing copyright header."
  },
  {
   "t": "2018-11-02T16:09:08Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/ipc.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Missing whitespace before `{`."
  },
  {
   "t": "2018-11-02T16:10:25Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy-impl.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Typo: pipelining"
  },
  {
   "t": "2018-11-04T21:23:52Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/wallet/wallet.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "The optional `block_height` could be uninitialized here?"
  },
  {
   "t": "2018-11-04T21:24:04Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/wallet/wallet.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Same here?"
  },
  {
   "t": "2018-11-12T19:21:05Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "10ad449bb7c6ea3c2fea9f9a32e54e960c5acfd5"
  },
  {
   "t": "2018-11-12T19:27:29Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/capnp/proxy.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 230427653,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r230427653\n\n[quoted text omitted]\nNo, it's a overridden method called through the base class by the kj library."
  },
  {
   "t": "2018-11-12T19:27:36Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/capnp/proxy.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 230427503,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r230427503\n\n[quoted text omitted]\nNo, it's called by generated code."
  },
  {
   "t": "2018-11-12T19:27:41Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/capnp/test/foo.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 230427589,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r230427589\n\n[quoted text omitted]\nNo, it's called by generated code."
  },
  {
   "t": "2018-11-12T19:28:04Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/capnp/proxy-codegen.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 230426764,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r230426764\n\n[quoted text omitted]\nhas_result is false for any method that doesn't have an output named result, which is true for any method that returns void."
  },
  {
   "t": "2018-11-12T19:28:08Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/interfaces/capnp/proxy-codegen.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 230426823,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r230426823\n\n[quoted text omitted]\nNo, see previous comment."
  },
  {
   "t": "2018-11-26T20:53:57Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "f2233bcfef4147e0268da581f797b1646b0d8447"
  },
  {
   "t": "2018-12-06T19:45:16Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "da8719d39614e2673047721f9a7ea8e96587b000"
  },
  {
   "t": "2019-01-23T21:10:45Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "c5bc654324670631d32e530c4cf1dbf9af58841a"
  },
  {
   "t": "2019-01-24T09:02:50Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy-impl.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Shadows variable `params` in outer scope?"
  },
  {
   "t": "2019-01-24T09:03:01Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy-impl.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Same here?"
  },
  {
   "t": "2019-01-24T09:04:49Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/util.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Should be `explicit`? Applies to all single parameter constructors in this PR :-)"
  },
  {
   "t": "2019-01-25T08:47:58Z",
   "kind": "review_comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "path": "src/interfaces/capnp/proxy-impl.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Are `arg1` and `arg2` guaranteed to be valid here? Could have been moved from on the call on the line before?"
  },
  {
   "t": "2019-02-13T20:09:29Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "cc23f7434c21e195609e4dff6b8839864a426715"
  },
  {
   "t": "2019-03-04T22:21:11Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "c5dadccc5da6247975ee3884687a680bc46a9327"
  },
  {
   "t": "2019-03-05T15:17:39Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "191e240ce66208eb17ca743a6928cb20aa56041e"
  },
  {
   "t": "2019-03-21T13:04:59Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "3440513a45e94a5f1f0c67ab7409439afbbef673"
  },
  {
   "t": "2019-05-24T19:22:09Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "c02494769c522f68b2b1d78e8e8dcf9f4ca9a17b"
  },
  {
   "t": "2019-05-24T21:04:22Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "e35cf68fca5f6cd155ffac0fbb9405df1523668c"
  },
  {
   "t": "2019-05-24T21:29:36Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d6359e5c7446378ed288d723e17582bc80eba664"
  },
  {
   "t": "2019-05-26T01:09:05Z",
   "kind": "comment",
   "who": "jb55",
   "assoc": "CONTRIBUTOR",
   "text": "codegen seems broken for me: (gcc 7.4.0). I get random errors of these kind:\n\nerr1\n```\n  CXX      wallet/libbitcoin_wallet_tool_a-wallettool.o\n  GEN      interfaces/capnp/test/foo.capnp.c++\n*** Uncaught exception ***\nkj/filesystem.c++:315: failed: expected parts.size() > 0; can't use \"..\" to break out of starting directory\nstack: 7ffbcf3c71a0 7ffbcf3c9829 4098e3 7ffbcf55904d 7ffbcf559082 7ffbcf53208f 7ffbcf534296 7ffbcf5510a4 7ffbcf558893 7ffbcf558901 7ffbcf558c57 7ffbcf532974 7ffbcf532724 7ffbcf533921 7ffbcf5399fc 7ffbcf542aa5 7ffbcf5436d6 7ffbcf555452 7ffbcf55662a 7ffbcf55679f 7ffbcf55a606 7ffbcf55aa53 412466 412770 7ffbcf3e4c28 7ffbcf3e5d1a\nmake[2]: *** [Makefile:17337: interfaces/capnp/test/foo.capnp.c++] Error 1\nmake[2]: *** Waiting for unfinished jobs....\nGenerated test/data/base58_encode_decode.json.h\nGenerated test/data/key_io_invalid.json.h\nGenerated test/data/blockfilters.json.h\nGenerated test/data/key_io_valid.json.h\nIn file included from interfaces/capnp/config_bitcoin-node.cpp:1:0:\n./interfaces/capnp/config.h:4:10: fatal error: interfaces/capnp/node.capnp.h: No such file or directory\n #include <interfaces/capnp/node.capnp.h>\n          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ncompilation terminated.\nmake[2]: *** [Makefile:12585: interfaces/capnp/bitcoin_node-config_bitcoin-node.o] Error 1\nIn file included from interfaces/capnp/config_bitcoin-wallet.cpp:1:0:\n./interfaces/capnp/config.h:4:10: fatal error: interfaces/capnp/node.capnp.h: No such file or directory\n #include <interfaces/capnp/node.capnp.h>\n          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n```\n\nerr 2\n\n```\n  CXX      interfaces/capnp/proxy_codegen-proxy-codegen.o\nIn file included from /nix/store/69fkv7ql25r8j496bbchnsvbp42izv8q-capnproto-0.7.0/include/capnp/blob.h:28:0,\n                 from interfaces/capnp/proxy-codegen.cpp:4:\n/nix/store/69fkv7ql25r8j496bbchnsvbp42izv8q-capnproto-0.7.0/include/kj/common.h:36:4: error: #error \"This code requires C++14. Either your compiler does not support it or it is not enabled.\"\n   #error \"This code requires C++14. Either your compiler does not support it or it is not enabled.\"\n    ^~~~~\n/nix/store/69fkv7ql25r8j496bbchnsvbp42izv8q-capnproto-0.7.0/include/kj/common.h:39:6: error: #error \"Pass -std=c++14 on the compiler command line to enable C++14.\"\n     #error \"Pass -std=c++14 on the compiler command line to enable C++14.\"\n      ^~~~~\ninterfaces/capnp/proxy-codegen.cpp:10:10: fatal error: interfaces/capnp/proxy.capnp.h: No such file or directory\n #include <interfaces/capnp/proxy.capnp.h>\n          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n```"
  },
  {
   "t": "2019-05-27T07:41:36Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-495959606\n\n@jb55 this looks like it's caused by changes between capnproto 0.7.0 and 0.6.1: https://github.com/capnproto/capnproto/issues/772. I don't think it should be too be hard to add compatibility with 0.7.0, but I haven't tried it yet myself."
  },
  {
   "t": "2019-05-28T14:15:12Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-495959606\n\n@jb55 Will try to update this PR shortly, but I posted build fixes for capnp 0.7.0 in 792963e32ceb081971935cf1aa10f88f9d3f3a1a ([ipc-work.276](https://github.com/ryanofsky/bitcoin/commits/ipc-work.276))"
  },
  {
   "t": "2019-06-01T01:49:02Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "a06fb3b8600dd14422cee7d4f609ebd50c9a5fbc"
  },
  {
   "t": "2019-06-01T01:59:00Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "010b7ea29383d0582d190e1299cc300998b231b5"
  },
  {
   "t": "2019-06-01T09:57:57Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "7de24eff246388b23bcfa23a86aca14986521c30"
  },
  {
   "t": "2019-06-01T14:06:30Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "fbe1f191135aad35cb0f4ac54c0383f8cd2bbda8"
  },
  {
   "t": "2019-06-08T12:55:16Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "e0d283dfbd065520b625e8831fbc231445951e0a"
  },
  {
   "t": "2019-06-26T20:40:33Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d1085dd405e8e4b3ee755a377fa1a428a8d435d6"
  },
  {
   "t": "2019-06-26T20:43:34Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "0e2bacb9935da07a2f7eca1596e4f1bf2d583ff5"
  },
  {
   "t": "2019-06-27T15:58:20Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "1eb44dfdf33d1b8459f8b12180a8112d1b73ab1f"
  },
  {
   "t": "2019-07-10T18:03:01Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "accd041ff0b5b40798784db5b371d26c30371a24"
  },
  {
   "t": "2019-07-12T21:12:44Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "3e7885ffa15ade3da189b15366574e9bee60294d"
  },
  {
   "t": "2019-07-15T18:42:41Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "467cfa3e9d6500bfafb091c8153679f85745f651"
  },
  {
   "t": "2019-07-17T16:38:33Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "def6e59420d4772d1efffe2eab8608558a1c672a"
  },
  {
   "t": "2019-08-06T19:15:16Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "3d97f874ce6d86c19d9f65997f657ae30de0cde4"
  },
  {
   "t": "2019-08-06T19:57:03Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "36f581e8516988463e406869486f399fced47fb2"
  },
  {
   "t": "2019-08-06T21:49:49Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "de072a9a37bfa84759410f3019433bc43d4ab725"
  },
  {
   "t": "2019-08-20T15:10:19Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "20ee129209ccf9f6e84893fe27a4dee99e7b5d5c"
  },
  {
   "t": "2019-08-28T20:17:14Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8c7f94f9dbc9c257afd7986068f0eeca7ee038a1"
  },
  {
   "t": "2019-08-29T22:52:10Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "805addc1c2d06131c19675ceb342b7a91ddfebaa"
  },
  {
   "t": "2019-08-30T11:29:55Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "406278a8b8e68b79e3366629a52acb87ee671500"
  },
  {
   "t": "2019-08-30T19:48:01Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "908619d8b1f3490a06b3248bc0acd847818f24ed"
  },
  {
   "t": "2019-08-30T20:05:46Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "665348c7c54c934e247e18bfcf0f5b5435cc11d3"
  },
  {
   "t": "2019-08-30T21:29:02Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "adbf158a4c02d0dd8f488feae343c39f83e85383"
  },
  {
   "t": "2019-09-18T18:05:51Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "51c895d0169fc4c18a662b8cfc2b7526b2211d29"
  },
  {
   "t": "2019-09-19T16:37:16Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "b6066d2b491fb32563b9b69a82f4736b68df9cc7"
  },
  {
   "t": "2020-01-08T22:36:38Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d22e3f28d58f2ffd6df1eeaad4625eac673b7b0b"
  },
  {
   "t": "2020-01-09T21:21:59Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "4a0f0fd6a1a3d38cf5115d21ff0242964f0bba09"
  },
  {
   "t": "2020-01-09T22:23:57Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "bdd677c32ff38987fa71ae848b6565637c97550d"
  },
  {
   "t": "2020-01-10T20:51:24Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "2017cca9cff0b0c5bb7a59921ec7b5aece63ac8c"
  },
  {
   "t": "2020-01-10T21:30:41Z",
   "kind": "comment",
   "who": "jgarzik",
   "assoc": "CONTRIBUTOR",
   "text": "concept ACK"
  },
  {
   "t": "2020-01-12T09:39:55Z",
   "kind": "comment",
   "who": "practicalswift",
   "assoc": "CONTRIBUTOR",
   "text": "Very strong concept ACK!\n\nHas this PR reached a level where it could be assigned a milestone? :)"
  },
  {
   "t": "2020-01-24T22:32:01Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "004a611351a2a5bf81a4cfb706d0458576a54dc7"
  },
  {
   "t": "2020-02-25T21:59:17Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "7dd8e269cc5ebb479f63aedea0c9994e89671a60"
  },
  {
   "t": "2020-02-28T13:27:04Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "Can you clarify if the stuff in `src/interfaces/capnp/*.{h,cpp}` is automatically generated or manual? If automatic, I would prefer to leave it out of the repo and have `make` produce them. Other than those files, I like how this PR is looking a lot leaner than it used to. The first 5 non-base commits can be separate PRs, leaving only 3.\n\nSeparating libmultiprocess into its own project also seems like a good call, even though it's quite small. I think we can kick any bike shedding about capnproto alternatives down the road while this feature is optional and marked experimental."
  },
  {
   "t": "2020-03-02T19:08:45Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThis is manual code, but it needs to be better documented and have boilerplate removed. It's all dealing with lifetime and serialization issues for specific classes and structs that were difficult to share between processes for one reason or another. There's a lot of boilerplate because I just dealt with corner cases individually as they came up, and refactoring should make it smaller.\n\nThe code in `src/interfaces/capnp/*.{h,cpp}` is the least stable part of this PR, but it isn't really where the core functionality is implemented. That's more in the `src/interfaces/*.{h,cpp}`, particularly in the new `Init`, `LocalInit`, `IpcProcess`, and `IpcProtocol` classes"
  },
  {
   "t": "2020-03-05T09:35:49Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "Concept ACK."
  },
  {
   "t": "2020-03-05T11:26:20Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "Testing on Linux Mint 19.3:\n\nan attempt to shutdown `bitcoin-node` using `Ctrl+C` causes an error:\n```\n$ ./src/bitcoin-node -testnet\n...\n2020-03-05T11:21:53Z [init] Shutdown: In progress...\n2020-03-05T11:21:53Z [addcon] addcon thread exit\nterminate called after throwing an instance of 'std::logic_error'\n  what():  clientInvoke call made after disconnect\nAborted (core dumped)\n```\n\nNo such error during `bitcoin-gui` shutdown."
  },
  {
   "t": "2020-03-05T17:09:30Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8f7b2b772d2a8941b34b54c5e3c345309eed83de"
  },
  {
   "t": "2020-03-05T17:33:39Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-595180635\n\n[quoted text omitted]\nI can add a \"Known Issues\" section to the [doc](https://github.com/ryanofsky/bitcoin/tree/pr/ipc/doc/multiprocess.md) and mention this. This PR isn't adding signal handlers to spawned `bitcoin-node` and `bitcoin-wallet` processes so ctrl-c can kill them immediately and trigger sudden disconnects and IPC errors. I think adding simple signal handlers would be a good thing to do in a followup PR, and also in general recovering from sudden IPC disconnects is something that should be improved later.\n\nIn the meantime clean shutdowns with `bitcoin-cli stop` should work here if new code is working properly\n\n---\n\nRebased 20ee129209ccf9f6e84893fe27a4dee99e7b5d5c -> 8c7f94f9dbc9c257afd7986068f0eeca7ee038a1 ([pr/ipc.87](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.87) -> [pr/ipc.88](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.88)) on ipc-build.8\nRebased 8c7f94f9dbc9c257afd7986068f0eeca7ee038a1 -> 805addc1c2d06131c19675ceb342b7a91ddfebaa ([pr/ipc.88](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.88) -> [pr/ipc.89](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.89)) on ipc-build.9 with unique_ptr build fixes\nRebased 805addc1c2d06131c19675ceb342b7a91ddfebaa -> 406278a8b8e68b79e3366629a52acb87ee671500 ([pr/ipc.89](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.89) -> [pr/ipc.90](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.90)) on ipc-build.10 with chain wallet include fix\nUpdated 406278a8b8e68b79e3366629a52acb87ee671500 -> 908619d8b1f3490a06b3248bc0acd847818f24ed ([pr/ipc.90](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.90) -> [pr/ipc.91](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.91), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.90..pr/ipc.91)) with make distdir fix\nUpdated 908619d8b1f3490a06b3248bc0acd847818f24ed -> 665348c7c54c934e247e18bfcf0f5b5435cc11d3 ([pr/ipc.91](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.91) -> [pr/ipc.92](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.92), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.91..pr/ipc.92)) with disable wallet compile fix\nUpdated 665348c7c54c934e247e18bfcf0f5b5435cc11d3 -> adbf158a4c02d0dd8f488feae343c39f83e85383 ([pr/ipc.92](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.92) -> [pr/ipc.93](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.93), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.92..pr/ipc.93)) with another disable wallet fix\nRebased adbf158a4c02d0dd8f488feae343c39f83e85383 -> 51c895d0169fc4c18a662b8cfc2b7526b2211d29 ([pr/ipc.93](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.93) -> [pr/ipc.94](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.94)) on ipc-build.11\nUpdated 51c895d0169fc4c18a662b8cfc2b7526b2211d29 -> b6066d2b491fb32563b9b69a82f4736b68df9cc7 ([pr/ipc.94](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.94) -> [pr/ipc.95](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.95), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.94..pr/ipc.95)) with travis/appveyor build fixes\nRebased b6066d2b491fb32563b9b69a82f4736b68df9cc7 -> d22e3f28d58f2ffd6df1eeaad4625eac673b7b0b ([`pr/ipc.95`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.95) -> [`pr/ipc.96`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.96)) on pr/ipc-build.12 splitting commits and fixing various rebase conflicts\nSquashed d22e3f28d58f2ffd6df1eeaad4625eac673b7b0b -> 4a0f0fd6a1a3d38cf5115d21ff0242964f0bba09 ([`pr/ipc.96`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.96) -> [`pr/ipc.97`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.97), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.96...pr/ipc.97)) fixing commit order\nRebased 4a0f0fd6a1a3d38cf5115d21ff0242964f0bba09 -> bdd677c32ff38987fa71ae848b6565637c97550d ([`pr/ipc.97`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.97) -> [`pr/ipc.98`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.98)) due to conflict with #16963\nRebased bdd677c32ff38987fa71ae848b6565637c97550d -> 2017cca9cff0b0c5bb7a59921ec7b5aece63ac8c ([`pr/ipc.98`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.98) -> [`pr/ipc.99`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.99)) with travis/appveyor fixes on top of pr/ipc-count.1, pr/ipc-txup.1\nRebased 2017cca9cff0b0c5bb7a59921ec7b5aece63ac8c -> 004a611351a2a5bf81a4cfb706d0458576a54dc7 ([`pr/ipc.99`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.99) -> [`pr/ipc.100`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.100)) fixing minor conflicts\nRebased 004a611351a2a5bf81a4cfb706d0458576a54dc7 -> 7dd8e269cc5ebb479f63aedea0c9994e89671a60 ([`pr/ipc.100`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.100) -> [`pr/ipc.101`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.101), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.100-rebase..pr/ipc.101)) due to conflicts in base prs\nUpdated 7dd8e269cc5ebb479f63aedea0c9994e89671a60 -> 8f7b2b772d2a8941b34b54c5e3c345309eed83de ([`pr/ipc.101`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.101) -> [`pr/ipc.102`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.102), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.101..pr/ipc.102)) on ipc-build.16, also lowercasing walletnotifications and adding boost::optional read/build overloads after they are removed from libmultiprocess\nRebased 8f7b2b772d2a8941b34b54c5e3c345309eed83de -> b70b060230eb792f9ce089b047e2ec01292372e7 ([`pr/ipc.102`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.102) -> [`pr/ipc.103`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.103), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.102-rebase..pr/ipc.103)) due to conflicts with #18249, #18241, and #18249\nRebased b70b060230eb792f9ce089b047e2ec01292372e7 -> 0ffff86cffbd1048a435c55e9b6d19f4e0200fb2 ([`pr/ipc.103`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.103) -> [`pr/ipc.104`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.104), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.103-rebase..pr/ipc.104)) for various conficts and with ReadFieldUpdate/ReadFieldNew merge\nRebased 0ffff86cffbd1048a435c55e9b6d19f4e0200fb2 -> 67eb575c5b071ea802bd2fa02b9022b92dd8d9f8 ([`pr/ipc.104`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.104) -> [`pr/ipc.105`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.105), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.104-rebase..pr/ipc.105)) with msvc test_bitcoin-qt build fix, centos c++ old compiler fix, updated libmultiprocess fixing ThrowFn exception reading\nUpdated 67eb575c5b071ea802bd2fa02b9022b92dd8d9f8 -> 4d153cc8a61610da91488e2f250dac74c87fad32 ([`pr/ipc.105`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.105) -> [`pr/ipc.106`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.106), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.105..pr/ipc.106)) with feature_config_args fix\nRebased 4d153cc8a61610da91488e2f250dac74c87fad32 -> 9e4ccac3a842e060b5862c73f4bb8cb2d741cb98 ([`pr/ipc.106`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.106) -> [`pr/ipc.107`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.107), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.106-rebase..pr/ipc.107)) after #16367 merge and with shared_ptr callback support needed after #18338\nUpdated 9e4ccac3a842e060b5862c73f4bb8cb2d741cb98 -> eb8a19ce9e7ed863f3271f37d2d8684dac1c283b ([`pr/ipc.107`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.107) -> [`pr/ipc.108`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.108), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.107..pr/ipc.108)) with multiwallet urlencode test fix\nRebased eb8a19ce9e7ed863f3271f37d2d8684dac1c283b -> 0ba0b3052ca916085fc5e93f5c26f9e4f14fa17d ([`pr/ipc.108`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.108) -> [`pr/ipc.109`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.109), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.108-rebase..pr/ipc.109)) with support for FoundBlock passing in #17954 and after IPC build revert #18588\nRebased 0ba0b3052ca916085fc5e93f5c26f9e4f14fa17d -> aa38570fa5f1ceee5883a8170da60206051e05fd ([`pr/ipc.109`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.109) -> [`pr/ipc.110`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.110), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.109-rebase..pr/ipc.110)) due to conflicts with #18571, #16426, and #17781\nRebased aa38570fa5f1ceee5883a8170da60206051e05fd -> fd810d2ae759091dadf39d1d6af3bf267e66bbfd ([`pr/ipc.110`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.110) -> [`pr/ipc.111`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.111), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.110-rebase..pr/ipc.111)) after base prs merged and many conflicts with other PRs resolved"
  },
  {
   "t": "2020-03-06T23:55:48Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "b70b060230eb792f9ce089b047e2ec01292372e7"
  },
  {
   "t": "2020-03-20T13:57:52Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "0ffff86cffbd1048a435c55e9b6d19f4e0200fb2"
  },
  {
   "t": "2020-03-25T03:07:38Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "67eb575c5b071ea802bd2fa02b9022b92dd8d9f8"
  },
  {
   "t": "2020-03-25T19:05:42Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "4d153cc8a61610da91488e2f250dac74c87fad32"
  },
  {
   "t": "2020-04-10T17:55:30Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "9e4ccac3a842e060b5862c73f4bb8cb2d741cb98"
  },
  {
   "t": "2020-05-01T20:07:57Z",
   "kind": "comment",
   "who": "JeremyRubin",
   "assoc": "CONTRIBUTOR",
   "text": "Now that #17905 is merged this seems to be the fourth step in the multiprocess transformation.\n\nWhat things need to happen in your view for this to proceed? From my view this seems like the step where we need to decide to use capnproto or not, and if not, what sort of replacement library. Personally I think using capnproto is a decent idea, as it's a well maintained project, and can save us from a lot of the common bugs we might otherwise run into if we rolled our own. OTOH it's a big codebase so we might want to tread carefully.\n\nIn particular, it seems that we're using CapnProto in a *very* limited way. CapnProto is designed to be usable as a layer between untrusted peers (e.g., at the network consensus layer). This isn't what's going on here. In our usage here it's only between trusted node components. Even without CapnProto, if your wallet user wants to mess with your node they can do some heavy damage, so I don't really see a *new* attack surface. In fact, I see less attack surface because now if someone pops your node handling network stuff they can't get to your private keys. That seems like a major improvement over the status quo, even at the expense of a new, complex, library.\n\nCurious to hear what other's think and if we can move ahead with capnproto."
  },
  {
   "t": "2020-05-01T20:13:46Z",
   "kind": "comment",
   "who": "jb55",
   "assoc": "CONTRIBUTOR",
   "text": "when it was last mentioned on IRC, the idea was to merge it as experimental with capnproto, with plans to eventually replace it when that makes sense."
  },
  {
   "t": "2020-06-02T13:36:57Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "test/functional/feature_block.py",
   "commit": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
   "in_reply_to": null,
   "text": "in commit b737e5397af4cedde1aec47f5b4e87c2521efdd0\n\nOut of scope for this pr, but I am wondering if it wouldn't be easier to compile an increased rpc timeout factor into the test config file. This way, all tests are updated when compiled with ipc and it would avoid having to update them manually and individually."
  },
  {
   "t": "2020-06-02T14:16:26Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "The test suite passes, but I get quite a few warnings when building on macOS 10.15.4 : https://gist.github.com/Sjors/b7b2dc026a39741b019f15e98751cf57#file-make-1-log\n\nWhen launching `src/bitcoin-gui` I get an error message: `Error: Error reading configuration file:`. It trips over unknown setting names, even for a different network (e.g. `-signer` which is for an unmerged PR).  `src/qt/bitcoin-qt` and `src/bitcoin-node` do not have this problem; they report unrecognised options in the log.\n\nIf I stop `bitcoin-gui` with `ctrl+c` it's not always very graceful, e.g. I got:\n\n```\n^C\nlibc++abi.dylib: terminating with uncaught exception of type interfaces::IpcException: kj::Exception: capnp/rpc.c++:2092: disconnected: Peer disconnected.\nstack: 1084bf30a 106e09f40 106e0c090`\n```\n\nIf I stop early it's also not very happy:\n```\n2020-06-02T14:06:07Z Using obfuscation key for /Users/sjors/Library/Application Support/Bitcoin/testnet3/blocks/index: 0000000000000000\n^C2020-06-02T14:06:10Z Shutdown requested. Exiting.\n\nAssertion failed: (nThreadsServicingQueue == 0), function ~CScheduler, file scheduler.cpp, line 18\n```\n\n`bitcoin-node` doesn't have the same config file issue, but it hits similar asserts when existing with ctrl+c. I added an example log: https://gist.github.com/Sjors/b7b2dc026a39741b019f15e98751cf57#file-bitcoin-node-log"
  },
  {
   "t": "2020-06-02T14:33:38Z",
   "kind": "comment",
   "who": "hebasto",
   "assoc": "MEMBER",
   "text": "@Sjors\nsee also https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-595180635, https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-595353238"
  },
  {
   "t": "2020-06-02T15:08:16Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Thanks, I'll look into the settings bug, and adding a sigint handler since multiple people reported this\n\n---\n\nRebased fd810d2ae759091dadf39d1d6af3bf267e66bbfd -> 5f8b1d3bca82490872fddcb6ff6e1b6ecf4a66e5 ([`pr/ipc.111`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.111) -> [`pr/ipc.112`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.112), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.111..pr/ipc.112)) on top of #19160 pr/ipc-echo.3\nRebased 5f8b1d3bca82490872fddcb6ff6e1b6ecf4a66e5 -> 37061a71acdd55d95359d898a3f5e8ff00cd7019 ([`pr/ipc.112`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.112) -> [`pr/ipc.113`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.113), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.112-rebase..pr/ipc.113)) on top of #19160 pr/ipc-echo.4\nRebased 37061a71acdd55d95359d898a3f5e8ff00cd7019 -> 7b8d8908582a8a968d9f601745283d7c7bb2eaf4 ([`pr/ipc.113`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.113) -> [`pr/ipc.114`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.114), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.113-rebase..pr/ipc.114)) due to silent merge conflicts with #17938 (destination hash types) and #18027 (fillPSBT), on top of #19160 pr/ipc-echo.5\nUpdated 7b8d8908582a8a968d9f601745283d7c7bb2eaf4 -> 93bc1db49596bb69e9e53630af53cc1c94a20f25 ([`pr/ipc.114`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.114) -> [`pr/ipc.115`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.115), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.114..pr/ipc.115)) to fix travis include errors\nRebased 93bc1db49596bb69e9e53630af53cc1c94a20f25 -> 7f6afc5d43bffe729443b605328ec5054bb2c806 ([`pr/ipc.115`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.115) -> [`pr/ipc.116`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.116), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.115-rebase..pr/ipc.116)) on top of #19160 pr/ipc-echo.6 due to silent conflict with #19219\nRebased 7f6afc5d43bffe729443b605328ec5054bb2c806 -> 081cf6c40b51a2f456703620b87c27d303dcdf67 ([`pr/ipc.116`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.116) -> [`pr/ipc.117`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.117), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.116-rebase..pr/ipc.117)) due to conflicts with #19098\nUpdated 081cf6c40b51a2f456703620b87c27d303dcdf67 -> 3076c8c41a627adb2bc7fc6722c50fcaf34ccfdd ([`pr/ipc.117`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.117) -> [`pr/ipc.118`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.118), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.117..pr/ipc.118)) to fix wallet_dump assert_debug_log test error https://travis-ci.org/github/bitcoin/bitcoin/jobs/707823975\nRebased 3076c8c41a627adb2bc7fc6722c50fcaf34ccfdd -> 3da29016799095b10c7fa5aa0368cdf0cb784846 ([`pr/ipc.118`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.118) -> [`pr/ipc.119`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.119), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.118-rebase..pr/ipc.119)) on top of #19160 pr/ipc-echo.7\nRebased 3da29016799095b10c7fa5aa0368cdf0cb784846 -> 56d577bc1d79cfb3e0a78f49f42abcce0727ea16 ([`pr/ipc.119`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.119) -> [`pr/ipc.120`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.120), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.119-rebase..pr/ipc.120)) due to conflicts with #18571 and #15935\nRebased 56d577bc1d79cfb3e0a78f49f42abcce0727ea16 -> 060a1b55396f4ab142781a39e3f98baaa31ddedd ([`pr/ipc.120`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.120) -> [`pr/ipc.121`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.121), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.120-rebase..pr/ipc.121)) due to conflict with #19326\nRebased 060a1b55396f4ab142781a39e3f98baaa31ddedd -> 49c22b589a2c2d63acd0434c6424880e134ec085 ([`pr/ipc.121`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.121) -> [`pr/ipc.122`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.122), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.121-rebase..pr/ipc.122)) due to conflict with #19098\nUpdated 49c22b589a2c2d63acd0434c6424880e134ec085 -> 4e3dae7a584650485b1c328577be5b58c99258c4 ([`pr/ipc.122`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.122) -> [`pr/ipc.123`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.123), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.122..pr/ipc.123)) to fix test errors https://travis-ci.org/github/bitcoin/bitcoin/builds/717076622 https://ci.appveyor.com/project/DrahtBot/bitcoin/builds/34606581 https://cirrus-ci.com/task/4522962420236288 https://cirrus-ci.com/task/5648862327078912\nRebased 4e3dae7a584650485b1c328577be5b58c99258c4 -> 21529efc39ae143a3f4b2a1dd4f697c638fc88a5 ([`pr/ipc.123`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.123) -> [`pr/ipc.124`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.124), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.123-rebase..pr/ipc.124)) due to conflicts with #19011 and #15937 on top of #19160 pr/ipc-echo.11\nRebased 21529efc39ae143a3f4b2a1dd4f697c638fc88a5 -> fa6f80a699aa2f9f001090cd60bf0a02d545f8cb ([`pr/ipc.124`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.124) -> [`pr/ipc.125`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.125), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.124-rebase..pr/ipc.125)) on top of #19160 pr/ipc-echo.7 with fixes for travis errors https://travis-ci.org/github/bitcoin/bitcoin/jobs/721173746#L3338"
  },
  {
   "t": "2020-06-02T19:28:00Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "test/functional/feature_block.py",
   "commit": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
   "in_reply_to": 433880214,
   "text": "[quoted text omitted]\n\nThat's a good idea, I didn't know about the timeout factor and it'd probably better to increase that if there are other timeouts outside this test. Some IPC performance problems are actually very easy to fix after you know they exist, though, so there might be some argument for increasing timeouts selectively instead of globally to identify these places, at least to start out with before it becomes a burden."
  },
  {
   "t": "2020-09-13T20:29:29Z",
   "kind": "comment",
   "who": "jgarzik",
   "assoc": "CONTRIBUTOR",
   "text": "Thanks for continuing to work on this.  Cloning and building to test now.\n\nMulti-process isolation boundaries have been needed for... 10 years or so."
  },
  {
   "t": "2020-09-13T20:43:30Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThanks! Some instructions are at https://github.com/ryanofsky/bitcoin/blob/pr/ipc/doc/multiprocess.md#installation in case that's helpful.\n\n---\n\nRebased fa6f80a699aa2f9f001090cd60bf0a02d545f8cb -> 9bb2b0fc428877b5af7e472ca492b09ecdb72394 ([`pr/ipc.125`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.125) -> [`pr/ipc.126`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.126), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.125-rebase..pr/ipc.126)) on top of #19160 pr/ipc-echo.13 due to conflict with #19099\nUpdated 9bb2b0fc428877b5af7e472ca492b09ecdb72394 -> e9523ebd6e312422c2a891d3004678ba4459d87f ([`pr/ipc.126`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.126) -> [`pr/ipc.127`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.127), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.126..pr/ipc.127)) with libmultiprocess extends support https://github.com/chaincodelabs/libmultiprocess/pull/38\nUpdated e9523ebd6e312422c2a891d3004678ba4459d87f -> dd71ab2683c5b69dbacf03f7144cb87e016442f2 ([`pr/ipc.127`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.127) -> [`pr/ipc.128`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.128), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.127..pr/ipc.128)) to fix travis errors from missing include https://travis-ci.org/github/bitcoin/bitcoin/jobs/726837187 https://travis-ci.org/github/bitcoin/bitcoin/jobs/726837186 https://travis-ci.org/github/bitcoin/bitcoin/jobs/726837185\nUpdated dd71ab2683c5b69dbacf03f7144cb87e016442f2 -> 3724d0a48c2a82b015738a71cc3580bb48ffdd84 ([`pr/ipc.128`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.128) -> [`pr/ipc.129`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.129), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.128..pr/ipc.129)) to fix travis missing make dependency error https://travis-ci.org/github/bitcoin/bitcoin/jobs/726899109\nRebased 3724d0a48c2a82b015738a71cc3580bb48ffdd84 -> 8605bae0a5cd4aa1a66a6b3020b23de077cf9121 ([`pr/ipc.129`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.129) -> [`pr/ipc.130`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.130), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.129-rebase..pr/ipc.130)) due to silent conflicts with #15454 and #19572 on top of #19160 pr/ipc-echo.14\nRebased 8605bae0a5cd4aa1a66a6b3020b23de077cf9121 -> 5bd02e8581c4d9fecbaed6f93b4f95920c5cb024 ([`pr/ipc.130`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.130) -> [`pr/ipc.131`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.131), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.130-rebase..pr/ipc.131)) due to conflict with #19725 on top of #19160 pr/ipc-echo.14\nRebased 5bd02e8581c4d9fecbaed6f93b4f95920c5cb024 -> d779c4af435b6d06f29afd07772eb348a0ed94f9 ([`pr/ipc.131`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.131) -> [`pr/ipc.132`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.132), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.131-rebase..pr/ipc.132)) on top of #19160 pr/ipc-echo.16 for cmake depends fix\nUpdated d779c4af435b6d06f29afd07772eb348a0ed94f9 -> 8f155d7afc41760a36972ae353a76d876cf4445f ([`pr/ipc.132`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.132) -> [`pr/ipc.133`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.133), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.132..pr/ipc.133)) to fix c++11/c++17 constexpr linkage error https://travis-ci.org/github/bitcoin/bitcoin/jobs/731908474#L3044"
  },
  {
   "t": "2020-10-23T21:45:08Z",
   "kind": "comment",
   "who": "promag",
   "assoc": "CONTRIBUTOR",
   "text": "Outstanding work and effort! Not sure if it was mentioned, but while testing I've noticed it takes way longer to load big wallets. But this is something we could improve in different ways, not in the context of this PR.\n\nConcept ACK."
  },
  {
   "t": "2020-12-11T18:19:49Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 8f155d7afc41760a36972ae353a76d876cf4445f -> e3b965e13216acc111bf0241fb14e55c63612a10 ([`pr/ipc.133`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.133) -> [`pr/ipc.134`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.134), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.133-rebase..pr/ipc.134)) on top of #19160 pr/ipc-echo.19\nRebased e3b965e13216acc111bf0241fb14e55c63612a10 -> 62f68cb14e6c8702d14bb34680a6abddf9342b5e ([`pr/ipc.134`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.134) -> [`pr/ipc.135`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.135), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.134-rebase..pr/ipc.135)) on top of #19160 pr/ipc-echo.22 with FoundBlock fixes after #19425 and silent conflict fix after #18766\nUpdated 62f68cb14e6c8702d14bb34680a6abddf9342b5e -> b5d2ae65b2d870a02e157846236160f35ad6608c ([`pr/ipc.135`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.135) -> [`pr/ipc.136`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.136), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.135..pr/ipc.136)) to fix unique_ptr forward include errors https://cirrus-ci.com/task/5058230931947520 https://ci.appveyor.com/project/DrahtBot/bitcoin/builds/36782415\nUpdated b5d2ae65b2d870a02e157846236160f35ad6608c -> a4aaf6993b63b545a341094201011f663ed92fbc ([`pr/ipc.136`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.136) -> [`pr/ipc.137`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.137), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.136..pr/ipc.137)) with build tweaks to fix appveyor object name error https://ci.appveyor.com/project/DrahtBot/bitcoin/builds/36786087 and cirrus missing make header error https://cirrus-ci.com/task/5234663356628992?command=ci#L2602\nRebased a4aaf6993b63b545a341094201011f663ed92fbc -> 1e3bfe692e978966ad1607b7f3d3679508d39644 ([`pr/ipc.137`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.137) -> [`pr/ipc.138`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.138), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.137-rebase..pr/ipc.138)) on top of #19160 pr/ipc-echo.23 including https://github.com/chaincodelabs/libmultiprocess/pull/41 to fix build errors caused by #20588\nRebased 1e3bfe692e978966ad1607b7f3d3679508d39644 -> 011a8cd6f84c4163c6550dfa3fad696b4458a9c7 ([`pr/ipc.138`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.138) -> [`pr/ipc.139`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.139), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.138-rebase..pr/ipc.139)) on top of #19160 pr/ipc-echo.24 due to (mostly silent) conflicts with #18077, #19829, #20671, #20736, #20755, #20786\nRebased 011a8cd6f84c4163c6550dfa3fad696b4458a9c7 -> 03501ab4b74e45a68ef9fa6a8d51ef99695f7588 ([`pr/ipc.139`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.139) -> [`pr/ipc.140`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.140), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.139-rebase..pr/ipc.140)) on top of #21035 pr/argmap.1 to fix CI failure https://cirrus-ci.com/task/5469433013469184?command=ci#L2275\nRebased 03501ab4b74e45a68ef9fa6a8d51ef99695f7588 -> 1f789912f3dae5aecdce157d0eefdb22c2b5a61c ([`pr/ipc.140`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.140) -> [`pr/ipc.141`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.141), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.140-rebase..pr/ipc.141)) due to silent conflict with #20464 (https://cirrus-ci.com/task/6558387276087296)\nRebased 1f789912f3dae5aecdce157d0eefdb22c2b5a61c -> ce6e283ed2fc91994dd23b930feb2a768b0062ad ([`pr/ipc.141`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.141) -> [`pr/ipc.142`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.142), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.141-rebase..pr/ipc.142)) due to silent conflict with #21051\nRebased ce6e283ed2fc91994dd23b930feb2a768b0062ad -> 585585c28f69cc232c2f9e6d1ae96c8d3a11eb5a ([`pr/ipc.142`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.142) -> [`pr/ipc.143`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.143), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.142-rebase..pr/ipc.143)) on top of #19060 pr/ipc-echo.26 due to silent conflict with #20721"
  },
  {
   "t": "2021-03-04T11:16:28Z",
   "kind": "comment",
   "who": "electorr",
   "assoc": "NONE",
   "text": "NACK\nThis is using a library produced by an outside entity that\naddresses a specific use case of bitcoin.\nGood intentions and all, bait-and-switch is a thing.\n20 years into the future we have a company having control\nof a part of the bitcoin code which does not get the same level\nof audit as the bitcoin code itself but neither as external libraries\nwhich are not targeted at bitcoin like zmq."
  },
  {
   "t": "2021-03-04T14:39:03Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-790538884\n\nConcerns about external libraries (including zmq) are legitimate and this is a reason multiprocess support is optional and will always be optional. Just like you can build versions of bitcoin without GUI or wallet support, and just like we distribute separate `bitcoin-qt` and `bitcoind` binaries so you can choose whether or not to use [Qt](https://www.qt.io/), you will always be able to build bitcoin without multiprocess support. Also, you can also choose whether to use multiprocess binaries.\n\nMultiprocess support is disabled by default in this PR (toggled by the [`--enable-multiprocess`](https://github.com/ryanofsky/bitcoin/blob/ipc-export/doc/multiprocess.md) option), and even when it is enabled it just creates new `bitcoin-gui`, `bitcoin-node`, and `bitcoin-wallet` binaries without any effect on existing `bitcoind` and `bitcoin-qt` binaries.\n\nBeyond the ability to disable multiprocess support, there is also the ability to enable it and replace it with a different implementation. For example, if you want multiprocess support, but would prefer not to rely on the external [libmultiprocess](https://github.com/chaincodelabs/libmultiprocess) library, you could implement a class overriding [`interfaces::Ipc`](https://github.com/ryanofsky/bitcoin/blob/ipc-export/src/interfaces/ipc.h) with methods `spawnProcess`, `serveProcess`, `connectAddress`, `listenAddress` that use a different IPC protocol or are implemented with different libraries.\n\n---\n\nRebased 585585c28f69cc232c2f9e6d1ae96c8d3a11eb5a -> a43b55a381b023800f9f5f68a2a56a1e374ab19f ([`pr/ipc.143`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.143) -> [`pr/ipc.144`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.144), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.143-rebase..pr/ipc.144)) on #19160 pr/ipc-echo.27 due to conflicts with #20685 and #21015\nRebased a43b55a381b023800f9f5f68a2a56a1e374ab19f -> 26bc68baf4d221bfd45cb4c61556fd5851376e84 ([`pr/ipc.144`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.144) -> [`pr/ipc.145`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.145), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.144-rebase..pr/ipc.145)) due to conflict with bitcoin-core/gui#233\nRebased 26bc68baf4d221bfd45cb4c61556fd5851376e84 -> 667affafa4b1a086746de9ef17c459e40380829b ([`pr/ipc.145`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.145) -> [`pr/ipc.146`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.146), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.145-rebase..pr/ipc.146)) due to conflicts with #21007 and #21404"
  },
  {
   "t": "2021-03-12T00:28:11Z",
   "kind": "review_comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "path": "src/init/bitcoin-gui.cpp",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "Please [use `std::make_unique` in new code](https://github.com/bitcoin/bitcoin/blob/master/src/util/memory.h#L13)."
  },
  {
   "t": "2021-03-26T14:40:30Z",
   "kind": "comment",
   "who": "ariard",
   "assoc": "CONTRIBUTOR",
   "text": "I've been following the instructions in `doc/multiprocess.md`, especially the ones in ##Installation\n\n```\ncd <BITCOIN_SOURCE_DIRECTORY>\nmake -C depends NO_QT=1 MULTIPROCESS=1\n./configure --prefix=$PWD/depends/x86_64-pc-linux-gnu\nmake\nsrc/bitcoin-node -regtest -printtoconsole -debug=ipc\nBITCOIND=bitcoin-node test/functional/test_runner.py\n```\n\nBut I'm hitting linker failures likewise :\n```\n/home/user/Bitcoin/bitcoin/src/ipc/capnp/node.cpp:112: undefined reference to `mp::ProxyClient<ipc::capnp::messages::Node>::customWalletClient()'\n/usr/bin/ld: libbitcoin_ipc.a(libbitcoin_ipc_a-node.o): in function `mp::ProxyClientBase<ipc::capnp::messages::Node, interfaces::Node>::ProxyClientBase(ipc::capnp::messages::Node::Client, mp::Connection*, bool)::{lambda()#2}::operator()() const':\n/home/user/Bitcoin/bitcoin/depends/x86_64-pc-linux-gnu/include/mp/proxy-io.h:392: undefined reference to `mp::ProxyClient<ipc::capnp::messages::Node>::destroy()'\n/usr/bin/ld: libbitcoin_ipc.a(libbitcoin_ipc_a-init.capnp.proxy-client.o): in function `mp::ProxyClientBase<ipc::capnp::messages::WalletClient, interfaces::WalletClient>::ProxyClientBase(ipc::capnp::messages::WalletClient::Client, mp::Connection*, bool)::{lambda()#2}::operator()() const':\n```\n\nI'm investigating further, it might be local env config ?\n\nEDIT: I'm building well #19160 branch"
  },
  {
   "t": "2021-03-26T18:01:59Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-808272413\n\nThanks for the bug report. So far I'm not able to reproduce the problem. Just checking out the current PR and following the instructions builds successfully for me (and also seems to be working on CI).\n\nIt's possible there are old build outputs on your system and using `git-clean` could help. Otherwise it'd be great if you opened a new issue https://github.com/chaincodelabs/libmultiprocess/issues/new including the complete error message (maybe with `make V=1` to be able to see the linker command line). From the snippet above, it's not clear what executable is actually being linked or if the symbol should be expected to be defined there.\n\nIn the future feel free to post any questions or issues related to multiprocess stuff to https://github.com/chaincodelabs/libmultiprocess/issues/new. Even though libmultiprocess isn't bitcoin-specific, the issue tracker is a pretty quiet and reasonable place for discussion, even if issues are tangential. This PR thread is long and it's hard to have ongoing discussion about specific topics here."
  },
  {
   "t": "2021-03-29T19:45:02Z",
   "kind": "comment",
   "who": "achow101",
   "assoc": "MEMBER",
   "text": "Tried to run `bitcoin-gui` and hit an assert:\n\n    bitcoin-gui: logging.cpp:274: void BCLog::Logger::LogPrintStr(const string&, const string&, const string&, int): Assertion `m_fileout != nullptr' failed.\n\n***\n\nI am not really a fan of overloading `bitcoin-wallet` to serve as the wallet process. Currently (in master) it is used solely as the wallet tool. It seems really weird to me that with this PR it's behavior is completely different depending on whether it is given `-ipcfd`. I would rather that the wallet process is a new binary instead of overloading the current `bitcoin-wallet`.\n\n***\n\nThe last commit seems to be extremely monolithic. It would be nice to break it up into several smaller commits if possible."
  },
  {
   "t": "2021-03-29T22:23:07Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Thanks for checking this!\n\n[quoted text omitted]\nI'll look into this some more, but feel free to post an issue https://github.com/chaincodelabs/libmultiprocess/issues/new just because it's easier to dig into bugs outside this long PR thread. I wonder if you are using a bitcoin.conf file or have log options defined that could be relevant to this.\n\n[quoted text omitted]\nThe idea here is to have one wallet tool instead of multiple tools. This is described a little in #19460 (feel free to follow up there). `-ipcfd` is an internal argument that users shouldn't care about, but #19460 adds an `-ipcconnect` option to control whether `bitcoin-wallet` tries to connect to the `bitcoin-node` IPC socket. The idea would be that\n\n```sh\nbitcoin-wallet -noipcconnect    -wallet=mywallet listtransactions  # List limited transaction info\nbitcoin-wallet -ipcconnect      -wallet=mywallet listtransactions  # List full transaction info\nbitcoin-wallet -ipcconnect=auto -wallet=mywallet listtransactions  # List available transaction info\n\nbitcoin-wallet -noipcconnect    -wallet=mywallet serve # Run limited RPC server\nbitcoin-wallet -ipcconnect      -wallet=mywallet serve # Run full RPC server\nbitcoin-wallet -ipcconnect=auto -wallet=mywallet serve # Run full server if possible, but fall back to limited\n```\n\nDefault `-ipcconnect` option value might be a discussion point but in #19460 it is `auto`.\n\n[quoted text omitted]\nYes, that's the plan. It needs to be split up and also has a few hacks that need to be removed. (Some of the hacks in fact are related to logging and could be responsible for the issue you reported)."
  },
  {
   "t": "2021-04-08T02:47:33Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-809662747\n\n[quoted text omitted]\nThanks, reproduced and fixed this now. I missed it because I'd had been testing ahead of this PR on the #19461 branch. Backporting some changes from #19461 fixed it.\n\n---\n\nRebased 667affafa4b1a086746de9ef17c459e40380829b -> e6e53b5955a184a672d8c74ac25f787f2ae46482 ([`pr/ipc.146`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.146) -> [`pr/ipc.147`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.147), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.146-rebase..pr/ipc.147)) fixing gui assert failure reported by achow in https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-809662747 and silent merge conflict after #21366\nRebased e6e53b5955a184a672d8c74ac25f787f2ae46482 -> 6e7a814da00c9f8ecaf7c57921515e61e0a037b6 ([`pr/ipc.147`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.147) -> [`pr/ipc.148`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.148), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.147-rebase..pr/ipc.148)) due to silent conflict with #21574 and to fix fuzz timeout https://cirrus-ci.com/task/6058699123851264 #21639"
  },
  {
   "t": "2021-04-30T13:46:10Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Base pr #19160 was merged, and I split up the big commit into smaller commits, so I think this is definitely in a reviewable state now, even though there still are some small remaining things I would like to clean up where there are todos in the comments.\n\n---\n\nRebased 6e7a814da00c9f8ecaf7c57921515e61e0a037b6 -> 68fe5860cc786962b1de94295aac41574b46159c ([`pr/ipc.148`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.148) -> [`pr/ipc.149`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.149), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.148-rebase..pr/ipc.149)) after #19160 merge, splitting up commits and making some minor cleanups.\nRebased 68fe5860cc786962b1de94295aac41574b46159c -> 21064594fd96a1ac20aeae175bb9edba431d1321 ([`pr/ipc.149`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.149) -> [`pr/ipc.150`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.150), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.149-rebase..pr/ipc.150)) due to conflict with bitcoin-core/gui#4 and #22156, on top of bitcoin-core/gui#360 + #22215 + #22217 + #22218 + #22219\nRebased 21064594fd96a1ac20aeae175bb9edba431d1321 -> 334f1f90c951ef89a32a8f857a612f249c07c534 ([`pr/ipc.150`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.150) -> [`pr/ipc.151`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.151), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.150-rebase..pr/ipc.151)) due to silent conflict with bitcoin-core/gui#4 causing cirrus failure https://cirrus-ci.com/task/6103801187794944\nUpdated 334f1f90c951ef89a32a8f857a612f249c07c534 -> 3515e22d78c7361fe06107721d3bf9616f909aaf ([`pr/ipc.151`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.151) -> [`pr/ipc.152`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.152), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.151..pr/ipc.152)) to fix external signer cirrus error https://cirrus-ci.com/task/6579691483037696\nRebased 3515e22d78c7361fe06107721d3bf9616f909aaf -> a7c4732716bfd51540d6b070b2b8d9d6e1048aed ([`pr/ipc.152`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.152) -> [`pr/ipc.153`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.153), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.152-rebase..pr/ipc.153)) due to conflict with #21935\nRebased a7c4732716bfd51540d6b070b2b8d9d6e1048aed -> e3d3a183e094aa5acd54ff387fede6c16486523f ([`pr/ipc.153`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.153) -> [`pr/ipc.154`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.154), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.153-rebase..pr/ipc.154)) due to conflict with #22323\nRebased e3d3a183e094aa5acd54ff387fede6c16486523f -> 24dd84afd4414cbb20bb937bb95cfa661d1e2b78 ([`pr/ipc.154`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.154) -> [`pr/ipc.155`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.155), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.154-rebase..pr/ipc.155)) due to conflict with #22320\nRebased 24dd84afd4414cbb20bb937bb95cfa661d1e2b78 -> 1326c4a9a443e4169822eab569be68e53c58de36 ([`pr/ipc.155`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.155) -> [`pr/ipc.156`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.156), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.155-rebase..pr/ipc.156)) due to conflict with #22339"
  },
  {
   "t": "2021-07-09T17:17:11Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 1326c4a9a443e4169822eab569be68e53c58de36 -> 3f2ca2a484a7f040c41d2e29e8bb9e615050694e ([`pr/ipc.156`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.156) -> [`pr/ipc.157`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.157), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.156-rebase..pr/ipc.157)) on top of #22218 pr/ipc-ctx.2 with comment improvements that were discussed in https://github.com/bitcoin/bitcoin/pull/22218#pullrequestreview-702107209 and https://github.com/bitcoin/bitcoin/commit/2516d397d54b021e37d6e7628655fe7c54d2fb06#commitcomment-53226160\nRebased 3f2ca2a484a7f040c41d2e29e8bb9e615050694e -> bc918ffaaaf108a9bf49325cef7773ba3797feb4 ([`pr/ipc.157`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.157) -> [`pr/ipc.158`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.158), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.157-rebase..pr/ipc.158)) due to merge conflicts with #20354 #22387 and #21528 and silent conflict with #22570"
  },
  {
   "t": "2021-07-12T15:49:50Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/init/bitcoin-node.cpp",
   "commit": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
   "in_reply_to": null,
   "text": "In commit \"Make bitcoin-gui spawn a bitcoin-node process\" (2516d397d54b021e37d6e7628655fe7c54d2fb06):\n\nre: https://github.com/bitcoin/bitcoin/commit/2516d397d54b021e37d6e7628655fe7c54d2fb06#r53368428\n\n[quoted text omitted]\n`init_process` is bitcoin-specific and libmultiprocess can't access it or reference it, and it isn't related to IPC method invocation (`serverInvoke` is a libmultiprocess internal function that bitcoin code shouldn't access and doesn't reference which translates an incoming IPC method call from a remote process to a C++ method call on a local object.)\n\n`init_process` is a hack to deal with the fact that bitcoin code uses a bunch of global variables that depend on the `gArgs` global variable and they need to be initialized at some point.\n\nWhen bitcoin is running with wallet & node & gui code in the same process, global variables only have to be initialized once by existing init code. But if the node process spawns a wallet process, or if the GUI process spawns a node process, then there are multiple copies of the global variables in different processes, and they have to be newly initialized in each spawned process, and existing init code is no longer sufficient. That is why the `GlobalArgs` class and `init_process` callback are introduced. `GlobalArgs` transfers `gArgs` state from the parent process to the child process and `init_process` sets up logging and other global variables that depend on `gArgs`.\n\nIdeally there would be no global variables shared between node wallet and GUI code (they would move into `NodeContext` and `WalletContext` objects) and the `init_process` hack could go away. Short of that, I maybe rename `init_process` or you could think of it as something like `init_bitcoin_shared_global_variables_in_newly_spawned_child_process_after_transferring_gargs`"
  },
  {
   "t": "2021-08-18T05:56:02Z",
   "kind": "review_comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "path": "src/netaddress.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "When you are re-introducing this, it might be good to cleanup the complexity in this method or maybe just use the existing json serialization?"
  },
  {
   "t": "2021-08-31T16:06:18Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/netaddress.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 690922929,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r690922929\n\n[quoted text omitted]\nThanks, exposed json functions in #22848, and now using it in this PR"
  },
  {
   "t": "2021-08-31T16:17:00Z",
   "kind": "review",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "bc918ffaaaf108a9bf49325cef7773ba3797feb4",
   "text": "Rebased bc918ffaaaf108a9bf49325cef7773ba3797feb4 -> d7c617e3580195398bbc34f1efcde548a834427e ([`pr/ipc.158`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.158) -> [`pr/ipc.159`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.159), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.158-rebase..pr/ipc.159)) after #22215 and #22217 merges, on top of #22219 pr/ipc-make.6 and #22848 pr/ipc-banmap.1\n- switching to banman json serialization\n- fixing logging bug where different processes wrote to the same log file\n- fixing bitcoin-node bug where it ran wallet code internally instead of using the bitcoin-wallet process\n- changing node logging/wallet logging init order feature_logging.py test works unchanged with multiprocess binaries and so GUI does not block waiting for the wallet process to start\n- fixing silent conflict with #22782\n\nRebased d7c617e3580195398bbc34f1efcde548a834427e -> a56f8ebeb93e6016b2719644a1212c5a34a44396 ([`pr/ipc.159`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.159) -> [`pr/ipc.160`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.160), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.159-rebase..pr/ipc.160)) after #22219 and #22848 merges"
  },
  {
   "t": "2021-10-06T03:40:22Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased a56f8ebeb93e6016b2719644a1212c5a34a44396 -> 884d3e1dfa0d46472cd26093142331e51fb9f2ae ([`pr/ipc.160`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.160) -> [`pr/ipc.161`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.161), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.160-rebase..pr/ipc.161)) due to conflicts with #12677, #23065, #22818, #23060, #17211, and #22951"
  },
  {
   "t": "2021-10-25T19:20:12Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 884d3e1dfa0d46472cd26093142331e51fb9f2ae -> b9b40ae00e6eef8487e197aff2a9a4a0d07bee12 ([`pr/ipc.161`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.161) -> [`pr/ipc.162`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.162), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.161-rebase..pr/ipc.162)) due to conflict with #22937\nRebased b9b40ae00e6eef8487e197aff2a9a4a0d07bee12 -> eb01cec5c5e71f2dfa4b413ee3759bb78ecf8566 ([`pr/ipc.162`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.162) -> [`pr/ipc.163`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.163), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.162-rebase..pr/ipc.163)) after merge of #23006\nUpdated eb01cec5c5e71f2dfa4b413ee3759bb78ecf8566 -> 03869abd23949dc4d4315d2b647acd5696f5a0db ([`pr/ipc.163`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.163) -> [`pr/ipc.164`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.164), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.163..pr/ipc.164)) dropping ArgsManager private member hack\nRebased 03869abd23949dc4d4315d2b647acd5696f5a0db -> 4004e0b4a6e52016f36e0054d869ffdf9e719a1e ([`pr/ipc.164`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.164) -> [`pr/ipc.165`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.165), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.164-rebase..pr/ipc.165)) due to conflicts due to conflicts with #23345 and #23474\nRebased 4004e0b4a6e52016f36e0054d869ffdf9e719a1e -> 4b255e1e938d254231d4455a1d4bf61794ba1511 ([`pr/ipc.165`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.165) -> [`pr/ipc.166`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.166), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.165-rebase..pr/ipc.166)) due to conflict with #22364\nUpdated 4b255e1e938d254231d4455a1d4bf61794ba1511 -> eef402d2913fdb9f13af73f9fbc789611cf60360 ([`pr/ipc.166`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.166) -> [`pr/ipc.167`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.167), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.166..pr/ipc.167)) to fix silent conflict with #23591"
  },
  {
   "t": "2021-12-09T07:43:58Z",
   "kind": "review_comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "path": "test/functional/feature_block.py",
   "commit": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
   "in_reply_to": 433880214,
   "text": "In that case it may be good to add comments that the long timeout is due to IPC."
  },
  {
   "t": "2021-12-09T08:06:02Z",
   "kind": "review_comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "path": "src/ipc/capnp/common-types.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "eae99d609c7a08fde35e723967d078904ad1cd05  That seems a different Bitcoin Core PR... however there have been a few VectorReader merges recently."
  },
  {
   "t": "2021-12-09T08:12:58Z",
   "kind": "review_comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "path": "src/ipc/capnp/handler.capnp",
   "commit": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
   "in_reply_to": null,
   "text": "0a2a04655abf572005b7fefb474f47dce0480d32 : what is this?"
  },
  {
   "t": "2021-12-09T08:46:01Z",
   "kind": "review",
   "who": "Sjors",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "3c51b5e3af0cb6165de6bb3b0b723a3eeb8812db",
   "text": "eef402d looks pretty good. And so far I haven't been able to break things. Although I don't understand _all_ of the IPC code involved, it seems well enough documented to know what to change if any of the interfaces or structs change.\n\nThe slowdown is noticable, e.g. when opening the wallet creation dialog from `bitcoin-gui`, but that can be ironed out in followups.\n\nWhen building on macOS, using capnp 0.9.1 via homebrew and https://github.com/chaincodelabs/libmultiprocess/commit/34ce921d2daecb0b20772363621554a2b763b1db, I get flooded with warnings like this:\n```\n./interfaces/chain.h:227:18: note: overridden virtual function is here\n    virtual void initWarning(const bilingual_str& message) = 0;\n                 ^\nIn file included from ipc/capnp/node.cpp:9:\nIn file included from ./ipc/capnp/node-types.h:11:\nIn file included from ./ipc/capnp/wallet.capnp.proxy-types.h:6:\nIn file included from ./ipc/capnp/wallet.capnp.proxy.h:7:\nIn file included from ./ipc/capnp/wallet.h:9:\n./ipc/capnp/chain.capnp.proxy.h:1414:26: warning: 'initError' overrides a member function but is not marked 'override' [-Wsuggest-override]\n    typename M35::Result initError(M35::Param<0> message);\n ```\n\nAlso a bunch of these:\n```\n/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/memory:2644:9: warning: destructor called on non-final 'mp::ProxyClient<ipc::capnp::messages::NotifyHeaderTipCallback>' that has virtual functions but non-virtual destructor [-Wdelete-non-abstract-non-virtual-dtor]\n        __get_elem()->~_Tp();\n```\n\nThe serialisation code  in `ipc/capnp/common.cpp`  look straight forward, but @achow101 can probably judge them better. Would it make sense to add tests to eae99d609c7a08fde35e723967d078904ad1cd05 with examples? I suppose we know it all works, because the end result works.\n\nIt would be nice if one can reduce the chatter for `-debug=ipc`, since it's hard to see you own actions through it, but again that can wait:\n\n```\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server recv request  #2955 Node.shutdownRequested$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server post request  #2955 {bitcoin-node-2082/0x7000083d3000 (from bitcoin-gui-2081/0x111e41600)}\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server send response #2955 Node.shutdownRequested$Results (result = false)\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server recv request  #2956 Node.getMempoolSize$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server post request  #2956 {bitcoin-node-2082/0x7000093b0000 (from bitcoin-gui-2081/b-qt-clientmodl-0x700009e4a000)}\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server send response #2956 Node.getMempoolSize$Results (result = 0)\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server recv request  #2957 Node.getMempoolDynamicUsage$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server post request  #2957 {bitcoin-node-2082/0x7000093b0000 (from bitcoin-gui-2081/b-qt-clientmodl-0x700009e4a000)}\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server send response #2957 Node.getMempoolDynamicUsage$Results (result = 0)\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server recv request  #2958 Node.getTotalBytesRecv$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server post request  #2958 {bitcoin-node-2082/0x7000093b0000 (from bitcoin-gui-2081/b-qt-clientmodl-0x700009e4a000)}\n2021-12-09T08:36:56Z [] {bitcoin-node-2082/0x10d3e0600} IPC server send response #2958 Node.getTotalBytesRecv$Results (result = 60191)\n```\n\nThough using the log files directly might help; e47c133dfc4e1b8ecec908bcb1bb535f12659205 is very handy."
  },
  {
   "t": "2021-12-17T18:49:29Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/ipc/capnp/common-types.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 765515682,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r765515682\n\n[quoted text omitted]\nThanks, switched to SpanReader which was introduced in #23653."
  },
  {
   "t": "2021-12-17T18:49:44Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/ipc/capnp/handler.capnp",
   "commit": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
   "in_reply_to": 765524867,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r765524867\n\n[quoted text omitted]\nThis is a required part of every .capnp file. It's basically a UUID that acts like a namespace for types defined in the file. It is generated by running [`capnp id`](https://capnproto.org/capnp-tool.html), and is used as a form of namespacing to ensure that even if types from different files or different projects have the same names, their binary representations won't conflict and there wont be any ambiguities in the protocol if objects from different files are serialized together.\n\nI could add a comment like `# Random unique identifier for this Cap'n Proto schema file generated by \"capnp id\"` to the top of every `.capnp` file if that would be helpful. Opting not to for now since it seems maybe too verbose like writing `/* This is an include guard to prevent this header from being included twice. */` in a C header."
  },
  {
   "t": "2021-12-17T19:07:05Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "test/functional/feature_block.py",
   "commit": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
   "in_reply_to": 433880214,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r765500474\n\n[quoted text omitted]\nI'm happy to add a specific comment if you want to suggest one, but I can't think of what would be appropriate to say here about IPC. IPC does slow things down generally, like running on a slow machine, and I think it's expected that if you run code in a new environment, you may need to adjust some parameters that didn't have enough tolerance.\n\nIt's true that there are a lot of places where we can change application code to have better performance over IPC (basically just places IPC methods are called in a repeatedly and we can reduce the number of round trips), but it wouldn't seem seem appropriate to put comments about it here in the middle of this one test."
  },
  {
   "t": "2021-12-17T21:29:33Z",
   "kind": "review",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "eef402d2913fdb9f13af73f9fbc789611cf60360",
   "text": "Rebased eef402d2913fdb9f13af73f9fbc789611cf60360 -> 8a18a12a23277c64e2af05867607ed4471b1a692 ([`pr/ipc.167`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.167) -> [`pr/ipc.168`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.168), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.167-rebase..pr/ipc.168)) due to conflicts with #19499, #23758, #23721, and #23289\n\n---\n\nre: https://github.com/bitcoin/bitcoin/pull/10102#pullrequestreview-827293918\n\nThanks for the review!\n\n[quoted text omitted]\nThanks, filed https://github.com/chaincodelabs/libmultiprocess/issues/61 to track & fix\n[quoted text omitted]\n\nThat's a good idea. I think it would be good to have tests for a few serialized types just to test the overall code path, and show how serialization code gets called. The existing functional tests do provide pretty good coverage for node <-> wallet serialization, but there is basically no coverage for the gui <-> node, gui <-> wallet serialization, so tests could help with coverage, too.\n\n[quoted text omitted]\nYeah there are a few things that could be done to improve this. I think the most promising would be to change higher level polling code to use notifications instead, which would also cut down IPC traffic and improve performance. But also there could be options to log less verbosely without repeating information, or only selectively log some IPC calls."
  },
  {
   "t": "2021-12-22T18:24:33Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Updated 8a18a12a23277c64e2af05867607ed4471b1a692 -> c9d036fbbbcaa8ed2f152e96199a1a8c4e9af61a ([`pr/ipc.168`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.168) -> [`pr/ipc.169`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.169), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.168..pr/ipc.169)) to address Sjors review comments fixing compile warnings, resolving common-types.h todos, and cleaning comon-types.h up in general\nRebased c9d036fbbbcaa8ed2f152e96199a1a8c4e9af61a -> 5b01b969d983a18c1c9b355561881e5cd2cceba9 ([`pr/ipc.169`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.169) -> [`pr/ipc.170`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.170), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.169-rebase..pr/ipc.170)) due to conflicts with #23842 and bitcoin-core/gui#459\nRebased 5b01b969d983a18c1c9b355561881e5cd2cceba9 -> 8ae8971c4add0e7d576da1ec42e78677e1a4bc29 ([`pr/ipc.170`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.170) -> [`pr/ipc.171`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.171), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.170-rebase..pr/ipc.171)) updating libmultiprocess to fix CI failure https://github.com/bitcoin/bitcoin/pull/10102/checks?check_run_id=4671391974 https://github.com/chaincodelabs/libmultiprocess/pull/65 and fixing python conflict with #23737\nRebased 8ae8971c4add0e7d576da1ec42e78677e1a4bc29 -> d1b4509566cbd04e22eb4532dbb02cfa2c7431b2 ([`pr/ipc.171`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.171) -> [`pr/ipc.172`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.172), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.171-rebase..pr/ipc.172)) due to conflicts with #23828 and #23737 which caused feature_init failures https://cirrus-ci.com/task/6140731099185152?logs=ci#L3687 https://cirrus-ci.com/task/6476143623667712?logs=ci#L4499 https://cirrus-ci.com/task/4626904987729920?logs=ci#L3459 https://cirrus-ci.com/task/4801360519495680?logs=ci#L2542 https://cirrus-ci.com/task/4852867377922048?logs=ci#L7675 https://cirrus-ci.com/task/5210661306236928?logs=ci#L5807\nRebased d1b4509566cbd04e22eb4532dbb02cfa2c7431b2 -> 69fd898bb1b598293ac54e9125809ee667b82c83 ([`pr/ipc.172`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.172) -> [`pr/ipc.173`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.173), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.172-rebase..pr/ipc.173)) due to conflicts with #23497, #24039, and #24026"
  },
  {
   "t": "2022-01-14T14:51:20Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "tACK 69fd898bb1b598293ac54e9125809ee667b82c83 modulo crash :-(\n\nI updated multiprocess and flood of warnings disappeared.\n\nPerhaps you missed something during rebase on https://github.com/bitcoin-core/gui/pull/459. I'm able to consistently crash the bitcoin-gui (or the wallet process) when generating a new Taproot address. Let me know if you can't reproduce it, in which case I'll try to get a debugger to work again on macOS.\n\nWallet log:\n```\n2022-01-14T14:45:54Z [] {bitcoin-wallet-75194/0x11292c600} IPC server recv request  #546 Wallet.setAddressReceiveRequest$Params (context = (thread = <external capability>, callbackThread = <external capability>), dest = (), id = \"8\", value = \"\\\\001\\\\000\\\\000\\\\000\\\\b\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\242\\\\214\\\\341a\\\\001\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\")\n2022-01-14T14:45:54Z [] {bitcoin-wallet-75194/0x11292c600} IPC server post request  #546 {bitcoin-wallet-75194/0x70000f53d000 (from bitcoin-node-75191/0x70000186b000 (from bitcoin-gui-75190/0x11ace6600))}\n```\n\nGui log:\n```\n2022-01-14T14:45:54Z [main] GUI: Qt has caught an exception thrown from an event handler. Throwing\nexceptions from an event handler is not supported in Qt.\nYou must not let any exception whatsoever propagate through Qt code.\nIf that is not possible, in Qt 5 you must at least reimplement\nQCoreApplication::notify() and catch all exceptions there.\n\n2022-01-14T14:45:54Z [main]\n\n************************\nEXCEPTION: N3ipc9ExceptionE\nkj::Exception: capnp/rpc.c++:2413: disconnected: Peer disconnected.\nstack: 10d1734ea 10d184242 10cd33590 10cd33ec0\nbitcoin in Runaway exception\n```\n\nI also get an exception when I quit (Command + q) the gui immediately after launch, e.g. while it's still loading wallets and such. Combined log:\n\n```\n2022-01-14T14:49:48Z [] {bitcoin-node-75387/0x10aba1600} IPC server recv request  #202 Chain.destroy$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2022-01-14T14:49:48Z [] {bitcoin-node-75387/0x10aba1600} IPC server post request  #202 {bitcoin-node-75387/0x70000b480000 (from bitcoin-gui-75385/b-qt-init-0x7000103c3000)}\n2022-01-14T14:49:48Z [] {bitcoin-node-75387/0x10aba1600} IPC server send response #202 Chain.destroy$Results ()\n2022-01-14T14:49:48Z [] {bitcoin-wallet-75389/0x70000744f000 (from bitcoin-node-75387/0x70000b480000 (from bitcoin-gui-75385/b-qt-init-0x7000103c3000))} IPC client recv Chain.destroy$Results ()\n2022-01-14T14:49:48Z [] {bitcoin-node-75387/0x10aba1600} IPC server destroyN2mp11ProxyServerIN3ipc5capnp8messages5ChainEEE\n2022-01-14T14:49:48Z [] {bitcoin-wallet-75389/0x11c07a600} IPC server send response #19 ChainClient.destroy$Results ()\n2022-01-14T14:49:48Z [] {bitcoin-node-75387/0x70000b480000 (from bitcoin-gui-75385/b-qt-init-0x7000103c3000)} IPC client recv ChainClient.destroy$Results ()\n2022-01-14T14:49:48Z [shutoff] {bitcoin-node-75387/0x70000b480000 (from bitcoin-gui-75385/b-qt-init-0x7000103c3000)} IPC client destroy N2mp11ProxyClientIN3ipc5capnp8messages4InitEEE\n2022-01-14T14:49:48Z [] {bitcoin-wallet-75389/0x11c07a600} IPC server destroyN2mp11ProxyServerIN3ipc5capnp8messages12WalletLoaderEEE\n2022-01-14T14:49:48Z [] {bitcoin-wallet-75389/0x11c07a600} IPC server: socket disconnected.\n2022-01-14T14:49:48Z [] {bitcoin-wallet-75389/0x11c07a600} IPC server destroyN2mp11ProxyServerIN3ipc5capnp8messages4InitEEE\n2022-01-14T14:49:48Z [] {bitcoin-wallet-75389/0x11c07a600} EventLoop::loop done, cancelling event listeners.\n2022-01-14T14:49:48Z [] {bitcoin-wallet-75389/0x11c07a600} EventLoop::loop bye.\n2022-01-14T14:49:48Z [shutoff] Process bitcoin-wallet pid 75389 exited with status 0\n2022-01-14T14:49:48Z [shutoff] Shutdown: done\n2022-01-14T14:49:48Z [] {bitcoin-node-75387/0x10aba1600} IPC server send response #116 Node.appShutdown$Results ()\n2022-01-14T14:49:48Z [] {bitcoin-node-75387/0x10aba1600} IPC server recv request  #203 Node.appShutdown$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2022-01-14T14:49:48Z [] {bitcoin-node-75387/0x10aba1600} IPC server post request  #203 {bitcoin-node-75387/0x70000b480000 (from bitcoin-gui-75385/b-qt-init-0x7000103c3000)}\n2022-01-14T14:49:48Z [shutoff] Shutdown: In progress...\nAssertion failed: (\"node.args\" && check), function operator(), file init.cpp, line 203.\n2022-01-14T14:49:48Z [qt-init]\n\n************************\nEXCEPTION: N3ipc9ExceptionE\nkj::Exception: capnp/rpc.c++:2413: disconnected: Peer disconnected.\nstack: 1057544ea 105765242 105221a30 105222360\nbitcoin in Runaway exception\n```"
  },
  {
   "t": "2022-01-14T14:53:59Z",
   "kind": "review_comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "path": "src/ipc/capnp/common-types.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "cdd239245c30e167a853a75ba37ace42ad5376a3 nit: it's a bit odd to introduce this here, since this commit doesn't use it."
  },
  {
   "t": "2022-02-04T20:27:28Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/ipc/capnp/common-types.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 784906151,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r784906151\n\n[quoted text omitted]\nUpdated commit message, but the CustomBuildField definition for a generic span is added here because it's the inverse of CustomReadField below for `PKHash`. `PKHash` has .data() and .size() members so it can be converted to a span, but it doesn't have a span constructor, so it can't be initialized from a span right now."
  },
  {
   "t": "2022-04-12T18:00:16Z",
   "kind": "review_comment",
   "who": "ariard",
   "assoc": "CONTRIBUTOR",
   "path": "src/net_processing.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": null,
   "text": "It's unclear to me what need to be updated in `ipc/capnp/node.cpp` in case of new members added to `CNodeStateStats` ? Also for better clarity the object wrapper could be quoted `NodeStateStats`. Here and for `CNodeStats` and `proxyType` comments."
  },
  {
   "t": "2022-04-12T18:19:24Z",
   "kind": "review",
   "who": "ariard",
   "assoc": "CONTRIBUTOR",
   "state": "COMMENTED",
   "commit": "69fd898bb1b598293ac54e9125809ee667b82c83",
   "text": "Do you still wish to land this PR in one block or are you considering to split in few chunks ?\n\nMaybe the capnp wrappers for interfaces can go first, then the `bitcoin-node` spawning stubs and the `bitcoin-wallet` ones. That said, not sure if it makes easier to assert correctness of the new IPC serialization code."
  },
  {
   "t": "2022-09-09T13:14:12Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "Checked changes since review and tested 05e236772da0ed9396ce269b5fe8384b0de8e775 on macOS 12.5.1 using depends.\n\nThe receive address labels have disappeared in GUI, probably because it can no longer see which address the payment was received on. See e.g. this descriptor wallet:\n\nIt _does_ still show labels for \"sent to\".\n\nI still get a crash when generating a taproot address in the GUI:\n\n```\n2022-09-09T13:12:37Z [main] GUI: AddressTablePriv::updateEntry: Warning: Got CT_NEW, but entry is already in model\nlibc++abi: terminating with uncaught exception of type std::out_of_range: map::at:  key not found\nlibc++abi: terminating with uncaught exception of type ipc::Exception: kj::Exception: capnp/rpc.c++:2092: disconnected: Peer disconnected.\nstack: 104d0b010 10181cab0 10181ced0\nzsh: segmentation fault  src/bitcoin-gui\n```\n\nWhen shutting down the GUI very quickly after starting, it shuts down cleanly now."
  },
  {
   "t": "2022-09-12T15:51:18Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-1241962069\n\n\ud83d\ude4c Thanks for testing! I've followed up with some fixes.\n\nTaproot crash was caused by failing to serialize `WitnessV1Taproot` variant of `CTxDestination`. I fixed the problem and added an assertion to make the cause more obvious if `CTxDestination` is expanded again. I also tested sending and receiving and fixed problems with `CScript` and `Coin` serialization that were causing similar crashes. It does look like send and receive labels are displayed correctly in the transaction list now, but I'm not sure if this is because I fixed something, or am just not reproducing the bug. if you see more problems I'd like to know, and thanks again for testing!\n\nUpdated 05e236772da0ed9396ce269b5fe8384b0de8e775 -> d0bea139b7a4a158eea6fec62285646a826a62b9 ([`pr/ipc.176`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.176) -> [`pr/ipc.177`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.177), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.176..pr/ipc.177)) with fixes"
  },
  {
   "t": "2022-09-12T15:54:32Z",
   "kind": "review_comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "path": "src/net_processing.h",
   "commit": "c1e070d76166f1230758bdcf7a4463008eea46d9",
   "in_reply_to": 848720128,
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#discussion_r848720128\n\n[quoted text omitted]\nThanks! Updated the comments to mention specific structs by name, and deleted the part about `ipc/capnp/node.cpp` (the code that this was referring to was automated away and no longer exists)."
  },
  {
   "t": "2022-09-13T07:04:35Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "@ryanofsky linter complains: `Unrecognized address type. Serialization not implemented for`"
  },
  {
   "t": "2022-09-13T19:21:50Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThanks, fixed now.\n\nUpdated d0bea139b7a4a158eea6fec62285646a826a62b9 -> d6277e015c2cca0f6e890989024b7edef52da1cb ([`pr/ipc.177`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.177) -> [`pr/ipc.178`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.178), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.177..pr/ipc.178)) fixing Unrecognized address type strprintf"
  },
  {
   "t": "2022-09-14T12:21:28Z",
   "kind": "comment",
   "who": "jonatack",
   "assoc": "MEMBER",
   "text": "Is this the current multiprocess pull to review? (If yes, will review. It builds cleanly for me. Thanks!)"
  },
  {
   "t": "2022-09-14T16:18:18Z",
   "kind": "comment",
   "who": "JeremyRubin",
   "assoc": "CONTRIBUTOR",
   "text": "@jonatack also have been curious about this -- it might make sense to open a new PR for it since GH's UX kinda craps the bed on being able to look at other's reviews once it's like this"
  },
  {
   "t": "2022-09-14T21:12:53Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nYes this is working, and up to date, and split up into commits that should make it easier to review. I think all the information needed to review is covered or linked to in the PR description, and it's safe to ignore the older comment threads. But I can open a new PR if github's UX makes it difficult to review or comment on this one."
  },
  {
   "t": "2022-09-15T08:30:55Z",
   "kind": "comment",
   "who": "aureleoules",
   "assoc": "CONTRIBUTOR",
   "text": "@JeremyRubin if that helps, I wrote a script to expand PR comments: https://gist.github.com/aureleoules/6bafcf3e255bfd528ef4e3d034f87dbc. Takes a bit of time to run on this PR though."
  },
  {
   "t": "2022-09-20T17:37:57Z",
   "kind": "review",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "a1b6968c4c2adb978a04386a2154f3f1b32b711b",
   "text": "Updated ee5825aa8eb6bcce60db591b3c85c79253a76a31 -> a1b6968c4c2adb978a04386a2154f3f1b32b711b ([`pr/ipc.179`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.179) -> [`pr/ipc.180`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.180), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.179..pr/ipc.180)) just updating some comments as suggested"
  },
  {
   "t": "2022-09-26T16:40:50Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased a1b6968c4c2adb978a04386a2154f3f1b32b711b -> d8a971115bcd058606d5185fcc5be46c82bb3b2a ([`pr/ipc.180`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.180) -> [`pr/ipc.181`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.181), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.180-rebase..pr/ipc.181)) due to silent conflict with #25737\nSquashed d8a971115bcd058606d5185fcc5be46c82bb3b2a -> f8d5af9518b02ee017a90a6e5aede3dff8e62a00 ([`pr/ipc.181`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.181) -> [`pr/ipc.182`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.182), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.181..pr/ipc.182))"
  },
  {
   "t": "2022-10-17T19:14:26Z",
   "kind": "comment",
   "who": "achow101",
   "assoc": "MEMBER",
   "text": "libmultiprocess seems like it would better fit as a subtree (a la leveldb, secp256k1, etc.) rather than a dependency given that it is slightly more difficult to install than all of our other dependencies. It also should probably be moved under the bitcoin-core org."
  },
  {
   "t": "2022-10-25T11:32:04Z",
   "kind": "comment",
   "who": "jamesob",
   "assoc": "CONTRIBUTOR",
   "text": "Concept ACK, will review this week."
  },
  {
   "t": "2023-01-21T09:35:13Z",
   "kind": "comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "text": "Not sure if related or not:\n\n```\n  File \"/tmp/cirrus-ci-build/ci/scratch/build/bitcoin-i686-pc-linux-gnu/test/functional/wallet_backup.py\", line 217, in run_test\n    assert_equal(res0_rpc.getbalance(), balance0)\n  File \"/tmp/cirrus-ci-build/ci/scratch/build/bitcoin-i686-pc-linux-gnu/test/functional/test_framework/util.py\", line 56, in assert_equal\n    raise AssertionError(\"not(%s)\" % \" == \".join(str(arg) for arg in (thing1, thing2) + args))\nAssertionError: not(47.89978700 == 46.19956280)\n```\n\nhttps://cirrus-ci.com/task/4576796809625600"
  },
  {
   "t": "2023-02-13T17:37:30Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-1399216846\n\n[quoted text omitted]\nYes, the IPC serialization code wasn't setting the `interfaces::FoundBlock.found` field, which caused wallets not to sync correctly after #26679. (The serialization bug present before #26679, but didn't have an effect until new code tried to use the missing field.)\n\n---\n\nRebased f8d5af9518b02ee017a90a6e5aede3dff8e62a00 -> 05e44e7fd41b32d57379bb6a87c4bebb4a166f9c ([`pr/ipc.182`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.182) -> [`pr/ipc.183`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.183), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.182-rebase..pr/ipc.183)) due to conflicts with #25957, #26752, #26672, and #26238\nRebased 05e44e7fd41b32d57379bb6a87c4bebb4a166f9c -> 5e90c75de0d13aedb7e7c06ebe5aa55b11bb398d ([`pr/ipc.183`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.183) -> [`pr/ipc.184`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.184), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.183-rebase..pr/ipc.184)) fixing wallet_backup.py CI failure https://cirrus-ci.com/task/4576796809625600?logs=ci#L2695 caused by IPC FoundBlock bug exposed by #26679, and fixing wallet_fast_rescan.py failure caused by silent conflict with #25957\nRebased 5e90c75de0d13aedb7e7c06ebe5aa55b11bb398d -> 80926e1b4e63d241ac8b4922b2a2a3204a9c5859 ([`pr/ipc.184`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.184) -> [`pr/ipc.185`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.185), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.184-rebase..pr/ipc.185)) to fix silent conflict with bitcoin-core/gui#697"
  },
  {
   "t": "2023-04-28T18:10:23Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "Building c86da22175e5bbe40e03624689bd3d4cc1508ba1 fails when configured without a wallet, but with gui.\n\nIntel macOS 13.3.1 with capnp 0.10.3 via homebrew and libmultiprocess 1af83d15239ccfa7e47b8764029320953dd7fdf1.\n\n```\n./configure --enable-suppress-external-warnings  --enable-c++20  --with-gui --enable-multiprocess --disable-bench --disable-tests --disable-external-signer --disable-fuzz-binary --disable-wallet\n...\nmake\n...\n  CXXLD    bitcoin-gui\nUndefined symbols for architecture x86_64:\n  \"wallet::CCoinControl::CCoinControl()\", referenced from:\n      void mp::PassField<mp::Accessor<mp::wallet_fields::CoinControl, 17>, wallet::CCoinControl const&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Wallet>, capnp::CallContext<ipc::capnp::messages::Wallet::CreateTransactionParams, ipc::capnp::messages::Wallet::CreateTransactionResults>>, mp::ServerField<1, mp::Accessor<mp::wallet_fields::Sign, 1>, mp::ServerField<1, mp::Accessor<mp::wallet_fields::ChangePos, 3>, mp::ServerField<1, mp::Accessor<mp::wallet_fields::Fee, 2>, mp::ServerRet<mp::Accessor<mp::wallet_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<bool, int&, long long&>, std::__1::vector<wallet::CRecipient, std::__1::allocator<wallet::CRecipient>> const&>(mp::Priority<0>, mp::TypeList<wallet::CCoinControl const&>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Wallet>, capnp::CallContext<ipc::capnp::messages::Wallet::CreateTransactionParams, ipc::capnp::messages::Wallet::CreateTransactionResults>>&, mp::ServerField<1, mp::Accessor<mp::wallet_fields::Sign, 1>, mp::ServerField<1, mp::Accessor<mp::wallet_fields::ChangePos, 3>, mp::ServerField<1, mp::Accessor<mp::wallet_fields::Fee, 2>, mp::ServerRet<mp::Accessor<mp::wallet_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<bool, int&, long long&>&&, std::__1::vector<wallet::CRecipient, std::__1::allocator<wallet::CRecipient>> const&) in libbitcoin_ipc.a(libbitcoin_ipc_a-wallet.capnp.proxy-server.o)\n...\n```\n\nWith the wallet enabled it builds fine (and connecting my GUI over SSH to a daemon with the followup PR still works great)."
  },
  {
   "t": "2023-05-05T10:51:03Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "I was able to reproduce the crash I found [here](https://github.com/bitcoin/bitcoin/pull/19461#issuecomment-1536056897) using only this PR.\n\nDetails: running Ubuntu 23.04, libmultiprocess at fc28a48f01af9730be3b49585e718e11c5eea0c5 and capnproto 0.10.4 compiled from source (because of https://github.com/chaincodelabs/libmultiprocess/issues/68#issuecomment-1527856219).\n\n```\n./configure --enable-werror --enable-suppress-external-warnings --without-gui --enable-multiprocess\n\u2026\nsrc/bitcoin-node\n\u2026\n\n2023-05-05T10:45:36Z New outbound peer connected: version: 70016, blocks=788360, peer=1 (outbound-full-relay)\n^C2023-05-05T10:45:41Z [rpc] Interrupting HTTP RPC server\n2023-05-05T10:45:41Z [rpc] Interrupting RPC\n2023-05-05T10:45:41Z tor: Thread interrupt\n2023-05-05T10:45:41Z dnsseed thread exit\n2023-05-05T10:45:41Z addcon thread exit\n2023-05-05T10:45:41Z torcontrol thread exit\n2023-05-05T10:45:41Z Shutdown: In progress...\n2023-05-05T10:45:41Z [rpc] Stopping HTTP RPC server\n2023-05-05T10:45:41Z [rpc] Stopping RPC\n2023-05-05T10:45:41Z [rpc] RPC stopped.\nterminate called after throwing an instance of 'ipc::Exception'\n  what():  kj::Exception: kj/async-io-unix.c++:498: disconnected: ::read(fd, buffer, maxBytes): Connection reset by peer\nstack: 7f689c7ae644 7f689c7bdeab 7f689c74d1b5 7f689c7a4db0 7f689c91e720 7f689c917c20 7f689c91bdf0 7f689c97fb30 7f689c97a220 7f689c96fcc0 7f689c96b800 7f689c95b5d0 7f689c95c084 7f689c958610 55678261ed80 556782623610\nAborted (core dumped)\n```\n\nSo it happens without any client connecting, or even listening for one. I sanity checked that master at 6c7ebcc14b7908a67a8f8764b398e76c8fb4fe8b works fine when configured with `--enable-multiprocess`.\n\nRunning `bitcoind` does not have this issue."
  },
  {
   "t": "2023-05-08T13:44:52Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "Ran the same commit again with `-debug=ipc` to get more useful log info. ([log](https://gist.github.com/Sjors/c2b227d5c7d210524b9ca7d78b93c2ed))\n\nI also tried disabling the indexes to simplify the setup, but that didn't prevent the issue.\n\nI also tried running with `-listen=0` and `-connect=0` so that it had no peers, but that made no difference either."
  },
  {
   "t": "2023-05-11T22:40:12Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Thanks @Sjors. I've tried a lot of things and have not been able to reproduce the crash exactly, but the log you posted was  helpful, and I could reproduce similar error output by adding an extra call from bitcoin-node to bitcoin-wallet that sleeps in bitcoin-wallet, and then manual killing `bitcoin-wallet` process. When I do that I see similar `kj::Exception` errors on the bitcoin-node main thread and bitcoin-node b-capnp-loop thread like in your log.  In your log the exact errors are `kj/async-io-unix.c++:498: disconnected: ::read(fd, buffer, maxBytes): Connection reset by peer` while in my case they are `kj::Exception: capnp/rpc.c++:2421: disconnected: Peer disconnected.` But maybe this is a macos vs linux platform difference, because otherwise the errors seem identical.\n\nThe upshot of this is that I think somehow `bitcoin-wallet` process is crashing on shutdown and causing the `bitcoin-node` unexpected network disconnect errors. Could debug this by:\n\n- Seeing if `~/.bitcoin/debug.log.wallet` has more information\n- Attaching to `bitcoin-wallet` process with GDB before it crashes with `gdb src/bitcoin-wallet <bitcoin-wallet pid>`\n- Running `bitcoin-node` under GDB to see what wallet method it is calling when the wallet crashes. From the IPC log it seems to be calling ChainClient.flush, but if you run `gdb -ex 'catch throw' -ex run --args src/bitcoin-node -debug=ipc` it might be possible to get a more complete stack trace\n\nI should look more into WalletLoaderImpl::flush method to see what that could be doing to cause a crash, too."
  },
  {
   "t": "2023-09-19T05:32:47Z",
   "kind": "comment",
   "who": "atangangabbieian4",
   "assoc": "NONE",
   "text": "[quoted text omitted]"
  },
  {
   "t": "2023-09-20T00:50:40Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 1e5d7da989c6a6cab843472675d409bbae34ac3a -> 1ea5d5964bb38f817fb629df0d5f20dfb4d938f1 ([`pr/ipc.190`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.190) -> [`pr/ipc.191`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.191), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.190-rebase..pr/ipc.191)) due to various conflicts"
  },
  {
   "t": "2023-09-21T10:55:00Z",
   "kind": "comment",
   "who": "maflcko",
   "assoc": "MEMBER",
   "text": "CI looks a bit red"
  },
  {
   "t": "2023-09-21T11:37:52Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nThanks. I need to do some more work. There is a problem with the util::Result workaround 79c557f97e096f2a393d35e9eafd2bf13da201be. Also a silent merge conflict with https://github.com/bitcoin-core/gui/pull/738"
  },
  {
   "t": "2023-10-20T16:40:20Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased d898e962d7f7a3a084158530ae0ec135212cd872 -> f4f3d7b029cdb9d9d6b8ed2e5cf92313f76a3c69 ([`pr/ipc.199`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.199) -> [`pr/ipc.200`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.200), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.199-rebase..pr/ipc.200)) due to conflicts with #27596, #28508, and #28556"
  },
  {
   "t": "2023-11-21T19:39:44Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 18d382f4f8a74612ae0e91efd8a2b83bb665e081 -> 87e3a3b694abc4e0cf8241e31905d3f604c611cf ([`pr/ipc.201`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.201) -> [`pr/ipc.202`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.202), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.201-rebase..pr/ipc.202)) on top of base PR #28921, also fixing conflicts with #28438 and #28503\nRebased 87e3a3b694abc4e0cf8241e31905d3f604c611cf -> 7ba123f1b47a4a790370c9a5975b1e0b4026a241 ([`pr/ipc.202`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.202) -> [`pr/ipc.203`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.203), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.202-rebase..pr/ipc.203)) on top of base PR #28929 to simplify serialization code"
  },
  {
   "t": "2024-05-02T20:29:35Z",
   "kind": "comment",
   "who": "willcl-ark",
   "assoc": "MEMBER",
   "text": "I've been using this in a side-project and noticed some unintended behaviour, which could be my system; if I `make distclean` (removing the generated files) and then `make -j16` the build fails as it can't find the built artefacts. Running plain `make` works fine every time, and _sometimes_ a low job number works too.\n\nThe Makefile [appears](https://github.com/ryanofsky/bitcoin/blob/56ef459b573461087fbe4f39d9b0a7108936335f/src/Makefile.am#L1083-L1098) (to me) to have the dependencies listed correctly, so I'm not entirely sure what's going wrong, but just thought I'd report here in case anyone else had a similar issue. Also, likely not worth actually fixing now before a move to CMake."
  },
  {
   "t": "2024-05-24T10:06:09Z",
   "kind": "comment",
   "who": "willcl-ark",
   "assoc": "MEMBER",
   "text": "I noticed some other unexpected behaviour when interacting with `bitcoin-node` from an external process which might be of interest to investigate...\n\nI made a (malformed) call to `MakeWalletLoader`, not including GlobalArgs, which cause the node to shut down whilst it had an open lock on another (default loaded) wallet. This resulted in preventing this wallet from being re-opened again at next startup.\n\nI wonder whether a malformed call to `MakeWalletLoader` should shut down the node at all, but if it should, then it seems like (perhaps) we should take care to close opened wallets more carefully?\n\nLog\n\n```log\n2024-05-22T13:49:06Z [ipc] {bitcoin-wallet-3127478/bitcoin-wallet-3127478} IPC server post request  #3075 {bitcoin-wallet-3127478/bitcoin-wallet-3127902 (from bitcoin-node-3127476/b-scheduler-3127477)}\n2024-05-22T13:49:06Z [ipc] {bitcoin-wallet-3127478/bitcoin-wallet-3127478} IPC server send response #3075 ChainNotifications.transactionAddedToMempool$Results ()\n2024-05-22T13:49:06Z [ipc] {bitcoin-node-3127476/b-scheduler-3127477} IPC client recv ChainNotifications.transactionAddedToMempool$Results ()\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server recv request  #201 Init.construct$Params ()\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server send response #201 Init.construct$Results (threadMap = <external capability>)\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server recv request  #202 Init.makeEcho$Params (context = (thread = <external capability>))\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server post request  #202 {bitcoin-node-3127476/b-capnp-loop-3210934 (from )}\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server send response #202 Init.makeEcho$Results (result = <external capability>)\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server recv request  #203 Echo.echo$Params (context = (thread = <external capability>), echo = \"Hello, world!\")\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server post request  #203 {bitcoin-node-3127476/b-capnp-loop-3210934 (from )}\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server send response #203 Echo.echo$Results (result = \"Hello, world!\")\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server recv request  #204 Init.makeChain$Params (context = (thread = <external capability>))\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server post request  #204 {bitcoin-node-3127476/b-capnp-loop-3210934 (from )}\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server send response #204 Init.makeChain$Results (result = <external capability>)\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server recv request  #205 Chain.getHeight$Params (context = (thread = <external capability>))\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server post request  #205 {bitcoin-node-3127476/b-capnp-loop-3210934 (from )}\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server send response #205 Chain.getHeight$Results (result = 196713, hasResult = true)\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server recv request  #206 Chain.getSettingsList$Params (context = (thread = <external capability>))\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server post request  #206 {bitcoin-node-3127476/b-capnp-loop-3210934 (from )}\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server send response #206 Chain.getSettingsList$Results (result = [])\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server recv request  #207 Init.makeWalletLoader$Params (context = (thread = <external capability>))\n2024-05-22T13:49:15Z [ipc] {bitcoin-node-3127476/b-capnp-loop-3127479} IPC server post request  #207 {bitcoin-node-3127476/b-capnp-loop-3210934 (from )}\nbitcoin-node: common/args.cpp:728: void ArgsManager::SetConfigFilePath(fs::path): Assertion `!m_config_path' failed.\n```\n\nNote, I haven't tried to reproduce this, but the above is what I think happened."
  },
  {
   "t": "2024-06-10T17:33:26Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-2129147575\n\n[quoted text omitted]\nThanks for reporting this. I'm confused how it happens because `MakeWalletLoader` should be called from the node process (via `Init::makeWalletLoader`method) and it should run in the wallet process. So if it crashes, it should kill the wallet process, not the node process. If you can post more details about what you found at https://github.com/chaincodelabs/libmultiprocess/issues/new I can look into it more.\n\nIn general, when interface methods are called with invalid parameters they can crash, because most interfaces are just thin wrappers around C++ functions designed for internal use, and many of these rely on asserts. This should not really be an issue for this PR, since this PR is just using an anonymous socketpair and not accepting external connections, but it could be a concern for #19460 which adds code to accept connections on a `<datadir>/sockets/node.sock` unix socket. It would be better to return errors instead of asserting when invalid parameters are passed, but implementing that will require writing more checks for bad parameters.\n\n[quoted text omitted]\nBy design, if the node process gets disconnected from the wallet process for any reason, all the objects in the wallet process which were owned by the node should be destroyed in [`mp::Connection` destructor](https://github.com/chaincodelabs/libmultiprocess/blob/e29f74e8ff00554832a941b4952999daac693ff3/src/mp/proxy.cpp#L97-L101).\n\nWallets should be among the objects destroyed because they are owned by `WalletContext`, which is owned by `WalletLoaderImpl`, which is referenced and owned by the node process. It is possible there is a bug here, though so if you want to post an issue to the libmultiprocess github project so I can look into it more, that would be helpful. The wallet process should also completely exit after this happens because the [`m_num_clients`](https://github.com/chaincodelabs/libmultiprocess/blob/e29f74e8ff00554832a941b4952999daac693ff3/include/mp/proxy-io.h#L190) reference count should go to 0."
  },
  {
   "t": "2024-06-13T18:55:01Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-2158932014\n\n[quoted text omitted]\nTo follow up on this, I actually found two separate bugs which were causing wallet objects not to be destroyed when the node process is killed. Coincidentally a new test was added recently in #26606 which reproduces this problem, because it actually tests [killing the node process](https://github.com/bitcoin/bitcoin/blob/a7bc9b76e73f04dfe4d6ba42033fe38659090e8b/test/functional/tool_wallet.py#L535). So I could fix the bugs by fixing the test. The test led to the to the following CI failure: https://cirrus-ci.com/task/4549686449668096?logs=ci#L2282 where the wallet process hangs after the node process is killed, and there is an error trying to load the wallet afterwards because the wallet directory is still locked.\n\nThe hang was caused by two separate deadlocks. One deadlock was happening because the `ProxyServerCustom<WalletLoader>` class which contains the CScheduler used by the wallet when the wallet in running in multiprocess mode (in single process mode the wallet shares the node's scheduler object) was trying to shut down the scheduler in its own destructor, which is called from the IPC EventLoop thread. This did not work because shutting down the scheduler required waiting for it, which would deadlock if the scheduler thread was calling any IPC method, such as `chain().isReadyToBroadcast()`, because calling IPC methods requires the EventLoop not to be busy. This is fixed in the latest push 3f12b4362c1b822835889151f6cd54c4829cf3ad -> c023ffefec05b94a00997d27179ea06a18edb7ea ([`pr/ipc.207`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.207) -> [`pr/ipc.208`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.208), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.207..pr/ipc.208)). I also added some documentation about safer ways to destroy custom state in https://github.com/chaincodelabs/libmultiprocess/commit/537c645652cb98a641bb7e40ff541c89bf4ec471.\n\nThe second deadlock happened because wallet uses std::shared_ptr and waits for reference counts to reach 0 on final shutdown, so is sensitive to order objects are destroyed in. In this case, when the node process got killed, the wallet process tried to destroy `WalletLoader` object before destroying `Chain::Notification` objects, which deadlocked because WalletLoader destructor would wait for `CWallet` reference counts to be 0, which would never happen while `Chain::Notification` references to the wallet still existed. This was fixed in https://github.com/chaincodelabs/libmultiprocess/pull/101 by tweaking libmultiprocess library to destroy objects in LIFO order instead of FIFO order when connections are broken, which is still somewhat fragile, but fixes this problem and should work better in most cases."
  },
  {
   "t": "2024-06-14T13:18:58Z",
   "kind": "comment",
   "who": "willcl-ark",
   "assoc": "MEMBER",
   "text": "Wow, sounds sounds like exactly the bug I hit @ryanofsky, great debugging; sorry I couldn't provide any followup for you sooner.\n\nI'll rebase my `ipc + -ipcconnect` branch on this one, update my `libmultiprocess` installation, and see how it goes from there.\n\nThanks!"
  },
  {
   "t": "2024-12-03T21:08:25Z",
   "kind": "comment",
   "who": "darosior",
   "assoc": "MEMBER",
   "text": "Not sure if it's worth sharing here but hey what's an 1300th comment.\n\nRunning `bitcoin-node` from https://github.com/bitcoin/bitcoin/pull/29409 with commits `1045047a73a0b3ae15647ab5bf1829d27141b7cd`..`9ca113f326fc9ba2f661595283f4aef390df984d` from this PR cherry-picked on top.\n\nSimply compiled with `cmake -B multiprocbuild/ -DWITH_MULTIPROCESS=ON && cmake --build multiprocbuild/ -j20`. (Although i did have to apply the following diff to be able to compile on Debian stable.)\n\nExpand diff to compile on Debian stable\n\n```patch\ndiff --git a/CMakeLists.txt b/CMakeLists.txt\nindex 6ae988ac90..ca0880b3cd 100644\n--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@@ -23,6 +23,7 @@ set(CLIENT_VERSION_BUILD 0)\n set(CLIENT_VERSION_RC 0)\n set(CLIENT_VERSION_IS_RELEASE \"false\")\n set(COPYRIGHT_YEAR \"2024\")\n+set(FOUND_LIBATOMIC TRUE)\n\n # During the enabling of the CXX and CXXOBJ languages, we modify\n # CMake's compiler/linker invocation strings by appending the content\ndiff --git a/src/test/ipc_test.cpp b/src/test/ipc_test.cpp\nindex 91eba9214f..af37434980 100644\n--- a/src/test/ipc_test.cpp\n+++ b/src/test/ipc_test.cpp\n@@ -62,7 +62,7 @@ void IpcPipeTest()\n\n         auto connection_client = std::make_unique<mp::Connection>(loop, kj::mv(pipe.ends[0]));\n         auto foo_client = std::make_unique<mp::ProxyClient<gen::FooInterface>>(\n-            connection_client->m_rpc_system.bootstrap(mp::ServerVatId().vat_id).castAs<gen::FooInterface>(),\n+            connection_client->m_rpc_system->bootstrap(mp::ServerVatId().vat_id).castAs<gen::FooInterface>(),\n             connection_client.get(), /* destroy_connection= */ false);\n         foo_promise.set_value(std::move(foo_client));\n         disconnect_client = [&] { loop.sync([&] { connection_client.reset(); }); };\n```\n\nJust starting `bitcoin-node` and stopping it with a `SIGINT` results in the following crash:\n```\n2024-12-03T20:49:29Z [ipc] {bitcoin-node-69380/bitcoin-node-69380} IPC client exception kj::Exception: kj/async-io-unix.c++:323: disconnected: ::read(fd, buffer, maxBytes): Connection reset by peer\nstack: 7f53be1b41d4 7f53be1bf95b 7f53be15a911 7f53be1ab560 7f53be3147f0 7f53be30e0a0 7f53be3120f0 7f53be370bf0 7f53be36b6d0 7f53be361de0 7f53be35bea0 7f53be34e160 7f53be34ebc4 7f53be34b7a0 562975c42300 562975c4c8c0\n2024-12-03T20:49:29Z [ipc] kj::Exception: kj/async-io-unix.c++:323: disconnected: ::read(fd, buffer, maxBytes): Connection reset by peer\nstack: 7f53be1b41d4 7f53be1bf95b 7f53be15a911 7f53be1ab560 7f53be3147f0 7f53be30e0a0 7f53be3120f0 7f53be370bf0 7f53be36b6d0 7f53be361de0 7f53be35bea0 7f53be34e160 7f53be34ebc4 7f53be34b7a0 562975c42300 562975c4c8c0\n2024-12-03T20:49:29Z [ipc] {bitcoin-node-69380/b-capnp-loop-69383} IPC client: unexpected network disconnect.\nterminate called after throwing an instance of 'ipc::Exception'\n  what():  kj::Exception: kj/async-io-unix.c++:323: disconnected: ::read(fd, buffer, maxBytes): Connection reset by peer\nstack: 7f53be1b41d4 7f53be1bf95b 7f53be15a911 7f53be1ab560 7f53be3147f0 7f53be30e0a0 7f53be3120f0 7f53be370bf0 7f53be36b6d0 7f53be361de0 7f53be35bea0 7f53be34e160 7f53be34ebc4 7f53be34b7a0 562975c42300 562975c4c8c0\nAborted\n```\n\nThe command i used to start it is `./multiprocbuild/src/bitcoin-node -regtest -ipcbind=unix -debug=ipc`.\n\nWith a simple hacked up client which constructs an `Init` interface and stops, the crash becomes (still only when stopping `bitcoin-node`):\n```\nterminate called after throwing an instance of 'std::logic_error'\n  what():  clientInvoke call made after disconnect\nAborted\n```\n\nNow if the client requested a thread before stopping, this becomes a segfault (still only when stopping `bitcoin-node`):\n```\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/bitcoin-node-70275} IPC client exception kj::Exception: kj/async-io-unix.c++:532: disconnected: ::writev(fd, iov.begin(), iov.size()): Broken pipe; iovTotal = 176; iov.size() = 2\nstack: 7f70b535079f 7f70b5350cad 7f70b54a9544 7f70b54a9732 7f70b54a978a 7f70b550825d 7f70b5507180 7f70b55016d0 7f70b54f7de0 7f70b54f1ea0 7f70b54e4160 7f70b54e4bc4 7f70b54e17a0 56041e62f300 56041e6398c0\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC client: unexpected network disconnect.\nSegmentation fault\n```\n\nHere is some logs.\n\nLogs for just starting and stopping `bitcoin-node`\n\n```\n2024-12-03T21:06:40Z Bitcoin Core version v28.99.0-8e2a8fa6a6f4-dirty (release build)\n2024-12-03T21:06:40Z Script verification uses 15 additional threads\n2024-12-03T21:06:40Z Using the 'x86_shani(1way,2way)' SHA256 implementation\n2024-12-03T21:06:40Z Using RdSeed as an additional entropy source\n2024-12-03T21:06:40Z Using RdRand as an additional entropy source\n2024-12-03T21:06:40Z Default data directory /home/darosior/.bitcoin\n2024-12-03T21:06:40Z Using data directory /home/darosior/.bitcoin/regtest\n2024-12-03T21:06:40Z Config file: /home/darosior/.bitcoin/bitcoin.conf (not found, skipping)\n2024-12-03T21:06:40Z Command-line arg: debug=\"ipc\"\n2024-12-03T21:06:40Z Command-line arg: ipcbind=\"unix\"\n2024-12-03T21:06:40Z Command-line arg: regtest=\"\"\n2024-12-03T21:06:40Z Using at most 125 automatic connections (1024 file descriptors available)\n2024-12-03T21:06:40Z scheduler thread start\n2024-12-03T21:06:40Z [ipc] Process bitcoin-wallet pid 70740 launched\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client first request from current thread, constructing waiter\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client send Init.construct$Params (threadMap = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client recv Init.construct$Results (threadMap = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client send Init.makeWalletLoader$Params (context = (thread = <external capability>, callbackThread = <external capability>), globalArgs = (settings = (forcedSettings = [(key = \"server\", value = \"\\\\\"1\\\\\"\")], commandLineOptions = [(key = \"debug\", value = [\"\\\\\"ipc\\\\\"\"]), (key = \"ipcbind\", value = [\"\\\\\"unix\\\\\"\"]), (key = \"regtest\", value = [\"\\\\\"\\\\\"\"])],\nrwSettings = [], roConfig = []), configPath = \"/home/darosior/.bitcoin/bitcoin.conf\"), chain = <external capability>)\n2024-12-03T21:06:40Z Using the 'x86_shani(1way,2way)' SHA256 implementation\n2024-12-03T21:06:40Z Using RdSeed as an additional entropy source\n2024-12-03T21:06:40Z Using RdRand as an additional entropy source\n2024-12-03T21:06:40Z Default data directory /home/darosior/.bitcoin\n2024-12-03T21:06:40Z Using data directory /home/darosior/.bitcoin/regtest\n2024-12-03T21:06:40Z Config file: /home/darosior/.bitcoin/bitcoin.conf (not found, skipping)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server send response #2 Init.makeWalletLoader$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client recv Init.makeWalletLoader$Results (result = <external capability>)\n2024-12-03T21:06:40Z Listening for IPC requests on address unix:/home/darosior/.bitcoin/regtest/node.sock\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client send ChainClient.registerRpcs$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server recv request  #3 ChainClient.registerRpcs$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server post request  #3 {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)}\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"rawtransactions\", name = \"fundrawtransaction\", actor = <external capability>, argNames = [(name = \"hexstring\", namedOnly = false), (name = \"add_inputs\", namedOnl\ny = true), (name = \"include_unsafe\", namedOnly = true), (name = \"minconf\", namedOnly = true), (name = \"maxconf\", namedOnly = true), (name = \"changeAddress\", namedOnly = true), (name = \"changePosition\", namedOnly = true), (name = \"change_type\", namedOnly = true), (name = \"includeWatching\", namedOnly = true), (name = \"lockUnspents\", namedOnly = true), (name = \"fee_rate\", namedOnly = true), (name = \"feeRate\", namedOnly = tr\nue), (name = \"subtractFeeFromOutputs\", namedOnly = true), (name = \"input_weights\", namedOnly = true), (name = \"max_tx_weight\", namedOnly = true), (name = \"conf_target\", namedOnly = true), (name = \"estimate_mode\", namedOnly = true), (name = \"replaceable\", namedOnly = true), (name = \"solving_data\", namedOnly ...\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #1 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"rawtransactions\", name = \"fundrawtransaction\", actor = <external capability>, argNames = [(name = \"hexstring\", namedOnly = false), (name = \"add_inputs\", namedOnly = true), (name = \"include_unsafe\",\nnamedOnly = true), (name = \"minconf\", namedOnly = true), (name = \"maxconf\", namedOnly = true), (name = \"changeAddress\", namedOnly = true), (name = \"changePosition\", namedOnly = true), (name = \"change_type\", namedOnly = true), (name = \"includeWatching\", namedOnly = true), (name = \"lockUnspents\", namedOnly = true), (name = \"fee_rate\", namedOnly = true), (name = \"feeRate\", namedOnly = true), (name = \"subtractFeeFromOutputs\"\n, namedOnly = true), (name = \"input_weights\", namedOnly = true), (name = \"max_tx_weight\", namedOnly = true), (name = \"conf_target\", namedOnly = true), (name = \"estimate_mode\", namedOnly = true), (name = \"replaceable\", namedOnly = true), (name = \"solving_data\", namedOnly ...\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #1 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #1 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"abandontransaction\", actor = <external capability>, argNames = [(name = \"txid\", namedOnly = false)], uniqueId = 93936261762176))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #2 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"abandontransaction\", actor = <external capability>, argNames = [(name = \"txid\", namedOnly = false)], uniqueId = 93936261762176))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #2 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #2 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"abortrescan\", actor = <external capability>, argNames = [], uniqueId = 93936261743392))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #3 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"abortrescan\", actor = <external capability>, argNames = [], uniqueId = 93936261743392))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #3 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #3 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"addmultisigaddress\", actor = <external capability>, argNames = [(name = \"nrequired\", namedOnly = false), (name = \"keys\", namedOnly = false), (na\nme = \"label\", namedOnly = false), (name = \"address_type\", namedOnly = false)], uniqueId = 93936261211840))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #4 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"addmultisigaddress\", actor = <external capability>, argNames = [(name = \"nrequired\", namedOnly = false), (name = \"keys\", namedOnly = false), (name = \"label\", namedOnly = false), (na\nme = \"address_type\", namedOnly = false)], uniqueId = 93936261211840))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #4 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #4 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"backupwallet\", actor = <external capability>, argNames = [(name = \"destination\", namedOnly = false)], uniqueId = 93936261285808))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #5 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"backupwallet\", actor = <external capability>, argNames = [(name = \"destination\", namedOnly = false)], uniqueId = 93936261285808))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #5 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #5 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"bumpfee\", actor = <external capability>, argNames = [(name = \"txid\", namedOnly = false), (name = \"conf_target\", namedOnly = true), (name = \"fee_\nrate\", namedOnly = true), (name = \"replaceable\", namedOnly = true), (name = \"estimate_mode\", namedOnly = true), (name = \"outputs\", namedOnly = true), (name = \"original_change_index\", namedOnly = true), (name = \"options\", namedOnly = false)], uniqueId = 93936261561168))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #6 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"bumpfee\", actor = <external capability>, argNames = [(name = \"txid\", namedOnly = false), (name = \"conf_target\", namedOnly = true), (name = \"fee_rate\", namedOnly = true), (name = \"re\nplaceable\", namedOnly = true), (name = \"estimate_mode\", namedOnly = true), (name = \"outputs\", namedOnly = true), (name = \"original_change_index\", namedOnly = true), (name = \"options\", namedOnly = false)], uniqueId = 93936261561168))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #6 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #6 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"psbtbumpfee\", actor = <external capability>, argNames = [(name = \"txid\", namedOnly = false), (name = \"conf_target\", namedOnly = true), (name = \"\nfee_rate\", namedOnly = true), (name = \"replaceable\", namedOnly = true), (name = \"estimate_mode\", namedOnly = true), (name = \"outputs\", namedOnly = true), (name = \"original_change_index\", namedOnly = true), (name = \"options\", namedOnly = false)], uniqueId = 93936261561328))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #7 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"psbtbumpfee\", actor = <external capability>, argNames = [(name = \"txid\", namedOnly = false), (name = \"conf_target\", namedOnly = true), (name = \"fee_rate\", namedOnly = true), (name =\n \"replaceable\", namedOnly = true), (name = \"estimate_mode\", namedOnly = true), (name = \"outputs\", namedOnly = true), (name = \"original_change_index\", namedOnly = true), (name = \"options\", namedOnly = false)], uniqueId = 93936261561328))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #7 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #7 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"createwallet\", actor = <external capability>, argNames = [(name = \"wallet_name\", namedOnly = false), (name = \"disable_private_keys\", namedOnly =\n false), (name = \"blank\", namedOnly = false), (name = \"passphrase\", namedOnly = false), (name = \"avoid_reuse\", namedOnly = false), (name = \"descriptors\", namedOnly = false), (name = \"load_on_startup\", namedOnly = false), (name = \"external_signer\", namedOnly = false)], uniqueId = 93936260236864))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #8 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"createwallet\", actor = <external capability>, argNames = [(name = \"wallet_name\", namedOnly = false), (name = \"disable_private_keys\", namedOnly = false), (name = \"blank\", namedOnly =\n false), (name = \"passphrase\", namedOnly = false), (name = \"avoid_reuse\", namedOnly = false), (name = \"descriptors\", namedOnly = false), (name = \"load_on_startup\", namedOnly = false), (name = \"external_signer\", namedOnly = false)], uniqueId = 93936260236864))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #8 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #8 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"createwalletdescriptor\", actor = <external capability>, argNames = [(name = \"type\", namedOnly = false), (name = \"internal\", namedOnly = true), (\nname = \"hdkey\", namedOnly = true), (name = \"options\", namedOnly = false)], uniqueId = 93936260233536))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #9 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"createwalletdescriptor\", actor = <external capability>, argNames = [(name = \"type\", namedOnly = false), (name = \"internal\", namedOnly = true), (name = \"hdkey\", namedOnly = true), (n\name = \"options\", namedOnly = false)], uniqueId = 93936260233536))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #9 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #9 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"restorewallet\", actor = <external capability>, argNames = [(name = \"wallet_name\", namedOnly = false), (name = \"backup_file\", namedOnly = false),\n (name = \"load_on_startup\", namedOnly = false)], uniqueId = 93936261280944))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #10 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"restorewallet\", actor = <external capability>, argNames = [(name = \"wallet_name\", namedOnly = false), (name = \"backup_file\", namedOnly = false), (name = \"load_on_startup\", namedOnl\ny = false)], uniqueId = 93936261280944))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #10 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #10 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"dumpprivkey\", actor = <external capability>, argNames = [(name = \"address\", namedOnly = false)], uniqueId = 93936261311280))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #11 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"dumpprivkey\", actor = <external capability>, argNames = [(name = \"address\", namedOnly = false)], uniqueId = 93936261311280))\n\n[...]\n\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletpassphrase\", actor = <external capability>, argNames = [(name = \"passphrase\", namedOnly = false), (name = \"timeout\", namedOnly =[100/7860]\nuniqueId = 93936261485056))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #67 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletpassphrase\", actor = <external capability>, argNames = [(name = \"passphrase\", namedOnly = false), (name = \"timeout\", namedOnly = false)], uniqueId = 93936261485056))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #67 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #67 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletpassphrasechange\", actor = <external capability>, argNames = [(name = \"oldpassphrase\", namedOnly = false), (name = \"newpassphrase\", namedO\nnly = false)], uniqueId = 93936261481040))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #68 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletpassphrasechange\", actor = <external capability>, argNames = [(name = \"oldpassphrase\", namedOnly = false), (name = \"newpassphrase\", namedOnly = false)], uniqueId = 9393626148\n1040))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #68 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #68 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletprocesspsbt\", actor = <external capability>, argNames = [(name = \"psbt\", namedOnly = false), (name = \"sign\", namedOnly = false), (name = \"\nsighashtype\", namedOnly = false), (name = \"bip32derivs\", namedOnly = false), (name = \"finalize\", namedOnly = false)], uniqueId = 93936261544736))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #69 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletprocesspsbt\", actor = <external capability>, argNames = [(name = \"psbt\", namedOnly = false), (name = \"sign\", namedOnly = false), (name = \"sighashtype\", namedOnly = false), (n\name = \"bip32derivs\", namedOnly = false), (name = \"finalize\", namedOnly = false)], uniqueId = 93936261544736))\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #69 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #69 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server send response #3 ChainClient.registerRpcs$Results ()\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client recv ChainClient.registerRpcs$Results ()\n2024-12-03T21:06:40Z Binding RPC on address ::1 port 18443\n2024-12-03T21:06:40Z Binding RPC on address 127.0.0.1 port 18443\n2024-12-03T21:06:40Z Using random cookie authentication.\n2024-12-03T21:06:40Z Generated RPC authentication cookie /home/darosior/.bitcoin/regtest/.cookie\n2024-12-03T21:06:40Z Permissions used for cookie: rw-------\n2024-12-03T21:06:40Z Starting HTTP server with 4 worker threads\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client send ChainClient.verify$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server recv request  #4 ChainClient.verify$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server post request  #4 {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)}\n2024-12-03T21:06:40Z Using wallet directory /home/darosior/.bitcoin/regtest/wallets\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.initMessage$Params (context = (thread = <external capability>, callbackThread = <external capability>), message = \"Verifying wallet(s)\\ff\\ff\\ff\")\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #70 Chain.initMessage$Params (context = (thread = <external capability>, callbackThread = <external capability>), message = \"Verifying wallet(s)\\ff\\ff\\ff\")\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #70 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z init message: Verifying wallet(s)\u2026\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #70 Chain.initMessage$Results ()\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.initMessage$Results ()\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.getSettingsList$Params (context = (thread = <external capability>, callbackThread = <external capability>), name = \"wallet\")\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #71 Chain.getSettingsList$Params (context = (thread = <external capability>, callbackThread = <external capability>), name = \"wallet\")\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #71 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #71 Chain.getSettingsList$Results (result = [])\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.getSettingsList$Results (result = [])\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server send response #4 ChainClient.verify$Results (result = true)\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client recv ChainClient.verify$Results (result = true)\n2024-12-03T21:06:40Z Using /16 prefix for IP bucketing\n2024-12-03T21:06:40Z init message: Loading P2P addresses\u2026\n2024-12-03T21:06:40Z Loaded 0 addresses from peers.dat  0ms\n2024-12-03T21:06:40Z init message: Loading banlist\u2026\n2024-12-03T21:06:40Z SetNetworkActive: true\n2024-12-03T21:06:40Z Script verification uses 15 additional threads\n2024-12-03T21:06:40Z Cache configuration:\n2024-12-03T21:06:40Z * Using 2.0 MiB for block index database\n2024-12-03T21:06:40Z * Using 8.0 MiB for chain state database\n2024-12-03T21:06:40Z * Using 440.0 MiB for in-memory UTXO set (plus up to 286.1 MiB of unused mempool space)\n2024-12-03T21:06:40Z Using obfuscation key for blocksdir *.dat files (/home/darosior/.bitcoin/regtest/blocks): 'c3525d6fe1128def'\n2024-12-03T21:06:40Z Using 16 MiB out of 16 MiB requested for signature cache, able to store 524288 elements\n2024-12-03T21:06:40Z Using 16 MiB out of 16 MiB requested for script execution cache, able to store 524288 elements\n2024-12-03T21:06:40Z init message: Loading block index\u2026\n2024-12-03T21:06:40Z Validating signatures for all blocks.\n2024-12-03T21:06:40Z Setting nMinimumChainWork=0000000000000000000000000000000000000000000000000000000000000000\n2024-12-03T21:06:40Z Opening LevelDB in /home/darosior/.bitcoin/regtest/blocks/index\n2024-12-03T21:06:40Z Opened LevelDB successfully\n2024-12-03T21:06:40Z Using obfuscation key for /home/darosior/.bitcoin/regtest/blocks/index: 0000000000000000\n2024-12-03T21:06:40Z LoadBlockIndexDB: last block file = 0\n2024-12-03T21:06:40Z LoadBlockIndexDB: last block file info: CBlockFileInfo(blocks=1, size=293, heights=0...0, time=2011-02-02...2011-02-02)\n2024-12-03T21:06:40Z Checking all blk files are present...\n2024-12-03T21:06:40Z Initializing chainstate Chainstate [ibd] @ height -1 (null)\n2024-12-03T21:06:40Z Opening LevelDB in /home/darosior/.bitcoin/regtest/chainstate\n2024-12-03T21:06:40Z Opened LevelDB successfully\n2024-12-03T21:06:40Z Using obfuscation key for /home/darosior/.bitcoin/regtest/chainstate: 639b6bd0024da93b\n2024-12-03T21:06:40Z Loaded best chain: hashBestChain=0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206 height=0 date=2011-02-02T23:16:42Z progress=1.000000\n2024-12-03T21:06:40Z Opening LevelDB in /home/darosior/.bitcoin/regtest/chainstate\n2024-12-03T21:06:40Z Opened LevelDB successfully\n2024-12-03T21:06:40Z Using obfuscation key for /home/darosior/.bitcoin/regtest/chainstate: 639b6bd0024da93b\n2024-12-03T21:06:40Z [Chainstate [ibd] @ height 0 (0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206)] resized coinsdb cache to 8.0 MiB\n2024-12-03T21:06:40Z [Chainstate [ibd] @ height 0 (0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206)] resized coinstip cache to 440.0 MiB\n2024-12-03T21:06:40Z init message: Verifying blocks\u2026\n2024-12-03T21:06:40Z  block index              21ms\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client send ChainClient.load$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server recv request  #5 ChainClient.load$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server post request  #5 {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)}\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client send Chain.getSettingsList$Params (context = (thread = <external capability>, callbackThread = <external capability>), name = \"wallet\")\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server recv request  #72 Chain.getSettingsList$Params (context = (thread = <external capability>, callbackThread = <external capability>), name = \"wallet\")\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server post request  #72 {bitcoin-node-70738/bitcoin-node-70738}\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server send response #72 Chain.getSettingsList$Results (result = [])\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)} IPC client recv Chain.getSettingsList$Results (result = [])\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server send response #5 ChainClient.load$Results (result = true)\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client recv ChainClient.load$Results (result = true)\n2024-12-03T21:06:40Z Setting NODE_NETWORK on non-prune mode\n2024-12-03T21:06:40Z block tree size = 1\n2024-12-03T21:06:40Z nBestHeight = 0\n2024-12-03T21:06:40Z initload thread start\n2024-12-03T21:06:40Z Loading 0 mempool transactions from file...\n2024-12-03T21:06:40Z Imported mempool transactions from file: 0 succeeded, 0 failed, 0 expired, 0 already there, 0 waiting for initial broadcast\n2024-12-03T21:06:40Z initload thread exit\n2024-12-03T21:06:40Z torcontrol thread start\n2024-12-03T21:06:40Z Bound to 127.0.0.1:18445\n2024-12-03T21:06:40Z Bound to [::]:18444\n2024-12-03T21:06:40Z Bound to 0.0.0.0:18444\n2024-12-03T21:06:40Z 0 block-relay-only anchors will be tried for connections.\n2024-12-03T21:06:40Z init message: Starting network threads\u2026\n2024-12-03T21:06:40Z net thread start\n2024-12-03T21:06:40Z addcon thread start\n2024-12-03T21:06:40Z dnsseed thread start\n2024-12-03T21:06:40Z Loading addresses from DNS seed dummySeed.invalid.\n2024-12-03T21:06:40Z init message: Done loading\n2024-12-03T21:06:40Z msghand thread start\n2024-12-03T21:06:40Z opencon thread start\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client send ChainClient.start$Params (context = (thread = <external capability>, callbackThread = <external capability>), scheduler = void)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server recv request  #6 ChainClient.start$Params (context = (thread = <external capability>, callbackThread = <external capability>), scheduler = void)\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server post request  #6 {bitcoin-wallet-70740/bitcoin-wallet-70742 (from bitcoin-node-70738/bitcoin-node-70738)}\n2024-12-03T21:06:40Z [ipc] {bitcoin-wallet-70740/bitcoin-wallet-70740} IPC server send response #6 ChainClient.start$Results ()\n2024-12-03T21:06:40Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client recv ChainClient.start$Results ()\n2024-12-03T21:06:40Z 0 addresses found from DNS seeds\n2024-12-03T21:06:40Z dnsseed thread exit\n^C2024-12-03T21:06:41Z tor: Thread interrupt\n2024-12-03T21:06:41Z Shutdown: In progress...\n2024-12-03T21:06:41Z opencon thread exit\n2024-12-03T21:06:41Z addcon thread exit\n2024-12-03T21:06:41Z torcontrol thread exit\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client send ChainClient.flush$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages5ChainEEE\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/bitcoin-node-70738} IPC client exception kj::Exception: kj/async-io-unix.c++:532: disconnected: ::writev(fd, iov.begin(), iov.size()): Broken pipe; iovTotal = 176; iov.size() = 2\nstack: 7f4d205f679f 7f4d205f6cad 7f4d2074f544 7f4d2074f732 7f4d2074f78a 7f4d207ae25d 7f4d207ad180 7f4d207a76d0 7f4d2079dde0 7f4d20797ea0 7f4d2078a160 7f4d2078abc4 7f4d207877a0 564973f5a300 564973f648c0\n2024-12-03T21:06:41Z [ipc] {bitcoin-node-70738/b-capnp-loop-70741} IPC client: unexpected network disconnect.\n2024-12-03T21:06:41Z [ipc] kj::Exception: kj/async-io-unix.c++:532: disconnected: ::writev(fd, iov.begin(), iov.size()): Broken pipe; iovTotal = 176; iov.size() = 2\nstack: 7f4d205f679f 7f4d205f6cad 7f4d2074f544 7f4d2074f732 7f4d2074f78a 7f4d207ae25d 7f4d207ad180 7f4d207a76d0 7f4d2079dde0 7f4d20797ea0 7f4d2078a160 7f4d2078abc4 7f4d207877a0 564973f5a300 564973f648c0\nterminate called after throwing an instance of 'ipc::Exception'\n  what():  kj::Exception: kj/async-io-unix.c++:532: disconnected: ::writev(fd, iov.begin(), iov.size()): Broken pipe; iovTotal = 176; iov.size() = 2\nstack: 7f4d205f679f 7f4d205f6cad 7f4d2074f544 7f4d2074f732 7f4d2074f78a 7f4d207ae25d 7f4d207ad180 7f4d207a76d0 7f4d2079dde0 7f4d20797ea0 7f4d2078a160 7f4d2078abc4 7f4d207877a0 564973f5a300 564973f648c0\nAborted\n```\n\nLogs for when the client constructs `Init`, creates a thread, and stops\n\n```\n[...]\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client recv Chain.handleRpc$Results (result = <external capability>)                                                                                                                                                                                                                                  [100/7216]\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletpassphrase\", actor = <external capability>, argNames = [(name = \"passphrase\", namedOnly = false), (name = \"timeout\", namedOnly = false)],\nuniqueId = 94002610455040))\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server recv request  #67 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletpassphrase\", actor = <external capability>, argNames = [(name = \"passphrase\", namedOnly = false), (name = \"timeout\", namedOnly = false)], uniqueId = 94002610455040))\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server post request  #67 {bitcoin-node-70275/bitcoin-node-70275}\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server send response #67 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletpassphrasechange\", actor = <external capability>, argNames = [(name = \"oldpassphrase\", namedOnly = false), (name = \"newpassphrase\", namedO\nnly = false)], uniqueId = 94002610451024))\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server recv request  #68 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletpassphrasechange\", actor = <external capability>, argNames = [(name = \"oldpassphrase\", namedOnly = false), (name = \"newpassphrase\", namedOnly = false)], uniqueId = 9400261045\n1024))\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server post request  #68 {bitcoin-node-70275/bitcoin-node-70275}\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server send response #68 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client send Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletprocesspsbt\", actor = <external capability>, argNames = [(name = \"psbt\", namedOnly = false), (name = \"sign\", namedOnly = false), (name = \"\nsighashtype\", namedOnly = false), (name = \"bip32derivs\", namedOnly = false), (name = \"finalize\", namedOnly = false)], uniqueId = 94002610514720))\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server recv request  #69 Chain.handleRpc$Params (context = (thread = <external capability>, callbackThread = <external capability>), command = (category = \"wallet\", name = \"walletprocesspsbt\", actor = <external capability>, argNames = [(name = \"psbt\", namedOnly = false), (name = \"sign\", namedOnly = false), (name = \"sighashtype\", namedOnly = false), (n\name = \"bip32derivs\", namedOnly = false), (name = \"finalize\", namedOnly = false)], uniqueId = 94002610514720))\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server post request  #69 {bitcoin-node-70275/bitcoin-node-70275}\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server send response #69 Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client recv Chain.handleRpc$Results (result = <external capability>)\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70277} IPC server send response #3 ChainClient.registerRpcs$Results ()\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/bitcoin-node-70275} IPC client recv ChainClient.registerRpcs$Results ()\n2024-12-03T21:02:16Z Binding RPC on address ::1 port 18443\n2024-12-03T21:02:16Z Binding RPC on address 127.0.0.1 port 18443\n2024-12-03T21:02:16Z Using random cookie authentication.\n2024-12-03T21:02:16Z Generated RPC authentication cookie /home/darosior/.bitcoin/regtest/.cookie\n2024-12-03T21:02:16Z Permissions used for cookie: rw-------\n2024-12-03T21:02:16Z Starting HTTP server with 4 worker threads\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/bitcoin-node-70275} IPC client send ChainClient.verify$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70277} IPC server recv request  #4 ChainClient.verify$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70277} IPC server post request  #4 {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)}\n2024-12-03T21:02:16Z Using wallet directory /home/darosior/.bitcoin/regtest/wallets\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client send Chain.initMessage$Params (context = (thread = <external capability>, callbackThread = <external capability>), message = \"Verifying wallet(s)\\ff\\ff\\ff\")\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server recv request  #70 Chain.initMessage$Params (context = (thread = <external capability>, callbackThread = <external capability>), message = \"Verifying wallet(s)\\ff\\ff\\ff\")\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server post request  #70 {bitcoin-node-70275/bitcoin-node-70275}\n2024-12-03T21:02:16Z init message: Verifying wallet(s)\u2026\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server send response #70 Chain.initMessage$Results ()\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client recv Chain.initMessage$Results ()\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client send Chain.getSettingsList$Params (context = (thread = <external capability>, callbackThread = <external capability>), name = \"wallet\")\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server recv request  #71 Chain.getSettingsList$Params (context = (thread = <external capability>, callbackThread = <external capability>), name = \"wallet\")\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server post request  #71 {bitcoin-node-70275/bitcoin-node-70275}\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server send response #71 Chain.getSettingsList$Results (result = [])\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client recv Chain.getSettingsList$Results (result = [])\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70277} IPC server send response #4 ChainClient.verify$Results (result = true)\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/bitcoin-node-70275} IPC client recv ChainClient.verify$Results (result = true)\n2024-12-03T21:02:16Z Using /16 prefix for IP bucketing\n2024-12-03T21:02:16Z init message: Loading P2P addresses\u2026\n2024-12-03T21:02:16Z Loaded 0 addresses from peers.dat  0ms\n2024-12-03T21:02:16Z init message: Loading banlist\u2026\n2024-12-03T21:02:16Z SetNetworkActive: true\n2024-12-03T21:02:16Z Script verification uses 15 additional threads\n2024-12-03T21:02:16Z Cache configuration:\n2024-12-03T21:02:16Z * Using 2.0 MiB for block index database\n2024-12-03T21:02:16Z * Using 8.0 MiB for chain state database\n2024-12-03T21:02:16Z * Using 440.0 MiB for in-memory UTXO set (plus up to 286.1 MiB of unused mempool space)\n2024-12-03T21:02:16Z Using obfuscation key for blocksdir *.dat files (/home/darosior/.bitcoin/regtest/blocks): 'c3525d6fe1128def'\n2024-12-03T21:02:16Z Using 16 MiB out of 16 MiB requested for signature cache, able to store 524288 elements\n2024-12-03T21:02:16Z Using 16 MiB out of 16 MiB requested for script execution cache, able to store 524288 elements\n2024-12-03T21:02:16Z init message: Loading block index\u2026\n2024-12-03T21:02:16Z Validating signatures for all blocks.\n2024-12-03T21:02:16Z Setting nMinimumChainWork=0000000000000000000000000000000000000000000000000000000000000000\n2024-12-03T21:02:16Z Opening LevelDB in /home/darosior/.bitcoin/regtest/blocks/index\n2024-12-03T21:02:16Z Opened LevelDB successfully\n2024-12-03T21:02:16Z Using obfuscation key for /home/darosior/.bitcoin/regtest/blocks/index: 0000000000000000\n2024-12-03T21:02:16Z LoadBlockIndexDB: last block file = 0\n2024-12-03T21:02:16Z LoadBlockIndexDB: last block file info: CBlockFileInfo(blocks=1, size=293, heights=0...0, time=2011-02-02...2011-02-02)\n2024-12-03T21:02:16Z Checking all blk files are present...\n2024-12-03T21:02:16Z Initializing chainstate Chainstate [ibd] @ height -1 (null)\n2024-12-03T21:02:16Z Opening LevelDB in /home/darosior/.bitcoin/regtest/chainstate\n2024-12-03T21:02:16Z Opened LevelDB successfully\n2024-12-03T21:02:16Z Using obfuscation key for /home/darosior/.bitcoin/regtest/chainstate: 639b6bd0024da93b\n2024-12-03T21:02:16Z Loaded best chain: hashBestChain=0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206 height=0 date=2011-02-02T23:16:42Z progress=1.000000\n2024-12-03T21:02:16Z Opening LevelDB in /home/darosior/.bitcoin/regtest/chainstate\n2024-12-03T21:02:16Z Opened LevelDB successfully\n2024-12-03T21:02:16Z Using obfuscation key for /home/darosior/.bitcoin/regtest/chainstate: 639b6bd0024da93b\n2024-12-03T21:02:16Z [Chainstate [ibd] @ height 0 (0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206)] resized coinsdb cache to 8.0 MiB\n2024-12-03T21:02:16Z [Chainstate [ibd] @ height 0 (0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206)] resized coinstip cache to 440.0 MiB\n2024-12-03T21:02:16Z init message: Verifying blocks\u2026\n2024-12-03T21:02:16Z  block index              19ms\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/bitcoin-node-70275} IPC client send ChainClient.load$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70277} IPC server recv request  #5 ChainClient.load$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70277} IPC server post request  #5 {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)}\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client send Chain.getSettingsList$Params (context = (thread = <external capability>, callbackThread = <external capability>), name = \"wallet\")\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server recv request  #72 Chain.getSettingsList$Params (context = (thread = <external capability>, callbackThread = <external capability>), name = \"wallet\")\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server post request  #72 {bitcoin-node-70275/bitcoin-node-70275}\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server send response #72 Chain.getSettingsList$Results (result = [])\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)} IPC client recv Chain.getSettingsList$Results (result = [])\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70277} IPC server send response #5 ChainClient.load$Results (result = true)\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/bitcoin-node-70275} IPC client recv ChainClient.load$Results (result = true)\n2024-12-03T21:02:16Z Setting NODE_NETWORK on non-prune mode\n2024-12-03T21:02:16Z block tree size = 1\n2024-12-03T21:02:16Z nBestHeight = 0\n2024-12-03T21:02:16Z initload thread start\n2024-12-03T21:02:16Z torcontrol thread start\n2024-12-03T21:02:16Z Loading 0 mempool transactions from file...\n2024-12-03T21:02:16Z Imported mempool transactions from file: 0 succeeded, 0 failed, 0 expired, 0 already there, 0 waiting for initial broadcast\n2024-12-03T21:02:16Z initload thread exit\n2024-12-03T21:02:16Z Bound to 127.0.0.1:18445\n2024-12-03T21:02:16Z Bound to [::]:18444\n2024-12-03T21:02:16Z Bound to 0.0.0.0:18444                                                                                                                                                                                                                                                                                                                                                                                     [0/7216]\n2024-12-03T21:02:16Z 0 block-relay-only anchors will be tried for connections.\n2024-12-03T21:02:16Z init message: Starting network threads\u2026\n2024-12-03T21:02:16Z net thread start\n2024-12-03T21:02:16Z addcon thread start\n2024-12-03T21:02:16Z init message: Done loading\n2024-12-03T21:02:16Z msghand thread start\n2024-12-03T21:02:16Z opencon thread start\n2024-12-03T21:02:16Z dnsseed thread start\n2024-12-03T21:02:16Z Loading addresses from DNS seed dummySeed.invalid.\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/bitcoin-node-70275} IPC client send ChainClient.start$Params (context = (thread = <external capability>, callbackThread = <external capability>), scheduler = void)\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70277} IPC server recv request  #6 ChainClient.start$Params (context = (thread = <external capability>, callbackThread = <external capability>), scheduler = void)\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70277} IPC server post request  #6 {bitcoin-wallet-70277/bitcoin-wallet-70279 (from bitcoin-node-70275/bitcoin-node-70275)}\n2024-12-03T21:02:16Z [ipc] {bitcoin-wallet-70277/bitcoin-wallet-70277} IPC server send response #6 ChainClient.start$Results ()\n2024-12-03T21:02:16Z [ipc] {bitcoin-node-70275/bitcoin-node-70275} IPC client recv ChainClient.start$Results ()\n2024-12-03T21:02:16Z 0 addresses found from DNS seeds\n2024-12-03T21:02:16Z dnsseed thread exit\n2024-12-03T21:02:48Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server recv request  #73 Init.construct$Params ()\n2024-12-03T21:02:48Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server send response #73 Init.construct$Results (threadMap = <external capability>)\n2024-12-03T21:02:48Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server: socket disconnected.\n2024-12-03T21:02:48Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages4InitEEE\n^C2024-12-03T21:02:50Z tor: Thread interrupt\n2024-12-03T21:02:50Z Shutdown: In progress...\n2024-12-03T21:02:50Z addcon thread exit\n2024-12-03T21:02:50Z torcontrol thread exit\n2024-12-03T21:02:50Z opencon thread exit\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/bitcoin-node-70275} IPC client send ChainClient.flush$Params (context = (thread = <external capability>, callbackThread = <external capability>))\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages7HandlerEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC server destroy N2mp11ProxyServerIN3ipc5capnp8messages5ChainEEE\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/bitcoin-node-70275} IPC client exception kj::Exception: kj/async-io-unix.c++:532: disconnected: ::writev(fd, iov.begin(), iov.size()): Broken pipe; iovTotal = 176; iov.size() = 2\nstack: 7f70b535079f 7f70b5350cad 7f70b54a9544 7f70b54a9732 7f70b54a978a 7f70b550825d 7f70b5507180 7f70b55016d0 7f70b54f7de0 7f70b54f1ea0 7f70b54e4160 7f70b54e4bc4 7f70b54e17a0 56041e62f300 56041e6398c0\n2024-12-03T21:02:50Z [ipc] {bitcoin-node-70275/b-capnp-loop-70278} IPC client: unexpected network disconnect.\nSegmentation fault\n```"
  },
  {
   "t": "2024-12-04T02:55:01Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-2515554249\n\n[quoted text omitted]\nThanks for the report! Was able to reproduce this and created issue https://github.com/chaincodelabs/libmultiprocess/issues/123 to track it."
  },
  {
   "t": "2024-12-04T20:37:38Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased a295345d3c746d0acdf531391ced5867d6b5e493 -> 5b9a95396595c8a5bdafd221f44c2a69b0327f55 ([`pr/ipc.211`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.211) -> [`pr/ipc.212`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.212), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.211-rebase..pr/ipc.212)) fixing minor conflicts with #24937 and #31335, and silent conflict with #31130\nUpdated 5b9a95396595c8a5bdafd221f44c2a69b0327f55 -> b5b0664379c1fd848d6652c22181b3055805bb11 ([`pr/ipc.212`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.212) -> [`pr/ipc.213`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.213), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.212..pr/ipc.213)) to fix silent conflict in feature_config_args test with #31212 and bad change order causing test-each-commit failure\nRebased b5b0664379c1fd848d6652c22181b3055805bb11 -> b57c89793ec03c506a9b6db35dc2b5cbe28c6c8b ([`pr/ipc.213`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.213) -> [`pr/ipc.214`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.214), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.213-rebase..pr/ipc.214)) on top of updated #29409 pr/ipc-chain.12 to fix wallet_backup.py test failure"
  },
  {
   "t": "2025-03-17T22:58:23Z",
   "kind": "comment",
   "who": "jimhashhq",
   "assoc": "NONE",
   "text": "I tried this multiprocess feature out (using clang/Linux) as follows:\n\n- Full build multiprocess with gui of bitcoin/master (with CMAKE_PREFIX_PATH correctly pointing to a recent external local build of master on libmultiprocess).\n- Full build multiprocess with gui of Sjors/02/25/ipc-yea (the multiprocess feature integration branch with subtree).\nI can confirm that this latter build was indeed simpler with libmultiprocess as a project subtree.\n\nInteractive regtest ran fine for both, and I did not experience any shutdown issues mentioned much earlier in this discussion either.\n\nExperimenting with both builds, I made the following observations of possible issues:\n1) The planned `--ipcconnect` is not yet supported by either `bitcoin-gui` or `bitcoin-wallet` processes?\n2) Running a `bitcoin-gui` (w/o `--ipcconnect`) does not \"spawn\" a node process?  (#19160) was merged long ago, but I cannot get either of the above builds of `bitcoin-gui` to actually \"spawn\" a `bitcoin-node` process?\n3) Running `bitcoin-wallet` concurrent with either a `bitcoin-node` or `bitcoin-gui` fails with error:\n`SQLiteDatabase: Unable to obtain an exclusive lock on the database, is it being used by another instance of Bitcoin Core`?\n4) Running `bitcoin-gui --ipcbind:unix` creates a `gui.sock` not a `node.sock` file in `<data-dir>/regtest` directory.\n5) bitcoin-gui default logfile is `debug.log` and not `debug.log.gui` as indicated in comments above.\n\nIn general is it true that the plan is to merge the libmultiprocess project as a subtree (#31740 and #31741)\n_before_ merging main functionality of multiprocess feature itself (#19460 and #19461)?\nI was expecting the _opposite_ order.  Maybe rationale is that the latter two need a rebase.\nIf those get rebased, I would be interested to test them.  Thanks so much for any guidance here."
  },
  {
   "t": "2025-03-18T15:11:56Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-2731137612\n\nThanks for testing this.\n\n[quoted text omitted]\nIt is implemented in #19460 for `bitcoin-wallet` (where it just connects and doesn't really do anything) and in #19461 for `bitcoin-gui` where it is more functional and does allow the gui to connect and control the node.\n\n[quoted text omitted]\nIf you use this PR or the PR's building on it (#10102, #19460, #19461) `bitcoin-gui` will spawn a `bitcoin-node` process and `bitcoin-node` will also spawn a `bitcoin-wallet` process. #19160 added support for spawning processes, but only made use of them in an `echoipc` test command.\n\n[quoted text omitted]\nIt is expected for only one process to be able to open a wallet at time, so this may or may not be a bug depending on what you are trying to do.\n\n[quoted text omitted]\nThat is unexpected and not something I see running my current branch with:\n\n```c++\nbuild/bin/bitcoin-gui -regtest -debug=ipc -printtoconsole -ipcbind=unix\nls -al ~/.bitcoin/regtest/*.sock\n```\n\nI can update this PR though in case maybe this was a transient problem.\n\n[quoted text omitted]\nThat's also not something I'm seeing (`ls -al ~/.bitcoin/regtest/*.log*`) but I'll update this PR in case that can fix the problem or provide a newer baseline to reproduce it.\n\n[quoted text omitted]\nI'll go ahead and update these. The subtree and multiprocess PRs could be merged in any order since building with a subtree instead of an external library is not even a code change, just a build system change. #31741 is supposed to make it easier for developers to test this functionality so it is easier to review IPC PRs and build more confidence that they work well and are ready to be released.\n\n---\n\nRebased b57c89793ec03c506a9b6db35dc2b5cbe28c6c8b -> ecd8e80fdef8675991d5bb3f9effd83a4ac97d2a ([`pr/ipc.214`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.214) -> [`pr/ipc.215`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.215), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.214-rebase..pr/ipc.215)) due to conflicts with #31740, #31634, and #32069"
  },
  {
   "t": "2025-03-19T01:19:36Z",
   "kind": "comment",
   "who": "jimhashhq",
   "assoc": "NONE",
   "text": "Thank you @ryanofsky, I am in favor of a multiprocess Bitcoin, I  find this a well considered change.  I am interested to try the updated #19461, thank you, and I do apologize for all of the questions.\n\nFrom comments, it sounds like 19461 is closest, and provides the most functionality for the feature; would it make any sense to maybe change release order, putting 19461 (and a more complete #19460?) ahead of #31740 and #31741?\n\nIn general, RE `cmake` and external packages, how packages resolve seems not obvious to me anyways, maybe adding a comment to the libmultiprocess project docs somewhere about setting `CMAKE_INSTALL_PREFIX` (say `$HOME/local/libmultiprocess`, for example) and a corresponding comment in the bitcoin multiprocess docs about how to set `CMAKE_PREFIX_PATH` to point _below_ that (`$HOME/local/libmultiprocess/lib/cmake`) so the bitcoin build correctly finds it might help developers some with existing external build challenges? And/or enhance error messaging (#31709) in top CMakeList.txt to probe if (NOT LibMultiprocess_FOUND) and provide this suggestion.\n\nShould project owners maybe create a MULTIPROCESS label for tracking?\n\nI've been getting design info from [multiprocess.md](./doc/design/multiprocess.md), which might be outdated.\nI see no mention of an `-ipcfd=<n>` (e2c3f0d), does [multiprocess.md](./doc/design/multiprocess.md) need to be updated to describe this?\n\nAlso, I was expecting \"node\" to be more of a server in the old fashioned sense, and both \"gui\" and \"wallet\" to be more like clients to it, which makes me confused as to why the \"node\" would spawn a wallet (9648a377)?"
  },
  {
   "t": "2025-03-19T17:39:55Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-2735072960\n\n[quoted text omitted]\nThere isn't really a predefined order between #19461 and #31741 and the changes do not overlap so they they could be reviewed, tested, and merged in either order. The merge order will just depend on where people want to spend effort reviewing and testing. I expect #31741 will get merged first just because it has been discussed more recently and will make other PRs easier to test. #31741 also doesn't change code or provide any features, it only affects the build system.\n\n[quoted text omitted]\nIt sounds like you have some good ideas here, maybe you would like to open a PR to improve the documentation or current errors from cmake? I would be happy to review and help edit and I think changes like these could be merged pretty easily. It is true that #31741 should also address some of these difficulties by simplifying required build steps, but would be good to improve documentation and error handling either way.\n\n[quoted text omitted]\nI've been using https://github.com/bitcoin/bitcoin/issues/28722 to track related PRs so that might be helpful. If you have specific ideas about how labels could be useful, they could be added too.\n\n[quoted text omitted]\nThat's a good suggestion, and again would welcome a PR, and am happy to help review and provide feedback on a draft. The [document](https://github.com/bitcoin/bitcoin/blob/master/doc/design/multiprocess.md) is up to date, but it doesn't currently cover details about how processes are spawned and connections are established, focusing more on how IPC calls work after connections are established.\n\nThere isn't too much that can be said about the -ipcfd parameter specifically. Before a parent process spawns a child process it just calls [socketpair](https://man7.org/linux/man-pages/man2/socketpair.2.html) to create a bidirectional socket, and passes one of the two socket file descriptors as an `-ipcfd=<fd>` argument to the child process so the parent and child process can communicate over the socket. The `-ipcfd` option isn't described in the command line documentation because it isn't meant to be used externally. Also it will have slightly different behavior on windows where it will contain the path to a [named pipe](https://learn.microsoft.com/en-us/windows/win32/ipc/named-pipes), and the then the child process will create a socket and call [WSADuplicateSocket](https://learn.microsoft.com/en-us/windows/win32/winsock/shared-sockets-2) to send one side of the socket to the parent over the named pipe.\n\n[quoted text omitted]\nYes this is the goal which #19460 and #19461 take steps towards implementing. #19461 achieves that goal for the gui so it can connect to the node and control it, while #19460 starts to achieve that goal for the wallet, although it is more incomplete and just connects to the node without offering any real functionality. The point of the gui spawning a node process and the node spawning a wallet process is mostly just for convenience. In #19461 for example, the gui will skip spawning a node process if a node process is already running that it can connect to."
  },
  {
   "t": "2025-03-19T20:50:19Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Updated ecd8e80fdef8675991d5bb3f9effd83a4ac97d2a -> 26c2136a2bc7fec9697f61eadf422c439e0735a2 ([`pr/ipc.215`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.215) -> [`pr/ipc.216`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.216), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.215..pr/ipc.216)) to CI fix https://cirrus-ci.com/task/5047408398172160?logs=ci#L2206 caused by wallet_encryption.py not checking wallet process log file"
  },
  {
   "t": "2025-03-20T00:27:52Z",
   "kind": "comment",
   "who": "jimhashhq",
   "assoc": "NONE",
   "text": "Good news -- with your rebase of #19461, I am now able to try `-ipcconnect`, thank you.\n\nIn this multiprocess taxonomy, for separation-of-concerns and or separation-of-roles support, I was expecting that the default would be for the `node` _not_ to start a `wallet` at all, _instead_ having the `gui` start the `wallet` in addition to the `node` that it already starts?\n\nI vote somebody create some sort of `MULTIPROCESS` label for issue tracking if that makes sense.\n\nDescribing `CMAKE_PREFIX_PATH` or enhancing error messaging for the external `libmultiprocess` package is probably obviated by planned earlier merge into internal subtree.\n\nThank you for your guidance, I will try to experiment with `-ipcconnect` & -`ipcbind` next week and report back."
  },
  {
   "t": "2025-03-20T15:22:10Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "re: https://github.com/bitcoin/bitcoin/pull/10102#issuecomment-2738635146\n\n[quoted text omitted]\nWhat actually happens in this PR is that the gui starts a node process and the node starts a wallet process. This is done to keep this PR simple and to preserve current UX. We can change the node not to load wallets by default, and change wallets to connect directly through to the instead of going through the node, but some of these these changes would be user-facing, and all of them would be changes to gui, wallet, and node code. This PR is not changing gui, node, and wallet code, just making the existing code run in different processes instead of the same process. #19460 and #19461 start to build new features you might want, and more should be possible as well.\n\n[quoted text omitted]\nOpen to the idea. I use https://github.com/bitcoin/bitcoin/issues/28722 for tracking personally.\n\n[quoted text omitted]\nYes these things could still be useful but should be less necessary.\n\n[quoted text omitted]\nThanks! it's very useful to have more testing."
  },
  {
   "t": "2025-03-24T21:49:48Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 26c2136a2bc7fec9697f61eadf422c439e0735a2 -> c9a49633a027f1c28ebe15c0134f1ce38b712e8a ([`pr/ipc.216`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.216) -> [`pr/ipc.217`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.217), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.216-rebase..pr/ipc.217)) due to silent conflict with #31519\nRebased c9a49633a027f1c28ebe15c0134f1ce38b712e8a -> c1e070d76166f1230758bdcf7a4463008eea46d9 ([`pr/ipc.217`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.217) -> [`pr/ipc.218`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.218), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.217-rebase..pr/ipc.218)) due to various conflicts\n\nRebased c1e070d76166f1230758bdcf7a4463008eea46d9 -> 7634a40a8fb0ecd55af802b29955a22c2f87f372 ([`pr/ipc.218`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.218) -> [`pr/ipc.219`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.219), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.218-rebase..pr/ipc.219))\n\nUpdated 7634a40a8fb0ecd55af802b29955a22c2f87f372 -> faac28b45aa852eebc0e6b316ccab3f5e4babbe8 ([`pr/ipc.219`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.219) -> [`pr/ipc.220`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.220), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.219..pr/ipc.220))\n\nRebased faac28b45aa852eebc0e6b316ccab3f5e4babbe8 -> 502cd8d3d0abbab54b745968165d105bd0a4cef4 ([`pr/ipc.220`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.220) -> [`pr/ipc.221`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.221), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.220-rebase..pr/ipc.221)) to fix ci errors when ENABLE_WALLET is false and new test errors in rpc_help.py and wallet_createwallet.py (https://github.com/bitcoin/bitcoin/actions/runs/18179507203?pr=10102)\n\nRebased 502cd8d3d0abbab54b745968165d105bd0a4cef4 -> 55ce4bae1881669c7108f2c54666d9d3347475fc ([`pr/ipc.221`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.221) -> [`pr/ipc.222`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.222), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.221-rebase..pr/ipc.222)) due to conflict with #33229\n\nRebased 55ce4bae1881669c7108f2c54666d9d3347475fc -> e5d56ba94afaea14fa3bbc71a12666b50f92a324 ([`pr/ipc.222`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.222) -> [`pr/ipc.223`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.223), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.222-rebase..pr/ipc.223)) on top of https://github.com/bitcoin-core/libmultiprocess/pull/230 to fix lint error https://github.com/bitcoin/bitcoin/actions/runs/18694099593\n\nUpdated e5d56ba94afaea14fa3bbc71a12666b50f92a324 -> d902de13f038748192064bb8879b3d02dddaefbc ([`pr/ipc.223`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.223) -> [`pr/ipc.224`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.224), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.223..pr/ipc.224)) to fix lint error https://github.com/bitcoin/bitcoin/actions/runs/18711736396/job/53361595067?pr=10102\n\nRebased d902de13f038748192064bb8879b3d02dddaefbc -> 46beb574cc3a41849f253f88f9b8ef63cb080b29 ([`pr/ipc.224`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.224) -> [`pr/ipc.225`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.225), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.224-rebase..pr/ipc.225)) due to conflict with #33003\n\nRebased 46beb574cc3a41849f253f88f9b8ef63cb080b29 -> 3638b89090f539c360c5d4d358c4ed17db59c25e ([`pr/ipc.225`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.225) -> [`pr/ipc.226`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.226), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.225-rebase..pr/ipc.226))\n\nRebased 3638b89090f539c360c5d4d358c4ed17db59c25e -> 5010acc3d6e42cce5da8fad2b6c42eb31441c387 ([`pr/ipc.226`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.226) -> [`pr/ipc.227`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.227), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.226-rebase..pr/ipc.227))\n\nRebased 5010acc3d6e42cce5da8fad2b6c42eb31441c387 -> 2503f57e93c32158f837e1c9f0dc9f1061b84346 ([`pr/ipc.227`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.227) -> [`pr/ipc.228`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.228), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.227-rebase..pr/ipc.228)) on top of #29409 pr/ipc-chain.24\n\nRebased 2503f57e93c32158f837e1c9f0dc9f1061b84346 -> cba1e840335580fd7dcdd337e3fb2a00ec3f3c8d ([`pr/ipc.228`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.228) -> [`pr/ipc.229`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.229), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.228-rebase..pr/ipc.229)) on top of #29409 pr/ipc-chain.28\n\nRebased cba1e840335580fd7dcdd337e3fb2a00ec3f3c8d -> d8fdc46a9f92f962d4f7dd72d2434e19efd57ca6 ([`pr/ipc.229`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.229) -> [`pr/ipc.230`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.230), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.229-rebase..pr/ipc.230)) on top of #29409 pr/ipc-chain.30\n\nUpdated d8fdc46a9f92f962d4f7dd72d2434e19efd57ca6 -> 84154f7d180446b03c2b393b60af1fd7509aa0c5 ([`pr/ipc.230`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.230) -> [`pr/ipc.231`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.231), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.230..pr/ipc.231)) to fix CI errors https://github.com/bitcoin/bitcoin/actions/runs/23816310834 wallet_multiwallet.py wallet=True log failures, tidy constructor error, MakeIpc ipc/stub.cpp signature error\n\nUpdated 84154f7d180446b03c2b393b60af1fd7509aa0c5 -> aab1519e15218fb3eec4bffdb951adbd3b04fd4b ([`pr/ipc.231`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.231) -> [`pr/ipc.232`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.232), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.231..pr/ipc.232)) to fix CI another wallet=True log failure https://github.com/bitcoin/bitcoin/actions/runs/23820496114/job/69431270008\n\nRebased aab1519e15218fb3eec4bffdb951adbd3b04fd4b -> 310228b305a15224f8c572771f9f2205ea070ead ([`pr/ipc.232`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.232) -> [`pr/ipc.233`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.233), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.232-rebase..pr/ipc.233)) due to conflict with #34020 and silent conflicts with #35118 and #35043\n\nUpdated 310228b305a15224f8c572771f9f2205ea070ead -> 75dd5b1866159cd535207862dd14092905a30296 ([`pr/ipc.233`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.233) -> [`pr/ipc.234`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.234), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.233..pr/ipc.234)) to fix CI errors caused by silent conflict with #32763 https://github.com/bitcoin/bitcoin/actions/runs/29337347666/job/87099838095?pr=10102\n\nRebased 75dd5b1866159cd535207862dd14092905a30296 -> e84b4a603ad61ae763770d496d4c015ea40a94cb ([`pr/ipc.234`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.234) -> [`pr/ipc.235`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.235), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.234-rebase..pr/ipc.235)) adding missing subtree update to previous push to fix time_point errors https://github.com/bitcoin/bitcoin/actions/runs/29345364835/job/87127521573\n\nRebased e84b4a603ad61ae763770d496d4c015ea40a94cb -> b314fb2cff7ceb68882f9e53294f86dab6940337 ([`pr/ipc.235`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.235) -> [`pr/ipc.236`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.236), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.235-rebase..pr/ipc.236)) fixing duplicate ordinal number caused by conflict in libmultiprocess subtree with https://github.com/bitcoin-core/libmultiprocess/pull/305  https://github.com/bitcoin/bitcoin/actions/runs/29349046872/job/87140309661\n\nRebased b314fb2cff7ceb68882f9e53294f86dab6940337 -> 0e9b39004211d37ea45d08f8bf30d06962d616a3 ([`pr/ipc.236`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.236) -> [`pr/ipc.237`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.237), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.236-rebase..pr/ipc.237)) on top of #29409 pr/ipc-chain.32 due to conflicts with #33585, #35084, and #35605\n\nRebased 0e9b39004211d37ea45d08f8bf30d06962d616a3 -> b0fb414a64ea31383fac70b46dd6ca1647bb29be ([`pr/ipc.237`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.237) -> [`pr/ipc.238`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.238), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.237-rebase..pr/ipc.238)) with newer libmultiprocess subtree to fix ci errors https://github.com/bitcoin/bitcoin/actions/runs/31830711816/job/94865454272?pr=10102 also dropping broken libmultiprocess test that wasn't supposed to be included\n\nUpdated b0fb414a64ea31383fac70b46dd6ca1647bb29be -> f7564263d5a5e6669f6a0e282990fb4a8e77ddb1 ([`pr/ipc.238`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.238) -> [`pr/ipc.239`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.239), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.238..pr/ipc.239)) to fix internal test-each-commit compile error https://github.com/bitcoin/bitcoin/actions/runs/31848571315/job/94919834835 and interface_gui.py test hang https://github.com/bitcoin/bitcoin/actions/runs/31848571315/job/94919835069?pr=10102 caused by btcsignals\n\nRebased f7564263d5a5e6669f6a0e282990fb4a8e77ddb1 -> e2c3eddf9763bf1f4f02d6d7b52d0847a9bcac3d ([`pr/ipc.239`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.239) -> [`pr/ipc.240`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.240), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.239-rebase..pr/ipc.240)) adding atomic shared_ptr workaround to fix ci errors https://github.com/bitcoin/bitcoin/actions/runs/31894529396/job/95035669578?pr=10102\n\nRebased e2c3eddf9763bf1f4f02d6d7b52d0847a9bcac3d -> a0405dc0a3ae56e3a7fd9ec2e4408dc2e7f6189d ([`pr/ipc.240`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.240) -> [`pr/ipc.241`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.241), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.240-rebase..pr/ipc.241)) disabling -Wc++23-extensions to fix ci errors https://github.com/bitcoin/bitcoin/actions/runs/32046173706/job/95434502022\n\nRebased a0405dc0a3ae56e3a7fd9ec2e4408dc2e7f6189d -> 768d46e7350d6354a988b6a4472f2af6fda8fd37 ([`pr/ipc.241`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.241) -> [`pr/ipc.242`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.242), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.241-rebase..pr/ipc.242)) updating FeeReason and util::Expected IPC serialization due to conflicts with #34075 and gui#807, on top of #29409 pr/ipc-chain.1\n\nRebased 768d46e7350d6354a988b6a4472f2af6fda8fd37 -> c1adb53309f49d45a6ec4ac573adb6342e6238c0 ([`pr/ipc.242`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.242) -> [`pr/ipc.243`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.243), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.242-rebase..pr/ipc.243)) to fix estimateSmartFee\u2192getFeeRateEstimate rename https://github.com/bitcoin/bitcoin/actions/runs/32738095305/job/97465707554\n\nRebased c1adb53309f49d45a6ec4ac573adb6342e6238c0 -> 18415e3cbb9c8fc389e29d8d6add4f40e209e0d9 ([`pr/ipc.243`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.243) -> [`pr/ipc.244`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.244), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.243-rebase..pr/ipc.244)) due to conflicts with #36176\n\nUpdated 18415e3cbb9c8fc389e29d8d6add4f40e209e0d9 -> 13e14ac99559c61b7ebe305f579a86ab222ab0db ([`pr/ipc.244`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.244) -> [`pr/ipc.245`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc.245), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc.244..pr/ipc.245)) to fix iwyu errors in bitcoin-node.cpp and bitcoin-wallet-ipc.cpp https://github.com/bitcoin/bitcoin/actions/runs/34267293550/job/102199755347"
  },
  {
   "t": "2026-08-14T18:31:35Z",
   "kind": "comment",
   "who": "sarkrezahoseinjisus-tech",
   "assoc": "NONE",
   "text": "[quoted text omitted]"
  },
  {
   "t": "2026-08-14T20:26:03Z",
   "kind": "comment",
   "who": "ViniciusCestarii",
   "assoc": "CONTRIBUTOR",
   "text": "I opened https://github.com/bitcoin-core/libmultiprocess/pull/345 to fix the trailing whitespace CI error"
  }
 ],
 "labels_log": [
  {
   "t": "2017-03-28T07:39:19Z",
   "action": "labeled",
   "label": "GUI",
   "who": "jonasschnelli"
  },
  {
   "t": "2017-03-28T07:39:19Z",
   "action": "labeled",
   "label": "RPC/REST/ZMQ",
   "who": "jonasschnelli"
  },
  {
   "t": "2018-06-06T02:47:19Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "maflcko"
  },
  {
   "t": "2018-07-18T22:08:54Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-07-20T22:40:24Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-03T21:03:02Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-06T16:10:53Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-07T22:48:20Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-09T13:33:31Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-09T19:39:09Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-13T19:37:52Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-14T15:59:46Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-23T17:44:40Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-23T23:51:23Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-25T16:41:15Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-29T21:08:31Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-30T15:31:07Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-30T21:37:50Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-31T15:56:55Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-08-31T17:58:56Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-09-07T04:55:07Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-09-14T22:19:18Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-09-15T14:37:49Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-09-26T21:12:29Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-09-26T23:14:24Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-09-27T19:39:19Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-10-08T02:01:34Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-11-01T21:21:22Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-11-05T11:18:01Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-11-12T19:47:34Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-11-13T17:42:13Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-11-26T21:00:01Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2018-11-30T16:31:14Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-01-23T21:36:09Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-01-30T01:03:58Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-02-13T20:38:25Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-02-15T00:05:32Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-03-04T22:25:02Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-03-06T20:28:40Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-03-21T13:39:33Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-03-27T11:35:53Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-05-24T20:21:26Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-06-06T12:09:59Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-06-08T13:44:16Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-06-18T07:51:29Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-06-26T21:23:25Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-06-27T15:07:22Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-06-27T16:10:21Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-06-29T08:54:40Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-07-10T18:07:09Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-07-24T02:47:30Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-08-06T22:41:27Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-08-12T12:35:18Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-08-20T16:45:02Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-08-23T10:48:15Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-08-28T20:38:25Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-08-29T11:09:51Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-08-29T23:35:45Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-09-07T07:27:29Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-09-18T19:25:52Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2019-10-02T00:29:08Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-01-09T23:30:52Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-01-13T12:31:26Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-01-24T23:16:24Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-01-29T13:29:42Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-02-25T23:47:51Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-03-05T07:16:08Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-03-07T01:03:04Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-03-09T21:21:30Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-03-20T17:07:55Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2020-03-31T13:17:45Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  }
 ],
 "state_log": [
  {
   "t": "2017-05-31T14:32:23Z",
   "kind": "renamed",
   "who": "ryanofsky",
   "from": "bitcoin-qt: spawn bitcoind and communicate over pipe (Experimental, WIP)",
   "to": "bitcoin-qt: spawn bitcoind and communicate over pipe (Experimental, WIP, Depends on #10244)"
  },
  {
   "t": "2018-02-14T12:36:10Z",
   "kind": "renamed",
   "who": "ryanofsky",
   "from": "bitcoin-qt: spawn bitcoind and communicate over pipe (Experimental, WIP, Depends on #10244)",
   "to": "[experimental] Multiprocess bitcoin"
  }
 ],
 "text_chars": 251762,
 "text_tokens_estimate": 62940,
 "changed_paths": [
  "CMakeLists.txt",
  "contrib/devtools/circular-dependencies.py",
  "doc/design/libraries.md",
  "doc/multiprocess.md",
  "src/CMakeLists.txt",
  "src/bitcoin-cli.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",
  "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/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": 84,
   "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": 3,
   "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": "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": "13e14ac99559c61b7ebe305f579a86ab222ab0db",
  "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": "4c842beaae",
    "subject": "Squashed 'src/ipc/libmultiprocess/' changes from e8de5c7b68e..4d454a81da6",
    "files": 56,
    "add": 1398,
    "del": 420
   },
   {
    "sha": "7b997424a9",
    "subject": "Add capnp wrapper for Chain interface",
    "files": 10,
    "add": 587,
    "del": 7
   },
   {
    "sha": "567c2e020f",
    "subject": "Merge commit '4c842beaae2e97d7934800c8433da9632b21c0ff' into pr/subtree-14",
    "files": 56,
    "add": 1398,
    "del": 420
   },
   {
    "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": "13e14ac995",
    "subject": "combine_logs: Handle multiprocess wallet log files",
    "files": 1,
    "add": 4,
    "del": 0
   }
  ],
  "patch_truncated": true
 },
 "input_hash": "d98b5fd2bf66a699",
 "extracted_at": "2026-09-17T16:15:31+00:00"
}