After reading about performance optimizations on the Bitcoin Core blog, I wanted to see a chart of that. I couldn’t find one, so I spun up a bunch of EC2 nodes and set out to measure how long it took each new version of the bitcoin core client to sync the full blockchain.Initial Blockchain Download (IBD) on Amazon EC2 (~474K blocks, t2.xlarge, 4 cores, 16 GiB, GP2 200 GiB SSD). For explanation of Assume Valid Block, see text below.
I described the exact steps I took to compile the nodes on Amazon EC2 in a Github gist.
Starting on the right side of the chart, the red bar uses the Assume Valid Block feature that was introduced in v0.14. It took 7 hours to download and process the full blockchain. The blue bar has that feature disabled, causing it to verify all signatures, which took 32 hours. The result is comparable to what the Core team found in their own test using similar equipment.
Moving left we see similar performance for versions 0.12 and 0.13 compared to 0.14 without the Assume Valid feature. Although the older versions appear slightly faster, I suspect that’s either random variation or perhaps a side-effect of my own EC2 nodes connecting to each other. See Caveats below.
There’s a remarkable jump (5x) when going back to 0.11 (released in 2015). This is the last version that used OpenSSL, which was replaced in 0.12 by the much faster libsecp256k1, a library purpose built for Bitcoin.
Going even further back in time we see comparable performance for version 0.9 and 0.8, although it took me considerably more effort to get those up and running.
I managed to compile even older versions, down to 0.4 from late 2011. Unfortunately they either crashed or grinded to a halt when they reached blocks from around mid 2015. I posted some log files if you’re curious why. Towards the end, they were syncing at a pace of merely 4,000 blocks per day, so it might have taken them a month ...