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.
翻译:如同所有软件一样,区块链节点也面临其底层执行栈中的故障。不稳定的执行环境可能中断区块链节点接口的可用性,导致用户停机。本文提出了N版本区块链节点的概念。这种新型节点依赖于同步执行同一区块链协议的不同实现,延续了Avizienis的N版本编程愿景。我们在以太坊背景下设计并实现了一个N版本区块链节点原型,称为N-ETH。我们证明N-ETH能够缓解不稳定执行环境的影响,并在环境故障下显著提升可用性。为模拟不稳定的执行环境,我们在系统调用层面进行故障注入。结果显示,现有的以太坊节点实现在相同的失稳场景下表现出非对称行为。N-ETH利用以太坊节点不同实现中存在的这种非对称行为,即使在最具侵略性的故障注入策略下也能提供更高的可用性。我们首次验证了N版本设计在区块链基础设施领域的相关性。从工业角度看,我们的结果对运营区块链节点的企业(包括Google、ConsenSys及许多其他主要区块链公司)至关重要。