Expand description

Finality gadget for blockchains.

https://github.com/w3f/consensus/blob/master/pdf/grandpa.pdf

Consensus proceeds in rounds. Each round, voters will cast a prevote and precommit message.

Votes on blocks are then applied to the blockchain, being recursively applied to blocks before them. A DAG is superimposed over the blockchain with the vote_graph logic.

Equivocation detection and vote-set management is done in the round module. The work for actually casting votes is done in the voter module.

Modules

Logic for a single round of GRANDPA.

Maintains the vote-graph of the blockchain.

A voter in GRANDPA. This transitions between rounds and casts votes.

Implementation of a VoterSet, representing the complete set of voters and their weights in the context of a round of the protocol.

Structs

A catch-up message, which is an aggregate of prevotes and precommits necessary to complete a round.

A commit message which is an aggregate of precommits.

Struct returned from validate_commit function with information about the validation result.

A commit message with compact representation of authentication data.

An equivocation (double-vote) in a given round.

Historical votes seen in a round.

A precommit for a block and its ancestors.

A prevote for a block and its ancestors.

A primary proposed block, this is a broadcast of the last round’s estimate.

A signed message.

A signed precommit message.

A signed prevote message.

Enums

Top-level error type used by this crate.

A protocol message or vote.

Traits

Arithmetic necessary for a block number.

Chain context necessary for implementation of the finality gadget.

Functions

Runs the callback with the appropriate CommitProcessingOutcome based on the given CommitValidationResult. Outcome is bad if ghost is undefined, good otherwise.

Validates a GRANDPA commit message and returns the ghost calculated using the precommits in the commit message and using the commit target as a base.

Type Definitions

Authentication data for a set of many messages, currently a set of precommit signatures but in the future could be optimized with BLS signature aggregation.