زمان‌بندی و بلوک

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

دو تراکنش هم‌زمان از یک حساب

اما هنوز یک مسئله‌ی کلیدی در شبکه باقی مانده است؛ فرض کنید فرد مشکوکی به نام الف دارای یک آدرس است که در آن 5 بیت کوین وجود دارد.

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

بی‌نظمی در رسیدن تراکنش‌ها به اعضای شبکه

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

تراکنش بنفش یا نارنجی؛ کدام یک معتبر است؟

آقای توانا که یکی از اعضای شبکه‌ی بیت کوین است تراکنش نارنجی را زودتر دریافت می‌کند. او این تراکنش را بررسی می‌کند و مطمئن می‌شود که توسط خود الف امضا شده و معتبر است. سپس او به دفتر حساب نگاه می‌کند تا مطمئن شود که آیا براساس تراکنش‌های قبلی که در این دفتر ذخیره شده‌اند، در حساب الف 5 بیت کوین وجود دارد یا نه. بعد از تایید موجودی، آقای توانا تراکنش نارنجی را تایید می‌کند و در دفتر حساب ثبت می‌کند که 5 بیت کوین به حساب هادی منتقل شده است و حساب الف دیگر موجودی ندارد.

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

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

شبکه به اختلاف می‌رسد

به این ترتیب شبکه‌ی بیت کوین در مورد اینکه بیت کوین های حساب الف به حساب هادی یا محمد واریز شده است دچار اختلاف می‌شود.

نیاز به راهی برای اجماع

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

مسئله‌ی زمان‌بندی

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

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

آیا می‌توان زمان ایجاد تراکنش‌ها را درآن ذخیره کرد؟

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

تراکنش‌های تایید نشده

بیت کوین برای حل مسئله‌ی تعیین تقدم و تأخر تراکنش‌ها به روشی برای توافق در مورد زمان‌بندی تراکنش‌ها نیاز دارد. در شبکه‌ی بیت کوین ( بلاکچین ) هرلحظه تراکنش‌های زیادی ایجاد می‌شود. این تراکنش‌ها تا با توافق اعضای شبکه در دفتر حساب ذخیره نشوند اصطلاحاً « تایید نشده » هستند.

تعریف بلوک

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

زنجیره بلوک یا بلاکچین

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

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

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

منبع : intellavision.com