Git Product home page Git Product logo

fbr-engineering-sdn-bhd / skale-consensus Goto Github PK

View Code? Open in Web Editor NEW

This project forked from skalenetwork/skale-consensus

0.0 1.0 0.0 23.34 MB

SKALE BFT consensus is universal, modern, modular, high-performance, asynchronous, provably-secure, agent-based Proof-of-Stake blockchain consensus engine in C++ 17. Used by SKALE sidechains. Easy and flexible enough to implement your own blockchain or smart contract platform. BLS signatures and Binary Asynchronous Consensus are main building blocks.

Home Page: https://skale.network

License: GNU Affero General Public License v3.0

C++ 48.67% CMake 17.55% Makefile 7.24% C 26.08% Objective-C 0.09% Python 0.33% Dockerfile 0.03% Shell 0.01%

skale-consensus's Introduction

SKALE Consensus: a BFT Consensus engine in C++

Discord Build Status

SKALE consensus utilizes multiple block proposers. Block proposers distribute proposals to nodes and collect a BLS-signature based data availability proofs. An Asynchronous Binary Byzantine Agreement is then executed for each block proposal to reach consensus on whether it is data-available. If multiple block proposals are known to be data-available, a BLS-based common coin is used to select the winning proposal that is committed to the chain.

SKALE Consensus uses an Asynchronous Binary Byzantine Agreement (ABBA) protocol. The current implementation uses ABBA from Mostefaoui et al. In general, any ABBA protocol can be used so long as it has the following properties:

  • Network model: protocol assumes asynchronous network messaging model.
  • Byzantine nodes: protocol assumes less than 1/3 of nodes are Byzantine.
  • Initial vote: protocol assumes each node makes an initial yes or no vote.
  • Consensus vote: protocol terminates with consensus vote of either yes or no. Where consensus vote is yes, it is guaranteed that at least one honest node voted yes.

An important note about production readiness:

The SKALE consensus is still in active development and contains bugs. This software should be regarded as alpha software. Development is still subject to competing the specification, security hardening, further testing, and breaking changes. This consensus engine has not yet been reviewed or audited for security.

Roadmap

to be posted soon

Installation Requirements

SKALE consensus has been built and tested on Ubuntu.

Ensure that the required packages are installed by executing:

sudo apt-get update
sudo apt-get install -y cmake build-essential libgoogle-perftools-dev libprocps-dev
sudo apt-get install -y libffi-dev autotools-dev automake bison flex yasm texinfo

Building from source on Ubuntu (Development)

Clone project and configure build:

git clone --recurse-submodules https://github.com/skalenetwork/skale-consensus.git
# Configure the project and create a build directory.
./libBLS/deps/build.sh # build libBLS's dependencies
cmake -H. -Bbuild # Configure the build.
cmake --build build -- -j$(nproc) # Build all default targets using all cores.

Running tests

Navigate to the testing directories and run ./consensusd .

Libraries

Contributing

If you have any questions please ask our development community on Discord.

Discord

License

License

Copyright (C) 2018-present SKALE Labs

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.