目录

Ethereum 配对曲线接口史:BN254 与 Pectra 后的 BLS12-381

precompile、gas、ABI 与迁移边界

Fact boundary, 2026-08-08. Pectra 已于 2025-05-07 10:05:11 UTC 在 Ethereum 主网激活,EIP-2537 已成为执行层能力。本文讨论上线后的 ABI、gas、subgroup checks 与采用边界。

Ethereum 的配对曲线历史由三次接口变化组成:Byzantium 加入 BN254 precompiles,Istanbul 通过 EIP-1108 repricing,Pectra 再加入七个 BLS12-381 precompiles。曲线安全性解释升级动机,precompile 地址和成本决定合约能否消费它。

时间线与能力变化

阶段 规范 新能力 对协议的直接影响
Byzantium EIP-196 BN254 add 0x06、mul 0x07 合约可低成本做 G1 运算
Byzantium EIP-197 BN254 pairing check 0x08 Groth16 等 pairing verifier 获得链上接口
Istanbul EIP-1108 BN254 gas repricing 相同 verifier 的执行成本显著下降
Dencun EIP-4844 KZG point evaluation 0x0a 为 blob/KZG 特定 opening 提供固定接口
Pectra EIP-2537 BLS12-381 0x0b0x11 合约可调用通用 G1/G2、MSM、pairing 和 map-to-curve 运算

EIP-4844 的 0x0a 与 EIP-2537 的七个地址职责不同。前者验证一个带 versioned hash 的 KZG evaluation claim;后者提供通用 BLS12-381 arithmetic。应用不能把二者互换。

BN254:可部署性如何形成路径依赖

EIP-196 规定 32-byte big-endian field elements、(x,y) 点编码和 infinity (0,0)。EIP-197 的 pairing 输入按每对 192 bytes 解析,并对 G2 做 subgroup-order 检查。1 2

初始 gas 与 EIP-1108 后 gas 如下:

BN254 operation Address 初始 gas EIP-1108 后
ECADD 0x06 500 150
ECMUL 0x07 40,000 6,000
pairing, \(k\) pairs 0x08 \(80{,}000k+100{,}000\) \(34{,}000k+45{,}000\)

repricing 改变了 verifier 的可行成本,没有改变曲线、proof system 或既有合约。BN254 随后形成路径依赖:verifying keys、proving stacks、Solidity wrappers 和审计经验都围绕这些地址积累。3

EIP-2537 的动机把 BN254 precompile 的安全级别概括为约 80 bits,将 BLS12-381 定位为 120+ bits。这个数字是协议升级动机中的工程判断;具体安全估计仍受攻击模型和实现影响。4

Pectra 后的 BLS12-381 能力表

Pectra 公告将 EIP-2537 列为主网升级内容,并给出 epoch 364032 的激活时间。七个 precompiles 为:5

Address Operation 固定或基础 gas
0x0b G1 addition 375
0x0c G1 MSM \(12{,}000k\cdot d_1(k)/1000\)
0x0d G2 addition 600
0x0e G2 MSM \(22{,}500k\cdot d_2(k)/1000\)
0x0f pairing check, \(k\) pairs \(32{,}600k+37{,}700\)
0x10 Fp to G1 5,500
0x11 Fp2 to G2 23,800

\(d_1,d_2\) 是 EIP-2537 对 MSM 数量给出的折扣表,\(k>128\) 时使用 capped discount。表中的单点 multiplication 费用来自 MSM 在 \(k=1\) 的情形;规范没有设置独立 MUL 地址。

ABI 与 Encoding

EIP-2537 使用未压缩、32-byte aligned 的大端编码:

对象 编码长度
Fp element 64 bytes,最高 16 bytes 必须为零
Fp2 element 128 bytes,`c0
G1 point 128 bytes,`x
G2 point 256 bytes,`x
scalar 32 bytes
pairing pair 384 bytes,G1 128 + G2 256

G1 MSM 每项是 160 bytes,G2 MSM 每项是 288 bytes。infinity 分别编码为 128 或 256 个零字节。field element 必须严格小于 modulus;32-byte MSM scalar 则不要求小于或等于 subgroup order。无效长度、坐标或群元素导致 error,并烧掉调用提供的全部 gas。

Subgroup Checks 的不对称

ABI 的安全边界不能概括成“precompile 会检查点”:

  • G1/G2 addition 检查编码和曲线成员,不执行 subgroup check;
  • G1/G2 MSM 必须执行 subgroup check;
  • pairing 输入的 G1 与 G2 点都必须位于阶为 \(q\) 的 subgroup;
  • map-to-curve 接收 field element 并输出 subgroup point,但不负责任意 bytes 到 field 的 hash-to-field 步骤。

调用方要按协议数据来源决定 subgroup validation 放在哪一层。把未经验证的 addition 结果当作已验证公钥,会扩大 wrong-subgroup 风险面;坐标不在曲线上的输入仍会被 precompile 拒绝。

上线不等于自动迁移

EIP-2537 消除了通用 BLS12-381 execution precompile 的缺口,同时保留四类 adoption cost:

  1. 已部署 BN254 verifier 的地址、verifying key 与 proof format 不会改变;
  2. Solidity wrappers 和上层协议必须采用新 ABI,并处理未压缩点编码;
  3. 不同操作的 subgroup 职责不同,安全审计需要按调用路径重做;
  4. BLS、KZG 或其他 pairing 协议仍需自己的 domain separation、message binding、SRS 或 proof rules。

因此,Pectra 后的工程问题从“有没有 BLS12-381 precompile”转为“哪个协议值得迁移、迁移后用哪个地址、谁负责输入验证,以及 gas 是否优于现有路径”。

与 EIP-4844 的边界

EIP-4844 在 Pectra 之前已经通过 0x0a 暴露 point-evaluation precompile,固定消耗 50,000 gas。它接收 192 bytes:versioned hash、\(z\)、\(y\)、48-byte commitment 和 48-byte proof,并同时检查 hash binding 与 KZG opening。6

通用 EIP-2537 pairing 可以构造更多 BLS12-381 协议,却不取代 blob transaction 的 consensus validation、sidecars、versioned hashes 或 0x0a 接口。下一篇只展开这条 KZG/blob 专用工作流。

审计清单

  • 用网络 fork/chain configuration 确认 EIP-2537 已激活,避免把测试网或旧客户端状态当主网能力;
  • 核对地址与输入长度,特别是 0x0a0x0f 和 G1/G2 MSM 的差异;
  • 对 64-byte Fp 编码检查最高 16 bytes 与 modulus;
  • 明确 addition 之后的 subgroup validation 责任;
  • 按 EIP 的 floor-length gas 规则和 error path 测试 malformed inputs;
  • 将 curve precompile 验证与 BLS/KZG 上层协议验证分开审计。

Summary

  • BN254 的历史优势来自 Byzantium precompiles 与 EIP-1108 repricing。
  • Pectra 已把 EIP-2537 的 BLS12-381 通用运算带入主网执行层。
  • BLS12-381 ABI 使用未压缩大端编码,addition 与 MSM/pairing 的 subgroup 责任不同。
  • 0x0a 是 EIP-4844 专用 point-evaluation;0x0b0x11 是 EIP-2537 通用曲线运算。
  • 新接口上线后,迁移仍取决于 proof format、合约、库、gas 与协议安全边界。

References


  1. EIP-196: Precompiled contracts for addition and scalar multiplication on alt_bn128, https://eips.ethereum.org/EIPS/eip-196↩︎

  2. EIP-197: Precompiled contracts for optimal ate pairing check on alt_bn128, https://eips.ethereum.org/EIPS/eip-197↩︎

  3. EIP-1108: Reduce alt_bn128 precompile gas costs, https://eips.ethereum.org/EIPS/eip-1108↩︎

  4. EIP-2537: Precompile for BLS12-381 curve operations, https://eips.ethereum.org/EIPS/eip-2537↩︎

  5. Ethereum Foundation, Pectra Mainnet Announcement, https://blog.ethereum.org/2025/04/23/pectra-mainnet↩︎

  6. EIP-4844: Shard Blob Transactions, https://eips.ethereum.org/EIPS/eip-4844↩︎