Skip to main content

Block Production Explained

For simplicity of the explanation let's consider the following notations:

m = max_block_cpu_usage

t = block-time

e = last-block-cpu-effort-percent

w = block_time_interval = 500ms

a = produce-block-early-amount = (w - w*e/100) ms

p = produce-block-time; p = t - a

c = billed_cpu_in_block = minimum(m, w - a)

n = network tcp/ip latency

Let's consider for exemplification the following four BPs and their network topology as depicted in below diagram

#p2p_local_chain_prunning.dot - local chain prunning
#
#notes: * to see image copy/paste to https://dreampuf.github.io/GraphvizOnline
# * image will be rendered by gatsby-remark-graphviz plugin in sysio docs.

digraph {
newrank=true #allows ranks inside subgraphs (important!)
compound=true #allows edges connecting nodes with subgraphs
graph [rankdir=LR]
node [style=filled, fillcolor=lightgray, shape=square, fixedsize=true, width=.55, fontsize=10]
edge [dir=both, arrowsize=.6, weight=100]
splines=false

subgraph cluster_chain {
label="Block Producers Peers"; labelloc="b"
graph [color=invis]
b0 [label="...", color=invis, style=""]
b1 [label="BP-A"]; b2 [label="BP-A\nPeer"]; b3 [label="BP-B\nPeer"]; b4 [label="BP-B"]
b5 [label="...", color=invis, style=""]
b0 -> b1 -> b2 -> b3 -> b4 -> b5
} //cluster_chain

} //digraph

BP-A will send block at p and,

BP-B needs block at time t or otherwise will drop it.

If BP-Ais producing 12 blocks as follows b(lock) at t(ime) 1, bt 1.5, bt 2, bt 2.5, bt 3, bt 3.5, bt 4, bt 4.5, bt 5, bt 5.5, bt 6, bt 6.5 then BP-B needs bt 6.5 by time 6.5 so it has .5 to produce bt 7.

Please notice that the time of bt 7 minus .5 equals the time of bt 6.5 therefore time t is the last block time of BP-A and when BP-B needs to start its first block.