در مجموعه نوشتههای «در عمق بلاکچین» تلاش میکنم هر بار در مورد بلاکچین و ویژگیهای اون صحبت کنم. نوشتههای این مجموعه معمولا با یک سوال شروع میشوند و در طول بحث تلاش میکنیم در مورد پاسخ آن سوال بحث کنیم. اگر به بلاکچین علاقهمند هستید خوشحال میشم که متن را مطالعه کنید و نظراتتون را بنویسید.
در ویرگول یا پلتفرمهای نوشتاری مشابه حتما میتونید در مورد بلاکچین نوشتههای متعددی پیدا کنید. من هم احتمالا قرار نیست چیزی فراتر و یا خیلی متفاوت از آن نوشتهها در این پست چیزی بگم، اما ترجیح دادم در ابتدای کار و برای شروع مجموعه «در عمق بلاکچین»، ابتدا به صورت خلاصه از کمی در مورد بلاکچین و ساختار آن صحبت کنیم و به ادبیات یکسان برسیم.
بلاکچین یک پایگاهداده توزیعشده و به عبارتی یک «دفترکل توزیعشده (Distributed Public Ledger)» است. این مفهوم اولین بار به عنوان هستهمرکزی پول دیجیتال بیتکوین معرفی شده و در واقع شامل شبکهای از گرههای (Node) یک شبکه همتا-به-همتا (Peer to Peer) است که هر کدام از آنها یک نسخه تمامی اطلاعات شبکه (شامل تراکنشهای مالی در بیتکوین) را نزد خود نگهداری میکنند. بنابراین طبیعی است که امکان وجود اختلاف در کپیهای مختلف وجود داشته باشد که در چنین شرایطی ملاک نسخهای است که حداقل بیش از نیمی از گرههای شبکه بر روی آن اتفاق نظر دارند.
بلاکچین را میتوان یک ساختمان داده دانست که در آن تمامی اطلاعات شبکه به نحوی ذخیره میشوند که تغییر ناپذیری اطلاعات را تضمین نماید. برای تسلط بیشتر بر روی این ساختمان داده نیاز است که ابتدا مفهوم هش-پوینتر را معرفی کنیم.
هش-پوینتر از مفهوم اشارهگرها وام گرفتهاست و اشارهگرهایی را شامل میشود که علاوه بر آدرس دادهها در حافظه، چکیدهای (رجوع شود به مفهوم Hash) از اطلاعات آن را نیز ذخیره میکند. بنابراین تغییر یک بیت از اطلاعات حافظه هم امکانپذیر نخواهد بود و منجر به ناهمخوانی با چکیده ذخیرهشده در هش-پوینتر میشود. با این تفاسیر، هش-پوینتر اشارهگری به دادههاست که تغییرناپذیری آنها را نیز تامین میکند.
با استفاده از هش-پوینتر میتوان تمامی ساختماندادهای که با استفاده از اشارهگرها ساخته میشوند را به منظور تامین ویژگی تغییر ناپذیری باز طراحی کرد. به عنوان مثال، میتوان ساختماندادهای مشابه با لیستپیوندی (Linked List) را پیادهسازی نمود که دقیقا همان ساختمانداده بلاکچین است.
در علم اقتصاد دفاتر کل برای نگهداری خرد و کلان حسابها استفاده میشود. از آنجایی که بلاکچین اولین در بیتکوین و برای مصارف مالی استفاده شدهاست، آن را معادل یک دفتر کل در نظر گرفتهاند. در واقع، در بلاکچین بیتکوین، تمامی تراکنشهای مالی در ساختارداده فوق ذخیرهسازی شده و نزد تمامی گرههای شبکه ذخیره میشوند.
پیش از این، ساختاری مشابه، اما به صورت مرکزی و نه توزیعشده، در بانکها و نرمافزارهای آنان پیادهسازی و استفاده شده بود. اما از آنجا که نگهداری حسابها نیازمند اعتماد سرمایهداران به بانک است، بیتکوین پیشنهاد میدهند ذخیرهسازی این اطلاعات در محیطهای بیاعتمادی (Trustless Environments) نزد تمامی گرههای شبکه صورت پذیرد تا تغییر در آن امکانپذیر نباشد.
اما نکته مهم آنجاست که چگونه میتوان از ناهماهنگی این نسخ مختلف از دفترکل جلوگیری کرده و به یک نمای واحد از واقعیت دست یافت؟ اولین راهکاری که به ذهن میرسد آن است که طی یک فرآیند کاملا تصادفی هر بار تنها یکی از گرههای شبکه اجازه داشته باشد بر اساس تراکنشهای دریافتی خود از جانب کاربران شبکه، تغییرات مورد نیاز در دفترکل را اعمال نماید و به تمامی گرههای شبکه اطلاع دهد. گرههای دیگر شبکه صحت تراکنشها را (از طریق تطبیقدهی امضای دیجتال بر روی آنها) بررسی میکنند و در صورتی که درخواستها صحیح بود کپی خود از دفترکل را آپدیت میکنند. به این فرآیند توافق بر روی نسخهای واحد از دفترکل پروتکل اجماع (Consensus Protocol) گفته میشود و به فرآیند انتخاب یک گرهی تصادفی برای اعمال تغییرات در دفترکل، استخراج (Mining) میگویند.
به منظور تحقق فرآیند انتخاب تصادفی نیاز است تا تمامی گرههای شبکه یک پازل سخت که تنها راه حل کردن آن بررسی تمامی حالات ممکن است را حل نمایند. در بلاکچین بیتکوین پیدا کردن عددی است که چکیده آن در یک بازه مشخص باشد. گرههای شبکه برای یافتن این عدد بایستی چکیده را برای تمامی اعداد ممکن بررسی کرده و عدد مد نظر خود را بیابند. یافتن چنین عددی برای کامپیوتر به تنهایی ممکن است سالها زمانبر باشد اما سختی چنین پازلی به صورتی تنظیم میشود که در مدت محدود (حدود ۱۰ دقیقه) حداقلی یکی از اعضای شبکه موفق به یافتن پاسخ برای پازل مربوطه شود. به عنوان مثال این فرآیند را میتوان مشابه با ریختن تاس دانست؛ به این معنا که کسی اجازه دارد دفترکل را ویرایش نماید که با ریختن چندهزار تاس موفق به بدست آوردن حدود ۸۰ درصد تاس با مقدار ۶ شود.
به فرآیند اجماع پیشنهادی بیتکوین که مبتنی بر پازل سخت یافتن عدد با چکیده مناسب است، اثبات کار (Proof of Work) گفته میشود. همچنین به کسانی که تلاش میکنند تا جواب مناسب پازل هر ده دقیقه را بیابند ماینر، استخراجکننده یا کاوشگر گفته میشود (همه کلمات به جای کلمه انگلیسیMiner به کار میروند). در حال حاضر قدرت پردازشی تمام ماینرهای شبکه بیتکوینی چیزی در حدود ۱۲۲ اگزا-هش بر ثانیه است.
از آنجایی که بلاکچین یک ساختمان داده تغییرناپذیر بوده و قادر است در محیط بیاعتمادی نیز صحت عملکرد و نگهداری اطلاعات را تضمین نماید. به مرور، عدهای به فکر استفاده از این تکنولوژی برای کاربردهای غیر مالی نیز افتادند. قراردادهای هوشمند (Smart Contracts) مجموعهای از دستورات برنامهنویسی هستند که با استفاده از آنها میتوان پرداختها را در چارچوب قراردادهای انجام داد. در واقع قراردادهای هوشمند را میتوان قیودی بر خروجی تراکنشها قرار گرفت؛ در صورتی که شروط مذکور بر قرار باشند یک پرداخت انجام خواهد شد. تکنولوژی دفترکل غیر متمرکز میتواند نیاز به اعتماد در قراردادهای دنیای فیزیکی را از میان برداشته و حتی در محیطهای بیاعتمادی صحت تحقق یک قرارداد را تضمین نماید. با اضافه کردن قراردادهای هوشمند به بلاکچینها میتوان کاربردهای جدیدی را خلق کنیم که عبارتند از:
مهمترین ویژگیهایی که بلاکچین فراهم میآورد را در لیست زیر بررسی میکنیم:
در مورد ویژگی شبهناشناسی نیاز است کمی توضیح دهیم: بلاکچین به خودی خود امکان ناشناسی را برای کاربران فراهم نمیکند، اما با توجه به این موضوع که هویت کاربران در بلاکچین تنها توسط جفتکلید خصوصی-عمومی آنها مشخص میشود در صورتی که در هیچ فرآیندی هویت واقعی کاربر به هویت دیجیتال او در بلاکچین متصل نشود میتواند کاربر را ناشناس دانست. البته مکانیزمهایی در علم امنیت وجود دارند که بتوانند ناشناسی را برای بلاکچینها تضمین نمایند که از حوصله این نوشته خارج است.
[۱] مهدی فولادگر، «تحلیل و طراحی مشوق برای بلاکچینهای بدون نیاز به مجوز از دیدگاه نظریه بازیها»، پایاننامه کارشناسی ارشد، دانشگاه صنعتی اصفهان، ۱۳۹۸