EVM için İşlem Kodları
Genel Bakış
Bu, wolflo/evm-opcodes (opens in a new tab) adresindeki EVM referans sayfasının güncellenmiş bir versiyonudur. Ayrıca Sarı Bülten (opens in a new tab), Jello Paper (opens in a new tab) ve geth (opens in a new tab) 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 (opens in a new tab) adresine göz atın.
Dinamik gaz maliyetlerine sahip işlemler için gas.md (opens in a new tab) dosyasına bakın.
💡 Hızlı ipucu: Tüm satırları görüntülemek için masaüstünde yatay olarak kaydırmak ü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 (opens in a new tab) | a, b | a ** b | uint256 üs alma mod 2**256 | |
| 0B | SIGNEXTEND | 5 | b, x | SIGNEXTEND(x, b) | işaret uzatma (opens in a new tab) x değerini (b+1) bayttan 32 bayta | |
| 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 iszero | |
| 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 (opens in a new tab) | 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 (opens in a new tab) | addr | addr.balance | wei cinsinden bakiye | |
| 32 | ORIGIN | 2 | . | tx.origin | işlemi başlatan adres | |
| 33 | CALLER | 2 | . | msg.sender | mesaj göndericisinin adresi | |
| 34 | CALLVALUE | 2 | . | msg.value | wei cinsinden mesaj değeri | |
| 35 | CALLDATALOAD | 3 | idx | msg.data[idx:idx+32] | idx endeksindeki mesaj verisinden kelime oku | |
| 36 | CALLDATASIZE | 2 | . | len(msg.data) | bayt cinsinden mesaj verisi uzunluğu | |
| 37 | CALLDATACOPY | A3 (opens in a new tab) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | mesaj verisini kopyala |
| 38 | CODESIZE | 2 | . | len(this.code) | bayt cinsinden yürütülen sözleşmenin kod uzunluğu | |
| 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 | birim gaz başına wei cinsinden işlemin gas fiyatı ** (opens in a new tab) | |
| 3B | EXTCODESIZE | A5 (opens in a new tab) | addr | len(addr.code) | bayt cinsinden adresteki kodun boyutu | |
| 3C | EXTCODECOPY | A4 (opens in a new tab) | addr, dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1] | addr adresinden kodu kopyala |
| 3D | RETURNDATASIZE | 2 | . | size | bayt cinsinden son harici çağrıdan dönen verinin boyutu | |
| 3E | RETURNDATACOPY | A3 (opens in a new tab) | 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 (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 | 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 (opens in a new tab) 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 (opens in a new tab) | |
| 4A | BLOBBASEFEE | 2 | . | block.blobbasefee | mevcut bloğun blob taban ücreti (EIP-7516 (opens in a new tab)) | |
| 4B-4F | geçersiz | |||||
| 50 | POP | 2 | _anon | . | öğeyi yığının en üstünden çıkar ve at | |
| 51 | MLOAD | 3* (opens in a new tab) | ost | mem[ost:ost+32] | ost ofsetindeki bellekten kelime oku | |
| 52 | MSTORE | 3* (opens in a new tab) | ost, val | . | mem[ost:ost+32] := val | belleğe bir kelime yaz |
| 53 | MSTORE8 | 3* (opens in a new tab) | ost, val | . | mem[ost] := val && 0xFF | belleğe tek bir bayt yaz |
| 54 | SLOAD | A6 (opens in a new tab) | key | storage[key] | depolamadan kelime oku | |
| 55 | SSTORE | A7 (opens in a new tab) | key, val | . | storage[key] := val | depolamaya kelime yaz |
| 56 | JUMP | 8 | dst | . | $pc := dst işareti, pc değerinin yalnızca dst geçerli bir jumpdest ise atandığını belirtir | |
| 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 (opens in a new tab)) | |
| 5D | TSTORE | 100 | key, val | . | tstorage[key] := val | geçici depolamaya kelime yaz (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] | belleği bir alandan diğerine kopyala (EIP-5656 (opens in a new tab)) |
| 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 (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 | geçersiz | |||||
| 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 | DELEGATECALL ile aynı, ancak orijinal msg.sender ve msg.value değerlerini iletmez |
| 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 | geçersiz | |||||
| FA | STATICCALL | AA (opens in a new tab) | gas, addr, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| FB-FC | geçersiz | |||||
| FD | REVERT | 0* (opens in a new tab) | ost, len | . | revert(mem[ost:ost+len-1]) | |
| FE | INVALID | AF (opens in a new tab) | belirlenmiş geçersiz işlem kodu - EIP-141 (opens in a new tab) | |||
| FF | SELFDESTRUCT | AB (opens in a new tab) | 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 |