maxEndorserBlockTxsSize limited · 100.0% full, against 64.3% of maxEndorserBlockReferencesSizemaxEndorserBlockReferencesSize), 260,000 B of transactions (maxEndorserBlockTxsSize)MempoolTimeoutCapacity), 1.0 s soft (MempoolTimeoutSoft), 3.0 s hard (MempoolTimeoutHard)TxSubmissionLogicVersion = TxSubmissionLogicV251 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 exactly 8 link 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
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.
| Node | Region | Out intra | Out inter | In intra | In inter | Producers (outbound) |
|---|---|---|---|---|---|---|
| node-0 | EU | 4 | 2 | 4 | 2 | node-1, node-2, node-3, node-48, node-15, node-33 |
| node-1 | US | 4 | 2 | 4 | 2 | node-2, node-0, node-4, node-49, node-16, node-34 |
| node-2 | AP | 4 | 2 | 4 | 2 | node-0, node-1, node-5, node-50, node-17, node-35 |
| node-3 | EU | 4 | 2 | 4 | 2 | node-4, node-5, node-6, node-0, node-18, node-36 |
| node-4 | US | 4 | 2 | 4 | 2 | node-5, node-3, node-7, node-1, node-19, node-37 |
| node-5 | AP | 4 | 2 | 4 | 2 | node-3, node-4, node-8, node-2, node-20, node-38 |
| node-6 | EU | 4 | 2 | 4 | 2 | node-7, node-8, node-9, node-3, node-21, node-39 |
| node-7 | US | 4 | 2 | 4 | 2 | node-8, node-6, node-10, node-4, node-22, node-40 |
| node-8 | AP | 4 | 2 | 4 | 2 | node-6, node-7, node-11, node-5, node-23, node-41 |
| node-9 | EU | 4 | 2 | 4 | 2 | node-10, node-11, node-12, node-6, node-24, node-42 |
| node-10 | US | 4 | 2 | 4 | 2 | node-11, node-9, node-13, node-7, node-25, node-43 |
| node-11 | AP | 4 | 2 | 4 | 2 | node-9, node-10, node-14, node-8, node-26, node-44 |
| node-12 | EU | 4 | 2 | 4 | 2 | node-13, node-14, node-15, node-9, node-27, node-45 |
| node-13 | US | 4 | 2 | 4 | 2 | node-14, node-12, node-16, node-10, node-28, node-46 |
| node-14 | AP | 4 | 2 | 4 | 2 | node-12, node-13, node-17, node-11, node-29, node-47 |
| node-15 | EU | 4 | 2 | 4 | 2 | node-16, node-17, node-18, node-12, node-30, node-48 |
| node-16 | US | 4 | 2 | 4 | 2 | node-17, node-15, node-19, node-13, node-31, node-49 |
| node-17 | AP | 4 | 2 | 4 | 2 | node-15, node-16, node-20, node-14, node-32, node-50 |
| node-18 | EU | 4 | 2 | 4 | 2 | node-19, node-20, node-21, node-15, node-33, node-0 |
| node-19 | US | 4 | 2 | 4 | 2 | node-20, node-18, node-22, node-16, node-34, node-1 |
| node-20 | AP | 4 | 2 | 4 | 2 | node-18, node-19, node-23, node-17, node-35, node-2 |
| node-21 | EU | 4 | 2 | 4 | 2 | node-22, node-23, node-24, node-18, node-36, node-3 |
| node-22 | US | 4 | 2 | 4 | 2 | node-23, node-21, node-25, node-19, node-37, node-4 |
| node-23 | AP | 4 | 2 | 4 | 2 | node-21, node-22, node-26, node-20, node-38, node-5 |
| node-24 | EU | 4 | 2 | 4 | 2 | node-25, node-26, node-27, node-21, node-39, node-6 |
| node-25 | US | 4 | 2 | 4 | 2 | node-26, node-24, node-28, node-22, node-40, node-7 |
| node-26 | AP | 4 | 2 | 4 | 2 | node-24, node-25, node-29, node-23, node-41, node-8 |
| node-27 | EU | 4 | 2 | 4 | 2 | node-28, node-29, node-30, node-24, node-42, node-9 |
| node-28 | US | 4 | 2 | 4 | 2 | node-29, node-27, node-31, node-25, node-43, node-10 |
| node-29 | AP | 4 | 2 | 4 | 2 | node-27, node-28, node-32, node-26, node-44, node-11 |
| node-30 | EU | 4 | 2 | 4 | 2 | node-31, node-32, node-33, node-27, node-45, node-12 |
| node-31 | US | 4 | 2 | 4 | 2 | node-32, node-30, node-34, node-28, node-46, node-13 |
| node-32 | AP | 4 | 2 | 4 | 2 | node-30, node-31, node-35, node-29, node-47, node-14 |
| node-33 | EU | 4 | 2 | 4 | 2 | node-34, node-35, node-36, node-30, node-48, node-15 |
| node-34 | US | 4 | 2 | 4 | 2 | node-35, node-33, node-37, node-31, node-49, node-16 |
| node-35 | AP | 4 | 2 | 4 | 2 | node-33, node-34, node-38, node-32, node-50, node-17 |
| node-36 | EU | 4 | 2 | 4 | 2 | node-37, node-38, node-39, node-33, node-0, node-18 |
| node-37 | US | 4 | 2 | 4 | 2 | node-38, node-36, node-40, node-34, node-1, node-19 |
| node-38 | AP | 4 | 2 | 4 | 2 | node-36, node-37, node-41, node-35, node-2, node-20 |
| node-39 | EU | 4 | 2 | 4 | 2 | node-40, node-41, node-42, node-36, node-3, node-21 |
| node-40 | US | 4 | 2 | 4 | 2 | node-41, node-39, node-43, node-37, node-4, node-22 |
| node-41 | AP | 4 | 2 | 4 | 2 | node-39, node-40, node-44, node-38, node-5, node-23 |
| node-42 | EU | 4 | 2 | 4 | 2 | node-43, node-44, node-45, node-39, node-6, node-24 |
| node-43 | US | 4 | 2 | 4 | 2 | node-44, node-42, node-46, node-40, node-7, node-25 |
| node-44 | AP | 4 | 2 | 4 | 2 | node-42, node-43, node-47, node-41, node-8, node-26 |
| node-45 | EU | 4 | 2 | 4 | 2 | node-46, node-47, node-48, node-42, node-9, node-27 |
| node-46 | US | 4 | 2 | 4 | 2 | node-47, node-45, node-49, node-43, node-10, node-28 |
| node-47 | AP | 4 | 2 | 4 | 2 | node-45, node-46, node-50, node-44, node-11, node-29 |
| node-48 | EU | 4 | 2 | 4 | 2 | node-49, node-50, node-0, node-45, node-12, node-30 |
| node-49 | US | 4 | 2 | 4 | 2 | node-50, node-48, node-1, node-46, node-13, node-31 |
| node-50 | AP | 4 | 2 | 4 | 2 | node-48, node-49, node-2, node-47, node-14, node-32 |
cardano-cli ping round trips over the node-to-node handshake, measured at cluster start by each pool's healthcheck against its producers: 918 samples over 6 region pairs. Milliseconds.
| Link | n | min | median | mean | max | SD | SEM | TCP connect |
|---|---|---|---|---|---|---|---|---|
| within AP (Sydney) | 204 | 0.37 | 0.51 | 0.54 | 1.87 | 0.150 | 0.011 | 0.25 |
| within EU (Frankfurt) | 204 | 0.40 | 0.65 | 0.74 | 1.80 | 0.271 | 0.019 | 0.46 |
| within US (N. Virginia) | 204 | 0.37 | 0.62 | 0.64 | 1.71 | 0.140 | 0.010 | 0.37 |
| AP ↔ EU | 102 | 284.44 | 288.36 | 290.71 | 299.31 | 5.726 | 0.567 | 290.44 |
| AP ↔ US | 102 | 204.76 | 217.01 | 214.23 | 219.74 | 5.389 | 0.534 | 213.93 |
| EU ↔ US | 102 | 90.18 | 90.76 | 90.87 | 98.24 | 0.789 | 0.078 | 90.53 |
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 568x, from 0.51 ms within AP to 288.36 ms between AP and EU, and it is the floor under every interval in this report.
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, a workload that cannot recycle funds as fast as it spends them runs that buffer to zero and fails the run rather than quietly slowing down.
value, every transaction 2-in 2-out with 2 destination signing key per builder, fee 1,000,000token_bucket, scope per_target, at 0.85 tx/s per target, 43.4 tx/s offered in aggregate (16.25 KB/s at the 374 B measured transaction size)on_confirm at confirmation depth 3, over a nodetonode observergenesis-funds (genesis_utxo_keys), scope per_workload, so a fund returned by a workload can only be taken up by that same workloadon_exhaustion = error · max_batch_size = 0The generator runs on the explorer 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.
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.
| region | RBs forged | share of all RBs | includes EB hash | of its own RBs |
|---|---|---|---|---|
| AP | 1,095 | 33.1% | 1,091 | 99.6% |
| EU | 1,147 | 34.7% | 1,137 | 99.1% |
| US | 1,067 | 32.2% | 1,061 | 99.4% |
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.
| min | p50 | p90 | max | mean | |
|---|---|---|---|---|---|
| EB size (bytes) | 3,702 | 25,718 | 25,718 | 25,718 | 25,674 |
| EB full, of the 40,000 B reference cap | 9.3% | 64.3% | 64.3% | 64.3% | 64.2% |
| tx references per EB | 100 | 695 | 695 | 695 | 693 |
| bytes per reference | 37.00 | 37.00 | 37.00 | 37.02 | 37.00 |
| derived closure bytes, references × 374 B | 37,400 | 259,930 | 259,930 | 259,930 | 259,491 |
| derived closure full, of the 260,000 B transaction cap | 14.4% | 100.0% | 100.0% | 100.0% | 99.8% |
3,279 of 3,289 EB forgings sit exactly at the run's largest EB, 695 references.
The transaction closure is what binds this run. Its transactions are 374 B each, so its largest endorser block holds 695 of them: 25,718 B of references against the 40,000 B cap (64.3%), and 259,930 B of transactions against the 260,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-10-22-23-20-e651d-w42notxsub-value-leios-workload-all-n2n-40k260k-1i1o1w-nomadperf-dira-nom, is the control for exactly this: its transactions are 200 B, its largest endorser block holds 1,110 references for 39,963 B (99.9% of the reference cap), and their closure is 222,000 B (85.4% of the closure cap). With 374 B transactions the closure fills first, with 200 B transactions the reference list does, off the same two caps. So the binding cap moved with the transaction size, and nothing else changed.
Three instants are used:
Consensus.LeiosKernel.BlockForged)LeiosNotify.Remote.Send.BlockAnnouncement)LeiosFetch.Remote.Receive.Block)Endorser blocks whose hash was forged more than once, and so referenced by more than one ranking block, are left out of this section.
The forger alone: from forging the endorser block to sending its first announcement of it.
| samples | min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|---|
| Forger: forged to its first announcement | 3,283 | 1 ms | 3 ms | 4 ms | 7 ms | 11 ms | 16 ms | 26 ms | 4 ms |
From the forger's first announcement of the endorser block to that endorser block first arriving at a peer, one sample per node and endorser block, 164,150 of them. An endorser block is its list of transaction references, and that list is what arrives; the transactions themselves are fetched separately and are not in this section. Repeated deliveries of the same endorser block are counted under Activity, never timed here.
| samples | min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|---|
| announced, to the EB arriving at a node | 164,150 | 11 ms | 1.07 s | 1.39 s | 1.64 s | 2.17 s | 2.83 s | 5.50 s | 1.09 s |
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.
| min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|
| to 30% of its peers | 364 ms | 1.03 s | 1.06 s | 1.13 s | 1.22 s | 1.51 s | 1.95 s | 866 ms |
| to 50% of its peers | 579 ms | 1.07 s | 1.33 s | 1.56 s | 1.58 s | 1.71 s | 2.17 s | 1.09 s |
| to 75% of its peers | 696 ms | 1.26 s | 1.56 s | 1.67 s | 2.01 s | 2.48 s | 2.72 s | 1.33 s |
| to 90% of its peers | 775 ms | 1.42 s | 1.67 s | 1.97 s | 2.18 s | 3.36 s | 3.70 s | 1.47 s |
| to 100% of its peers | 797 ms | 1.62 s | 1.96 s | 2.20 s | 3.12 s | 3.97 s | 5.50 s | 1.71 s |
| samples | min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|---|
| All peers | 164,150 | 11 ms | 1.07 s | 1.39 s | 1.64 s | 2.17 s | 2.83 s | 5.50 s | 1.09 s |
| Peers in AP | 54,722 | 12 ms | 1.13 s | 1.51 s | 1.68 s | 2.19 s | 2.93 s | 5.50 s | 1.18 s |
| Peers in EU | 54,678 | 11 ms | 1.07 s | 1.39 s | 1.64 s | 2.04 s | 2.83 s | 4.34 s | 1.07 s |
| Peers in US | 54,750 | 13 ms | 1.03 s | 1.15 s | 1.57 s | 2.03 s | 2.78 s | 3.85 s | 1.02 s |
The same events counted instead of timed, and counted per node and endorser block: for one endorser block, how many announcements a node sent out, and how many times it fetched the endorser block. Anything above one is a repeat the protocol paid for.
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 it | cases | share of cases |
|---|---|---|
| 1 time | 111,128 | 67.7% |
| 2 times | 27,125 | 16.5% |
| 3 times | 13,361 | 8.1% |
| 4 times or more | 12,536 | 7.6% |
263,423 fetches in all, of which 99,273 brought an endorser block the node already had. The most one node fetched a single endorser block was 7 times.
| region | cases | announcements sent | per case | fetches | per case | repeats |
|---|---|---|---|---|---|---|
| AP | 54,722 | 328,332 | 6.00 | 95,919 | 1.75 | 42.9% |
| EU | 54,678 | 328,068 | 6.00 | 88,473 | 1.62 | 38.2% |
| US | 54,750 | 328,500 | 6.00 | 79,031 | 1.44 | 30.7% |
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.
| samples | min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|---|
| the EB arriving, to the node writing it | 164,150 | 1 ms | 14 ms | 19 ms | 26 ms | 60 ms | 178 ms | 2.35 s | 17 ms |
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.
| min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|
| to 30% of its peers | 2 ms | 11 ms | 14 ms | 17 ms | 22 ms | 40 ms | 43 ms | 12 ms |
| to 50% of its peers | 3 ms | 14 ms | 17 ms | 20 ms | 27 ms | 76 ms | 102 ms | 15 ms |
| to 75% of its peers | 4 ms | 17 ms | 22 ms | 27 ms | 40 ms | 118 ms | 135 ms | 19 ms |
| to 90% of its peers | 6 ms | 21 ms | 28 ms | 36 ms | 76 ms | 180 ms | 235 ms | 24 ms |
| to 100% of its peers | 9 ms | 34 ms | 52 ms | 83 ms | 319 ms | 2.16 s | 2.35 s | 57 ms |
| samples | min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|---|
| All peers | 164,150 | 1 ms | 14 ms | 19 ms | 26 ms | 60 ms | 178 ms | 2.35 s | 17 ms |
| Peers in AP | 54,722 | 1 ms | 14 ms | 19 ms | 25 ms | 56 ms | 162 ms | 2.33 s | 16 ms |
| Peers in EU | 54,678 | 2 ms | 14 ms | 18 ms | 26 ms | 67 ms | 197 ms | 2.14 s | 17 ms |
| Peers in US | 54,750 | 1 ms | 14 ms | 18 ms | 26 ms | 58 ms | 159 ms | 2.35 s | 16 ms |
Counted per node and endorser block, like section 2: how many times a node wrote the same endorser block down. This one is local, nothing crosses the network.
| times it was written | cases | share of cases |
|---|---|---|
| 1 time | 134,192 | 81.7% |
| 2 times | 17,828 | 10.9% |
| 3 times | 9,575 | 5.8% |
| 4 times or more | 2,555 | 1.6% |
208,814 writes in all, of which 44,664 were of an endorser block the node had already written. The most one node wrote a single endorser block was 5 times.
| region | cases | writes | per case |
|---|---|---|---|
| AP | 54,722 | 71,805 | 1.31 |
| EU | 54,678 | 71,289 | 1.30 |
| US | 54,750 | 65,720 | 1.20 |
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 node and endorser block, on the same endorser blocks as sections 2 and 3.
| samples | min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|---|
| EB fetched to the closure obtained | 164,150 | 2 ms | 513 ms | 724 ms | 1.02 s | 1.54 s | 2.64 s | 4.50 s | 603 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. 0 of 164,150 closures were obtained later than that, counted from the endorser block's forging.
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.
| min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|
| to 30% of its peers | 3 ms | 504 ms | 511 ms | 519 ms | 675 ms | 1.04 s | 2.00 s | 405 ms |
| to 50% of its peers | 4 ms | 518 ms | 631 ms | 966 ms | 1.03 s | 1.74 s | 2.59 s | 605 ms |
| to 75% of its peers | 12 ms | 715 ms | 1.01 s | 1.05 s | 1.42 s | 2.87 s | 3.19 s | 770 ms |
| to 90% of its peers | 14 ms | 874 ms | 1.08 s | 1.50 s | 1.56 s | 3.18 s | 3.63 s | 904 ms |
| to 100% of its peers | 22 ms | 1.02 s | 1.52 s | 1.62 s | 2.62 s | 3.77 s | 4.50 s | 1.14 s |
| samples | min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|---|
| All peers | 164,150 | 2 ms | 513 ms | 724 ms | 1.02 s | 1.54 s | 2.64 s | 4.50 s | 603 ms |
| Peers in AP | 54,722 | 2 ms | 513 ms | 809 ms | 1.08 s | 1.57 s | 2.56 s | 4.50 s | 563 ms |
| Peers in EU | 54,678 | 3 ms | 515 ms | 722 ms | 1.02 s | 1.52 s | 2.61 s | 3.86 s | 647 ms |
| Peers in US | 54,750 | 2 ms | 511 ms | 683 ms | 1.01 s | 1.52 s | 2.76 s | 3.75 s | 599 ms |
| times it obtained it | cases | share of cases |
|---|---|---|
| 1 time | 161,483 | 98.4% |
| 2 times | 2,389 | 1.5% |
| 3 times | 264 | 0.2% |
| 4 times or more | 14 | 0.0% |
167,109 closures obtained in all, of which 2,959 were of one the node already had. The most one node obtained a single closure was 4 times.
| region | cases | closures obtained | per case |
|---|---|---|---|
| AP | 54,722 | 57,123 | 1.04 |
| EU | 54,678 | 54,755 | 1.00 |
| US | 54,750 | 55,231 | 1.01 |
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: 3,217 of the run's 3,309 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, and the walk the blocks come from keeps every side of every fork.
| region of the announcer | EBs announced | certified | share |
|---|---|---|---|
| AP | 1,050 | 533 | 50.8% |
| EU | 1,107 | 577 | 52.1% |
| US | 1,037 | 544 | 52.5% |
| stage | count | % of announced | % of its group | group | votes received |
|---|---|---|---|---|---|
| Endorser blocks announced | 3,286 | 100.0% | · | · | · |
| A voting window opened | 3,286 | 100.0% | · | · | · |
| Reached quorum | 2,906 | 88.4% | · | · | 39–51 of 51, median 51 |
| Certificate carried by a later block | 1,655 | 50.4% | 57.0% | reached quorum | · |
| Quorum reached, never carried | 1,251 | 38.1% | 43.0% | reached quorum | · |
| Never reached quorum | 380 | 11.6% | · | · | 0–34 of 51, median 0 |
voters declined: chainTipDoesNotAnnounce | 17,099 | · | 88.2% | no-quorum voters | · |
voters declined: tooLate | 100 | · | 0.5% | no-quorum voters | · |
| voters voted for it anyway | 2,181 | · | 11.3% | no-quorum voters | · |
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, so these counts are wider than section 2's.
The end of the line for an endorser block: a node adopts a ranking block that carries its certificate, and only then are those transactions on that node's chain. Measured from the endorser block's forging, over the 82,600 cases, one node and one endorser block each, where it happened.
| samples | min | p50 | p75 | p90 | p99 | p99.9 | max | mean | |
|---|---|---|---|---|---|---|---|---|---|
| forged, to a node adopting a block that certifies it | 82,600 | 12.46 s | 26.52 s | 40.15 s | 57.25 s | 95.50 s | 157.48 s | 196.57 s | 32.64 s |
| AP | 27,552 | 12.90 s | 26.63 s | 40.18 s | 57.14 s | 95.56 s | 157.16 s | 196.12 s | 32.70 s |
| EU | 27,508 | 12.46 s | 26.37 s | 40.14 s | 57.18 s | 95.38 s | 157.61 s | 196.57 s | 32.62 s |
| US | 27,540 | 12.60 s | 26.40 s | 40.14 s | 57.26 s | 95.24 s | 157.49 s | 196.46 s | 32.59 s |
Every switch a node made off a chain it already had, one row per node and switch (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.
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.