coinkite / bbqr Goto Github PK
View Code? Open in Web Editor NEWBBQr: Encodes larger files into a series of QR codes so they can cross air gaps
Home Page: https://bbqr.org
License: Other
BBQr: Encodes larger files into a series of QR codes so they can cross air gaps
Home Page: https://bbqr.org
License: Other
Version 27 (125 x 125 pixels) offers up to 1062 bytes of useful payload per QR, so it is a good sweet spot to consider. A simple implementation would split file into 1k (1024) blocks, with one runt, and can be sure that verison 27 QR will hold all the blocks.
Since the typical Bitcoin wire transaction is less than 500 bytes, most finalized transactions will be encoded in a single QR with no header or other overhead needed.
In the example:
All but final QR holds 1000 bytes when decoded, and will be 2007 characters in length.
I suggest to allow padding the last QR. Since the data length is not encoded, you can't use zeros for this padding, but any character that's part of the set 0-9A-Z$%*+-./:
, and not part of hex (0-9A-F
) and bech32 can be used. I.e. IO$%*+-./:
. My suggestion would be .
, because it keeps things human readable. (I suggest in any case not using I
or O
because that makes a future "lazy just do plain alphanumeric text" standard impossible.)
This makes life easier for UI developers: they can just format their layout for a 125 x 125 QR code. The last image won't look weird, without having to do math to figure out the right size. And a consistent size for every transaction is nice for users in general.
Both Android and iOs are able to automatically open the right (or the wrong…) app when you scan a QR with the OS camera app.
At least with Apple, developers can register their app to use whatever prefix they want (afaik).
You could either pick one prefix, that's not already in use, like bbqr:
. Alternatively pick one per data type, so it's less likely the wrong app is opened. Or completely leave it open for devs to fight over, but just allow it.
This is mainly useful for single codes, not so much when handling multiple "pages". This is because the first QR would open the app, after which the app will have to initiate scanning the next one, and a URI prefix isn't needed.
As descriptor need to be share between wallets/coordinators and airgapped signers in miniscript setups, it should be useful to have a Type for standalone descriptor, at least used at the initial descriptor registration step.
As requested, my feedback. It's difficult to consider this without comparing against the dominant BC-UR standard. The major advantage compared to BC-UR seems to be the simplicity of the scheme. However, there are several drawbacks:
BC-UR does not have these drawbacks, so they must be weighed against the simplicity of implementation. I can't speak knowledgeably to the capability of embedded devices, but certainly it has been possible for many hardware wallet implementors to send and receive BC-UR formatted QRs.
Further, this adds another QR standard. While it is simple to add support for scanning this format, with BC-UR already well established the choice of which standard to use when displaying an animated sequence must probably be left to the user, burdening them with a technical detail they are unlikely to understand. There should be a very good reason to have to put in the effort of educating an entire userbase, and adding this additional complexity to the UX flow of many common operations.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.