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