... | ... | @@ -318,8 +318,6 @@ bytecode可能存在一种情况,在bytecode末尾的PUSH可能存在push字 |
|
|
|
|
|
按照正常流程,pc跳转执行bytecode,并不会执行到这部分代码,但是zkevm在解析bytecode是从前向后按照顺序解析,就会出现将metadata的数据解析为无效OPCODE的情况
|
|
|
|
|
|
查看议题:https://git.code.tencent.com/chainmaker-zk/zkevm/issues/72
|
|
|
|
|
|
### 方案
|
|
|
|
|
|
生成bytecode witness时,对bytecode进行处理,当PUSHX后面的字节数量不够X个,用`0` padding到X个,这些padding行使用` is_padding`进行标识,如果是padding行,则`is_padding`的值为1。并新增一个`length`,用来记录有效code的长度(除了padding行的有效行),这种情况下的最后一个有效行就是`addr != 0 &&addr_nochange_next && is_padding == 0 && is_padding_next == 0 `
|
... | ... | |