pratikzambani / byzantine-chain-replication Goto Github PK
View Code? Open in Web Editor NEWImplementation of Byzantine Chain Replication using DistAlgo, capable of tolerating t failures with 2*t + 1 replicas
Implementation of Byzantine Chain Replication using DistAlgo, capable of tolerating t failures with 2*t + 1 replicas
An implementation of Byzantine Chain Replication based on- van Renesse R., Ho C., Schiper N. (2012) Byzantine Chain Replication. In: Baldoni R., Flocchini P., Binoy R. (eds) Principles of Distributed Systems. OPODIS 2012. Lecture Notes in Computer Science, vol 7702. Springer, Berlin, Heidelberg The described system requires 2t+1 replicas to tolerate t Byzantine failures. Motivation This was done as course project for the course CSE 535 Asyschronous Systems at Stony Brook University taught by Professor Scott Stoller. The system is structured in following way: A startup process (bcr.da) reads the configuration file provided as commandline argument and creates Olympus and clients as mentioned in the configuration file. The Olympus after starting created the replicas based on the value of fault tolerance. The clients get their workload from the configuration file. Clients and replicas depend upon the Olympus to create the keys for signing. The public keys of all elements are shared on request. Fault Injection: If failure and triggers are mentioned in the configuration file then the necessary failures are injected during runtime in replicas when the trigger occurs. Used DistAlgo for the creation of async clients and message passing. PLATFORM OS: Windows 10 DistAlgo version: 1.0.9 Python implementation: CPython Python version: 3.5 INSTRUCTION 1. Unzip the release zip in your Windows 10 PC. Go to the root of the unzipped folder. 2. Put your config file in config folder. 3. Open two command line terminals 4. In the first terminal run the following command with <config_file_name.txt> as the argument python -m da --logfile -n MainNode --logfilename logs\log_verify_result_single_client_2_mainnode.txt -F info --message-buffer-size 100000 src\bcr.da <config_file_name.txt> 5. In the second terminal run the following command with <config_file_name.txt> as the argument python -m da --logfile -n ClientNode --logfilename logs\log_verify_result_single_client_2_clientnode.txt -F info --message-buffer-size 100000 src\bcr.da <config_file_name.txt> For example to run test case 1: 1. open 2 command line terminals 2. on terminal 1 run the following command- python -m da --logfile -n MainNode --logfilename logs\log_verify_result_single_client_2_mainnode.txt -F info --message-buffer-size 100000 src\bcr.da config_result_verify_testcase_2.txt 2. on terminal 2 run the following command- python -m da --logfile -n ClientNode --logfilename logs\log_verify_result_single_client_2_clientnode.txt -F info --message-buffer-size 100000 src\bcr.da config_result_verify_testcase_2.txt WORKLOAD GENERATION Algorithm: pseudorandom(seed, n): initialize python's random number generator with the specified seed. for i in range(n): generate a random number from 1 to 4 and map it to (get put slice append) generated key and value using random to generate 4 random lowercase character CONTRIBUTIONS Keshav Gupta: PHASE 2: olympus- create initial configuration: create keys, create, setup, and start processes generate pseudorandom workload with good diversity using specified seed all key generations and signature checks and validations timeout and send request to all replicas if timely response not received methods of dictionary object except slice and append handle retransmitted request as described in paper statement and signed result statement, send updated shuttle check validity of order proof (incl. signatures), add signed order check that dictionary contains expected content at end of test cases PHASE 3: reconfiguration flow on replica and olympus sign, validation of client requests ask olympus if config changed periodically, proof of misbehaviour by client Pratik Sushil Zambani: PHASE 2: support configuration files specified in project.txt generate request sequence specified in config file implementation append and slice in dictionary head: handle new request: assign slot, result stmt, send shuttle tail: send result to client; send result shuttle to predecessor handle result shuttle save, and forward it fault-injection: required triggers fault-injection: required failures PHASE 3: checkpoint flow fault-injection: required triggers fault-injection: required failures MAIN FILES src/bcr.da src/client.da src/object.py src/olympus.da src/replica.da
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.