A modified version of the Raft consensus protocol for highly-efficient cooperative Ethereum SSV implementations
Go to file
Marto fc50bf1271 More refactoring 2024-02-07 17:02:07 +02:00
.vscode Code refactoring 2024-02-07 15:29:53 +02:00
doc Added Diego Ongaro Raft paper and Stanford PhD Dissertation 2023-09-03 07:23:23 +03:00
misc Remove redundant file 2023-09-16 23:08:56 +03:00
raft More refactoring 2024-02-07 17:02:07 +02:00
tests More refactoring 2024-02-07 17:02:07 +02:00
.editorconfig Add license and .editorconfig 2023-08-03 19:58:40 +03:00
.gitignore Added Diego Ongaro Raft paper and Stanford PhD Dissertation 2023-09-03 07:23:23 +03:00
LICENSE-APACHEv2 Add preliminary API definitions and project roadmap 2023-08-09 13:06:34 +03:00
LICENSE-MIT Add preliminary API definitions and project roadmap 2023-08-09 13:06:34 +03:00
README.md More refactoring 2024-02-07 17:02:07 +02:00
all_test.md start writing consensus fsm tests 2023-11-05 05:27:11 +02:00
raft.nim Code refactoring 2024-02-07 15:29:53 +02:00
raft.nimble Added MDBX DB Store wrapper in order to start writing the persistance part 2023-09-03 07:03:09 +03:00
raft.nims Add run_all_test.sh help script etc. 2023-09-01 01:42:18 +03:00
raft_node_config.json Fix json config 2023-09-09 20:42:10 +03:00
run_all_tests.sh Add run_all_test.sh help script etc. 2023-09-01 01:42:18 +03:00

README.md

nim-raft

This project aims to develop an implementation of the Raft consensus protocol that allows for application-specific customizations of the protocol.

We plan to leverage the implementation to create a highly-efficient setup for operating a redundant set of Nimbus beacon nodes and/or validator clients that rely on BLS threshold signatures to achieve improved resilience and security. Further details can be found in our roadmap here:

https://github.com/status-im/nimbus-eth2/issues/3416

This project is heavily inspired by Raft implementation in ScyllaDB

https://github.com/scylladb/scylladb/tree/master/raft

Design goals

The main goal is to separate implementation of the raft state machin from the other implementation details like (storage, rpc etc) In order to achive this we want to keep the State machine absolutly deterministic every interaction the the world like networking, logging, acquiring current time, random number generation, disc operation etc must happened trough the state machine interface. It will ensure better testability and integrability.

Run test

./run_all_tests.sh