title | libs | ||
---|---|---|---|
Aura - Authority Round |
|
Aura (Authority Round) is one of the Blockchain consensus algorithms available in OpenEthereum.
-
$$n$$ , the number of nodes -
$$f$$ , the number of faulty nodes -
$$t$$ , the step duration in seconds
Time is divided into discrete steps of duration
The primary for a step
The protocol contains a chain scoring rule
On each step, each honest node will propagate the chain with the highest score it knows about to all other nodes. Honest primaries will only issue blocks on top of the best chain they are aware of during their turn.
Under the assumption of a synchronous network which propagates messages within the step duration
If there is a valid chain
This definition of finality stems from a simple majority vote. In this setting,
In order to reach finality in a timely fashion it is necessary for the nodes to keep sealing blocks even when there are no transactions.
To reduce blockchain bloat while still maintaining the same finality guarantees the nodes can sign and broadcast an EmptyStep(step, parent_hash)
message instead of producing an empty block. All of the nodes accumulate the broadcasted empty step messages and they are included and rewarded in the next non-empty block.
The empty step messages included in blocks are also taken into account for finality.
To enable empty step messages set the emptyStepsTransition
to enable it at the given block number. You can also specify a maximum number of empty steps with maximumEmptySteps
in your chain spec.
This consensus requires a ValidatorSet
to be specified, which determines the list of
A node can represent a validator when it is run with --engine-signer VALIDATOR-ADDRESS
.
The consensus can be run with --force-sealing
which ensures that blocks are produced even if there are no transactions. This is necessary for blocks to reach finality in a timely fashion.
- Apply step backoff after skipping primaries, not before. Exponential backoff may allow for weakly synchronous network without failure.
- Faster finality by broadcasting signed
GOOD(Hash)
messages where Hash is a block hash of a block with number multiple of some epoch length.GOOD
messages can be included in the seal.