On the 5th of March, 2018, Eric Wall, who describes himself on his Twitter profile as being a “cryptocurrency engineer and columnist at Bitcoin.com,” posted 16 tweets that criticized the use of NEO’s Byzantine fault-tolerant consensus algorithm, and stated that “In NEO, their system couldn’t handle the most simple error of one node.”
The above allegations made by Eric Wall were proven incorrect with evidence from Da Hongfei, the Founder of NEO, Chris Hagar from City of Zion, and Erik Zhang, NEO’s lead developer.
Eric Wall would later retract his statement and apologize to the NEO community in a correction thread he posted on the 7th of March, stating that “As demonstrated by /u/metachris in this thread, the NEO blockchain *can* handle a simple network outage from a single node. I’ll, therefore, retract my statement on the nature of the failure and would like to apologize to my followers & the NEO community.”
However, in the same correction thread, Eric Wall continued to post accusations against NEO, and added that his retraction did not mean that “NEO is in the clear.” Wall described NEO as having a “fundamentally flawed design when a single-node dis/reconnect can halt the consensus process of the remaining six nodes.” This, too, was proven false by the City of Zion (CoZ), a group of open source developers working on the NEO blockchain. CoZ tweeted a link to a video showing a failed state, describing it as a “view wait,” and not a halt to the consensus process of the remaining six nodes as alleged by Eric Wall. CoZ also added: “it will self-recover. We can also force a view change by a restart. Integrity is never compromised.”
Eric Wall Accuses NEO
Wall began his Twitter thread by saying that he “never paid any attention to [NEO] because ‘it’s a Chinese Ethereum,’” and that it “just sounded so stupid for reasons I didn’t even know where to begin,” and followed up with: “If you, like me, ignored NEO for this reason, here’s a quick recap of how hilariously bad this project is.” The tweet thread went viral with over 3,954 likes, 1,738 retweets, and 417 comments.
In tweet number 4 of Wall’s Twitter thread, he stated that “NEO uses a delegated Byzantine fault tolerant consensus algorithm. This means that NEO holders elect a set of nodes to be in charge of the consensus process. Currently, that’s just 7 (!) nodes run by the NEO Foundation, essentially like Ripple.” In tweets 5, 6 and 7 of the tweet thread, he stated that he has “some very basic knowledge of how to design Byzantine fault tolerance algorithms,” and that he proposed a similar design for a “permissioned blockchain for securities settlement” for his computer science master’s thesis. He also said that the purpose of a Byzantine-fault-tolerant consensus algorithm is to be “tolerant to Byzantine failures, [including] any type of malicious behavior the node can muster.”
In tweets 8, 9, and 10, Wall stated that the easiest way to build this consensus mechanism is to use “some sort of round-robin signature scheme,” with each validator taking turns signing a block and all signatures are then tallied before a block is deemed valid. Wall called this mechanism “ultra-simplistic.” Wall also said that “if you’re using a predetermined order for the consensus round, the whole system will freeze up if one of the validating nodes gets unplugged,” and added: “So you’ll need to come up with a solution for that.” As an apparent solution to the freeze of the consensus mechanism, Wall suggested to “abandon the round-robin part of the design and instead go for a threshold scheme where the validator’s signatures are broadcast and just needs to be tallied up to a certain threshold, instead of waiting for specific turns in the round.”
These first ten tweets of Wall’s thread led up to the screenshot of a Discord message written by Malcolm Lerider, who is the Senior Research and Development Manager at NEO. Lerider’s Discord message was a reply to a different message posted in NEO’s Discord channel. The original message was not included in the tweets by Wall. Lerider’s Discord message said: “The problem happens when a consensus node gets disconnected during the consensus. The other consensus nodes are waiting for a reply from that node, they won’t get any, and when that ‘dead’ node goes back on again he (sic) is not part of consensus until next block while the other blocks are still waiting for reply, so an edge case deadlock. It was restored by restarting all nodes for a forced changeView. There’s a pending patch to handle this edge case automatically.” As a response to this Discord message by Lerider, Wall said that “this was something that I was able to figure out as a CS student with no previous experience designing consensus mechanisms. Yet yesterday, the whole NEO blockchain failed because they had not thought about this issue!” In Wall’s next tweet, he asked: “How can a node failure of the most simplistic type possible (network loss) be referred to as an ‘edge case’ scenario, in a supposed Byzantine fault-tolerant consensus system?!” Reiterating his point, Wall said that: “In NEO, their system couldn’t handle the most simple (sic) error of one node.” And claimed that this meant that NEO was “not even a fault tolerant consensus system,” and described it as being the “most blatant display of sheer incompetence I’ve ever seen from a project in this space.” Wall finished his tweet thread by saying “Thankfully, there only appears to be 23 deployed smart contracts in total on the NEO blockchain, so no one is really using this crap atm. Let’s hope it stays that way and reading this thread, with $35260 in fees to deploy a contract I suspect it will.”
Eric Wall’s Accusations Proven Incorrect
Wall’s assessment of Lerider’s Discord message prompted an announcement from NEO’s founder, Da Hongfei, who said that Lerider’s statement was “misused as evidence that 1 Consensus Node failure will bring down the NEO network. It is a ridiculous and ignorant accusation and can be debunked easily. The actual reason is more complicated, and we were aware of this issue and had been working on it long before the recent delay happened.” Da Hongfei added that Lerider wrote a blog post to show that the NEO system can handle the nodes going down. In the blog post published by Lerider, he wrote that “even though delay occures, (sic) the consistency is and never was threatened. NEO’s consensus algorithm prioritize (sic) finality, so the worst thing that can happen is block delay; Canesin and members of City of Zion + Red4Sec addressed both these claims on Twitter and Reddit.”
To prove that Wall’s comments were incorrect, Chris Hager from City of Zion uploaded a video demonstration to run in a private net with one node taken down. Also, Erik Zhang, the lead developer for NEO posted a tweet that said: “We found some connection problems in NEO P2P protocol weeks ago which may cause temp communication pause (sic) after a long run of consensus nodes. It automatically recovers after certain (sic) time. A patch was released and tested last month on testnet. Will deploy it on mainnet this week.”
Eric Wall Retracts Accusations and Apologises
On March 7th, Eric Wall posted a Twitter thread titled “Correction thread on NEO,” that contained 16 tweets and apologized to his followers and the NEO community. Wall also retracted the statements he made on the 5th of March claiming that NEO’s delegated Byzantine fault tolerance consensus algorithm would fail if one node is taken down.
Wall’s first tweet in the correction thread stated that he “read [this] Discord message from Malcolm Lerider in which he described the circumstances under which the NEO blockchain failed. Based on a set of assumptions I made, based on that message, I wrote a twitterstorm that went viral.” In the next tweet, Wall wrote: “My assumption was that validating nodes actually wait for a response from each individual validator and therefore cannot handle simplistic network outages.” In the third tweet, Wall apologizes for the accusations he made against NEO.
Eric Wall Posts more Accusations – CoZ Responds
In the same apology and correction thread, Wall continued to mount criticism and accusations against NEO, which were again proven false by a video released by CoZ.
Wall began his line of new criticisms by stating that: “the documentation of the NEO consensus algorithm is exceptionally lackluster and does not cover disconnecting validating nodes,” which is about NEO’s documentation on consensus. “Additionally, the GitHub codebase for Neo mostly contain no commentation at all, except for the occasional comments in Chinese.” Wall’s string of criticisms led eventually to an accusation in his 12th tweet: “While it is true that NEO can tolerate *some* network failures, it is still extremely revealing of a fundamentally flawed design when a single-node dis/reconnect can halt the consensus process of the remaining 6 nodes to such a degree that a manual restart was necessary.” As a separate accusation, Wall added: “We are still only talking about a benign failure of a single node. Describing that as an ‘edge case,’ regardless of timing factors and other issues NEO council are ‘pretty sure’ were involved, in the context of a Byzantine fault tolerant system, is in my opinion dishonest.”
In response to both allegations by Eric Wall, CoZ tweeted: “With apologies come more wrong assumptions. Below is a demo by @metachris showing a failed state: it’s not a halt. It’s a view wait, no need for intervention; it will self-recover. We can also force a view change by restart. Integrity is never compromised.”