EVM साठी ऑपकोड्स
विहंगावलोकन
ही wolflo/evm-opcodes (opens in a new tab) वरील EVM संदर्भ पृष्ठाची अद्ययावत आवृत्ती आहे. तसेच येलो पेपर (opens in a new tab), जेलो पेपर (opens in a new tab), आणि geth (opens in a new tab) अंमलबजावणीमधून घेतलेले आहे. हा एक सुलभ संदर्भ असावा असा उद्देश आहे, परंतु तो अत्यंत सखोल नाही. जर तुम्हाला अचूकतेची खात्री हवी असेल आणि प्रत्येक एज केसची माहिती हवी असेल, तर जेलो पेपर किंवा क्लायंट अंमलबजावणी वापरण्याचा सल्ला दिला जातो.
संवादात्मक संदर्भ शोधत आहात? evm.codes (opens in a new tab) तपासा.
डायनॅमिक गॅस खर्चासह ऑपरेशन्ससाठी, gas.md (opens in a new tab) पहा.
💡 एक छोटी टिप: संपूर्ण ओळी पाहण्यासाठी, डेस्कटॉपवर क्षैतिज स्क्रोल करण्यासाठी [shift] + scroll वापरा.
| Stack | Name | Gas | Initial Stack | Resulting Stack | Mem / Storage | Notes |
|---|---|---|---|---|---|---|
| 00 | STOP | 0 | अंमलबजावणी थांबवा | |||
| 01 | ADD | 3 | a, b | a + b | (u)int256 बेरीज मॉड्युलो 2**256 | |
| 02 | MUL | 5 | a, b | a * b | (u)int256 गुणाकार मॉड्युलो 2**256 | |
| 03 | SUB | 3 | a, b | a - b | (u)int256 वजाबाकी मॉड्युलो 2**256 | |
| 04 | DIV | 5 | a, b | a // b | uint256 भागाकार | |
| 05 | SDIV | 5 | a, b | a // b | int256 भागाकार | |
| 06 | MOD | 5 | a, b | a % b | uint256 मॉड्युलस | |
| 07 | SMOD | 5 | a, b | a % b | int256 मॉड्युलस | |
| 08 | ADDMOD | 8 | a, b, N | (a + b) % N | (u)int256 बेरीज मॉड्युलो N | |
| 09 | MULMOD | 8 | a, b, N | (a * b) % N | (u)int256 गुणाकार मॉड्युलो N | |
| 0A | EXP | A1 (opens in a new tab) | a, b | a ** b | uint256 घातांक मॉड्युलो 2**256 | |
| 0B | SIGNEXTEND | 5 | b, x | SIGNEXTEND(x, b) | साइन एक्सटेंड (opens in a new tab) x (b+1) बाइट्सवरून 32 बाइट्सपर्यंत | |
| 0C-0F | अवैध | |||||
| 10 | LT | 3 | a, b | a < b | uint256 पेक्षा कमी | |
| 11 | GT | 3 | a, b | a > b | uint256 पेक्षा जास्त | |
| 12 | SLT | 3 | a, b | a < b | int256 पेक्षा कमी | |
| 13 | SGT | 3 | a, b | a > b | int256 पेक्षा जास्त | |
| 14 | EQ | 3 | a, b | a == b | (u)int256 समानता | |
| 15 | ISZERO | 3 | a | a == 0 | (u)int256 शून्य आहे (iszero) | |
| 16 | AND | 3 | a, b | a && b | बिटवाइज AND | |
| 17 | OR | 3 | a, b | a || b | बिटवाइज OR | |
| 18 | XOR | 3 | a, b | a ^ b | बिटवाइज XOR | |
| 19 | NOT | 3 | a | ~a | बिटवाइज NOT | |
| 1A | BYTE | 3 | i, x | (x >> (248 - i * 8)) && 0xFF | (u)int256 x चा i वा बाइट, डावीकडून | |
| 1B | SHL | 3 | shift, val | val << shift | डावीकडे शिफ्ट करा | |
| 1C | SHR | 3 | shift, val | val >> shift | लॉजिकल शिफ्ट उजवीकडे | |
| 1D | SAR | 3 | shift, val | val >> shift | अरिथमॅटिक शिफ्ट उजवीकडे | |
| 1E-1F | अवैध | |||||
| 20 | KECCAK256 | A2 (opens in a new tab) | ost, len | keccak256(mem[ost:ost+len-1]) | keccak256 | |
| 21-2F | अवैध | |||||
| 30 | ADDRESS | 2 | . | address(this) | अंमलबजावणी करणाऱ्या कॉन्ट्रॅक्टचा पत्ता | |
| 31 | BALANCE | A5 (opens in a new tab) | addr | addr.balance | शिल्लक, Wei मध्ये | |
| 32 | ORIGIN | 2 | . | tx.origin | व्यवहार सुरू करणारा पत्ता | |
| 33 | CALLER | 2 | . | msg.sender | msg पाठवणाऱ्याचा पत्ता | |
| 34 | CALLVALUE | 2 | . | msg.value | msg मूल्य, Wei मध्ये | |
| 35 | CALLDATALOAD | 3 | idx | msg.data[idx:idx+32] | idx निर्देशांकावर msg डेटामधून शब्द वाचा | |
| 36 | CALLDATASIZE | 2 | . | len(msg.data) | msg डेटाची लांबी, बाइट्समध्ये | |
| 37 | CALLDATACOPY | A3 (opens in a new tab) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | msg डेटा कॉपी करा |
| 38 | CODESIZE | 2 | . | len(this.code) | अंमलबजावणी करणाऱ्या कॉन्ट्रॅक्टच्या कोडची लांबी, बाइट्समध्ये | |
| 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 | व्यवहाराची गॅसची किंमत, प्रति युनिट गॅस Wei मध्ये ** (opens in a new tab) | |
| 3B | EXTCODESIZE | A5 (opens in a new tab) | addr | len(addr.code) | addr वरील कोडचा आकार, बाइट्समध्ये | |
| 3C | EXTCODECOPY | A4 (opens in a new tab) | addr, dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1] | addr वरून कोड कॉपी करा |
| 3D | RETURNDATASIZE | 2 | . | size | शेवटच्या बाह्य कॉलमधून परत आलेल्या डेटाचा आकार, बाइट्समध्ये | |
| 3E | RETURNDATACOPY | A3 (opens in a new tab) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | शेवटच्या बाह्य कॉलमधून परत आलेला डेटा कॉपी करा |
| 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 | सध्याच्या ब्लॉकच्या प्रस्तावकाचा पत्ता | |
| 42 | TIMESTAMP | 2 | . | block.timestamp | सध्याच्या ब्लॉकचा टाइमस्टॅम्प | |
| 43 | NUMBER | 2 | . | block.number | सध्याच्या ब्लॉकचा क्रमांक | |
| 44 | PREVRANDAO | 2 | . | randomness beacon | यादृच्छिकता बीकन | |
| 45 | GASLIMIT | 2 | . | block.gaslimit | सध्याच्या ब्लॉकची गॅस मर्यादा | |
| 46 | CHAINID | 2 | . | chain_id | सध्याचा चेन आयडी (opens in a new tab) स्टॅकवर पुश करा | |
| 47 | SELFBALANCE | 5 | . | address(this).balance | अंमलबजावणी करणाऱ्या कॉन्ट्रॅक्टची शिल्लक, Wei मध्ये | |
| 48 | BASEFEE | 2 | . | block.basefee | सध्याच्या ब्लॉकचे पायाभूत शुल्क | |
| 49 | BLOBHASH | 3 | idx | tx.blob_versioned_hashes[idx] | EIP-4844 (opens in a new tab) | |
| 4A | BLOBBASEFEE | 2 | . | block.blobbasefee | सध्याच्या ब्लॉकचे ब्लॉब पायाभूत शुल्क (EIP-7516 (opens in a new tab)) | |
| 4B-4F | अवैध | |||||
| 50 | POP | 2 | _anon | . | स्टॅकच्या वरून आयटम काढा आणि तो टाकून द्या | |
| 51 | MLOAD | 3* (opens in a new tab) | ost | mem[ost:ost+32] | ost ऑफसेटवर मेमरीमधून शब्द वाचा | |
| 52 | MSTORE | 3* (opens in a new tab) | ost, val | . | mem[ost:ost+32] := val | मेमरीमध्ये एक शब्द लिहा |
| 53 | MSTORE8 | 3* (opens in a new tab) | ost, val | . | mem[ost] := val && 0xFF | मेमरीमध्ये एकच बाइट लिहा |
| 54 | SLOAD | A6 (opens in a new tab) | key | storage[key] | स्टोरेजमधून शब्द वाचा | |
| 55 | SSTORE | A7 (opens in a new tab) | key, val | . | storage[key] := val | स्टोरेजमध्ये शब्द लिहा |
| 56 | JUMP | 8 | dst | . | $pc := dst चिन्हांकित करते की pc केवळ तेव्हाच नियुक्त केले जाते जेव्हा dst एक वैध jumpdest असते | |
| 57 | JUMPI | 10 | dst, condition | . | $pc := condition ? dst : $pc + 1 | |
| 58 | PC | 2 | . | $pc | प्रोग्राम काउंटर | |
| 59 | MSIZE | 2 | . | len(mem) | सध्याच्या अंमलबजावणी संदर्भातील मेमरीचा आकार, बाइट्समध्ये | |
| 5A | GAS | 2 | . | gasRemaining | ||
| 5B | JUMPDEST | 1 | वैध जंप डेस्टिनेशन चिन्हांकित करा | एक वैध जंप डेस्टिनेशन, उदाहरणार्थ पुश डेटाच्या आत नसलेले जंप डेस्टिनेशन | ||
| 5C | TLOAD | 100 | key | tstorage[key] | ट्रान्झिएंट स्टोरेजमधून शब्द वाचा (EIP-1153 (opens in a new tab)) | |
| 5D | TSTORE | 100 | key, val | . | tstorage[key] := val | ट्रान्झिएंट स्टोरेजमध्ये शब्द लिहा (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] | एका क्षेत्रातून दुसऱ्या क्षेत्रात मेमरी कॉपी करा (EIP-5656 (opens in a new tab)) |
| 5F | PUSH0 | 2 | . | uint8 | स्टॅकवर 0 हे स्थिर मूल्य पुश करा | |
| 60 | PUSH1 | 3 | . | uint8 | स्टॅकवर 1-बाइट मूल्य पुश करा | |
| 61 | PUSH2 | 3 | . | uint16 | स्टॅकवर 2-बाइट मूल्य पुश करा | |
| 62 | PUSH3 | 3 | . | uint24 | स्टॅकवर 3-बाइट मूल्य पुश करा | |
| 63 | PUSH4 | 3 | . | uint32 | स्टॅकवर 4-बाइट मूल्य पुश करा | |
| 64 | PUSH5 | 3 | . | uint40 | स्टॅकवर 5-बाइट मूल्य पुश करा | |
| 65 | PUSH6 | 3 | . | uint48 | स्टॅकवर 6-बाइट मूल्य पुश करा | |
| 66 | PUSH7 | 3 | . | uint56 | स्टॅकवर 7-बाइट मूल्य पुश करा | |
| 67 | PUSH8 | 3 | . | uint64 | स्टॅकवर 8-बाइट मूल्य पुश करा | |
| 68 | PUSH9 | 3 | . | uint72 | स्टॅकवर 9-बाइट मूल्य पुश करा | |
| 69 | PUSH10 | 3 | . | uint80 | स्टॅकवर 10-बाइट मूल्य पुश करा | |
| 6A | PUSH11 | 3 | . | uint88 | स्टॅकवर 11-बाइट मूल्य पुश करा | |
| 6B | PUSH12 | 3 | . | uint96 | स्टॅकवर 12-बाइट मूल्य पुश करा | |
| 6C | PUSH13 | 3 | . | uint104 | स्टॅकवर 13-बाइट मूल्य पुश करा | |
| 6D | PUSH14 | 3 | . | uint112 | स्टॅकवर 14-बाइट मूल्य पुश करा | |
| 6E | PUSH15 | 3 | . | uint120 | स्टॅकवर 15-बाइट मूल्य पुश करा | |
| 6F | PUSH16 | 3 | . | uint128 | स्टॅकवर 16-बाइट मूल्य पुश करा | |
| 70 | PUSH17 | 3 | . | uint136 | स्टॅकवर 17-बाइट मूल्य पुश करा | |
| 71 | PUSH18 | 3 | . | uint144 | स्टॅकवर 18-बाइट मूल्य पुश करा | |
| 72 | PUSH19 | 3 | . | uint152 | स्टॅकवर 19-बाइट मूल्य पुश करा | |
| 73 | PUSH20 | 3 | . | uint160 | स्टॅकवर 20-बाइट मूल्य पुश करा | |
| 74 | PUSH21 | 3 | . | uint168 | स्टॅकवर 21-बाइट मूल्य पुश करा | |
| 75 | PUSH22 | 3 | . | uint176 | स्टॅकवर 22-बाइट मूल्य पुश करा | |
| 76 | PUSH23 | 3 | . | uint184 | स्टॅकवर 23-बाइट मूल्य पुश करा | |
| 77 | PUSH24 | 3 | . | uint192 | स्टॅकवर 24-बाइट मूल्य पुश करा | |
| 78 | PUSH25 | 3 | . | uint200 | स्टॅकवर 25-बाइट मूल्य पुश करा | |
| 79 | PUSH26 | 3 | . | uint208 | स्टॅकवर 26-बाइट मूल्य पुश करा | |
| 7A | PUSH27 | 3 | . | uint216 | स्टॅकवर 27-बाइट मूल्य पुश करा | |
| 7B | PUSH28 | 3 | . | uint224 | स्टॅकवर 28-बाइट मूल्य पुश करा | |
| 7C | PUSH29 | 3 | . | uint232 | स्टॅकवर 29-बाइट मूल्य पुश करा | |
| 7D | PUSH30 | 3 | . | uint240 | स्टॅकवर 30-बाइट मूल्य पुश करा | |
| 7E | PUSH31 | 3 | . | uint248 | स्टॅकवर 31-बाइट मूल्य पुश करा | |
| 7F | PUSH32 | 3 | . | uint256 | स्टॅकवर 32-बाइट मूल्य पुश करा | |
| 80 | DUP1 | 3 | a | a, a | स्टॅकवरील 1 ले मूल्य क्लोन करा | |
| 81 | DUP2 | 3 | _, a | a, _, a | स्टॅकवरील 2 रे मूल्य क्लोन करा | |
| 82 | DUP3 | 3 | _, _, a | a, _, _, a | स्टॅकवरील 3 रे मूल्य क्लोन करा | |
| 83 | DUP4 | 3 | _, _, _, a | a, _, _, _, a | स्टॅकवरील 4 थे मूल्य क्लोन करा | |
| 84 | DUP5 | 3 | ..., a | a, ..., a | स्टॅकवरील 5 वे मूल्य क्लोन करा | |
| 85 | DUP6 | 3 | ..., a | a, ..., a | स्टॅकवरील 6 वे मूल्य क्लोन करा | |
| 86 | DUP7 | 3 | ..., a | a, ..., a | स्टॅकवरील 7 वे मूल्य क्लोन करा | |
| 87 | DUP8 | 3 | ..., a | a, ..., a | स्टॅकवरील 8 वे मूल्य क्लोन करा | |
| 88 | DUP9 | 3 | ..., a | a, ..., a | स्टॅकवरील 9 वे मूल्य क्लोन करा | |
| 89 | DUP10 | 3 | ..., a | a, ..., a | स्टॅकवरील 10 वे मूल्य क्लोन करा | |
| 8A | DUP11 | 3 | ..., a | a, ..., a | स्टॅकवरील 11 वे मूल्य क्लोन करा | |
| 8B | DUP12 | 3 | ..., a | a, ..., a | स्टॅकवरील 12 वे मूल्य क्लोन करा | |
| 8C | DUP13 | 3 | ..., a | a, ..., a | स्टॅकवरील 13 वे मूल्य क्लोन करा | |
| 8D | DUP14 | 3 | ..., a | a, ..., a | स्टॅकवरील 14 वे मूल्य क्लोन करा | |
| 8E | DUP15 | 3 | ..., a | a, ..., a | स्टॅकवरील 15 वे मूल्य क्लोन करा | |
| 8F | DUP16 | 3 | ..., a | a, ..., a | स्टॅकवरील 16 वे मूल्य क्लोन करा | |
| 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 | अवैध | |||||
| 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 सारखेच, परंतु मूळ msg.sender आणि msg.value प्रसारित करत नाही |
| 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 | अवैध | |||||
| FA | STATICCALL | AA (opens in a new tab) | gas, addr, argOst, argLen, retOst, retLen | success | mem[retOst:retOst+retLen-1] := returndata | |
| FB-FC | अवैध | |||||
| FD | REVERT | 0* (opens in a new tab) | ost, len | . | revert(mem[ost:ost+len-1]) | |
| FE | INVALID | AF (opens in a new tab) | नियुक्त केलेला अवैध ऑपकोड - EIP-141 (opens in a new tab) | |||
| FF | SELFDESTRUCT | AB (opens in a new tab) | addr | . | सर्व ETH addr ला पाठवते; जर कॉन्ट्रॅक्ट तयार केल्याच्या त्याच व्यवहारात अंमलात आणले गेले तर ते कॉन्ट्रॅक्ट नष्ट करते |