A lightweight consensus protocol simulator.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Project Edelweiss (Work in Progress)

Edelweiss is a lightweight consensus protocol simulator.

For safer and better consensus protocols!

The program has been tested under python3.5


  • Run and do vulnerability analysis existing consensus like BOSCO,NaiveVoting,DolevStrong,Herding in a straightforward way,you can see the middle and final results of the running of the protocol and analysis the vulnerability of different protocols quickly.

  • Provide a set of controllers,environments,settings,adversaries result measures and communication techniques so that you can easily implement and analysis your new consensus protocols without worring about the 'dirty work' of implementing it.

  • Simulate the kinds of attacks that is theoretical possible but difficulty to achieve or observe in real distributed systems.

  • Analysis the vulnerability of different protocols,say,change the parameters or weaken the assumptions of the protocols and see their performance

File Description


File Description
SynController.py Synchronous controller that controls the running of the protocol


File Description
DolevStrong.py Synchronous DolevStrong protocol
Herding.py Synchronous Herding protocol
HerdingWithBroadcastFast.py Synchronous Herding protocol with broadcast
NaiveVoting.py Synchronous NaiveVoting protocol
DolevStrong_Wrong.py Uncorrectly written DolevStrong protocol
BOSCO.py Synchronous BOSCO protocol


File Description
CrashAdversary.py Crash adversary
HalfHalfSenderAdversary.py Adversary that sends different msgs to different nodes
SynBOSCOAgreementAttacker.py Synchronous BOSCO agreement adversary
SynBOSCOAgreementCentralizedAttacker.py Synchronous BOSCO centralized agreement adversary
SynHerdingAgreementFast.py Synchronous Herding advanced adversary
SynHerdingBenchmarkAttacker.py Synchronous Herding brute-force adversary
DolevStrongRoundAdversary.py Synchronous DolevStong round adversary

Example Experiments

File Description
HerdingStat.py Statistics vulnerability analysis on Herding

Getting Started




git clone git@github.com:FTRobbin/Edelweiss.git


Run a demo experiment

Run the default experiment

python3 Main.py

Run a specific experiment

python3 Main.py -i experiment_num

experiment_num is the index of the experiment in variable demoProtocols in file TestConfig.py

Do statistics analysis on Herding

python3 stat.py

Result is in the file HerdingStat.txt under directory Edelweiss/src


To test all the protocols,run

python3 test.py

To test a specific protocol,run

python3 test.py -i protocol_num

proticol_num is the index of the prototol in variable TestProtocolsList in file TestConfig

Chujun Song, Haobin Ni, 2018