رموز التشغيل لـ EVM
نظرة عامة
هذه نسخة محدثة من صفحة مرجع EVM على wolflo/evm-opcodes (opens in a new tab). مستمدة أيضًا من الورقة الصفراء (opens in a new tab)، وورقة Jello (opens in a new tab)، وتنفيذ جو إيثريوم (geth) (opens in a new tab). الهدف من ذلك هو أن يكون مرجعًا يسهل الوصول إليه، ولكنه ليس دقيقًا بشكل خاص. إذا كنت تريد التأكد من الصحة والوعي بكل حالة حافة، يُنصح باستخدام ورقة Jello أو تنفيذ العميل.
هل تبحث عن مرجع تفاعلي؟ تحقق من 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 | a == 0 | (u)int256 يساوي صفر | |
| 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 | البايت رقم 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 | عنوان مرسل الرسالة | |
| 34 | 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) | حجم الكود في العنوان، بالبايت | |
| 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 وجهة قفز صالحة | |
| 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 | استنساخ القيمة الأولى في المكدس | |
| 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؛ إذا تم تنفيذه في نفس المعاملة التي تم فيها إنشاء العقد، فإنه يدمر العقد |