حکمرانی بلاکچین ۲:

پرونده / ساختار تراکنش‌ها بر روی بلاکچین

پرونده / ساختار تراکنش‌ها بر روی بلاکچین
تاریخ انتشار : ۲۴ خرداد ۱۴۰۱

هنگامی که کاربر کیف پول بیتکوین را بارگیری و نصب کند، او آماده انتقال و دریافت بیتکوین است.

به گزارش گرداب، برای فهم بهتر نحوه عملیات بلاکچین، بهتر است قدم به قدم فرایندی که یک تراکنش طی می‌کند را دنبال کنیم.

انتقال رمزارز (در این مثال بیتکوین) از کاربر شماره ۱ به کاربر شماره ۲ فرایندی طی می‌کند که برای انجام انجام هر تراکنش بر روی بلاکچین باید انجام بگیرد.

مرحله اول: کیف پول بیتکوین
اولین کاری که کاربر شماره ۱ باید انجام دهد، انتخاب یک کیف پول بیکوین است. بیکوین پروتکلی است که از طریق یک نرم‌افزار قابل دسترسی و در حال حاضر کیف پول‌های متعدد بیتکوین وجود دارد (مانند Bitcoin core و یا نمونه رایج‌تر در ایران trust wallet). همانطور که مرورگر‌های مختلفی در اینترنت وجود دارد (مانند کروم، فایرفاکس، اوپرا و ...) کیف‌پول‌های متعددی نیز وجود دارد.

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

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

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

هرگاه که یک تراکنش تایید می‌شود، سکه‌های مصرف‌شده از پایگاه داده UTXO حذف می‌شود، اما سابقه چنین سکه‌های مصرف‌شده‌ای همچنان بر روی دفتر کل باقی می‌ماند. تراکنش‌های بیتکوین از این‌رو بیشتر شبیه دسته چک است. به‌طور مثال اگر نیاز به هزینه‌ای معادل ۱ BTC باشد، الگوریتم ممکن است ۰.۴ BTC از یک بایت داده بردارد و ۰.۶ از بایت داده دیگر. هر تغییر در خروجی این قسمت‌ها به پایگاه‌دادۀ UTXO فرستاده می‌شود که در آن همه سوابق تغییر تراکنش‌های بیتکوین نگهداری می‌شود. از این‌رو میزان بیتکوین در حساب یک کاربر چیزی بیش از خلاصه همه UTXO‌هایی که به آن کاربر تعلق دارد، نیست که تنها می‌شود توسط کلید خصوصی همان کاربر مورد استفاده قرار گیرد.

فلسفه پشت UTXO‌ها این است که میزان خالص سکه‌های کوچک که شبکه بیتکوین را می‌سازند، باعث می‌شود تراکنش‌های مشخصی بدون سود باشد و هزینه تراکنش ممکن است بیشتر از هزینه واقعی خریداری محصول با بیتکوین باشد.

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

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

رمزنگاری‌ای که در بلاکچین استفاده می‌شود بر هش‌ها و توابع هش متکی است. هش یک تابع ریاضیاتی است که ورودی‌ای را دریافت می‌کند و آن را به رشته‌ای حروف و اعداد که «دایجست» نام دارد، تبدیل می‌کند. یک تابع هش به‌طور بنیادی سه خاصیت دارد: ۱- ورودی آن می‌تواند به یک رشته در هر اندازه‌ای تبدیل شود. ۲- فرایند آن یک خروجی با اندازه ثابت دارد. ۳- به‌طور موثری محاسبه‌پذیر است؛ این بدین معناست که شما می‌تواند خروجی را در یک زمان معقول محاسبه کنید).

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

شبکه بیتکوین از تابع هش SHA-۲۵۶ استفاده می‌کند که نخست توسط ان‌اس‌ای (آژانس امنیت ملی آمریکا) توسعه داده شد و یک ورودی ۷۶۸ بیتی را دریافت می‌کند و یک خروجی ۲۵۶ بیتی تحویل می‌دهد.

به‌طور خلاصه وقتی که یک کاربر می‌خواهد تراکنشی انجام دهد، قبل از ارسال آن به شبکه باید این فرایند‌ها را انجام دهد:

۱. رشته‌ای از حروف و اعداد از تراکنش (دایجست) با استفاده از تابع هش بسازد.
۲. این دایجست را با استفاده از کلید شخصی خود امضا کند
۳. و در نهایت کلید عمومی گیرنده را اضافه بکند.


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

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

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

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

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

پرونده / ساختار تراکنش‌ها بر روی بلاکچین

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

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

۱. استخراج‌کنندگان چه کسانی هستند؟
۲. چه نوع پاداشی از فعالیت استخراج دریافت می‌کنند؟
۳. استخراج چه هدفی دارد؟
۴. استخراج‌کنندگان چگونه تراکنش‌ها را تایید می‌کنند و معتبر می‌سازند؟

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

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

اکنون به پاسخ به سوال دوم می‌پردازیم. مسلماً استخراج‌کنندگان برای انجام فرایند تایید که هزینه و انرژی زیادی می‌طلبد، نیاز به مشوق‌هایی دارند. در این رابطه آن‌ها معمولاً دو نوع پاداش دریافت می‌کنند: بیتکوین‌هایی جدید که در هر بلوک ساخته می‌شود و یا کارمزد تراکنش‌هایی که آن‌ها تاییدشان می‌کنند و در یک بلوک جایشان می‌دهند. از آنجا که تراکنش‌هایی که در انتظار تایید شدن هستند، در اولویت هستند، هرچه هزینه کارمزد بیشتر باشد، تایید شدن تراکنش توسط استخراج‌کننده سریعتر خواهد بود.

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

الف) اجازه به بلاکچین به این که به‌روز رسانی شود.
ب) ممانعت از این که هر گره منفرد بتواند تمام شبکه بلاکچین را دستکاری و یا کنترل کند.

افزون بر این کنترل کردن بیش از ۵۱% یک شبکه بلاکچین به سرمایه‌گذاری عظیم انرژی و یا پول نیاز دارد و هر کلاهبردار بالقوه از چنین اقدامی پشیمان خواهد شد. حتی اگر تصور کنیم که سارقین بتوانند کنترل شبکه بلاکچین را به دست آورند، تمام گره‌های دیگر به راحتی می‌توانند بفهمند که این شبکه دیگر ایمن نیست و از این‌رو بی فوت وقت چنین شبکه‌ای را ترک کنند.

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

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

پرونده / ساختار تراکنش‌ها بر روی بلاکچین

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

این روش استخراج‌کنندگان را به سرمایه‌گذاری بر روی پردازشگر‌های قدرتمندتر سوق می‌دهد تا کارآیی سامانه‌های استخراج‌شان را بهبود ببخشند. روش دیگری که عموماً برای تایید تراکنش‌ها در سایر رمزارز‌ها (به جز بیتکوین) به کار می‌رود، گواه اثبات سهام (Proof-of-Stake) نام دارد که به وسیله ان استخراج‌کنندگان بر پایۀ سهام مشخصی (مانند میزان سکه‌های متعلق به استخراج‌کننده) انتخاب می‌شوند و میزان سهام استخراج‌کننده رابطه مستقیمی دارد با احتمال این که به عنوان تاییدکننده بلوک انتخاب شود.

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

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

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

 _____________________

منبع:

NARAYANAN, J. BONNEAU, E. FELTEN, A. MILLER, S. GOLDFEDER, Bitcoin and
Cryptocurrency Technologies – A Comprehensive Introduction, Princeton University Press
(۲۰۱۶) , ۱.
https://lisk.io/academy/blockchain-basics/how-does-blockchainwork/consensus-protocols.
https://blockgeeks.com/guides/proof-of-work-vs-proof-of-stake/.
D. PUTHAL, N. MALIK, S. MOHANTY, E. KOUGIANOS, G. DAS, supra note ۳, ۶.