رموز التشغيل لـ EVM
آخر تحديث للصفحة: 11 سبتمبر 2025
نظرة عامة
هذه نسخة محدثة من صفحة EVM المرجعية على wolflo/evm-opcodes (opens in a new tab). مستمدة أيضًا من Yellow Paper (opens in a new tab)، وJello Paper (opens in a new tab)، وتطبيق geth (opens in a new tab). والمقصود من هذا هو أن يكون مرجعًا يمكن الوصول إليه، ولكنه ليس صارمًا بشكل خاص. إذا كنت تريد التأكد من الصحة وإدراك كل حالة حافة، فمن المستحسن استخدام Jello Paper أو تطبيق العميل.
هل تبحث عن مرجع تفاعلي؟ اطلع على evm.codes (opens in a new tab).
للعمليات ذات تكاليف الغاز الديناميكية، راجع gas.md (opens in a new tab).
💡 نصيحة سريعة: لعرض الأسطر بأكملها، استخدم [shift] + scroll للتمرير أفقيًا على سطح المكتب.
| كومة | الاسم | الغاز | المكدس الأولي | المكدس الناتج | ملحوظات | الملاحظات | |
|---|---|---|---|---|---|---|---|
| 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 == 0 | (u)int256 يساوي الصفر | ||
| 16 | AND | 3 | a, b | a && b | AND على مستوى البت | ||
| 17 | OR | 3 | a, b | `a \ | \ | b` | |
| 18 | XOR | 3 | a, b | a ^ b | XOR على مستوى البت | ||
| 19 | NOT | 3 | أ | ~a | NOT على مستوى البت | ||
| 1A | BYTE | 3 | i, x | (x >> (248 - i * 8)) && 0xFF | البايت i من (u)int256 x، من اليسار | ||
| 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 | عنوان مرسل الرسالة | ||
| ٣٤ | CALLVALUE | 2 | . | msg.value | قيمة الرسالة، بـ wei | ||
| 35 | CALLDATALOAD | 3 | idx | msg.data[idx:idx+32] | قراءة كلمة من بيانات الرسالة عند الفهرس idx | ||
| 36 | CALLDATASIZE | 2 | . | len(msg.data) | طول بيانات الرسالة، بالبايت | ||
| 37 | CALLDATACOPY | A3 (opens in a new tab) | dstOst, ost, len | . | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | نسخ بيانات الرسالة | |
| 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 | التجزئة | التجزئة (هاش) = 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 وجهة قفز صالحة | ||
| 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 | ١ | تمييز وجهة قفز صالحة | وجهة قفز صالحة على سبيل المثال وجهة قفز ليست داخل بيانات الدفع | |||
| 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 | . | الوحدة 256 | دفع قيمة 32 بايت إلى المكدس | ||
| 80 | DUP1 | 3 | أ | a, a | استنساخ القيمة الأولى على المكدس | ||
| 81 | DUP2 | 3 | _, a | a, _, a | استنساخ القيمة الثانية على المكدس | ||
| 82 | DUP3 | 3 | _, _, a | a, _, _, a | استنساخ القيمة الثالثة على المكدس | ||
| 83 | DUP4 | 3 | _, _, _, a | a, _, _, _, a | استنساخ القيمة الرابعة على المكدس | ||
| 84 | DUP5 | 3 | ..., a | a, ..., a | استنساخ القيمة الخامسة على المكدس | ||
| 85 | DUP6 | 3 | ..., a | a, ..., a | استنساخ القيمة السادسة على المكدس | ||
| 86 | DUP7 | 3 | ..., a | a, ..., a | استنساخ القيمة السابعة على المكدس | ||
| 87 | DUP8 | 3 | ..., a | a, ..., a | استنساخ القيمة الثامنة على المكدس | ||
| 88 | DUP9 | 3 | ..., a | a, ..., a | استنساخ القيمة التاسعة على المكدس | ||
| 89 | DUP10 | 3 | ..., a | a, ..., a | استنساخ القيمة العاشرة على المكدس | ||
| 8A | DUP11 | 3 | ..., a | a, ..., a | استنساخ القيمة الحادية عشرة على المكدس | ||
| 8B | DUP12 | 3 | ..., a | a, ..., a | استنساخ القيمة الثانية عشرة على المكدس | ||
| 8C | DUP13 | 3 | ..., a | a, ..., a | استنساخ القيمة الثالثة عشرة على المكدس | ||
| 8D | DUP14 | 3 | ..., a | a, ..., a | استنساخ القيمة الرابعة عشرة على المكدس | ||
| 8E | DUP15 | 3 | ..., a | a, ..., a | استنساخ القيمة الخامسة عشرة على المكدس | ||
| 8F | DUP16 | 3 | ..., a | a, ..., a | استنساخ القيمة السادسة عشرة على المكدس | ||
| 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؛ إذا تم تنفيذه في نفس المعاملة التي تم فيها إنشاء عقد، فإنه يدمر العقد |