Skip to content

Performance ​

Results of one-hour constant-rate load tests against a three-validator testnet. They describe this hardware and setup, not a protocol limit.

Setup ​

Validators3, each a VM: 8 vCPU (Intel Core i5-14400F, host-passthrough), 10–12 GB RAM, NVMe-backed disk
Loadbkc-loadgen (in bkc-chain/bench): 600 accounts, ML-DSA-signed MsgSend, ~5.5 KB each, constant rate
Configtimeout_commit 0.5 s, timeout_propose 3 s, mempool 10,000
Measuredcommitted tx/s, block interval, submit-to-commit latency, consensus rounds

Results ​

OfferedCommitted (avg)Peak (60 s window)Latency p50Latency p99Committed ≤ 2 sRejected
70 tx/s70.0 tx/s73.3 tx/s0.92 s2.2 s98.6%0
100 tx/s100.0 tx/s133.8 tx/s1.04 s9.0 s95.5%0
110 tx/s110.0 tx/s161.8 tx/s1.11 s23.1 s—0

Every run committed 100% of submitted transactions with no consensus errors. Blocks average ~1 s; at 100–110 tx/s a few blocks per hour fill to the 500-transaction cap and take 10–25 s (see below), which is what the p99 reflects. Peaks above the offered rate are the chain draining the mempool after such a block.

What limits it ​

  • Single-core CPU speed. The same 70 tx/s load on a Xeon Silver 4210 ran at p99 23.4 s and saturated near 61 tx/s at an offered 100 tx/s; on the i5-14400F (≈3× faster per core) it runs at p99 2.2 s.
  • Full blocks and timeout_propose. When a backlog builds, the next block fills to 500 transactions; if building it takes longer than timeout_propose (3 s), consensus moves to another round and the block lands 10–25 s late. Raising timeout_propose shortens these stalls.
  • Anything else on the validator's CPU. Public RPC traffic on a validator, or other workloads on the same physical host, measurably increased stalls. Serve RPC from a full node.
  • Database size. Runs on a fresh database stalled less than the same load on a database tens of GB large.
  • Hard ceiling per block: block.max_gas / declared gas = 500 signed sends per block.

Storage ​

LoadValidator, indexer offFull node, kv indexer
70 tx/s~2.5 GB/h~9.4 GB/h
100 tx/s~4 GB/h~13 GB/h

Reproducing ​

bash
cd bkc-chain
go build -o bkc-loadgen ./cmd/bkc-loadgen
./bkc-loadgen --node http://localhost:26657 --chain-id bkc-testnet --home ~/.BKC --keyring-backend test \
  --funder-key <funded-key> --accounts 600 --txs-per-account 430 --mix bank=100 \
  --gas 400000 --gas-prices 5000000bkc --rate 70 --duration 3600s --warmup 60s --drain 120s \
  --workers 128 --tx-latency --out ./bench-70tps

--rate-profile 100:5m,150:5m,200:5m steps the rate within one run.

BKC testnet is unaudited. Do not hold value on it.