بحث کد های کامپایل شده در سالیدیتی آنقدر مهم است که دوباره سراغ opcode ها آمدیم. میخواهیم با فهرست کامل opcode ها آشنا شویم. سپس با یک مثال نحوه تبدیل opcode به bytecode را یاد بگیریم.
فهرست کامل را میتوانید در سایت اتریوم مشاهده کنید که اخیرا نیز بروزرسانی کردند و اطلاعات مفیدی اضافه کردند.
اما ما در اینجا به چند نمونه از آنها اشاره می کنیم. سپس با مثال عملی تبدیل opcode به bytecode را خواهیم آموخت.
پشته (استک) | نام | استک اولیه | نتیجه | گس مصرفی |
00 | STOP | – | – | 0 |
01 | ADD | a, b | a + b (جمع دو uint256/int256 ) | 3 |
33 | CALLER | آدرس msg sender | 2 | |
31 | BALANCE | آدرس | موجودی آدرس به wei | 100/2600 |
60 | PUSH1 | قرار دادن ۱ بایت در استک | 3 | |
5A | GAS | گس باقیمانده | 2 | |
50 | POP | برداشتن و حذف بالاترین مورد استک | 2 | |
42 | TIMESTAMP | زمان بلاک فعلی | 2 | |
40 | BLOCKHASH | شماره بلاک | هش بلاک مورد نظر | 20 |
مثالی از تبدیل opcode به bytecode
فرض کنید می خواهیم opcode زیر را به بایت کد تبدیل کنیم:
PUSH1 0x60 PUSH1 0x40 MSTORE
حال که فهرست opcode ها را در اختیار داریم کافیست آن ها را با اعدادشان جایگزین کنیم:
PUSH1 با ۶۰، مقدار بعدش هم که ۶۰ است که همان ۶۰ می شود، مجدد PUSH1 ۶۰، بعد ۴۰ هم خودش، و مقدار MSTORE هم ۵۲ است. پس باید کدمان اعداد زیر خواهد بود.
60 60 60 40 52
مبدل bytecode به opcode
در سایت ethscan یک مبدل bytecode به opcode وجود دارد. اما بعد از تست هایی که کردیم نتایج قابل اعتمادی نمی دهد. پس ضمن اینکه می توانید برای صرفه جویی در وقت از آن استفاده کنید، اما حتما نتایج را پس از تبدیل بررسی کنید.