SeedSigner v0.8.0
It's admittedly been a minute since our last release -- we've always built carefully and deliberately, and we continue to refine our software so bitcoiners everywhere can have a better and better permissionless signing device.
Quick Highlights:
Addtional legacy signing support:
- P2PKH (bip44): Legacy format dating back to 2014
- P2SH multisig (bip45): Legacy multisig (also 2014)
Quality-of-Life improvements ❤️
- New animated QR scanning UI + frame-by-frame feedback
- Much better animated QR scanning progress estimation calcs: no more stuck-at-99%-progress misery!
- Smarter rendering of outgoing animated QRs = faster reads by wallet software
- UX improvements when entering bip39 passphrases, verifying multisig change, etc.
- Two new community-created 3d-printable enclosure designs
Explicit support for PSBTs w/OP_RETURN
- displays the human-readable message or the raw hex data
Import Electrum Seeds 🌱
- Import an Electrum native segwit mnemonic, export xpub, sign txs.
Major code refactors, Github automations, MOAR TESTS🔥!
- Crucial yet unwieldy code got much more wieldy
- Awesome Github Actions integrations to automate test suite checks & generate custom SeedSigner OS images
- Significant upgrades to the test suite, both under the hood & overall test coverage
Notes:
Legacy multisig support enables full SeedSigner compatibility with Unchained vaults! (this is unofficial; don't expect Unchained customer support to be able to help you)
The new animated QR scanning UI is sexy (@easyuxd ftw!) and adds a green/gray feedback dot:
- Green = QR frame read, new data received
- Gray = QR frame read, but no new data
- No dot = wtf are you pointing at?
New Pro Tip: If your software coordinator seems stalled when reading a long outgoing animated QR, flick the SeedSigner joystick up/down. Why? The first few frames of an animated QR are the most valuable and they do NOT repeat. But now when you change your SeedSigner's outgoing QR code brightness (joystick up/down), those valuable frames are re-played.
Adding limited support for Electrum seeds is meant to help legacy/OG users eventually migrate away from Electrum and into more standardized wallet software. Full integration with Electrum is not planned.
Four .img files are included in the release; select the one that is appropriate for your Raspberry Pi hardware:
- "pi0.img" - For Raspberry Pi Zero v1.3 & Raspberry Pi Zero W
- "pi2.img" - For Raspberry Pi 2 Model B
- "pi02w.img" - For Raspberry Pi Zero 2 W & Raspberry Pi 3 Model B
- "pi4.img" - For Raspberry Pi 4 Model B
To install on your microSD card:
- Download the appropriate .img file
- Write the extracted image to a MicroSD card (32MB or larger)
- (make sure to use "dd" or a disk-authoring tool like Balena Etcher)
- Install the memory card in your signer
Checking your download for integrity and authenticity is super important -- with SeedSigner, you are the software authenticity assurance!
More Notes:
- Check out our Independent Custody Guide to read more on what our project is all about: https://github.com/SeedSigner/independent_custody_guide
- If you are getting value from SeedSigner, please consider donating to our development fund: https://seedsigner.com/donate-now/
Full details:
- Lead Maintainer: @newtonick
- Most prolific PR reviewer/tester: @jdlcdl
- 🎉🎉 NINE new devs contributed to this release! 🎉🎉
New Features:
- Add Legacy P2PKH Signing: @3rdIteration; w/@jdlcdl, @BamaHodl, @newtonick (#567)
- Support bip45 legacy multisig p2sh: @kdmukai, @newtonick; w/@jdlcdl (#540, #572)
- Add limited support for electrum segwit seeds: @BamaHodl (🎉 FIRST PR!), @kdmukai; w/@jdlcdl, @newtonick, @pointbiz, @berlinxray, @jamesturnernz, @3rdIteration (#513, #571)
- Parse psbts with OP_RETURN data & display payload: @kdmukai; w/@jdlcdl, @newtonick, @petertodd (#517)
Improvements:
- Animated QR scanning: new UI and improved progress calculation: @kdmukai, design by @easyuxd (#541)
- Hold QR animation on brightness tips and reset animated QR sequence: @kdmukai; w/@jdlcdl (#495)
- Add exit dialog when entering passphrase: @alvroble (🎉 FIRST PR!); w/@jdlcdl, @kdmukai, @easyuxd, @SeedSigner, @dulcedu (#563)
- Render SeedQR small registration block in solid squares: @kdmukai; w/@jdlcdl (#484)
- Clearer UI when multisig change or self-transfer outputs aren't yet verified: @3rdIteration, @newtonick; w/@kdmukai (#533, #549)
Bugfixes:
- Xpub export can select the wrong coordinator: @kdmukai (#490)
- Message Signing
TextDoesNotFitException
on long no whitespace messages: @newtonick (#576)
New Enclosures:
- "Look Screws!": @surfac3 (🎉 FIRST PR!); w/@newtonick (#505)
- "Push Case": @kayth21; w/@SeedSigner, @newtonick (#548)
CI / Github integrations:
- Test suite integration w/Github Actions, runs on each PR update: @dbast (🎉 FIRST PR!); w/@jdlcdl, @kdmukai (#469)
- Initial build workflow via Github Actions: @overcat; w/@newtonick, @kdmukai (#392)
- More robust automated build integrations: @dbast; w/@kdmukai (#493)
For developers:
- Add PR template: @newtonick; w/@jdlcdl, @kdmukai (#441)
- Update
seed_phrase_to_qr.py
; warnings, add Compact SeedQR: @kdmukai (#523) - Entropy-to-mnemonic CLI utility: @kdmukai; w/@jdlcdl, @newtonick (#404)
- Add optional Docker env to run test suite, generate screenshots: @newtonick; w/@jdlcdl, @kdmukai (#476)
Documentation:
- Improved manual dev build instructions: @hax0rbana-adam, @kdmukai; w/@jdlcdl (#436, #509)
- Clarify reproducible build steps vs manual dev build: @newtonick; w/@jdlcdl, @kdmukai (#487)
- Misc updates: @newtonick, @thedon702, @SeedSigner, @smartm0use (🎉 FIRST PR!), @akarve (🎉 FIRST PR!), @jambolo (🎉 FIRST PR!) (#481, #478, #458, #486, #539, #565, #532, #587, #588, #593)
Misc / Nerdy details:
- Improve FlowTest + Exception handling interactions: @kdmukai; w/@newtonick, @Marc-Gee (#573)
- QR Encoder refactor + fountain encoder restart(): @kdmukai; w/@jdlcdl, @newtonick (#494)
- Taproot support enabled by default: @1ma (🎉 FIRST PR!) (#538)
- Improved error message for missing font: @dbast; w/@jdlcdl, @kdmukai (#471)
Controller
import cleanup/refactor: @kdmukai; w/@jdlcdl (#496)- Fix unhandled exception when attempting to sign message for custom derivation address: @BamaHodl (#518)
- UI BTC Address cutoff in
PSBTAddressDetailsScreen
screen: @newtonick, @kdmukai; w/@jdlcdl (#579, #583) - Fix issue caused by having is_sign_message method and property of same name: @BamaHodl; w/@dbast (#578)
- Fix min python version to 3.10: @dbast; w/@jdlcdl (#470)
- Dependency bumps for python3.10 compatibility: @LilySu (🎉 FIRST PR!); w/@newtonick, @TABConf (#477)
- Add Python 3.12 to test matrix as upper bound and fix findings: @dbast (#559)
embit
version updated to v0.8.0: @newtonick; shout out @stepansnigirev! (#566)- Trimming / moving dependencies: @dbast; w/@jdlcdl, @newtonick (#543)
- Refactor around
Pillow
deprecations: @newtonick (#485) - Migrate to pyproject.toml: @dbast; w/@kdmukai (#554)
- Setup Python logging + convert print statements to logger calls: @dbast; w/@jdlcdl, @kdmukai (#558)
- Restore log access in pytest: @kdmukai (#574)
- Additional tests: @jdlcdl, @kdmukai (#466, #524)
- Additional screenshots added to the screenshot generator: @kdmukai (#521)