Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/helium/erlang-hbbft
Erlang implementation of HoneyBadgerBFT
https://github.com/helium/erlang-hbbft
consensus-algorithm erlang
Last synced: about 1 month ago
JSON representation
Erlang implementation of HoneyBadgerBFT
- Host: GitHub
- URL: https://github.com/helium/erlang-hbbft
- Owner: helium
- License: apache-2.0
- Created: 2018-04-04T15:30:41.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-05-12T11:41:07.000Z (over 1 year ago)
- Last Synced: 2024-08-04T01:13:14.114Z (4 months ago)
- Topics: consensus-algorithm, erlang
- Language: Erlang
- Size: 1.71 MB
- Stars: 69
- Watchers: 35
- Forks: 16
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- beamtoolbox - [erl
README
erlang_hbbft
=====[![Build Status](https://badge.buildkite.com/e794bf0f28123f75870633e8f4a9fda955cbe19e981d12a5d3.svg?branch=master)](https://buildkite.com/helium/hbbft)
Erlang implementation of HoneyBadgerBFT's protocols.
The HoneyBadgerBFT paper defines 5 protocols:
* HoneyBadgerBFT - the top level protocol, runs a new instance of ACS each round
* Asynchronous Common Subset (ACS) - uses RBC and BBA to agree on set of
encrypted 'bundles' of transactions
* Reliable Broadcast (RBC) - uses erasure coding to disseminate an encrypted bundle
* Binary Byzantine Agreement (BBA) - uses a common coin to agree that a majority
of nodes agree that a RBC completed
* Common Coin - uses threshold signatures to allow nodes to construct a common
random value used as a 'coin flip' in BBAThe protocols are implemented in a somewhat unconventional way, they are
implemented as pure data structures that take inputs (messages) and (sometimes)
return outputs or results. They have no notion themselves of networking, time or
actor identity (actors are simply numbered 0..N-1).External code is expected to provide networking, serialization and a mapping
from real actor identity (eg PKI public keys and signatures or IP addresses,
whatever) to a consistent index into the consensus group.The sub protocols are embedded in their parent protocols and their messages get
'wrapped' by their containing protocols (and un-wrapped upon ingest). This makes
testing them individually and composing them very easy.Build
-----$ make
Test
-----$ make test
TypeCheck
-----$ make typecheck
Coverage
-----$ make cover
References
-----* [Honey Badger of BFT Protocols](https://eprint.iacr.org/2016/199.pdf)