|
|
## memory chunk
|
|
|
# memory chunk
|
|
|
|
|
|
memory\_chunk 是 auxiliary 中的一个变量,保存了当前 opcode 执行完成之后,memory 的 byte size。与之对应的是常用的 memory\_chunk\_prev,指的是opcode 执行之前的数值,通常通过读取上一opcode的auxiliary获取。
|
|
|
|
|
|
> trace 打印出来,memory 有多少行,memory chunk 就是多少。由于 EVM 生成的 trace 的 memory 是执行前,所以使用preprocess\_trace 这个函数,处理成,每个 trace step 对应的 memory 是执行之后的。
|
|
|
|
|
|
### 约束实现
|
|
|
## 约束实现
|
|
|
|
|
|
1. 首先需要计算出访问到的内存段的右区间 offset\_bound = offset + size。
|
|
|
|
... | ... | @@ -13,7 +13,7 @@ memory\_chunk 是 auxiliary 中的一个变量,保存了当前 opcode 执 |
|
|
3. 跟据上述计算,可以计算出当前步骤执行完之后 memory 的正确数值 memory\_chunk\_to,那么在get\_auxiliary\_constraints 传入相关的delta memory\_chunk: ExpressionOutcome::To(memory\_chunk\_to)进行约束。
|
|
|
|
|
|
|
|
|
### call 时的 context 转换
|
|
|
## call 时的 context 转换
|
|
|
|
|
|
因为 call 同时对memory进行两次 access,所以需要两次 memory\_expansion,上下文转换和 stack\_pointer 类似,不赘述。
|
|
|
|
... | ... | |