ورود به دنیای بلاکچین - قسمت پایانی

در دو پست قبلی مروری بر ادبیات مهم بلاکچین داشتیم، در این پست مفاهیم اصلی را تکمیل کرده و در مورد انواع بلاکچین صحبت میکنیم. در آخر، در مورد چگونگی عملکرد شبکه بلاکچین صحبت میکنیم که برای درک بهتر این قسمت، لازمه دو پست قبلی و مخصوصا مرور ادبیات مطالعه شود. Double spentزمانی اتفاق می افتد که یک تراکنش توسط یک گره به دو مقصد فرستاده شود.گفته شد که ماینرها برای ساخت بلاک بعدی، تعدادی تراکنش را داخل آن بلاک قرار داده و سوال مربوط به آن را حل میکنند. ممکن است در مواردی همزمان دو بلاک توسط دو گره ماین شوند و تعدادی از گره های شبکه روی یک بلاک و بقیه گره ها، روی بلاک دیگر فرآیند ماین کردن را ادامه دهند.به تعداد بلاکی که روی بلاک حاوی تراکنش tx ساخته شود confirmation میگویند. دابل اسپند به دو روش انجام میشود: (0)-Confirmation فرض کنیم آلیس قرار است مبلغی را برای باب بفرستد و در ازای آن کالایی را دریافت کند. این حالت زمانی اتفاق می افتد که باب برای هیچ confirmation روی بلاک حاوی تراکنش آلیس منتظر نمی ماند و بلافاصله کالا را برای آلیس ارسال میکند. آلیس همچنین به طور همزمان تراکنش خود را در بلاکی که در شاخه دیگر ایجاد شده است منتشر میکند. به دلیل تاخیری که در شبکه وجود دارد ماینرهای دیگر هنوز از نامعتبر بودن تراکش موجود در شاخه دوم مطلع نشده اند و بنابراین تراکنش دوباره پذیرفته شده و دابل اسپندینگ اتفاق می افتد. این حالت تنها زمانی اتفاق می افتد که دریافت کننده تراکنش، منتظر تائید هیچ confirmation ای نمی ماند و بنابراین تقریبا امکان اتفاق افتادن آن وجود ندارد. (z)-Confirmationباب منتظر zعدد confirmation میماند و سپس معتبر بودن تراکنش را پذیرفته و کالا را برای آلیس ارسال می کند. در این حالت باب برای انجام دابل اسپنت باید تعداد z بلاک را بالای بلاک خود ماین کند و پس از اینکه باب، کالا را برای او ارسال کرد آن را در شبکه منتشر کند. در این حالت چون شاخه دوم بزرگتر است شبکه این شاخه را به عنوان شاخه معتبر میپذیرد و آلیس دوباره تراکنش خود را وارد شبکه کرده است.حمله 51 درصد اگر ماینری 51 درصد قدرت هش شبکه را در اختیار داشته باشد میتواند فورک بلند تر را ساخته و مطابق با حالت (z)-Confirmation امکان حمله به سیستم وجود دارد.انواع بلاکچینسیستم های بلاکچین امروزی تقریبا به سه دسته بلاکچین عمومی، بلاکچین خصوصی و بلاکچین انجمنی تقسیم میشوند. در بلاکچین عمومی، همه سوابق برای عموم قابل مشاهده است و همه می توانند در روند اجماع شرکت کنند. در بلاکچین انجمنی، فقط گروهی از گره های از پیش انتخاب شده در فرآیند اجماع شرکت می کنند. تفاوت اصلی بلاکچین انجمنی و خصوصی در این است که در بلاکچین خصوصی، این گره های انتخاب شده تنها از یک سازمان خاص هستند. بلاکچین خصوصی به عنوان یک شبکه متمرکز در نظر گرفته می شود زیرا به طور کامل توسط یک سازمان کنترل می شود. بلاکچین انجمنی که توسط چندین سازمان ساخته میشود تا حدی غیرمتمرکز است زیرا تنها بخش کوچکی از گره ها برای تعیین اجماع انتخاب می شوند. در جدول زیر، مقایسه ای از انواع بلاکچین ذکر شده است:تعیین اجماع: در بلاکچین عمومی، هر گره می تواند در فرایند اجماع شرکت کند.در بلاکچین انجمنی تنها مجموعه ای از گره ها مسئولیت اعتبارسنجی بلوک را بر عهده دارند. در مورد بلاکچین خصوصی، کنترل فرآیند اجماع تنها توسط یک سازمان انجام میشود.دسترسی خواندن: در بلاکچین عمومی، همه نودها اجازه خواندن تراکنش ها را دارند. در حالیکه در بلاکچین خصوصی یا انجمنی بستگی به شرایط خاصی دارد.تغییر ناپذیری: از آنجا که سوابق در تعداد زیادی از شرکت کنندگان ذخیره می شود ، دستکاری در تراکنش ها در بلاکچین عمومی غیرممکن است. از طرفی دیگر، تراکنش ها در یک بلاکچین خصوصی یا انجمنی می تواند به راحتی دستکاری شود زیرا سوابق تنها در تعداد محدودی از شرکت کنندگان ذخیره میشود.کارآیی: در بلاکچین عمومی، زمان زیادی برای انتشار تراکنش ها و بلاک ها لازم است زیرا تعداد زیادی گره در بلاکچین عمومی مشارکت میکنند. در نتیجه، توان عملیاتی تراکنش ها محدود و زمان تأخیر زیاد است. به دلیل وجود گره های کمتر، بلاکچین های خصوصی و انجمنی بهینه تر هستند.متمرکز بودن: تفاوت اصلی سه نوع بلاکچین در این است که بلاکچین عمومی غیر متمرکز، بلاکچین انجمنی تا حدی متمرکز و بلاکچین خصوصی کاملاً متمرکز است زیرا توسط یک گروه واحد کنترل می شود.روند اجماع: هرکسی می تواند به روند اجماع بلاکچین عمومی بپیوندند. اما گره ها در هردو نوع بلاکچین خصوصی و انجمنی، برای پیوستن به فرآیند اجماع نیازمند مجوز هستند.بلاکچین چگونه کار میکنددر این قسمت طرز کار بلاکچین به طور مختصر بیان میشود. مطالعه دو پست قبلی برای درک بهتر این قسمت مفید است. بلاکچین یک پایگاه داده توزیع شده و مقاوم در برابر دستکاری است که هیچ موجودیتی آن را کنترل نمی کند، اما همه اعضا قابلیت دسترسی و به اشتراک گذاری در آن را دارند. رکورد های جدید (که به آنها بلاک گفته میشود)اگر توسط همه اعضای شبکه تائید شوند می توانند به بلاک های موجود اضافه شوند. همچنین، پس از ثبت بلاک، امکان اصلاح یا پاک کردن آنها وجود ندارد. بلاکچین به گونه ای طراحی شده است که در یک شبکه غیرقابل اطمینان و با وجود گره های خائن باز هم بتواند کار کند. بلاکچین با استفاده از الگوریتم های هش پیچیده و امن، جامعیت داده ها را حفظ میکند که مانع از بین رفتن یا دستکاری داده ها می شود. این الگوریتم های پیچیده محاسباتی بخشی از الگوریتم اثبات انجام کار هستند که روشی برای اجماع است و با استفاده از آن گره های مختلف در یک شبکه می توانند روی تراکنش های جدید توافق کنند. اگرچه، روش های اجماع دیگری نیز وجود دارد که نیاز به قدرت محاسباتی و سربار شبکه کمتری هستند و در فصل دوم آنها را بررسی خواهیم کرد.اثبات انجام کار یک روش اجماع پرهزینه است. در این روش، گره های مختلف در یک بلاکچین سعی می کنند یک تابع هش رمزنگاری (مثلا SHA-256) را حل کنند. SHA-256 یک هش منحصر به فرد به اندازه 256 بیت تولید می کند. فرآیند ایجاد بلوک بعدی از طریق حل این هش، استخراج نامیده می شود و به کاربرانی که این کار را انجام می دهند، استخراج کننده گفته می شود. بلاک حل شده شامل تراکنش ها، هش بلاک قبلی، نانس و مهر زمان (time stamp) است. پس از آنکه یک استخراج کننده مقدار نانس متناسب با بلاک را پیدا میکند، بلاک حل شده را منتشر می کند تا سایر استخراج کنندگان از آن آگاه شوند. در مرحله بعد، بقیه استخراج کنندگان با استفاده از اطلاعات بلاک و مقدار نانس ادعا شده، بلاک را تأیید می کنند. اگر خروجی آن کمتر از مقدار مورد نظر باشد، معدنکار آن را به عنوان یک بلوک معتبر قبول می کند و تمام تلاش خود را برای حل آن بلوک پس می گیرد و به بلوک بعدی حرکت می کند.بلاکچین تمام تراکنش ها را در بلاکهایی که به هم متصل هستند ذخیره می کند، یعنی یک بلاک شامل چندین تراکنش است که توسط یک نشانگر هش به بلاکهای قبلی متصل است. این زنجیره تا اولین بلاک استخراج شده در بلاکچین ادامه دارد که توسط Satoshi Nakamoto استخراج شده است و بلاک جنسیس نامیده می شود. این معماری تغییر تراکنش ها در بلاکچین را غیرممکن می کند زیرا برای تغییر یک تراکنش، لازم است کلیه بلاک های ساخته شده بر اساس آن تراکنش را در کمتر از 10 دقیقه تغییر دهید. این تغییر تنها با بیش از نیمی از قدرت هش موجود امکان پذیر است.شکل زیر یک بلاکچین متشکل از 4 بلاک را نشان می دهد که هر یک از آنها حاوی شماره بلاک، یک (عدد تصادفی) نانس، داده ها ،هش بلاک قبلی و هش بلوک فعلی است. از آنجا که هیچ بلاکی قبل از بلاک 1 وجود ندارد، هش قبلی آن صفر است. هدف پیدا کردن مقدار نانس است طوری که هش همه ی این مقادیر کمتر از یک مقدار تعیین شده باشد. فرض کنید نانس پیدا شده، 42345 باشد که در بلوک 1 نشان داده شده است.مقدار تعیین شده نشانگر سطح دشواری اثبات انجام کار است. به عبارت دیگر، این مقدار حکم می کند که خروجی 256 بیتی از عملکرد هش با تعداد معینی صفر متوالی شروع شود. در تصویر نشان داده شده است که همه هش ها با سه صفر شروع می شوند. برای بلوک 2، همان فرآیند برای بدست آوردن نانس تکرار می شود. همچنین، مقدار هش قبلی به روز میشود. یک نانس متفاوت به وجود می آید و باز هم هش با سه صفر متوالی شروع می شود. لازم به ذکر است، هرچه مقدار تعیین شده کاهش می یابد، سختی به دست آوردن نانس افزایش می یابد.