... | ... | @@ -260,4 +260,34 @@ pub(crate) trait ExecutionGadget< |
|
|
```
|
|
|
代码:https://git.code.tencent.com/chainmaker-zk/zkevm/blob/develop/zkevm-circuits/src/execution/add.rs
|
|
|
|
|
|
# 执行状态的转换流程 |
|
|
\ No newline at end of file |
|
|
# 执行状态的转换流程
|
|
|
|
|
|
某些执行状态之前或之后,需要约束为某个特定的执行状态,比如 end\_block,需要约束之前执行状态是END\_TX或BEGIN\_BLOCK,约束之后执行状态是 BEGIN\_BLOCK 或END\_CHUNK。
|
|
|
|
|
|
constraints.append(&mut config.get_exec_state_constraints(
|
|
|
meta,
|
|
|
ExecStateTransition::new(
|
|
|
// 之前的执行状态约束,没有cond,表示两种执行状态都可以。
|
|
|
vec![ExecutionState::END_TX, ExecutionState::BEGIN_BLOCK],
|
|
|
// 当前 gadget 的 NUM_ROW
|
|
|
NUM_ROW,
|
|
|
// 之后的执行状态约束
|
|
|
vec![
|
|
|
// 如果 next_is_begin_block == 1,下个执行状态是 BEGIN_BLOCK
|
|
|
(
|
|
|
ExecutionState::BEGIN_BLOCK,
|
|
|
begin_block::NUM_ROW,
|
|
|
Some(next_is_begin_block), // 这里为了减少 degree
|
|
|
),
|
|
|
// 如果 next_is_end_chunk == 1,下个执行状态是 END_CHUNK
|
|
|
(
|
|
|
ExecutionState::END_CHUNK,
|
|
|
end_chunk::NUM_ROW,
|
|
|
Some(next_is_end_chunk), // 这里为了减少 degree
|
|
|
),
|
|
|
],
|
|
|
// 和 next_is_begin_block, next_is_end_chunk 作用一样
|
|
|
// vec 内不为0的,对应之后的执行状态
|
|
|
Some(vec![1.expr() - is_zero.expr(), is_zero.expr()]),
|
|
|
),
|
|
|
)); |
|
|
\ No newline at end of file |