[][src]Module hbbft::honey_badger

Honey Badger

Honey Badger allows a network of N nodes with at most f faulty ones, where 3 f < N, to input "contributions" - any kind of data -, and to agree on a sequence of batches of contributions. The protocol proceeds in epochs, starting at number 0, and outputs one batch in each epoch. It never terminates: It handles a continuous stream of incoming contributions and keeps producing new batches from them. All correct nodes will output the same batch for each epoch. Each validator proposes one contribution per epoch, and every batch will contain the contributions of at least N - f validators.

How it works

In every epoch, every validator encrypts their contribution and proposes it to the others. A Subset instance determines which proposals are accepted and will be part of the new batch. Using threshold encryption, the nodes collaboratively decrypt all accepted contributions. Invalid contributions (that e.g. cannot be deserialized) are discarded - their proposers must be faulty -, and the remaining ones are output as the new batch. The next epoch begins as soon as the validators propose new contributions again.

So it is essentially an endlessly repeating Subset, but with the proposed values encrypted. The encryption makes it harder for an attacker to try and censor a particular value by influencing the set of proposals that make it into the subset, because they don't know the decrypted values before the subset is determined.

Structs

Batch

A batch of contributions the algorithm has output.

HoneyBadger

An instance of the Honey Badger Byzantine fault tolerant consensus algorithm.

HoneyBadgerBuilder

A Honey Badger builder, to configure the parameters and create new instances of HoneyBadger.

Message

A message sent to or received from another node's Honey Badger instance.

Params

Parameters controlling Honey Badger's behavior and performance.

Enums

EncryptionSchedule

How frequently Threshold Encryption should be used.

Error

Honey badger error variants.

FaultKind

Faults detectable from receiving honey badger messages

MessageContent

The content of a HoneyBadger message. It should be further annotated with an epoch.

SubsetHandlingStrategy

A flag used when constructing an EpochState to determine which behavior to use when receiving proposals from a Subset instance.

Type Definitions

FaultLog

The type of fault log whose entries are HoneyBadger faults.

Result

The result of HoneyBadger handling an input or a message.

Step

A HoneyBadger step, possibly containing multiple outputs.