|
|
|
# Bytecode
|
|
|
|
|
|
Bytecode电路用于约束智能合约的字节码,并为其他电路提供字节码的来源依据。通过Lookup约束,其他子电路可以验证操作的字节码是否合法。
|
|
Bytecode电路用于约束智能合约的字节码,并为其他电路提供字节码的来源依据。通过Lookup约束,其他子电路可以验证操作的字节码是否合法。
|
|
|
|
|
|
在Bytecode表中存放的可能不仅仅是一个合约的字节码,不同合约的字节码以地址(address)进行标识,每个地址唯一对应一个字节码。对于一个合约的字节码来说,`pc`是opcode或者no_code(push的byte)唯一的标识。
|
|
在Bytecode表中存放的可能不仅仅是一个合约的字节码,不同合约的字节码以地址(address)进行标识,每个地址唯一对应一个字节码。对于一个合约的字节码来说,`pc`是opcode或者no_code(push的byte)唯一的标识。
|
... | @@ -67,7 +69,7 @@ ADD |
... | @@ -67,7 +69,7 @@ ADD |
|
假设 addr 为 0xaa,则表格如下:
|
|
假设 addr 为 0xaa,则表格如下:
|
|
|
|
|
|
| addr | pc | bytecode | acc_hi | acc_lo | value_hi | value_lo | cnt | is_high |
|
|
| addr | pc | bytecode | acc_hi | acc_lo | value_hi | value_lo | cnt | is_high |
|
|
| ---- | ---- | -------- | ------ | ------------------------------- | -------- | --------------------------------- | ---- | ------- |
|
|
| ---- | --- | -------- | ------ | ------------------------------- | -------- | --------------------------------- | --- | ------- |
|
|
| 0xaa | 0 | PUSH1 | 0x0 | 0x0 | 0x0 | 0xa | 1 | 0 |
|
|
| 0xaa | 0 | PUSH1 | 0x0 | 0x0 | 0x0 | 0xa | 1 | 0 |
|
|
| 0xaa | 1 | 0xa | 0x0 | 0xa | 0x0 | 0xa | 0 | 0 |
|
|
| 0xaa | 1 | 0xa | 0x0 | 0xa | 0x0 | 0xa | 0 | 0 |
|
|
| 0xaa | 2 | PUSH17 | 0x0 | 0x0 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 17 | 1 |
|
|
| 0xaa | 2 | PUSH17 | 0x0 | 0x0 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 17 | 1 |
|
... | | ... | |