মূল কন্টেন্টে যান
Change page

EVM-এর জন্য অপকোড

ওভারভিউ

এটি wolflo/evm-opcodes (একটি নতুন ট্যাবে খোলে)-এ থাকা EVM রেফারেন্স পেজের একটি আপডেট করা সংস্করণ। এছাড়াও এটি ইয়েলো পেপার (একটি নতুন ট্যাবে খোলে), 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 // 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 লেস-দ্যান
11GT3a, ba > buint256 গ্রেটার-দ্যান
12SLT3a, ba < bint256 লেস-দ্যান
13SGT3a, ba > bint256 গ্রেটার-দ্যান
14EQ3a, ba == b(u)int256 সমতা
15ISZERO3aa == 0(u)int256 ইজ-জিরো
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 (একটি নতুন ট্যাবে খোলে)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 একটি বৈধ 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স্ট্যাকের 1ম মান ক্লোন করা
81DUP23_, aa, _, aস্ট্যাকের 2য় মান ক্লোন করা
82DUP33_, _, aa, _, _, aস্ট্যাকের 3য় মান ক্লোন করা
83DUP43_, _, _, aa, _, _, _, aস্ট্যাকের 4র্থ মান ক্লোন করা
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-এ পাঠায়; যদি কোনো কন্ট্রাক্ট তৈরি হওয়ার একই ট্রানজ্যাকশনে এক্সিকিউট করা হয় তবে এটি কন্ট্রাক্টটি ধ্বংস করে দেয়