اتریوم چگونه کار می‌کند(۲) – حساب‌ها و حالت

خانه انجمن ها تالار اتریوم اتریوم چگونه کار می‌کند(۲) – حساب‌ها و حالت

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

     قسمت اول


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


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

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

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


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

    • حساب‌ها (accounts)
    • حالت (state)
    • سوخت و کارمزدها (gas and fees)
    • تراکنش‌ها (transactions)
    • بلاک‌ها (blocks)
    • انجام تراکنش (transaction execution)
    • استخراج (mining)
    • اثبات کار (proof of work)

    قبل از شروع باید یک نکته را بدانید: هر بار که در این مطلب از «هش یا تابع درهم‌سازی» X صحبت می‌کنیم، منظورمان تابع هش KECCAK-۲۵۶ است که اتریوم از آن استفاده می‌کند.


    حساب‌ها


    «حالت اشتراکیِ» جهانیِ اتریوم از تعداد بسیار زیادی جزء کوچک به نام «حساب‌» ساخته شده است که قادرند از طریق یک چارچوب انتقال پیام با یکدیگر تعامل برقرار کنند. هر حساب دارای حالت مخصوص به خودش و یک آدرس ۲۰ بایتی است. آدرس در اتریوم یک شناسه ۱۶۰ بیتی است که برای شناسایی حساب از آن استفاده می‌شود.

    دو نوع حساب وجود دارد:

    • حساب‌های با مالکیت خارجی، که با کلیدهای خصوصی مدیریت می‌شوند و هیچ کد مخصوصی ندارند.
    • حساب‌های مبتنی بر قرارداد که با کد قراردادشان مدیریت می‌شوند و حاوی کد مرتبط با آنها هستند.

    تفاوت بین حساب‌های با مالکیت خارجی و حساب‌های مبتنی بر قرارداد


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

    برخلاف حساب‌های با مالکیت خارجی، حساب‌های مبتنی بر قرارداد نمی‌توانند خودشان تراکنش‌های جدید را وارد کنند و به اصطلاح آغازکننده باشند. این حساب‌ها فقط می‌توانند تراکنش‌ها را در پاسخ به تراکنش‌های دیگری که دریافت می‌کنند (از حساب‌های با مالکیت خارجی یا حساب‌های مبتنی بر قرارداد دیگر) ارسال کنند. در بخش «تراکنش‌ها و پیام‌ها» بیشتر درباره فراخوانی قرارداد به قرارداد توضیح خواهیم داد.

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


    حالت حساب


    حالت حساب از هر نوعی که باشد، ۴ جزء دارد:

    • نانس (nonce): اگر یک حساب از نوع مالکیت خارجی باشد، این عدد نشان‌دهنده تعداد تراکنش‌های ارسال‌شده از آدرس آن حساب است. اگر این حساب مبتنی بر قرارداد باشد، نانس تعداد قراردادهای ایجاد شده توسط این حساب را نشان خواهد داد.
    • موجودی (balance): تعداد وی (Wei) که در آن آدرس حساب موجود است. هر اتر برابر با ۱۰ به توان 18 وی است.
    • ریشه ذخیره (storageRoot): هش نود ریشه (root node) از درخت مرکل پاتریسیا (درخت مرکل را بعدا توضیح خواهیم داد). این درخت، هش محتویات ذخیره‌شده در حساب را رمزگذاری می‌کند و مقدار آن به‌ طور پیش‌فرض خالی است.
    • کدهش (codeHash): هش ماشین مجازی اتریوم (EMV) که متعلق به آن حساب است. برای حساب‌های مبتنی بر قرارداد، کد مخصوص آنها درهم‌سازی شده و به‌عنوان کدهش ذخیره می‌شود. برای حساب‌های با مالکیت خارجی، بخش مربوط به «کدهش» خالی است.

    حالت جهانی


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

    درخت مرکل نوعی درخت دودویی (باینری) است که از مجموعه‌ای از نودها تشکیل شده است:

    • تعداد زیادی نود برگ در انتهای درخت که حاوی داده‌های زیرین هستند؛
    • مجموعه‌ای از نودهای میانی که در آن هر نود، حاصل درهم‌سازی دو نود فرزند خودش است؛
    • یک نود ریشه تکی که از تابع درهم‌سازی دو نود فرزندش تشکیل شده است و نشان‌دهنده رأس درخت است.
    اتریوم چگونه کار می کند؟

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

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

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

    همین ساختار درخت برای ذخیره تراکنش‌ها و رسیدها (receipt) هم استفاده می‌شود. به‌طور خاص، هر بلاک دارای یک سربرگ (هِدِر) است که هش نود ریشه را از سه ساختار مختلف درخت مرکل ذخیره می‌کند. این سه درخت عبارت‌اند از:

    1. درخت حالت
    2. درخت تراکنش‌ها
    3. درخت رسیدها

    توانایی ذخیره همه این اطلاعات در درخت مرکل، برای لایت کلاینت‌ها یا لایت نودها در اتریوم سودمند است. اگر یادتان باشد یک بلاک چین توسط تعدادی نود اداره می‌شود. به‌طورکلی دو نوع نود داریم: نودهای کامل (فول نودها) و لایت نودها.

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

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

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

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

    هر نود که می‌خواهد بخشی از داده‌ها را تأیید کند، می‌تواند از مفهوم «اثبات مرکل» (Merkle Proof) استفاده کند. اثبات مرکل از موارد زیر تشکیل شده است:

    1. قطعه‌ای از داده‌ها به همراه هش‌هایشان که باید تأیید شوند؛
    2. هش ریشه درخت؛
    3. شاخه (شامل همه درهم‌سازی‌های موجود در طول مسیر از قطعه موردنظر به سمت ریشه)
    اتریوم چگونه کار می کند؟

    هرکس که بخواهد عمل اثبات را انجام دهد، می‌تواند تأیید کند که درهم‌سازی این شاخه شامل تمام طول مسیر به سمت بالای درخت است و بنابراین قطعه موردنظر واقعا در جایگاه درست خودش در درخت قرار دارد.

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


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


    قسمت سوم

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