This is a blog post about Bitcoin, a virtual currency that you can make with your butt (and an overheating GPU). If you wish to continue my experiments in trading vast quantities of money for Ron Paul Fun Bucks, here's my local wallet payment address: 17mgkjjNh5NuejicqVbqo6z81jLCV8Kq6n. Or scan the QR code on the right with your super smartphone that is somehow able to store the entire Bitcoin blockchain. If you don't know what to do with either of those, don't try to use buttcoin.
Yesterday me and a friend (@Stranton on twitter) decided to play the Bitcoin currency arbitrage game. In it we discovered that the primary reason why there is such a wide gap between different exchanges' bid and ask prices is because they have absolutely asinine ways of transferring money between the two.
So let's talk about basic forex for a second. A currency exchange, in this case a BTC/USD currency exchange, is an organization responsible for meeting people's bid offers (people with BTC who want USD) with other people's ask offers (people with USD who want BTC). Every exchange quotes a bid price (the highest purchase offer that hasn't been executed yet) and an ask price (the lowest sell offer that hasn't been executed yet). This actually applies to every kind of currency exchange, and not just the stupid barely-functional 90's era web design ones that service the Bitcoin market.
Bitcoin is serviced by a number of competing exchanges. The two we will be focusing on are MtGox and BTCe, as they tend to have wildly differing bid and ask prices relative to each other. MtGox - capitalized that way intentionally because before Bitcoin they traded Magic the Gathering cards - is the most popular and probably the most reputable of the BTC exchanges (and not by much). BTCe isn't so much.
The bid/ask prices for MtGox last night, and into today, have been hovering around $47 dollars per bitcoin; BTCe was $43 per bitcoin - since then it's increased to $44. This is a $3-4 market imbalance where one could easily buy bitcoins on BTCe and sell them to MtGox to get a theoretical 6% profit per go. Doing this is known as arbitrage and can be done through incredibly complex means. Typically in real exchanges this is automated by computers that are connected on extremely low latency connections, as the imbalances tend to be in the realm of pennies. Also, arbitrage is limited. Unlike, say, a badly made JRPG where you could continue this cycle forever, real markets respond to changes in supply and demand. Eventually, you will either use up BTCe's supply of cheap bitcoin (pushing the price up) or MtGox's demand for expensive bitcoin (pushing the price down).
I happened to have 0.05 BTC from a Reddit libertarian that decided to respond to my well thoughtout complaints about Bitcoin by using the bitcointip bot to spam me. (P.S. You can now bitcointip with twitter which is an even worse idea, P.P.S. my twitter handle is @Libertardian upvotes and fake money to the left) I figured that would be a good enough place to start. The first problem was setting up a wallet. Bitcoin stores money in addresses, which are public/private key pairs. You need a piece of software called a client to store the private keys that control the money sent to the addresses in your wallet file. Choosing this in and of itself isn't easy: the default Bitcoin client, bitcoin-qt, insists on downloading the entire Bitcoin transaction history, which is ten gigabytes long, longer than my Windows partition can currently hold. (AFAIK there isn't a way to make it store the data on a different volume outside of messing with NTFS junctioning.) I decided to use a different client called Multibit, which is based on the BitcoinJ library. One of the fun things about this client is that it doesn't require a massive 10GB sync process. The only people who actually require it are merchants, of which I am not, because they need to verify transaction history (more on that later).
So with a wallet set up and an address created I went to bitcointip and told it to send everything to my new wallet, which it did, after a bit of waiting. Now with Bitcoin you can't immediately spend funds you acquired. You have to wait for confirmations. Bitcoin generates a block chain of confirmed transaction history by having miners brute force a hash for the chance to win new Bitcoins as well as any transaction fees attached to the transactions in the block that was mined. The difficulty of winning is adjusted such that a new block is mined, on average, in 10 minutes. And because the blockchain is how the network protects against transaction reversals you want to ensure that a transaction has multiple blocks ahead of it so that it can't be contested out of the history. The number of blocks ahead of the one that contains the transaction, i.e. confirmations, is the number of blocks that an attacker would have to mine faster than the rest of the network before this transaction could be attacked. Customarily Bitcoin waits for six confirmations, or just about an hour, before funds can be spent. So queue waiting an hour for the funds to flow from Bitcointip to me.
Except multibit had a bug where it wasn't actually acknowledging that the funds were gaining confirmations. This doesn't affect Bitcoin, but it did mean that multibit refused to generate transactions on what it thought was unconfirmed money. Incidentially enough Bitcoin has a public transaction history, and there are multiple websites such as blockexplorer or blockchain.info where one can view them. Here is the transaction information for the first transaction. Note that it says 138 confirmations (as it happened last night) despite the fact that Multibit continues to insist that the transaction hasn't even entered the blockchain yet.
Next we need to get the funds over to MtGox so I can turn them into
realfiat money. They hand me a Bitcoin address so I generate the transaction with blockchain.info and pay MtGox the bitcoins I want to see. That works fine, except I gotta wait another hour for MtGox to recognize the incoming funds because of the confirmations thing. All the while I'm freakin' worried that I used the wrong address or something because MtGox gives no indication that actual buttcoins are being recieved until after they've gotten six confirmations. But then it works and I sell my buttcoins for about two dollars.
Easy part's over. Now we gotta get the dollars over to BTCe so they can be used to buy more cheap bitcoin. This is actually a total and complete mess. After creating a BTCe account I look to see that their options for USD deposits are quite limited. In that it's four Russian payment processors I've never heard of, all of which would probably make Google Chrome's malware detector assume I'm drunk and suspend my Internet privileges. The other option is BitInstant, which they say can be used to make direct deposits from MtGox. Which it can't. Officially BitInstant lists various exchanges as money sources, but they can only pay to MtGox (which we don't want), or pay bitcoins directly (which we definitely don't want because it'll be at the MtGox rate).
So after some Google searches I wind up meeting face to face with AurumXchange, which does have an option to transfer money from MtGox to BTCe... with a 3% transaction cut. I do some quick math and find that this is still within the arbitrage spread so I go with it. Except I can't, because AurumXchange has a $10 minimum transaction size and I only need to transfer $2. Which means I'm going to have to ferry money to MtGox to get it over to BTCe (because there's no way in hell I'm using payment providers whose websites I can't read). And, of course, actually put money into this thing. But I've made far worse entertainment investments than trying to play the Bitcoin market (the crappy DSiWare games on my 3DS can attest to this), so let's just see how bad it could be to put $10 into MtGox.
The options MtGox gives you for funding your account are bank transfers (no way in hell am I going to hand over bank account information to a company whose name literally means "Magic the Gathering Online Exchange") or Dwolla. Dwolla is a (thankfully) US based payment processor akin to PayPal, but supposedly with less bullshit rules that made people want to use libertarian wet dream dollars instead of PayPal. I start the account registration process. Name and DOB? That's fine. Phone number? Okay, here's my cellphone, you can do your SMS verification there. Street address? Feel free to send me paper firewood. Then it wants my SSN (The US's totally-not-a-national-ID-number national ID number). And now I realize that I've set up accounts at three unregulated exchanges and a "bank" in the same way one would sign up for Facebook.
Fortunately at this point @Stranaton chimes in and asks how much I need. He's been buttcoin mining for a while, mostly just to make miniscule amounts of money when his gaming rig is not in use, so he's accumulated a fair bit. I hand him my MtGox funding address and tell him how much I need, and he gladly oblidges. And then I point my browser to blockchain again and watch that address's transaction history. Gee, it sure is taking a long time for this to start getting confirmations and --- damn it, my friend forgot to enable transaction fees, which means that now it's a low priority transaction sitting behind ten bajillion people playing fucking SatoshiDICE. So I get to wait even longer for the money to appear.
Finally, I sell those bitcoins, transfer the resulting $11 through AurumXchange to BTCe (through what is possibly the longest redemption code ever), and buy bitcoins. I then withdraw the bitcoins from BTCe back to MtGox only to realize that I have slightly the same amount of Bitcoin as I did before I started this cycle. I rerun my calculations, wondering where the hell the profits went. And then I realize that BTCe charges a fucking withdrawl fee for BTC withdrawls. That's on top of the normal transaction fee that some Bitcoin transactions have. They literally just take 0.01BTC out of every withdrawl. Which means that my small profit in BTCe's end wound up being a wash when MtGox got ahold of it.
Annoyingly frustrated, I tell my friend it's a wash and head to bed as it's now 4:00 in the morning and I'm making pudding because I've lost control of my life.