Chapter 6
HotShot Consensus

Warning: 

this component has no documented requirements. A new requirements page should be created and linked to this component.


Contents



6.1 Overview
6.2 View Protocol
6.2.1 Consensus Tasks
6.2.2 Storage
6.3 Epoch Changes
6.4 Staking
6.4.1 Staking And Withdrawing
6.4.2 Delegation
6.4.3 Rewards
6.4.4 Slashing
6.5 Light Client
6.5.1 Certificates
6.5.2 Prover
6.5.3 Contract
6.6 Protocol Upgrades



6.1 # Overview

Consensus is the fundamental backbone of the GCL. It is the thing which provides global agreement on the inputs to a set of composable blockchains, and stakes signifcant economic collateral on the promise that those inputs will never change (fulfilling the Globally trusted requirement). In this way it forms the basis of composability protocols and the applications that use them. The inputs finalized by Espresso consensus are also treated as inputs to Espresso’s own state machine, which in a sense makes Espresso a blockchain in itself.

Specifically, Espresso uses the HotShot consensus protocol, which builds on the HotStuff protocol by adapting it to

TODO give an overview of HotShot, linking to other pages for details of sub-protocols. I would love to try to specify consensus as a pure function from state to state. This would drastically simplify catchup by telling us exactly what data needs to be persisted so that we can restart in exactly the same state as if we had never shut down at all. The following is an incomplete attempt at that.

The consensus state machine is a tuple (S,I,O,t) consisting of

This state machine satisfies several properties

Completeness

For every s,s′∈ S, i I, t(s,i)t(s,i) =⇒ ss.

6.2 # View Protocol

6.2.1 # Consensus Tasks

6.2.2 # Storage

6.3 # Epoch Changes

6.4 # Staking

6.4.1 # Staking And Withdrawing

6.4.2 # Delegation

6.4.3 # Rewards

6.4.4 # Slashing

6.5 # Light Client

6.5.1 # Certificates

6.5.2 # Prover

6.5.3 # Contract

6.6 # Protocol Upgrades