Skip to content

Instantly share code, notes, and snippets.

@marklnichols
Created December 3, 2020 16:50
Show Gist options
  • Save marklnichols/a3f313fdfda9532ddfc0c73c3a7bac9d to your computer and use it in GitHub Desktop.
Save marklnichols/a3f313fdfda9532ddfc0c73c3a7bac9d to your computer and use it in GitHub Desktop.
PaLa vs Streamlet notes
--------------------------------------------------------------------------------
-- Differences in PaLa wrt Streamlets
--------------------------------------------------------------------------------
There are 2 types of blocks in the chain: normal vs. timeout, where timeout blocks
have a gap in their epoch number wrt the previous block. This distinction seems to
only be used in the proofs, and is not part of the algorithm.
Switching leaders ("proposers ") with every block is optional. An alternative
procedure, where the role of the leader only changes when certain conditions are
met can also be used
A simple committee-change procedure is described
Nodes receive signed clock messages from the other nodes
When a node sees a notarized chain with a higher epoch number than its current
chain, it replaces its current chain with the 'fresher' one
If a proposer's chain has an epoch number earlier than the the current epoch-1,
the proposer waits for 1 'second' (to potentially see a fresher chain), then
propose a new block (without further waiting)
A node signs a proposed block if:
* the node has seen a chain "C-1" consistent with the proposed block's
parent header
* C-1's epoch is >= the epoch of the node's stored chain
* the node has not previously signed a block for this epoch
A node's epoch advances to the number 'e' as if either of the following occur:
* it sees a notarized chain for epoch e-1
* it receives signed clock messages for e from 2/3 of the nodes
If a "minute" has passed since a node enters e-1, it will multicast clock (e)
--------------------------------------------------------------------------------
-- Some Streamlet details wrt the above:
--------------------------------------------------------------------------------
Streamlet always assumes the leader is rotating for each epoch
Sreamlet does not have the leader/proposer 1 "second" delay procedure mentioned
above
Epochs are driven by a timer, are not voted on, and do not proceed based
on blocks being added to chains
In Streamlet, a leader proposes a new block with the only restriction being
that it extends (any one of) the longest notarized chain(s) it has seen so far.
In Streamlet, a node signs/votes for a proposed block with the only
restriction being that it must extend one of the longest notarized chains it
has seen
Streamlet has an additional rule for finalization re: there must be 3 blocks
with consecutive epoch numbers in order to finalize -- all blocks prior to the
last of those three blocks is considered final.
The behavior described above re replacing a node's chain with a 'fresher' one
is not part of the Streamlet algorithm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment