Using PBFT ConsensusΒΆ

Sawtooth PBFT consensus provides Byzantine fault tolerance for a network with restricted membership. It has the following requirements:

  • A network using PBFT consensus must have at least four nodes. A network with fewer nodes will fail; a new network with less than four nodes will not start.

  • A PBFT network must be fully peered; that is, all nodes must be directly connected to all other nodes. Static peering is recommended.

  • Each node on the network must install and run the PBFT consensus engine.

    • Package: sawtooth-pbft-engine

    • Executable: pbft-engine

    • Service: sawtooth-pbft-engine.service

  • Each node must run the Settings transaction processor (or an equivalent) to handle the PBFT and Sawtooth on-chain settings.

  • The genesis block must specify the PBFT consensus engine name and version, using the on-chain settings sawtooth.consensus.algorithm.name and sawtooth.consensus.algorithm.version.

    • The PBFT consensus engine name is pbft.

    • The version number is in the file sawtooth-pbft/Cargo.toml (see the sawtooth-pbft repository) as version = "{major}.{minor}.{patch}". Use only the first two digits (major and minor release numbers); omit the patch number. For example, if the version is 1.0.3, use 1.0 for the version setting.

  • The on-chain configuration setting sawtooth.consensus.pbft.members must list all PBFT member nodes in the network. For more information, see PBFT On-Chain Settings.

For the procedure to configure PBFT, see the Hyperledger Sawtooth documentation:

  • Developers: Creating a Sawtooth Network shows how to create a test network with PBFT consensus for an application development environment.

  • Sawtooth administrators: Setting Up a Sawtooth Node explains how to create a Sawtooth network with PBFT consensus, plus how to add or remove nodes for an existing network.