Misimbo ya operesheni kwa ajili ya EVM
Muhtasari
Hili ni toleo lililosasishwa la ukurasa wa marejeleo wa EVM katika wolflo/evm-opcodes (opens in a new tab). Pia imetolewa kutoka kwenye Waraka wa Manjano (opens in a new tab), Jello Paper (opens in a new tab), na utekelezaji wa geth (opens in a new tab). Hii inakusudiwa kuwa marejeleo yanayofikika kwa urahisi, lakini si thabiti sana. Ikiwa unataka kuwa na uhakika wa usahihi na kufahamu kila hali ya kipekee, inashauriwa kutumia Jello Paper au utekelezaji wa mteja.
Unatafuta marejeleo shirikishi? Angalia evm.codes (opens in a new tab).
Kwa operesheni zenye gharama za gesi zinazobadilika, tazama gas.md (opens in a new tab).
💡 Dokezo la haraka: Ili kutazama mistari mizima, tumia [shift] + scroll kusogeza kwa mlalo kwenye kompyuta ya mezani.
| Staki | Jina | Gesi | Staki ya Awali | Staki Inayotokana | Kumbukumbu / Hifadhi | Vidokezo |
|---|---|---|---|---|---|---|
| 00 | STOP | 0 | simamisha utekelezaji | |||
| 01 | ADD | 3 | a, b | a + b | (u)int256 jumlisha modulo 2**256 | |
| 02 | MUL | 5 | a, b | a * b | (u)int256 zidisha modulo 2**256 | |
| 03 | SUB | 3 | a, b | a - b | (u)int256 toa modulo 2**256 | |
| 04 | DIV | 5 | a, b | a // b | uint256 gawanya | |
| 05 | SDIV | 5 | a, b | a // b | int256 gawanya | |
| 06 | MOD | 5 | a, b | a % b | uint256 moduli | |
| 07 | SMOD | 5 | a, b | a % b | int256 moduli | |
| 08 | ADDMOD | 8 | a, b, N | (a + b) % N | (u)int256 jumlisha modulo N | |
| 09 | MULMOD | 8 | a, b, N | (a * b) % N | (u)int256 zidisha modulo N | |
| 0A | EXP | A1 (opens in a new tab) | a, b | a ** b | uint256 kipeo modulo 2**256 | |
| 0B | SIGNEXTEND | 5 | b, x | SIGNEXTEND(x, b) | ongeza ishara (opens in a new tab) x kutoka baiti (b+1) hadi baiti 32 | |
| 0C-0F | batili | |||||
| 10 | LT | 3 | a, b | a < b | uint256 ndogo-kuliko | |
| 11 | GT | 3 | a, b | a > b | uint256 kubwa-kuliko | |
| 12 | SLT | 3 | a, b | a < b | int256 ndogo-kuliko | |
| 13 | SGT | 3 | a, b | a > b | int256 kubwa-kuliko | |
| 14 | EQ | 3 | a, b | a == b | (u)int256 usawa | |
| 15 | ISZERO | 3 | a | a == 0 | (u)int256 nisifuri | |
| 16 | AND | 3 | a, b | a && b | AND ya kibiti | |
| 17 | OR | 3 | a, b | a || b | OR ya kibiti | |
| 18 | XOR | 3 | a, b | a ^ b | XOR ya kibiti | |
| 19 | NOT | 3 | a | ~a | NOT ya kibiti | |
| 1A | BYTE | 3 | i, x | (x >> (248 - i * 8)) && 0xFF | baiti ya i ya (u)int256 x, kutoka kushoto | |
| 1B | SHL | 3 | shift, val | val << shift | sogeza kushoto | |
| 1C | SHR | 3 | shift, val | val >> shift | sogeza kimantiki kulia | |
| 1D | SAR | 3 | shift, val | val >> shift | sogeza kihesabu kulia | |
| 1E-1F | batili | |||||
| 20 | KECCAK256 | A2 (opens in a new tab) | ost, len | keccak256(mem[ost:ost+len-1]) | keccak256 | |
| 21-2F | batili | |||||
| 30 | ADDRESS | 2 | . | address(this) | anwani ya mkataba unaotekelezwa | |
| 31 | BALANCE | A5 (opens in a new tab) | addr | addr.balance | salio, katika Wei | |
| 32 | ORIGIN | 2 | . | tx.origin | anwani iliyoanzisha muamala | |
| 33 | CALLER | 2 | . | msg.sender | anwani ya mtumaji wa ujumbe | |
| 34 | CALLVALUE | 2 | . | msg.value | thamani ya ujumbe, katika Wei | |
| 35 | CALLDATALOAD | 3 | idx | msg.data[idx:idx+32] | soma neno kutoka kwenye data ya ujumbe kwenye faharisi idx | |
| 36 | CALLDATASIZE | 2 | . | len(msg.data) | urefu wa data ya ujumbe, katika baiti | |
| 37 | CALLDATACOPY | A3 (opens in a new tab) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | nakili data ya ujumbe |
| 38 | CODESIZE | 2 | . | len(this.code) | urefu wa msimbo wa mkataba unaotekelezwa, katika baiti | |
| 39 | CODECOPY | A3 (opens in a new tab) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1] | |
| 3A | GASPRICE | 2 | . | tx.gasprice | bei ya gesi ya muamala, katika Wei kwa kila uniti ya gesi ** (opens in a new tab) | |
| 3B | EXTCODESIZE | A5 (opens in a new tab) | addr | len(addr.code) | ukubwa wa msimbo kwenye anwani, katika baiti | |
| 3C | EXTCODECOPY | A4 (opens in a new tab) | addr, dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1] | nakili msimbo kutoka addr |
| 3D | RETURNDATASIZE | 2 | . | size | ukubwa wa data iliyorudishwa kutoka kwenye wito wa nje wa mwisho, katika baiti | |
| 3E | RETURNDATACOPY | A3 (opens in a new tab) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | nakili data iliyorudishwa kutoka kwenye wito wa nje wa mwisho |
| 3F | EXTCODEHASH | A5 (opens in a new tab) | addr | hash | hash = addr.exists ? keccak256(addr.code) : 0 | |
| 40 | BLOCKHASH | 20 | blockNum | blockHash(blockNum) | ||
| 41 | COINBASE | 2 | . | block.coinbase | anwani ya mpendekezaji wa kitalu cha sasa | |
| 42 | TIMESTAMP | 2 | . | block.timestamp | mhuri wa muda wa kitalu cha sasa | |
| 43 | NUMBER | 2 | . | block.number | nambari ya kitalu cha sasa | |
| 44 | PREVRANDAO | 2 | . | randomness beacon | kinara cha unasibu | |
| 45 | GASLIMIT | 2 | . | block.gaslimit | kikomo cha gesi cha kitalu cha sasa | |
| 46 | CHAINID | 2 | . | chain_id | sukuma kitambulisho cha mnyororo (opens in a new tab) cha sasa kwenye staki | |
| 47 | SELFBALANCE | 5 | . | address(this).balance | salio la mkataba unaotekelezwa, katika Wei | |
| 48 | BASEFEE | 2 | . | block.basefee | ada ya msingi ya kitalu cha sasa | |
| 49 | BLOBHASH | 3 | idx | tx.blob_versioned_hashes[idx] | EIP-4844 (opens in a new tab) | |
| 4A | BLOBBASEFEE | 2 | . | block.blobbasefee | ada ya msingi ya blobu ya kitalu cha sasa (EIP-7516 (opens in a new tab)) | |
| 4B-4F | batili | |||||
| 50 | POP | 2 | _anon | . | ondoa kipengee kutoka juu ya staki na ukitupe | |
| 51 | MLOAD | 3* (opens in a new tab) | ost | mem[ost:ost+32] | soma neno kutoka kwenye kumbukumbu kwenye ofseti ost | |
| 52 | MSTORE | 3* (opens in a new tab) | ost, val | . | mem[ost:ost+32] := val | andika neno kwenye kumbukumbu |
| 53 | MSTORE8 | 3* (opens in a new tab) | ost, val | . | mem[ost] := val && 0xFF | andika baiti moja kwenye kumbukumbu |
| 54 | SLOAD | A6 (opens in a new tab) | key | storage[key] | soma neno kutoka kwenye hifadhi | |
| 55 | SSTORE | A7 (opens in a new tab) | key, val | . | storage[key] := val | andika neno kwenye hifadhi |
| 56 | JUMP | 8 | dst | . | $pc := dst weka alama kwamba pc inapewa thamani tu ikiwa dst ni jumpdest halali | |
| 57 | JUMPI | 10 | dst, condition | . | $pc := condition ? dst : $pc + 1 | |
| 58 | PC | 2 | . | $pc | kihesabu programu | |
| 59 | MSIZE | 2 | . | len(mem) | ukubwa wa kumbukumbu katika muktadha wa utekelezaji wa sasa, katika baiti | |
| 5A | GAS | 2 | . | gasRemaining | ||
| 5B | JUMPDEST | 1 | weka alama ya kikomo halali cha kuruka | kikomo halali cha kuruka kwa mfano kikomo cha kuruka ambacho hakiko ndani ya data ya kusukuma | ||
| 5C | TLOAD | 100 | key | tstorage[key] | soma neno kutoka kwenye hifadhi ya muda (EIP-1153 (opens in a new tab)) | |
| 5D | TSTORE | 100 | key, val | . | tstorage[key] := val | andika neno kwenye hifadhi ya muda (EIP-1153 (opens in a new tab)) |
| 5E | MCOPY | 3+3*words+A0 (opens in a new tab) | dstOst, ost, len | . | mem[dstOst] := mem[ost:ost+len] | nakili kumbukumbu kutoka eneo moja hadi jingine (EIP-5656 (opens in a new tab)) |
| 5F | PUSH0 | 2 | . | uint8 | sukuma thamani isiyobadilika ya 0 kwenye staki | |
| 60 | PUSH1 | 3 | . | uint8 | sukuma thamani ya baiti 1 kwenye staki | |
| 61 | PUSH2 | 3 | . | uint16 | sukuma thamani ya baiti 2 kwenye staki | |
| 62 | PUSH3 | 3 | . | uint24 | sukuma thamani ya baiti 3 kwenye staki | |
| 63 | PUSH4 | 3 | . | uint32 | sukuma thamani ya baiti 4 kwenye staki | |
| 64 | PUSH5 | 3 | . | uint40 | sukuma thamani ya baiti 5 kwenye staki | |
| 65 | PUSH6 | 3 | . | uint48 | sukuma thamani ya baiti 6 kwenye staki | |
| 66 | PUSH7 | 3 | . | uint56 | sukuma thamani ya baiti 7 kwenye staki | |
| 67 | PUSH8 | 3 | . | uint64 | sukuma thamani ya baiti 8 kwenye staki | |
| 68 | PUSH9 | 3 | . | uint72 | sukuma thamani ya baiti 9 kwenye staki | |
| 69 | PUSH10 | 3 | . | uint80 | sukuma thamani ya baiti 10 kwenye staki | |
| 6A | PUSH11 | 3 | . | uint88 | sukuma thamani ya baiti 11 kwenye staki | |
| 6B | PUSH12 | 3 | . | uint96 | sukuma thamani ya baiti 12 kwenye staki | |
| 6C | PUSH13 | 3 | . | uint104 | sukuma thamani ya baiti 13 kwenye staki | |
| 6D | PUSH14 | 3 | . | uint112 | sukuma thamani ya baiti 14 kwenye staki | |
| 6E | PUSH15 | 3 | . | uint120 | sukuma thamani ya baiti 15 kwenye staki | |
| 6F | PUSH16 | 3 | . | uint128 | sukuma thamani ya baiti 16 kwenye staki | |
| 70 | PUSH17 | 3 | . | uint136 | sukuma thamani ya baiti 17 kwenye staki | |
| 71 | PUSH18 | 3 | . | uint144 | sukuma thamani ya baiti 18 kwenye staki | |
| 72 | PUSH19 | 3 | . | uint152 | sukuma thamani ya baiti 19 kwenye staki | |
| 73 | PUSH20 | 3 | . | uint160 | sukuma thamani ya baiti 20 kwenye staki | |
| 74 | PUSH21 | 3 | . | uint168 | sukuma thamani ya baiti 21 kwenye staki | |
| 75 | PUSH22 | 3 | . | uint176 | sukuma thamani ya baiti 22 kwenye staki | |
| 76 | PUSH23 | 3 | . | uint184 | sukuma thamani ya baiti 23 kwenye staki | |
| 77 | PUSH24 | 3 | . | uint192 | sukuma thamani ya baiti 24 kwenye staki | |
| 78 | PUSH25 | 3 | . | uint200 | sukuma thamani ya baiti 25 kwenye staki | |
| 79 | PUSH26 | 3 | . | uint208 | sukuma thamani ya baiti 26 kwenye staki | |
| 7A | PUSH27 | 3 | . | uint216 | sukuma thamani ya baiti 27 kwenye staki | |
| 7B | PUSH28 | 3 | . | uint224 | sukuma thamani ya baiti 28 kwenye staki | |
| 7C | PUSH29 | 3 | . | uint232 | sukuma thamani ya baiti 29 kwenye staki | |
| 7D | PUSH30 | 3 | . | uint240 | sukuma thamani ya baiti 30 kwenye staki | |
| 7E | PUSH31 | 3 | . | uint248 | sukuma thamani ya baiti 31 kwenye staki | |
| 7F | PUSH32 | 3 | . | uint256 | sukuma thamani ya baiti 32 kwenye staki | |
| 80 | DUP1 | 3 | a | a, a | nakili thamani ya 1 kwenye staki | |
| 81 | DUP2 | 3 | _, a | a, _, a | nakili thamani ya 2 kwenye staki | |
| 82 | DUP3 | 3 | _, _, a | a, _, _, a | nakili thamani ya 3 kwenye staki | |
| 83 | DUP4 | 3 | _, _, _, a | a, _, _, _, a | nakili thamani ya 4 kwenye staki | |
| 84 | DUP5 | 3 | ..., a | a, ..., a | nakili thamani ya 5 kwenye staki | |
| 85 | DUP6 | 3 | ..., a | a, ..., a | nakili thamani ya 6 kwenye staki | |
| 86 | DUP7 | 3 | ..., a | a, ..., a | nakili thamani ya 7 kwenye staki | |
| 87 | DUP8 | 3 | ..., a | a, ..., a | nakili thamani ya 8 kwenye staki | |
| 88 | DUP9 | 3 | ..., a | a, ..., a | nakili thamani ya 9 kwenye staki | |
| 89 | DUP10 | 3 | ..., a | a, ..., a | nakili thamani ya 10 kwenye staki | |
| 8A | DUP11 | 3 | ..., a | a, ..., a | nakili thamani ya 11 kwenye staki | |
| 8B | DUP12 | 3 | ..., a | a, ..., a | nakili thamani ya 12 kwenye staki | |
| 8C | DUP13 | 3 | ..., a | a, ..., a | nakili thamani ya 13 kwenye staki | |
| 8D | DUP14 | 3 | ..., a | a, ..., a | nakili thamani ya 14 kwenye staki | |
| 8E | DUP15 | 3 | ..., a | a, ..., a | nakili thamani ya 15 kwenye staki | |
| 8F | DUP16 | 3 | ..., a | a, ..., a | nakili thamani ya 16 kwenye staki | |
| 90 | SWAP1 | 3 | a, b | b, a | ||
| 91 | SWAP2 | 3 | a, _, b | b, _, a | ||
| 92 | SWAP3 | 3 | a, _, _, b | b, _, _, a | ||
| 93 | SWAP4 | 3 | a, _, _, _, b | b, _, _, _, a | ||
| 94 | SWAP5 | 3 | a, ..., b | b, ..., a | ||
| 95 | SWAP6 | 3 | a, ..., b | b, ..., a | ||
| 96 | SWAP7 | 3 | a, ..., b | b, ..., a | ||
| 97 | SWAP8 | 3 | a, ..., b | b, ..., a | ||
| 98 | SWAP9 | 3 | a, ..., b | b, ..., a | ||
| 99 | SWAP10 | 3 | a, ..., b | b, ..., a | ||
| 9A | SWAP11 | 3 | a, ..., b | b, ..., a | ||
| 9B | SWAP12 | 3 | a, ..., b | b, ..., a | ||
| 9C | SWAP13 | 3 | a, ..., b | b, ..., a | ||
| 9D | SWAP14 | 3 | a, ..., b | b, ..., a | ||
| 9E | SWAP15 | 3 | a, ..., b | b, ..., a | ||
| 9F | SWAP16 | 3 | a, ..., b | b, ..., a | ||
| A0 | LOG0 | A8 (opens in a new tab) | ost, len | . | LOG0(memory[ost:ost+len-1]) | |
| A1 | LOG1 | A8 (opens in a new tab) | ost, len, topic0 | . | LOG1(memory[ost:ost+len-1], topic0) | |
| A2 | LOG2 | A8 (opens in a new tab) | ost, len, topic0, topic1 | . | LOG2(memory[ost:ost+len-1], topic0, topic1) | |
| A3 | LOG3 | A8 (opens in a new tab) | ost, len, topic0, topic1, topic2 | . | LOG3(memory[ost:ost+len-1], topic0, topic1, topic2) | |
| A4 | LOG4 | A8 (opens in a new tab) | ost, len, topic0, topic1, topic2, topic3 | . | LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | |
| A5-EF | batili | |||||
| F0 | CREATE | A9 (opens in a new tab) | val, ost, len | addr | addr = keccak256(rlp([address(this), this.nonce])) | |
| F1 | CALL | AA (opens in a new tab) | gas, addr, val, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| F2 | CALLCODE | AA (opens in a new tab) | gas, addr, val, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] = returndata | sawa na DELEGATECALL, lakini haisambazi msg.sender na msg.value ya awali |
| F3 | RETURN | 0* (opens in a new tab) | ost, len | . | return mem[ost:ost+len-1] | |
| F4 | DELEGATECALL | AA (opens in a new tab) | gas, addr, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| F5 | CREATE2 | A9 (opens in a new tab) | val, ost, len, salt | addr | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:] | |
| F6-F9 | batili | |||||
| FA | STATICCALL | AA (opens in a new tab) | gas, addr, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| FB-FC | batili | |||||
| FD | REVERT | 0* (opens in a new tab) | ost, len | . | revert(mem[ost:ost+len-1]) | |
| FE | INVALID | AF (opens in a new tab) | msimbo wa operesheni batili ulioteuliwa - EIP-141 (opens in a new tab) | |||
| FF | SELFDESTRUCT | AB (opens in a new tab) | addr | . | hutuma ETH zote kwa addr; ikitekelezwa katika muamala sawa na ule ambao mkataba uliundwa inaharibu mkataba |