  As all software, blockchain nodes are exposed to faults in their underlying
execution stack. Unstable execution environments can disrupt the availability
of blockchain nodes interfaces, resulting in downtime for users. This paper
introduces the concept of N-version Blockchain nodes. This new type of node
relies on simultaneous execution of different implementations of the same
blockchain protocol, in the line of Avizienis' N-version programming vision. We
design and implement an N-version blockchain node prototype in the context of
Ethereum, called N-ETH. We show that N-ETH is able to mitigate the effects of
unstable execution environments and significantly enhance availability under
environment faults. To simulate unstable execution environments, we perform
fault injection at the system-call level. Our results show that existing
Ethereum node implementations behave asymmetrically under identical instability
scenarios. N-ETH leverages this asymmetric behavior available in the diverse
implementations of Ethereum nodes to provide increased availability, even under
our most aggressive fault-injection strategies. We are the first to validate
the relevance of N-version design in the domain of blockchain infrastructure.
From an industrial perspective, our results are of utmost importance for
businesses operating blockchain nodes, including Google, ConsenSys, and many
other major blockchain companies.
