QNS Tests

Real network measurements: throughput with post-quantum signatures, node sync from scratch, network between nodes, RPC response, neural controller, block timing, disk. For every test — what we did, what we got and the real log.

Measured 13–14 September 2026

Download PDF (EN)Скачать PDF (RU)Raw logs (ZIP)

Key numbers

MetricValueNote
Peak TPS with post-quantum signatures (Ed25519 + Dilithium3)14,469 TPStest bench 14 Sep, 43,408 tx block
Peak TPS on the live testnet (13 Sep)14,151 TPS42,452 tx block
Sustained throughput (13 Sep)~10,000 TPS200,000 tx in 20.0 s
Peak TPS without Dilithium (Ed25519 only)38,310 TPS114,929 tx block
New node sync from scratch~1 sto height 919,626 via state snapshot
PC node lag behind production0 blocks20 samples over a minute
RPC response over the internet0.05–0.16 slocally 0.00–0.06 s
Lost transactions and consensus failures0in all runs (13 Sep: 1,280,000 tx)
Transaction size in the mempool3,509 Bpost-quantum; plain — 230 B
Production node disk17 GBfor 919,000 blocks, with pruning

1. TPS with post-quantum signatures (Ed25519 + Dilithium3)

What we did

Every QNS transaction carries two signatures at once: a classical Ed25519 one and a post-quantum Dilithium3 one. Every validator verifies both signatures on every transaction — nothing is accepted "on trust".

The tps_load client pre-signs tens of thousands of transfers and sends them in batches over JSON-RPC (256 connections, batch size 128). We then look at how many transactions the node accepted into the mempool, how many blocks it took to include them, how many fit into the largest block and what that means per second (TPS = transactions in a block ÷ 3 s, the block slot).

Runs on 14 Sep were made on a production replica (same server, 15 validators, copy of the live chain at height ~896,000, binary be3406e). Runs on 13 Sep were made on the live testnet before the public-key registry was enabled (a transaction weighed 5,501 B back then).

What we got

14,469
peak TPS, bench 14 Sep
14,151
peak TPS, live testnet 13 Sep
~10,000
sustained: 200,000 tx in 20 s
0
losses and consensus failures

Bench 14 Sep (key registry on, 3,509 B per transaction)

RunAccepted txBlocks (tx)Peak TPSAvg TPSMempool intakePeak CPU
01-20k (2 000 × 10)20 0001 428 / 14 285 / 4 2874 7622 22236 292 tx/с5,1 ядра
02-60k (2 058 × 10)20 58020 5806 8606 86033 971 tx/с5,9 ядра
03-200k (2 058 × 20)41 16041 16013 72013 72036 437 tx/с9,7 ядра
04-120k (2 058 × 60)123 4801 428 / 14 285 / 43 408 / 42 701 / 21 65814 4698 23227 088 tx/с15,7 ядра

Live testnet 13 Sep (before key registry, 5,501 B per transaction)

RunAccepted txMempool intakeBlocks with txPeak per blockPeak TPSNote
01-20k20,00037,474 tx/s120,0006,667spike, not counted in totals
02-60k60,00029,499 tx/s241,22913,743
03-200k200,00030,800 tx/s742,45214,151200,000 tx in 20 s ≈ 10,000 TPS sustained
04-400k400,00018,542 tx/s2037,56712,522
05-200k-control200,00031,225 tx/s590,12330,041*first block had no time budget (~9 s)
06-400k-sustained400,00037,121 tx/s1537,39012,4630 EQUIVOCATION, ~7,570 TPS sustained

* The 90,123 tx block on 13 Sep was built right after a node restart, before the time budget was measured, and took ~9 s to process — that is not a fair "3-second" TPS, so 14,151 is taken as the peak.

The first blocks of each series hold exactly 1,428 tx: the base block gas limit is 30,000,000 (21,000 per transfer). The neural controller sees the load and raises the limit in the next blocks, up to 3,000,000,000.

On the 14 Sep bench the faucet managed to fund only 2,058 of 20,000 wallets, so the 60k and 200k series accepted 20,580 and 41,160 transactions (2,058 senders × 10 and × 20). Run 04-120k was built specifically on those 2,058 wallets (× 60) and gave the 14,469 TPS peak.

Mempool intake of 27,000–36,400 tx/s is the rate at which the node verifies both signatures and accepts a transaction over RPC.

Log

Funding wallets from the faucet (14 Sep)2026-09-14/dilithium/00-fund.txt
== пополнение краном 20000 кошельков Dilithium 14:08:20
кран: пополнено 2058 из 20000 за 71 с
Run 01-20k (14 Sep)2026-09-14/dilithium/01-20k.txt
=== Прогон 01-20k: 2000 отправителей × 10 транзакций = 20000 ===
Начало: 2026-09-14 18:09:52 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdac43"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":4844530476,"enabled":true,"head":896067,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":832000}}
База на диске до: 18G
отправителей 2000, по 10, соединений 256, пачка 128
подписано 20000 за 1.093084053s (24 потоков)
отправлено за 0.55 с → приём 36292 tx/с; принято 20000, ошибок 0
в блоках 20000 из 20000
пик 14285 в блоке → 4762 TPS; в среднем 2222 TPS за 3 блоков по 3 с
по блокам: [1428, 14285, 4287]
Конец: 2026-09-14 18:10:09 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdac49"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":4909364948,"enabled":true,"head":896073,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":844000}}
База на диске после: 18G
Пик мемпула: "transactions":20000
Размер транзакции в мемпуле: "avgTxBytes":5501
EQUIVOCATION за прогон: 0
Пиковая загрузка узла: 18:09:58 узел 505% ядра
01-20k — CPU load2026-09-14/dilithium/01-20k-cpu.txt
18:09:54 узел 46% ядра
18:09:56 узел 74% ядра
18:09:58 узел 505% ядра
18:10:00 узел 89% ядра
18:10:02 узел 160% ядра
18:10:04 узел 105% ядра
18:10:06 узел 56% ядра
01-20k — mempool per second2026-09-14/dilithium/01-20k-mempool.txt
18:09:52.407 h=0xdac43 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:09:53.425 h=0xdac44 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:09:54.445 h=0xdac44 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:09:55.464 h=0xdac44 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:09:56.487 h=0xdac45 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:09:57.527 h=0xdac45 "avgTxBytes":5501 "memoryBytes":97125656 "transactions":17656 
18:09:58.744 h=0xdac45 "avgTxBytes":5501 "memoryBytes":110020000 "transactions":20000 
18:09:59.764 h=0xdac46 "avgTxBytes":5501 "memoryBytes":102164572 "transactions":18572 
18:10:00.786 h=0xdac46 "avgTxBytes":5501 "memoryBytes":102164572 "transactions":18572 
18:10:01.805 h=0xdac46 "avgTxBytes":5501 "memoryBytes":102164572 "transactions":18572 
18:10:02.828 h=0xdac46 "avgTxBytes":5501 "memoryBytes":102164572 "transactions":18572 
18:10:03.849 h=0xdac47 "avgTxBytes":5501 "memoryBytes":23582787 "transactions":4287 
18:10:04.869 h=0xdac47 "avgTxBytes":5501 "memoryBytes":23582787 "transactions":4287 
18:10:05.889 h=0xdac48 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
Run 02-60k (14 Sep)2026-09-14/dilithium/02-60k.txt
=== Прогон 02-60k: 6000 отправителей × 10 транзакций = 60000 ===
Начало: 2026-09-14 18:10:14 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdac4b"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":4960745172,"enabled":true,"head":896075,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":848000}}
База на диске до: 18G
отправителей 2058, по 10, соединений 256, пачка 128
подписано 20580 за 1.286475785s (24 потоков)
отправлено за 0.61 с → приём 33971 tx/с; принято 20580, ошибок 0
в блоках 20580 из 20580
пик 20580 в блоке → 6860 TPS; в среднем 6860 TPS за 1 блоков по 3 с
по блокам: [20580]
Конец: 2026-09-14 18:10:24 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdac4e"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":5132696780,"enabled":true,"head":896078,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":854000}}
База на диске после: 18G
Пик мемпула: "transactions":18158
Размер транзакции в мемпуле: "avgTxBytes":3571
EQUIVOCATION за прогон: 0
Пиковая загрузка узла: 18:10:20 узел 591% ядра
02-60k — CPU2026-09-14/dilithium/02-60k-cpu.txt
18:10:16 узел 29% ядра
18:10:18 узел 66% ядра
18:10:20 узел 591% ядра
18:10:22 узел 74% ядра
02-60k — mempool2026-09-14/dilithium/02-60k-mempool.txt
18:10:14.479 h=0xdac4b "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:15.498 h=0xdac4b "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:16.517 h=0xdac4b "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:17.540 h=0xdac4c "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:18.561 h=0xdac4c "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:19.615 h=0xdac4c "avgTxBytes":3571 "memoryBytes":64855846 "transactions":18158 
18:10:20.866 h=0xdac4d "avgTxBytes":0 "memoryBytes":0 "transactions":0 
Run 03-200k (14 Sep)2026-09-14/dilithium/03-200k.txt
=== Прогон 03-200k: 10000 отправителей × 20 транзакций = 200000 ===
Начало: 2026-09-14 18:10:29 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdac50"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":5176992739,"enabled":true,"head":896080,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":858000}}
База на диске до: 18G
отправителей 2058, по 20, соединений 256, пачка 128
подписано 41160 за 2.316816256s (24 потоков)
отправлено за 1.13 с → приём 36437 tx/с; принято 41160, ошибок 0
в блоках 41160 из 41160
пик 41160 в блоке → 13720 TPS; в среднем 13720 TPS за 1 блоков по 3 с
по блокам: [41160]
Конец: 2026-09-14 18:10:44 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdac55"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":5167413719,"enabled":true,"head":896085,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":866000}}
База на диске после: 18G
Пик мемпула: "transactions":41160
Размер транзакции в мемпуле: "avgTxBytes":3509
EQUIVOCATION за прогон: 0
Пиковая загрузка узла: 18:10:37 узел 974% ядра
03-200k — CPU2026-09-14/dilithium/03-200k-cpu.txt
18:10:31 узел 127% ядра
18:10:33 узел 119% ядра
18:10:35 узел 49% ядра
18:10:37 узел 974% ядра
18:10:39 узел 251% ядра
18:10:41 узел 110% ядра
03-200k — mempool2026-09-14/dilithium/03-200k-mempool.txt
18:10:29.890 h=0xdac50 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:30.908 h=0xdac50 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:31.926 h=0xdac50 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:32.944 h=0xdac51 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:33.966 h=0xdac51 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:35.035 h=0xdac52 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:10:36.095 h=0xdac52 "avgTxBytes":3509 "memoryBytes":35419846 "transactions":10094 
18:10:37.259 h=0xdac52 "avgTxBytes":3509 "memoryBytes":144430440 "transactions":41160 
18:10:38.281 h=0xdac52 "avgTxBytes":3509 "memoryBytes":144430440 "transactions":41160 
18:10:39.304 h=0xdac52 "avgTxBytes":3509 "memoryBytes":144430440 "transactions":41160 
18:10:40.326 h=0xdac53 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
Run 04-120k (14 Sep) — 14,469 TPS peak2026-09-14/dilithium/04-120k.txt
=== Прогон 04-120k: 2058 отправителей × 60 транзакций = 123480 ===
Начало: 2026-09-14 18:11:19 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdac60"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":5186288087,"enabled":true,"head":896096,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":867296}}
База на диске до: 18G
отправителей 2058, по 60, соединений 256, пачка 128
подписано 123480 за 7.891633573s (24 потоков)
отправлено за 4.56 с → приём 27088 tx/с; принято 123480, ошибок 0
в блоках 123480 из 123480
пик 43408 в блоке → 14469 TPS; в среднем 8232 TPS за 5 блоков по 3 с
по блокам: [1428, 14285, 43408, 42701, 21658]
Конец: 2026-09-14 18:11:49 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdac6a"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":5721168393,"enabled":true,"head":896106,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":867306}}
База на диске после: 18G
Пик мемпула: "transactions":120915
Размер транзакции в мемпуле: "avgTxBytes":3509
EQUIVOCATION за прогон: 0
Пиковая загрузка узла: 18:11:34 узел 1571% ядра
04-120k — CPU2026-09-14/dilithium/04-120k-cpu.txt
18:11:22 узел 33% ядра
18:11:24 узел 59% ядра
18:11:26 узел 11% ядра
18:11:28 узел 2% ядра
18:11:30 узел 14% ядра
18:11:32 узел 404% ядра
18:11:34 узел 1571% ядра
18:11:36 узел 1028% ядра
18:11:38 узел 65% ядра
18:11:40 узел 269% ядра
18:11:42 узел 369% ядра
18:11:44 узел 309% ядра
18:11:46 узел 230% ядра
18:11:48 узел 31% ядра
04-120k — mempool2026-09-14/dilithium/04-120k-mempool.txt
18:11:20.047 h=0xdac61 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:21.068 h=0xdac61 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:22.087 h=0xdac61 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:23.106 h=0xdac62 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:24.128 h=0xdac62 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:25.183 h=0xdac62 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:26.232 h=0xdac63 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:27.284 h=0xdac63 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:28.342 h=0xdac63 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:29.380 h=0xdac64 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:30.400 h=0xdac64 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:31.421 h=0xdac64 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:32.443 h=0xdac65 "avgTxBytes":3509 "memoryBytes":177509783 "transactions":50587 
18:11:34.214 h=0xdac65 "avgTxBytes":3509 "memoryBytes":330386386 "transactions":94154 
18:11:35.546 h=0xdac65 "avgTxBytes":3509 "memoryBytes":424290735 "transactions":120915 
18:11:36.878 h=0xdac66 "avgTxBytes":3509 "memoryBytes":378154403 "transactions":107767 
18:11:37.905 h=0xdac66 "avgTxBytes":3509 "memoryBytes":378154403 "transactions":107767 
18:11:38.931 h=0xdac66 "avgTxBytes":3509 "memoryBytes":378154403 "transactions":107767 
18:11:39.959 h=0xdac66 "avgTxBytes":3509 "memoryBytes":378154403 "transactions":107767 
18:11:40.989 h=0xdac67 "avgTxBytes":3509 "memoryBytes":225835731 "transactions":64359 
18:11:42.019 h=0xdac67 "avgTxBytes":3509 "memoryBytes":225835731 "transactions":64359 
18:11:43.047 h=0xdac68 "avgTxBytes":3509 "memoryBytes":75997922 "transactions":21658 
18:11:44.112 h=0xdac68 "avgTxBytes":3509 "memoryBytes":75997922 "transactions":21658 
18:11:45.412 h=0xdac69 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:11:46.437 h=0xdac69 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
Live testnet 13 Sep — 01-20k2026-09-13/raw/01-20k.txt
=== Прогон 01-20k: 20000 отправителей × 1 транзакций = 20000 ===
Начало: 2026-09-13 21:17:20 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdac3e"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":9457197187,"enabled":true,"head":896062,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":740727}}
База на диске до: 11G
отправителей 20000, по 1, соединений 256, пачка 128
подписано 20000 за 984.736311ms (24 потоков)
отправлено за 0.53 с → приём 37474 tx/с; принято 20000, ошибок 0
в блоках 20000 из 20000
пик 20000 в блоке → 6667 TPS; в среднем 6667 TPS за 1 блоков по 3 с
по блокам: [20000]
Конец: 2026-09-13 21:17:32 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdac42"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":9692925131,"enabled":true,"head":896066,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":748727}}
База на диске после: 12G
Пиковая загрузка узла: 21:17:28 узел 526% ядра
13 Sep 01-20k — CPU2026-09-13/raw/01-20k-cpu.txt
21:17:22 узел 45% ядра
21:17:24 узел 57% ядра
21:17:26 узел 57% ядра
21:17:28 узел 526% ядра
21:17:30 узел 90% ядра
Live testnet 13 Sep — 02-60k2026-09-13/raw/02-60k.txt
=== Прогон 02-60k: 20000 отправителей × 3 транзакций = 60000 ===
Начало: 2026-09-13 21:17:41 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdac45"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":9769471179,"enabled":true,"head":896069,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":754727}}
База на диске до: 12G
отправителей 20000, по 3, соединений 256, пачка 128
подписано 60000 за 2.912143474s (24 потоков)
отправлено за 2.03 с → приём 29499 tx/с; принято 60000, ошибок 0
в блоках 60000 из 60000
пик 41229 в блоке → 13743 TPS; в среднем 10000 TPS за 2 блоков по 3 с
по блокам: [41229, 18771]
Конец: 2026-09-13 21:18:00 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdac4b"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":10012963841,"enabled":true,"head":896075,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":764727}}
База на диске после: 13G
Пиковая загрузка узла: 21:17:51 узел 1454% ядра
13 Sep 02-60k — CPU2026-09-13/raw/02-60k-cpu.txt
21:17:43 узел 41% ядра
21:17:45 узел 73% ядра
21:17:47 узел 45% ядра
21:17:49 узел 56% ядра
21:17:51 узел 1454% ядра
21:17:53 узел 319% ядра
21:17:55 узел 169% ядра
21:17:57 узел 201% ядра
Live testnet 13 Sep — 03-200k (200,000 in 20 s)2026-09-13/raw/03-200k.txt
=== Прогон 03-200k: 20000 отправителей × 10 транзакций = 200000 ===
Начало: 2026-09-13 21:18:08 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdac4e"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":10090558465,"enabled":true,"head":896078,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":770727}}
База на диске до: 13G
отправителей 20000, по 10, соединений 256, пачка 128
подписано 200000 за 9.603757737s (24 потоков)
отправлено за 6.49 с → приём 30800 tx/с; принято 200000, ошибок 0
в блоках 200000 из 200000
пик 42452 в блоке → 14151 TPS; в среднем 9524 TPS за 7 блоков по 3 с
по блокам: [19391, 42452, 34900, 33530, 33721, 34777, 1229]
Конец: 2026-09-13 21:18:49 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdac5b"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":11414785055,"enabled":true,"head":896091,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":796727}}
База на диске после: 15G
Пиковая загрузка узла: 21:18:26 узел 1882% ядра
13 Sep 03-200k — CPU2026-09-13/raw/03-200k-cpu.txt
21:18:10 узел 41% ядра
21:18:12 узел 72% ядра
21:18:14 узел 44% ядра
21:18:16 узел 12% ядра
21:18:18 узел 12% ядра
21:18:20 узел 0% ядра
21:18:22 узел 53% ядра
21:18:24 узел 766% ядра
21:18:26 узел 1882% ядра
21:18:28 узел 964% ядра
21:18:30 узел 1477% ядра
21:18:32 узел 301% ядра
21:18:34 узел 181% ядра
21:18:36 узел 185% ядра
21:18:38 узел 196% ядра
21:18:40 узел 313% ядра
21:18:42 узел 229% ядра
21:18:44 узел 159% ядра
21:18:46 узел 184% ядра
21:18:48 узел 96% ядра
Live testnet 13 Sep — 04-400k2026-09-13/raw/04-400k.txt
=== Прогон 04-400k: 20000 отправителей × 20 транзакций = 400000 ===
Начало: 2026-09-13 21:19:00 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdac5e"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":11265107000,"enabled":true,"head":896094,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":800727}}
База на диске до: 16G
отправителей 20000, по 20, соединений 256, пачка 128
подписано 400000 за 19.582543687s (24 потоков)
отправлено за 21.57 с → приём 18542 tx/с; принято 400000, ошибок 0
в блоках 400000 из 400000
пик 37567 в блоке → 12522 TPS; в среднем 6667 TPS за 20 блоков по 3 с
по блокам: [37567, 35803, 15101, 16188, 14465, 13855, 15054, 17007, 17118, 16812, 16731, 17043, 17845, 18297, 19599, 20376, 20229, 21960, 24583, 24367]
Конец: 2026-09-13 21:20:51 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdac7d"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":13690647508,"enabled":true,"head":896125,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":847663}}
База на диске после: 20G
Пиковая загрузка узла: 21:19:30 узел 1911% ядра
13 Sep 04-400k — CPU2026-09-13/raw/04-400k-cpu.txt
21:19:02 узел 95% ядра
21:19:04 узел 95% ядра
21:19:06 узел 57% ядра
21:19:08 узел 26% ядра
21:19:10 узел 12% ядра
21:19:12 узел 0% ядра
21:19:14 узел 12% ядра
21:19:16 узел 14% ядра
21:19:18 узел 0% ядра
21:19:20 узел 12% ядра
21:19:22 узел 16% ядра
21:19:24 узел 0% ядра
21:19:26 узел 22% ядра
21:19:28 узел 1596% ядра
21:19:30 узел 1911% ядра
21:19:32 узел 1340% ядра
21:19:34 узел 1445% ядра
21:19:36 узел 1218% ядра
21:19:38 узел 690% ядра
21:19:40 узел 902% ядра
21:19:42 узел 322% ядра
21:19:44 узел 1534% ядра
21:19:46 узел 310% ядра
21:19:48 узел 877% ядра
21:19:50 узел 467% ядра
21:19:52 узел 273% ядра
21:19:54 узел 276% ядра
21:19:56 узел 355% ядра
21:19:58 узел 377% ядра
21:20:00 узел 156% ядра
21:20:02 узел 130% ядра
21:20:04 узел 200% ядра
21:20:06 узел 132% ядра
21:20:08 узел 143% ядра
21:20:10 узел 106% ядра
21:20:12 узел 217% ядра
21:20:14 узел 245% ядра
21:20:16 узел 243% ядра
21:20:18 узел 167% ядра
21:20:20 узел 153% ядра
21:20:22 узел 237% ядра
21:20:24 узел 248% ядра
21:20:26 узел 232% ядра
21:20:28 узел 131% ядра
21:20:30 узел 238% ядра
21:20:32 узел 251% ядра
21:20:34 узел 239% ядра
21:20:36 узел 252% ядра
21:20:38 узел 286% ядра
21:20:40 узел 257% ядра
21:20:42 узел 219% ядра
21:20:44 узел 247% ядра
21:20:46 узел 124% ядра
21:20:48 узел 145% ядра
21:20:50 узел 53% ядра
Live testnet 13 Sep — 05-200k-control2026-09-13/raw/05-200k-control.txt
=== Прогон 05-200k-control: 20000 отправителей × 10 транзакций = 200000 ===
Начало: 2026-09-13 22:01:49 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdafaa"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":13562586296,"enabled":true,"head":896938,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":868138}}
База на диске до: 13G
отправителей 20000, по 10, соединений 256, пачка 128
подписано 200000 за 9.535744553s (24 потоков)
отправлено за 6.41 с → приём 31225 tx/с; принято 200000, ошибок 0
в блоках 200000 из 200000
пик 90123 в блоке → 30041 TPS; в среднем 13333 TPS за 5 блоков по 3 с
по блокам: [90123, 37352, 35653, 35934, 938]
Конец: 2026-09-13 22:02:29 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdafb6"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":14832421041,"enabled":true,"head":896950,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":868150}}
База на диске после: 16G
Пик мемпула: "transactions":200000
Размер транзакции в мемпуле: "avgTxBytes":5501
EQUIVOCATION за прогон: 0
Пиковая загрузка узла: 22:02:07 узел 1903% ядра
13 Sep 05 — CPU2026-09-13/raw/05-200k-control-cpu.txt
22:01:51 узел 33% ядра
22:01:53 узел 66% ядра
22:01:55 узел 61% ядра
22:01:57 узел 12% ядра
22:01:59 узел 8% ядра
22:02:01 узел 0% ядра
22:02:03 узел 3% ядра
22:02:05 узел 207% ядра
22:02:07 узел 1903% ядра
22:02:09 узел 1164% ядра
22:02:11 узел 1734% ядра
22:02:13 узел 128% ядра
22:02:15 узел 482% ядра
22:02:17 узел 157% ядра
22:02:19 узел 59% ядра
22:02:21 узел 140% ядра
22:02:23 узел 314% ядра
22:02:25 узел 138% ядра
22:02:27 узел 59% ядра
13 Sep 05 — mempool2026-09-13/raw/05-200k-control-mempool.txt
22:01:49.427 h=0xdafaa "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:01:50.445 h=0xdafab "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:01:51.464 h=0xdafab "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:01:52.485 h=0xdafab "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:01:53.506 h=0xdafac "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:01:54.524 h=0xdafac "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:01:55.544 h=0xdafad "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:01:56.564 h=0xdafad "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:01:57.622 h=0xdafad "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:01:58.674 h=0xdafae "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:01:59.704 h=0xdafae "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:02:00.760 h=0xdafae "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:02:01.806 h=0xdafaf "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:02:02.842 h=0xdafaf "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:02:03.862 h=0xdafaf "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:02:04.881 h=0xdafb0 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:02:05.899 h=0xdafb0 "avgTxBytes":5501 "memoryBytes":291756537 "transactions":53037 
22:02:07.624 h=0xdafb0 "avgTxBytes":5501 "memoryBytes":644112090 "transactions":117090 
22:02:10.044 h=0xdafb0 "avgTxBytes":5501 "memoryBytes":976455005 "transactions":177505 
22:02:11.794 h=0xdafb0 "avgTxBytes":5501 "memoryBytes":1100200000 "transactions":200000 
22:02:12.832 h=0xdafb0 "avgTxBytes":5501 "memoryBytes":1100200000 "transactions":200000 
22:02:13.868 h=0xdafb1 "avgTxBytes":5501 "memoryBytes":604433377 "transactions":109877 
22:02:15.531 h=0xdafb1 "avgTxBytes":5501 "memoryBytes":604433377 "transactions":109877 
22:02:16.562 h=0xdafb1 "avgTxBytes":5501 "memoryBytes":604433377 "transactions":109877 
22:02:17.594 h=0xdafb2 "avgTxBytes":5501 "memoryBytes":398960025 "transactions":72525 
22:02:18.628 h=0xdafb2 "avgTxBytes":5501 "memoryBytes":398960025 "transactions":72525 
22:02:19.661 h=0xdafb2 "avgTxBytes":5501 "memoryBytes":398960025 "transactions":72525 
22:02:20.695 h=0xdafb2 "avgTxBytes":5501 "memoryBytes":398960025 "transactions":72525 
22:02:21.731 h=0xdafb3 "avgTxBytes":5501 "memoryBytes":202832872 "transactions":36872 
22:02:22.769 h=0xdafb3 "avgTxBytes":5501 "memoryBytes":202832872 "transactions":36872 
22:02:23.799 h=0xdafb3 "avgTxBytes":5501 "memoryBytes":202832872 "transactions":36872 
22:02:24.832 h=0xdafb4 "avgTxBytes":5501 "memoryBytes":5159938 "transactions":938 
22:02:25.859 h=0xdafb5 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
Live testnet 13 Sep — 06-400k-sustained2026-09-13/raw/06-400k-sustained.txt
=== Прогон 06-400k-sustained: 20000 отправителей × 20 транзакций = 400000 ===
Начало: 2026-09-13 22:03:14 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdafc5"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":14833469617,"enabled":true,"head":896965,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":868165}}
База на диске до: 16G
отправителей 20000, по 20, соединений 256, пачка 128
подписано 400000 за 19.876507368s (24 потоков)
отправлено за 10.78 с → приём 37121 tx/с; принято 400000, ошибок 0
в блоках 400000 из 400000
пик 37390 в блоке → 12463 TPS; в среднем 8889 TPS за 15 блоков по 3 с
по блокам: [8211, 37390, 36768, 30173, 28938, 26104, 23847, 22737, 22821, 23295, 24217, 27198, 30641, 34560, 23100]
Конец: 2026-09-13 22:04:37 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdafdd"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":true,"budgetBytes":429496729600,"dbBytes":17296606757,"enabled":true,"head":896989,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":868189}}
База на диске после: 25G
Пик мемпула: "transactions":391789
Размер транзакции в мемпуле: "avgTxBytes":5501
EQUIVOCATION за прогон: 0
Пиковая загрузка узла: 22:03:48 узел 1953% ядра
13 Sep 06 — CPU2026-09-13/raw/06-400k-sustained-cpu.txt
22:03:16 узел 25% ядра
22:03:18 узел 67% ядра
22:03:20 узел 59% ядра
22:03:22 узел 0% ядра
22:03:24 узел 5% ядра
22:03:26 узел 4% ядра
22:03:28 узел 0% ядра
22:03:30 узел 5% ядра
22:03:32 узел 5% ядра
22:03:34 узел 1% ядра
22:03:36 узел 9% ядра
22:03:38 узел 10% ядра
22:03:40 узел 310% ядра
22:03:42 узел 1908% ядра
22:03:44 узел 1530% ядра
22:03:46 узел 1467% ядра
22:03:48 узел 1953% ядра
22:03:50 узел 1942% ядра
22:03:52 узел 428% ядра
22:03:54 узел 263% ядра
22:03:56 узел 195% ядра
22:03:58 узел 101% ядра
22:04:00 узел 131% ядра
22:04:02 узел 251% ядра
22:04:04 узел 231% ядра
22:04:06 узел 217% ядра
22:04:08 узел 230% ядра
22:04:10 узел 229% ядра
22:04:12 узел 249% ядра
22:04:14 узел 171% ядра
22:04:16 узел 137% ядра
22:04:18 узел 164% ядра
22:04:20 узел 200% ядра
22:04:22 узел 171% ядра
22:04:24 узел 262% ядра
22:04:26 узел 185% ядра
22:04:28 узел 200% ядра
22:04:30 узел 279% ядра
22:04:32 узел 226% ядра
22:04:34 узел 186% ядра
13 Sep 06 — mempool2026-09-13/raw/06-400k-sustained-mempool.txt
22:03:14.417 h=0xdafc5 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:15.434 h=0xdafc5 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:16.453 h=0xdafc5 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:17.474 h=0xdafc6 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:18.493 h=0xdafc6 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:19.512 h=0xdafc6 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:20.532 h=0xdafc7 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:21.596 h=0xdafc7 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:22.646 h=0xdafc8 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:23.703 h=0xdafc8 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:24.786 h=0xdafc8 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:25.836 h=0xdafc9 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:26.890 h=0xdafc9 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:27.947 h=0xdafc9 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:28.990 h=0xdafca "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:30.035 h=0xdafca "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:31.089 h=0xdafca "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:32.148 h=0xdafcb "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:33.201 h=0xdafcb "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:34.249 h=0xdafcb "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:35.272 h=0xdafcc "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:36.290 h=0xdafcc "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:37.310 h=0xdafcc "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:38.328 h=0xdafcd "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:39.347 h=0xdafcd "avgTxBytes":0 "memoryBytes":0 "transactions":0 
22:03:40.370 h=0xdafcd "avgTxBytes":5501 "memoryBytes":180168752 "transactions":32752 
22:03:42.066 h=0xdafce "avgTxBytes":5501 "memoryBytes":489985072 "transactions":89072 
22:03:43.634 h=0xdafce "avgTxBytes":5501 "memoryBytes":870604763 "transactions":158263 
22:03:46.290 h=0xdafce "avgTxBytes":5501 "memoryBytes":1227438130 "transactions":223130 
22:03:47.810 h=0xdafce "avgTxBytes":5501 "memoryBytes":1511135702 "transactions":274702 
22:03:49.048 h=0xdafce "avgTxBytes":5501 "memoryBytes":1864574952 "transactions":338952 
22:03:50.603 h=0xdafce "avgTxBytes":5501 "memoryBytes":2140142046 "transactions":389046 
22:03:51.780 h=0xdafcf "avgTxBytes":5501 "memoryBytes":2155231289 "transactions":391789 
22:03:52.837 h=0xdafcf "avgTxBytes":5501 "memoryBytes":1949548899 "transactions":354399 
22:03:53.893 h=0xdafcf "avgTxBytes":5501 "memoryBytes":1949548899 "transactions":354399 
22:03:55.504 h=0xdafcf "avgTxBytes":5501 "memoryBytes":1949548899 "transactions":354399 
22:03:56.575 h=0xdafd0 "avgTxBytes":5501 "memoryBytes":1747288131 "transactions":317631 
22:03:57.633 h=0xdafd0 "avgTxBytes":5501 "memoryBytes":1747288131 "transactions":317631 
22:03:58.685 h=0xdafd0 "avgTxBytes":5501 "memoryBytes":1747288131 "transactions":317631 
22:03:59.746 h=0xdafd0 "avgTxBytes":5501 "memoryBytes":1747288131 "transactions":317631 
22:04:00.796 h=0xdafd0 "avgTxBytes":5501 "memoryBytes":1747288131 "transactions":317631 
22:04:01.851 h=0xdafd1 "avgTxBytes":5501 "memoryBytes":1581306458 "transactions":287458 
22:04:02.908 h=0xdafd1 "avgTxBytes":5501 "memoryBytes":1581306458 "transactions":287458 
22:04:03.961 h=0xdafd1 "avgTxBytes":5501 "memoryBytes":1581306458 "transactions":287458 
22:04:05.020 h=0xdafd2 "avgTxBytes":5501 "memoryBytes":1422118520 "transactions":258520 
22:04:06.328 h=0xdafd2 "avgTxBytes":5501 "memoryBytes":1422118520 "transactions":258520 
22:04:07.376 h=0xdafd2 "avgTxBytes":5501 "memoryBytes":1422118520 "transactions":258520 
22:04:08.420 h=0xdafd3 "avgTxBytes":5501 "memoryBytes":1278520416 "transactions":232416 
22:04:09.467 h=0xdafd3 "avgTxBytes":5501 "memoryBytes":1278520416 "transactions":232416 
22:04:10.515 h=0xdafd4 "avgTxBytes":5501 "memoryBytes":1147338069 "transactions":208569 
22:04:11.564 h=0xdafd4 "avgTxBytes":5501 "memoryBytes":1147338069 "transactions":208569 
22:04:12.616 h=0xdafd5 "avgTxBytes":5501 "memoryBytes":1022261832 "transactions":185832 
22:04:13.662 h=0xdafd5 "avgTxBytes":5501 "memoryBytes":1022261832 "transactions":185832 
22:04:15.130 h=0xdafd5 "avgTxBytes":5501 "memoryBytes":1022261832 "transactions":185832 
22:04:16.172 h=0xdafd6 "avgTxBytes":5501 "memoryBytes":896723511 "transactions":163011 
22:04:17.214 h=0xdafd6 "avgTxBytes":5501 "memoryBytes":896723511 "transactions":163011 
22:04:18.254 h=0xdafd7 "avgTxBytes":5501 "memoryBytes":768577716 "transactions":139716 
22:04:19.353 h=0xdafd7 "avgTxBytes":5501 "memoryBytes":768577716 "transactions":139716 
22:04:20.396 h=0xdafd7 "avgTxBytes":5501 "memoryBytes":768577716 "transactions":139716 
22:04:21.440 h=0xdafd8 "avgTxBytes":5501 "memoryBytes":635359999 "transactions":115499 
22:04:22.479 h=0xdafd8 "avgTxBytes":5501 "memoryBytes":635359999 "transactions":115499 
22:04:23.517 h=0xdafd8 "avgTxBytes":5501 "memoryBytes":635359999 "transactions":115499 
22:04:24.558 h=0xdafd9 "avgTxBytes":5501 "memoryBytes":485743801 "transactions":88301 
22:04:25.596 h=0xdafd9 "avgTxBytes":5501 "memoryBytes":485743801 "transactions":88301 
22:04:26.640 h=0xdafda "avgTxBytes":5501 "memoryBytes":317187660 "transactions":57660 
22:04:27.820 h=0xdafda "avgTxBytes":5501 "memoryBytes":317187660 "transactions":57660 
22:04:29.061 h=0xdafda "avgTxBytes":5501 "memoryBytes":317187660 "transactions":57660 
22:04:30.105 h=0xdafdb "avgTxBytes":5501 "memoryBytes":127073100 "transactions":23100 
22:04:31.146 h=0xdafdb "avgTxBytes":5501 "memoryBytes":127073100 "transactions":23100 
22:04:32.179 h=0xdafdb "avgTxBytes":5501 "memoryBytes":127073100 "transactions":23100 
22:04:33.212 h=0xdafdc "avgTxBytes":0 "memoryBytes":0 "transactions":0 

2. TPS without Dilithium (plain Ed25519 signatures) and comparison

What we did

Same bench, same client, same 20k / 60k / 200k series — but transactions are signed with Ed25519 only (bench flag QSN_ALLOW_CLASSICAL_TX; the live network rejects such transactions). This is a control measurement: it shows what a post-quantum signature "costs".

Funding of the classical wallets did not reach everyone (the funding wallet ran out of balance: 2,919 accepted, 17,081 errors), so the 200k series used 7,735 senders × 20 = 154,700 transactions.

What we got

38,310
peak TPS without Dilithium
114,929
tx in one block
148,000
tx/s mempool intake
230 B
per transaction instead of 3,509 B

Bench 14 Sep, Ed25519 only

RunAccepted txBlocks (tx)Peak TPSAvg TPSMempool intakePeak CPU
01-20k (2 000 × 10)20 0001 428 / 14 285 / 4 2874 7622 222116 079 tx/с1,6 ядра
02-60k (6 000 × 10)60 00060 00020 00020 000148 309 tx/с3,8 ядра
03-200k (7 735 × 20)154 700114 929 / 39 77138 31025 783123 138 tx/с10,2 ядра

Comparison: with and without Dilithium3

MetricEd25519 + Dilithium3Ed25519 onlyDifference
Peak TPS14,46938,310×2.6
Max tx per block43,408114,929×2.6
Mempool intake27,000–36,400 tx/s116,000–148,000 tx/s×4
Transaction size in mempool3,509 B230 B×15
Peak node load15.7 cores10.2 cores
20k series (2,000 × 10)4,762 TPS4,762 TPSidentical: limited by the gas limit of the first blocks

Conclusion: Dilithium3 signature verification is the dominant cost. On the same hardware the chain reaches ~38,000 TPS peak without it and ~14,500 with it. Everything else (consensus, execution, disk writes) fits into the slot with a wide margin.

We keep the post-quantum signature mandatory: quantum resistance matters more than a ×2.6 peak. Further speed-ups are planned via Falcon-512 (shorter signature) and spreading verification across cores.

Log

Funding classical wallets2026-09-14/classical/00-fund.txt
== раздача средств классическим кошелькам 14:04:49
ошибка: {"code":-32603,"message":"Failed to add transaction to mempool: Insufficient balance: 3546250000000000 < 10420000000000000 (value 10000000000000000 + gas 420000000000000)"}
раздача: принято 2919 ошибок 17081 за 0.5 с
Run 01-20k (no Dilithium)2026-09-14/classical/01-20k.txt
=== Прогон 01-20k: 2000 отправителей × 10 транзакций = 20000 ===
Начало: 2026-09-14 18:05:12 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdabe6"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":4531629447,"enabled":true,"head":895974,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":662000}}
База на диске до: 18G
отправителей 2000, по 10, соединений 256, пачка 128
подписано 20000 за 132.765796ms (24 потоков)
отправлено за 0.17 с → приём 116079 tx/с; принято 20000, ошибок 0
в блоках 20000 из 20000
пик 14285 в блоке → 4762 TPS; в среднем 2222 TPS за 3 блоков по 3 с
по блокам: [1428, 14285, 4287]
Конец: 2026-09-14 18:05:23 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdabea"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":4658217511,"enabled":true,"head":895978,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":670000}}
База на диске после: 18G
Пик мемпула: "transactions":20000
Размер транзакции в мемпуле: "avgTxBytes":230
EQUIVOCATION за прогон: 0
Пиковая загрузка узла: 18:05:14 узел 163% ядра
01-20k — CPU2026-09-14/classical/01-20k-cpu.txt
18:05:14 узел 163% ядра
18:05:16 узел 6% ядра
18:05:18 узел 66% ядра
18:05:20 узел 25% ядра
18:05:22 узел 13% ядра
01-20k — mempool2026-09-14/classical/01-20k-mempool.txt
18:05:12.111 h=0xdabe6 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:05:13.130 h=0xdabe6 "avgTxBytes":230 "memoryBytes":4600000 "transactions":20000 
18:05:14.148 h=0xdabe7 "avgTxBytes":230 "memoryBytes":4271560 "transactions":18572 
18:05:15.169 h=0xdabe7 "avgTxBytes":230 "memoryBytes":4271560 "transactions":18572 
18:05:16.194 h=0xdabe7 "avgTxBytes":230 "memoryBytes":4271560 "transactions":18572 
18:05:17.213 h=0xdabe7 "avgTxBytes":230 "memoryBytes":4271560 "transactions":18572 
18:05:18.233 h=0xdabe8 "avgTxBytes":230 "memoryBytes":986010 "transactions":4287 
18:05:19.254 h=0xdabe8 "avgTxBytes":230 "memoryBytes":986010 "transactions":4287 
18:05:20.275 h=0xdabe9 "avgTxBytes":0 "memoryBytes":0 "transactions":0 
Run 02-60k (no Dilithium)2026-09-14/classical/02-60k.txt
=== Прогон 02-60k: 6000 отправителей × 10 транзакций = 60000 ===
Начало: 2026-09-14 18:05:23 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdabea"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":4658217511,"enabled":true,"head":895978,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":670000}}
База на диске до: 18G
отправителей 6000, по 10, соединений 256, пачка 128
подписано 60000 за 365.638281ms (24 потоков)
отправлено за 0.40 с → приём 148309 tx/с; принято 60000, ошибок 0
в блоках 60000 из 60000
пик 60000 в блоке → 20000 TPS; в среднем 20000 TPS за 1 блоков по 3 с
по блокам: [60000]
Конец: 2026-09-14 18:05:34 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdabed"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":4806576815,"enabled":true,"head":895981,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":676000}}
База на диске после: 18G
Пик мемпула: "transactions":60000
Размер транзакции в мемпуле: "avgTxBytes":230
EQUIVOCATION за прогон: 0
Пиковая загрузка узла: 18:05:27 узел 384% ядра
02-60k — CPU2026-09-14/classical/02-60k-cpu.txt
18:05:25 узел 57% ядра
18:05:27 узел 384% ядра
18:05:29 узел 149% ядра
18:05:31 узел 53% ядра
02-60k — mempool2026-09-14/classical/02-60k-mempool.txt
18:05:23.959 h=0xdabea "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:05:24.977 h=0xdabea "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:05:25.997 h=0xdabea "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:05:27.018 h=0xdabeb "avgTxBytes":230 "memoryBytes":13800000 "transactions":60000 
18:05:28.042 h=0xdabeb "avgTxBytes":230 "memoryBytes":13800000 "transactions":60000 
18:05:29.069 h=0xdabeb "avgTxBytes":230 "memoryBytes":13800000 "transactions":60000 
18:05:30.094 h=0xdabec "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:05:31.115 h=0xdabec "avgTxBytes":0 "memoryBytes":0 "transactions":0 
Run 03-200k (no Dilithium) — 38,310 TPS peak2026-09-14/classical/03-200k.txt
=== Прогон 03-200k: 10000 отправителей × 20 транзакций = 200000 ===
Начало: 2026-09-14 18:05:34 +04
Высота до: {"jsonrpc":"2.0","id":1,"result":"0xdabed"}
Прунинг до: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":4806576815,"enabled":true,"head":895981,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":676000}}
База на диске до: 18G
отправителей 7735, по 20, соединений 256, пачка 128
подписано 154700 за 1.052511717s (24 потоков)
отправлено за 1.26 с → приём 123138 tx/с; принято 154700, ошибок 0
в блоках 154700 из 154700
пик 114929 в блоке → 38310 TPS; в среднем 25783 TPS за 2 блоков по 3 с
по блокам: [114929, 39771]
Конец: 2026-09-14 18:05:48 +04
Высота после: {"jsonrpc":"2.0","id":1,"result":"0xdabf2"}
Прунинг после: {"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":4793959802,"enabled":true,"head":895986,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":684000}}
База на диске после: 18G
Пик мемпула: "transactions":154700
Размер транзакции в мемпуле: "avgTxBytes":230
EQUIVOCATION за прогон: 0
Пиковая загрузка узла: 18:05:40 узел 1021% ядра
03-200k — CPU2026-09-14/classical/03-200k-cpu.txt
18:05:36 узел 145% ядра
18:05:38 узел 141% ядра
18:05:40 узел 1021% ядра
18:05:42 узел 288% ядра
18:05:44 узел 185% ядра
18:05:46 узел 65% ядра
03-200k — mempool2026-09-14/classical/03-200k-mempool.txt
18:05:34.359 h=0xdabed "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:05:35.379 h=0xdabee "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:05:36.406 h=0xdabee "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:05:37.429 h=0xdabee "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:05:38.451 h=0xdabef "avgTxBytes":0 "memoryBytes":0 "transactions":0 
18:05:39.474 h=0xdabef "avgTxBytes":230 "memoryBytes":35221280 "transactions":153136 
18:05:40.885 h=0xdabef "avgTxBytes":230 "memoryBytes":35581000 "transactions":154700 
18:05:41.918 h=0xdabef "avgTxBytes":230 "memoryBytes":35581000 "transactions":154700 
18:05:42.950 h=0xdabf0 "avgTxBytes":230 "memoryBytes":35581000 "transactions":154700 
18:05:44.000 h=0xdabf0 "avgTxBytes":230 "memoryBytes":9147330 "transactions":39771 
18:05:45.027 h=0xdabf1 "avgTxBytes":0 "memoryBytes":0 "transactions":0 

3. New node sync from scratch (production → PC)

What we did

On an ordinary home PC we started a node with an empty database (same binary as production, no validator key) and timed how long it takes to catch up with the live network (height ~919,600).

How it works: the node connects to production over QUIC and TCP, requests a state snapshot at the nearest "round" height (919,600), receives it in 4 chunks, verifies the state root and the precommit quorum of 15 validators, then imports the latest blocks with full execution and root checks. If the snapshot is unavailable there is a fallback: importing all blocks from zero.

What we got

~1 s
empty DB → height 919,626
4
snapshot chunks, root and quorum verified
~250
blocks/s in fallback mode

Timeline

TimePC node height
12:57:43.48start
12:57:440
12:57:450
12:57:46919 626

The "rejected: prevote/precommit h=919589" lines in the log are consensus votes for older heights that arrived before the snapshot was loaded; a node without state cannot verify them and drops them. This is expected.

Log

Sync-from-zero log2026-09-14/01-sync-from-zero.txt
12:57:43.483178647 старт
12:57:44 высота ПК 0
12:57:45 высота ПК 0
12:57:46 высота ПК 919626
2026-09-14T12:54:48.886175Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: prevote 6178359b9a74 h=919589 r=0: подпись или в
2026-09-14T12:54:48.886255Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: precommit ea4441862344 h=919589 r=0: подпись или 
2026-09-14T12:54:48.886295Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: precommit 238e531b6780 h=919589 r=0: подпись или 
2026-09-14T12:54:48.886335Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: precommit b4807d255eee h=919589 r=0: подпись или 
2026-09-14T12:54:48.886369Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: precommit 9d9a22d68c25 h=919589 r=0: подпись или 
2026-09-14T12:54:48.886401Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: precommit 546c140e3106 h=919589 r=0: подпись или 
2026-09-14T12:54:48.886432Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: prevote 1491a1070b88 h=919589 r=0: подпись или в
2026-09-14T12:54:48.886467Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: precommit 4386356c9d0b h=919589 r=0: подпись или 
2026-09-14T12:54:48.886498Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: precommit aa2fd1e19d47 h=919589 r=0: подпись или 
2026-09-14T12:54:48.887413Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: precommit 94167499717f h=919589 r=0: подпись или 
2026-09-14T12:54:48.887494Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: precommit bfd96102e469 h=919589 r=0: подпись или 
2026-09-14T12:54:48.887568Zщение консенсуса от 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb отвергнуто: precommit 93859697ad8c h=919589 r=0: подпись или 

4. Network between nodes

What we did

We checked the link between the PC and the production server: a plain ping (10 packets), which connections the node keeps, and how well the PC keeps up with production — 20 height samples of both sides over a minute.

What we got

9.3 ms
average ping PC → server
0%
packet loss
2
connections: QUIC + TCP (port 30303)
0
blocks of lag in all 20 samples

Metrics

MetricValue
ping min / avg / max8.03 / 9.28 / 10.86 ms
loss0% (10 of 10)
peers of the PC node6
connections to production/udp/30303/quic-v1 and /tcp/30303
lag over a minute0 blocks, 20 of 20 samples

Log

Network log2026-09-14/03-network.txt
== Сеть ПК↔прод 2026-09-14 12:57:57 ==
10 packets transmitted, 10 received, 0% packet loss, time 9011ms
rtt min/avg/max/mdev = 8.027/9.284/10.858/0.950 ms
пиры ПК: 6
2026-09-14T12:57:44.426049ZR CONNECTED: 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb @ /ip4/194.61.89.3/udp/30303/quic-v1 (total: 1)
2026-09-14T12:57:44.497079ZR CONNECTED: 12D3KooWEbn1TnXwDbsuPEeuyXFqP2b5sivBPmN8RMXpCMRCaNhb @ /ip4/194.61.89.3/tcp/30303 (total: 2)
высота ПК 919675, прод 919675
PC lag behind production (20 samples)2026-09-14/05-follow.txt
== Отставание ПК от прода 2026-09-14 12:59:10 ==
12:59:10 прод 919676 ПК 919676 отставание 0
12:59:14 прод 919677 ПК 919677 отставание 0
12:59:17 прод 919678 ПК 919678 отставание 0
12:59:20 прод 919679 ПК 919679 отставание 0
12:59:24 прод 919680 ПК 919680 отставание 0
12:59:27 прод 919681 ПК 919681 отставание 0
12:59:31 прод 919683 ПК 919683 отставание 0
12:59:34 прод 919684 ПК 919684 отставание 0
12:59:37 прод 919685 ПК 919685 отставание 0
12:59:41 прод 919686 ПК 919686 отставание 0
12:59:44 прод 919687 ПК 919687 отставание 0
12:59:47 прод 919688 ПК 919688 отставание 0
12:59:51 прод 919689 ПК 919689 отставание 0
12:59:54 прод 919690 ПК 919690 отставание 0
12:59:58 прод 919692 ПК 919692 отставание 0
13:00:01 прод 919693 ПК 919693 отставание 0
13:00:04 прод 919694 ПК 919694 отставание 0
13:00:08 прод 919695 ПК 919695 отставание 0
13:00:11 прод 919696 ПК 919696 отставание 0
13:00:14 прод 919697 ПК 919697 отставание 0

5. Load on production with the PC attached

What we did

We sent 9,000 transactions (300 senders × 30) to the production node while watching the PC that follows the network.

How a block reaches the PC: validators broadcast a compact proposal — only the header and transaction hashes (~32 B per transaction instead of 3.5 KB). The PC checks which transaction bodies it already has in its mempool, fetches the missing ones from peers and commits the same block as production.

What we got

33,628
tx/s intake on production
2
blocks: 1,428 + 7,572
2,524
peak TPS
0 / 0
failures on production / on PC

Results

MetricValue
signed9,000 in 0.59 s (24 threads)
sentin 0.27 s → intake 33,628 tx/s
in blocks9,000 of 9,000
per block1,428, 7,572
PCreceived compact proposals, fetched bodies, committed the same blocks
PC data after the test163 MB

The first block is again 1,428 tx — the base gas limit; the second block took the remaining 7,572.

Log

Load log 300×302026-09-14/04-load-300x30.txt
== Нагрузка на прод 300×30 2026-09-14 13:00:17, ПК следует ==
подписано 9000 за 588.290086ms (24 потоков)
отправлено за 0.27 с → приём 33628 tx/с; принято 9000, ошибок 0
в блоках 9000 из 9000
пик 7572 в блоке → 2524 TPS; в среднем 1500 TPS за 2 блоков по 3 с
по блокам: [1428, 7572]
13:00:27 ПК высота 919699
13:00:28 ПК высота 919699
13:00:29 ПК высота 919700
13:00:30 ПК высота 919700
13:00:31 ПК высота 919700
13:00:32 ПК высота 919700
13:00:33 ПК высота 919703
13:00:34 ПК высота 919704
13:00:35 ПК высота 919704
13:00:36 ПК высота 919704
13:00:37 ПК высота 919705
13:00:38 ПК высота 919705
13:00:39 ПК высота 919705
13:00:40 ПК высота 919706
13:00:41 ПК высота 919706
13:00:42 ПК высота 919706
13:00:43 ПК высота 919707
13:00:44 ПК высота 919707
13:00:45 ПК высота 919707
13:00:46 ПК высота 919708
13:00:47 ПК высота 919708
13:00:48 ПК высота 919708
13:00:49 ПК высота 919709
13:00:50 ПК высота 919709
13:00:51 ПК высота 919709
13:00:52 ПК высота 919710
13:00:53 ПК высота 919710
13:00:54 ПК высота 919710
13:00:55 ПК высота 919711
13:00:56 ПК высота 919711
13:00:57 ПК высота 919711
13:00:58 ПК высота 919712
13:00:59 ПК высота 919712
13:01:00 ПК высота 919712
13:01:01 ПК высота 919713
13:01:02 ПК высота 919713
13:01:03 ПК высота 919713
13:01:04 ПК высота 919714
13:01:05 ПК высота 919714
13:01:06 ПК высота 919714
--- блоки с tx на ПК:
Компактное предложение height=919700 round=0: 1428 tx, не хват�
Committed block: height=919700, hash=abcabf1e264b7c4677bb8483c6e01c3ff43b11ac09672033c1385
Committed block: height=919701, hash=d7850f84f528b28fa42237d90e0ccf3f0df129fd6bf20567dc942
прод отказов: 0
ПК отказов: 0
данные ПК: 163M

6. RPC response time

What we did

We measured response time of the main JSON-RPC calls: from the PC to its local node and from the PC to the production server over the internet. Separately — on the bench (locally).

What we got

0.00–0.06 s
local node on the PC
0.05–0.16 s
production over the internet
0.08 s
qsn_getAllTransactions over the internet

Latency, s

CallPC localProduction via internetBench local
eth_blockNumber0,000,160,00
qsn_getMempoolStats0,000,050,00
qsn_getAllTransactions0,000,080,11
qsn_getBlocks0,010,090,26
qsn_getAccounts0,060,100,03
qsn_getNeuralState0,00
qsn_getValidators0,00

qsn_getAllTransactions is the call the explorer's /transactions page uses to list transactions; the node answers from block summaries in a cache warmed at startup.

Log

RPC latency: PC and production2026-09-14/02-rpc-latency.txt
== RPC задержки 2026-09-14 12:59:09 ==
eth_blockNumber ПК: 0.00s
eth_blockNumber прод-через-интернет: 0.16s
qsn_getMempoolStats ПК: 0.00s
qsn_getMempoolStats прод-через-интернет: 0.05s
qsn_getAllTransactions ПК: 0.00s
qsn_getAllTransactions прод-через-интернет: 0.08s
qsn_getBlocks ПК: 0.01s
qsn_getBlocks прод-через-интернет: 0.09s
qsn_getAccounts ПК: 0.06s
qsn_getAccounts прод-через-интернет: 0.10s
Bench RPC latency2026-09-14/dilithium/11-rpc-latency-stage.txt
== Задержки RPC стенда (локально) 14:12:42
eth_blockNumber: 0.00s
qsn_getMempoolStats: 0.00s
qsn_getAllTransactions: 0.11s
qsn_getBlocks: 0.26s
qsn_getAccounts: 0.03s
qsn_getNeuralState: 0.00s
qsn_getValidators: 0.00s

7. Neural controller

What we did

The node runs a neural controller (Brain): it watches block utilization and manages the block gas limit. We captured its state before load, sent 20,000 plain transactions (4,000 × 5) and captured the state after, recording the gas limit of every block along the way.

What we got

30,000,000
base block gas limit
3,000,000,000
limit under load
10 ms
decision latency
1.0
health score, prediction accuracy

Brain metrics (qsn_getNeuralState / qsn_getBrainMetrics)

MetricBeforeAfter
activeNeurons3321
synapseCount1 5681 568
adjustmentCount1921 (totalSteps)
learningRate0,01
plasticity0,8
decisionLatencyMs10
healthScore1,01,0
blockUtilization0,1380,007
block gasLimit3 000 000 0003 000 000 000 → 825 000 000

Gas limit per block

HeightgasLimitgasUsedtx
896 108–896 1153 000 000 00000
896 1163 000 000 000420 000 00020 000
896 117–896 1203 000 000 00000
896 121–896 123825 000 00000

You can see the controller keep the high limit after the load and lower it gradually after a few empty blocks (3,000,000,000 → 825,000,000). The 20,000 tx block was included whole (6,667 TPS).

Log

Neural controller log2026-09-14/dilithium/10-neural.txt
== Нейроконтроллер: лимит газа и состояние Brain до/после нагрузки 14:11:55
--- до:
{"jsonrpc":"2.0","id":1,"result":{"activations":{"clusterActivations":{},"globalLevel":0.13781943000000002},"activeNeurons":33,"blockHeight":896108,"brainMood":2,"healthScore":1.0,"isEnabled":true,"isReady":true,"metaLearning":{"adaptationSpeed":0.1,"curriculumStage":100,"learningEfficiency":1.0,"totalSteps":19},"metricsHistorySize":100,"neurotransmitters":{"cortisol":0.0,"dopamine":1.0,"gaba":1.0,"glutamate":0.13781943000000002,"norepinephrine":0.13781943000000002,"serotonin":1.0},"synapseCount":1568,"worldState":{"blockUtilization":0.13781943000000002,"gasPrice":0.0,"globalActivation":0.1378
{"jsonrpc":"2.0","id":1,"result":{"adjustmentCount":19,"blockHeight":896108,"decisionLatencyMs":10,"energyLevel":0.0,"healthScore":1.0,"homeostasis":{"deviation":0.5,"level":1.0,"target":0.5},"isReady":true,"learningRate":0.01,"memoryUtilization":1.0,"metricsHistorySize":100,"neurotransmitters":{"cortisol":0.33333333333333337,"dopamine":1.0,"gaba":1.0,"glutamate":0.0,"norepinephrine":0.0,"serotonin":1.0},"overallConfidence":1.0,"plasticity":0.8,"predictionAccuracy":1.0,"stressLevel":0.33333333333333337}}
14:11:55 высота 896108 gasLimit 3000000000 gasUsed 0 txs 0
14:11:58 высота 896109 gasLimit 3000000000 gasUsed 0 txs 0
14:12:01 высота 896110 gasLimit 3000000000 gasUsed 0 txs 0
14:12:04 высота 896111 gasLimit 3000000000 gasUsed 0 txs 0
14:12:07 высота 896112 gasLimit 3000000000 gasUsed 0 txs 0
14:12:10 высота 896113 gasLimit 3000000000 gasUsed 0 txs 0
--- нагрузка 4000×5 (простые tx):
в блоках 20000 из 20000
пик 20000 в блоке → 6667 TPS; в среднем 6667 TPS за 1 блоков по 3 с
по блокам: [20000]
14:12:18 высота 896116 gasLimit 3000000000 gasUsed 420000000 txs 20000
14:12:21 высота 896117 gasLimit 3000000000 gasUsed 0 txs 0
14:12:24 высота 896118 gasLimit 3000000000 gasUsed 0 txs 0
14:12:27 высота 896119 gasLimit 3000000000 gasUsed 0 txs 0
14:12:30 высота 896120 gasLimit 3000000000 gasUsed 0 txs 0
14:12:33 высота 896121 gasLimit 825000000 gasUsed 0 txs 0
14:12:36 высота 896122 gasLimit 825000000 gasUsed 0 txs 0
14:12:39 высота 896123 gasLimit 825000000 gasUsed 0 txs 0
--- после:
{"jsonrpc":"2.0","id":1,"result":{"activations":{"clusterActivations":{},"globalLevel":0.00702},"activeNeurons":21,"blockHeight":896124,"brainMood":2,"healthScore":1.0,"isEnabled":true,"isReady":true,"metaLearning":{"adaptationSpeed":0.1,"curriculumStage":100,"learningEfficiency":1.0,"totalSteps":21},"metricsHistorySize":100,"neurotransmitters":{"cortisol":0.0,"dopamine":1.0,"gaba":1.0,"glutamate":0.00702,"norepinephrine":0.00702,"serotonin":1.0},"synapseCount":1568,"worldState":{"blockUtilization":0.00702,"gasPrice":0.0,"globalActivation":0.00702,"networkLoad":0.00702,"timestamp":1789395162}}

8. Block timing

What we did

From the bench log we took how much time passes between "executing N transactions", "proposed block" and "committed block" for the largest blocks of the 04-120k series.

What we got

77 ms
execution of a 14,285 tx block
~0.4 s
execution of a 43,408 tx block
~1.4 s
proposal to commit (43,408 tx)
3 s
block slot — everything fits

Large blocks of the 04-120k series

BlocktxExecutionProposal → commitTotal
896 10343 4080,40 с1,38 с1,78 с
896 10442 7010,39 с1,41 с1,81 с
896 10521 6580,29 с0,94 с1,23 с
896 11620 000 (plain)0.10 s0.25 s0.35 s

Empty blocks go strictly every 3 s (896,106 → 896,124 in the log). A block of 41,160 post-quantum transactions also fits into the 3-second slot.

Log

Block timing log2026-09-14/dilithium/12-block-timing.txt
== Тайминг блока: сборка → предложение → коммит (из лога стенда, последние блоки с tx)
2026-09-14T14:11:38.735239Zuting 43408 transactions for block 896103
2026-09-14T14:11:39.136424Zposed block: height=896103, hash=a6b4253c0799ca20e1f293b1634152f04eedaaa8ae99c4afd8dbd2204a
2026-09-14T14:11:40.514012Zitted block: height=896103, hash=a6b4253c0799ca20e1f293b1634152f04eedaaa8ae99c4afd8dbd2204a
2026-09-14T14:11:41.189110Zuting 42701 transactions for block 896104
2026-09-14T14:11:41.582691Zposed block: height=896104, hash=84672936ecbf1a8967b7bafd4d0f9b9b06574b6597e3fcaf45e58f7d60
2026-09-14T14:11:42.994828Zitted block: height=896104, hash=84672936ecbf1a8967b7bafd4d0f9b9b06574b6597e3fcaf45e58f7d60
2026-09-14T14:11:44.078501Zuting 21658 transactions for block 896105
2026-09-14T14:11:44.366231Zposed block: height=896105, hash=af218cdaff54d890a426565b0520fa75ced59c1800a44f078bbcc643dc
2026-09-14T14:11:45.307105Zitted block: height=896105, hash=af218cdaff54d890a426565b0520fa75ced59c1800a44f078bbcc643dc
2026-09-14T14:11:46.999689Zposed block: height=896106, hash=fbf7eaad4faada1b23cf3485b01dd4d6c280e0accb07d32b7a5e569a22
2026-09-14T14:11:50.013991Zposed block: height=896107, hash=5b938c966301764535674b8c54b48c0b7c5fdf946f8d8e34c068d3a6b4
2026-09-14T14:11:53.061985Zposed block: height=896108, hash=07562e754cb5944ba155826b6c756dd12c115b07afebae82e00ef789a3
2026-09-14T14:11:56.021938Zposed block: height=896109, hash=4d50eac8f00a7f571992a0f308c0ee5b496fe097b3d17784d2b99e19c4
2026-09-14T14:11:59.014666Zposed block: height=896110, hash=e04749f414d20aafd6ebfdc6223871e10661f7ffd718295fb73c4a0496
2026-09-14T14:12:02.014482Zposed block: height=896111, hash=18c8f69601a01d2135ee309f986d8d4b368160f39526e70918ab21589e
2026-09-14T14:12:05.013022Zposed block: height=896112, hash=fef960600d763a5402417a2abf7ca49523c48e53cb715d78cdccc927ad
2026-09-14T14:12:08.011558Zposed block: height=896113, hash=1d70cee0b4f91612f43139eba49689cdc069a76d9ba15cedc9e98cba52
2026-09-14T14:12:11.013902Zposed block: height=896114, hash=af556205389b3caefda9c42d2564d925a424abad3138637ab170e8276c
2026-09-14T14:12:14.011907Zposed block: height=896115, hash=4a45258aa77188b9c5e8903552407a74abb332c7e0a525dcfa54c77f91
2026-09-14T14:12:17.010433Zuting 20000 transactions for block 896116
2026-09-14T14:12:17.112777Zposed block: height=896116, hash=9ccae99fd21b1105b4156903278d129d8e00e7a8825014d30e1cfc8b9e
2026-09-14T14:12:17.362401Zitted block: height=896116, hash=9ccae99fd21b1105b4156903278d129d8e00e7a8825014d30e1cfc8b9e
2026-09-14T14:12:20.001884Zposed block: height=896117, hash=22a4c293dc313de4e0c53168f16e3afd6a2910639a704e70b355ef5dfe
2026-09-14T14:12:23.062283Zposed block: height=896118, hash=8fb3b98ebc8197ae12b63353cfdc0aae6eb324e6ccf6e9ad6005c76c5a
2026-09-14T14:12:26.017161Zposed block: height=896119, hash=a7aad253a2ec592d8438098247fabbff0285d5fc1e233d3e4662ca1268
2026-09-14T14:12:29.014378Zposed block: height=896120, hash=24873e34f1b3efc2af15f12959b5f14f91fe2aa908f0e12a3bd355fb1a
2026-09-14T14:12:32.018292Zposed block: height=896121, hash=a6d7c90435029d916b3db146bfef8cbd7015c4f9e8c665042f63205039
2026-09-14T14:12:35.014488Zposed block: height=896122, hash=9f9548512edbd74f2b3ea23a0c1186698d2c16591cbe6647c6aaec1937
2026-09-14T14:12:38.025939Zposed block: height=896123, hash=9fcff796dc9f62c2a5f19a3e526673f3b2f4222131ce8ee10e2c84fc15
2026-09-14T14:12:41.013487Zposed block: height=896124, hash=16ad730b634321f094d2d6afea690cb01ad423fad73ceb5b923baea38f

9. Block and transaction size, pruning with archive, disk

What we did

We looked at how much disk the chain takes, how pruning works (removing old signatures and moving block bodies to the archive) and how much a transaction and a block weigh in different places — in the mempool, on disk and on the wire.

What we got

17 GB
production, 919,000 blocks
3,509 B
PQ transaction in mempool (was 5,501)
~32 B
per transaction on the wire
28,800
blocks kept with signatures

Sizes

WhatSize
Post-quantum transaction in mempool3,509 B (Dilithium3 signature 3,293 B; key in registry, was 5,501 B)
Plain transaction in mempool230 B
Transaction on disk~3.5 KB (LZ4 compression)
Block on the wire (compact proposal)~32 B per transaction (hashes)
Production DB17 GB for 919,000 blocks
Bench DB9.5 GB (dbBytes 5.75 GB)
PC node data163 MB (snapshot + recent blocks)
Mempool: limit500,000 tx / 4 GB
Mempool: peak 13 Sep391,789 tx ≈ 2.15 GB

Pruning (qsn_getPruningStatus)

ParameterValueMeaning
keepFullBlocks28,800the last day of blocks is kept in full, with signatures
signaturesPrunedTo867,324 (bench)signatures removed up to this height
budgetBytes400 GBabove it, old block bodies go to a zstd archive
archivefalse (bench) / true (production 13 Sep)whether archive mode is on
balances and headersuntouchedstate is always complete

Largest blocks

WhereBlocktx
production916,0459,072
live testnet 13 Sep (record)42,452
bench 14 Sep, Dilithium896,10343,408
bench 14 Sep, no Dilithium114,929

Log

Bench disk and pruning2026-09-14/dilithium/13-disk.txt
== Диск стенда 14:12:43
9,5G	/home/deb/qsn-stage/data
{"jsonrpc":"2.0","id":1,"result":{"archive":false,"budgetBytes":429496729600,"dbBytes":5750411857,"enabled":true,"head":896124,"historyPrunedTo":0,"keepFullBlocks":28800,"signaturesPrunedTo":867324}}
{"jsonrpc":"2.0","id":1,"result":{"avgTxBytes":0,"limitMemoryBytes":4294967296,"limitTransactions":500000,"memoryBytes":0,"rateLimited":0,"rejectedFull":0,"transactions":0}}

10. Test conditions and honest caveats

What we did

Below is exactly what everything was measured on, so the numbers can be reproduced and understood correctly.

What we got

Benches

Live testnet 13 SepProduction replica 14 SepPC 14 Sep
Hardwareserver 194.61.89.3: 24 cores, 54 GB RAM, NVMesame server, same CPUordinary home PC, internet
NetworkPyuniq testnet, chainId 99991, height ~896,000copy of the live chain, height ~896,000observer without validator key, RPC 127.0.0.1:39545
Validators15 in one process, BFT over an internal bus15 in one process— (follows production)
Node versionQNS-core main 3466c83 (+5e5c59c, 5b86b89)commit be3406e (key registry)commit c69bcaa (same as production)
Transaction5,501 B (Dilithium3 3,293 B + key 1,952 B)3,509 B (key stored once in the registry)
Load clienttps_load (Rust), 20,000 senders, 256 connectionstps_load, 2,058 (PQ) / up to 7,735 (plain) senderstps_load against production, 300 × 30
Block slot3 s3 s3 s
Stateon disk (RocksDB)on diskon disk
In parallelbackground signature pruningbackground pruning

All 15 validators run in one process on one server: blocks do not travel across the internet between them. The TPS figures show how many post-quantum transactions one server accepts, verifies, executes and writes — not the throughput of a geographically distributed network. The "production ↔ PC" test (sections 3–5) is the first step towards such a measurement.

The faucet on the 14 Sep bench funded 2,058 of 20,000 Dilithium wallets (71 s). Hence series 02-60k and 03-200k accepted 20,580 and 41,160 transactions instead of 60,000 and 200,000. The live testnet on 13 Sep with fully funded wallets accepted 200,000 in 20 s and 400,000 without losses.

Funding of the classical wallets on 14 Sep was also incomplete (2,919 of 20,000; the funding wallet ran out), so series 03-200k without Dilithium had 154,700 transactions.

The first block of every series is always 1,428 tx (base gas limit 30,000,000), so the "average TPS" of multi-block series is below the peak.

Processing grows almost linearly (~100 µs per transaction): the bottleneck is CPU and disk, there is no superlinearity. Peak node load — up to 19.5 of 24 cores (13 Sep), up to 15.7 cores (14 Sep).

All raw logs (without node.log, which is large) are available as one archive at the top of the page.

Download PDF (EN)Raw logs (ZIP)