{
 "number": 32966,
 "input_hash": "4a9588831aa09450",
 "model": "openrouter/google/gemini-3.8-flash",
 "batch": false,
 "created": "2026-09-17T15:49:47+00:00",
 "provider": "Google",
 "stop_reason": "end_turn",
 "usage": {
  "input_tokens": 43097,
  "cache_creation_input_tokens": 0,
  "cache_read_input_tokens": 0,
  "output_tokens": 4907
 },
 "cost_usd": 0.050724,
 "error": null,
 "result": {
  "display": {
   "goal": [
    "Add BIP 352 Silent Payments receiving support to the Bitcoin Core wallet.",
    "Allow users to receive funds to reusable silent payment addresses without on-chain address reuse."
   ],
   "reviewability": [
    "Needs rebase and author has been silent for over 120 days.",
    "Reviewing now is premature until upstream secp256k1 support and base prerequisite PRs land."
   ],
   "agreement": [
    "Strong conceptual support with collaborative testing and architectural guidance (josibake, Sjors).",
    "Minor review comments on functional tests remain unaddressed due to dependency stall (rkrux)."
   ],
   "categories": [
    {
     "name": "wallet",
     "why": [
      "P2 because it adds a major privacy feature that eliminates address reuse for receiving funds.",
      "It provides the core scanning and descriptor infrastructure that future silent payment tooling depends on."
     ]
    },
    {
     "name": "utils",
     "why": [
      "P3 because it vendors cryptographic primitives and wrappers for BIP 352 key derivation.",
      "Its primary value serves the wallet feature rather than general utility improvements."
     ]
    }
   ]
  },
  "summary": "This pull request introduces BIP 352 Silent Payments receiving capabilities to the Bitcoin Core wallet. It adds an `sp()` descriptor implementation, a dedicated `SilentPaymentDescriptorScriptPubKeyMan`, full block scanning logic for silent payment outputs, and automatic silent payments change type selection. It also includes the required libsecp256k1 BIP 352 module and tests.",
  "problem": "Traditional Bitcoin addresses cannot be safely reused without severely compromising user privacy and transaction graph unlinkability. Silent payments solve this by allowing recipients to publish a single static address while payers derive unique one-time output keys on-chain.",
  "discussion": {
   "open_concerns": [
    "Blocked upstream by libsecp256k1 issue #1799 to standardize and release BIP 352 primitives.",
    "Fast rescans are disabled for silent payment wallets because block filter indexes cannot predetermine one-time scriptPubKeys.",
    "Functional test suggestions regarding descriptor checksum helpers and cleanups need addressing."
   ],
   "resolved_concerns": [
    "Simplified key handling by separating the scan private key out of the standard signing provider flow.",
    "Handled fallback change output logic when creating transactions from silent-payment-only wallets.",
    "Restricted sp() descriptors to single path and added GUI dropdown support for receiving."
   ],
   "author_status": "silent since 2026-05-16, awaiting upstream libsecp256k1 resolution"
  },
  "reviewability": {
   "state": "Stale",
   "label": "Needs rebase",
   "reason": "The PR has merge conflicts with 17 open pull requests, is marked draft, and depends on unmerged base PRs #35301 and upstream libsecp256k1 issue #1799. The author has also been silent for over 120 days."
  },
  "agreement": {
   "state": "Strong",
   "summary": "Strong concept consensus with active design collaboration from Sjors and josibake, awaiting upstream dependencies",
   "reason": "Multiple domain contributors strongly endorse integrating BIP 352 receiving into the wallet and have iteratively reviewed and tested wallet creation, change generation, and watch-only importing.",
   "evidence": [
    "Sjors tested wallet creation and rescanning across multiple revisions and provided GUI and descriptor integration suggestions.",
    "josibake provided detailed architectural feedback on key derivation, provider interfaces, and descriptor structures.",
    "rkrux contributed test review comments."
   ]
  },
  "dependencies": {
   "depends_on": [
    35301,
    35302
   ],
   "enables": [
    "BIP 352 Silent Payments recipient labels and complete silent payment wallet support"
   ]
  },
  "categories": [
   {
    "name": "ipc",
    "member": false,
    "evidence": "Touches interfaces/wallet.h and interfaces/chain.h only to expose wallet methods and block undo data to the node interface, without altering IPC infrastructure.",
    "band": "Unranked",
    "reason_tag": "",
    "score": 0,
    "factors": {
     "security_stability": 0,
     "bug_severity": 0,
     "performance": 0,
     "user_value": 0,
     "leverage": 0
    },
    "rationale": "Not an IPC PR."
   },
   {
    "name": "kernel",
    "member": false,
    "evidence": "Adds HRP prefixes to chainparams without touching the kernel library boundary or public C/C++ API.",
    "band": "Unranked",
    "reason_tag": "",
    "score": 0,
    "factors": {
     "security_stability": 0,
     "bug_severity": 0,
     "performance": 0,
     "user_value": 0,
     "leverage": 0
    },
    "rationale": "Not a kernel PR."
   },
   {
    "name": "mempool",
    "member": false,
    "evidence": "Touches block_policy_estimator solely due to an updated CValidationInterface::TransactionAddedToMempool callback signature.",
    "band": "Unranked",
    "reason_tag": "",
    "score": 0,
    "factors": {
     "security_stability": 0,
     "bug_severity": 0,
     "performance": 0,
     "user_value": 0,
     "leverage": 0
    },
    "rationale": "Not a mempool PR; policy and acceptance rules are unchanged."
   },
   {
    "name": "rpc",
    "member": false,
    "evidence": "Exposes silent payments flags in wallet RPCs and address info methods; wallet RPCs belong to wallet unless RPC machinery changes.",
    "band": "Unranked",
    "reason_tag": "",
    "score": 0,
    "factors": {
     "security_stability": 0,
     "bug_severity": 0,
     "performance": 0,
     "user_value": 0,
     "leverage": 0
    },
    "rationale": "RPC adjustments are subsidiary to the wallet feature."
   },
   {
    "name": "tests",
    "member": false,
    "evidence": "Adds functional and unit tests covering silent payment descriptors and wallet scanning rather than modifying general test harness infrastructure.",
    "band": "Unranked",
    "reason_tag": "",
    "score": 0,
    "factors": {
     "security_stability": 0,
     "bug_severity": 0,
     "performance": 0,
     "user_value": 0,
     "leverage": 0
    },
    "rationale": "Domain tests belong to wallet."
   },
   {
    "name": "utils",
    "member": true,
    "evidence": "Includes an in-tree squashed secp256k1 silentpayments module subtree and adds cryptographic helpers in src/common/bip352.cpp.",
    "band": "P3",
    "reason_tag": "new feature",
    "score": 0.35,
    "factors": {
     "security_stability": 1,
     "bug_severity": 0,
     "performance": 1,
     "user_value": 2,
     "leverage": 1
    },
    "rationale": "Adds BIP 352 elliptic curve cryptographic primitives and benchmark tooling into the codebase. It ranks P3 in utils because subtree modifications are expected to be maintained and merged upstream in libsecp256k1 first."
   },
   {
    "name": "validation",
    "member": false,
    "evidence": "Touches validationinterface to pass spent coins into mempool listeners for wallet scanning, but does not alter validation invariants, consensus, or block storage.",
    "band": "Unranked",
    "reason_tag": "",
    "score": 0,
    "factors": {
     "security_stability": 0,
     "bug_severity": 0,
     "performance": 0,
     "user_value": 0,
     "leverage": 0
    },
    "rationale": "Signature changes on validation signals to serve wallet scanning do not make this a validation PR."
   },
   {
    "name": "wallet",
    "member": true,
    "evidence": "Implements the SilentPaymentDescriptorScriptPubKeyMan, sp() descriptor parsing, block scanning, and wallet change derivation for BIP 352.",
    "band": "P2",
    "reason_tag": "new feature",
    "score": 0.7,
    "factors": {
     "security_stability": 1,
     "bug_severity": 0,
     "performance": 1,
     "user_value": 3,
     "leverage": 2
    },
    "rationale": "P2 because BIP 352 receiving is a high-demand privacy upgrade allowing users to receive payments without address reuse. Eunovo stated this PR 'Adds a Silent Payments descriptor implementation', 'Adds a SilentPaymentsDescriptorScriptPubKeyMan', and 'Implements Silent Payments scanning for the wallet', laying the foundational receiving architecture for Core's silent payment roadmap."
   }
  ],
  "confidence": "high",
  "uncertainties": [
   "Whether the secp256k1 subtree commits will be separated cleanly into an upstream dependency bump prior to rebasing this PR."
  ],
  "needs": [],
  "card": "This pull request implements BIP 352 Silent Payments receiving for the Bitcoin Core wallet. It introduces the sp() descriptor, a dedicated ScriptPubKeyMan to manage keys and tweaks, full block scanning routines, and automated silent payments change handling. This represents a significant user privacy enhancement by eliminating address reuse for incoming transactions. Review is currently blocked by merge conflicts and upstream libsecp256k1 dependency work in issue #1799."
 },
 "raw_text": null
}