|
|
|
# Witness
|
|
|
|
|
|
## 简介
|
|
## 简介
|
|
|
|
|
|
证据Witness是一张大表格,列数对应着zk电路里的列column,行数则依据执行轨迹而定。
|
|
证据Witness是一张大表格,列数对应着zk电路里的列column,行数则依据执行轨迹而定。
|
|
|
|
|
|
Witness的列也可以按照功能拆分,拆分成Core, State, Bytecode的子表格,像子电路一样。子表格决定着子电路的列的设置,数值的填入,也间接决定着约束的设置。它也是从EVM程序的执行轨迹到zk电路逻辑的中间形式。因此,子表格的设计是整个zkEVM设计的重点。
|
|
Witness的列也可以按照功能拆分,拆分成Core, State, Bytecode的子表格,像子电路一样。子表格决定着子电路的列的设置,数值的填入,也间接决定着约束的设置。
|
|
|
|
|
|
代码里,不同子表格使用`Vec<Row>`来表示,例如Core子表格就是`Vec<core::Row>`。结构体Row是所需数值的集合,例如`struct Row { pc: U256, opcode: U256};`。而Witness就是将子表格集合起来的结构体:
|
|
代码里,不同子表格使用`Vec<Row>`来表示,例如Core子表格就是`Vec<core::Row>`。结构体Row是所需数值的集合,例如`struct Row { pc: U256, opcode: U256, ... };`。而Witness就是将子表格集合起来的结构体:
|
|
```rust
|
|
```rust
|
|
pub struct Witness {
|
|
pub struct Witness {
|
|
pub bytecode: Vec<bytecode::Row>,
|
|
pub bytecode: Vec<bytecode::Row>,
|
... | @@ -14,6 +16,7 @@ pub struct Witness { |
... | @@ -14,6 +16,7 @@ pub struct Witness { |
|
pub public: Vec<public::Row>,
|
|
pub public: Vec<public::Row>,
|
|
pub state: Vec<state::Row>,
|
|
pub state: Vec<state::Row>,
|
|
pub arithmetic: Vec<arithmetic::Row>,
|
|
pub arithmetic: Vec<arithmetic::Row>,
|
|
|
|
......
|
|
}
|
|
}
|
|
```
|
|
```
|
|
|
|
|
... | | ... | |