تخطي إلى المحتوى الرئيسي
Change page

رموز التشغيل لـ ⁦EVM⁩

هذه نسخة محدثة من صفحة مرجع EVM على wolflo/evm-opcodes (يفتح في علامة تبويب جديدة). مستمدة أيضًا من الورقة الصفراء (يفتح في علامة تبويب جديدة)، وJello Paper (يفتح في علامة تبويب جديدة)، وتنفيذ جو إيثريوم (geth) (يفتح في علامة تبويب جديدة). يُقصد بهذا أن يكون مرجعًا مبسطًا، ولكنه ليس صارمًا بشكل خاص. إذا كنت تريد التأكد من الصحة والوعي بكل حالة استثنائية، فمن المستحسن استخدام Jello Paper أو تنفيذ عميل.

هل تبحث عن مرجع تفاعلي؟ تحقق من evm.codes (يفتح في علامة تبويب جديدة).

للعمليات ذات تكاليف الغاز الديناميكية، راجع gas.md (يفتح في علامة تبويب جديدة).

💡 نصيحة سريعة: لعرض الأسطر بالكامل، استخدم [shift] + scroll للتمرير أفقيًا على سطح المكتب.

المكدسالاسمالغازالمكدس الأوليالمكدس الناتجالذاكرة / التخزينملاحظات
00STOP0إيقاف التنفيذ
01ADD3a, ba + bإضافة (u)int256 بمعيار 2**256
02MUL5a, ba * bضرب (u)int256 بمعيار 2**256
03SUB3a, ba - bطرح (u)int256 بمعيار 2**256
04DIV5a, ba // bقسمة uint256
05SDIV5a, ba // bقسمة int256
06MOD5a, ba % bباقي قسمة uint256
07SMOD5a, ba % bباقي قسمة int256
08ADDMOD8a, b, N(a + b) % Nإضافة (u)int256 بمعيار N
09MULMOD8a, b, N(a * b) % Nضرب (u)int256 بمعيار N
0AEXPA1 (يفتح في علامة تبويب جديدة)a, ba ** bأس uint256 بمعيار 2**256
0BSIGNEXTEND5b, xSIGNEXTEND(x, b)تمديد الإشارة (يفتح في علامة تبويب جديدة) لـ x من (b+1) بايت إلى 32 بايت
0C-0Fغير صالح
10LT3a, ba < bأصغر من uint256
11GT3a, ba > bأكبر من uint256
12SLT3a, ba < bأصغر من int256
13SGT3a, ba > bأكبر من int256
14EQ3a, ba == bمساواة (u)int256
15ISZERO3aa == 0(u)int256 يساوي صفرًا
16AND3a, ba && bAND على مستوى البت
17OR3a, ba || bOR على مستوى البت
18XOR3a, ba ^ bXOR على مستوى البت
19NOT3a~aNOT على مستوى البت
1ABYTE3i, x(x >> (248 - i * 8)) && 0xFFالبايت i من (u)int256 x، من اليسار
1BSHL3shift, valval << shiftإزاحة لليسار
1CSHR3shift, valval >> shiftإزاحة منطقية لليمين
1DSAR3shift, valval >> shiftإزاحة حسابية لليمين
1E-1Fغير صالح
20KECCAK256A2 (يفتح في علامة تبويب جديدة)ost, lenkeccak256(mem[ost:ost+len-1])keccak256
21-2Fغير صالح
30ADDRESS2.address(this)عنوان العقد المنفذ
31BALANCEA5 (يفتح في علامة تبويب جديدة)addraddr.balanceالرصيد، بوحدة Wei
32ORIGIN2.tx.originالعنوان الذي أنشأ المعاملة
33CALLER2.msg.senderعنوان مرسل الرسالة
34CALLVALUE2.msg.valueقيمة الرسالة، بوحدة Wei
35CALLDATALOAD3idxmsg.data[idx:idx+32]قراءة كلمة من بيانات الرسالة عند المؤشر idx
36CALLDATASIZE2.len(msg.data)طول بيانات الرسالة، بالبايت
37CALLDATACOPYA3 (يفتح في علامة تبويب جديدة)dstOst, ost, len.mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1]نسخ بيانات الرسالة
38CODESIZE2.len(this.code)طول رمز العقد المنفذ، بالبايت
39CODECOPYA3 (يفتح في علامة تبويب جديدة)dstOst, ost, len.mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1]
3AGASPRICE2.tx.gaspriceسعر الغاز للمعاملة، بوحدة Wei لكل وحدة غاز ** (يفتح في علامة تبويب جديدة)
3BEXTCODESIZEA5 (يفتح في علامة تبويب جديدة)addrlen(addr.code)حجم الرمز عند addr، بالبايت
3CEXTCODECOPYA4 (يفتح في علامة تبويب جديدة)addr, dstOst, ost, len.mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1]نسخ الرمز من addr
3DRETURNDATASIZE2.sizeحجم البيانات المرجعة من آخر استدعاء خارجي، بالبايت
3ERETURNDATACOPYA3 (يفتح في علامة تبويب جديدة)dstOst, ost, len.mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1]نسخ البيانات المرجعة من آخر استدعاء خارجي
3FEXTCODEHASHA5 (يفتح في علامة تبويب جديدة)addrhashhash = addr.exists ? keccak256(addr.code) : 0
40BLOCKHASH20blockNumblockHash(blockNum)
41COINBASE2.block.coinbaseعنوان مُقترِح الكتلة الحالية
42TIMESTAMP2.block.timestampالطابع الزمني للكتلة الحالية
43NUMBER2.block.numberرقم الكتلة الحالية
44PREVRANDAO2.randomness beaconمنارة العشوائية
45GASLIMIT2.block.gaslimitحد الغاز للكتلة الحالية
46CHAINID2.chain_idدفع معرف السلسلة (يفتح في علامة تبويب جديدة) الحالي إلى المكدس
47SELFBALANCE5.address(this).balanceرصيد العقد المنفذ، بوحدة Wei
48BASEFEE2.block.basefeeالرسم الأساسي للكتلة الحالية
49BLOBHASH3idxtx.blob_versioned_hashes[idx]EIP-4844 (يفتح في علامة تبويب جديدة)
4ABLOBBASEFEE2.block.blobbasefeeالرسم الأساسي لكتلة البيانات للكتلة الحالية (EIP-7516 (يفتح في علامة تبويب جديدة))
4B-4Fغير صالح
50POP2_anon.إزالة العنصر من أعلى المكدس وتجاهله
51MLOAD3* (يفتح في علامة تبويب جديدة)ostmem[ost:ost+32]قراءة كلمة من الذاكرة عند الإزاحة ost
52MSTORE3* (يفتح في علامة تبويب جديدة)ost, val.mem[ost:ost+32] := valكتابة كلمة في الذاكرة
53MSTORE83* (يفتح في علامة تبويب جديدة)ost, val.mem[ost] := val && 0xFFكتابة بايت واحد في الذاكرة
54SLOADA6 (يفتح في علامة تبويب جديدة)keystorage[key]قراءة كلمة من التخزين
55SSTOREA7 (يفتح في علامة تبويب جديدة)key, val.storage[key] := valكتابة كلمة في التخزين
56JUMP8dst.$pc := dst يشير إلى أنه يتم تعيين pc فقط إذا كان dst وجهة قفز صالحة
57JUMPI10dst, condition.$pc := condition ? dst : $pc + 1
58PC2.$pcعداد البرنامج
59MSIZE2.len(mem)حجم الذاكرة في سياق التنفيذ الحالي، بالبايت
5AGAS2.gasRemaining
5BJUMPDEST1تحديد وجهة قفز صالحةوجهة قفز صالحة، على سبيل المثال وجهة قفز ليست داخل بيانات الدفع
5CTLOAD100keytstorage[key]قراءة كلمة من التخزين العابر (EIP-1153 (يفتح في علامة تبويب جديدة))
5DTSTORE100key, val.tstorage[key] := valكتابة كلمة في التخزين العابر (EIP-1153 (يفتح في علامة تبويب جديدة))
5EMCOPY3+3*words+A0 (يفتح في علامة تبويب جديدة)dstOst, ost, len.mem[dstOst] := mem[ost:ost+len]نسخ الذاكرة من منطقة إلى أخرى (EIP-5656 (يفتح في علامة تبويب جديدة))
5FPUSH02.uint8دفع القيمة الثابتة 0 إلى المكدس
60PUSH13.uint8دفع قيمة من 1 بايت إلى المكدس
61PUSH23.uint16دفع قيمة من 2 بايت إلى المكدس
62PUSH33.uint24دفع قيمة من 3 بايت إلى المكدس
63PUSH43.uint32دفع قيمة من 4 بايت إلى المكدس
64PUSH53.uint40دفع قيمة من 5 بايت إلى المكدس
65PUSH63.uint48دفع قيمة من 6 بايت إلى المكدس
66PUSH73.uint56دفع قيمة من 7 بايت إلى المكدس
67PUSH83.uint64دفع قيمة من 8 بايت إلى المكدس
68PUSH93.uint72دفع قيمة من 9 بايت إلى المكدس
69PUSH103.uint80دفع قيمة من 10 بايت إلى المكدس
6APUSH113.uint88دفع قيمة من 11 بايت إلى المكدس
6BPUSH123.uint96دفع قيمة من 12 بايت إلى المكدس
6CPUSH133.uint104دفع قيمة من 13 بايت إلى المكدس
6DPUSH143.uint112دفع قيمة من 14 بايت إلى المكدس
6EPUSH153.uint120دفع قيمة من 15 بايت إلى المكدس
6FPUSH163.uint128دفع قيمة من 16 بايت إلى المكدس
70PUSH173.uint136دفع قيمة من 17 بايت إلى المكدس
71PUSH183.uint144دفع قيمة من 18 بايت إلى المكدس
72PUSH193.uint152دفع قيمة من 19 بايت إلى المكدس
73PUSH203.uint160دفع قيمة من 20 بايت إلى المكدس
74PUSH213.uint168دفع قيمة من 21 بايت إلى المكدس
75PUSH223.uint176دفع قيمة من 22 بايت إلى المكدس
76PUSH233.uint184دفع قيمة من 23 بايت إلى المكدس
77PUSH243.uint192دفع قيمة من 24 بايت إلى المكدس
78PUSH253.uint200دفع قيمة من 25 بايت إلى المكدس
79PUSH263.uint208دفع قيمة من 26 بايت إلى المكدس
7APUSH273.uint216دفع قيمة من 27 بايت إلى المكدس
7BPUSH283.uint224دفع قيمة من 28 بايت إلى المكدس
7CPUSH293.uint232دفع قيمة من 29 بايت إلى المكدس
7DPUSH303.uint240دفع قيمة من 30 بايت إلى المكدس
7EPUSH313.uint248دفع قيمة من 31 بايت إلى المكدس
7FPUSH323.uint256دفع قيمة من 32 بايت إلى المكدس
80DUP13aa, aاستنساخ القيمة الأولى في المكدس
81DUP23_, aa, _, aاستنساخ القيمة الثانية في المكدس
82DUP33_, _, aa, _, _, aاستنساخ القيمة الثالثة في المكدس
83DUP43_, _, _, aa, _, _, _, aاستنساخ القيمة الرابعة في المكدس
84DUP53..., aa, ..., aاستنساخ القيمة الخامسة في المكدس
85DUP63..., aa, ..., aاستنساخ القيمة السادسة في المكدس
86DUP73..., aa, ..., aاستنساخ القيمة السابعة في المكدس
87DUP83..., aa, ..., aاستنساخ القيمة الثامنة في المكدس
88DUP93..., aa, ..., aاستنساخ القيمة التاسعة في المكدس
89DUP103..., aa, ..., aاستنساخ القيمة العاشرة في المكدس
8ADUP113..., aa, ..., aاستنساخ القيمة الحادية عشرة في المكدس
8BDUP123..., aa, ..., aاستنساخ القيمة الثانية عشرة في المكدس
8CDUP133..., aa, ..., aاستنساخ القيمة الثالثة عشرة في المكدس
8DDUP143..., aa, ..., aاستنساخ القيمة الرابعة عشرة في المكدس
8EDUP153..., aa, ..., aاستنساخ القيمة الخامسة عشرة في المكدس
8FDUP163..., aa, ..., aاستنساخ القيمة السادسة عشرة في المكدس
90SWAP13a, bb, a
91SWAP23a, _, bb, _, a
92SWAP33a, _, _, bb, _, _, a
93SWAP43a, _, _, _, bb, _, _, _, a
94SWAP53a, ..., bb, ..., a
95SWAP63a, ..., bb, ..., a
96SWAP73a, ..., bb, ..., a
97SWAP83a, ..., bb, ..., a
98SWAP93a, ..., bb, ..., a
99SWAP103a, ..., bb, ..., a
9ASWAP113a, ..., bb, ..., a
9BSWAP123a, ..., bb, ..., a
9CSWAP133a, ..., bb, ..., a
9DSWAP143a, ..., bb, ..., a
9ESWAP153a, ..., bb, ..., a
9FSWAP163a, ..., bb, ..., a
A0LOG0A8 (يفتح في علامة تبويب جديدة)ost, len.LOG0(memory[ost:ost+len-1])
A1LOG1A8 (يفتح في علامة تبويب جديدة)ost, len, topic0.LOG1(memory[ost:ost+len-1], topic0)
A2LOG2A8 (يفتح في علامة تبويب جديدة)ost, len, topic0, topic1.LOG2(memory[ost:ost+len-1], topic0, topic1)
A3LOG3A8 (يفتح في علامة تبويب جديدة)ost, len, topic0, topic1, topic2.LOG3(memory[ost:ost+len-1], topic0, topic1, topic2)
A4LOG4A8 (يفتح في علامة تبويب جديدة)ost, len, topic0, topic1, topic2, topic3.LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3)
A5-EFغير صالح
F0CREATEA9 (يفتح في علامة تبويب جديدة)val, ost, lenaddraddr = keccak256(rlp([address(this), this.nonce]))
F1CALLAA (يفتح في علامة تبويب جديدة)gas, addr, val, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
F2CALLCODEAA (يفتح في علامة تبويب جديدة)gas, addr, val, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] = returndataنفس DELEGATECALL، ولكنه لا ينشر msg.sender و msg.value الأصليين
F3RETURN0* (يفتح في علامة تبويب جديدة)ost, len.return mem[ost:ost+len-1]
F4DELEGATECALLAA (يفتح في علامة تبويب جديدة)gas, addr, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
F5CREATE2A9 (يفتح في علامة تبويب جديدة)val, ost, len, saltaddraddr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:]
F6-F9غير صالح
FASTATICCALLAA (يفتح في علامة تبويب جديدة)gas, addr, argOst, argLen, retOst, retLensuccessmem[retOst:retOst+retLen-1] := returndata
FB-FCغير صالح
FDREVERT0* (يفتح في علامة تبويب جديدة)ost, len.revert(mem[ost:ost+len-1])
FEINVALIDAF (يفتح في علامة تبويب جديدة)رمز تشغيل غير صالح مخصص - EIP-141 (يفتح في علامة تبويب جديدة)
FFSELFDESTRUCTAB (يفتح في علامة تبويب جديدة)addr.يرسل كل ETH إلى addr؛ إذا تم تنفيذه في نفس المعاملة التي تم فيها إنشاء عقد، فإنه يدمر العقد