ماشین مجازی اتریوم (EVM)
آخرین ویرایش: @0xArkonomi(opens in a new tab), ۱ تیر ۱۴۰۳
ماشین مجازی اتریوم (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 illustrated(opens 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 illustrated(opens in a new tab)
پیادهسازی EVM
تمام پیادهسازیهای EVM باید به مشخصاتی که در یلو پیپر اتریوم توضیح داده شده است پایبند باشند.
در تاریخ 9 ساله اتریوم، EVM دستخوش چندین بازنگری شده است و چندین اجرا و پیادهسازی از EVM در زبان های مختلف برنامه نویسی وجود دارد.
کاربرهای اجرای اتریوم شامل یک اجرای EVM هستند. علاوه بر این، چندین اجرای مستقل وجود دارد، از جمله:
- Py-EVM(opens in a new tab) - پایتون
- evmone(opens in a new tab) - سیپلاسپلاس
- ethereumjs-vm(opens in a new tab) - جاوا اسکریپت
- revm(opens in a new tab) - Rust
اطلاعات بیشتر
- یلو پیپر اتریوم(opens in a new tab)
- Jellopaper با نام مستعار KEVM: معناشناسی EVM در K(opens in a new tab)
- بژپیپر(opens in a new tab)
- کدگذاریهای ماشین مجازی اتریوم(opens in a new tab)
- مرجع تعاملی کدگذاری های ماشین مجازی اتریوم(opens in a new tab)
- مقدمهای کوتاه در مستندات Solidity(opens in a new tab)
- تسلط بر اتریوم - ماشین مجازی اتریوم(opens in a new tab)