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-A
is 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.