{
 "number": 36577,
 "input_hash": "22c91f2d7bc76dad",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-10-23T01:17:41+00:00",
 "result": {
  "summary": "Relaxes signature verification in `SignPSBTInput` to accept 65-byte Taproot signatures ending in `SIGHASH_ALL` when neither `PSBT_IN_SIGHASH_TYPE` nor an explicit `sighash_type` option is provided. Previously, unset sighash types strictly assumed 64-byte `SIGHASH_DEFAULT` signatures and rejected any existing 65-byte signatures with `SIGHASH_MISMATCH`. Mismatches remain rejected if an explicit sighash type or field is set, or if the 65-byte signature uses sighashes other than `SIGHASH_ALL`.",
  "problem": "Taproot signers sometimes produce 65-byte signatures explicitly specifying `SIGHASH_ALL` while leaving `PSBT_IN_SIGHASH_TYPE` unset. When a subsequent signer or finalizer processes the PSBT without an explicit sighash parameter, `SignPSBTInput` falls back to `SIGHASH_DEFAULT` and rejects valid 65-byte `SIGHASH_ALL` signatures as invalid, preventing the transaction from being signed further or finalized.",
  "card": "Relaxes SignPSBTInput to accept 65-byte Taproot signatures ending in SIGHASH_ALL when no sighash type is explicitly specified by the caller or PSBT input. Previously, omitting the sighash field caused SignPSBTInput to assume SIGHASH_DEFAULT and strictly demand 64-byte signatures, causing valid PSBTs with 65-byte SIGHASH_ALL signatures to fail validation and blocking them from being signed further or finalized. This fixes issue #36507.",
  "evidence": [
   "Fixes issue #36507: 'PSBT: SignPSBTInput rejects valid 65-byte taproot script signatures when PSBT_IN_SIGHASH_TYPE is absent'"
  ],
  "scope_notes": "",
  "changed_since_previous": "Unchanged in approach; provides the implementation and accompanying unit tests for the previously described change.",
  "thread": {
   "last_event_at": "2026-10-22T16:57:12Z",
   "events": 2,
   "head_sha": "1291d0e3895791bc700d4901c66d77dcbb42ed69",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": null,
    "id": "",
    "on": "nothing",
    "url": null,
    "what": "nothing pending"
   }
  ],
  "risk": {
   "level": "low",
   "touches": [
    "wallet",
    "rpc_api"
   ],
   "why": "A flaw in PSBT input signature checks could mistakenly allow an unintended sighash type or break PSBT signing workflows."
  },
  "discussion": {
   "author_status": "last statement processed 2026-10-22",
   "open_concerns": [],
   "resolved_concerns": []
  },
  "reviewability": {
   "state": "Ready",
   "label": "Ready",
   "reason": "Nothing known that would invalidate a review now."
  },
  "agreement": {
   "state": "Strong",
   "summary": "Strong: substantive support, no open objection (Husteem)",
   "reason": "Added Husteem's Approach ACK / Tested ACK. No objections or suggestions were raised.",
   "evidence": [
    "Yudis-bit: Tested ACK \u2014 Tested ACK 1291d0e389 on Windows.",
    "Husteem: Approach ACK \u2014 accepting 65-byte Taproot signatures ending in SIGHASH_ALL when sighash_type is unset is safe because it commits to the identical BIP-341 digest as SIGHASH_DEFAULT, while preserving safety checks for other variants"
   ],
   "objections": [],
   "support": [
    {
     "reviewer": "Yudis-bit",
     "reason": "Tested ACK 1291d0e389 on Windows.",
     "substantive": false,
     "verdict": "Tested ACK",
     "id": "c:6286973879",
     "url": "https://github.com/bitcoin/bitcoin/pull/36577#issuecomment-6286973879",
     "at": "2026-10-20",
     "association": "NONE",
     "evidence": "tested",
     "areas": []
    },
    {
     "reviewer": "Husteem",
     "reason": "accepting 65-byte Taproot signatures ending in SIGHASH_ALL when sighash_type is unset is safe because it commits to the identical BIP-341 digest as SIGHASH_DEFAULT, while preserving safety checks for other variants",
     "substantive": true,
     "verdict": "Approach ACK",
     "id": "c:6346377698",
     "url": "https://github.com/bitcoin/bitcoin/pull/36577#issuecomment-6346377698",
     "at": "2026-10-22",
     "association": "NONE",
     "evidence": "both",
     "areas": [
      "psbt_tests",
      "rpc_psbt.py"
     ]
    }
   ],
   "participants": [
    {
     "login": "Yudis-bit",
     "stance": "support",
     "note": "tested ACK on Windows",
     "association": "NONE",
     "comments": 1,
     "first": "2026-10-20",
     "last": "2026-10-20"
    },
    {
     "login": "Husteem",
     "stance": "support",
     "note": "Approach ACK / Tested ACK with rationale and testing on Ubuntu",
     "association": "NONE",
     "comments": 1,
     "first": "2026-10-22",
     "last": "2026-10-22"
    }
   ],
   "derivation": "substantive support, no open objection (Husteem)",
   "model_state": null,
   "corrections": [],
   "notes": "Added Husteem's Approach ACK / Tested ACK. No objections or suggestions were raised."
  },
  "dependencies": {
   "depends_on": [],
   "enables": []
  },
  "categories": [
   {
    "name": "wallet",
    "member": true,
    "evidence": "src/psbt.cpp implements core PSBT handling and SignPSBTInput used by the wallet to process and sign transactions.",
    "band": "P3",
    "reason_tag": "bug fix",
    "score": 0.4,
    "factors": {
     "bug_severity": 1,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 1
    },
    "rationale": "Fixes an interoperability bug where SignPSBTInput rejects valid 65-byte Taproot SIGHASH_ALL signatures when PSBT_IN_SIGHASH_TYPE is unset. As noted in issue #36507, this incorrectly triggers SIGHASH_MISMATCH and blocks downstream signing or finalization."
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-10-23T01:17:41+00:00",
  "code": "2026-10-21T01:23:30+00:00",
  "judgments": 1
 }
}