/skale-consensus

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

Primary LanguageC++GNU Affero General Public License v3.0AGPL-3.0

SKALE Consensus: a BFT Consensus engine in C++

Discord Build and test skale-consensus

Skale-consensus is an implementation of SKALE provable consensus spec as described here https://docs.skale.network/technology/consensus-spec

Key features of of SKALE consensus

  • provably secure
  • forkless
  • single block finality - blocks become immediately finalized once committed.
  • survives under arbitrarily long network distruptions and delays by implementing asynchronous network model
  • multiple block proposers per block provide protocol stability even if some block proposers are down

Read the spec for more exciting features.

The consensus is under active improvement and research.

Installation Requirements

SKALE consensus has been built and tested on Ubuntu 18.04 and later.

The preferred build and execution environment is currenty Ubuntu 22.04.

Ensure that the required packages are installed by executing:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install -yq libprocps-dev gcc-9 g++-9 valgrind gawk sed libffi-dev ccache \
    libgoogle-perftools-dev flex bison yasm texinfo autotools-dev automake \
    python3 python3-pip cmake libtool build-essential pkg-config autoconf wget \
    git  libargtable2-dev libmicrohttpd-dev libhiredis-dev redis-server openssl \
    libssl-dev doxygen libgcrypt20-dev

Building from source on Ubuntu (Development)

Steps to build from source:

# clone repo
git clone --recurse-submodules https://github.com/skalenetwork/skale-consensus.git
# build dependencies
cd scripts && ./build_deps.sh 
 # Configure the Cmake build.
cd .. && cmake . -Bbuild
# now run hunter bug workaround
mkdir -p "${HOME}"/.hunter/_Base/Download/crc32c/1.0.5/dc7fa8c/ && wget -O "${HOME}"/.hunter/_Base/Download/crc32c/1.0.5/dc7fa8c/hunter-1.0.5.tar.gz https://github.com/hunter-packages/crc32c/archive/refs/tags/hunter-1.0.5.tar.gz
#  now build all targets using all available CPU cores
cmake --build build -- -j$(nproc) 

Running tests

Navigate to the testing directories and run ./consensusd .

Libraries

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. Please see SECURITY.md for reporting policies.

Contributing

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

Discord

License

License

Copyright (C) 2018-present SKALE Labs