Bitcoin ABC vs Bitcoin Unlimited
At christmas, i had some free-time, and i was bored. I ended up testing Bitcoin ABC and Bitcoin Unlimited Cash, to see which node is better. Originally, i decided to continue working on my node software. To be able to do this, i had to download the blockchain, and thats why i had to test a few node software to do so. My node software is basically a program i wrote in C, its not yet able to connect to other nodes, and not able to create transactions. Currently, it can read the files of a full wallet, lists and browses all the blocks, all the transaction inputs and outputs, and it can observe and display some of the content uploaded to the blockchain.
This is the software in action: https://streamable.com/n7ahr
This article, however, is not about my node software. Its not even good for anything yet, there would be no point in shilling it. Basically, the story is: to test my node software, i had to install the official node software of various coins. These official full wallet softwares, which downloaded the blockchain, were required, so i was able to test my software on those files.
First i have tested my node software on the Dogecoin blockchain, and then i have decided to feed the Bitcoin Cash blockchain into it as well. The most two major Bitcoin Cash implementation is the Bitcoin Cash ABC software, and the Bitcoin Cash Unlimited (BUCASH) software.
The configuration of my computer
The computer i used to carry out this experiment, is more than 10 years old. The CPU is a 4 core Athlon2 X4 from 2009 for the Socket AM3 platform. I have 8 GBytes of DDR3 RAM, and an 1,5 TB SATA HDD. The computer has a 64 bit Linux operating system. Probably everything in this computer is at least 10 years old, and in total, it probably worths less than $200. This is a typical desktop PC of nowdays, althrough most people nowdays use i3 chips instead (which is not that much faster than this, so it would no point in updating this computer).
The internet speed is a 30MBit connection with about 2 MBit upload and unlimited traffic. I enabled port forwarding to have inbound connections for the wallet as well.
Experiences with Bitcoin Cash ABC (v0.20.9)
I have never used a Bitcoin Cash node before. I had bad experiences with the Bitcoin Core node in 2017, when syncing the coin was slower than receiving the new blocks, which resulted a growing lag with the network, even if the software was running all the time. Bitcoin Cash ABC was however, syncing very quickly. Just within 48 hours, the software was able to sync the blockchain. On the disk, it consumed about 152 GByte of free space after syncing.
The software worked very well, it (usually) eats betwen half to 1.5 GByte of RAM. It didnt slowed the computer down too much. After the sync was done, my first visit was to the debug panels. Even after allowing the wallet to idle for another extra day, there was no geniune incoming connections. There was incoming connections, such as blockchain explorers, node explorers, a few service running from .cash domains. There was however no incoming connection from other wallet software, such as no ABC or BUCASH was connected to my computer through an inbound connection at all. As these blockchain explorer services were connecting to my computer, its safe to assume that the ip address of my computer was broadcasted through the network, but for some reason, nodes wont try to make an incoming connection, and only use the major nodes.
This is maybe not just an issue with ABC, this is more likely a wide issue of the algorithm that decides how the nodes will connect to each other as a whole. This makes the network vulnerable in the case of a major DDoS attack against the most frequently used nodes, as once they are out, the nodes on the network will not try to connect to actual nodes. This behaviour of the Bitcoin Cash network is different from the behaviour of other cryptocurrency. Such as on the Dogecoin network, after a few days, you have 4-5 incoming connection from other nodes, and if you run the node for several weeks, you will have hundreds of incoming connections from nodes who have learned your IP address.
Stopping and starting the software was quick. Bitcoin Cash ABC needs maybe 10 seconds to start, which is a record short time i have seen among the node softwares so far. After this, i went to play with the wallet, to see if i can find any interesting things. And well, yeah, i found some very intriguing and worrisome.
Bitcoin Cash ABC and deprecated functions
After checking out the commands, i have noticed that they started to remove the sendmany and sendfrom commands. When trying to use these commands, a message appears, warning you for the fact of deprecation. You have to start the wallet in a special mode to be able to use these commands. The nodes usually supported a feature called accounts. This was used by online services. For example, if a webpage had a tipping system, each user ID had its own account in the wallet, and accounts was able to have one or multiple addresses, belonging to that account. This feature is used by various tipbots, and ABC decided to remove it in last month alltogether. Sendfrom, a command that allowed to spend from an account, is gone. Sendmany, that is similar to this in functionality, and allows to spend from accounts and manually selected bitcoin cash addresses, is also partially being deprecated. It is possible to replace sendfrom with sendmany, so this isnt a big problem. Thinking on it, account management should have nothing to do in a core wallet to begin with, but it will need a lot of extra work from the service providers to rewrite the service, if they already used it.
Bitcoin Unlimited Cash 1.7.0 (BUCASH)
Bitcoin Unlimited Cash didnt wasted the time to create a logo, they just qucikly mspainted a splash screen with the Bitcoin Cash logo and some texts, which already indicates that this isnt the software of the decade. After starting to play with the settings, it gave a positive impression: a lot of settings to throttle your output bandwidth, limit the maximum block size (if you are a miner), a lot of extra info in the debug panel, and an additional graph for the network. However, they have also removed certain panels. I tought they even have removed the panel to set the number of verification threads, but they just hid it - in ABC thats the first that appears if you click on options, but in BUCASH, a different menu comes up, and then you must go back to the main settings to find this. You can see various options are removed from the menu.
Left: ABC, right: BUCASH
After syncing a bit, i decided to limit my send bandwith to 128 kbyte per second, and restarted the software. At this point, everything was a downhill. The software, if its already downloaded the blocks, will take almost 5 minute on this computer to start (compared to the 10 second of ABC). When i have restarted the software, i noticed that there is no incoming bandwidth at all, the software stopped syncing, there was only one peer i was able to connect to. I quickly googled a few node IP addresses, and added them to the node list. The software refused to even try connecting to them, after a few minutes, the software stopped syncing.
I deleted every file of BUCASH, decompressed it again, limited the outbound bandwith to 128 kbyte sec, started it, and... one block, and the connection stalled. I have restarted the software again, this time it stalled after 22000 blocks, and refused to restart again, losing all the connection to nodes.
After i have disabled the bandwidth limitation, and restarted the software, it came alive. Basically, the developers totally messed up the code with the bandwidth limitation, probably they have never actually tested it. The send bandwidth limitation limited not just the incoming but outgoing data too, and not just on a per-second manner: once it reached the 128 kbyte, it stopped all network communications FOREVER.
After this, the node started syncing. Even after an hour, it only had 3 connections to the network alltogether (despite of adding loads of node IP addresses). I was checking to the settings to see what is going on. Bitcoin Unlimited Cash has additional panels to observe the network activity, but the another graph was dead, there was no outpot on it whatsoever. They have removed the field which indicates the received and sent bytes on a per-ip basis, so you cant know which peer doing what.
None of the Bitcoin Unlimited Cash special features work
After closely observing, none of the features the BUCASH team has added to the wallet, was working. The bandwith limitation was dead, the graphs and extra output functionality they added were showing only zero and not changing ever. At this point i became less and less excited to run this node on my computer, the software is obviously full of bugs and its a question how this is even made into the public.
Colossal bugs in Bitcoin Unlimited Cash during syncing
After this, i continued the synchronisation aniway, to check what happens. After waiting a few hours, i have noticed my computer locking up, and the HDD were working like crazy. First i toughts its due to reaching larger blocks, which probably put a lot of stress on the disk drive, but then my browser just froze and it didnt became responsible even after a minute. I have pressed control-alt-delete to see whats going on, but the process explorer never came up as well. Shit.
I used the linux quirk for quick console access, which was able to come up after a half minute. I was able to find out using the top command, that Bitcoin Unilimted Cash ate all of the RAM in the system, and it currently tried to swap in and out gigabytes of data to the disk in every second. I tried to close other applications to free up more RAM, but it had no use, i had to quit BUCASH which miraculously was able to close gently.
At this point i decided to restart the computer. After that was done, i restarted BUCASH and continued syncing. After a few minutes, it already ate more than 2 GByte of RAM. After running for another hour, it ate more than 3 GByte of RAM, and after anther half hour, it consumed about 4 GB of RAM, and the responsibility of my system started to dramatically decrease again.
Bitcoin Unlimited Cash will potentionally damage your hardware
Imagine doing the thing above on a machine with an SSD. SSD-s are only capable to have a limited number of write cycles. A typical SSD can only handle a couple TByte of disk writes, and then the cells dying on it. Bitcoin Unlimited Cash can kill your SSD very easily, doing multiple hundred dollars of hardware damage for you just by running it on your computer. And then, maybe even your data is becoming unaccessable forever. I dont really understand why people are running this node for they business. OH wait, i can: it still fully supports the sendfrom command. Despite this, i recommend to avoid using BUCASH, this is the worst node software i ever seen. This node is notorious for crashing at the critical moment of the 2018 november hardfork. These bugs should be present for very long time, probably there was no notable testing for this project for years. Imagine, if the code quality is so bad, what vulnerabilities could be still present in this code?
To sum up
Bitcoin Cash ABC is the only realible Bitcoin Cash implementation. It is fast, consumes betwen half and 2 gbyte of memory (and it will not leak the memory like BUCASH). It runs fine even on an old trashpicked computer, and does not uses a lot of CPU power. Bitcoin Unlimited has serious bugs and risks the integrity of your system. Other node implementations are not yet tested, based on this test, i recommend running the ABC node.
...and you will also help the author collect more tips.