Skip to content

Highly available Ethereum node usign N-version design http://arxiv.org/pdf/2303.14438

License

Notifications You must be signed in to change notification settings

ASSERT-KTH/N-ETH

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

N-ETH

The N-version Ethereum node protoype of the following paper:

@article{2303.14438,
 title = {Highly Available Blockchain Nodes With N-Version Design},
 journal = {IEEE Transactions on Dependable and Secure Computing},
 year = {2023},
 doi = {10.1109/TDSC.2023.3346195},
 author = {Javier Ron and César Soto-Valero and Long Zhang and Benoit Baudry and Martin Monperrus},
 url = {http://arxiv.org/pdf/2303.14438},
}

Description

This repository contains necessary code to deploy N-ETH and measure its availability under unstable execution environments.

N-ETH is an N-version Ethereum Node protoype which aims to improve API availability. N-ETH builds on the existing diversity of Ethereum implementations.

To this case, a N-ETH node will execute one instance of each: geth, besu, erigon, and nethermind as verisons or sub-nodes; and a proxy to encapsulate the sub-nodes under a single interface.

Also, this repository contains automated experiments to measure availability of Etherum clients: geth, besu, erigon, and nethermind.

Deployment

The dockerfiles (geth, besu, erigon, and nethermind) contain the necessary files to execute them along with fault injection modules.

To build a version run e.g. docker build geth.dockerfile -t neth/geth. The resulting image will contain the Ethreum implementation built from source, Teku as consensus layer node, also built from source, and necessary libraries to perform fault injection.

Given that fault injection requires linux headers, these will need to be installed depending on the executing OS. This file is used to install the headers in the docker images.

The docker image must be run with one of the following commands

  • synchronize.sh <node_name> syncs the node indefinitely.
  • synchronize_stop.sh <node_name> syncs the node and exits.
  • single-version-fault-injection.sh <node_name> <fault_injection_strat> starts the node and applies fault injection acordding to the requiered strategy.

The CLI parameters of the nodes are read from the config file

neth_experiment/experiment.go runs a N-ETH node with pre syncronization and fault injection. This uses the nodes' docker images, and also requieres the proxy image

Requirements

docker go jq stoml

N-ETH Experiment

Workloads

Fault injection strategies

FI strategies are located in this directory

Experiment data

Contact @javierron for access to experiment data.

Misc

This repository also contains SSD formatting and mount scripts for experiment automation.