سالیدیفا

فهرست opcode ها و نحوه تبدیل به bytecode

بحث کد های کامپایل شده تو سالیدیتی اونقدر مهمه که دوباره سراغ opcode ها اومدیم. میخوایم با فهرست کامل تری از opcode ها آشنا بشیم. بعدش با یه مثال روش تبدیل opcode به bytecode رو یاد بگیریم.

فهرست کامل را میتونین توی سایت اتریوم مشاهده کنین که اخیرا هم بروزش کردن و اطلاعات مفیدی اضافه کردن.

ولی اینجا به چند نمونه از اونا اشاره می کنیم. بعدش با مثال عملی تبدیل opcode به bytecode را یاد میگیریم.

پشته (استک)ناماستک اولیهنتیجهگس مصرفی
00STOP0
01ADDa, ba + b
(جمع دو uint256/int256 )
3
33CALLERآدرس msg sender2
31BALANCEآدرسموجودی آدرس به wei100/2600
60PUSH1قرار دادن ۱ بایت در استک3
5AGASگس باقیمانده2
50POPبرداشتن و حذف بالاترین مورد استک2
42TIMESTAMPزمان بلاک فعلی2
40BLOCKHASHشماره بلاکهش بلاک مورد نظر20

مشاهده فهرست کامل

مثالی از تبدیل opcode به bytecode

فرض کنین می خوایم opcode زیر رو به بایت کد تبدیل کنیم:

PUSH1 0x60 PUSH1 0x40 MSTORE

حال که فهرست opcode ها را در اختیار داریم کافیه اونا رو با اعدادشون جایگزین کنیم:

PUSH1 با ۶۰، مقدار بعدش هم که ۶۰ه که همون ۶۰ میشه، دوباره PUSH1 ۶۰، بعد ۴۰ هم خودش، و مقدار MSTORE هم که ۵۲ ه. پس بایتکدمون این میشه:

60 60 60 40 52

مبدل bytecode به opcode

تو سایت ethscan یک مبدل bytecode به opcode وجود داره. اما بعد از تست هایی که کردیم نتایج قابل اعتمادی نمیده. پس ضمن اینکه می توانین برای صرفه جویی تو وقت ازش استفاده کنین، ولی لازمه خروجیش رو حتما بررسی کنین.