این یک ترجمه آزاد از مقالهای به زبان انگلیسی است. لینک مقاله اصلی در انتهای پست ذکر شده است.
به احتمال قوی درباره زنجیرهبلوک اتریوم چیزهایی شنیدهاید، حتی اگر ندانید که اتریوم چیست. اتریوم اخیرا زیاد در اخبار بوده، از جمله روی جلد بعضی از مجلههای بزرگ، اما اگر شما پیشزمینهای از این که اتریوم دقیقاً چیست نداشته باشید، مطالعه و درک این مطالب سخت خواهد بود. حالا اتریوم چیست؟ در اصل، یک پایگاه داده عمومی که رکوردهای تراکنشهای دیجیتال را به طور دائمی نگهداری میکند. این پایگاه داده به هیچ متصدی مرکزی برای نگهداری و تأمین امنیت نیاز ندارد. در عوض اتریوم به عنوان یک سیستم تراکنشی «بدون اعتماد» عمل میکند - یک فریمورک که در آن افراد میتوانند تراکنشهای نظیر-به-نظیر (peer-to-peer) ایجاد کنند بدون آن که به اعتماد به شخص ثالث یا حتی یکدیگر نیاز داشته باشند.
هنوز سردرگم هستید؟ این پست از همینجا وارد میشود. هدف من این است که در سطح فنی توضیح دهم که اتریوم چطور عمل میکند، بدون ریاضیات پیچیده یا فرمولهای ترسناک. حتی اگر یک برنامهنویس نیستید، امیدوارم که پس از خواندن این پست چیز بیشتری از این تکنولوژی نصیب شما شود. اگر بخشهایی از پست زیادی فنی یا سخت فهم است، مشکلی نیست! واقعاً نیازی نیست که همه جزئیات کوچک را درک کنید. من توصیه میکنم که روی درک مطالب در سطح کلی تمرکز کنید.
بسیاری از مطالبی که در این پست پوشش داده شده یک دستهبندی از مفاهیمی است که در Yellow Paper اتریوم طرح شدهاند. من برای آسانتر کردن درک اتریوم، توضیحات و دیاگرامهای خودم را اضافه کردم. خوانندگانی که شجاعت کافی برای چالش فنی را دارند میتوانند Yellow Paper اتریوم را هم بخوانند.
شروع کنیم!
یک بلاکچین یک "ماشین سینگلتون تراکنشی امن شده با رمزنگاری با حالت مشترک"(۱) است. خیلی پرطمطراق است، نه؟ بگذارید خردش کنیم:
اتریوم این پارادایم بلاکچین را پیادهسازی کرده است.
بلاکچین اتریوم در اصل یک ماشین حالت بر پایه تراکنش است. در علوم کامپیوتر، یک ماشین حالت به چیزی اشاره دارد که یک سری از ورودیها را میخواند و بر اساس آنها به یک حالت جدید گذار میکند.

با ماشین حالت اتریوم، ما با یک حالت آغازین (Genesis State) شروع میکنیم. مثل یک لوح سفید، پیش از این که تراکنشی در شبکه رخ داده باشد. وقتی تراکنشها اجرا میشوند، حالت آغازین به حالتی نهایی (Final State) گذار میکند. در هر لحظه از زمان این حالت نهایی، حالت فعلی (Current State) اتریوم است.

حالت اتریوم حاوی میلیونها تراکنش (Transaction) است. این تراکنشها در بلوکها (Block) گروهبندی میشوند. یک بلوک حاوی دنبالهای از تراکنشهاست و هر بلاک به بلاک قبل از خود زنجیر (Chained) شده است.

برای انجام یک گذار از یک حالت به حالت بعدی، تراکنش میبایست معتبر (Valid) باشد. برای آن که یک تراکنش معتبر محسوب شود، باید یک فرایند اعتبارسنجی که ماینینگ خوانده میشود را بگذراند. در ماینینگ یک گروه از گرهها (Node) (همان کامپیوترها) منابع پردازشی خود را برای ایجاد یک بلوک از تراکنشهای معتبر صرف میکنند.
هر گرهی روی شبکه که خود را یک ماینر (Miner) معرفی میکند میتواند برای ایجاد و اعتبارسنجی یک بلاک تلاش کند. ماینرهای بسیاری در سراسر جهان همزمان برای ایجاد و اعتبارسنجی بلوکها تلاش میکنند. هر ماینر وقتی یک بلوک را به زنجیرهبلوک پیشنهاد میکند یک اثبات (Proof) ریاضی [همراه آن] ارائه میکند، و این اثبات به عنوان یک تضمین عمل میکند: اگر اثبات وجود داشته باشد (صحیح باشد)، بلوک معتبر است.
برای این که یک بلوک به زنجیرهبلوک اضافه شود، ماینر میبایست آن را سریعتر از سایر ماینرهای رقیب اثبات کند. فرایند اعتبارسنجی هر بلوک با استفاده از اثبات ریاضی که ماینر ارائه میکند با نام الگوریتم «اثبات کار» (Proof of Work) شناخته میشود.
ماینری که یک بلوک جدید را اعتبارسنجی میکند مقدار مشخصی ارزش به عنوان پاداش (Reward) دریافت میکند. این ارزش چیست؟ بلاکچین اتریوم برای این کار از یک توکن دیجیتال داخلی با نام اتر (Ether) استفاده میکند. هر زمان که یک ماینر یک بلاک را ثبت میکند، مقداری توکن اتر جدید خلق و به آن ماینر اعطا میشود.
ممکن است این سوال برایتان پیش بیاید که چه چیز تضمین میکند که همه فقط یک زنجیره از بلوکها معتبر بدانند؟ چطور میتوان مطمئن شد که یک گروه از ماینرها تصمیم نگیرند که زنجیره بلوکهای خود را (درون شبکه بلاکچین مفروض ما) بسازند؟
قبلتر ما بلاکچین را یک ماشین سینگلتون تراکنشی با حالت مشترک تعریف کردیم. با استفاده از این تعریف، میتوانیم بفهمیم که حالت کنونی صحیح (Correct Current State) همان حقیقت سراسری واحدی است که هر کسی در شبکه باید آن را بپذیرد. داشتن چند حالت (یا زنجیره) کل سیستم را نابود میکند، چون در آن صورت نمیتوان روی حالت صحیح توافق کرد. اگر زنجیرهها منشعب (واگرا) میشدند، این امکان وجود داشت که شما روی یک زنجیره ۱۰ واحد ارز، روی زنجیره دیگر ۲۰ واحد ارز و روی زنجیره دیگری ۴۰ واحد ارز داشته باشید. در این حالت هیچ راهی برای تعیین این که کدام زنجیره معتبر است وجود ندارد.
هر وقت چند مسیر (برای زنجیره) خلق میشود، یک فورک (Fork) رخ میدهد. معمولاً ما از رخ دادن فورکها اجتناب میکنیم، به این دلیل که فورکها سیستم را مختل میکنند و افراد را مجبور میکنند که زنجیرهای را که به درستی آن باور دارند انتخاب کنند.

برای تعیین مسیر معتبرتر و پیشگیری از ایجاد چند زنجیره، اتریوم از مکانیسمی به نام GHOST Protocol استفاده میکند (۲).
به بیان ساده این پروتکل میگوید که ما باید مسیری را انتخاب کنیم که بیشترین پردازش روی آن انجام گرفته است. یک راه برای تعیین این مسیر استفاده از شماره بلوک آخرین بلوک (بلوک برگ یا Leaf Block) هر زنجیره است، که مجموع تعداد بلوکها در آن مسیر را نشان میدهد (بدون محاسبه Genesis Block). هر چه شماره بلوک بیشتر باشد، مسیر طولانیتر و تلاش برای ماینینگ روی آن مسیر بیشتر بوده است. استفاده از این منطق به ما امکان توافق همگانی روی نسخه استاندارد حالت کنونی (canonical version of the current state) را میدهد.
حالا که یک دورنمای کلی از این که بلاکچین چیست دریافت کردید، بیایید در اجزاء اصلی سیستم اتریوم دقیق شویم:
حالت مشترک (shared-state) اتریوم از تعداد زیادی از شیءهای (Object) کوچک (حسابها) تشکیل شده که قابلیت برهمکنش با یکدیگر را از طریق یک فریمورک message-passing دارند. هر حساب یک حالت مرتبط با خود و یک آدرس ۲۰ بایتی دارد. یک آدرس در اتریوم یک شناسه ۱۶۰ بیتی است که برای شناسایی هر حساب به کار میرود.
دو نوع حساب وجود دارد:

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

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

(ادامه دارد...)
منبع: https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369
پانویسها:
(1) Cryptographically Secure Transactional Singleton Machine with Shared-State
(2) Greedy Heaviest Observed Subtree