QR code format for offline signing
Ownbit's cold wallet crosses the air gap using QR codes whose contents decode entirely to plaintext. There is no hidden proprietary protocol — each QR carries a defined prefix, and you can decode any of them yourself.
Watch-wallet setup
| Prefix | Purpose |
|---|---|
bb_watch: | Create a new Watch Wallet |
bb_addcoin: | Add a coin to the Watch Wallet |
bb_mswatch: | Create a MultiSig Watch Wallet |
Single-wallet signing
| Prefix | Purpose |
|---|---|
bb_sign: | Sign a transaction (offline, on the cold wallet) |
bb_signresult: | Signed result of a message-only signing request |
bb_tx: | Broadcast the signed transaction to the network |
MultiSig signing
MultiSig signing pairs a request QR (shown by the initiating wallet) with the returned signature/transaction QR from each co-signer. The four stages are initiate → confirm → deploy → execute.
| Stage | Request | Returned signature / tx |
|---|---|---|
| Initiate | bb_msinitiate: | bb_txmsinitiate: |
| Confirm | bb_msconfirm: | bb_txmsconfirm: |
| Deploy | bb_msdeploy: | bb_txmsdeploy: |
| Execute | bb_msexecute: | bb_txmsexecute: |
Encoding and decoding
The payload is zlib-compressed and then Base64-encoded. Decompress the Base64 and inflate the zlib stream to recover the plaintext — a public key/address (for bb_watch / bb_addcoin) or a transaction and its signature (for bb_sign / bb_tx). The full decoding reference is published at bb_sign_encoding.txt.
Because every QR decodes to plaintext you can inspect, no private data is smuggled through the channel at the plaintext level. See Verify it yourself for the hands-on check.
Last updated:
Download Ownbit
Install the app, then set up a cold wallet or MultiSig for the workflow you need.