मुख्य सामग्री पर जाएं
Change page

EVM के लिए ऑपकोड

अवलोकन

यह wolflo/evm-opcodes (एक नए टैब में खुलता है) पर EVM संदर्भ पृष्ठ का एक अद्यतित संस्करण है। इसे येलो पेपर (एक नए टैब में खुलता है), Jello Paper (एक नए टैब में खुलता है), और geth (एक नए टैब में खुलता है) कार्यान्वयन से भी लिया गया है। इसका उद्देश्य एक सुलभ संदर्भ होना है, लेकिन यह विशेष रूप से कठोर नहीं है। यदि आप सटीकता के प्रति आश्वस्त होना चाहते हैं और हर एज केस (edge case) के बारे में जानना चाहते हैं, तो 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 // buint256 विभाजन
05SDIV5a, ba // bint256 विभाजन
06MOD5a, ba % buint256 मॉड्यूलो
07SMOD5a, ba % bint256 मॉड्यूलो
08ADDMOD8a, b, N(a + b) % N(u)int256 जोड़ मॉड्यूलो N
09MULMOD8a, b, N(a * b) % N(u)int256 गुणा मॉड्यूलो N
0AEXPA1 (एक नए टैब में खुलता है)a, ba ** buint256 घातांक मॉड्यूलो 2**256
0BSIGNEXTEND5b, xSIGNEXTEND(x, b)x को (b+1) बाइट्स से 32 बाइट्स तक साइन एक्सटेंड (एक नए टैब में खुलता है) करें
0C-0Fअमान्य
10LT3a, ba < buint256 इससे कम (less-than)
11GT3a, ba > buint256 इससे अधिक (greater-than)
12SLT3a, ba < bint256 इससे कम (less-than)
13SGT3a, ba > bint256 इससे अधिक (greater-than)
14EQ3a, ba == b(u)int256 समानता
15ISZERO3aa == 0(u)int256 शून्य है (iszero)
16AND3a, ba && bबिटवाइज़ AND
17OR3a, ba || bबिटवाइज़ OR
18XOR3a, ba ^ bबिटवाइज़ XOR
19NOT3a~aबिटवाइज़ NOT
1ABYTE3i, x(x >> (248 - i * 8)) && 0xFFबाईं ओर से (u)int256 x का iवां बाइट
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.sendermsg भेजने वाले का पता
34CALLVALUE2.msg.valuemsg का मूल्य, Wei में
35CALLDATALOAD3idxmsg.data[idx:idx+32]सूचकांक idx पर msg डेटा से शब्द पढ़ें
36CALLDATASIZE2.len(msg.data)msg डेटा की लंबाई, बाइट्स में
37CALLDATACOPYA3 (एक नए टैब में खुलता है)dstOst, ost, len.mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1]msg डेटा कॉपी करें
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 (एक नए टैब में खुलता है)addrhashहैश = 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 एक वैध jumpdest हो
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स्टैक पर 5वें मान का क्लोन बनाएं
85DUP63..., aa, ..., aस्टैक पर 6ठे मान का क्लोन बनाएं
86DUP73..., aa, ..., aस्टैक पर 7वें मान का क्लोन बनाएं
87DUP83..., aa, ..., aस्टैक पर 8वें मान का क्लोन बनाएं
88DUP93..., aa, ..., aस्टैक पर 9वें मान का क्लोन बनाएं
89DUP103..., aa, ..., aस्टैक पर 10वें मान का क्लोन बनाएं
8ADUP113..., aa, ..., aस्टैक पर 11वें मान का क्लोन बनाएं
8BDUP123..., aa, ..., aस्टैक पर 12वें मान का क्लोन बनाएं
8CDUP133..., aa, ..., aस्टैक पर 13वें मान का क्लोन बनाएं
8DDUP143..., aa, ..., aस्टैक पर 14वें मान का क्लोन बनाएं
8EDUP153..., aa, ..., aस्टैक पर 15वें मान का क्लोन बनाएं
8FDUP163..., aa, ..., aस्टैक पर 16वें मान का क्लोन बनाएं
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] = returndataDELEGATECALL के समान, लेकिन मूल 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 पर भेजता है; यदि उसी लेन-देन में निष्पादित किया जाता है जिसमें अनुबंध बनाया गया था, तो यह अनुबंध को नष्ट कर देता है