Linear Leios

This document is a specification of Linear Leios. It removes concurrency at the transaction level by producing one (large) EB for every Praos block.

In addition to the expected paramaters, we assume a two functions:

Upkeep

A node that never produces a block even though it could is not supposed to be an honest node, and we prevent that by tracking whether a node has checked if it can make a block in a particular slot. LeiosState contains a set of SlotUpkeep and we ensure that this set contains all elements before we can advance to the next slot, resetting this field to the empty set.

Block/Vote production

We now define the rules for block production given by the relation _↝_. These are split in two:

  1. Positive rules, when we do need to create a block.
  2. Negative rules, when we cannot create a block.

The purpose of the negative rules is to properly adjust the upkeep if we cannot make a block.

Note that _↝_, starting with an empty upkeep can always make exactly three steps corresponding to the three types of Leios specific blocks.

Positive rules

In this specification, we don’t want to peek behind the base chain abstraction. This means that we assume instead that the canProduceEB predicate is satisfied if and only if we can make an RB. In that case, we send out an EB with the transactions currently stored in the mempool.

Predicate needed for slot transition. Special care needs to be taken when starting from genesis.

Linear Leios transitions

The relation describing the transition given input and state #### Initialization

Network and Ledger

Base chain

Note: Submitted data to the base chain is only taken into account if the party submitting is the block producer on the base chain for the given slot

Protocol rules