mirror of https://github.com/poanetwork/hbbft.git
README re-organization and additions
This commit is contained in:
parent
1dc5bb3154
commit
8c07146608
70
README.md
70
README.md
|
@ -5,13 +5,6 @@
|
|||
|
||||
Welcome to a [Rust](https://www.rust-lang.org/en-US/) library of the Honey Badger Byzantine Fault Tolerant (BFT) consensus algorithm. The research and protocols for this algorithm are explained in detail in "[The Honey Badger of BFT Protocols](https://eprint.iacr.org/2016/199.pdf)" by Miller et al., 2016.
|
||||
|
||||
Our implementation modifies the protocols described in the paper in several ways:
|
||||
* We use a [pairing elliptic curve library](https://github.com/ebfull/pairing) to implement pairing-based cryptography rather than Gap Diffie-Hellman groups.
|
||||
* We add a `Terminate` message to the Binary Agreement algorithm. Termination occurs following output, preventing the algorithm from running (or staying in memory) indefinitely. ([#53](https://github.com/poanetwork/hbbft/issues/55))
|
||||
* We add a `Conf` message to the Binary Agreement algorithm. An additional message phase prevents an attack if an adversary controls a network scheduler and a node. ([#37](https://github.com/poanetwork/hbbft/issues/37))
|
||||
* We return additional information from the Subset and Honey Badger algorithms that specifies which node input which data. This allows for identification of potentially malicious nodes.
|
||||
* We run a Distributed Key Generation (DKG) protocol which does not require a trusted dealer; nodes collectively generate a secret key. This addresses the problem of single point of failure. See [Distributed Key Generation in the Wild](https://eprint.iacr.org/2012/377.pdf).
|
||||
|
||||
Following is an overview of HoneyBadger BFT and [basic instructions for getting started](#getting-started).
|
||||
|
||||
_**Note:** This library is a work in progress and parts of the algorithm are still in development._
|
||||
|
@ -32,18 +25,6 @@ In an optimal networking environment, output includes data sent from each node.
|
|||
|
||||
All algorithms in the protocol are modular. Encryption to provide censorship resistance is currently in process for the top level Honey Badger algorithm.
|
||||
|
||||
### Algorithm naming conventions
|
||||
|
||||
We have simplified algorithm naming conventions from the original paper.
|
||||
|
||||
| Algorithm Name | Original Name |
|
||||
| ---------------- | -------------------------------- |
|
||||
| Honey Badger | HoneyBadgerBFT |
|
||||
| Subset | Asynchronous Common Subset (ACS) |
|
||||
| Broadcast | Reliable Broadcast (RBC) |
|
||||
| Binary Agreement | Binary Byzantine Agreement (BBA) |
|
||||
| Coin | Common Coin |
|
||||
|
||||
### Algorithm short descriptions
|
||||
|
||||
- [ ] **[Honey Badger](https://github.com/poanetwork/hbbft/blob/master/src/honey_badger.rs):** The top level protocol proceeds in epochs using the protocols below.
|
||||
|
@ -56,15 +37,6 @@ We have simplified algorithm naming conventions from the original paper.
|
|||
|
||||
- [x] **[Coin](https://github.com/poanetwork/hbbft/blob/master/src/common_coin.rs):** A pseudorandom binary value used by the Binary Agreement protocol.
|
||||
|
||||
|
||||
### Current TODOs
|
||||
|
||||
- [ ] Honey Badger encryption ([#41](https://github.com/poanetwork/hbbft/issues/41))
|
||||
|
||||
- [ ] Dynamic Honey Badger (adding and removing nodes in a live network environment) ([#47](https://github.com/poanetwork/hbbft/issues/47#issuecomment-394640406))
|
||||
|
||||
- [ ] Networking example to detail Honey Badger implementation
|
||||
|
||||
## Getting Started
|
||||
|
||||
This Rust library requires a distributed network environment to function. Details on network requirements TBD.
|
||||
|
@ -79,14 +51,54 @@ Requires `rust` and `cargo`: [installation instructions.](https://www.rust-lang.
|
|||
$ cargo build [--release]
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```
|
||||
$ cargo test --release
|
||||
```
|
||||
|
||||
### Example Network Simulation
|
||||
|
||||
A basic [example](https://github.com/poanetwork/hbbft/blob/master/examples/README.md) is included to run a network simulation.
|
||||
|
||||
```
|
||||
$ cargo run --example simulation -- -h
|
||||
$ cargo run --example simulation --release -- -h
|
||||
```
|
||||
|
||||
## Current TODOs
|
||||
|
||||
See [Issues](https://github.com/poanetwork/hbbft/issues) for all tasks in progress.
|
||||
|
||||
- [ ] Honey Badger encryption ([#41](https://github.com/poanetwork/hbbft/issues/41))
|
||||
|
||||
- [ ] Dynamic Honey Badger (adding and removing nodes in a live network environment) ([#47](https://github.com/poanetwork/hbbft/issues/47#issuecomment-394640406))
|
||||
|
||||
- [ ] Optimize Coin algorithm using a schedule ([#69](https://github.com/poanetwork/hbbft/issues/69))
|
||||
|
||||
- [ ] Networking example to detail Honey Badger implementation
|
||||
|
||||
## Protocol Modifications
|
||||
|
||||
Our implementation modifies the protocols described in "[The Honey Badger of BFT Protocols](https://eprint.iacr.org/2016/199.pdf)" in several ways:
|
||||
* We use a [pairing elliptic curve library](https://github.com/ebfull/pairing) to implement pairing-based cryptography rather than Gap Diffie-Hellman groups.
|
||||
* We add a `Terminate` message to the Binary Agreement algorithm. Termination occurs following output, preventing the algorithm from running (or staying in memory) indefinitely. ([#53](https://github.com/poanetwork/hbbft/issues/55))
|
||||
* We add a `Conf` message to the Binary Agreement algorithm. An additional message phase prevents an attack if an adversary controls a network scheduler and a node. ([#37](https://github.com/poanetwork/hbbft/issues/37))
|
||||
* We return additional information from the Subset and Honey Badger algorithms that specifies which node input which data. This allows for identification of potentially malicious nodes.
|
||||
* We run a Distributed Key Generation (DKG) protocol which does not require a trusted dealer; nodes collectively generate a secret key. This addresses the problem of single point of failure. See [Distributed Key Generation in the Wild](https://eprint.iacr.org/2012/377.pdf).
|
||||
|
||||
### Algorithm naming conventions
|
||||
|
||||
We have simplified algorithm naming conventions from the original paper.
|
||||
|
||||
| Algorithm Name | Original Name |
|
||||
| ---------------- | -------------------------------- |
|
||||
| Honey Badger | HoneyBadgerBFT |
|
||||
| Subset | Asynchronous Common Subset (ACS) |
|
||||
| Broadcast | Reliable Broadcast (RBC) |
|
||||
| Binary Agreement | Binary Byzantine Agreement (BBA) |
|
||||
| Coin | Common Coin |
|
||||
|
||||
|
||||
## License
|
||||
|
||||
[![License: LGPL v3.0](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)
|
||||
|
|
Loading…
Reference in New Issue