اتریوم چگونه کار می‌کند(۷) – مدل اجرا

خانه انجمن ها تالار اتریوم اتریوم چگونه کار می‌کند(۷) – مدل اجرا

  • این موضوع خالی است.
در حال نمایش 1 نوشته (از کل 1)
  • نویسنده
    نوشته‌ها
  • #263
    Mohmmad10
    مدیر

    قسمت ششم


    در این مجموعه به بررسی چگونگی کارکرد اتریوم می‌پردازیم. در قسمت هفتم این مجموعه شما با مدل اجرا در ساختار اتریوم آشنا خواهید شد.


    حساب‌ها و حالت

    اتریوم چگونه کار می‌کند؟ – ۷

    مدل اجرا


    مدل اجرا


    تا اینجا، مراحل اجرای یک تراکنش از آغاز تا پایان را یاد گرفتیم. حالا می‌خواهیم ببینیم یک تراکنش در ماشین مجازی واقعا چگونه انجام می‌شود.

    بخشی از پروتکل که بررسی تراکنش‌ها را انجام می‌دهد، EVM یا ماشین مجازی اتریوم (Ethereum Virtual Machine) است.

    ماشین مجازی اتریوم یک ماشین مجازی تورینگ کامل است. تنها محدودیت این ماشین مجازی این است که به‌شکل ذاتی محدود به سوخت است. بنابراین کل محاسباتی که این ماشین می‌تواند انجام دهد با مقدار سوخت تعیین‌شده محدود می‌شود.

    اتریوم چگونه کار می کند؟

    علاوه‌ بر این، معماری ماشین مجازی اتریوم مبتنی بر پشته است. یک ماشین مبتنی بر پشته، کامپیوتری است که برای نگهداری مقادیر موقت از پشته‌ای استفاده می‌کند که مبنای کارش LIFO (last-in first out) است. LIFO یعنی آخرین ورودی زودتر از بقیه خارج می‌شود.

    اندازه هر بخش پشته در ماشین مجازی اتریوم ۲۵۶ بیت و بیشترین اندازه پشته ۱۰۲۴ بیت است.

    ماشین مجازی اتریوم حافظه‌ای دارد که در آن بخش‌ها به‌عنوان آرایه‌هایی از آدرس‌های کلمه‌ای ذخیره می‌شوند. این حافظه ناپایدار است، یعنی دائمی نیست.

    ماشین مجازی اتریوم فضای ذخیره‌سازی هم دارد. برخلاف حافظه، فضای ذخیره‌سازی پایدار است و به‌عنوان بخشی از حالت سیستم است. ماشین مجازی اتریوم، کد برنامه را به‌شکل جداگانه در یک حافظه فقط خواندنی (ROM) مجازی ذخیره می‌کند که فقط از طریق دستورالعمل‌های ویژه می‌توان به آن دسترسی داشت. به این شیوه، ماشین مجازی اتریوم با معماری فون نویمان که در آن کد برنامه در حافظه یا فضای ذخیره‌سازی ذخیره می‌شود متفاوت است.

    ماشین مجازی اتریوم زبان مخصوص خودش را دارد: «بایت‌کد EVM»

    هنگامی‌ که یک برنامه‌نویس قراردادهای هوشمندی را می‌نویسد که روی اتریوم اجرا می‌شوند، معمولا کدها را با یک زبان سطح بالا مانند سالیدیتی می‌نویسد. سپس می‌تواند آن را به زبان بایت‌کد ماشین مجازی اتریوم کامپایل کند که برای این ماشین قابل‌فهم باشد.

    حالا بیایید به اجرا برگردیم.

    قبل از انجام محاسبه‌ای خاص، پردازنده باید اطمینان یابد که اطلاعات زیر موجود و معتبر هستند:

    • حالت سیستم؛
    • سوخت موردنیاز برای محاسبه؛
    • آدرس حسابی که مالک کد در حال اجراست؛
    • آدرس فرستنده تراکنشی که مبدأ این اجراست؛
    • آدرس حسابی که موجب اجرای این کد می‌شود (ممکن است متفاوت از فرستنده اصلی باشد)؛
    • قیمت سوخت تراکنشی که مبدأ این اجراست؛
    • داده‌های ورودی برای این اجرا؛
    • مقداری (به‌شکل وی) که در این حساب به‌عنوان بخشی از اجرای فعلی قرار داده شده است؛
    • کد ماشین برای اجرا؛
    • سربرگ بلاک از بلاک فعلی؛
    • عمق پشته مربوط به فراخوانی پیام یا ایجاد قرارداد فعلی؛

    در آغاز فرایند اجرا، حافظه و پشته خالی هستند و شمارنده برنامه صفر است.

    سپس ماشین مجازی اتریوم به‌شکل بازگشتی تراکنش را اجرا می‌کند و برای هر حلقه حالت سیستم و حالت ماشین را محاسبه می‌کند. حالت ماشین همان حالت جهانی اتریوم است. حالت ماشین متشکل از موارد زیر است:

    • سوخت موجود؛
    • شمارنده برنامه؛
    • محتوای حافظه؛
    • تعداد معلوم کلمات در حافظه؛
    • محتوای پشته؛

    بخش‌های پشته از انتهایی‌ترین بخش چپ سری اضافه یا حذف می‌شوند.

    در هر چرخه، مقدار موردنیاز سوخت از سوخت باقی‌مانده کم می‌شود و شمارنده برنامه افزایش می‌یابد.

    در انتهای هر حلقه، سه احتمال وجود دارد:

    1. ماشین به یکی از حالت‌های استثنا (به‌ عنوان‌ مثال سوخت ناکافی، دستورالعمل‌های نامعتبر، کافی‌نبودن آیتم‌های پشته، سرریز شدن پشته، مقصد پرش (JUMP) نامعتبر و نظایر آنها) می‌رسد و باید متوقف شود. بنابراین فرایند اجرا بدون هیچ تغییری رد می‌شود.
    2. توالی به پردازش ادامه می‌دهد و به حلقه بعدی می‌رسد.
    3. ماشین به توقف کنترل‌شده می‌رسد (پایان فرایند اجرا).

    اگر اجرا با هیچ یک از حالات استثنایی مواجه نشود و به توقف کنترل‌شده یا عادی برسد، آنگاه ماشین «حالت برایند»، «سوخت باقی‌مانده پس از این اجرا»، «حالت جانبی حاصل‌شده» و «خروجی برایند» را تولید می‌کند.

    همین حالا یکی از پیچیده‌ترین بخش‌های اتریوم را گذراندیم. اگر حتی به‌ طور کامل این بخش را متوجه نشدید، ایرادی ندارد. اصلا نیازی نیست که تمام زیر و بم جزئیات اجرا را درک کنید؛ مگر اینکه بخواهید در سطح بسیار پیشرفته‌تری کار کنید.


    چگونه یک بلاک نهایی می‌شود؟


    در نهایت، باید به این موضوع بپردازیم که چگونه بلاکی که حاوی تعداد زیادی تراکنش است، نهایی می‌شود.

    نهایی‌شدن می‌تواند بسته به اینکه آیا این بلاک جدید است یا از قبل وجود دارد، به معنای دو چیز متفاوت باشد. اگر این یک بلاک جدید باشد، منظور از نهایی‌شدن فرایند استخراج این بلاک است. اما اگر این بلاک موجود بوده است، منظور فرایند اعتبارسنجی این بلاک است. در هر مورد، ۴ شرط برای نهایی‌شدن یک بلاک وجود دارد:

    ۱) اعتبارسنجی اومرها (برای استخراج: تعیین اومرها)

    هر بلاک اومر در سربرگ بلاک، باید یک سربرگ معتبر باشد و حتما باید در محدوده نسل ششم به پایین (پنجم، چهارم و …) بلاک فعلی قرار گیرد.

    ۲) اعتبارسنجی تراکنش‌ها (برای استخراج: تعیین تراکنش‌ها)

    مقدار سوخت استفاده‌ شده در بلاک باید با مجموع سوخت مصرف‌شده توسط تراکنش‌هایی که در بلاک فهرست شده‌اند برابر باشد (اگر یادتان باشد، هنگام اجرای یک تراکنش شمارنده سوخت بلاک را نگه می‌داریم که همه آنها در نهایت مقدار کل سوخت مصرف‌شده توسط همه تراکنش‌های موجود در این بلاک را مشخص می‌کنند).

    ۳) پاداش‌دهی (فقط درباره استخراج)

    برای استخراج بلاک ۲ واحد اتر پاداش به آدرس ذی‌نفع ارسال می‌شود. علاوه‌برآن ذی‌نفعِ بلاک فعلی برای هر اومر، به اندازه یک سی‌ودوم پاداش بلاک فعلی را هم می‌گیرد. در نهایت، ذی‌نفع بلاک اومر هم مقدار مشخصی پاداش می‌گیرد (برای محاسبه این مقدار مشخص، فرمول ویژه‌ای وجود دارد).

    ۴) تأیید حالت و نانس (در استخراج: محاسبه حالت و نانس معتبر)

    این مرحله برای اطمینان از انجام همه تراکنش‌ها و تغییرات حالت برایند است. پس از اینکه پاداش بلاک تراکنش نهایی اعمال شد، تعریف بلاک جدید به‌عنوان حالت نهایی صورت می‌گیرد. برای تأیید باید حالت نهایی را با درخت حالتی که در سربرگ ذخیره شده است مطابقت داد.


    در قسمت‌ بعدی این مجموعه نیز با ما همراه باشید…


    قسمت هشتم (آخر)

در حال نمایش 1 نوشته (از کل 1)
  • شما برای پاسخ به این موضوع باید وارد شوید.