Flow maintains the following information about each node that • has a seat in the current Epoch N • has successfully bid for a seat for the next Epoch N+1 • had a seat in the last Epoch N-1

The various details about each node are exclusively maintained by two components:

The Protocol State is governed by the consensus committee. • The content of the protocol state is stored by each consensus node individually. (The protocol state is not part of the execution state.) Updates to the protocol state are published in Blocks and are agreed upon through BFT consensus. • The protocol state provides the ultimate truth about which nodes hold active seats and which nodes' seats are inactive. It only holds information that is essential for determining whether a node is authorized to participate in an Epoch or not.

The Epoch Smart Contract runs as part of Flow's execution system and stores its internal state as part of the execution state. The main focus of the Epoch Smart Contract is to store auxiliary information.

We distinguish between the active protocol state for the current epoch and the protocol state under construction for the next Epoch.

Active Protocol State

Epoch Setup

The Protocol state maintains information about the Epoch setup. This information does not change over the course of an epoch.

Constant information about the Epoch Setup

Node-specific information

For each node in the Flow network, the protocol state maintains a respective identity. A node's identity might change from block to block and can be fork-specific.

See also the definition in Identity-Changing Operations.

Most of the data stored in the protocol state is constant over the course of an Epoch:

Information about each node

<aside> 💡 Only nodes with EpochParticipationStatusActive are allowed to contribute to the happy-path logic for extending the current chain (see Epoch Participant Lifecycle for further details). Nodes with status EpochParticipationStatusJoining or EpochParticipationStatusLeaving are allowed to join the networking communication and listen but not issue any messages for extending the chain (voting, protposing blocks, approving results etc). Once a protocol state is finalized, where a node’s status changes to EpochParticipationStatusEjected, all honest nodes should refuse any communication with this node and drop all existing networking connections.

</aside>

Accessing the Node Identity