... | ... | @@ -33,7 +33,7 @@ pub struct Witness { |
|
|
core子表格负责表示4步轨迹,其列可以包含pc, opcode, operand (操作数,此处最多3个,因为ADD是a+b=c),以及负责表示操作数性质的列,例如stack_pointer(操作数在栈上的高度),is_write(是从栈读,还是写入)。操作数对于不同opcode不同,空的地方视为填充默认值0。
|
|
|
|
|
|
| pc | opcode | operand | stack pointer | is_write | stamp | operand | stack pointer | is_write | stamp | operand | stack pointer | is_write | stamp |
|
|
|
|----|--------|---------|---------------|----------|-------|---------|---------------|----------|-------|---------|---------------|----------|-------|
|
|
|
| --- | ------ | ------- | ------------- | -------- | ----- | ------- | ------------- | -------- | ----- | ------- | ------------- | -------- | ----- |
|
|
|
| 0 | PUSH1 | 1 | 1 | 1 | 1 | | | | | | | | |
|
|
|
| 2 | PUSH1 | 2 | 2 | 1 | 2 | | | | | | | | |
|
|
|
| 4 | ADD | 2 | 2 | 0 | 3 | 1 | 1 | 0 | 4 | 3 | 1 | 1 | 5 |
|
... | ... | @@ -58,7 +58,7 @@ state子表格负责执行轨迹涉及的所有状态读写,并保持读写的 |
|
|
综上,state表格如下:
|
|
|
|
|
|
| stamp | value | stack pointer | is_write |
|
|
|
|-------|-------|---------------|----------|
|
|
|
| ----- | ----- | ------------- | -------- |
|
|
|
| 1 | 1 | 1 | 1 |
|
|
|
| 2 | 2 | 2 | 1 |
|
|
|
| 3 | 2 | 2 | 0 |
|
... | ... | @@ -119,7 +119,7 @@ bytecode子表格用来放置被执行的合约的字节码。此表格较为静 |
|
|
表格示例如下:
|
|
|
|
|
|
| cnt | byte |
|
|
|
|-----|--------------|
|
|
|
| --- | ------------ |
|
|
|
| 0 | 0x60 (PUSH1) |
|
|
|
| 1 | 0x01 |
|
|
|
| 2 | 0x60 (PUSH1) |
|
... | ... | |