اگر روزی در یک جزیرهی متروکه گیر کردید، دانستن اینکه چگونه روند اجماع غیرمتمرکز را یا بهعبارتدیگر، یک بلاک چین بسیار ساده را با دست اجرا کنید، میتواند بسیار سودمند باشد. تمام چیزی که نیاز دارید تعدادی فرد بازمانده، این پست، یک خودکار و چندتکه کاغذ است.
بیایید به داستان اصلی برگردیم و با قهرمانان نترسمان (هوگو، ساویر، کیت و جک) که بهتازگی در یک جزیره متروکه در اقیانوس آرام جنوبی سقوط کردهاند، از این فرایند عبور کنیم.
یک خلاصهی کوتاه: گروه در حال تلاش برای پیادهسازی سکهی جزیره است؛ یک ارز انقلابی جدید که به اقتصاد دادوستدی فلج شدهی جزیره پایان خواهد داد. اعضای گروه توافق کردهاند و عادلانه است که هرکدام با ۱۰۰ سکه آغاز کنند. ازآنجاییکه آنها برای ضرب سکههای واقعی فلز ندارند، مجبورند که با چندتکه کاغذ این کار را شدنی کنند. به خاطر بیاعتمادی، گروه نتوانسته روی اینکه یک نفر ترازهای مالی را دنبال کند به توافق برسد. تنها انتخاب آنها این است که باهم این توازنها را حفظ کنند.
ما با طرحی شروع میکنیم که احتمالاً سادهترین پیادهسازی بلاک چین برای مورداستفادهی جزیره ماست. در پستهای آینده ما میتوانیم پیادهسازیهای دیگری را بجوییم و آنها را به مفاهیمی مانند اثبات کار و اثبات سهام پیوند بزنیم. این به ما کمک میکند که مزایا و اشکالاتشان را ببینیم. اما فعلاً بگذارید تا جایی که ممکن است ساده شروع کنیم.
ما سعی میکنیم به چه چیزی برسیم؟ درواقع خیلی ساده است، تمام چیزی که ما تلاش میکنیم انجام دهیم نگهداری یک جدول تراز مالی سادهروی یک تکه کاغذ است. این جدول نشان خواهد داد که هرکدام از قهرمانان ما چند سکه دارد. ترفند کار این است که چون ما نمیتوانیم یک تکه کاغذ که تنها منبع حقیقت است داشته باشیم، مجبوریم که همهچیز را برابر نگهداشته و اجازه دهیم هر عضو گروه نسخه خودش را داشته باشد. این بخش غیرمتمرکز است. و طبیعتاً انتظار داریم که درنهایت هر ۴ تکه کاغذ یک چیز را نشان دهند، این بخش اجماع است.
خب این تکه کاغذ چطور خواهد بود؟
این کاغذ اولین کاغذی است که بر آن توافق میکنیم و به همین خاطر روز ۱ نامگذاری شده است. این تعادلها از کجا آمدهاند؟ ما قبلاً توافق کردهایم که هرکدام از اعضای گروه با ۱۰۰ سکه آغاز میکند. همچنین نیاز داریم که یکی از بازماندگان این کاغذ را بنویسد. مهم نیست چه کسی باشد پس بیایید هوگو را انتخاب کنیم. او کسی خواهد بود که این کاغذ را چاپ میکند و به همه میدهد و اطمینان حاصل میکند که هرکدام یک کپی نگه میدارد (فراموش کردم بگویم که جزیره یک دستگاه کپی عالی دارد).
ازآنجاییکه انتظار میرود که تراز سکهها عوض شود، در پایان هرروز یک تکه کاغذ بهروز شدهی جدید درست خواهیم کرد. اما ممکن است کسی که نسخهی بهروز شده را چاپ میکند همیشه هوگو نباشد؛ چراکه میخواهیم تا جایی که ممکن است همهچیز عادلانه بماند.
یک بخش مهم دیگر، با توجه به کمبود اطمینان متقابل در گروه، این است که هرکدام از اعضا بهشخصه وضعیت بهروزرسانی را تأیید کند. یک راه ساده برای دستیابی به هدف ذکرشده این است که هرکدام از بازماندگان برگهها را امضا کند؛ البته فقط درصورتیکه با متن نوشتهشده روی برگه موافق باشند.
چند نفر باید یک برگه را امضا کنند تا نهایی و تأیید شده محسوب شود؟ ما نیاز داریم تا به اجماع برسیم، پس امضای اکثریت کافی است. ازآنجاییکه درمجموع ۴ نفر داریم، اکثریت حداقل ۳ نفر از ۴ نفر است. برگهی بالا توسط هر ۴ نفر امضاشده پس قطعاً نهایی است. چرا امضای هر ۴ نفر را نمیخواهیم؟ چون این کار به یک نفر اجازه میدهد که کل فرایند را به خطر اندازد. اگر ساویر برای چند روز به ماهیگیری برود، اعضای گروه نمیتوانند تا زمان برگشت او ترازهای مالی را بروز کنند و این به یک نفر قدرت زیادی میدهد. چرا به اکثریت نیاز داریم؟ چرا ۲ تا از ۴ امضا کافی نیستند؟ چون اگر ما فقط به ۲ تا از ۴ تا نیاز داشته باشیم، ممکن است با این اتفاق روبرو شویم که ۲ نفر (مثلاً هوگو و ساویر) یک نسخه از ترازهای مالی را امضا کرده و ۲ نفر دیگر (کیت و جک) نسخهی متفاوتی که با آنها مطابقت ندارد را امضا کنند. نمیتوانیم دو نسخه متناقض از واقعیت را داشته باشیم که هردو آنها نیز نهایی شده باشند.
در صبح روز دوم، کیت میخواهد یک گوجه بخرد. هوگو هر گوجه را به قیمت ۲ سکه میفروشد. او میخواهد ۲ سکه بهحساب هوگو منتقل کند. کیت یک تکه کاغذ جدید برمیدارد و انتقال را روی آن مینویسد:
این اولین اقدام کیت است، پس آن را با این عنوان برچسب میزند. بهعلاوه، کیت این برگه را امضا میکند. باید امضای او را داشته باشیم تا مطمئن شویم کسی انتقالی را بهحساب او جعل نکند.
پایان روز اول نزدیک است و گروه میخواهد یک مجموعه برگه بروز شده از ترازها منتشر کند. هوگو برگه را برای روز اول منتشر کرد و امضای همه را جمع کرد. منطقی است که بهنوبت این کار را کنند. گروه توافق کرد که یک ترتیب چرخشی ساده استفاده کنند: هوگو، ساویر، کیت، جک، هوگو، ساویر، و به همین ترتیب. این بدان معناست که انتشار برگهی وضعیت برای روز ۲ مسئولیت ساویر است. برگهای که او منتشر میکند، انتقال کیت را نشان میدهد:
این برگهای که ساویر درست کرده هنوز نهایی نیست چون فقط توسط ساویر امضاشده است. او باید امضاهای بیشتری جمع کند. ساویر پیش اعضای گروه رفته و از هرکدام میخواهد تا برگه را تأیید و امضا کنند. این برگه خیلی آسان قابل تأیید است. ابتدا تأیید کننده باید به مجموعهی برگههای خودش نگاه کند و برگه وضعیتی که ترازها را برای روز قبل (در اینجا روز ۱) نشان میدهد پیدا کند. سپس تأیید کننده باید لیست جدید انتقالات را مرور کند. در این مورد فقط یک انتقال توسط کیت داریم. این انتقال بهسادگی قابل تأیید است، میتوانیم اطمینان حاصل کنیم که واقعاً توسط کیت امضاشده و مطمئن شویم که کیت در حسابش مقدار کافی سکه برای انتقال به هوگو دارد.
وقتیکه همهی ساکنین جزیره فرایند تأیید خود را تکمیل کرده و برگه را امضا کردند، ساویر اکنون یک برگه وضعیت نهایی برای روز ۲ دارد تا بین همه منتشر کند. هرکسی یک کپی از برگه را گرفته و با خوشحالی و رضایت شب را به سر میبرند.
روز ۳ پیش روی ماست. سیستم خوب کار میکند و همه برای خرج کردن سکههایشان هیجانزدهاند. هوگو میخواهد با ۱۰ سکه مقداری هیزم از ساویر بخرد. ساویر میخواهد مقداری قرص به ازای ۲۵ سکه از جک بگیرد و جک دلش گوجه میخواهد و ۲ سکه برای خرید یک گوجه به هوگو میدهد. هرکدام از آنها بک تکه کاغذ درست میکنند که جزییات انتقالشان را در بردارد.
هوا رفتهرفته تاریک میشود، کسی که ترازهای امروز را باید منتشر کند، کیت است. برای اینکه مطمئن شوند که کیت این انتقالات را در برگه پیشنهادش لحاظ میکند، هرکدام از آنها باید یک کپی از درخواست انتقال خود را به او بدهد. درواقع اینکه کپیها را به همه بدهند منطقی است چون کسی که تقاضای اجرای یک انتقال را دارد الزاماً به یاد نمیآورد که انتشار نسخه بروز شده امروز نوبت کیست.
جک برای تحویل درخواست انتقالش به کیت تأخیر میکند و زمانی که او برگه را برایش میآورد، وضعیت تراز مالی روز او نوشتهشده است:
جک نگران است که این وضعیت تراز مالی شامل انتقالهای خودش نباشد. به این معنی که هوگو هزینه پرداخت جک برای گوجهفرنگی را دریافت نخواهد کرد و برای شام به جک گوجهفرنگی ندهد. جک امشب باید گرسنه به تخت خواب برود. او به دنبال چیزی برای خوردن است و پیشنهاد کیت برای امروز را امضا نمیکند. خوشبختانه کیت میتواند امضاهای کافی را از بقیه گروه دریافت کند:
کیت موفق شد ۳ امضا بر روی کاغذ دریافت کند، هرکدام تأیید میکنند که این تراز مالی واقعاً با انتقال و تراز مالی دیروز همخوانی دارد. ما اکثریت راداریم، بنابراین این لیست وضعیت، نهایی است.
روز چهارم است و کسی نمیداند جک کجاست. او شب قبل به ماهیگیری رفت، هوا طوفانی شد و نتوانست به اردوگاه برگردد. اوضاع کمی پیچیده شده است زیرا امروز نوبت جک بود که تراز مالی را بهروزرسانی کند.
کیت میخواهد امروز چند انتقال انجام بدهد، او آنها را بر روی یک برگ کاغذ مینویسد و برای همه کپی میکند:
شب شده و جک هنوز برنگشته است. تصمیمگیری درباره بروز کردن تراز مالی در روز جاری قبلاً در گروه انجامشده بود، اما جک رفته و هنوز برنگشته است؛ بنابراین تراز مالی امروز بهروزرسانی نمیشود.
روز پنجم است و هوگو مسئول انتشار بهروزرسانی روزانه است. برای چند روز بارانی شده است و هوگو مکان گرمتری برای خواب میخواهد. او از ساویر میخواهد برایش یک کلبه چوبی کوچک بسازد. ساویر ۲۰۰ سکه برای این کار میخواهد. مشکلی وجود دارد زیرا هوگو تنها ۹۸ سکه دارد. هوگو ایده جالبی دارد، او امروز مسئول انتشار تراز مالی است، پس چرا یک انتقال با این مبلغ به ساویر اضافه نکند؟
تراکنش دیگری در این روز انجامنشده است. هوگو انتقال کیت را از روز قبل به همراه انتقال جک از دو روز قبل که نهایی نشد، در اختیار دارد. او همهی آن انتقالات را باهم در تراز مالی جدیدش میآورد:
هوگو این بهروزرسانی را باوجوداینکه منطقی به نظر نمیرسد، امضا میکند. برای نهایی کردن این وضعیت بهروزرسانی، او نیاز به جمعآوری ۲ امضای دیگر دارد. زمانی که او به ساویر و کیت میرسد، آنها از تراز مالی نهایی قبلی (روز سوم) متوجه میشوند که هوگو ۹۲ سکه داشت. به چه طریقی او توانسته ۲۰۰ سکه به ساویر بدهد؟ آنها حاضر نشدند امضا کنند تا زمانی که هوگو این خطا را رفع کرده و انتقال نامعتبر را از برگه پاک کند. او با بیمیلی موافقت کرده و تراز مالی جدیدی را مینویسد که درنهایت هر سه نفر آن را امضا میکنند.
این تراز مالی جدید به دلیل اینکه ۳ امضا دارد، نهایی شد.
صبح روز ششم است. جک بالاخره به اردوگاه برگشت. او روزهای طوفانی سختی را پشت سر گذاشته و در دو روز گذشته نیز در گفتگوها حضور نداشته است و از اخبار مربوط به انتقالها و تراز مالیهای جدید بیاطلاع است. او دقیقاً به یاد ندارد که آخرین بار چند سکه داشته است. از اولین بازماندهای که میبیند درباره آخرین بهروزرسانی تراز مالی میپرسد. او تراز مالی نهایی روز پنجم را گرفته و مشاهده میکند که انتقال کیت در روز سوم تأیید شده است.
برای جک همگامسازی با بقیه اعضا آسان است. با مشاهده هر ۳ امضای دیگر در آخرین تراز مالی، میتواند نسبتاً اطمینان یابد که انتقالاتی که در غیاب او انجامشده مطمئن بوده و تقلبی در آنها صورت نگرفته است. همچنین او میتواند محاسبات خود را بر اساس این بهروزرسانی و آخرین بروز رسانی (از روز دوم) انجام دهد. با این حساب جک میتواند در انتقالات امروز نیز بدون آنکه چیزی را ازدستداده باشد، شرکت کند.
به نظر میرسد سیستم به خوبی کار میکند. درست است که کمی ساده است، اما برای آنچه که ساکنان جزیره نیاز دارند، کافی به نظر میرسد. خوب، ما نمیتوانیم یک بلاک چین کارآمد بدون وایت پیپر داشته باشیم! گروه دورهم جمع شده و با انتشار نسخه باشکوه وایت پیپرشان این موفقیت عظیم را جشن میگیرند.
چرا همه اینها یک بلاک چین محسوب میشود؟ برای شروع، هر تکه برگه که روزانه منتشر میشود، یک بلاک را نشان میدهد. هر بلاک شمارهگذاری شده و به قبلی اشاره میکند؛ در این صورت زنجیرهای از بلوکها تشکیل میشود. برای بررسی وضعیت فعلی تراز مالی، هر ناظر باید از ابتدای زنجیره شروع کند (روز اول – جنسیس بلاک) و هر یک از بلوکها را یکی پس از دیگری در زنجیره بررسی کند. و درنهایت اینکه ترازهای مالی بهطور مداوم ساخته میشوند.
آیا این یک پیادهسازی بلاک چین ایده آل است؟ احتمالاً نه. از راههای مختلف میتوان آن را بهبود بخشید. برای مثال، بلاک چین بالا تنها از این ۴ نفر پشتیبانی میکند. چه اتفاقی میافتد اگر دیگر بازماندگان در جزیره سقوط کنند؟ آیا این پروتکل میتواند آنها را با خودش تطبیق دهد؟ این پروتکل هماکنون انحصاری است، چگونه میتوانیم آن را غیرانحصاری کنیم؟ اگر ما بخواهیم آن را برای اثبات کار یا اثبات سهام اصلاح کنیم، چه میشود؟
اینها سؤالاتی است که برای تکامل بلاک چین و ترازهای مالی باید به آنها جواب دهیم.