Groth16 Tweaks
$$ \gdef\F{\mathbb{F}} \gdef\G{\mathbb{G}} \gdef\g{\mathrm{G}} \gdef\h{\mathtt{H}} \gdef\e{\mathrm{e}} \gdef\Z{\mathrm{Z}} $$
Ethereum cost model
See evm.codes and the yellow paper. Calldata costs $16$ gas per zero bytes with a discounted price of $4$ for zero bytes. So the expected cost of a uniformly random byte is $15.95$ gas. On L1 calldata-gas and gas are the same, on L2s the latter is substantially cheaper.
- $\G_1$ element is 64 bytes uncompressed and costs $1024$ calldata-gas.
- Cost of $\G_1$ point decompression is TBD.
- $\G_2$ element is 128 bytes uncompressed and costs $2048$ calldata-gas.
- Cost of $\G_2$ point decompression is TBD.
- $\G_1$ addition costs $150$ gas.
- $\G_1$ scalar multiplication costs $6000$ gas.
- A $n$-pairing check costs $45\,000 + n ⋅ 34\,000$ gas.
- Keccak hash of $n$ bytes costs $30 + 6 ⋅ \ceil{\frac{n}{32}}$ gas.
- SHA256 hash of $n$ bytes costs $60 + 12 ⋅ \ceil{\frac{n}{32}}$ gas.
A Groth16 verification with $p$ public inputs (excluding constant $w_0 = 1$) costs
$$ 181\,150 + p ⋅ 6150 \text{ gas} + 4096 \text{ calldata gas} $$
This excludes overhead and cost of transferring/computing the public input. This includes the $4$ pairings currently required.
https://eips.ethereum.org/EIPS/eip-196 https://eips.ethereum.org/EIPS/eip-197 https://eips.ethereum.org/EIPS/eip-1108 https://eips.ethereum.org/EIPS/eip-2565
Does it make sense to use point compression on L2s?
Hash public inputs?
What if we use Keccak or SHA256 to hash all public inputs to a single field element, basically fixing $p = 1$.
3 P
Groth16 is well-known to only require 3 pairings, yet Ethereum implementations require 4, this costs an extra $34\,000$ gas that seems avoidable.
Pairing.negate(proof.A), proof.B,
vk.alfa1, vk.beta2,
vk_x, vk.gamma2,
proof.C, vk.delta2
- Instead of negating variable
proof.A
, can negate compile time constantsvk.beta2
,vk.gamma2
andvk.delta2
. (But negating G1 is very cheap)
Can we instead get the $α⋅β⋅\g_3$ term (and add $L_0$) through trusted setup?
$$ L' = γ^{-1} ⋅ \p{α ⋅ β + L_0(τ)} ⋅ \g_1 $$
$$ \begin{aligned} {\overline L} &= \sum_{i ∊ [1, p)} w_i ⋅ \p{γ^{-1} ⋅ L_i(τ) ⋅ \g_1} \\ \end{aligned} $$
then check
$$ \e(A, B) = \e(L' + {\overline L}, γ ⋅ \g_2) + \e(C, δ ⋅ \g_2) $$
Shorter proofs?
Groth16 contains an argument setting lower bounds on proof sizes and structure, but these all assume non-interactive proofs. If we allow for Fiat-Shamir constructions, can we create cheaper proofs?