拓冰建站拓冰建站
首页 / 资讯中心 / 正文

EIP-8149 详解:EIPs 仓库中的 Multi KZG Point Evaluation 预编译——单次调用批量验证多个 Blob 开点

EIP-8149 详解EIPs 仓库中的 Multi KZG Point Evaluation 预编译——单次调用批量验证多个 Blob 开点【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPsEIP-8149 是在 EIPs 仓库中提出的一项 Draft 状态的 Core 类标准提案它为以太坊引入一个新的预编译Precompile用于在一次调用内针对单个 EIP-4844 blob 承诺commitment批量验证多个 KZG 开点(z_i, y_i)并返回与现有单点验证预编译完全一致的 64 字节输出。本文以 EIPS/eip-8149.md 为主体结合其前置依赖 EIPS/eip-4844.md 的规范细节完整讲解该提案的动机、输入输出编码、验证逻辑、Gas 成本模型与安全约束帮助读者理解它在乐观 Rollup 欺诈证明等场景中的价值以及落地时的实现要点。背景EIP-4844 的单点求值预编译与版本化哈希模型EIP-8149 严格建立在前置标准 EIP-4844 Shard Blob Transactions状态 Final之上。EIP-4844 引入了携带 blob 的交易类型并配套了执行层可访问的承诺commitment与版本化哈希versioned hash。其关键常量如下| 常量 | 值 | | - | - | |FIELD_ELEMENTS_PER_BLOB|4096| |BLS_MODULUS|52435875175126190479447740508185965837690552500527637822603658699938581184513| |VERSIONED_HASH_VERSION_KZG|Bytes1(0x01)| |POINT_EVALUATION_PRECOMPILE_ADDRESS|Bytes20(0x0A)| |POINT_EVALUATION_PRECOMPILE_GAS|50000|EIP-4844 在地址0x0A部署了单点求值预编译point evaluation precompile每次调用固定消耗 50,000 gas其输入长度为固定的 192 字节编码为versioned_hash | z | y | commitment | proof其中z和y均为按大端序填充的 32 字节字段元素。预编译执行的逻辑源自 EIPS/eip-4844.md 的point_evaluation_precompile为断言输入长度为 192 字节通过kzg_to_versioned_hash(commitment) versioned_hash校验承诺与版本化哈希匹配其中def kzg_to_versioned_hash(commitment: KZGCommitment) - VersionedHash: return VERSIONED_HASH_VERSION_KZG sha256(commitment)[1:]调用verify_kzg_proof(commitment, z, y, proof)验证 KZG 证明声称多项式p(z) y返回FIELD_ELEMENTS_PER_BLOB与BLS_MODULUS两个按大端序填充的 32 字节值共 64 字节。同时EIP-4844 明确要求该预编译必须拒绝非规范字段元素即提供的字段元素必须严格小于BLS_MODULUS且执行层BLOBHASH操作码、版本化哈希引用不直接暴露 blob 原始数据——合约只能通过版本化哈希与求值预编译间接访问 blob 内容。动机多次开点的成本痛点EIP-4844 的单点求值预编译每次调用固定消耗 50,000 gas。对于需要读取单个 blob 内多个位置数据的合约例如乐观 Rollup 的欺诈证明fraud proof——它需要分步加载 blob 中多个字段值来验证状态转换——若逐个调用0x0A每多验证一个开点就要额外支付 50,000 gas成本随开点数量线性膨胀。EIP-8149 的核心动机正是消除这一重复开销提供一个批量接口在一次预编译调用内验证k个开点从而显著降低多次开点的总成本。这使得 blob 数据访问密集型应用尤其是欺诈证明类场景能够以更低的开销完成多值验证。规范常量、输入与输出EIP-8149 引入四个新常量| 名称 | 值 | 说明 | | - | - | - | |MULTI_POINT_EVALUATION_PRECOMPILE_ADDRESS|TBD| 预编译地址待定 | |MAX_MULTI_POINTS|128| 最大求值点数 | |MULTI_POINT_EVALUATION_BASE_GAS|TBD| 基础 Gas 成本待定 | |MULTI_POINT_EVALUATION_PER_POINT_GAS|TBD| 每个求值点的 Gas 成本待定 |输入编码预编译输入为versioned_hash : Bytes32 commitment : Bytes48 n : uint32 (big-endian) pairs : n × (z: Bytes32, y: Bytes32) proof : Bytes48总长度为132 (n × 64)字节。其中n为开点数量pairs为n组(z, y)对每组 64 字节proof为末尾 48 字节的 KZG 聚合证明。规范强调所有z和y必须严格小于BLS_MODULUS即52435875175126190479447740508185965837690552500527637822603658699938581184513。输出编码成功时返回与 EIP-4844 单点预编译完全一致的 64 字节FIELD_ELEMENTS_PER_BLOB : uint256 (big-endian) BLS_MODULUS : uint256 (big-endian)即4096与BLS_MODULUS两个 32 字节大端整数。保持相同的返回格式使得调用方可以沿用已有的解析逻辑无需为批量预编译编写两套返回值处理。预编译验证逻辑Python 伪代码def multi_point_evaluation_precompile(input: Bytes) - Bytes: versioned_hash input[:32] commitment input[32:80] n int.from_bytes(input[80:84], big) assert 1 n MAX_MULTI_POINTS assert len(input) 132 n * 64 z_values, y_values [], [] for i in range(n): offset 84 i * 64 z_i int.from_bytes(input[offset:offset32], big) y_i int.from_bytes(input[offset32:offset64], big) assert z_i BLS_MODULUS and y_i BLS_MODULUS z_values.append(z_i) y_values.append(y_i) proof input[84 n*64 : 84 n*64 48] assert kzg_to_versioned_hash(commitment) versioned_hash assert verify_kzg_proof_multi(commitment, z_values, y_values, proof) return U256(FIELD_ELEMENTS_PER_BLOB).to_be_bytes32() U256(BLS_MODULUS).to_be_bytes32()伪代码展示了完整的执行流程解析头部读取 32 字节versioned_hash、48 字节commitment与大端序uint32的n边界校验断言1 n MAX_MULTI_POINTS即n至少为 1、至多为 128并断言输入长度精确等于132 n * 64防止畸形输入逐点解析从偏移 84 开始按 64 字节步长解析每组(z_i, y_i)并逐一断言z_i BLS_MODULUS与y_i BLS_MODULUS非规范字段元素直接拒绝读取证明取末尾 48 字节作为聚合 KZG 证明承诺校验与单点版本一致通过kzg_to_versioned_hash(commitment) versioned_hash确认承诺与版本化哈希匹配批量验证调用verify_kzg_proof_multi(commitment, z_values, y_values, proof)一次验证全部开点返回结果返回固定的 64 字节。底层密码学原理verify_kzg_proof_multi使用 EIP-4844 的 trusted setup 与 BLS12-381 配对运算完成多开点验证。规范明确指出两种典型实现路径Lagrange 插值法通过 Lagrange 插值构造经过所有(z_i, y_i)对的多项式复杂度为O(n²)FFT 加速法当求值点对齐于单位根roots of unity时可改用 FFT 方法将复杂度降至O(n log n)。最后一步验证使用单次配对检查single pairing check同时验证所有开点这正是批量验证相对逐点验证的成本优势来源——多个开点的验证工作被聚合到一次密码学运算中。Gas 成本模型EIP-8149 的 Gas 成本定义为def gas_cost(n: int) - int: return MULTI_POINT_EVALUATION_BASE_GAS MULTI_POINT_EVALUATION_PER_POINT_GAS * n其中MULTI_POINT_EVALUATION_BASE_GAS为基础成本覆盖输入解析与承诺校验等固定开销MULTI_POINT_EVALUATION_PER_POINT_GAS为每个求值点的边际成本n为开点数量。规范要求批量必须更便宜Gas 常量应确保对于n 1批量调用总成本低于n次独立的0x0A每次 50,000 gas调用之和反映真实计算成本BLS12-381 配对运算是计算密集型的Gas 定价必须反映实际的密码学计算开销避免出现 Gas 计量与实际工作量严重背离的情况。值得注意的是两个 Gas 常量目前均为TBD待定说明该提案仍处于设计完善阶段最终数值需要结合基准测试与实现成本确定——这也与它 Draft 的状态一致。设计权衡RationaleEIP-8149 的 Rationale 部分明确了三个关键设计决策保留 EIP-4844 的版本化哈希模型与返回格式不改变kzg_to_versioned_hash语义也不改变返回的FIELD_ELEMENTS_PER_BLOB | BLS_MODULUS64 字节结构最大限度降低合约集成成本并保持对后续承诺格式升级版本化哈希设计正是为此预留的兼容性新增预编译而非修改0x0A修改现有预编译存在兼容性风险——现有合约对0x0A的输入长度固定 192 字节和语义已有依赖新增预编译可以完全规避对已部署合约行为的任何影响MAX_MULTI_POINTS 128平衡输入尺寸与收益128 的上限把单次调用输入控制在132 128 × 64 8324字节以内避免输入过大带来的区块/内存压力同时为批量验证保留了有意义的节省空间。向后兼容性EIP-8149 明确声明不修改EIP-4844 的任何既有机制不改变 blob 交易blob transactions的格式与语义不改变BLOBHASH操作码0x49成本 3 gas不改变地址0x0A上既有的单点求值预编译。因此该提案是一个纯增量式扩展新增的预编译地址不会与任何现有 precompile 冲突现有依赖 EIP-4844 的合约行为完全不受影响。安全考量EIP-8149 规范了三条硬性安全要求拒绝非规范字段元素任何 BLS_MODULUS的z或y必须被拒绝伪代码中通过逐点断言强制执行。这防止了利用字段约化歧义绕过验证的攻击面复用 EIP-4844 的 trusted setup 与子群检查实现 MUST 使用与 EIP-4844 完全相同的可信设置参数并执行相同的子群subgroup检查确保承诺与证明的编码合法性Gas 定价必须反映实际计算成本由于内部依赖 BLS12-381 配对运算若 Gas 定价过低恶意调用者可能以远低于计算成本的价格滥用预编译形成针对执行客户端的 DoS 向量同时定价也不能高到削弱批量验证的经济价值。此外输入长度精确断言len(input) 132 n * 64与1 n 128的边界检查共同构成了对畸形输入的第一道防线。状态与实现指引截至当前仓库快照EIP-8149 处于Draft草案状态类型为 Standards Track / Core创建于 2026-02-06作者为 Chris Mataprotocolwhisper依赖 EIP-4844。MULTI_POINT_EVALUATION_PRECOMPILE_ADDRESS、MULTI_POINT_EVALUATION_BASE_GAS、MULTI_POINT_EVALUATION_PER_POINT_GAS三个常量均标记为TBD尚待最终确定。对于希望跟进或实现该提案的读者可以从以下仓库文件入手提案正文EIPS/eip-8149.md前置依赖规范EIPS/eip-4844.md重点阅读其 Point evaluation precompile 小节与 Cryptographic Helpers 部分理解verify_kzg_proof、verify_blob_kzg_proof_batch等底层函数的语义提案的版权声明指向仓库根目录的 LICENSE.mdCC0 协议该提案的落地将直接惠及需要从单一 blob 承诺中提取多个字段值的合约尤其是乐观 Rollup 欺诈证明中按需加载 blob 多个数据块、再通过求值预编译逐值验证的场景——将原本多次 50,000 gas 的调用压缩为一次批量验证是 blob 数据可用性之上执行层数据访问成本优化的重要一步。【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门