verifier.cash

Build the smallest Groth16 verifier that runs on Bitcoin Cash.

Bitcoin Cash's recent upgrades unlocked the power to run a Groth16 verifier on chain. New primitives like bounded loops and reusable functions let us greatly optimize its program size, and the challenge is to push it as small as possible.i

Smallest full verifieri
3.7 KB
3,705 B · BLS12-381
✗ not within BCH VM limits
Best BCH-native verifieri
33 KB
33,179 B across inputs · BN254
within BCH VM limits
Verifier sub-programsi
5
one per input, chained · BN254
fits in 1 standard transaction
Frontier
← smaller / cheaper is betterbigger →
Toorik
33 KB · BN254
kallisti
4.6 KB · BN254
sCrypt
11.7 MB · BN254

What this measures

How it works →

The same Groth16 verifier shows up as two very different numbers. On BN254, as one input it is just 4.6 KB, the smallest form on record, but only possible because it ignores any compute constraints, so it can't run on chain. To fit the VM limits, the work is split across 5 inputs, bringing the total to 33 KB.

That ~7.2× gap is the whole price of fitting the BCH VM's per-input limits. The floor is only that small because its op-cost is far beyond what the VM allows any input, so it can never run on BCH. A verifier that fits pays for compute with longer, cheaper-to-execute code, and runs on BCH today. Entries are scored on total on-chain bytes, since bytes are what a user pays in fees.

How could we solve this? →Why does it even matter? →

BCH contract limits (per input)
Unlocking bytecode
10,000 B
Op-cost budget
8.0M

A full verifier needs far more bytes and compute than any single input allows, so it has to run as a chain of smaller inputs that each stay under both limits.

Score history

Best BCH-native verifier size over time, lower is better. Down 98% since the first fitting build.

1.8 MB
922 KB
32 KB
Jun 19, 2026Sep 05, 2026

Leaderboard

20 BN254 Groth16 verifiers · ranked by total on-chain bytes

Best score
4,587
bytes · BN254
Best BCH-native
33,179
bytes · BN254
#SolverCurveStructureSize (B)PublishedBCH
1kallistigroth16-singleton-genpowBN254single transactionsingle input4,587Sep 5, 2026 VM limits
2mr-zwetsgroth16-singleton-opcode-optimizedOpus 4.8 (1M context)BN254single transactionsingle input6,584Jun 29, 2026 VM limits
3mr-zwetsgroth16-singletonOpus 4.8 (1M context)BN254single transactionsingle input8,734Jun 22, 2026 VM limits
4Toorikgroth16-intratx-pairfold5-denslessGrok 4.6BN254single transactionmulti input (5)33,179Sep 5, 2026 fits BCH
5kallistigroth16-intratx-pairfold5-pevalfuseBN254single transactionmulti input (5)36,836Sep 5, 2026 fits BCH
6Toorikgroth16-intratx-pairfold5Grok 4.5BN254single transactionmulti input (5)44,968Aug 11, 2026 fits BCH
7Toorikgroth16-intratx-pairfold7Grok 4.5BN254single transactionmulti input (7)54,483Jul 23, 2026 fits BCH
8mr-zwetsgroth16-intratx-residue-largeFable 5BN254single transactionmulti input (4)58,760Jul 15, 2026bch-spec
9mr-zwetsgroth16-singleton-minopFable 5BN254single transactionsingle input58,870Jul 15, 2026 VM limits
10Toorikgroth16-intratx-crown8-rawchainGPT-5.6 terraBN254single transactionmulti input (8)77,193Jul 19, 2026 fits BCH
11Toorikgroth16-intratx-direct-state-publicGPT-5.6 solBN254single transactionmulti input (10)83,294Jul 17, 2026 fits BCH
12kallistigroth16-intratx-residueGPT-5.6 solBN254single transactionmulti input (11)86,950Jul 15, 2026 fits BCH
13kallistigroth16-chunked-covenant-residueGPT-5.6 solBN254multi transaction (12)multi input (12)93,802Jul 15, 2026 fits BCH
14Toorikgroth16-intratx-generalOpus 4.8 (1M context)BN254single transactionmulti input (13)95,201Jul 15, 2026 fits BCH
15kallistigroth16-grouped-residueGPT-5.6 solBN254multi transaction (3)multi input (26)225,877Jul 14, 2026 fits BCH
16kallistigroth16-intratxGPT-5.6 solBN254single transactionmulti input (31)234,022Jul 15, 2026non standard
17kallistigroth16-groupedGPT-5.6 solBN254multi transaction (4)multi input (31)234,301Jul 15, 2026 fits BCH
18kallistigroth16-chunkedGPT-5.6 solBN254multi transaction (32)multi input (32)239,773Jul 15, 2026 fits BCH
19Toorikgroth16-chunked-covenantOpus 4.8 (1M context)BN254multi transaction (49)multi input (49)473,475Jun 23, 2026non standard
20scrypt-bn256baselineBN254single transactionsingle input11,717,771Jul 23, 2022 VM limits