اتریوم چگونه کار می کند؟ - قسمت اول

اگر با دنیای ارزهای دیجیتال کمی آشنا باشید، حتما نام اتریوم را شنیدهاید. نداشتن پیشزمینه درباره بلاک چین اتریوم، شما را با عبارات و اصطلاحات گنگ بسیاری مواجه میکند که سد راه یادگیری شما درباره یکی از نوآوریهای خارقالعاده دنیای ارزهای دیجیتال میشود. در این مطلب قصد داریم نحوه کار اتریوم را با جزئیات آن توضیح داده و مفاهیم آن را توضیح دهیم. با ما همراه باشید.
اتریوم چیست؟
اتریوم در اصل یک پایگاه داده (دیتابیس) عمومی است که سوابق تراکنشهای دیجیتال را به شکل دائمی نگهداری میکند. این پایگاه داده به هیچ قدرت مرکزی برای حفظ و نگهداری نیاز ندارد، زیرا بهعنوان یک سیستم تبادلی «بدون نیاز به اعتماد» عمل میکند. چارچوبی که در آن افراد میتوانند تراکنشهای همتا به همتا را انجام دهند، بدون اینکه نیاز باشد به یکدیگر یا حتی به یک طرف سوم اعتماد کنند.
اگر گیج شدهاید نگران نباشید. هدف ما توضیح چگونگی عملکرد اتریوم در سطح فنی است، بدون اینکه درباره ریاضیات پیچیده آن و فرمولهایی که به نظر ترسناک میرسند صحبت کنیم. اگر برنامهنویس هم نباشید، میتوانید تا انتهای مطلب حداقل درک بهتری از این فناوری به دست آورید. اگر بخش فنی آن دشوار است، مشکلی نیست؛ زیرا قرار نیست تمام جزئیات آن را درک کنید. کافی است روی کلیات آن تمرکز کنید.
بسیاری از مباحثی که در این مطلب پوشش داده شدهاند، تجزیهوتحلیلی از مفاهیم موردبحث در گزارش فنی (یلو پیپر – 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 صحبت میکنیم، منظورمان تابع هش KECCAK-256 است که اتریوم از آن استفاده میکند.
حسابها
«حالت اشتراکیِ» جهانیِ اتریوم از تعداد بسیار زیادی جزء کوچک به نام «حساب» ساخته شده است که قادرند از طریق یک چارچوب انتقال پیام با یکدیگر تعامل برقرار کنند. هر حساب دارای حالت مخصوص به خودش و یک آدرس ۲۰ بایتی است. آدرس در اتریوم یک شناسه ۱۶۰ بیتی است که برای شناسایی حساب از آن استفاده میشود.
دو نوع حساب وجود دارد:
- حسابهای با مالکیت خارجی، که با کلیدهای خصوصی مدیریت میشوند و هیچ کد مخصوصی ندارند.
- حسابهای مبتنی بر قرارداد که با کد قراردادشان مدیریت میشوند و حاوی کد مرتبط با آنها هستند.

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

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

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

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

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

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

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

هر نود که میخواهد بخشی از دادهها را تأیید کند، میتواند از مفهوم «اثبات مرکل» (Merkle Proof) استفاده کند. اثبات مرکل از موارد زیر تشکیل شده است:
- قطعهای از دادهها به همراه هشهایشان که باید تأیید شوند؛
- هش ریشه درخت؛
- شاخه (شامل همه درهمسازیهای موجود در طول مسیر از قطعه موردنظر به سمت ریشه)

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




