Header reorganization and spacing considerations

This commit is contained in:
Andrew Gross 2018-06-18 13:34:21 -06:00
parent 5855c4ffe7
commit 307c94ca95
1 changed files with 14 additions and 14 deletions

View File

@ -1,27 +1,27 @@
# Honey Badger Byzantine Fault Tolerant (BFT) consensus algorithm
[![Build Status](https://travis-ci.com/poanetwork/hbbft.svg?branch=master)](https://travis-ci.com/poanetwork/hbbft)
[![Gitter](https://badges.gitter.im/poanetwork/hbbft.svg)](https://gitter.im/poanetwork/hbbft?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
# Honey Badger Byzantine Fault Tolerant (BFT) consensus algorithm
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.
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.
This documentation is designed for Rust developers looking to use a resilient consensus algorithm on a distributed network. Following is an overview of HoneyBadger BFT and basic instructions for getting started.
**Note:** This library is a work in progress and parts of the algorithm are still in development.
# What is Honey Badger?
## What is Honey Badger?
The Honey Badger consensus algorithm allows nodes in a distributed, potentially asynchronous environment (decentralized databases and blockchains) to achieve agreement on transactions. The agreement process does not require a leader node, tolerates corrupted nodes, and makes progress in adverse network conditions.
Honey Badger is **Byzantine Fault Tolerant**. The protocol can reach consensus with a number of failed nodes f (including complete takeover by an attacker), as long as the total number N of nodes is greater than 3 * f.
Honey Badger is **asynchronous**. It does not make timing assumptions about message delivery. An adversary can control network scheduling and delay messages without impacting consensus.
# How does it work?
## How does it work?
Honey Badger is a modular library composed of several independent algorithms. To reach consensus, Honey Badger proceeds in epochs. In each epoch, participating nodes broadcast a set of encrypted data transactions to one another and agree on the contents of those transactions.
In an optimal networking environment, output includes data sent from each node. In an adverse environment, the output is an agreed upon subset of data. Either way, the resulting output contains a batch of transactions which is guaranteed to be consistent across all nodes.
## Algorithms
### Algorithms
All algorithms in the protocol are modular and usable. Encryption to provide censorship resistance is currently in process for the top level Honey Badger algorithm.
@ -36,7 +36,7 @@ All algorithms in the protocol are modular and usable. Encryption to provide cen
- [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
### Current TODOs
- [ ] Honey Badger encryption
@ -44,20 +44,20 @@ All algorithms in the protocol are modular and usable. Encryption to provide cen
- [ ] Networking example to detail Honey Badger implementation
# Getting Started
## Getting Started
This Rust library requires a distributed network environment to function. Details on network requirements will be published in the [Rust package registry](https://crates.io/) once core algorithms are complete.
**Note: Additional examples are currently in progress.**
## Build
### Build
```
$ cargo build [--release]
```
## Example Network Simulation
### Example Network Simulation
An example is included to run a simulation of a network using serialization-serde ([https://serde.rs/](https://serde.rs/)) to efficiently serialize and deserialize Rust data structures.
@ -65,17 +65,17 @@ An example is included to run a simulation of a network using serialization-serd
$ cargo run --example simulation --features=serialization-serde -- -h
```
# Contributing
## Contributing
Please look at [current issues](https://github.com/poanetwork/hbbft/issues) and read [CONTRIBUTING.md](CONTRIBUTING.md) for contribution and pull request protocol.
# License
## License
[![License: LGPL v3]([https://img.shields.io/badge/License-LGPL%20v3-blue.svg](https://img.shields.io/badge/License-LGPL%20v3-blue.svg))]([https://www.gnu.org/licenses/lgpl-3.0](https://www.gnu.org/licenses/lgpl-3.0))
This project is licensed under the GNU Lesser General Public License v3.0. See the [LICENSE](LICENSE) file for details.
# References
## References
* [The Honey Badger of BFT Protocols](https://eprint.iacr.org/2016/199.pdf)
@ -83,6 +83,6 @@ This project is licensed under the GNU Lesser General Public License v3.0. See t
* Other language implementations
* [Go ](https://github.com/anthdm/hbbft)
* [Go](https://github.com/anthdm/hbbft)
* [Erlang](https://github.com/helium/erlang-hbbft)