EIP-2537有哪些BLS预编译? 图 1
EIP-2537有哪些BLS预编译? · 图 1

EIP-2537不是一个“BLS验证接口”,而是一组七类底层曲线运算。合约仍要决定消息域、聚合成员和密钥登记;预编译只把昂贵数学运算交给协议执行。

本文用功能地图区分G1/G2加法、多标量乘法、配对和两种映射,并把编码拒绝条件单独列出。

三个必须保留的事实

  1. 七类预编译地图:EIP-2537提供BLS12-381的G1与G2加法、多标量乘法、配对检查以及从有限域映射到曲线的预编译。
  2. 点编码与子群检查:输入使用固定长度未压缩编码并要求点、域元素与子群满足规范条件;无效编码必须失败,不能静默按模约简。
  3. 配对验证流程:这些运算降低合约验证BLS证明的成本,但不会替应用完成消息域分离、密钥登记、聚合参与者选择或重放保护。

七类运算各自做什么

预编译族作用
G1ADD / G2ADD对相应群中的两个点做加法
G1MSM / G2MSM计算多组“标量×点”之和
PAIRING_CHECK检查一组配对乘积关系
MAP_FP_TO_G1把基础域元素映射到G1
MAP_FP2_TO_G2把扩域元素映射到G2

输入采用规范定义的固定长度、未压缩编码。域元素超出模数、点不在曲线、点不满足子群条件或长度不正确时必须失败,调用方不能先“取模修正”再继续。做聚合签名验证时,PAIRING_CHECK只验证数学等式;参与者公钥是否登记、消息是否做域分离、是否混入重复公钥,仍是上层协议责任。

三个容易造成错误结论的做法

  • 不要这样做:把压缩BLS公钥直接当作预编译输入
  • 不要这样做:对越界域元素静默取模,接受非规范编码
  • 不要这样做:配对等式成立就认为聚合成员和消息来源可信

操作前后逐项勾选

  • 按目标网络分叉配置确认七个预编译地址和Gas表
  • 在链下库与合约端使用同一未压缩编码测试向量
  • 分别测试无效域元素、非曲线点和非子群点
  • 将公钥登记、消息域和参与者集合写入业务验证
  • 升级客户端或跨链部署时重新跑全部向量

用三条路径验收点编码与子群检查

第一条是成功路径。选择一个已经知道结果的对象,执行“按目标网络分叉配置确认七个预编译地址和Gas表”和“在链下库与合约端使用同一未压缩编码测试向量”,同时保存原始输入、原始输出、网络或版本、取证时间。另一位复核者只能读取这些材料,不读取页面上的结论;他需要独立完成七类预编译地图解释。两次结果一致,说明这个样本可复现,但不能据此承诺所有环境都得到相同结果。

第二条是单变量反例。故意制造“把压缩BLS公钥直接当作预编译输入”,并确保其余字段与成功样本完全相同。系统应明确指出哪一项校验失败,保留错误码、返回值或字节差异;若它自行切换默认值、吞掉未知字段或沿用缓存,测试就算失败。然后再针对“对越界域元素静默取模,接受非规范编码”建立独立反例,两个错误不要同时注入。

第三条是状态切换。先完成“分别测试无效域元素、非曲线点和非子群点”取得旧状态,再改变一个会影响协议启用边界的条件并重新查询。旧证据不能被覆盖,新证据也不能倒推旧时点。页面要把对象主键、上下文和时间放在结果旁边,让读者知道结论针对哪次观察。

最终交接包应包含七类预编译地图原文、点编码与子群检查推导、配对验证流程验收和协议启用边界说明。若出现“配对等式成立就认为聚合成员和消息来源可信”,发布状态只能是待核验,并回到“将公钥登记、消息域和参与者集合写入业务验证”补证据。这样可把底层事实错误、环境变化与界面展示错误分开定位。

来源、增量与风险边界

  1. Ethereum Improvement Proposals:正式接口、字段与规范语义。
  2. Consensus Specs Beacon Chain:实现路径、兼容性或安全边界。

本文资料读取于2026-07-20。预编译地址、Gas表与目标网络激活高度属于分叉配置,部署合约前应按当前客户端版本复核。

站内相邻主题可继续阅读:ABI编码检查接口支持检测。曲线预编译降低的是计算成本,不替代密钥治理和重放保护。分叉地址或Gas未确认时不得上线合约。