Misimbo ya operesheni kwa ajili ya EVM
Hili ni toleo lililosasishwa la ukurasa wa marejeleo wa EVM kwenye wolflo/evm-opcodes (inafunguka katika kichupo kipya). Pia imetolewa kutoka kwenye Waraka wa Manjano (inafunguka katika kichupo kipya), Jello Paper (inafunguka katika kichupo kipya), na utekelezaji wa geth (inafunguka katika kichupo kipya). Hii inakusudiwa kuwa marejeleo yanayofikika, lakini si thabiti sana. Ikiwa unataka kuwa na uhakika wa usahihi na kufahamu kila hali ya kipekee, kutumia Jello Paper au utekelezaji wa mteja kunashauriwa.
Unatafuta marejeleo shirikishi? Angalia evm.codes (inafunguka katika kichupo kipya).
Kwa operesheni zenye gharama za gesi zinazobadilika, angalia gas.md (inafunguka katika kichupo kipya).
💡 Kidokezo cha haraka: Ili kutazama mistari mizima, tumia [shift] + scroll kusogeza kwa mlalo kwenye kompyuta ya mezani.
| Rundo | Jina | Gesi | Rundo la Awali | Rundo Linalotokana | Kumbukumbu / Hifadhi | Maelezo |
|---|---|---|---|---|---|---|
| 00 | STOP | 0 | sitisha 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 (inafunguka katika kichupo kipya) | a, b | a ** b | uint256 kipeo modulo 2**256 | |
| 0B | SIGNEXTEND | 5 | b, x | SIGNEXTEND(x, b) | panua ishara (inafunguka katika kichupo kipya) 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 (inafunguka katika kichupo kipya) | ost, len | keccak256(mem[ost:ost+len-1]) | keccak256 | |
| 21-2F | batili | |||||
| 30 | ADDRESS | 2 | . | address(this) | anwani ya mkataba unaotekelezwa | |
| 31 | BALANCE | A5 (inafunguka katika kichupo kipya) | 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 (inafunguka katika kichupo kipya) | 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 (inafunguka katika kichupo kipya) | 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 ** (inafunguka katika kichupo kipya) | |
| 3B | EXTCODESIZE | A5 (inafunguka katika kichupo kipya) | addr | len(addr.code) | ukubwa wa msimbo kwenye anwani, katika baiti | |
| 3C | EXTCODECOPY | A4 (inafunguka katika kichupo kipya) | 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 mwisho wa nje, katika baiti | |
| 3E | RETURNDATACOPY | A3 (inafunguka katika kichupo kipya) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | nakili data iliyorudishwa kutoka kwenye wito wa mwisho wa nje |
| 3F | EXTCODEHASH | A5 (inafunguka katika kichupo kipya) | addr | hash | heshi = 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 | muhuri 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 (inafunguka katika kichupo kipya) cha sasa kwenye rundo | |
| 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 (inafunguka katika kichupo kipya) | |
| 4A | BLOBBASEFEE | 2 | . | block.blobbasefee | ada ya msingi ya blobu ya kitalu cha sasa (EIP-7516 (inafunguka katika kichupo kipya)) | |
| 4B-4F | batili | |||||
| 50 | POP | 2 | _anon | . | ondoa kipengee kutoka juu ya rundo na ukitupe | |
| 51 | MLOAD | 3* (inafunguka katika kichupo kipya) | ost | mem[ost:ost+32] | soma neno kutoka kwenye kumbukumbu kwenye ofseti ost | |
| 52 | MSTORE | 3* (inafunguka katika kichupo kipya) | ost, val | . | mem[ost:ost+32] := val | andika neno kwenye kumbukumbu |
| 53 | MSTORE8 | 3* (inafunguka katika kichupo kipya) | ost, val | . | mem[ost] := val && 0xFF | andika baiti moja kwenye kumbukumbu |
| 54 | SLOAD | A6 (inafunguka katika kichupo kipya) | key | storage[key] | soma neno kutoka kwenye hifadhi | |
| 55 | SSTORE | A7 (inafunguka katika kichupo kipya) | key, val | . | storage[key] := val | andika neno kwenye hifadhi |
| 56 | JUMP | 8 | dst | . | $pc := dst weka alama kwamba pc inakabidhiwa 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 sasa wa utekelezaji, katika baiti | |
| 5A | GAS | 2 | . | gasRemaining | ||
| 5B | JUMPDEST | 1 | weka alama ya mwisho halali wa kuruka | mwisho halali wa kuruka kwa mfano mwisho wa kuruka ambao hauko ndani ya data ya kusukuma | ||
| 5C | TLOAD | 100 | key | tstorage[key] | soma neno kutoka kwenye hifadhi ya muda (EIP-1153 (inafunguka katika kichupo kipya)) | |
| 5D | TSTORE | 100 | key, val | . | tstorage[key] := val | andika neno kwenye hifadhi ya muda (EIP-1153 (inafunguka katika kichupo kipya)) |
| 5E | MCOPY | 3+3*words+A0 (inafunguka katika kichupo kipya) | dstOst, ost, len | . | mem[dstOst] := mem[ost:ost+len] | nakili kumbukumbu kutoka eneo moja hadi jingine (EIP-5656 (inafunguka katika kichupo kipya)) |
| 5F | PUSH0 | 2 | . | uint8 | sukuma thamani isiyobadilika 0 kwenye rundo | |
| 60 | PUSH1 | 3 | . | uint8 | sukuma thamani ya baiti 1 kwenye rundo | |
| 61 | PUSH2 | 3 | . | uint16 | sukuma thamani ya baiti 2 kwenye rundo | |
| 62 | PUSH3 | 3 | . | uint24 | sukuma thamani ya baiti 3 kwenye rundo | |
| 63 | PUSH4 | 3 | . | uint32 | sukuma thamani ya baiti 4 kwenye rundo | |
| 64 | PUSH5 | 3 | . | uint40 | sukuma thamani ya baiti 5 kwenye rundo | |
| 65 | PUSH6 | 3 | . | uint48 | sukuma thamani ya baiti 6 kwenye rundo | |
| 66 | PUSH7 | 3 | . | uint56 | sukuma thamani ya baiti 7 kwenye rundo | |
| 67 | PUSH8 | 3 | . | uint64 | sukuma thamani ya baiti 8 kwenye rundo | |
| 68 | PUSH9 | 3 | . | uint72 | sukuma thamani ya baiti 9 kwenye rundo | |
| 69 | PUSH10 | 3 | . | uint80 | sukuma thamani ya baiti 10 kwenye rundo | |
| 6A | PUSH11 | 3 | . | uint88 | sukuma thamani ya baiti 11 kwenye rundo | |
| 6B | PUSH12 | 3 | . | uint96 | sukuma thamani ya baiti 12 kwenye rundo | |
| 6C | PUSH13 | 3 | . | uint104 | sukuma thamani ya baiti 13 kwenye rundo | |
| 6D | PUSH14 | 3 | . | uint112 | sukuma thamani ya baiti 14 kwenye rundo | |
| 6E | PUSH15 | 3 | . | uint120 | sukuma thamani ya baiti 15 kwenye rundo | |
| 6F | PUSH16 | 3 | . | uint128 | sukuma thamani ya baiti 16 kwenye rundo | |
| 70 | PUSH17 | 3 | . | uint136 | sukuma thamani ya baiti 17 kwenye rundo | |
| 71 | PUSH18 | 3 | . | uint144 | sukuma thamani ya baiti 18 kwenye rundo | |
| 72 | PUSH19 | 3 | . | uint152 | sukuma thamani ya baiti 19 kwenye rundo | |
| 73 | PUSH20 | 3 | . | uint160 | sukuma thamani ya baiti 20 kwenye rundo | |
| 74 | PUSH21 | 3 | . | uint168 | sukuma thamani ya baiti 21 kwenye rundo | |
| 75 | PUSH22 | 3 | . | uint176 | sukuma thamani ya baiti 22 kwenye rundo | |
| 76 | PUSH23 | 3 | . | uint184 | sukuma thamani ya baiti 23 kwenye rundo | |
| 77 | PUSH24 | 3 | . | uint192 | sukuma thamani ya baiti 24 kwenye rundo | |
| 78 | PUSH25 | 3 | . | uint200 | sukuma thamani ya baiti 25 kwenye rundo | |
| 79 | PUSH26 | 3 | . | uint208 | sukuma thamani ya baiti 26 kwenye rundo | |
| 7A | PUSH27 | 3 | . | uint216 | sukuma thamani ya baiti 27 kwenye rundo | |
| 7B | PUSH28 | 3 | . | uint224 | sukuma thamani ya baiti 28 kwenye rundo | |
| 7C | PUSH29 | 3 | . | uint232 | sukuma thamani ya baiti 29 kwenye rundo | |
| 7D | PUSH30 | 3 | . | uint240 | sukuma thamani ya baiti 30 kwenye rundo | |
| 7E | PUSH31 | 3 | . | uint248 | sukuma thamani ya baiti 31 kwenye rundo | |
| 7F | PUSH32 | 3 | . | uint256 | sukuma thamani ya baiti 32 kwenye rundo | |
| 80 | DUP1 | 3 | a | a, a | nakili thamani ya 1 kwenye rundo | |
| 81 | DUP2 | 3 | _, a | a, _, a | nakili thamani ya 2 kwenye rundo | |
| 82 | DUP3 | 3 | _, _, a | a, _, _, a | nakili thamani ya 3 kwenye rundo | |
| 83 | DUP4 | 3 | _, _, _, a | a, _, _, _, a | nakili thamani ya 4 kwenye rundo | |
| 84 | DUP5 | 3 | ..., a | a, ..., a | nakili thamani ya 5 kwenye rundo | |
| 85 | DUP6 | 3 | ..., a | a, ..., a | nakili thamani ya 6 kwenye rundo | |
| 86 | DUP7 | 3 | ..., a | a, ..., a | nakili thamani ya 7 kwenye rundo | |
| 87 | DUP8 | 3 | ..., a | a, ..., a | nakili thamani ya 8 kwenye rundo | |
| 88 | DUP9 | 3 | ..., a | a, ..., a | nakili thamani ya 9 kwenye rundo | |
| 89 | DUP10 | 3 | ..., a | a, ..., a | nakili thamani ya 10 kwenye rundo | |
| 8A | DUP11 | 3 | ..., a | a, ..., a | nakili thamani ya 11 kwenye rundo | |
| 8B | DUP12 | 3 | ..., a | a, ..., a | nakili thamani ya 12 kwenye rundo | |
| 8C | DUP13 | 3 | ..., a | a, ..., a | nakili thamani ya 13 kwenye rundo | |
| 8D | DUP14 | 3 | ..., a | a, ..., a | nakili thamani ya 14 kwenye rundo | |
| 8E | DUP15 | 3 | ..., a | a, ..., a | nakili thamani ya 15 kwenye rundo | |
| 8F | DUP16 | 3 | ..., a | a, ..., a | nakili thamani ya 16 kwenye rundo | |
| 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 (inafunguka katika kichupo kipya) | ost, len | . | LOG0(memory[ost:ost+len-1]) | |
| A1 | LOG1 | A8 (inafunguka katika kichupo kipya) | ost, len, topic0 | . | LOG1(memory[ost:ost+len-1], topic0) | |
| A2 | LOG2 | A8 (inafunguka katika kichupo kipya) | ost, len, topic0, topic1 | . | LOG2(memory[ost:ost+len-1], topic0, topic1) | |
| A3 | LOG3 | A8 (inafunguka katika kichupo kipya) | ost, len, topic0, topic1, topic2 | . | LOG3(memory[ost:ost+len-1], topic0, topic1, topic2) | |
| A4 | LOG4 | A8 (inafunguka katika kichupo kipya) | ost, len, topic0, topic1, topic2, topic3 | . | LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | |
| A5-EF | batili | |||||
| F0 | CREATE | A9 (inafunguka katika kichupo kipya) | val, ost, len | addr | addr = keccak256(rlp([address(this), this.nonce])) | |
| F1 | CALL | AA (inafunguka katika kichupo kipya) | gas, addr, val, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| F2 | CALLCODE | AA (inafunguka katika kichupo kipya) | 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 asili |
| F3 | RETURN | 0* (inafunguka katika kichupo kipya) | ost, len | . | return mem[ost:ost+len-1] | |
| F4 | DELEGATECALL | AA (inafunguka katika kichupo kipya) | gas, addr, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| F5 | CREATE2 | A9 (inafunguka katika kichupo kipya) | val, ost, len, salt | addr | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:] | |
| F6-F9 | batili | |||||
| FA | STATICCALL | AA (inafunguka katika kichupo kipya) | gas, addr, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| FB-FC | batili | |||||
| FD | REVERT | 0* (inafunguka katika kichupo kipya) | ost, len | . | revert(mem[ost:ost+len-1]) | |
| FE | INVALID | AF (inafunguka katika kichupo kipya) | msimbo wa operesheni ulioteuliwa kuwa batili - EIP-141 (inafunguka katika kichupo kipya) | |||
| FF | SELFDESTRUCT | AB (inafunguka katika kichupo kipya) | addr | . | hutuma ETH zote kwa addr; ikitekelezwa katika muamala sawa na mkataba ulipoundwa inaharibu mkataba |