Create Tip Jar Map Developers Articles

Articles

The bitcoin tip QR code that doesn't leave tippers in the dark

market stand that accepts bitcoin tips

Jimble's Jumble makes artisan preserves in Northamptonshire from homegrown, wild foraged and rescued ingredients: plum, beetroot and horseradish chutney, peach jam, marmalade. The jars go out across a market table beside a "bitcoin accepted here" sign. And right under the name on the website is one line: "Tip me in bitcoin ⚡ bitcointipjar.com/jimblesjumble".

That's a link, not a Lightning address. It's the right call, and this article is about why.

Picture the stall next to it at the same market, taking tips with a laminated card: a QR code of the stallholder's Lightning address and "Bitcoin tips welcome ⚡". A customer who's curious about bitcoin points her phone's camera at it. The camera finds a long string starting with "lightning:" and has no app to open it with. She shrugs and pays her £6 in cash.

The next customer has a Lightning wallet. He opens the wallet, finds its scanner, scans the card, and gets a send screen with an empty amount box in sats. He guesses. The stallholder's phone buzzes later with a number and no name.

Both of them were left in the dark. Not because the QR code was wrong, but because of what kind it was.

Three kinds of bitcoin QR code

Every bitcoin QR code is a few lines of text drawn as squares. What matters is what the text says.

An on-chain address

Text that starts bitcoin:bc1q. It's what most free QR generators make when you search for a "bitcoin tip QR code". It never expires and works with any bitcoin wallet. For a tip, though, it's the slowest and dearest route: the tipper pays a network fee that can be more than the tip, and the payment takes ten minutes or more to confirm. You can add an amount to it, but then everyone pays that one amount.

A Lightning address or LNURL

Text like lightning:stall@wallet.com, or a long string starting LNURL1. It never expires either, and a Lightning payment lands in seconds for a fraction of a cent. This is the code most bitcoiners print. But it has two blind spots:

And on the other side, you see a number arrive with, usually, no name and no way to say thanks.

A Lightning invoice

Text that starts lightning:lnbc. An invoice is one payment request for one exact amount. Scan it and the wallet shows the amount ready to confirm: no typing. But an invoice can be paid once and expires, so you can't print one. It has to be made fresh, at the moment of the tip.

The way around all three is to print a QR code of an ordinary web link. Every phone camera opens a link. That's what a jar from Bitcoin Tip Jar prints on its poster: bitcointipjar.com/yourname.

Here's what the next-door stall's customers would have seen with a jar link instead:

On a screen, the QR becomes a live invoice

A printed code can't hold an amount, but a web page can make one on the spot. When someone opens your tip page on a laptop, a stream or a TV behind the counter, and taps an amount, the page asks your wallet for a fresh invoice for exactly that amount and shows it as a QR code. They scan it with the wallet on their phone and the amount is already filled in. That's the one kind of bitcoin QR that carries the amount and is still safe to show: it's made for this tip and nobody else's.

So the printed code opens the page, and the page makes the invoice. The tipper never sees an empty box.

What to do


Sources: the Lightning address specs LUD-06 and LUD-16; BIP 21, the bitcoin: link format; BOLT 11, the Lightning invoice format.