|
|
# Copy
|
|
|
|
|
|
## 简介
|
|
|
copy类操作指的是在EVM中进行不定长的一段数据拷贝,例如`CALLDATACOPY`将`calldata`中的一段数据拷贝到`memory`中。拷贝以`byte`作为数据长度单位,不同于栈的`U256`。
|
|
|
|
... | ... | @@ -35,7 +37,7 @@ copy类操作指的是在EVM中进行不定长的一段数据拷贝,例如`CAL |
|
|
|
|
|
| public | | | | |
|
|
|
| ---------- | ------------ | --------- | -------- | ---- |
|
|
|
| TxCalldata | block_tx_idx | -- | data_idx | data |
|
|
|
| TxCalldata | block_tx_idx | -- | data_idx | data |
|
|
|
| TxLogData | block_tx_idx | log_index | data_idx | data |
|
|
|
|
|
|
|
... | ... | @@ -111,16 +113,16 @@ pub enum Type { |
|
|
|
|
|
例子:CODECOPY,从bytecode拷贝到memory。例子里长度为8,被拷贝的数据为0xabcd......见下表。
|
|
|
|
|
|
| byte | src type | src id | src pointer | src stamp | dst type | dst id | dst pointer | dst stamp | cnt | len | acc |
|
|
|
|------|------------|---------------|-------------|-----------|----------|--------|---------------|------------|-----|-----|-----|
|
|
|
| 0xab | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 0 | 8 |0xab |
|
|
|
| 0xcd | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 1 | 8 |0xabcd|
|
|
|
| ... | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 2 | 8 | ... |
|
|
|
| | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 3 | 8 | |
|
|
|
| | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 4 | 8 | |
|
|
|
| | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 5 | 8 | |
|
|
|
| | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 6 | 8 | |
|
|
|
| | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 7 | 8 | |
|
|
|
| byte | src type | src id | src pointer | src stamp | dst type | dst id | dst pointer | dst stamp | cnt | len | acc |
|
|
|
| ---- | ---------- | ------------- | ----------- | --------- | -------- | ------ | ------------- | ---------- | --- | --- | ------ |
|
|
|
| 0xab | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 0 | 8 | 0xab |
|
|
|
| 0xcd | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 1 | 8 | 0xabcd |
|
|
|
| ... | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 2 | 8 | ... |
|
|
|
| | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 3 | 8 | |
|
|
|
| | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 4 | 8 | |
|
|
|
| | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 5 | 8 | |
|
|
|
| | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 6 | 8 | |
|
|
|
| | `Bytecode` | contract addr | some offset | nil | `Memory` | callid | some mem addr | some stamp | 7 | 8 | |
|
|
|
|
|
|
注意:同一次Copy的许多行里的pointer,是一样的,都和第一行相同。
|
|
|
|
... | ... | |