ماشین مجازی اتریوم (EVM)
Page last update: ۲۵ آذر ۱۴۰۴
ماشین مجازی اتریوم (EVM) یک محیط مجازی غیرمتمرکز است که کد را به طور مداوم و ایمن در تمام گرههای اتریوم اجرا میکند. گرهها، EVM را برای اجرای قراردادهای هوشمند، با استفاده از "گس" برای اندازه گیری تلاش محاسباتی مورد نیاز برای عملیاتها اجرا می کنند و تخصیص کارآمد منابع و امنیت شبکه را تضمین میکنند.
پیشنیازها
برای درک EVM آشنایی اولیه با اصطلاحات رایج در علوم کامپیوتر مانند بایتopens in a new tab، حافظهopens in a new tab و یک پشتهopens in a new tab ضروری است. همچنین راحت بودن با مفاهیم رمزنگاری/بلاکچین مانند توابع هشopens in a new tab و مفید خواهد بوددرخت مرکلopens in a new tab.
از دفتر کل تا ماشین حالات متناهی
تشبیه «دفتر کل توزیعشده» اغلب برای توصیف زنجیرههای بلوکی مانند بیتکوین استفاده میشود که یک ارز غیرمتمرکز را با استفاده از ابزارهای بنیادین رمزنگاری امکانپذیر میسازد. دفتر کل سوابقی از فعالیت ها را حفظ می کند که باید به مجموعه ای از قوانین پایبند باشد که آنچه را که شخص می تواند و نمی تواند انجام دهد تا دفتر کل را اصلاح کند، تعیین می کنند. به عنوان مثال، یک آدرس بیت کوین نمیتواند بیت کوین بیشتری از آنچه قبلا دریافت کرده است خرج کند. این قوانین زیربنای تمامی تراکنشهای بیتکوین و بسیاری از زنجیرههای بلوکی دیگر است.
در حالی که اتریوم دارای رمزارز بومی خود (اتر) است که تقریباً بهطور کامل از قوانین شهودی مشابهی پیروی میکند، کارکرد بسیار قدرتمندتری را نیز ممکن میسازد: قراردادهای هوشمند. برای این ویژگی پیچیدهتر، قیاس پیچیدهتری نیز لازم است. به جای یک دفتر کل توزیع شده، اتریوم یک ماشین حالات متناهیopens in a new tab توزیعشده است. وضعیت اتریوم یک ساختار دادهی بزرگ است که نهتنها همه حسابها و موجودیها را در خود نگه میدارد، بلکه وضعیت ماشین را نیز در خود جای میدهد که میتواند طبق مجموعهای از قوانین از پیش تعریفشده از بلوکی به بلوک دیگر تغییر کند و کد ماشینی دلخواه را اجرا کند. قوانین خاص تغییر حالت از بلوک به بلوک توسط EVM تعریف شده است.
نمودار برگرفته ازEthereum EVM illustratedopens in a new tab
تابع گذار حالت اتریوم
EVM مانند یک تابع ریاضی عمل میکند: با توجه به یک ورودی، یک خروجی قطعی تولید میکند. از این رو توصیف رسمیتر اتریوم به عنوان دارندهی یک تابع گذار وضعیت بسیار مفید است:
1Y(S, T)= S'با توجه به یک وضعیت معتبر قدیمی (S) و مجموعه جدیدی از تراکنشهای معتبر (T)، تابع گذار وضعیت اتریوم Y(S, T) یک وضعیت خروجی معتبر جدید S' ایجاد میکند
وضعیت
در زمینهی اتریوم، وضعیتْ یک ساختار دادهای عظیم به نام درخت مارکل پاتریشیای اصلاحشده است که همهی حسابها را با هش مرتبط نگه میدارد و به یک هش ریشهای که در زنجیرهی بلوکی ذخیرهشده قابل تقلیل است.
تراکنشها
تراکنشها دستورالعملهایی هستند که به صورت رمزنگاری از حسابها امضا میشوند. دو نوع تراکنش وجود دارد: آنهایی که منجر به فراخوانی یک پیام میشوند و آنهایی که منجر به ایجاد یک قرارداد میشوند.
ایجاد قرارداد منجر به ایجاد یک حساب قرارداد جدید میشود که حاوی قرارداد هوشمند بایتکد کامپایلشده است. هر زمان که حساب دیگری یک پیام فراخوانی با آن قرارداد برقرار کند، بایتکد آن قرارداد را اجرا میکند.
دستورالعملهای EVM
EVM به صورت یک ماشین پشتهایopens in a new tab با عمق 1024 آیتم اجرا میشود. هر آیتم یک کلمهی 256 بیتی است که برای سهولت استفاده با رمزنگاری 256 بیتی (مانند هش Keccak-256 یا امضاهای secp256k1) انتخاب شده است.
در طول اجرا، EVM یک حافظه گذرا (به عنوان یک آرایه بایت آدرسدهی کلمه) را حفظ میکند که بین تراکنشها باقی نمیماند.
با این حال، قراردادها حاوی یک درخت حافظه مرکل پاتریشیا (بهعنوان یک آرایه کلمه قابل آدرسدهی به کلمه) هستند که با حساب موردنظر و بخشی از حالت همگانی مرتبط است.
بایتکد قرارداد هوشمند کامپایلشده به صورت تعدادی کدگذاریهای EVM اجرا میشود که عملیاتهای استاندارد پشته مانند XOR، AND ، ADD، SUB و غیره را انجام میدهد. EVM همچنین تعدادی عملیات پشتهی مخصوص زنجیرهی بلوکی را نیز اجرا میکند، مانند ADDRESS، BALANCE، BLOCKHASH و غیره.
نمودارها برگرفته ازEthereum EVM illustratedopens in a new tab
پیادهسازی EVM
تمام پیادهسازیهای EVM باید به مشخصاتی که در یلو پیپر اتریوم توضیح داده شده است پایبند باشند.
در تاریخ 9 ساله اتریوم، EVM دستخوش چندین بازنگری شده است و چندین اجرا و پیادهسازی از EVM در زبان های مختلف برنامه نویسی وجود دارد.
کاربرهای اجرای اتریوم شامل یک اجرای EVM هستند. علاوه بر این، چندین اجرای مستقل وجود دارد، از جمله:
- Py-EVMopens in a new tab - پایتون
- evmoneopens in a new tab - سیپلاسپلاس
- ethereumjs-vmopens in a new tab - جاوا اسکریپت
- revmopens in a new tab - Rust
اطلاعات بیشتر
- یلو پیپر اتریومopens in a new tab
- Jellopaper با نام مستعار KEVM: معناشناسی EVM در Kopens in a new tab
- بژپیپرopens in a new tab
- کدگذاریهای ماشین مجازی اتریومopens in a new tab
- مرجع تعاملی کدگذاری های ماشین مجازی اتریومopens in a new tab
- مقدمهای کوتاه در مستندات Solidityopens in a new tab
- تسلط بر اتریوم - ماشین مجازی اتریومopens in a new tab