cryptoadvance / specter-diy

DIY airgapped hardware wallet that uses QR codes for communication with the host
MIT License
441 stars 73 forks source link

Switch to ur:crypto-psbt format #89

Closed stepansnigirev closed 1 year ago

stepansnigirev commented 3 years ago

Standard: https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-006-urtypes.md#partially-signed-bitcoin-transaction-psbt-crypto-psbt

Issue for desktop:

https://github.com/cryptoadvance/specter-desktop/issues/513

mflaxman commented 2 years ago

What's the status of this? I've been playing around with the bcur v2 spec and I can't say I understand why this is a useful upgrade. The code is an order of magnitude more complex, and intuitively I dislike that the QRs are not constant (as you iterate beyond n QRs they don't just repeat).

I noticed that in specter-desktop you used some unknown/minified js code to render the qr GIFs locally: https://github.com/cryptoadvance/specter-desktop/pull/1237/files#diff-23225b8d95675fa8221e5d8719eefc5d87daba64df2a1a7400a0c503a3ef1789

stepansnigirev commented 2 years ago

I understand why you don't like this standard - it is not human-readable and hard to implement. There is one thing that makes this standard valuable - ability to scan O(N) QR codes if you've missed one, so for large number of QR codes you don't have to scan over the whole sequence if one or two was missed. It provides better user experience for large multisig transactions, and for Liquid as well, but for most cases tx can fit in 1-5 QR codes, so it's not really necessary. We added support for it in Specter-Desktop because Keystone and Passport are using it (the minified library comes from Keystone). On the Specter-DIY side, I will have to add support for it in order to maintain compatibility with other software wallets like Blue Wallet, Sparrow, and others. But in order to do that right, I need to properly implement that so we don't run into memory issues with the infinite flow of QR codes. For communication between Specter-Desktop and Specter-DIY I want to keep using a simple pMofN blob format though.