EVM için İşlem Kodları
Genel Bakış
Bu, wolflo/evm-opcodes (yeni sekmede açılır) adresindeki EVM referans sayfasının güncellenmiş bir sürümüdür. Ayrıca Sarı Bülten (yeni sekmede açılır), Jello Paper (yeni sekmede açılır) ve geth (yeni sekmede açılır) uygulamasından da yararlanılmıştır. Bunun erişilebilir bir referans olması amaçlanmıştır, ancak özellikle titiz bir çalışma değildir. Doğruluktan emin olmak ve her uç durumun farkında olmak istiyorsanız, Jello Paper veya bir istemci uygulaması kullanmanız tavsiye edilir.
Etkileşimli bir referans mı arıyorsunuz? evm.codes (yeni sekmede açılır) adresine göz atın.
Dinamik gaz maliyetlerine sahip işlemler için gas.md (yeni sekmede açılır) dosyasına bakın.
💡 Hızlı ipucu: Tüm satırları görüntülemek için masaüstünde yatay kaydırma yapmak üzere [shift] + scroll kullanın.
| Yığın | İsim | Gaz | Başlangıç Yığını | Sonuç Yığını | Bellek / Depolama | Notlar |
|---|---|---|---|---|---|---|
| 00 | STOP | 0 | yürütmeyi durdur | |||
| 01 | ADD | 3 | a, b | a + b | (u)int256 toplama mod 2**256 | |
| 02 | MUL | 5 | a, b | a * b | (u)int256 çarpma mod 2**256 | |
| 03 | SUB | 3 | a, b | a - b | (u)int256 çıkarma mod 2**256 | |
| 04 | DIV | 5 | a, b | a // b | uint256 bölme | |
| 05 | SDIV | 5 | a, b | a // b | int256 bölme | |
| 06 | MOD | 5 | a, b | a % b | uint256 mod | |
| 07 | SMOD | 5 | a, b | a % b | int256 mod | |
| 08 | ADDMOD | 8 | a, b, N | (a + b) % N | (u)int256 toplama mod N | |
| 09 | MULMOD | 8 | a, b, N | (a * b) % N | (u)int256 çarpma mod N | |
| 0A | EXP | A1 (yeni sekmede açılır) | a, b | a ** b | uint256 üs alma mod 2**256 | |
| 0B | SIGNEXTEND | 5 | b, x | SIGNEXTEND(x, b) | x değerini (b+1) bayttan 32 bayta işaret uzatma (yeni sekmede açılır) | |
| 0C-0F | geçersiz | |||||
| 10 | LT | 3 | a, b | a < b | uint256 küçüktür | |
| 11 | GT | 3 | a, b | a > b | uint256 büyüktür | |
| 12 | SLT | 3 | a, b | a < b | int256 küçüktür | |
| 13 | SGT | 3 | a, b | a > b | int256 büyüktür | |
| 14 | EQ | 3 | a, b | a == b | (u)int256 eşitlik | |
| 15 | ISZERO | 3 | a | a == 0 | (u)int256 sıfırdır | |
| 16 | AND | 3 | a, b | a && b | bitsel AND | |
| 17 | OR | 3 | a, b | a || b | bitsel OR | |
| 18 | XOR | 3 | a, b | a ^ b | bitsel XOR | |
| 19 | NOT | 3 | a | ~a | bitsel NOT | |
| 1A | BYTE | 3 | i, x | (x >> (248 - i * 8)) && 0xFF | soldan (u)int256 x değerinin i. baytı | |
| 1B | SHL | 3 | shift, val | val << shift | sola kaydır | |
| 1C | SHR | 3 | shift, val | val >> shift | mantıksal sağa kaydır | |
| 1D | SAR | 3 | shift, val | val >> shift | aritmetik sağa kaydır | |
| 1E-1F | geçersiz | |||||
| 20 | KECCAK256 | A2 (yeni sekmede açılır) | ost, len | keccak256(mem[ost:ost+len-1]) | keccak256 | |
| 21-2F | geçersiz | |||||
| 30 | ADDRESS | 2 | . | address(this) | yürütülen sözleşmenin adresi | |
| 31 | BALANCE | A5 (yeni sekmede açılır) | addr | addr.balance | wei cinsinden bakiye | |
| 32 | ORIGIN | 2 | . | tx.origin | işlemi başlatan adres | |
| 33 | CALLER | 2 | . | msg.sender | msg göndericisinin adresi | |
| 34 | CALLVALUE | 2 | . | msg.value | wei cinsinden msg değeri | |
| 35 | CALLDATALOAD | 3 | idx | msg.data[idx:idx+32] | idx endeksindeki msg verisinden kelime oku | |
| 36 | CALLDATASIZE | 2 | . | len(msg.data) | bayt cinsinden msg verisinin uzunluğu | |
| 37 | CALLDATACOPY | A3 (yeni sekmede açılır) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | msg verisini kopyala |
| 38 | CODESIZE | 2 | . | len(this.code) | bayt cinsinden yürütülen sözleşmenin kodunun uzunluğu | |
| 39 | CODECOPY | A3 (yeni sekmede açılır) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1] | |
| 3A | GASPRICE | 2 | . | tx.gasprice | işlemin gas fiyatı, birim gaz başına wei cinsinden ** (yeni sekmede açılır) | |
| 3B | EXTCODESIZE | A5 (yeni sekmede açılır) | addr | len(addr.code) | bayt cinsinden addr'deki kodun boyutu | |
| 3C | EXTCODECOPY | A4 (yeni sekmede açılır) | addr, dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1] | addr'den kodu kopyala |
| 3D | RETURNDATASIZE | 2 | . | size | bayt cinsinden son harici çağrıdan dönen verinin boyutu | |
| 3E | RETURNDATACOPY | A3 (yeni sekmede açılır) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | son harici çağrıdan dönen veriyi kopyala |
| 3F | EXTCODEHASH | A5 (yeni sekmede açılır) | addr | hash | hash = addr.exists ? keccak256(addr.code) : 0 | |
| 40 | BLOCKHASH | 20 | blockNum | blockHash(blockNum) | ||
| 41 | COINBASE | 2 | . | block.coinbase | mevcut bloğun teklif edicisinin adresi | |
| 42 | TIMESTAMP | 2 | . | block.timestamp | mevcut bloğun zaman damgası | |
| 43 | NUMBER | 2 | . | block.number | mevcut bloğun numarası | |
| 44 | PREVRANDAO | 2 | . | randomness beacon | rastgelelik işaretçisi | |
| 45 | GASLIMIT | 2 | . | block.gaslimit | mevcut bloğun gaz limiti | |
| 46 | CHAINID | 2 | . | chain_id | mevcut zincir kimliğini (yeni sekmede açılır) yığına it | |
| 47 | SELFBALANCE | 5 | . | address(this).balance | wei cinsinden yürütülen sözleşmenin bakiyesi | |
| 48 | BASEFEE | 2 | . | block.basefee | mevcut bloğun taban ücreti | |
| 49 | BLOBHASH | 3 | idx | tx.blob_versioned_hashes[idx] | EIP-4844 (yeni sekmede açılır) | |
| 4A | BLOBBASEFEE | 2 | . | block.blobbasefee | mevcut bloğun blob taban ücreti (EIP-7516 (yeni sekmede açılır)) | |
| 4B-4F | geçersiz | |||||
| 50 | POP | 2 | _anon | . | öğeyi yığının en üstünden kaldır ve at | |
| 51 | MLOAD | 3* (yeni sekmede açılır) | ost | mem[ost:ost+32] | ost ofsetindeki bellekten kelime oku | |
| 52 | MSTORE | 3* (yeni sekmede açılır) | ost, val | . | mem[ost:ost+32] := val | belleğe bir kelime yaz |
| 53 | MSTORE8 | 3* (yeni sekmede açılır) | ost, val | . | mem[ost] := val && 0xFF | belleğe tek bir bayt yaz |
| 54 | SLOAD | A6 (yeni sekmede açılır) | key | storage[key] | depolamadan kelime oku | |
| 55 | SSTORE | A7 (yeni sekmede açılır) | key, val | . | storage[key] := val | depolamaya kelime yaz |
| 56 | JUMP | 8 | dst | . | $pc := dst pc'nin yalnızca dst geçerli bir jumpdest ise atandığını işaretle | |
| 57 | JUMPI | 10 | dst, condition | . | $pc := condition ? dst : $pc + 1 | |
| 58 | PC | 2 | . | $pc | program sayacı | |
| 59 | MSIZE | 2 | . | len(mem) | bayt cinsinden mevcut yürütme bağlamındaki belleğin boyutu | |
| 5A | GAS | 2 | . | gasRemaining | ||
| 5B | JUMPDEST | 1 | geçerli atlama hedefini işaretle | geçerli bir atlama hedefi, örneğin push verisinin içinde olmayan bir atlama hedefi | ||
| 5C | TLOAD | 100 | key | tstorage[key] | geçici depolamadan kelime oku (EIP-1153 (yeni sekmede açılır)) | |
| 5D | TSTORE | 100 | key, val | . | tstorage[key] := val | geçici depolamaya kelime yaz (EIP-1153 (yeni sekmede açılır)) |
| 5E | MCOPY | 3+3*words+A0 (yeni sekmede açılır) | dstOst, ost, len | . | mem[dstOst] := mem[ost:ost+len] | belleği bir alandan diğerine kopyala (EIP-5656 (yeni sekmede açılır)) |
| 5F | PUSH0 | 2 | . | uint8 | 0 sabit değerini yığına it | |
| 60 | PUSH1 | 3 | . | uint8 | 1 baytlık değeri yığına it | |
| 61 | PUSH2 | 3 | . | uint16 | 2 baytlık değeri yığına it | |
| 62 | PUSH3 | 3 | . | uint24 | 3 baytlık değeri yığına it | |
| 63 | PUSH4 | 3 | . | uint32 | 4 baytlık değeri yığına it | |
| 64 | PUSH5 | 3 | . | uint40 | 5 baytlık değeri yığına it | |
| 65 | PUSH6 | 3 | . | uint48 | 6 baytlık değeri yığına it | |
| 66 | PUSH7 | 3 | . | uint56 | 7 baytlık değeri yığına it | |
| 67 | PUSH8 | 3 | . | uint64 | 8 baytlık değeri yığına it | |
| 68 | PUSH9 | 3 | . | uint72 | 9 baytlık değeri yığına it | |
| 69 | PUSH10 | 3 | . | uint80 | 10 baytlık değeri yığına it | |
| 6A | PUSH11 | 3 | . | uint88 | 11 baytlık değeri yığına it | |
| 6B | PUSH12 | 3 | . | uint96 | 12 baytlık değeri yığına it | |
| 6C | PUSH13 | 3 | . | uint104 | 13 baytlık değeri yığına it | |
| 6D | PUSH14 | 3 | . | uint112 | 14 baytlık değeri yığına it | |
| 6E | PUSH15 | 3 | . | uint120 | 15 baytlık değeri yığına it | |
| 6F | PUSH16 | 3 | . | uint128 | 16 baytlık değeri yığına it | |
| 70 | PUSH17 | 3 | . | uint136 | 17 baytlık değeri yığına it | |
| 71 | PUSH18 | 3 | . | uint144 | 18 baytlık değeri yığına it | |
| 72 | PUSH19 | 3 | . | uint152 | 19 baytlık değeri yığına it | |
| 73 | PUSH20 | 3 | . | uint160 | 20 baytlık değeri yığına it | |
| 74 | PUSH21 | 3 | . | uint168 | 21 baytlık değeri yığına it | |
| 75 | PUSH22 | 3 | . | uint176 | 22 baytlık değeri yığına it | |
| 76 | PUSH23 | 3 | . | uint184 | 23 baytlık değeri yığına it | |
| 77 | PUSH24 | 3 | . | uint192 | 24 baytlık değeri yığına it | |
| 78 | PUSH25 | 3 | . | uint200 | 25 baytlık değeri yığına it | |
| 79 | PUSH26 | 3 | . | uint208 | 26 baytlık değeri yığına it | |
| 7A | PUSH27 | 3 | . | uint216 | 27 baytlık değeri yığına it | |
| 7B | PUSH28 | 3 | . | uint224 | 28 baytlık değeri yığına it | |
| 7C | PUSH29 | 3 | . | uint232 | 29 baytlık değeri yığına it | |
| 7D | PUSH30 | 3 | . | uint240 | 30 baytlık değeri yığına it | |
| 7E | PUSH31 | 3 | . | uint248 | 31 baytlık değeri yığına it | |
| 7F | PUSH32 | 3 | . | uint256 | 32 baytlık değeri yığına it | |
| 80 | DUP1 | 3 | a | a, a | yığındaki 1. değeri kopyala | |
| 81 | DUP2 | 3 | _, a | a, _, a | yığındaki 2. değeri kopyala | |
| 82 | DUP3 | 3 | _, _, a | a, _, _, a | yığındaki 3. değeri kopyala | |
| 83 | DUP4 | 3 | _, _, _, a | a, _, _, _, a | yığındaki 4. değeri kopyala | |
| 84 | DUP5 | 3 | ..., a | a, ..., a | yığındaki 5. değeri kopyala | |
| 85 | DUP6 | 3 | ..., a | a, ..., a | yığındaki 6. değeri kopyala | |
| 86 | DUP7 | 3 | ..., a | a, ..., a | yığındaki 7. değeri kopyala | |
| 87 | DUP8 | 3 | ..., a | a, ..., a | yığındaki 8. değeri kopyala | |
| 88 | DUP9 | 3 | ..., a | a, ..., a | yığındaki 9. değeri kopyala | |
| 89 | DUP10 | 3 | ..., a | a, ..., a | yığındaki 10. değeri kopyala | |
| 8A | DUP11 | 3 | ..., a | a, ..., a | yığındaki 11. değeri kopyala | |
| 8B | DUP12 | 3 | ..., a | a, ..., a | yığındaki 12. değeri kopyala | |
| 8C | DUP13 | 3 | ..., a | a, ..., a | yığındaki 13. değeri kopyala | |
| 8D | DUP14 | 3 | ..., a | a, ..., a | yığındaki 14. değeri kopyala | |
| 8E | DUP15 | 3 | ..., a | a, ..., a | yığındaki 15. değeri kopyala | |
| 8F | DUP16 | 3 | ..., a | a, ..., a | yığındaki 16. değeri kopyala | |
| 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 (yeni sekmede açılır) | ost, len | . | LOG0(memory[ost:ost+len-1]) | |
| A1 | LOG1 | A8 (yeni sekmede açılır) | ost, len, topic0 | . | LOG1(memory[ost:ost+len-1], topic0) | |
| A2 | LOG2 | A8 (yeni sekmede açılır) | ost, len, topic0, topic1 | . | LOG2(memory[ost:ost+len-1], topic0, topic1) | |
| A3 | LOG3 | A8 (yeni sekmede açılır) | ost, len, topic0, topic1, topic2 | . | LOG3(memory[ost:ost+len-1], topic0, topic1, topic2) | |
| A4 | LOG4 | A8 (yeni sekmede açılır) | ost, len, topic0, topic1, topic2, topic3 | . | LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | |
| A5-EF | geçersiz | |||||
| F0 | CREATE | A9 (yeni sekmede açılır) | val, ost, len | addr | addr = keccak256(rlp([address(this), this.nonce])) | |
| F1 | CALL | AA (yeni sekmede açılır) | gas, addr, val, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| F2 | CALLCODE | AA (yeni sekmede açılır) | gas, addr, val, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] = returndata | DELEGATECALL ile aynı, ancak orijinal msg.sender ve msg.value değerlerini iletmez |
| F3 | RETURN | 0* (yeni sekmede açılır) | ost, len | . | mem[ost:ost+len-1] döndür | |
| F4 | DELEGATECALL | AA (yeni sekmede açılır) | gas, addr, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| F5 | CREATE2 | A9 (yeni sekmede açılır) | val, ost, len, salt | addr | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:] | |
| F6-F9 | geçersiz | |||||
| FA | STATICCALL | AA (yeni sekmede açılır) | gas, addr, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| FB-FC | geçersiz | |||||
| FD | REVERT | 0* (yeni sekmede açılır) | ost, len | . | revert(mem[ost:ost+len-1]) | |
| FE | INVALID | AF (yeni sekmede açılır) | belirlenmiş geçersiz işlem kodu - EIP-141 (yeni sekmede açılır) | |||
| FF | SELFDESTRUCT | AB (yeni sekmede açılır) | addr | . | tüm ETH'yi addr adresine gönderir; bir sözleşmenin oluşturulduğu aynı işlemde yürütülürse sözleşmeyi yok eder |