appliedzkp zkevm(11)中的EVM Proof

1. 引言

EVM Proof用于证明:

  • state trie root的变化是正确的,通过验证一个区块内所包含的交易都具有正确的执行结果。

EVM circuit会重新实现EVM,但是是以验证的角度来验证,即意味着,Prover可帮助提供线索,只要这些线索不会与结果相矛盾。如,Prover可提供关于某call是否将revert的线索,或者某opcode是否将遇到错误的线索,然后该EVM circuit可验证执行结果是正确的。

在区块内包含的交易可以是简单的ether transfers、contraction creation或 contract interactions,因为每笔交易具有可变的execution trace,无法使用固定的circuit layout来验证特定region的特定logic,为此,我们需要a chip来验证所有可能的logics,该chip将自身重复来实现整个circuit。

2. 定制类型

为线索定制了如下类型:

Name Type Description
GlobalCounter int Order of random access to BusMapping, which should be in sequence
BusMapping List[Tuple[int, ...]] List of random read-write access data in sequence with GlobalCounter as index

3. Random Accessible Data

EVM解析器可做any random access to data类似如account balance、account storage、stack in current scope、memeory in current scope,但是对于EVM circuit来说,其很难跟踪这些数据来保证这些数据的实时一致性。
因此,EVM proof具有State proof来提供a valid list of random read-write access records indexed by the GlobalCounter as a lookup table to do random access at any moment。

将random read-write access records list称为BusMapping,因为其作用类似于电脑中的bus,用于在不同部件之间传输数据。类似的,read-only数据以random access方式从lookup table加载。

Target Index Accessible By Description
Block {enum} Read Block constant decided before executing the block
BlockHash {index} Read Previous 256 block hashes as a encoded word array
AccountNonce {address} Read, Write Account’s nonce
AccountBalance {address} Read, Write Account’s balance
AccountCodeHash {address} Read, Write Account’s code hash
AccountStorage {address}.{key} Read, Write Account’s storage as a key-value mapping
Code {hash}.{index} Read Executed code as a byte array
Call {id}.{enum} Read Call’s context decided by caller (includes EOA and internal calls)
CallCalldata {id}.{index} Read Call’s calldata as a byte array (only for EOA calls)
CallSignature {id}.{index} Read Call’s signature as a byte array (only for EOA calls)
CallState {id}.{enum} Read, Write Call’s internal state
CallStateStack {id}.{index} Read, Write Call’s stack as a encoded word array
CallStateMemory {id}.{index} Read, Write Call’s memory as a byte array

3. Circuit Constraints

该重复chip具有2个main states,一个调用初始化,另一个用于bytecode execution。

参考资料

[1] EVM Proof

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/125576616