Bitcoin XT and Ethereum full nodes on ARMSaturday, Oct 17, 2015 · 800 words · approx 4 mins to read
I’m a big believer in the potential of cryptocurrencies as a medium of exchange. I don’t like how human beings operate their monetary systems, and I believe there’s a huge room for improvement. So while I’ve traded some popular modern blockchain-based cryptocurrencies to generate returning fiat money profit, and continue to do so for fun and interest, I have one eye on them actually completely replacing fiat money as the way in which we exchange value with each other.
To do that, they need to be used, and not just for speculative fiat money profit taking, which I’m definitely guilty of, but as a replacement for fiat money entirely. They work by currently implementing a computed consensus network verified between nodes on the open Internet. So one aspect of the network staying up and running, so the currencies can be used for more than just currency trading, is access to those nodes.
The good thing is that nodes, at least on the networks that back the two cryptocurrencies I’m most interested in, Bitcoin (specifically Bitcoin XT) and Ethereum, don’t have to be huge servers plugged into expansive amounts of ready Internet network transit. You can run them at home, on commodity PC hardware, on a modest broadband connection.
In fact, you don’t even need commodity PC hardware, which tends to be reasonably power hungry, noisy and large. Both Bitcoin XT and Ethereum officially support ARM Linux, so I thought I’d dredge up one of the myriad tiny ARM-based single board computers, or SBCs as they’re commonly called,(think Raspberry Pi, if you’re unfamiliar with the wild West of ARM SBCs), freshen it up with a modern Linux distribution and run Bitcoin XT and Ethereum nodes together at the same time.
The biggest problem facing ARM SBCs when it comes to running full nodes, as mentioned, isn’t computational ability — let’s face it, there’s not a huge amount of processing power in cheap ARM SBCs, compared to even the cheapest modern PCs — or network performance. It’s storage for the blockchain. So while the SBC that I chose is passively cooled and smaller in breadth and depth than my iPhone (although it’s much thicker ultimately, because of the Ethernet port), it has a measly and slow 8GB of NAND flash, of which 1GB or so is hoovered up by Ubuntu Server.
So instead I store the blockchains for each network (and indeed the entire binary and configuration environment for each one) on network attached storage. I recently built a new NAS to act as build storage for work and play projects at home. The Bitcoin blockchain is around 45GB at rest, posing a problem for most locally attached storage for tiny ARM computers. 64GB+ USB 3.0/3.1 sticks would be suitable, but I have the NAS anyway, so why not keep the blockchains there.
While ARM Linux is supported by both Bitcoin XT and Ethereum, getting client builds isn’t trivial, so I resorted to building them myself. Bitcoin I built natively on the SBC. If you’re doing the same, on an ARMv7 hard-float SBC with Ubuntu or something else Debian-based (or Debian itself of course), you’ll want the libdb4.8 debs for armhf from Bittylicious and libboost-system, libboost-filesystem, libboost-program-options, libboost-thread and libboost-thread. That’s it.
For Ethereum, the instructions for using xgo to cross-compile for ARM are fine, but if you find the resulting geth binary won’t run on your SBC, run readelf -a on the file and check what interpreter it wants. I had to symlink /lib/ld-linux.so.3 to /lib/ld-linux-armhf.so.3 on my particular system.
I’m happy to report that with enough storage for the blockchains, both nodes are happily chugging away grabbing and validating their blockchains. When that’s done, they’ll start accepting connections from other peered nodes on the live Internet, all while running here at home on a tiny < 1W ARM SBC, making no noise, on my consumer Internet connection. That ideal is not to be understated: I’m contributing a full node on a pair of huge blockchains, helping to validate the blocks on the network, relay transactions from clients, etc., and I’m doing so as a single person with a tiny computer on his home Internet connection. A far cry from today’s broken systems controlled by enormous profit-making entities under the purview of modern governments, facilitating transfer of only fiat currencies.
If I believe in these new systems and technologies, I owe it to myself not just to take fiat profits by trading in the currencies built on the blockchains, but to provide support for the networks.