appliedzkp的zkevm概览

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了appliedzkp的zkevm概览相关的知识,希望对你有一定的参考价值。

1. zkevm介绍

当前,以太坊中的每个节点,需在虚拟机内验证以太坊中的每笔交易。且当有新的节点加入时,该新节点需同步所有历史交易。为此,需要:

  • 1)构建支持智能合约的zkrollup
  • 2)为每个以太坊区块构建validity证明

即意味着,要为 EVM + state reads/writes + signatures 构建proof of validity。

因此,zkevm中的proof分为2大类:

  • 1)State proof:用于证明state/memory/stack ops的正确执行。此时,不会检查读写位置是否正确。允许prover选择任意位置,在EVM proof中来证明其正确性。
  • 2)EVM proof:会检查在正确的时间执行了正确的opcode。会检查这些opcodes的validity。同时证明,对于每个opcode,相应的state proof中执行了正确的操作。

只要以上2个proof验证通过,即可证明以太坊区块的正确执行。

2. 术语

  • L1 contract:部署在以太坊主网的合约
  • zkevm verifier:为L1 contract,用于验证zkevm proofs
  • L2 contract:部署在zkrollup层的合约。即使用zkevm verifier来证明transactions calling that smart contract are correct。
  • l1tx:为用户发送的用于与L1 contract交互的交易
  • l2tx:为用户发送的用于部署L2 contract或与L2 contract交互的交易
  • Coordinator:接收用户发送的l2tx,验证该l2tx,生成witness和proof,然后发送给zkevm verifier。使用l1tx来给zkevm verifier提供proof。
  • User:在L2层部署合约或与智能合约交互的一方。
  • Opcodes:为EVM opcodes。
  • Slot:当证明每个EVM opcode的validity时,使用Slot来限定constraints的梳理。如假设一个slot有100个constraints,则意味着当需要证明Mul opcode和Add opcode时,均使用100个constraints。即时其实际需要的constraints数量少于100,也约定每个opcode使用的constraints固定为100。
  • MultiSlot opcodes:某些opcodes需要多个slot,意味着需增加slot_counter计数,而不是增加program counter计数。
  • Program Counter:为EVM中当前执行的opcode所在位置。随着每个opcode增加。当有新的合约调用时,该值初始化为0。
  • Slot Counter:对于需要多个slot的opcode,为了跟踪具体执行的位置,引入了slot counter,随着每个slot自增。用于跟踪multislot opcode何时运行结束。
  • Global Counter:随着每个opcode自增的计数器。
  • Bus Mapping:类似于传统电脑中的Bus,将memory和storage的数据传输给CPU。此处用于表示将state proof中的数据传输至EVM proof。

3. 变量

  • bus_mapping:用于将storage, memory和stack ops的信息传输至EVM proof。
  • global_counter:随着EVM proof中每个slot自增。
  • call_id:当前执行的transaction/separate call上下文对应的id。
  • program_counter:需验证的program_index对应的opcode。
  • program_index:为L2合约bytecode中opcode的位置。
  • mem:为memory key-value mapping of global_counter->index->value。
  • memory_op:定义memory action的类型。如0为读,1为写。
  • Storage:为storage读写对应的key-value mapping:global_counter->index->value。
  • storage_op:定义storage op的类型。
  • Stack:为每个stack op对应的key-value mapping。
  • stack_op:定义stack op的类型。
  • opcode:为当前执行的opcode。

参考资料

[1] https://hackmd.io/bF-_y4OVQMyBHQMFG7tYpA
[2] https://hackmd.io/HfCsKWfWRT-B_k5j3LjIVw

以上是关于appliedzkp的zkevm概览的主要内容,如果未能解决你的问题,请参考以下文章

appliedzkp zkevm中的Bytecode Proof

appliedzkp zkevm(10)中的Transactions Proof

appliedzkp的zkevm(12)State Proof

appliedzkp zkevm(11)中的EVM Proof

appliedzkp的zkevmBus mapping

appliedzkp的zkevmWord Encoding