|
|
# Bytecode
|
|
|
|
|
|
Bytecode电路用于约束智能合约的字节码,并为其他电路提供字节码的来源依据。通过Lookup约束,其他子电路可以验证操作的字节码是否合法。
|
|
|
|
|
|
在Bytecode表中存放的可能不仅仅是一个合约的字节码,不同合约的字节码以地址(address)进行标识,每个地址唯一对应一个字节码。对于一个合约的字节码来说,`pc`是opcode或者no_code(push的byte)唯一的标识。
|
... | ... | @@ -66,30 +68,30 @@ ADD |
|
|
|
|
|
假设 addr 为 0xaa,则表格如下:
|
|
|
|
|
|
| addr | pc | bytecode | acc_hi | acc_lo | value_hi | value_lo | cnt | is_high |
|
|
|
| ---- | ---- | -------- | ------ | ------------------------------- | -------- | --------------------------------- | ---- | ------- |
|
|
|
| 0xaa | 0 | PUSH1 | 0x0 | 0x0 | 0x0 | 0xa | 1 | 0 |
|
|
|
| 0xaa | 1 | 0xa | 0x0 | 0xa | 0x0 | 0xa | 0 | 0 |
|
|
|
| 0xaa | 2 | PUSH17 | 0x0 | 0x0 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 17 | 1 |
|
|
|
| 0xaa | 3 | 0x2 | 0x2 | 0x0 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 16 | 1 |
|
|
|
| 0xaa | 4 | 0x3 | 0x203 | 0x0 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 15 | 0 |
|
|
|
| 0xaa | 5 | 0x4 | 0x203 | 0x4 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 14 | 0 |
|
|
|
| 0xaa | 6 | 0x5 | 0x203 | 0x405 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 13 | 0 |
|
|
|
| 0xaa | 7 | 0x6 | 0x203 | 0x40506 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 12 | 0 |
|
|
|
| 0xaa | 8 | 0x7 | 0x203 | 0x4050607 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 11 | 0 |
|
|
|
| 0xaa | 9 | 0x8 | 0x203 | 0x405060708 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 10 | 0 |
|
|
|
| 0xaa | 10 | 0x9 | 0x203 | 0x40506070809 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 9 | 0 |
|
|
|
| 0xaa | 11 | 0xa | 0x203 | 0x405060708090a | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 8 | 0 |
|
|
|
| 0xaa | 12 | 0xb | 0x203 | 0x405060708090a0b | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 7 | 0 |
|
|
|
| 0xaa | 13 | 0xc | 0x203 | 0x405060708090a0b0c | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 6 | 0 |
|
|
|
| 0xaa | 14 | 0xd | 0x203 | 0x405060708090a0b0c0d | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 5 | 0 |
|
|
|
| 0xaa | 15 | 0xe | 0x203 | 0x405060708090a0b0c0d0e | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 4 | 0 |
|
|
|
| 0xaa | 16 | 0xf | 0x203 | 0x405060708090a0b0c0d0e0f | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 3 | 0 |
|
|
|
| 0xaa | 17 | 0x10 | 0x203 | 0x405060708090a0b0c0d0e0f10 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 2 | 0 |
|
|
|
| 0xaa | 18 | 0x11 | 0x203 | 0x405060708090a0b0c0d0e0f1011 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 1 | 0 |
|
|
|
| 0xaa | 19 | 0x12 | 0x203 | 0x405060708090a0b0c0d0e0f101112 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 0 | 0 |
|
|
|
| 0xaa | 21 | ADD | 0x0 | 0x0 | 0x0 | 0x0 | 0 | 0 |
|
|
|
| 0xaa | 22 | STOP | 0x0 | 0x0 | 0x0 | 0x0 | 0 | 0 |
|
|
|
| addr | pc | bytecode | acc_hi | acc_lo | value_hi | value_lo | cnt | is_high |
|
|
|
| ---- | --- | -------- | ------ | ------------------------------- | -------- | --------------------------------- | --- | ------- |
|
|
|
| 0xaa | 0 | PUSH1 | 0x0 | 0x0 | 0x0 | 0xa | 1 | 0 |
|
|
|
| 0xaa | 1 | 0xa | 0x0 | 0xa | 0x0 | 0xa | 0 | 0 |
|
|
|
| 0xaa | 2 | PUSH17 | 0x0 | 0x0 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 17 | 1 |
|
|
|
| 0xaa | 3 | 0x2 | 0x2 | 0x0 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 16 | 1 |
|
|
|
| 0xaa | 4 | 0x3 | 0x203 | 0x0 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 15 | 0 |
|
|
|
| 0xaa | 5 | 0x4 | 0x203 | 0x4 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 14 | 0 |
|
|
|
| 0xaa | 6 | 0x5 | 0x203 | 0x405 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 13 | 0 |
|
|
|
| 0xaa | 7 | 0x6 | 0x203 | 0x40506 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 12 | 0 |
|
|
|
| 0xaa | 8 | 0x7 | 0x203 | 0x4050607 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 11 | 0 |
|
|
|
| 0xaa | 9 | 0x8 | 0x203 | 0x405060708 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 10 | 0 |
|
|
|
| 0xaa | 10 | 0x9 | 0x203 | 0x40506070809 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 9 | 0 |
|
|
|
| 0xaa | 11 | 0xa | 0x203 | 0x405060708090a | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 8 | 0 |
|
|
|
| 0xaa | 12 | 0xb | 0x203 | 0x405060708090a0b | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 7 | 0 |
|
|
|
| 0xaa | 13 | 0xc | 0x203 | 0x405060708090a0b0c | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 6 | 0 |
|
|
|
| 0xaa | 14 | 0xd | 0x203 | 0x405060708090a0b0c0d | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 5 | 0 |
|
|
|
| 0xaa | 15 | 0xe | 0x203 | 0x405060708090a0b0c0d0e | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 4 | 0 |
|
|
|
| 0xaa | 16 | 0xf | 0x203 | 0x405060708090a0b0c0d0e0f | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 3 | 0 |
|
|
|
| 0xaa | 17 | 0x10 | 0x203 | 0x405060708090a0b0c0d0e0f10 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 2 | 0 |
|
|
|
| 0xaa | 18 | 0x11 | 0x203 | 0x405060708090a0b0c0d0e0f1011 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 1 | 0 |
|
|
|
| 0xaa | 19 | 0x12 | 0x203 | 0x405060708090a0b0c0d0e0f101112 | 0x203 | 0x405060708090a0b0c0d0e0f10111213 | 0 | 0 |
|
|
|
| 0xaa | 21 | ADD | 0x0 | 0x0 | 0x0 | 0x0 | 0 | 0 |
|
|
|
| 0xaa | 22 | STOP | 0x0 | 0x0 | 0x0 | 0x0 | 0 | 0 |
|
|
|
|
|
|
### Column设计
|
|
|
|
... | ... | |