cryptoadvance / cryptoadvance/specter-diy

Specter DIY Lite (current firmware) rejects Sparrow Taproot PSBTs with `Unknown sighash type: 0!`

Open
#411 0 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.