EIP-7545: Verkle 证明验证预编译
    
    
      
        
       
    
    
      
        
       
    
  
  添加一个预编译合约以帮助 dapps 验证 verkle 证明
| Authors | Guillaume Ballet (@gballet), Diederik Loerakker (@protolambda) | 
|---|---|
| Created | 2023-10-13 | 
| Discussion Link | https://ethereum-magicians.org/t/verkle-proof-verification-precompile/16274 | 
摘要
本 EIP 提议添加一个预编译合约,以便为无状态以太坊环境中的智能合约提供最新的状态证明验证能力。
动机
为无状态以太坊提出的证明系统需要对许多工具和应用程序进行升级,这些工具和应用程序需要一个简单的途径来保持其证明系统的更新,而无需每次必须支持另一种证明格式时都开发和部署新的证明库。
规范
本文档中的关键词 “MUST”、”MUST NOT”、”REQUIRED”、”SHALL”、”SHALL NOT”、”SHOULD”、”SHOULD NOT”、”RECOMMENDED”、”NOT RECOMMENDED”、”MAY” 和 “OPTIONAL” 必须按照 RFC 2119 和 RFC 8174 中的描述进行解释。
在地址 0x21 处添加一个预编译合约,包装无状态以太坊的证明验证函数。
预编译的 input 是以下字段的紧密打包的串联:
version(1 字节) 指定应使用哪个版本的无状态证明验证函数。 版本 0 用于 MPT,版本 1 用于 EIP-6800 中使用的多项式承诺方案 multiproof。state_root(32 字节) 指定证明所针对的状态根。proof_data(任意长度)是证明数据。
预编译的伪代码行为:
def proof_verification_precompile(input):
    version = input[0]
    state_root = input[1:33]
    proof_data = input[33:33+proof_data_size]
    if version == 0:
        proof = deserialize_proof(state_root, proof_data)
        return verify_mpt_multiproof(proof)
    if version == 1:
        proof = deserialize_proof(state_root, proof_data)
        return verify_pcs_multiproof(proof)
    
    return 0
如果 version 是 0,则证明应遵循共识规范中“the verge”提案中描述的 SSZ 格式。
如果预编译能够验证证明,则返回 1,否则返回 0。
Gas 成本
| 常量名称 | 成本 | 
|---|---|
POINT_COST | 
      待定 | 
POLY_EVAL_COST | 
      待定 | 
预编译成本为:
cost = (POINT_COST + 1)*len(get_commitments(input)) + POLY_EVAL_COST * [leaf_depth(key, get_tree(input)) for key in get_keys(input))]
其中:
get_commitments提取证明中编码在input中的承诺列表get_keys提取证明中编码在input中的密钥列表leaf_depth返回树中叶子的深度get tree从input重新构建树的无状态视图
理由
无状态以太坊依赖于使用高级数学概念和来自快速发展的密码学领域的工具的证明。 因此,在证明格式的选择中,目前倾向于软分叉方法:证明将在共识之外分发,并且将来,无状态客户端将能够选择他们喜欢的证明格式。
这给一些应用程序(例如桥)带来了负担,因为它们可能需要支持在桥合约发布后设计的证明格式。
将证明验证负担委托给版本感知的预编译将确保这些应用程序可以支持更新的证明原语,而无需升级其合约。
向后兼容性
未发现向后兼容性问题。
测试用例
待办
参考实现
WIP
- 在 Optimism 中的首次实现,ethereum-optimism/op-geth 的 pull request #192,作者为 @protolambda
 
安全考虑
需要讨论。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Guillaume Ballet (@gballet), Diederik Loerakker (@protolambda), "EIP-7545: Verkle 证明验证预编译 [DRAFT]," Ethereum Improvement Proposals, no. 7545, October 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7545.