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:
splitTxs
: produces a pair of a list of transactions that can be included in an RB and a list of transactions that can be included in an EBvalidityCheckTime
: the time it takes to validate a given EB (in slots)
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:
- Positive rules, when we do need to create a block.
- 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.