{
 "number": 26022,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/26022",
 "title": "Add util::ResultPtr class",
 "author": "ryanofsky",
 "author_association": "MEMBER",
 "created_at": "2022-09-06T15:57:14Z",
 "updated_at": "2026-09-13T15:15:17Z",
 "age_days": 1472,
 "draft": true,
 "labels": [],
 "milestone": null,
 "base": "master",
 "head_sha": "7c8ab95ee92ce60d9a3489e585e70c83c109840a",
 "head_ref": "pr/bresult-ptr",
 "head_repo": "ryanofsky/bitcoin",
 "head_history": [
  {
   "t": "2022-09-20T18:28:26Z",
   "sha": "123788cf6dd74510e2a5b4ea3c566dc512a871ef"
  },
  {
   "t": "2023-10-26T21:03:39Z",
   "sha": "a1dddc5a2a86908d9ea677875ad67a79d2c71d14"
  },
  {
   "t": "2024-02-21T23:24:39Z",
   "sha": "8ecac0885ef5b6fc2313cd2f8dfb48c10a05db27"
  },
  {
   "t": "2024-05-01T17:54:25Z",
   "sha": "9f58eb795ec5592c59f9af3269f004e589a2368f"
  },
  {
   "t": "2024-06-17T23:04:57Z",
   "sha": "73ec37294e958d4f654ae1358e5617bebbc71616"
  },
  {
   "t": "2024-07-18T19:21:44Z",
   "sha": "1147ab68af593f2afd590f1f60805a1ee65fb712"
  },
  {
   "t": "2024-11-04T13:33:01Z",
   "sha": "c7e73097f4a8336e23d098c2fb4296319aba318e"
  },
  {
   "t": "2024-12-06T11:42:39Z",
   "sha": "f8254e78c140f5756fbd981994d17f6a91ee027b"
  },
  {
   "t": "2024-12-06T12:13:59Z",
   "sha": "f44cb2416fe98a6ffafba2b37ee8e1a18b731a1f"
  },
  {
   "t": "2025-03-12T01:15:08Z",
   "sha": "06512c44b6264f4ece4108dfcb572c0a90ec55b9"
  },
  {
   "t": "2025-08-01T23:13:37Z",
   "sha": "5b8b9c5cd7662b85d5a7474d08f1a14d0ce1ad0f"
  },
  {
   "t": "2025-11-11T22:15:34Z",
   "sha": "6efb6d865e90ff346c33fc39dc5e28a1192b3d12"
  },
  {
   "t": "2025-12-12T12:19:18Z",
   "sha": "f8e431238504ce959528eb51f2855939ae42a431"
  },
  {
   "t": "2025-12-16T02:10:33Z",
   "sha": "cf734e5b4778bbcbe01276f97d57e3941581535b"
  },
  {
   "t": "2026-01-17T16:06:02Z",
   "sha": "618ea16aff9b68a91b28523f7c7455b2934f2604"
  },
  {
   "t": "2026-03-31T22:42:15Z",
   "sha": "939c16154ed0fb0990f1d82649cd348c319056f4"
  },
  {
   "t": "2026-04-01T12:17:03Z",
   "sha": "e0982ed68476d5a4ade1d25b948ccb5e24da3657"
  },
  {
   "t": "2026-05-07T08:01:23Z",
   "sha": "1a746cbe291640e7fcdbde15d5c8e4cb603df051"
  },
  {
   "t": "2026-06-24T17:07:23Z",
   "sha": "c1b808f88ee45b10d64eb48069560d714249147b"
  },
  {
   "t": "2026-07-14T13:45:25Z",
   "sha": "84c530c73c6e9a25d299444802726c588ded5df4"
  },
  {
   "t": "2026-08-15T16:08:43Z",
   "sha": "56cc2400cccffbe054e511ce7edd4b30fb1f50d7"
  },
  {
   "t": "2026-09-08T18:34:07Z",
   "sha": "42daa09f9bc6a9613dd8ba4bf26c6f1f54b305cf"
  }
 ],
 "additions": 813,
 "deletions": 199,
 "changed_files": 19,
 "commit_count": 11,
 "size_bucket": "XL",
 "mergeable_state": "clean",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {},
   "conflicts": [
    {
     "number": 35713,
     "title": "Remove boost as a unit test runner",
     "author": "rustaceanrob"
    },
    {
     "number": 35557,
     "title": "kernel, validation: Add btck_chainstate_manager_set_clock_time",
     "author": "ryanofsky"
    },
    {
     "number": 35187,
     "title": "kernel: Block validation without a complete UTXO set",
     "author": "sedited"
    },
    {
     "number": 34909,
     "title": "wallet, refactor: modularise wallet by extracting out legacy wallet migration",
     "author": "rkrux"
    },
    {
     "number": 34374,
     "title": "kernel: use struct-based logging and simplify logging interface",
     "author": "stickies-v"
    },
    {
     "number": 34132,
     "title": "coins, dbwrapper: remove error catcher, make point-read failures fatal",
     "author": "l0rinc"
    },
    {
     "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": 28690,
     "title": "build: Introduce internal kernel library",
     "author": "sedited"
    },
    {
     "number": 25665,
     "title": "refactor: Add util::Result failure types and ability to merge result values",
     "author": "ryanofsky"
    },
    {
     "number": 19461,
     "title": "multiprocess: Add bitcoin-gui -ipcconnect option",
     "author": "ryanofsky"
    },
    {
     "number": 19460,
     "title": "multiprocess: Add bitcoin-wallet -ipcconnect option",
     "author": "ryanofsky"
    },
    {
     "number": 10102,
     "title": "Multiprocess bitcoin",
     "author": "ryanofsky"
    }
   ]
  }
 },
 "acks_parsed": {},
 "acks_tally": {
  "ack": 0,
  "stale_ack": 0,
  "concept_ack": 0,
  "approach_ack": 0,
  "nack": 0,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 0,
  "changes_requested": 0,
  "distinct_reviewers": [
   "l0rinc"
  ]
 },
 "signals": {
  "needs_rebase": false,
  "ci_failed": false,
  "mergeable_state": "clean",
  "last_author_activity": "2026-09-08T18:34:07Z",
  "last_reviewer_activity": "2026-07-23T02:16:00Z",
  "last_reviewer": "l0rinc",
  "author_silent_days": 8,
  "waiting_on_author_days": 0,
  "days_since_update": 4
 },
 "refs": {
  "mentioned": [
   25665,
   26004,
   26005,
   30595,
   31061,
   35182,
   35205
  ],
  "depends_on": [
   25665
  ],
  "fixes": [],
  "linked_issues": [],
  "references": [
   {
    "number": 25665,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "refactor: Add util::Result failure types and ability to merge result values"
   },
   {
    "number": 26004,
    "type": "issue",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "util::Result has confusing interface for std::*_ptr T"
   },
   {
    "number": 26005,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2022-09-19",
    "title": "Wallet: Fix error handling (copy_file failure in RestoreWallet, and in general via interfaces)"
   },
   {
    "number": 30595,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-11-04",
    "title": "kernel: Introduce C header API"
   },
   {
    "number": 31061,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-01-15",
    "title": "refactor: Check translatable format strings at compile-time"
   },
   {
    "number": 35182,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-06-22",
    "title": "Replace libevent with our own HTTP and socket-handling implementation"
   },
   {
    "number": 35205,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-08-04",
    "title": "kernel,node: add `dbcache` setter and clarify defaults"
   }
  ],
  "conflicts": [
   35713,
   35557,
   35187,
   34909,
   34374,
   34132,
   30342,
   29700,
   28690,
   25665,
   19461,
   19460,
   10102
  ]
 },
 "stack": {
  "shares_commits_with": [
   25722
  ],
  "based_on": [],
  "base_for": []
 },
 "review_paths": [
  "src/wallet/interfaces.cpp"
 ],
 "body": "**This is based on #25665.** The non-base commits are:\n\n- [`a44b2336cb3` Add util::ResultPtr class](https://github.com/bitcoin/bitcoin/pull/26022/commits/a44b2336cb3862fd8cca6d8644d449ac1bc4311e)\n- [`42daa09f9bc` Use ResultPtr<unique_ptr> instead of Result<unique_ptr>](https://github.com/bitcoin/bitcoin/pull/26022/commits/42daa09f9bc6a9613dd8ba4bf26c6f1f54b305cf)\n\n---\n\nThe `util::ResultPtr` class is a wrapper for `util::Result` providing syntax sugar to make it less awkward to use with returned pointers. Instead of needing to be deferenced twice with `**result` or `(*result)->member`, it only needs to be dereferenced once with `*result` or `result->member`. Also when it is used in a boolean context, instead of evaluating to true when there is no error and the pointer is null, it evaluates to false so it is straightforward to determine whether the result points to something.\n\nThis PR is only partial a solution to #26004 because while it makes it easier to check for null pointer values, it does not make it impossible to return a null pointer value inside a successful result. It would be possible to enforce that successful results always contain non-null pointers by using a `not_null` type (https://github.com/bitcoin/bitcoin/issues/24423) in combination with `ResultPtr`, though.",
 "commits": [
  {
   "sha": "5dd221497c518dcd3dbb52d7cc79c4a74086e3eb",
   "date": "2026-08-14T20:01:12Z",
   "message": "refactor: Add util::Result failure values\n\nAdd util::Result support for returning more error information. For better error\nhandling, adds the ability to return a value on failure, not just a value on\nsuccess. This is a key missing feature that made the result class not useful\nfor functions like LoadChainstate() which produce different errors that need to\nbe handled differently.\n\nThis change also makes some more minor improvements:\n\n- Smaller type size. On 64-bit platforms, util::Result<int> is 16 bytes, and\n  util::Result<void> is 8 bytes. Previously util::Result<int> and\n  util::Result<void> were 72 bytes.\n\n- More documentation and tests."
  },
  {
   "sha": "a649feba608063e4d06ae555aa387bb6136c2478",
   "date": "2026-08-14T20:01:12Z",
   "message": "wallet: fix clang-tidy warning performance-no-automatic-move\n\nPrevious commit causes the warning to be triggered, but the suboptimal return\nfrom const statement was added earlier in 517e204bacd9d.\n\nWarning was causing CI failure https://cirrus-ci.com/task/6159914970644480"
  },
  {
   "sha": "51932a8005acd3fe71e7a603d3c5da29b207975a",
   "date": "2026-08-14T20:01:12Z",
   "message": "refactor: Add util::Result::Update() method\n\nAdd util::Result Update method to make it possible to change the value of an\nexisting Result object. This will be useful for functions that can return\nmultiple error and warning messages, and want to be able to change the result\nvalue while keeping existing messages."
  },
  {
   "sha": "e9d494ca7e70a3aac4d1ddb3aeb7fb25997d8271",
   "date": "2026-08-14T20:01:12Z",
   "message": "refactor: Use util::Result class in LoadChainstate and VerifyLoadedChainstate"
  },
  {
   "sha": "69f8f77588483c105ca29bcd238c5d1c4ad79891",
   "date": "2026-08-14T20:01:12Z",
   "message": "refactor: Add util::Result multiple error and warning messages\n\nAdd util::Result support for returning warning messages and multiple errors,\nnot just a single error string. This provides a way for functions to report\nerrors and warnings in a standard way, and simplifies interfaces.\n\nThe functionality is unit tested here, and put to use in followup PR\nhttps://github.com/bitcoin/bitcoin/pull/25722"
  },
  {
   "sha": "5a38099ffeafbbbea70f2da1c7f69fdf9140d6cb",
   "date": "2026-08-14T20:01:12Z",
   "message": "test: add static test for util::Result memory usage\n\nSuggested by Martin Leitner-Ankerl <martin.ankerl@gmail.com>\nhttps://github.com/bitcoin/bitcoin/pull/25722#discussion_r1174298529\n\nCo-authored-by: Martin Leitner-Ankerl <martin.ankerl@gmail.com>"
  },
  {
   "sha": "95c744333eb0d5fd8fc2dd7a76569a6c52930e8c",
   "date": "2026-08-14T20:01:12Z",
   "message": "ci: Avoid -Wno-error=maybe-uninitialized false positives\n\nAvoid false positive maybe-uninitialized errors in native_previous_releases\nCI job.\n\nFix was suggested by maflcko in\nhttps://github.com/bitcoin/bitcoin/pull/25665#issuecomment-3457573218\n\nCI errors look like:\nhttps://github.com/bitcoin/bitcoin/actions/runs/25426711469/job/74581986567?pr=25665\n\n/home/admin/actions-runner/_work/_temp/src/wallet/test/util.cpp: In function \u2018wallet::DescriptorScriptPubKeyMan* wallet::CreateDescriptor(CWallet&, const std::string&, bool)\u2019:\n/home/admin/actions-runner/_work/_temp/src/wallet/test/util.cpp:143:10: error: \u2018*(const std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>*)((char*)&spkm + offsetof(util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>, void, util::Messages>,util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>, void, util::Messages>::<unnamed>.util::detail::SuccessHolder<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>, void, util::Messages>::<unnamed>)).std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>::_M_data\u2019 may be used uninitialized [-Werror=maybe-uninitialized]\n  143 |     auto spkm = Assert(keystore.AddWalletDescriptor(w_desc, keys,/*label=*/\"\", /*internal=*/false));\n      |          ^~~~\ncc1plus: all warnings being treated as errors"
  },
  {
   "sha": "781faa65b05b50a0c06de77512bf0f4f1bf645b7",
   "date": "2026-09-03T11:32:49Z",
   "message": "Merge branch 'pr/bresult2' into pr/bresult-ptr\n\n# Conflicts:\n#\tsrc/init.cpp"
  },
  {
   "sha": "a44b2336cb3862fd8cca6d8644d449ac1bc4311e",
   "date": "2026-09-03T11:32:49Z",
   "message": "Add util::ResultPtr class\n\nThe util::ResultPtr class is a wrapper for util::Result providing syntax sugar\nto make it less awkward to use with returned pointers. Instead of needing to be\ndeferenced twice with **result or (*result)->member, it only needs to be\ndereferenced once with *result or result->member. Also when it is used in a\nboolean context, instead of evaluating to true when there is no error and the\npointer is null, it evaluates to false so it is straightforward to determine\nwhether the result points to something.\n\nThis PR is only partial a solution to #26004 because while it makes it easier\nto check for null pointer values, it does not make it impossible to return a\nnull pointer value inside a successful result. It would be possible to enforce\nthat successful results always contain non-null pointers by using a not_null\ntype (https://github.com/bitcoin/bitcoin/issues/24423) in combination with\nResultPtr, though."
  },
  {
   "sha": "42daa09f9bc6a9613dd8ba4bf26c6f1f54b305cf",
   "date": "2026-09-03T11:32:49Z",
   "message": "Use ResultPtr<unique_ptr> instead of Result<unique_ptr>"
  },
  {
   "sha": "7c8ab95ee92ce60d9a3489e585e70c83c109840a",
   "date": "2026-09-03T11:32:49Z",
   "message": "test-each-commit: Increase fetch depth\n\nNeeded due to base PR, can be dropped before merge"
  }
 ],
 "timeline": [
  {
   "t": "2022-09-06T15:57:51Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "In draft state because it's a partial solution to #26004 and could be discussed more"
  },
  {
   "t": "2022-09-20T18:28:26Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "123788cf6dd74510e2a5b4ea3c566dc512a871ef"
  },
  {
   "t": "2022-09-20T18:28:53Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 4b8ee99dea4d990ac21dd6074a15511bc7842a8e -> 123788cf6dd74510e2a5b4ea3c566dc512a871ef ([`pr/bresult-ptr.1`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.1) -> [`pr/bresult-ptr.2`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.2), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.1-rebase..pr/bresult-ptr.2)) due to conflict with #26005"
  },
  {
   "t": "2023-10-26T21:03:39Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "a1dddc5a2a86908d9ea677875ad67a79d2c71d14"
  },
  {
   "t": "2024-02-21T23:24:39Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8ecac0885ef5b6fc2313cd2f8dfb48c10a05db27"
  },
  {
   "t": "2024-02-21T23:29:01Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased a1dddc5a2a86908d9ea677875ad67a79d2c71d14 -> 8ecac0885ef5b6fc2313cd2f8dfb48c10a05db27 ([`pr/bresult-ptr.3`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.3) -> [`pr/bresult-ptr.4`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.4), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.3-rebase..pr/bresult-ptr.4)) on top of https://github.com/bitcoin/bitcoin/pull/25665.\n\nI also rewrote the commit and PR description. I think this is in a good state to review, despite being based on another PR."
  },
  {
   "t": "2024-05-01T17:54:25Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "9f58eb795ec5592c59f9af3269f004e589a2368f"
  },
  {
   "t": "2024-05-01T17:56:20Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 8ecac0885ef5b6fc2313cd2f8dfb48c10a05db27 -> 9f58eb795ec5592c59f9af3269f004e589a2368f ([`pr/bresult-ptr.4`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.4) -> [`pr/bresult-ptr.5`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.5), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.4-rebase..pr/bresult-ptr.5)) on top of latest #25665 (no other changes)"
  },
  {
   "t": "2024-06-17T23:04:57Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "73ec37294e958d4f654ae1358e5617bebbc71616"
  },
  {
   "t": "2024-07-18T19:21:44Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "1147ab68af593f2afd590f1f60805a1ee65fb712"
  },
  {
   "t": "2024-11-04T13:33:01Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "c7e73097f4a8336e23d098c2fb4296319aba318e"
  },
  {
   "t": "2024-11-04T13:34:44Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 5f6f91c5fd848fecdc71db25ce1c5ddbedc78f29 -> c7e73097f4a8336e23d098c2fb4296319aba318e ([`pr/bresult-ptr.8`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.8) -> [`pr/bresult-ptr.9`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.9), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.8-rebase..pr/bresult-ptr.9)) on top of updated base PR (no changes or conflicts)\nRebased c7e73097f4a8336e23d098c2fb4296319aba318e -> f8254e78c140f5756fbd981994d17f6a91ee027b ([`pr/bresult-ptr.9`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.9) -> [`pr/bresult-ptr.10`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.10), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.9-rebase..pr/bresult-ptr.10)) on top of updated base PR (no changes or conflicts)\nRebased f8254e78c140f5756fbd981994d17f6a91ee027b -> f44cb2416fe98a6ffafba2b37ee8e1a18b731a1f ([`pr/bresult-ptr.10`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.10) -> [`pr/bresult-ptr.11`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.11), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.10-rebase..pr/bresult-ptr.11)) on top of updated base PR (no changes or conflicts)\nRebased f44cb2416fe98a6ffafba2b37ee8e1a18b731a1f -> 06512c44b6264f4ece4108dfcb572c0a90ec55b9 ([`pr/bresult-ptr.11`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.11) -> [`pr/bresult-ptr.12`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.12), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.11-rebase..pr/bresult-ptr.12)) due to silent conflict with #31061\n\nRebased 06512c44b6264f4ece4108dfcb572c0a90ec55b9 -> 5b8b9c5cd7662b85d5a7474d08f1a14d0ce1ad0f ([`pr/bresult-ptr.12`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.12) -> [`pr/bresult-ptr.13`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.13), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.12-rebase..pr/bresult-ptr.13))\n\nRebased 5b8b9c5cd7662b85d5a7474d08f1a14d0ce1ad0f -> 6efb6d865e90ff346c33fc39dc5e28a1192b3d12 ([`pr/bresult-ptr.13`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.13) -> [`pr/bresult-ptr.14`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.14), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.13-rebase..pr/bresult-ptr.14)) due to conflict with #30595\n\nRebased 6efb6d865e90ff346c33fc39dc5e28a1192b3d12 -> f8e431238504ce959528eb51f2855939ae42a431 ([`pr/bresult-ptr.14`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.14) -> [`pr/bresult-ptr.15`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.15), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.14-rebase..pr/bresult-ptr.15))\n\nRebased f8e431238504ce959528eb51f2855939ae42a431 -> cf734e5b4778bbcbe01276f97d57e3941581535b ([`pr/bresult-ptr.15`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.15) -> [`pr/bresult-ptr.16`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.16), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.15-rebase..pr/bresult-ptr.16))\n\nRebased cf734e5b4778bbcbe01276f97d57e3941581535b -> 8ef747c80fc3e39ecb2bb5856a489cbfc5737f48 ([`pr/bresult-ptr.16`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.16) -> [`pr/bresult-ptr.17`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.17), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.16-rebase..pr/bresult-ptr.17)) on top of #25665 pr/bresult2.73\n\nRebased 8ef747c80fc3e39ecb2bb5856a489cbfc5737f48 -> 939c16154ed0fb0990f1d82649cd348c319056f4 ([`pr/bresult-ptr.17`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.17) -> [`pr/bresult-ptr.18`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.18), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.17-rebase..pr/bresult-ptr.18)) on top of #25665 pr/bresult2.76\n\nRebased 939c16154ed0fb0990f1d82649cd348c319056f4 -> e0982ed68476d5a4ade1d25b948ccb5e24da3657 ([`pr/bresult-ptr.18`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.18) -> [`pr/bresult-ptr.19`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.19), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.18-rebase..pr/bresult-ptr.19)) on top of #25665 pr/bresult2.77\n\nRebased e0982ed68476d5a4ade1d25b948ccb5e24da3657 -> 1a746cbe291640e7fcdbde15d5c8e4cb603df051 ([`pr/bresult-ptr.19`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.19) -> [`pr/bresult-ptr.20`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.20), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.19-rebase..pr/bresult-ptr.20)) on top of #25665 pr/bresult2.77\n\nRebased 1a746cbe291640e7fcdbde15d5c8e4cb603df051 -> c1b808f88ee45b10d64eb48069560d714249147b ([`pr/bresult-ptr.20`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.20) -> [`pr/bresult-ptr.21`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.21), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.20-rebase..pr/bresult-ptr.21)) on top of #25665 pr/bresult2.80 due to conflict with #35182 (libevent replacement)\n\nRebased c1b808f88ee45b10d64eb48069560d714249147b -> 84c530c73c6e9a25d299444802726c588ded5df4 ([`pr/bresult-ptr.21`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.21) -> [`pr/bresult-ptr.22`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.22), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.21-rebase..pr/bresult-ptr.22)) on top of #25665 pr/bresult2.81 with no changes\n\nRebased 84c530c73c6e9a25d299444802726c588ded5df4 -> 577b7fb1e0fc6504534ec0341fe37eca74b03737 ([`pr/bresult-ptr.22`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.22) -> [`pr/bresult-ptr.23`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.23), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.22-rebase..pr/bresult-ptr.23)) on top of #25665 pr/bresult2.82 due to conflicts with #30595 and #35205\n\nRebased 577b7fb1e0fc6504534ec0341fe37eca74b03737 -> 42daa09f9bc6a9613dd8ba4bf26c6f1f54b305cf ([`pr/bresult-ptr.23`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.23) -> [`pr/bresult-ptr.24`](https://github.com/ryanofsky/bitcoin/commits/pr/bresult-ptr.24), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/bresult-ptr.23-rebase..pr/bresult-ptr.24)) on top of #25665 pr/bresult2.83 due to conflict with #35182"
  },
  {
   "t": "2024-12-06T11:42:39Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "f8254e78c140f5756fbd981994d17f6a91ee027b"
  },
  {
   "t": "2024-12-06T12:13:59Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "f44cb2416fe98a6ffafba2b37ee8e1a18b731a1f"
  },
  {
   "t": "2025-03-12T01:15:08Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "06512c44b6264f4ece4108dfcb572c0a90ec55b9"
  },
  {
   "t": "2025-08-01T23:13:37Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "5b8b9c5cd7662b85d5a7474d08f1a14d0ce1ad0f"
  },
  {
   "t": "2025-11-11T22:15:34Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "6efb6d865e90ff346c33fc39dc5e28a1192b3d12"
  },
  {
   "t": "2025-12-12T12:19:18Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "f8e431238504ce959528eb51f2855939ae42a431"
  },
  {
   "t": "2025-12-16T02:10:33Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "cf734e5b4778bbcbe01276f97d57e3941581535b"
  },
  {
   "t": "2026-01-17T16:06:02Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "618ea16aff9b68a91b28523f7c7455b2934f2604"
  },
  {
   "t": "2026-03-31T22:42:15Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "939c16154ed0fb0990f1d82649cd348c319056f4"
  },
  {
   "t": "2026-04-01T12:17:03Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "e0982ed68476d5a4ade1d25b948ccb5e24da3657"
  },
  {
   "t": "2026-05-07T08:01:23Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "1a746cbe291640e7fcdbde15d5c8e4cb603df051"
  },
  {
   "t": "2026-06-24T17:07:23Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "c1b808f88ee45b10d64eb48069560d714249147b"
  },
  {
   "t": "2026-07-14T13:45:25Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "84c530c73c6e9a25d299444802726c588ded5df4"
  },
  {
   "t": "2026-07-23T02:16:00Z",
   "kind": "review_comment",
   "who": "l0rinc",
   "assoc": "MEMBER",
   "path": "src/wallet/interfaces.cpp",
   "commit": "7c8ab95ee92ce60d9a3489e585e70c83c109840a",
   "in_reply_to": null,
   "text": "isn't this inverted?"
  },
  {
   "t": "2026-08-15T16:08:43Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "56cc2400cccffbe054e511ce7edd4b30fb1f50d7"
  },
  {
   "t": "2026-09-08T18:34:07Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "42daa09f9bc6a9613dd8ba4bf26c6f1f54b305cf"
  }
 ],
 "labels_log": [
  {
   "t": "2022-09-19T16:21:34Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2022-09-20T20:13:58Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-05-30T05:58:57Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2023-05-31T20:39:43Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2023-10-24T22:48:04Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2023-10-26T21:10:59Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-01-14T01:27:37Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-02-22T00:46:50Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-04-30T18:37:57Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-05-01T19:47:57Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-05-20T11:58:25Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-06-17T23:31:35Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-02T11:19:56Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-18T22:16:21Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-18T23:36:31Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-07-19T13:57:40Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-08-16T10:28:30Z",
   "action": "labeled",
   "label": "Needs CMake port",
   "who": "hebasto"
  },
  {
   "t": "2024-08-29T05:21:46Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-08-29T05:22:58Z",
   "action": "unlabeled",
   "label": "Needs CMake port",
   "who": "maflcko"
  },
  {
   "t": "2024-09-02T22:46:43Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-11-04T15:09:35Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-11-04T15:54:53Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2024-12-05T00:47:15Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2024-12-06T13:07:39Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-01-17T13:25:47Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-03-12T03:14:59Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-05-19T11:56:43Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-05-22T00:26:01Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-07-30T21:17:52Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-08-02T01:11:45Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-11-04T17:48:55Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-11-11T23:21:11Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-09T02:45:22Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-12T13:18:22Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-12T18:03:13Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-15T16:08:53Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-16T02:46:39Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-16T06:24:37Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-16T15:46:14Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-01-17T16:56:51Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-03-23T06:11:35Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-04-01T00:43:54Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-05-02T11:19:58Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-05-07T09:32:25Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-06-22T14:31:30Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-06-24T18:14:34Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-06-24T18:45:59Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-06-24T19:11:28Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-08T08:57:17Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-14T14:28:31Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-04T20:50:07Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-15T17:50:57Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-26T11:24:14Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-09-08T18:58:41Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-09-08T20:15:47Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-09-08T20:36:26Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  }
 ],
 "state_log": [],
 "text_chars": 13787,
 "text_tokens_estimate": 3446,
 "changed_paths": [
  ".github/workflows/ci.yml",
  "ci/test/00_setup_env_native_previous_releases.sh",
  "src/addrdb.cpp",
  "src/addrdb.h",
  "src/init.cpp",
  "src/interfaces/wallet.h",
  "src/kernel/CMakeLists.txt",
  "src/kernel/bitcoinkernel.cpp",
  "src/node/chainstate.cpp",
  "src/node/chainstate.h",
  "src/qt/walletcontroller.cpp",
  "src/test/result_tests.cpp",
  "src/test/util/setup_common.cpp",
  "src/util/CMakeLists.txt",
  "src/util/messages.cpp",
  "src/util/messages.h",
  "src/util/result.h",
  "src/wallet/interfaces.cpp",
  "src/wallet/wallet.cpp"
 ],
 "files": [
  {
   "path": ".github/workflows/ci.yml",
   "add": 1,
   "del": 1
  },
  {
   "path": "ci/test/00_setup_env_native_previous_releases.sh",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/addrdb.cpp",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/addrdb.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/init.cpp",
   "add": 22,
   "del": 21
  },
  {
   "path": "src/interfaces/wallet.h",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/kernel/CMakeLists.txt",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/kernel/bitcoinkernel.cpp",
   "add": 7,
   "del": 7
  },
  {
   "path": "src/node/chainstate.cpp",
   "add": 56,
   "del": 39
  },
  {
   "path": "src/node/chainstate.h",
   "add": 6,
   "del": 22
  },
  {
   "path": "src/qt/walletcontroller.cpp",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/test/result_tests.cpp",
   "add": 230,
   "del": 11
  },
  {
   "path": "src/test/util/setup_common.cpp",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/util/CMakeLists.txt",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/util/messages.cpp",
   "add": 30,
   "del": 0
  },
  {
   "path": "src/util/messages.h",
   "add": 53,
   "del": 0
  },
  {
   "path": "src/util/result.h",
   "add": 382,
   "del": 63
  },
  {
   "path": "src/wallet/interfaces.cpp",
   "add": 9,
   "del": 20
  },
  {
   "path": "src/wallet/wallet.cpp",
   "add": 2,
   "del": 2
  }
 ],
 "test_lines": 251,
 "git": {
  "head": "7c8ab95ee92ce60d9a3489e585e70c83c109840a",
  "head_matches_backup": true,
  "base": "4ec6ff022a4b33fab46afa5656a983cda8ba3099",
  "commits": [
   {
    "sha": "5dd221497c",
    "subject": "refactor: Add util::Result failure values",
    "files": 3,
    "add": 335,
    "del": 65
   },
   {
    "sha": "a649feba60",
    "subject": "wallet: fix clang-tidy warning performance-no-automatic-move",
    "files": 1,
    "add": 1,
    "del": 1
   },
   {
    "sha": "51932a8005",
    "subject": "refactor: Add util::Result::Update() method",
    "files": 2,
    "add": 51,
    "del": 7
   },
   {
    "sha": "e9d494ca7e",
    "subject": "refactor: Use util::Result class in LoadChainstate and VerifyLoadedChainstate",
    "files": 5,
    "add": 94,
    "del": 92
   },
   {
    "sha": "69f8f77588",
    "subject": "refactor: Add util::Result multiple error and warning messages",
    "files": 6,
    "add": 271,
    "del": 30
   },
   {
    "sha": "5a38099ffe",
    "subject": "test: add static test for util::Result memory usage",
    "files": 2,
    "add": 7,
    "del": 1
   },
   {
    "sha": "95c744333e",
    "subject": "ci: Avoid -Wno-error=maybe-uninitialized false positives",
    "files": 1,
    "add": 1,
    "del": 1
   },
   {
    "sha": "781faa65b0",
    "subject": "Merge branch 'pr/bresult2' into pr/bresult-ptr",
    "files": 13,
    "add": 732,
    "del": 169
   },
   {
    "sha": "a44b2336cb",
    "subject": "Add util::ResultPtr class",
    "files": 2,
    "add": 62,
    "del": 0
   },
   {
    "sha": "42daa09f9b",
    "subject": "Use ResultPtr<unique_ptr> instead of Result<unique_ptr>",
    "files": 6,
    "add": 18,
    "del": 29
   },
   {
    "sha": "7c8ab95ee9",
    "subject": "test-each-commit: Increase fetch depth",
    "files": 1,
    "add": 1,
    "del": 1
   }
  ],
  "patch_truncated": true
 },
 "input_hash": "02067a3888ad6437",
 "extracted_at": "2026-09-17T16:15:31+00:00"
}