ماشین مجازی اتریوم (EVM)
نمونهسازی فیزیکی EVM را نمیتوان مانند اشاره کردن به یک ابر یا یک موج اقیانوس توصیف کرد، اما بهعنوان یک موجودیت واحد وجود دارد که توسط هزاران رایانه متصل که یک کلاینت اتریوم را اجرا میکنند نگهداری میشود.
خود پروتکل اتریوم صرفاً بهمنظور حفظ عملکرد مداوم، بدون وقفه و تغییرناپذیر این ماشین حالات متناهی ویژه وجود دارد. پروتکل محیطی است که تمام حسابهای اتریوم و قراردادهای هوشمند در آن وجود دارند. در هر بلوک معینی در زنجیره، اتریوم یک و تنها یک حالت «متعارف» دارد، و EVM همان چیزی است که قوانین را برای محاسبهی یک حالت معتبر جدید از بلوکی به بلوک دیگر تعریف میکند.
پیشنیازها
برای درک EVM آشنایی اولیه با اصطلاحات رایج در علوم کامپیوتر مانند بایت، حافظه و یک پشته ضروری است. همچنین راحت بودن با مفاهیم رمزنگاری/زنجیرهی بلوکی همچون توابع هش، اثبات کار و درخت مرکل نیز مفید خواهد بود.
از دفتر کل تا ماشین حالات متناهی
تشبیه «دفتر کل توزیعشده» اغلب برای توصیف زنجیرههای بلوکی مانند بیتکوین استفاده میشود ک ه یک ارز غیرمتمرکز را با استفاده از ابزارهای بنیادین رمزنگاری امکانپذیر میسازد. یک ارز رمزنگاریشده مانند یک ارز عادی عمل میکند زیرا قوانینی را که میتوان و نمیتوان برای اصلاح دفتر کل انجام داد، تعیین میکند. به عنوان مثال، یک آدرس بیت کوین نمیتواند بیت کوین بیشتری از آنچه قبلا دریافت کرده است خرج کند. این قوانین زیربنای تمامی تراکنشهای بیتکوین و بسیاری از زنجیرههای بلوکی دیگر است.
در حالی که اتریوم دارای رمزارز بومی خود (اتر) است که تقریباً بهطور کامل از قوانین شهودی مشابهی پیروی میکند، کارکرد بسیار قدرتمندتری را نیز ممکن میسازد: قراردادهای هوشمند. برای این ویژگی پیچیدهتر، قیاس پیچیدهتری نیز لازم است. به جای یک دفتر کل توزیع شده، اتریوم یک ماشین حالات متناهی توزیعشده است. وضعیت اتریوم یک ساختار دادهی بزرگ است که نهتنها همه حسابها و موجودیها را در خود نگه میدارد، بلکه وضعیت ماشین را نیز در خود جای میدهد که میتواند طبق مجموعهای از قوانین از پیش تعریفشده از بلوکی به بلوک دیگر تغییر کند و کد ماشینی دلخواه را اجرا کند. قوانین خاص تغییر حالت از بلوک به بلوک توسط EVM تعریف شده است.
نمودار برگرفته ازEthereum EVM illustrated
تابع گذار حالت اتریوم
EVM مانند یک تابع ریاضی عمل میکند: با توجه به یک ورودی، یک خروجی قطعی تولید میکند. از این رو توصیف رسمیتر اتریوم به عنوان دارندهی یک تابع گذار وضعیت بسیار مفید است:
1Y(S, T)= S'2
با توجه به یک وضعیت معتبر قدیمی (S)
و مجموعه جدیدی از تراکنشهای معتبر (T)
، تابع گذار وضعیت اتریوم Y(S, T)
یک وضعیت خروجی معتب ر جدید S'
ایجاد میکند
وضعیت
در زمینهی اتریوم، وضعیت یک ساختار دادههای عظیم به نام درخت مارکل پاتریشیای اصلاحشده است که همهی حسابها را با هش مرتبط نگه میدارد و به یک هش ریشهای که در زنجیره بلوکی ذخیرهشده قابل تقلیل است.
تراکنشها
تراکنشها دستورالعملهایی هستند که به صورت رمزنگاری از حسابها امضا میشوند. دو نوع تراکنش وجود دارد: آنهایی که منجر به فراخوانی یک پیام میشوند و آنهایی که منجر به ایجاد یک قرارداد میشوند.
ایجاد قرارداد منجر به ایجاد یک حساب قرارداد جدید میشود که حاوی قرارداد هوشمند بایتکد کامپایلشده است. هر زمان که حساب دیگری یک پیام فراخوانی با آن قرارداد برقرار کند، بایتکد آن قرارداد را اجرا میکند.
دستورالعملهای EVM
EVM به صورت یک ماشین پشتهای با عمق 1024 آیتم اجرا میشود. هر آیتم یک کلمهی 256 بیتی است که برای سهولت استفاده با رمزنگاری 256 بیتی (مانند هش Keccak-256 یا امضاهای secp256k1) انتخاب شده است.
در طول اجرا، EVM یک حافظه گذرا (به عنوان یک آرایه بایت آدرسدهی کلمه) را حفظ میکند که بین تراکنشها باقی نمیماند.
با این حال، قراردادها حاوی یک درخت حافظه مرکل پاتریشیا (بهعنوان یک آرایه کلمه قابل آدرسدهی به کلمه) هستند که با حساب موردنظر و بخشی از حالت همگانی مرتبط است.
بایتکد قرارداد هوشمند کامپایلشده به صورت تعدادی کدگذاریهای EVM اجرا میشود که عملیاتهای استاندارد پشته مانند XOR
، AND
، ADD
، SUB
و غیره را انجام میدهد. EVM همچنین تعدادی عملیات پشتهی مخصوص زنجیرهی بلوکی را نیز اجرا میکند، مانند ADDRESS
، BALANCE
، BLOCKHASH
و غیره.
نمودارها برگرفته ازEthereum EVM illustrated
پیادهسازی EVM
تمام پیادهسازیهای EVM باید به مشخصاتی که در یلو پیپر اتریوم توضیح داده شده است پایبند باشند.
در طول تاریخ 5 ساله اتریوم، EVM مورد بازنگریهای متعدد ی قرار گرفته است و چندین پیادهسازی EVM در زبانهای برنامهنویسی مختلف وجود دارد.
تمامی کلاینتهای اتریومی یک پیادهسازی EVM را دربر دارند. بهعلاوه چندین پیادهسازی مستقل وجود دارد، از جمله:
- Py-EVM - پایتون
- evmone - سیپلاسپلاس
- ethereumjs-vm - جاوا اسکریپت
- eEVM - سیپلاسپلاس
اطلاعات بیشتر
- یلو پیپر اتریوم
- Jellopaper با نام مستعار KEVM: معناشناسی EVM در K
- بژپیپر
- کدگذاریهای ماشین مجازی اتریوم
- مقدمهای کوتاه در مستندات Solidity