Skip to content
Sawtooth PBFT consensus engine
Branch: master
Clone or download
ltseeley Merge pull request #129 from Cargill/agunde406-testing-doc-fix
Remove old setting from installing and testing doc
Latest commit ec3f041 Apr 17, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
adhoc Rename on-chain peers list Apr 2, 2019
bin Add run_docker_test script Nov 15, 2018
ci Add nightly dockerfile Mar 1, 2019
docker/compose Change how pbft binary is built for tests Feb 13, 2019
docs Add link to valid pbft settings to running and testing doc Apr 17, 2019
logging Add support for logging config with example yaml Oct 23, 2018
packaging Rename sawtooth-pbft to sawtooth-pbft-engine Nov 9, 2018
protos Remove previous_id from consensus seal Feb 25, 2019
src Merge pull request #126 from Cargill/ltseeley-update-on-chain-members… Apr 5, 2019
tests Remove unsued setting from test_liveness.yaml Apr 17, 2019
.dockerignore Add Dockerfile, environment, and PBFT client Jul 23, 2018
.env Change docker .env so bionic is the default Dec 20, 2018
Cargo.toml Increment version to v0.1.3 Mar 26, 2019
Dockerfile Stop installing unneeded cargo deb Feb 13, 2019
Dockerfile-installed-bionic Add bionic installed dockerfile Dec 20, 2018
Jenkinsfile Bootstrap with Commit for chain head Apr 4, 2019 Add links to published PBFT docs and rustdocs Jan 9, 2019
VERSION Increment version to v0.1.3 Mar 26, 2019 Updating code formatting with cargo fmt Dec 7, 2018
docker-compose-installed.yaml Rename installed dockerfiles to support multiple distros Dec 20, 2018
docker-compose.yml Mount target directory as docker volume Oct 22, 2018

Sawtooth PBFT

This repository contains an implementation of the Practical Byzantine Fault Tolerant (PBFT) consensus algorithm for Hyperledger Sawtooth.


This project is in a highly experimental stage - there is a significant amount of work to be done before it is ready to be deployed in a production context. Please be aware that this repository might change often.

The proposal to include PBFT in Sawtooth is located in Sawtooth RFC

About PBFT

The PBFT algorithm was pioneered by Miguel Castro and Barbara Liskov in 1999, as described in their paper Practical Byzantine Fault Tolerance. PBFT is designed to tolerate the failure of nodes in a distributed network, as well as nodes sending incorrect messages to other nodes, as long as fewer than one-third of the nodes are considered faulty. PBFT networks need a minimum of four nodes to be Byzantine fault tolerant.

The Sawtooth PBFT implementation is based on the algorithm described in that paper, and is adapted for use in Hyperledger Sawtooth. Sawtooth PBFT uses the Sawtooth consensus API that is described by Sawtooth RFC

Note that this project uses the terms "primary" and "secondary" to refer to the role of nodes in the network, which differs slightly from the terminology used in the PBFT paper.

  • "Primary" is synonymous with "leader"
  • "Secondary" is synonymous with "follower" and "backup"
  • "Node" is synonymous with "server" and "replica"


PBFT was chosen as an algorithm for the new Sawtooth consensus API in order to provide Byzantine fault tolerant consensus for a system without a Trusted Execution Environment (TEE).

Sawtooth initially supported only PoET consensus, and the Byzantine fault tolerant version (PoET-SGX) requires a Trusted Execution Environment (TEE). PoET simulator (for systems without a TEE) is only crash fault tolerant, so if any nodes in the network exhibit Byzantine behaviour, it causes issues with consensus.



Hyperledger Sawtooth software is licensed under the Apache License Version 2.0 software license.

You can’t perform that action at this time.