tock-ibm / mirbft

MirBFT is a consensus library implementing the Mir consensus protocol.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MirBFT Library

This open-source project is part of Hyperledger Labs.

It aims at developing a production-quality implementation of:

  • a general framework for easily implementing distributed protocols
  • the ISS Byzantine fault tolerant consensus protocol.

ISS is the new generation of the Mir-BFT protocol and a link to its detailed description will be added here shortly. The aim of the Mir-BFT library is integration with Hyperledger Fabric, specifically its ordering service. Being framed as a library, however, MirBFT's goal is also to serve as a general-purpose high-performance BFT component of other projects as well.

The research branch contains code developed independently as a research prototype and was used to produce experimental results for the research paper.

Current status

This library is in development and not usable yet. This document describes what the library should become rather than what it currently is. This document itself is more than likely to still change. You are more than welcome to contribute to accelerating the development of the MirBFT library. Have a look at the Contributions section if you want to help out!

Build Status GoDoc

Overview

MirBFT is a library implementing the ISS protocol (and, in the future, other protocols) in a network transport, storage, and cryptographic algorithm agnostic way. MirBFT hopes to be a building block of a next generation of distributed systems, providing an implementation of atomic broadcast which can be utilized by any distributed system.

MirBFT/ISS improves on traditional atomic broadcast protocols like PBFT and Raft which always have a single active leader by allowing concurrent leaders and reconciling total order in a deterministic way.

The multi-leader nature of Mir should lead to exceptional performance especially on wide area networks, but should be suitable for LAN deployments as well.

MirBFT, decouples request payload dissemination from ordering, outputting totally ordered request digests rather than all request data. This allows for novel methods of request dissemination. The provided request dissemination method, however, does guarantee the availability of all request payload data.

Compiling and running tests

The MirBFT library relies on Protocol Buffers. The protoc compiler and the corresponding Go plugin need to be installed. Moreover, some dependencies require gcc to be installed as well. On Ubuntu Linux, those can be installed using

sudo snap install --classic go
sudo snap install --classic protobuf
sudo apt install gcc

Once instaled, the Protocol Buffer files need to be generated by executing

go generate ./protos

in the mirbft root repository directory. This command also has to be executed each time the .proto files in the protos folder change.

Now the tests can be run by executing

go test

The dependencies should be downloaded and installed automatically.

Documentation

For a description of the design and inner workings of the library, see MirBFT Library Architecture.

For a small demo application, see /cmd/chat-demo

TODO: Write a document on how to use the library and link it here.

Contributing

Contributions are more than welcome!

If you want to contribute, have a look at our Contributor's guide and at the open issues. If you have any questions (specific or general), do not hesitate to post them on MirBFT's Rocket.Chat channel. You can also drop an email to the active maintainer(s).

Public Bi-Weekly Community Call

There is a public community call once every two weeks. The current status, any issues, future plans, and anything relevant to the project will be discussed. Whether you have any questions that you want to ask or you have a proposal to discuss, or whether you just want to listen in, feel free to join!

Meeting information:

Summary of references

Active maintainer(s)

Initial committers

Sponsor

Angelo de Caro (adc@zurich.ibm.com).

License

The MirBFT library source code is made available under the Apache License, version 2.0 (Apache-2.0), located in the LICENSE file.

Acknowledgments

This work has been supported in part by the European Union's Horizon 2020 research and innovation programme under grant agreement No. 780477 PRIViLEDGE.

About

MirBFT is a consensus library implementing the Mir consensus protocol.

License:Apache License 2.0


Languages

Language:Go 100.0%