Concord byzantine fault tolerant state machine replication library
Switch branches/tags
Nothing to show
Clone or download
guyg8 Merge pull request #9 from salieri11/smallChanges
Bug fixes, minor refactoring and style fix, build improvement and new feature
Latest commit e1c3548 Oct 11, 2018

README.md

Concord-BFT: a Distributed Trust Infrastructure

License

Overview

Project Concord is a highly scalable and energy-efficient distributed trust infrastructure for consensus and smart contract execution.

concord-bft

The core engine of project Concord is concord-bft, a generic state machine replication library that can handle malicious (byzantine) replicas. This library is designed to be used as a core building block for replicated distributed data stores, and is especially suited to serve as the basis of permissioned Blockchain systems. Its implementation is based on the algorithm described in the paper SBFT: a Scalable Decentralized Trust Infrastructure for Blockchains.

Releases

v0.5

Roadmap

We plan to release updates in a quarterly schedule. The next releases will include: optimized State transfer modules with rocksdb integration, configuration and key generation tools, generic key-value interface, and execution engine for EVM smart contracts. We also plan to support Windows, OS X, and additional Linux distributions.

Contributing

The concord-bft project team welcomes contributions from the community. If you wish to contribute code and you have not signed our contributor license agreement (CLA), our bot will update the issue when you open a Pull Request. For any questions about the CLA process, please refer to our FAQ. For more detailed information, refer to CONTRIBUTING.md.

Community

Concord-BFT Slack.

Get Slack invitation via this link or send request to concordbft@gmail.com.

Directory structure

  • bftengine: concord-bft codebase
    • include: external interfaces of concord-bft (to be used by client applications)
    • src: internal implementation of concord-bft
    • tests: tests and usage examples
  • threshsign: crypto library that supports digital threshold signatures
    • include: external interfaces of threshsign (to be used by client applications)
    • src: internal implementation of threshsign
    • tests: tests and usage examples
  • scripts: build scripts

License

concord-bft is available under the Apache 2 license.

Build (Ubuntu Linux)

Dependencies

CMake and clang:

sudo apt-get install cmake clang

Get GMP (dependency for RELIC):

sudo apt-get install libgmp3-dev

Build and install RELIC

cd
git clone https://github.com/relic-toolkit/relic
cd relic/
mkdir build/
cd build/
cmake -DALLOC=AUTO -DWORD=64 -DRAND=UDEV -DSHLIB=ON -DSTLIB=ON -DSTBIN=OFF -DTIMER=HREAL -DCHECK=on -DVERBS=on -DARITH=x64-asm-254 -DFP_PRIME=254 -DFP_METHD="INTEG;INTEG;INTEG;MONTY;LOWER;SLIDE" -DCOMP="-O3 -funroll-loops -fomit-frame-pointer -finline-small-functions -march=native -mtune=native" -DFP_PMERS=off -DFP_QNRES=on -DFPX_METHD="INTEG;INTEG;LAZYR" -DPP_METHD="LAZYR;OATEP" ..
make
sudo make install

Build and install cryptopp

cd
git clone https://github.com/weidai11/cryptopp.git
cd cryptopp/
git checkout CRYPTOPP_5_6_5;
mkdir build/
cd build/
cmake ..
make
sudo make install

Get GNU Parallel

sudo apt-get install parallel

Get g++:

sudo apt-get install g++

Build concord-bft

cd
cd concord-bft

# NOTE: This will add concord-bft/scripts/linux to PATH
#
. scripts/linux/set-env.sh release
#
# ...so you can invoke the make script as follows
#
make.sh

For debug builds use:

. scripts/linux/set-env.sh debug

Run examples

Simple test application (4 replicas and 1 client on a single machine)

export LD_LIBRARY_PATH=/usr/local/lib

Go to the build directory (here <buildtype> is either release or debug)

cd ~/builds/concord-bft/<build-type>/bftengine/tests/simpleTest/scripts

./testReplicasAndClient.sh

# Or, you can alternatively do: ./runReplicas.sh followed by ./runClient.sh