cryptoadvance / cryptoadvance/specter-diy
Specter DIY Lite (current firmware) rejects Sparrow Taproot PSBTs with `Unknown sighash type: 0!`
- Dominant language
- Python
- Stars
- 585
- Forks
- 108
- Avg merge
- 6d 1h
- Merged PRs (30d)
- 5
Description
**Device / firmware**
- Hardware: Specter DIY / Shield Lite
- Firmware: current official release (v1.10.3 as of May 2026)
- Host: Sparrow Wallet 2.5.4
- Network: Bitcoin mainnet
**Setup**
Same seed imported as two wallets on the Specter device:
- Wallet 1: Native SegWit (`wpkh` / BIP84)
- Wallet 2: Taproot (`tr` / BIP86)
**Expected**
Scanning a Sparrow QR PSBT for either wallet should parse the transaction and proceed to the signing confirmation screen.
**Actual**
- SegWit (wallet 1): signing via Sparrow QR works.
- Taproot (wallet 2): Specter reads the Sparrow QR and immediately shows:
```
Host error
Unknown sighash type: 0!
```
Signing never reaches the transaction review screen.
**Reproduction**
1. Load the same seed on Specter DIY Lite (current firmware).
2. Create / import wallet 1 as SegWit and wallet 2 as Taproot.
3. In Sparrow, create a spend from the matching Taproot watch-only wallet.
4. Display the unsigned PSBT as QR.
5. Scan the QR on Specter.
**Notes**
- SegWit path on the same seed and firmware is fine, so QR transport and seed handling are not the failure.
- Sparrow Taproot PSBTs typically use BIP341 `SIGHASH_DEFAULT` (`0x00`). That value is valid for P2TR and equivalent to signing all inputs/outputs, with no trailing sighash byte on a 64-byte Schnorr signature.
- Firmware treats `0` as unknown instead of `SIGHASH_DEFAULT`. Related upstream work:
- https://github.com/cryptoadvance/specter-diy/issues/302
- https://github.com/cryptoadvance/specter-diy/pull/399 (`fix: preserve SIGHASH.DEFAULT (0) for taproot signatures`)
PR #399 describes the same crash: preprocess compares `sighash_type=0` against `DEFAULT_SIGHASH=ALL (1)`, then `get_sighash_info(0)` raises `WalletError("Unknown sighash type: 0!")` before signing.
Contributor guide
No contributing guide indexed for this repository
Research direction
Compare the behavior described in PR #399, then inspect the preprocess path and get_sighash_info entry point named in the issue. Done means a Taproot PSBT using BIP341 SIGHASH_DEFAULT (0) is accepted and reaches the transaction review screen without the unknown-sighash error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cryptography, security
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 45/100