• appliedzkp zkevm(10)中的Transactions Proof


    1. 引言

    transactions proof会:

    • 验证每笔交易的签名;
    • 验证transactionsRoot对应的merkle patricia trie中刚好包含了所有的交易(不多不少);
    • 使得EVM proof可通过transaction table访问transactions data。

    2. Transcation encoding

    存在不同的交易编码方式。在第一版本的zkEVM将仅支持兼容EIP-155的Legacy transaction。未来将支持Non-Legacy (EIP-2718)transactions。

    2.1 Legacy Transaction encoding

    Legacy type为:

    rlp([nonce, gasPrice, gas, to, value, data, sig_v, r, s])
    
    • 1
    • 在BIP-155之前,待签名的hashed data为:(nonce, gasprice, gas, to, value, data) with sig_v = {0,1} + 27
    • 在EIP-155之后,待签名的hashed data为:(nonce, gasprice, gas, to, value, data, chain_id, 0, 0) with sig_v = {0,1} + CHAIN_ID * 2 + 35

    其中的{0,1}表示的curve point y y y坐标的极性,该curve point对应为secp256k1签名过程中的公钥。

    2.2 Non-Legacy (EIP-2719) Transaction encoding

    根据:

    Non-Legacy类型为:

    0x02 || rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas, destination, amount, data, access_list, signature_y_parity, signature_r, signature_s])
    
    • 1

    待签名的hashed data为:待定。

    3. Circuit behaviour

    Transactions proof证明电路中对应的public inputs有:

    • chain_id
    • transactionsRoot

    每笔交易由以下参数定义:

    • (nonce, gas_price, gas, to, value, data, sig_v, sig_r, sig_s)

    其中可用作public inputs的参数有:

    • (nonce, gas_price, gas, to, value, data, from)

    Transactions proof证明电路的验证逻辑为:

    • 1)txSignData: bytes = rlp([nonce, gas_price, gas, to, value, data, chain_id, 0, 0])
    • 2)txSignHash: word = keccak(txSignData)
    • 3)sig_parity: {0, 1} = sig_v - 35 - chain_id / 2
    • 4)ecdsa_recover(txSignHash, sig_parity, sig_r, sig_s) = pubKey 或等价为 verify(txSignHash, sig_r, sig_s, pubKey) = true
    • 5)fromAddress = keccak(pubKey)[-20:]

    其中:

    • 第1)步中对交易参数的rlp编码将采用定制的rlp encoding gadget来实现,以区分(不同于)MPT circuit中使用的rlp encoding。
    • 第2)步中的待签名消息keccak hash验证将采用keccak circuit。该tx circuit将实现一个单独的对应keccak 的lookup table(使用RLC将rlp encoded transaction类加紧一个single value内)。
    • 第3)步中根据待签名消息和签名恢复公钥将采用ECDSA circuit。该tx circuit将实现一个对应ECDSA的lookup table。
    • 第5)步中的公钥keccak hash验证将采用keccak circuit。该tx circuit将实现一个对应keccak的lookup table。

    根据以上信息,构建了TxTable:

    0 TxID1 Tag2 Index3 value
    TxContextFieldTag
    $TxIDNonce0$value: raw
    $TxIDGas0$value: raw
    $TxIDGasPrice0$value: rlc
    $TxIDGasTipCap0$value: 0
    $TxIDGasFeeCap0$value: 0
    $TxIDCallerAddress0$value: raw
    $TxIDCalleeAddress0$value: raw
    $TxIDIsCreate0$value: raw
    $TxIDValue0$value: rlc
    $TxIDCallDataLength0$value: raw
    $TxIDCallData$ByteIndex$value: raw

    其中:

    • Gas = gas
    • GasTipCap = 0
    • GasFeeCap = 0
    • CallerAddress = fromAddress
    • CalleeAddress = to
    • IsCreate = 1 if to is None else 0
    • CallDataLength = len(data)
    • CallData[KaTeX parse error: Can't use function '\]' in math mode at position 10: ByteIndex\̲]̲ = data\[ByteIndex]

    参考资料

    [1] zkEVM-specs Transactions proof

  • 相关阅读:
    【Elastic-2】SpringBoot整合ELK、SpringBoot写ES
    全能代码生成器,自动生成前后端代码、生成项目框架、生成JavaBean、生成数据库文档、自动化部署项目(TableGo v8.0.0)
    列表类型高级用法
    Nodejs的安装以及配置(node-v12.16.1-x64.msi)
    C++文件服务器项目—FastDFS—1
    【Redux】异步action与同步action
    报告解读下载 | 7月《中国数据库行业分析报告》重磅发布!精彩抢先看!
    干货!Python四大常用绘图库,深度解析
    [代码随想录]回溯、贪心算法篇
    qt 自定义颜色选择器
  • 原文地址:https://blog.csdn.net/mutourend/article/details/125493524