Utreexo demo release 0.2
At the MIT DCI, we have several computers plugged in to the wall of our currently unpopulated office. One of them runs a bitcoin core node, and serves the blockchain to other newly arriving bitcoin nodes. This machine typically uploads about 1 TB of data a month.
In January, however, vnstat shows a total monthly upload of 5.73 TiB, several times the average for the last year. I like to think of this machine as welcoming new participants to the network, many of whom are likely arriving due to some other bitcoin-related number increasing several-fold in recent weeks.
But I also know that for new users of Bitcoin, despite the terabytes of welcome streaming from this machine’s RTL8111 chip to the far reaches of the globe, it’s not a great on-boarding experience. Laptop computers can take days to sync up with the Bitcoin network, even with fast internet connections. Once they’re done, even with pruning enabled, staying on the network takes several gigabytes of storage. It’s no wonder that many who try to run a Bitcoin node give up, and instead use SPV wallets with weaker security and privacy, or worse, give up on owning UTXOs entirely, and leave their coins on an exchange.
The goal of Utreexo is to make running a full node easier, faster, and smaller, and while that’s more of an asymptote than a point on any curve, we’re getting there. Today we’ve released Utreexo demonstration 0.2, which pairs the Utreexo accumulator with a modified version of btcd (temporarily called utcd). Most of the utcd work was done by Calvin Kim, as Niklas Gögge and myself have been working on improving the accumulator and how it interacts with the bitcoin data structures. Calvin has written a post about the work as well.
This new release works more like a normal bitcoin node: it starts up, finds peers, and verifies the blockchain. There are still things it doesn’t have, like a mempool, or a way to deal with reorgs. (It currently deals with reorgs by crashing.)
It’s also not as fast as it could be, and not as small as the Utreexo design allows for, but that’s exciting: it runs at an OK speed now, and there are still many avenues for performance improvements that we’ve identified. We’re working on improving the speed of the software, and benchmarking it on different hardware, and hope to have a post about that soon.
Several MIT undergraduate researchers are joining this semester, and as the project expands, there are lots of interesting avenues for improving performance and reliability. We’d love to help more people learn about this system and try to make Bitcoin stronger while working on some interesting problems. If you’re interested, there are pre-compiled binaries to try out, the code is all open source, and we have discussions on freenode IRC, channel #utreexo. We try to be as welcoming as the server in the office, though we’re not at the terabytes per month level yet :)