Conceptually, Flow is a permissioned blockchain:
At an Epoch switchover, which is the time when the network transitions from one epoch to the next, the set of authorized nodes can change. For each of Flow's node roles, the Flow protocol admits a protocol-determined number of nodes.
<aside>
📚 Definition of seat
: right to participate in the network as a node of a certain type for a specific Epoch.
</aside>
For each Epoch, there is a Staking Period in which new potential node operators may submit Staking Commitments. After the Staking Period is over, the protocol determines which commitments to accept and which to reject (details TBD). The node operators whose staking commitments were accepted are added to the Identity Table for the next epoch, and become authorized participants at the next epoch switchover. Staked Nodes also can submit other operations to modify their existing stake, which are all carried out at the end of the current epoch.
There are strong benefits to moving as much of the Epoch-switchover logic into smart contracts as possible.
Favored protocol elements we would like to implement through smart contracts are: