Skip to content

Consensus Parameters

Joel Krauska edited this page Feb 20, 2019 · 5 revisions

There are a few consensus parameters in our proof of stake implementation which are hardcoded at compile time.

They are related to parameters described in the Ouroboros Praos Paper.

This document is meant to capture the general behaviors and assumptions behind the parameters.

k, c, delta and block_window_duration

k, c and delta are configured in mlh files here.

block_window_duration is configured in mlh files here.

k

The number of blocks that must pass after a transaction until the network sees the transactions as 'valid'.

From: Ouroboros Praos:

Here, stability is to be understood as a predicate that will be parameterized by some security parameter k that will affect the certainty with which the property holds. (E.g., "more than k blocks deep".)

After k blocks we can assume no forks will happen.

On larger testnets with adversarial attacks, this should generally be large (24), but on small sample testnets this can be small (2). In mainnet k should be significantly larger, it is spec'd at 2160 in OP.

c

In good network conditions with atleast 50% of the stake active, we expect to receive at least 1 block every c slots.

We always use a c value of 8.

In Ouroboros Praos, c is not directly referenced, but rather c is represented as '8k' slots.

delta

The number of slots which can pass during which we will allow receipt of a transition after the slot it was proposed in.

We always use a delta value of 3

block_window_duration

The time slot interval used to define individual time slices when a block may be emitted. (effectively a common shared unit of time for the network). Also called 'slot length'.

For slow testnets, we generally used a value of 60000 (60 seconds). This helps make it obvious when the slot boundaries occur as they line up directly on the minute.

For fast testnets when we DO NOT perform snarks, we believe this value can be as low as 1000 (1s).

We are able to produce blocks faster than

Derived concepts

slots per epoch

slots per epoch = k * c * 3

How many time slots are needed to pass before a new epoch begins. (Also referenced as 24k in OP, as c is 8).

acceptable network delay

acceptable network delay = block_window_duration * delta

length per epoch

length per epoch = block_window_duration * k * c * 3