• info@4safir.com
  • 02632710780
  • مهر ۱۱, ۱۴۰۱
  • اتریوم چیست

    اتریوم چیست

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

    اتریوم چیست؟

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

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

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

    تعریف بلاک چین

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

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

    اتریوم چنین بلاک چینی را اجرا می‌کند.

    توضیح بلاک چین اتریوم

    بلاک چین اتریوم اساسا یک ماشین حالت (state machine) مبتنی بر تراکنش است. در علوم کامپیوتر، یک ماشین حالت به چیزی اشاره دارد که مجموعه‌ای از ورودی‌ها را می‌خواند و بر اساسِ همان ورودی‌ها حالت خود را تغییر می‌دهد و به حالت جدید انتقال می‌یابد.

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

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

    هر حالت اتریوم میلیون‌ها تراکنش دارد. این تراکنش‌ها در «بلاک‌ها» دسته‌بندی می‌شوند. یک بلاک حاوی یک سری از تراکنش‌هاست و هر بلاک با بلاک قبلی به‌شکل زنجیره به هم متصل‌اند.

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

    هر نود در شبکه که خودش را به‌عنوان یک ماینر اعلام می‌کند، می‌تواند یک بلاک را ایجاد و اعتبارسنجی کند. تعداد زیادی از ماینرها از سراسر دنیا سعی می‌کنند بلاک‌هایی را ایجاد و اعتبارسنجی کنند. هر ماینر یک «گواه یا اثبات» ریاضی را در هنگام ارسال یک بلاک به بلاک چین ارائه می‌کند و این گواه به‌عنوان یک ضمانت عمل می‌کند: اگر گواه وجود دارد پس بلاک باید معتبر باشد.

    برای اضافه‌ شدن یک بلاک به بلاک چین اصلی، یک ماینر باید سریع‌تر از همه ماینرهای رقیب آن را اثبات کند. فرایند اعتبارسنجی هر بلاک که یک ماینر برای آن گواه یا اثبات ریاضی را ارائه می‌کند به «اثبات کار» (proof of work) معروف است.

    ماینری که یک بلاک جدید را اعتبارسنجی می‌کند، برای انجام کارش مقدار مشخصی ارزش پاداش می‌گیرد. این ارزش چیست؟

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

    اما چه تضمینی وجود دارد که هر فرد با یک زنجیره از بلاک‌ها کار کند؟ چطور می‌توانیم مطمئن باشیم که مجموعه‌ای از ماینرها دور هم جمع نشوند که تصمیم بگیرند زنجیره بلاک‌های خودشان را ایجاد کنند؟

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

    اگر در زنجیره‌ها اختلاف وجود می‌داشت، نمی‌توانستید بفهمید موجودی سکه‌هایتان دقیقا چقدر است. یعنی ممکن بود در یک زنجیره ۱۰ سکه، در زنجیره دیگر ۲۰ سکه و در زنجیره دیگری ۴۰ سکه داشته باشید. در چنین سناریویی راهی وجود ندارد که بتوان تعیین کرد کدام زنجیره «معتبرتر» است.

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

    برای تعیین معتبرترین مسیر و نیز جلوگیری از زنجیره‌های متعدد، اتریوم از مکانیسمی به نام «پروتکل شبح (GHOST protocol)» استفاده می‌کند که کوتاه‌شده عبارت زیر است:

    “GHOST” = “Greedy Heaviest Observed Subtree”

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

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

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

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

    حساب‌ها

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

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

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

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

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

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

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

    حالت حساب

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

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

    حالت جهانی

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

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

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