Tarsnap now accepts Bitcoin

A year and a half ago, I announced that Tarsnap was gaining support for credit card payments, as one of the first companies in Canada to use Stripe 's newly internationalized payment processing services. This satisfied a long-standing request from Tarsnap customers — until that point, Tarsnap was only accepting payments via PayPal, a service which for a variety of reasons many people did not want to use. Today I'm happy to announce that Tarsnap is satisfying another frequent request, again with help from Stripe: Tarsnap is the first user of Stripe's support for Bitcoin payments

There is a significant commonality between Tarsnap and Bitcoin — both rely crucially on strong cryptography, and anecdotally it seems that many Bitcoin users rely on Tarsnap to back up their "wallets" (I have no concrete data since I can't tell what data people are backing up) — so it's not surprising that many Tarsnap users would like to pay with bitcoins. There is an even stronger connection to many of the "alternative cryptocoins", since many make use of the scrypt key derivation function which I developed for securing Tarsnap's passphrase-protected key files. I don't have any plans to support those other cryptocoins yet, however — although if Stripe adds support for them I have no doubt that Tarsnap will make use of it.

Stripe's support is crucial here due to the nature of Bitcoin: It doesn't have all the qualities normally expected of money. In particular, Bitcoin's deflationary nature makes it very prone to speculative bubbles, making it a terrible store of value. and a poor unit of account. However, Bitcoin truly shines as a medium of exchange — with its low transaction costs and irreversibility, Bitcoin is the cash of the internet — but since it's not practical to quote long-term prices in bitcoins, people typically deal in terms of "X dollars worth of bitcoins". Stripe takes care of this for me: I tell them I want to get paid X dollars in bitcoins, and they tell me how many bitcoins I should ask for and what address they should be sent to. Stripe then gives me the dollars I asked for (minus a small processing fee, of course).

Stripe isn't the first company to offer "fiat currency denominated" Bitcoin payment processing services, but they are the first service I've found which has a simple and clean API. As with their credit card processing code, most of the payment process takes place using publishable API keys and client-side javascript; it is only the final step, of taking an opaque token and issuing an API call to say "turn this token into money", which requires the use of a Stripe account's private credentials. Of course, using javascript like this can introduce a security problem: Javascript loaded into a page executes within its domain and can access pages using any credentials (e.g., cookies) held by the web browser. To avoid this problem, I am adopting the same technique I use for credit cards, and loading the payment code — including all the javascript — inside an iframe "sandbox".

And since I went to the effort of implementing this, I figured I might as well share it: On paymentiframe.com there is now (in addition to my earlier Stripe credit card iframe) a publicly usable iframe-generator for Stripe Bitcoin payments — including an autogenerated QR code, thanks to an excellent open source QR code library. A single HTML tag generates an iframe like this:



and when that redirects the web browser and submits a Stripe "Bitcoin receiver token" to the provided address, a single HTTPS request to Stripe is all that is needed to complete the Bitcoin payment process. While Tarsnap is the first company to accept Bitcoin via Stripe, they've told me that they're going to make Bitcoin support more widely available over the coming weeks; you can sign up to participate in their beta test on their website.

So consider this two announcements in one: Tarsnap users who want to pay in Bitcoin can now do so; and anyone who wants to receive payments in Bitcoin will soon have a very easy option for doing that too. Enjoy!

Disqus