{
 "number": 36697,
 "input_hash": "2f1e648a46c6c815",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-10-31T01:14:13+00:00",
 "result": {
  "summary": "Adds the exportaddresskey RPC method for descriptor wallets, allowing callers to export locally available private keys corresponding to a specified address. The RPC supports exporting either original wallet keys or effective Taproot key-path keys across single-key, P2SH/P2WSH, multisig, Miniscript, and Taproot scripts, including individual MuSig2 participant keys without aggregation.",
  "problem": "Following the removal of legacy wallet support and dumpprivkey, descriptor wallets have lacked a direct mechanism to extract the private key for a single address. Callers needing an address's private key currently have to determine its descriptor, find the derivation index, and re-implement derivation math outside Bitcoin Core.",
  "card": "Adds the exportaddresskey RPC to export locally available private keys for a specific address in descriptor wallets, filling a workflow gap left by the removal of dumpprivkey. It supports both raw wallet keys and effective Taproot key-path keys across single-key, script-based, Miniscript, and MuSig2 participant descriptors without aggregating participant secrets. The author cites integration requirements for the Quietproof client as motivation, though no external issues or corroborating users are linked.",
  "evidence": [
   "Author notes the initial motivation was 'the lack of dumppriv since v30 and the need for it in the making of the Quietproof client' (PR description). No other contributors or linked issues are cited."
  ],
  "scope_notes": "The PR introduces descriptor inspection and private derivation methods (ExpandPrivateChecked, GetMuSig2KeyInfo, GetPrivateKeyRoots) alongside a new export module (src/wallet/export.cpp), with over 2,700 lines of unit and functional test coverage. It also includes an auxiliary block synchronization fix in test/functional/p2p_segwit.py.",
  "changed_since_previous": "Includes full implementation and test diffs, adding x-only parity resolution for reloaded descriptors, wallet passphrase concurrency tests, and a synchronization fix in p2p_segwit.py.",
  "thread": {
   "last_event_at": null,
   "events": 0,
   "head_sha": "64f57fe253b60849ee44ab2d4b62ea5cc2602933",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [],
  "risk": {
   "level": "high",
   "touches": [
    "wallet",
    "rpc_api"
   ],
   "why": "Flaws in private key extraction, TapTweak derivation, or export authorization could expose incorrect keys, leak unintended participant secrets, or bypass wallet passphrase protections."
  },
  "discussion": {
   "author_status": "no discussion",
   "open_concerns": [],
   "resolved_concerns": []
  },
  "reviewability": {
   "state": "Ready",
   "label": "Needs rebase",
   "reason": "Conflicts with master; review the logic now, the rebase is mechanical."
  },
  "agreement": {
   "state": "Crickets",
   "summary": "Crickets: no substantive comment either way",
   "reason": "Derived from the claims and support below; every entry links to the statement it came from.",
   "evidence": [],
   "objections": [],
   "support": [],
   "participants": [],
   "derivation": "no substantive comment either way",
   "model_state": null,
   "corrections": [],
   "notes": null
  },
  "dependencies": {
   "depends_on": [],
   "enables": []
  },
  "categories": [
   {
    "name": "docs",
    "member": false,
    "evidence": "Includes a release notes fragment doc/release-notes-exportaddresskey.md alongside a code feature.",
    "band": "Unranked",
    "reason_tag": "cleanup",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Documentation updates that accompany code changes belong to the area of the code change rather than the docs category."
   },
   {
    "name": "p2p",
    "member": false,
    "evidence": "Touches test/functional/p2p_segwit.py with an auxiliary block synchronization fix.",
    "band": "Unranked",
    "reason_tag": "cleanup",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "An incidental test synchronization tweak does not alter P2P network behavior, protocols, or node connectivity."
   },
   {
    "name": "tests",
    "member": false,
    "evidence": "Registers a new functional test in test/functional/test_runner.py.",
    "band": "Unranked",
    "reason_tag": "test coverage",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Adding test coverage for a specific wallet feature belongs to the wallet category, not test infrastructure."
   },
   {
    "name": "wallet",
    "member": true,
    "evidence": "Carries the Wallet label, adds src/wallet/export.cpp, and introduces the exportaddresskey RPC for descriptor wallets.",
    "band": "P3",
    "reason_tag": "new feature",
    "score": 0.4,
    "factors": {
     "bug_severity": 0,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Adds exportaddresskey to fill the gap left by the removal of dumpprivkey in descriptor wallets, letting users export private keys for specific addresses without external derivation math. The author cites a concrete use case ('the lack of dumppriv since v30 and the need for it in the making of the Quietproof client'), though without wider linked issues or broad user demand this is a worthwhile feature rather than an urgent release blocker."
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-10-31T01:14:13+00:00",
  "code": "2026-10-31T01:20:08+00:00",
  "judgments": 4
 }
}