Linear Leios endorser blocks: forging, propagation, acquiring, certifying

2026-11-09-16-29-2a1ad-w45ezenotxsu-value-leios-workload-all-n2n-100k1m-2i2o2w-nomadperf-dira-nom
maxEndorserBlockTxsSize limited · 100.0% full, against 98.9% of maxEndorserBlockReferencesSize

Setup

Topology

51 pools · 3 regions: AP 17, EU 17, US 17 · torus-dense · 306 producer entries = 204 links (102 reciprocated) · 153 intra-region links, 51 inter-region · every pool has 12 links of its own, 6 out and 6 in, 4 of them reciprocal, so 8 distinct partners · diameter 4, radius 4, mean shortest path 2.48 hops · peer sharing off (PeerSharing false in the node's configuration), so a node talks only and always to its listed producers

Full graph

EUUSAP

Intra-region links only

EUUSAP

Inter-region links only

EUUSAP

Node positions are identical in all three views; hover a node to highlight its links everywhere and read its degrees. Region colours: EU green, US red, AP blue. Links are drawn undirected; direction and each pool's producer list are in the adjacency table.

Adjacency table
NodeRegionOut intraOut interIn intraIn interProducers (outbound)
node-0EU4242node-1, node-2, node-3, node-48, node-15, node-33
node-1US4242node-2, node-0, node-4, node-49, node-16, node-34
node-2AP4242node-0, node-1, node-5, node-50, node-17, node-35
node-3EU4242node-4, node-5, node-6, node-0, node-18, node-36
node-4US4242node-5, node-3, node-7, node-1, node-19, node-37
node-5AP4242node-3, node-4, node-8, node-2, node-20, node-38
node-6EU4242node-7, node-8, node-9, node-3, node-21, node-39
node-7US4242node-8, node-6, node-10, node-4, node-22, node-40
node-8AP4242node-6, node-7, node-11, node-5, node-23, node-41
node-9EU4242node-10, node-11, node-12, node-6, node-24, node-42
node-10US4242node-11, node-9, node-13, node-7, node-25, node-43
node-11AP4242node-9, node-10, node-14, node-8, node-26, node-44
node-12EU4242node-13, node-14, node-15, node-9, node-27, node-45
node-13US4242node-14, node-12, node-16, node-10, node-28, node-46
node-14AP4242node-12, node-13, node-17, node-11, node-29, node-47
node-15EU4242node-16, node-17, node-18, node-12, node-30, node-48
node-16US4242node-17, node-15, node-19, node-13, node-31, node-49
node-17AP4242node-15, node-16, node-20, node-14, node-32, node-50
node-18EU4242node-19, node-20, node-21, node-15, node-33, node-0
node-19US4242node-20, node-18, node-22, node-16, node-34, node-1
node-20AP4242node-18, node-19, node-23, node-17, node-35, node-2
node-21EU4242node-22, node-23, node-24, node-18, node-36, node-3
node-22US4242node-23, node-21, node-25, node-19, node-37, node-4
node-23AP4242node-21, node-22, node-26, node-20, node-38, node-5
node-24EU4242node-25, node-26, node-27, node-21, node-39, node-6
node-25US4242node-26, node-24, node-28, node-22, node-40, node-7
node-26AP4242node-24, node-25, node-29, node-23, node-41, node-8
node-27EU4242node-28, node-29, node-30, node-24, node-42, node-9
node-28US4242node-29, node-27, node-31, node-25, node-43, node-10
node-29AP4242node-27, node-28, node-32, node-26, node-44, node-11
node-30EU4242node-31, node-32, node-33, node-27, node-45, node-12
node-31US4242node-32, node-30, node-34, node-28, node-46, node-13
node-32AP4242node-30, node-31, node-35, node-29, node-47, node-14
node-33EU4242node-34, node-35, node-36, node-30, node-48, node-15
node-34US4242node-35, node-33, node-37, node-31, node-49, node-16
node-35AP4242node-33, node-34, node-38, node-32, node-50, node-17
node-36EU4242node-37, node-38, node-39, node-33, node-0, node-18
node-37US4242node-38, node-36, node-40, node-34, node-1, node-19
node-38AP4242node-36, node-37, node-41, node-35, node-2, node-20
node-39EU4242node-40, node-41, node-42, node-36, node-3, node-21
node-40US4242node-41, node-39, node-43, node-37, node-4, node-22
node-41AP4242node-39, node-40, node-44, node-38, node-5, node-23
node-42EU4242node-43, node-44, node-45, node-39, node-6, node-24
node-43US4242node-44, node-42, node-46, node-40, node-7, node-25
node-44AP4242node-42, node-43, node-47, node-41, node-8, node-26
node-45EU4242node-46, node-47, node-48, node-42, node-9, node-27
node-46US4242node-47, node-45, node-49, node-43, node-10, node-28
node-47AP4242node-45, node-46, node-50, node-44, node-11, node-29
node-48EU4242node-49, node-50, node-0, node-45, node-12, node-30
node-49US4242node-50, node-48, node-1, node-46, node-13, node-31
node-50AP4242node-48, node-49, node-2, node-47, node-14, node-32

Latency

cardano-cli ping round trips over the node-to-node handshake, measured at cluster start by every pool against its producers: 918 samples over 6 region pairs. Milliseconds.

LinknminmedianmeanmaxSDSEMTCP connect
within AP (Sydney)2040.440.620.662.230.2300.0160.25
within EU (Frankfurt)2040.460.900.912.240.3010.0210.49
within US (N. Virginia)2040.450.710.752.110.2160.0150.35
AP ↔ EU102249.61250.45254.21267.686.5510.649253.79
AP ↔ US102203.90211.84211.88219.775.0500.500211.44
EU ↔ US10290.2390.9090.9592.600.4030.04090.50

Not an ICMP ping: cardano-cli ping opens a TCP connection and runs the node-to-node handshake, so each sample is an application-level round trip through both nodes' network stacks and mux, which is what the Cardano protocols actually experience. The TCP connect column is the bare TCP round trip from the same tool, the closest stand-in for a raw ping. SEM = SD / sqrt(n). The spread is 406x, from 0.62 ms within AP to 250.45 ms between AP and EU, and it is the floor under every interval in this report.

tx-centrifuge

The load generator, a closed-loop driver. A workload is a self-contained circuit: its own disjoint partition of funds, single-use UTxOs, its own builder turning funds into transactions, its own token-bucket rate limit, its own injection targets and its own observer following the chain. Every transaction spends funds and creates outputs, and an output becomes spendable again only once that workload's observer has seen its transaction reach the confirmation depth, so the transactions form chains gated by the chain itself and the funds budget is the buffer bridging confirmation latency. With on_exhaustion = error the generator fails the run the moment a node asks for transactions and it has none to hand over, whatever left it empty: too small an initial budget, funds not coming back from confirmation, a builder that cannot keep pace, or simply a target pulling faster than the loop can refill. It is one guard against the whole class of not keeping up, and it is loud rather than a quiet slowdown.

The generator runs on its own machine in eu-central-1, which forges nothing, so every transaction crosses the network before the pool that must place it in a block ever sees it: the round trip a workload pays is the EU row for its target's region in the table above. Each workload holds two buffers of its own, funds waiting to be built and built transactions waiting to be delivered.

1. Forging, generated load

1.1. Totals

Every EB forging found, nothing filtered. A block that lost its height battle, that was rolled away from, or that no other node ever adopted still counts.

3,056RBs forged
3,029includes EB hash
99.1%of all RBs
27no EB hash
3,027distinct EB hashes
2repeated EBs forged

By region

regionRBs forgedshare of all RBsincludes EB hashof its own RBs
AP1,00332.8%99499.1%
EU1,00032.7%99199.1%
US1,05334.5%1,04499.1%

Endorser block contents

What an endorser block holds. An endorser block is a list of (tx hash, size) references and nothing else, so its size is that list's size.

meanminp50p90maxsd
EB size (bytes)98,50238,07698,90498,90498,9043,191
EB full, of the 100,000 B reference cap98.5%38.1%98.9%98.9%98.9%3.2%
tx references per EB2,6621,0292,6732,6732,67386
bytes per reference37.0037.0037.0037.0037.000.00
derived closure bytes, references × 374 B995,640384,846999,702999,702999,70232,258
derived closure full, of the 1,000,000 B transaction cap99.6%38.5%100.0%100.0%100.0%3.2%

The transaction closure is what binds this run. Its transactions are 374 B each, so its largest endorser block holds 2,673 of them: 98,904 B of references against the 100,000 B cap (98.9%), and 999,702 B of transactions against the 1,000,000 B the closure allows (100.0%). The one that reaches 100% is the one that stopped the endorser block from growing.

The other run of this pair, 2026-11-06-20-39-a0c13-w45notxsub-value-leios-workload-all-n2n-100k1m-2i2o2w-nomadperf-dira-nom, is the control for exactly this: its transactions are 374 B, its largest endorser block holds 2,673 references for 98,904 B (98.9% of the reference cap), and their closure is 999,702 B (100.0% of the closure cap). With 374 B transactions the closure fills first, with 374 B transactions the closure does, off the same two caps. So the same cap binds in both, and the transaction size did not move it.

1.2. Start Leadership Check

A slot's start is fixed by the protocol, the system start plus the slot length, and everything here is measured against it. A node traces every slot it enters, so a slot with no trace is one it never entered, and each node is counted over its own window, from the first slot it entered to its last.

Forging in the slot

One value per block, from the start of its own slot to its forging: every ranking block in the first row, every forging that carries an endorser block in the second, so a hash forged twice counts twice. Section 6 measures that second stage again from the same origin but counts each hash once, at its first forging, which is why its samples are fewer.

samplesmeanminp50p75p90p99p99.9maxsd
slot start to the ranking block forged3,05650 ms1 ms30 ms34 ms40 ms548 ms2.75 s3.02 s160 ms
slot start to the EB forged, every forging3,02937 ms2 ms18 ms21 ms25 ms539 ms2.74 s3.01 s155 ms

Per node

Every row holds one value per node, counted over that node's own window, so the samples are nodes and the spread is across the cluster rather than over time.

samplesmeanminp50p75p90p99p99.9maxsd
slots in its own window5158679.658,66658,68058,68158,68158,68158,68158,6812.5
slots it entered5158570.858,14058,58058,58658,59058,59658,59658,59661.6
slots it missed51108.8859810711352652652659.7
missed per 1,000 slots511.91.41.71.81.99.09.09.01.0

By region

regionnodesslots it missedmissed per 1,000 slotsmedian entry, median node
AP172,2262.21 ms
EU171,6811.71 ms
US171,6421.61 ms

1.3. Timeseries

The load as it ran, per minute: the generator's own side first, then what the nodes' mempools did with it. Every row is split, the first hour on the left and the rest of the run on the right, each half on the scale its own window needs. A region's band runs from the lowest of its 17 nodes to the highest, the line inside it is their mean and the dashed line the mean over all 51. Hover a row for the values at that minute.

Workload, tx-centrifuge

The generator's own traces: the closed loop of funds, what it delivered, how fast, and what each target asked for and did not get.

USEUAP050k100k150k(first 60 min)060050k100k150k246810121416 hCirculating fundsGeneratd UTxO sent minus recycled UTxO: the closed loop's stock, one series for the run, not one per node.01 MB2 MB3 MB4 MB(first 60 min)060010 MB20 MB30 MB40 MB50 MB246810121416 hDelivered bytesCumulative bytes each target was sent, so the slope is the delivery speed.00.50 KB/s1 KB/s1.50 KB/s(first 60 min)06000.20 KB/s0.40 KB/s0.60 KB/s0.80 KB/s1 KB/s1.20 KB/s246810121416 hMean delivery speedBytes delivered over time elapsed since that target's first delivery, a running mean rather than a rate per minute.01k2k3k4k(first 60 min)06001k2k3k4k246810121416 hUnserved demandCumulative transaction ids a target asked for and was not sent: what the pull side still wants.

Node mempool

The nodes' own traces: what each mempool held, how fast transactions entered and left it, and what it turned away.

USEUAP00.50 MB1 MB1.50 MB2 MB2.50 MB(first 60 min)06000.50 MB1 MB1.50 MB2 MB2.50 MB246810121416 hMempool sizeBytes held in each node's mempool.010 KB/s20 KB/s30 KB/s40 KB/s(first 60 min)06001 KB/s2 KB/s3 KB/s4 KB/s246810121416 hMean ingress speedA running mean of the bytes entering each mempool.02.50 KB/s5 KB/s7.50 KB/s10 KB/s12.5 KB/s(first 60 min)06000.50 KB/s1 KB/s1.50 KB/s2 KB/s2.50 KB/s246810121416 hMean egress speedA running mean of the bytes leaving each mempool, by block or by timeout.00.20k0.40k0.60k0.80k1k1.20k(first 60 min)06005k10k15k20k246810121416 hRejected transactionsCumulative transactions each node's mempool refused.

2. Propagation, fetching the EB references

Three instants are used:

Where an endorser block's hash was forged more than once, and so referenced by more than one ranking block, the first forging is the one used and the later ones are ignored: the instants this section reads are the first for that hash and node, so they belong to the first forging.

2.1. Announcing

The forger alone: from forging the endorser block to sending its first announcement of it.

samplesmeanminp50p75p90p99p99.9maxsd
Forger: forged to its first announcement3,02716 ms4 ms13 ms16 ms19 ms38 ms68 ms2.37 s51 ms

2.2. Fetching

From the forger's first announcement of the endorser block to that endorser block first arriving at a peer. Repeated deliveries of the same endorser block are counted under Activity, never timed here.

samplesmeanminp50p75p90p99p99.9maxsd
announced, to the EB arriving at a node151,3311.22 s10 ms1.10 s1.57 s1.76 s2.65 s3.96 s390.14 s2.28 s

By region

samplesmeanminp50p75p90p99p99.9maxsd
Only peers in AP50,4481.37 s10 ms1.34 s1.66 s1.88 s2.68 s4.15 s390.14 s3.88 s
Only peers in EU50,4681.16 s10 ms1.10 s1.51 s1.71 s2.65 s3.74 s6.88 s498 ms
Only peers in US50,4151.13 s10 ms1.06 s1.51 s1.69 s2.57 s3.89 s9.43 s500 ms
forger down / peer across (mean)APEUUS
AP937 ms1.56 s1.47 s
EU1.63 s861 ms1.10 s
US1.51 s1.05 s813 ms

Spread over the entire cluster

One value per endorser block: the delay by which that share of the other nodes had first received it, measured from the forger's first announcement as above. The 100% row holds each endorser block's slowest node, so it sits above the table of every node and endorser block.

meanminp50p75p90p99p99.9maxsd
to 30% of its peers985 ms544 ms1.03 s1.08 s1.52 s1.58 s3.20 s3.99 s310 ms
to 50% of its peers1.19 s632 ms1.10 s1.51 s1.64 s2.00 s3.54 s4.29 s342 ms
to 75% of its peers1.48 s720 ms1.62 s1.67 s1.76 s2.27 s3.67 s4.58 s351 ms
to 90% of its peers1.66 s779 ms1.69 s1.92 s2.19 s2.68 s4.44 s6.96 s447 ms
to 100% of its peers2.97 s852 ms2.07 s2.40 s3.07 s4.59 s323.34 s390.14 s15.66 s

2.3. Activity

The same events counted instead of timed, and counted per peer and endorser block: for one endorser block, how many announcements that peer sent out, and how many times it fetched the endorser block. Anything above one is a repeat the protocol paid for. The two announcement figures below count every node, each forger's own sends included; the regional table counts the receiving peers only, which is why its rows add to one node less.

306.1announcements per EB, every node, the forger too
6.00announcements per EB, per node
90.5fetches per EB, all peers
1.81fetches per EB, per peer

Times a node fetched the same endorser block

Inbound: the node pulling the endorser block from a peer. One means it fetched it once, more than one means it fetched the same endorser block again.

times it fetched itcasesshare of cases
never70.0%
1 time86,13956.9%
2 times30,22820.0%
3 times19,67513.0%
4 times or more15,28910.1%

By region

regioncasesannouncements sentper casefetchesper caserepeats
AP50,455302,7466.00110,0472.1854.2%
EU50,468302,9876.0082,4381.6338.8%
US50,415302,6686.0081,3681.6138.0%

3. Acquiring, the EB written down

A delivered endorser block is not yet held: until its write is durable the body still reads as not-held, which is why the same endorser block can be fetched again meanwhile. Consensus.LeiosKernel.BlockAcquired is the moment that ends: the node has the reference list stored and claims to hold it, registering which referenced transactions it still needs. This is the step from arrival to that claim, which includes waiting for the single writer, and how often the same endorser block was stored again.

3.1. Writing

samplesmeanminp50p75p90p99p99.9maxsd
the EB arriving, to the node writing it151,33141 ms5 ms36 ms44 ms54 ms97 ms223 ms140.24 s364 ms

By region

samplesmeanminp50p75p90p99p99.9maxsd
Only peers in AP50,44845 ms5 ms37 ms46 ms57 ms101 ms240 ms140.24 s627 ms
Only peers in EU50,46839 ms7 ms35 ms42 ms52 ms95 ms225 ms2.47 s51 ms
Only peers in US50,41540 ms8 ms36 ms44 ms54 ms96 ms199 ms2.34 s50 ms
forger down / peer across (mean)APEUUS
AP54 ms41 ms40 ms
EU40 ms39 ms37 ms
US41 ms37 ms42 ms

Spread over the entire cluster

One value per endorser block: the delay by which that share of the other nodes had first stored it, each measured from that node's own fetch of the endorser block. The 100% row holds each endorser block's slowest node, so it sits above the table of every node and endorser block.

meanminp50p75p90p99p99.9maxsd
to 30% of its peers32 ms9 ms31 ms35 ms38 ms47 ms64 ms78 ms6 ms
to 50% of its peers36 ms9 ms36 ms40 ms44 ms57 ms80 ms97 ms7 ms
to 75% of its peers44 ms10 ms43 ms48 ms55 ms89 ms118 ms156 ms11 ms
to 90% of its peers53 ms11 ms49 ms56 ms74 ms107 ms166 ms233 ms16 ms
to 100% of its peers185 ms22 ms66 ms88 ms135 ms2.10 s2.47 s140.24 s2.57 s

3.2. Activity

Counted per peer and endorser block, like section 2: how many times a peer wrote the same endorser block down. This one is local, nothing crosses the network.

63.8writes per EB, all peers
1.28writes per EB, per peer

Times a node wrote the same endorser block

times it was writtencasesshare of cases
never70.0%
1 time120,88879.9%
2 times20,47813.5%
3 times8,5775.7%
4 times or more1,3880.9%

By region

regioncaseswritesper case
AP50,45565,9251.31
EU50,46863,6711.26
US50,41563,5601.26

4. Closures, the transactions an EB references

An endorser block is a list of references. The transactions themselves are a separate transfer, and a node has the closure once it holds all of them: Consensus.LeiosKernel.BlockTxsAcquired. Counted per peer and endorser block, on the same endorser blocks as sections 2 and 3.

4.1. Obtaining

samplesmeanminp50p75p90p99p99.9maxsd
EB fetched to the closure obtained151,330833 ms12 ms731 ms1.11 s1.41 s2.15 s3.47 s228.67 s745 ms

A voter has until 7 s after the announcing block's slot onset to hold and validate the transactions: lHdrWait 3 s then lVoteWindow 4 s, both fixed in LeiosVoting.hs rather than read from genesis. 70 of 151,330 closures were obtained later than that, counted from that slot's own start.

By region

samplesmeanminp50p75p90p99p99.9maxsd
Only peers in AP50,447835 ms19 ms802 ms1.20 s1.53 s2.27 s3.66 s228.67 s1.16 s
Only peers in EU50,468864 ms19 ms731 ms1.08 s1.36 s2.06 s3.32 s7.11 s393 ms
Only peers in US50,415801 ms12 ms651 ms1.05 s1.29 s2.07 s3.33 s5.79 s415 ms
forger down / peer across (mean)APEUUS
AP271 ms946 ms835 ms
EU1.24 s783 ms1.00 s
US952 ms857 ms562 ms

Spread over the entire cluster

One value per endorser block: the delay by which that share of the other nodes had first obtained the closure, each measured from that node's own fetch of the endorser block. The 100% row holds each endorser block's slowest node, so it sits above the table of every node and endorser block.

meanminp50p75p90p99p99.9maxsd
to 30% of its peers589 ms16 ms555 ms667 ms918 ms1.25 s2.64 s3.22 s256 ms
to 50% of its peers839 ms42 ms784 ms1.05 s1.18 s1.55 s2.84 s3.45 s288 ms
to 75% of its peers1.05 s52 ms1.06 s1.26 s1.51 s1.78 s3.47 s4.24 s352 ms
to 90% of its peers1.21 s59 ms1.19 s1.53 s1.70 s2.18 s4.03 s5.53 s436 ms
to 100% of its peers1.77 s83 ms1.65 s2.12 s2.57 s3.79 s6.38 s228.67 s4.19 s

4.2. Activity

50.0closures per EB, all peers
1.00closures per EB, per peer
0obtained more than once
8never obtained

Times a node obtained the same closure

times it obtained itcasesshare of cases
never80.0%
1 time151,330100.0%
2 times00.0%
3 times00.0%
4 times or more00.0%

By region

regioncasesclosures obtainedper case
AP50,45550,4471.00
EU50,46850,4681.00
US50,41550,4151.00

4.3. Body hits

When a node takes an endorser block it checks the transactions it names against its own mempool, and the kernel reports what it found (Consensus.LeiosKernel.BodyHits): one case per peer and endorser block, 154,358 of them over 3,027 endorser blocks.

Both rows are the same division: transactions the node had, over transactions the block names. For several cases together, add the tops, add the bottoms, divide once.

Do not add the two rows. Held in the mempool plus fetched is already all of them, in every one of the 154,358 cases, so the cache row counts transactions the mempool already had.

samplesmeanminp50p75p90p99p99.9maxsd
tracked in the cache154,35848.8%0.0%46.2%72.7%86.8%96.6%100.0%100.0%26.9%
held in the mempool154,35828.1%0.0%15.2%35.7%92.7%100.0%100.0%100.0%31.5%

One case is one peer and one endorser block, and the share is against that block's own reference list, 2,673 references at the median.

By region

region of the checking nodetracked in the cacheheld in the mempool
AP48.8%40.1%
EU48.8%12.9%
US48.8%31.3%

Forger region against peer region tracked in the cache / held in the mempool

forger down / peer acrossAPEUUS
AP56.7% / 90.1%56.8% / 8.8%56.8% / 17.0%
EU38.5% / 9.9%38.5% / 21.3%38.5% / 10.9%
US50.9% / 21.2%51.0% / 8.8%50.9% / 64.3%

Each cell is for endorser blocks forged in the row's region and checked by a node in the column's, so the diagonal is same-region. Both shares are totals over totals, every case of that pair pooled, not a mean of the cases.

Timeseries

The same shortfall over the run, per minute. The first chart is one dot per endorser block, the share of what it named that its peers were missing. The other three take the peers of one region and split that share by the forger's region: each line is that minute's cases pooled and the band runs from the lowest of the seventeen peers to the highest. Hover a row for the values at that minute.

USEUAP0%25%50%75%100%(first 60 min)0600%25%50%75%100%246810121416 hwhole run 71.9%Closure missing, per EBOne dot per endorser block: the transactions its peers were missing over all the ones they needed0%25%50%75%100%(first 60 min)0600%25%50%75%100%246810121416 hClosure missing, per peer EUPeers in Frankfurt: the share they were missing that minute, by the forger's region0%25%50%75%100%(first 60 min)0600%25%50%75%100%246810121416 hClosure missing, per peer USPeers in N. Virginia: the share they were missing that minute, by the forger's region0%25%50%75%100%(first 60 min)0600%25%50%75%100%246810121416 hClosure missing, per peer APPeers in Sydney: the share they were missing that minute, by the forger's region

5. Certifying

5.1. Totals

Counted on the blocks the whole cluster took. A block qualifies when all 50 nodes other than its forger adopted it, every peer it has of the 51 in the cluster: 2,938 of the run's 3,056 walkable blocks. Both sides of the ratio are held to it, so an announcement made by a block only part of the cluster held, and a certificate carried by one, are both out. No battle or fork filter is applied: nothing here asks what happened at a contested height. The blocks come from every forging the logs can place on a chain, both sides of a fork included, and the test above is adoption by every peer, not having won the height.

2,909EBs announced
1,424certificate carried
49.0%of announcements
1,485never carried

By region

region of the announcerEBs announcedcertifiedshare
AP94945547.9%
EU95847049.1%
US1,00249949.8%

5.2. What happened to every endorser block

Hover a stage for what it counts and which trace says so. The stages down to Never reached quorum count endorser blocks; the rows under it count voter decisions, one per trace event, which is why they sum past 100%. Nothing is gated here, not even the run's opening epochs: every endorser block any ranking block announced is counted, which is why this table is wider than the cards above. 118 endorser blocks were announced only by blocks that part of the cluster never adopted, and the two carried counts differ by 10, certificates whose carrier was not adopted by every peer. tooLate is the voter's own refusal, counted once per voter and endorser block and only on the ones that never reached quorum: a node logs it when the window had already shut before it began, whether or not it ever held the transactions, so it is not section 4's late closures.

stagecount% of announced% of its groupgroupvotes received
Endorser blocks announced3,027100.0%···
    A voting window opened3,027100.0%···
Reached quorum2,65587.7%··39–51 of 51, median 51
    Certificate carried by a later block1,43447.4%54.0%reached quorum·
    Quorum reached, never carried1,22140.3%46.0%reached quorum·
Never reached quorum37212.3%··0–38 of 51, median 0
    voters declined: chainTipDoesNotAnnounce17,158·90.5%no-quorum voters·
    voters declined: tooLate104·0.5%no-quorum voters·
    voters voted for it anyway1,706·9.0%no-quorum voters·

6. Against the slot clock

6.1. RBs

Every ranking block against every peer that adopted it: from the block's slot start to that peer's own adoption, one value per pair. Nothing here is a per-block figure, so a block the whole cluster took contributes as many values as it had peers.

Adoptions

samplesmeanminp50p75p90p99p99.9maxsd
all blocks150,200651 ms6 ms545 ms768 ms1.07 s2.29 s6.00 s389.67 s1.61 s
blocks carrying a certificate72,775571 ms174 ms511 ms701 ms747 ms1.21 s3.05 s389.67 s1.87 s
blocks carrying none77,425726 ms6 ms586 ms1.00 s1.17 s2.83 s6.46 s325.01 s1.32 s

Left out: 960 block and peer pairs the block never reached, and 1,640 with no adoption instant.

Spread over the entire cluster

One value per ranking block: the delay by which that share of its own peers had adopted it, from the block's slot start. One table per population, named in its first column.

all blocksmeanminp50p75p90p99p99.9maxsd
to 30% of its peers390 ms17 ms357 ms396 ms616 ms1.54 s5.51 s5.96 s359 ms
to 50% of its peers651 ms151 ms518 ms693 ms954 ms1.79 s5.80 s6.10 s377 ms
to 75% of its peers861 ms166 ms739 ms1.03 s1.11 s1.98 s6.39 s6.82 s401 ms
to 90% of its peers910 ms180 ms766 ms1.07 s1.19 s2.41 s7.03 s7.71 s457 ms
to 100% of its peers1.57 s182 ms913 ms1.14 s2.38 s4.35 s36.92 s389.67 s10.84 s
blocks carrying a certificatemeanminp50p75p90p99p99.9maxsd
to 30% of its peers393 ms248 ms377 ms396 ms416 ms730 ms2.69 s2.77 s150 ms
to 50% of its peers560 ms321 ms501 ms659 ms689 ms960 ms2.81 s3.27 s177 ms
to 75% of its peers712 ms337 ms708 ms734 ms749 ms1.15 s3.05 s3.51 s166 ms
to 90% of its peers742 ms349 ms729 ms756 ms776 ms1.35 s3.07 s3.57 s187 ms
to 100% of its peers1.47 s361 ms764 ms803 ms2.21 s3.12 s312.13 s389.67 s12.98 s
blocks carrying nonemeanminp50p75p90p99p99.9maxsd
to 30% of its peers387 ms17 ms217 ms363 ms862 ms2.14 s5.56 s5.96 s478 ms
to 50% of its peers736 ms151 ms536 ms932 ms1.12 s2.34 s6.08 s6.10 s482 ms
to 75% of its peers1.00 s166 ms1.02 s1.08 s1.34 s3.01 s6.44 s6.82 s495 ms
to 90% of its peers1.07 s180 ms1.06 s1.11 s1.47 s3.20 s7.65 s7.71 s566 ms
to 100% of its peers1.66 s182 ms1.10 s1.51 s2.54 s5.37 s36.92 s325.01 s8.34 s

6.2. EBs

The same stages as the sections above, each from the start of the slot the endorser block belongs to instead of from the stage before it, so they read against each other and against the protocol's windows. A slot is 1.00 s.

A row naming each peer holds one value per peer and endorser block, never the first peer alone; one naming the last peer holds one per endorser block, that block's slowest. Every endorser block the run forged is in, counted once.

samplesmeanminp50p75p90p99p99.9maxsd
to the endorser block forged3,02737 ms2 ms18 ms21 ms25 ms539 ms2.74 s3.01 s155 ms
to the forger's announcement3,02753 ms6 ms31 ms36 ms44 ms553 ms2.75 s3.02 s163 ms
to each peer's references151,3311.27 s25 ms1.14 s1.64 s1.85 s2.84 s4.30 s390.16 s2.29 s
to the last peer's references3,0273.03 s877 ms2.12 s2.45 s3.15 s4.74 s323.37 s390.16 s15.66 s
to each peer's closure151,3302.11 s63 ms2.04 s2.67 s3.08 s4.09 s5.99 s398.57 s2.54 s
to the last peer's closure3,0274.33 s1.50 s3.44 s3.86 s4.32 s6.57 s327.22 s398.57 s16.95 s

A stage past 1.00 s is a stage the next slot had already begun. 7 of 3,027 endorser blocks were forged past it and 9 announced past it, and 3,022 of them reached their last peer past it. Left out for want of an instant: 7 cases where a peer never fetched the block, 8 where it never held the closure, and 0 blocks the forger never announced.

By region

samplesmeanminp50p75p90p99p99.9maxsd
to each peer's references, only peers in AP50,4481.42 s27 ms1.41 s1.70 s1.96 s3.04 s4.41 s390.16 s3.89 s
to each peer's references, only peers in EU50,4681.21 s25 ms1.13 s1.55 s1.76 s2.84 s4.18 s7.54 s523 ms
to each peer's references, only peers in US50,4151.18 s27 ms1.09 s1.58 s1.74 s2.72 s4.27 s9.53 s523 ms
to each peer's closure, only peers in AP50,4472.26 s63 ms2.27 s2.87 s3.31 s4.35 s6.52 s398.57 s4.27 s
to each peer's closure, only peers in EU50,4682.08 s77 ms1.98 s2.39 s3.01 s4.02 s5.43 s8.78 s691 ms
to each peer's closure, only peers in US50,4151.98 s67 ms1.88 s2.37 s2.87 s3.86 s5.87 s10.32 s719 ms

7. Forks

Every time a node abandoned a chain it already had for a better one, counted once for each node that did it (ChainDB.AddBlockEvent.SwitchedToAFork). A contest is one pair of tips, so a contest the whole cluster lived through counts once. Both rates below are contests per 1,000 blocks on the chain, so runs of different length compare directly.

24.8 expected from activeSlotsCoeff 0.05slot26.2height5.60102030

The slot rate is the control and the height rate is the signal: two leaders in one slot is fixed by activeSlotsCoeff and cannot be engineered away, while a height battle is a node forging on a parent a sibling already had, which is propagation losing a race and is free to move. Reading the height rate without the control beside it cannot tell a propagation regression from a run that simply drew more forks.

7.1. What the nodes paid

52.4switches per node
49 to 58fewest to most, one node
26.2slot battles per 1,000 chain blocks
5.6height battles per 1,000 chain blocks