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
Key numbers
| Metric | Value | Note |
|---|---|---|
| Peak TPS with post-quantum signatures (Ed25519 + Dilithium3) | 14,469 TPS | test bench 14 Sep, 43,408 tx block |
| Peak TPS on the live testnet (13 Sep) | 14,151 TPS | 42,452 tx block |
| Sustained throughput (13 Sep) | ~10,000 TPS | 200,000 tx in 20.0 s |
| Peak TPS without Dilithium (Ed25519 only) | 38,310 TPS | 114,929 tx block |
| New node sync from scratch | ~1 s | to height 919,626 via state snapshot |
| PC node lag behind production | 0 blocks | 20 samples over a minute |
| RPC response over the internet | 0.05–0.16 s | locally 0.00–0.06 s |
| Lost transactions and consensus failures | 0 | in all runs (13 Sep: 1,280,000 tx) |
| Transaction size in the mempool | 3,509 B | post-quantum; plain — 230 B |
| Production node disk | 17 GB | for 919,000 blocks, with pruning |
Contents
- TPS with post-quantum signatures (Ed25519 + Dilithium3)
- TPS without Dilithium (plain Ed25519 signatures) and comparison
- New node sync from scratch (production → PC)
- Network between nodes
- Load on production with the PC attached
- RPC response time
- Neural controller
- Block timing
- Block and transaction size, pruning with archive, disk
- Test conditions and honest caveats
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
Bench 14 Sep (key registry on, 3,509 B per transaction)
| Run | Accepted tx | Blocks (tx) | Peak TPS | Avg TPS | Mempool intake | Peak CPU |
|---|---|---|---|---|---|---|
| 01-20k (2 000 × 10) | 20 000 | 1 428 / 14 285 / 4 287 | 4 762 | 2 222 | 36 292 tx/с | 5,1 ядра |
| 02-60k (2 058 × 10) | 20 580 | 20 580 | 6 860 | 6 860 | 33 971 tx/с | 5,9 ядра |
| 03-200k (2 058 × 20) | 41 160 | 41 160 | 13 720 | 13 720 | 36 437 tx/с | 9,7 ядра |
| 04-120k (2 058 × 60) | 123 480 | 1 428 / 14 285 / 43 408 / 42 701 / 21 658 | 14 469 | 8 232 | 27 088 tx/с | 15,7 ядра |
Live testnet 13 Sep (before key registry, 5,501 B per transaction)
| Run | Accepted tx | Mempool intake | Blocks with tx | Peak per block | Peak TPS | Note |
|---|---|---|---|---|---|---|
| 01-20k | 20,000 | 37,474 tx/s | 1 | 20,000 | 6,667 | spike, not counted in totals |
| 02-60k | 60,000 | 29,499 tx/s | 2 | 41,229 | 13,743 | |
| 03-200k | 200,000 | 30,800 tx/s | 7 | 42,452 | 14,151 | 200,000 tx in 20 s ≈ 10,000 TPS sustained |
| 04-400k | 400,000 | 18,542 tx/s | 20 | 37,567 | 12,522 | |
| 05-200k-control | 200,000 | 31,225 tx/s | 5 | 90,123 | 30,041* | first block had no time budget (~9 s) |
| 06-400k-sustained | 400,000 | 37,121 tx/s | 15 | 37,390 | 12,463 | 0 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
Bench 14 Sep, Ed25519 only
| Run | Accepted tx | Blocks (tx) | Peak TPS | Avg TPS | Mempool intake | Peak CPU |
|---|---|---|---|---|---|---|
| 01-20k (2 000 × 10) | 20 000 | 1 428 / 14 285 / 4 287 | 4 762 | 2 222 | 116 079 tx/с | 1,6 ядра |
| 02-60k (6 000 × 10) | 60 000 | 60 000 | 20 000 | 20 000 | 148 309 tx/с | 3,8 ядра |
| 03-200k (7 735 × 20) | 154 700 | 114 929 / 39 771 | 38 310 | 25 783 | 123 138 tx/с | 10,2 ядра |
Comparison: with and without Dilithium3
| Metric | Ed25519 + Dilithium3 | Ed25519 only | Difference |
|---|---|---|---|
| Peak TPS | 14,469 | 38,310 | ×2.6 |
| Max tx per block | 43,408 | 114,929 | ×2.6 |
| Mempool intake | 27,000–36,400 tx/s | 116,000–148,000 tx/s | ×4 |
| Transaction size in mempool | 3,509 B | 230 B | ×15 |
| Peak node load | 15.7 cores | 10.2 cores | |
| 20k series (2,000 × 10) | 4,762 TPS | 4,762 TPS | identical: 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
Timeline
| Time | PC node height |
|---|---|
| 12:57:43.48 | start |
| 12:57:44 | 0 |
| 12:57:45 | 0 |
| 12:57:46 | 919 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
Metrics
| Metric | Value |
|---|---|
| ping min / avg / max | 8.03 / 9.28 / 10.86 ms |
| loss | 0% (10 of 10) |
| peers of the PC node | 6 |
| connections to production | /udp/30303/quic-v1 and /tcp/30303 |
| lag over a minute | 0 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
Results
| Metric | Value |
|---|---|
| signed | 9,000 in 0.59 s (24 threads) |
| sent | in 0.27 s → intake 33,628 tx/s |
| in blocks | 9,000 of 9,000 |
| per block | 1,428, 7,572 |
| PC | received compact proposals, fetched bodies, committed the same blocks |
| PC data after the test | 163 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
Latency, s
| Call | PC local | Production via internet | Bench local |
|---|---|---|---|
| eth_blockNumber | 0,00 | 0,16 | 0,00 |
| qsn_getMempoolStats | 0,00 | 0,05 | 0,00 |
| qsn_getAllTransactions | 0,00 | 0,08 | 0,11 |
| qsn_getBlocks | 0,01 | 0,09 | 0,26 |
| qsn_getAccounts | 0,06 | 0,10 | 0,03 |
| qsn_getNeuralState | — | — | 0,00 |
| qsn_getValidators | — | — | 0,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
Brain metrics (qsn_getNeuralState / qsn_getBrainMetrics)
| Metric | Before | After |
|---|---|---|
| activeNeurons | 33 | 21 |
| synapseCount | 1 568 | 1 568 |
| adjustmentCount | 19 | 21 (totalSteps) |
| learningRate | 0,01 | — |
| plasticity | 0,8 | — |
| decisionLatencyMs | 10 | — |
| healthScore | 1,0 | 1,0 |
| blockUtilization | 0,138 | 0,007 |
| block gasLimit | 3 000 000 000 | 3 000 000 000 → 825 000 000 |
Gas limit per block
| Height | gasLimit | gasUsed | tx |
|---|---|---|---|
| 896 108–896 115 | 3 000 000 000 | 0 | 0 |
| 896 116 | 3 000 000 000 | 420 000 000 | 20 000 |
| 896 117–896 120 | 3 000 000 000 | 0 | 0 |
| 896 121–896 123 | 825 000 000 | 0 | 0 |
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
Large blocks of the 04-120k series
| Block | tx | Execution | Proposal → commit | Total |
|---|---|---|---|---|
| 896 103 | 43 408 | 0,40 с | 1,38 с | 1,78 с |
| 896 104 | 42 701 | 0,39 с | 1,41 с | 1,81 с |
| 896 105 | 21 658 | 0,29 с | 0,94 с | 1,23 с |
| 896 116 | 20 000 (plain) | 0.10 s | 0.25 s | 0.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
Sizes
| What | Size |
|---|---|
| Post-quantum transaction in mempool | 3,509 B (Dilithium3 signature 3,293 B; key in registry, was 5,501 B) |
| Plain transaction in mempool | 230 B |
| Transaction on disk | ~3.5 KB (LZ4 compression) |
| Block on the wire (compact proposal) | ~32 B per transaction (hashes) |
| Production DB | 17 GB for 919,000 blocks |
| Bench DB | 9.5 GB (dbBytes 5.75 GB) |
| PC node data | 163 MB (snapshot + recent blocks) |
| Mempool: limit | 500,000 tx / 4 GB |
| Mempool: peak 13 Sep | 391,789 tx ≈ 2.15 GB |
Pruning (qsn_getPruningStatus)
| Parameter | Value | Meaning |
|---|---|---|
| keepFullBlocks | 28,800 | the last day of blocks is kept in full, with signatures |
| signaturesPrunedTo | 867,324 (bench) | signatures removed up to this height |
| budgetBytes | 400 GB | above it, old block bodies go to a zstd archive |
| archive | false (bench) / true (production 13 Sep) | whether archive mode is on |
| balances and headers | untouched | state is always complete |
Largest blocks
| Where | Block | tx |
|---|---|---|
| production | 916,045 | 9,072 |
| live testnet 13 Sep (record) | — | 42,452 |
| bench 14 Sep, Dilithium | 896,103 | 43,408 |
| bench 14 Sep, no Dilithium | — | 114,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 Sep | Production replica 14 Sep | PC 14 Sep | |
|---|---|---|---|
| Hardware | server 194.61.89.3: 24 cores, 54 GB RAM, NVMe | same server, same CPU | ordinary home PC, internet |
| Network | Pyuniq testnet, chainId 99991, height ~896,000 | copy of the live chain, height ~896,000 | observer without validator key, RPC 127.0.0.1:39545 |
| Validators | 15 in one process, BFT over an internal bus | 15 in one process | — (follows production) |
| Node version | QNS-core main 3466c83 (+5e5c59c, 5b86b89) | commit be3406e (key registry) | commit c69bcaa (same as production) |
| Transaction | 5,501 B (Dilithium3 3,293 B + key 1,952 B) | 3,509 B (key stored once in the registry) | — |
| Load client | tps_load (Rust), 20,000 senders, 256 connections | tps_load, 2,058 (PQ) / up to 7,735 (plain) senders | tps_load against production, 300 × 30 |
| Block slot | 3 s | 3 s | 3 s |
| State | on disk (RocksDB) | on disk | on disk |
| In parallel | background signature pruning | background 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.
