-
0
نوشتهی Mohit Mamoria
اگر زیر یک تختهسنگ پنهان نشده باشید، مطمئنم که حتما نام بیتکوین و بلاکچین به گوشتان خورده است. بالاخره اینها یکی از داغترین موضوعات اینروزها و کلیدواژههای سال هستند. حتی کسانی که هیچگاه یک رمزپول را ماین نکردهاند یا نمیدانند که چطور کار میکند هم دربارهی آن حرف میزنند.
خیلی از دوستان غیرفنی من وقتی صحبت از فهمیدن چنین تکنولوژیهایی میشود به طور کلی خود را میبازند و هفتهها به من التماس میکنند که برایشان توضیح دهم! هزاران کاربر معمولی اینترنت هم هستند که احساس مشابهی دارند.
به عنوان یکی از اولین ماینکنندگان بیتکوین، وظیفهی خود دانستم که این مطلب را به زبان کاملا ساده بنویسم تا هر کسی بتواند داغترین موضوع روز تکنولوژی را بفهمد.
بلاکچین: اصلا چرا ما به چیزی اینچنین پیچیده نیاز داریم؟
بر خلاف بیشتر مطلبها در خصوص بیتکوین و بلاکچین که اغلب سریعا با تلاش برای توضیح بلاکچین شروع میشوند، من میخواهم ابتدا مشکلی را که آن حل میکند توضیح دهم.
فرض کنید «جو» بهترین دوست شماست. او در مسافرت خارج از کشور هست و در پنجمین روز تعطیلا خود با شما تماس میگیرد و میگوید: «رفیق، من مقداری پول لازم دارم، همهی پولم تمام شده است.»
شما، آدم خوبهی ماجرا، پاسخ میدهید: «همین الان برات میفرستم» و تلفن را قطع میکنید.
سپس شما با مدیر حساب خود در بانک تماس میگیرید و به اون میگویید: «لطفا ۱۰۰۰ دلار از حساب من به حساب جو منتقل کنید.»
مدیر حساب شما پاسخ میدهد:«بله، آقا.»
او لیست حساب و کتاب را باز میکند، موجودی حساب شما را چک میکند که ببیند آیا پول کافی برای انتقال ۱۰۰۰ دلار به جو دارید. به خاطر اینکه شما آدم پولداری هستید، کلی پول برای بذل و بخشش دارید، پس او یک مقدار در لیست به صورت زیر وارد میکند:
شما با جو تماس میگیرید و به اون میگویید: «پول را به حسابت منتقل کردم. دفعهی بعدی که به بانک بروی میتونی ۱۰۰۰ دلاری را که من منتقل کردم برداشت کنی.»
چه اتفاقی افتاد؟ شما و جو هر دو به بانکی که پول شما را مدیریت میکند اعتماد دارید. هیچ انتقال فیزیکی اسکناس برای انتقال پول انجام نشد. همهی چیزی که لازم بود، درج یک رکورد در لیست تراکنشها بود. به بیان دقیقتر، یک رکورد در یک لیست که نه شما و نه جو کنترل یا مالکیتی بر آن ندارد.
این دقیقا مشکل سیستمهای فعلی است.
برای سالها، ما برای اعتماد به یکدیگر وابسته به این واسطهها بودهایم. شاید بپرسید مشکل وابستگی به آنها چیست؟
مشکل این است که آنها از نظر تعداد در اقلیت هستند. اگر بخواهد هرج و مرج در جامعه ایجاد شود، تنها چیزی که احتیاج است این است که یک شخص/سازمان، عمدا یا سهوا فاسد شود:
آیا میشود سیستمی وجود داشته باشد که ما هنوز بتوانیم بدون نیاز به بانک پول منتقل کنیم؟
برای پاسخ دادن به سوال، نیاز داریم تا بیشتر عمیق شویم و از خود سوال بهتری بپرسیم (بالاخره، فقط سوالات بهتر هستند که به جوابهای بهتر ختم میشوند).
یک لحظه به این فکر کنید که انتقال پول به چه معنی است؟ فقط یک رکورد در یک لیست. پس سوال بهتر این است:
حالا، این سوالی است که ارزش بررسی دارد. و جواب است است که احتمالا شما تا حالا حدس زدهاید. پاسخ، بلاکچین است.
این روشی برای داشتن یک لیست بین خودمان به جای وابسته بودن به دیگری برای اینکه آن را برای ما انجام دهد است.
هنوز با من هستید؟ خوب! حالا که سوالهای مختلفی در ذهن شما به وجود آمده است، خواهیم آموخت که این لیست توزیعشده چطور کار میکند.
خوب، چطور کار میکند؟!
نیازمندی این روش این است که باید تعداد کافی افرادی که دوست ندارند وابسته به یک شخص ثالث باشند وجود داشته باشد. تنها در این صورت این گروه میتواند لیست خود را داشته باشد.
چند نفر کافی است؟ حداقل سه نفر. اما برای مثال ما، فرض میکنیم ۱۰ نفر میخواهند از شر بانکها و سایر اشخاص ثالث که تراکنشها را مدیریت میکنند خلاص شوند. به محض توافق جمعی، آنها جزئیات حسابهای یکدیگر را برای همیشه خواهند داشت بدون اینکه از هویت یکدیگر باخبر باشند.
۱. یک پوشهی خالی
هر شخص یک پوشهی خالی برای شروع با خود دارد. هر چه جلو میرویم، همهی این ۱۰ نفر برگههایی را به پوشههای خالی خود اضافه خواهند کرد. و این مجموعهی برگهها لیست ما را که تمامی تراکنشها را رهگیری میکند تشکیل میدهند.
۲. وقتی یک تراکنش رخ میدهد
سپس، هر شخص در این شبکه با یک برگهی سفید و خودکاری در دستش مینشید. همه آمادهی نوشتن تراکنشهایی هستند که در این سیستم رخ میدهد.
حالا، اگر فرد شمارهی ۲ بخواهد ۱۰ دلار به فرد شمارهی ۹ بفرستند.
برای انجام تراکنش، فرد شماره ۲ فریاد میزند و به همه میگوید: «من میخواهم ۱۰ دلار به فرد شمارهی ۹ منتقل کنم، لطفا همه این را در صفحات خود ثبت کنید.»
همه چک میکنند که آیا فرد شمارهی ۲ موجودی کافی برای انتاقل ۱۰ دلار به فرد شمارهی ۹ دارد. اگر داشته باشد، همه یک یادداشت ثبت تراکنش در برگههای خود درج میکنند.
اینجا تراکنش خاتمهیافته تلقی میشود.
۳. تراکنشها ادامه پیدا میکنند
هر چه زمان میگذرد، اشخاص بیشتری در شبکه احساس نیاز به انتقال پول به دیگران میکنند. هر وقت آنها بخواهند یک تراکنش انجام دهند، آن را به همهی اشخاص دیگر شبکه اعلام میکنند. به محض اینکه یک نفر این اعلام را بشوند، آن را روی برگهی خود مینویسد.
این کار ادامه پیدا میکند تا وقتی جای خالی روی این برگه برای هیچکس نماند. فرض کنید که هر برگه گنجایش ثبت ۱۰ تراکنش را داشته باشد، به محض ثبت تراکنش دهم، جای خالی برای هیچکس باقی نخواهد ماند.
زمان آن است که این برگه را در پوشه گذاشته و برگهی جدیدی برای تکرار فرآیند از گام شمارهی ۲ که بالاتر ذکر شد بیرون بکشیم.
۴. گذاشتن برگه در پوشه
قبل از گذاشتن برگه در پوشههایمان، نیاز داریم که آن را با یک کلید منحصر بفرد که همهی اشخاص در شبکه بر آن اتفاق نظر دارند مهر و موم کنیم. با مهر و موم کردم آن، مطمئن میشویم که هیچکس بعد از آنکه نسخهها در پوشههای هر شخص قرار گرفت قادر به اعمال تغییری در آن نخواهد بود – نه امروز، نه فردا و نه حتی یک سال دیگر. وقتی یک برگه در پوشه قرار گرفت، برای همیشه مهر و موم شده در پوشه باقی خواهد ماند.
علاوه بر این، اگر هر کسی به مهر و موم اعتماد داشته باشد، همه به محتوای برگه اعتماد دارند. و این مهر و موم کردن برگه معمای این روش هست.
جالب شد! خوب چه کسی برگه را مهر و موم میکند؟
قبل از اینکه یاد بگیریم چطور میتواینم برگه را مهر و موم کنیم، لازم است بدانیم که به صورت کلی، مهر و موم چطور کار میکند. و به عنوان یک پیش نیاز لازم است در مورد چیزی بیاموزیم که من دوست دارم آن را اینگونه بنامم…
دستگاه جادویی
فرض کنید یک دستگاه با دیوارهای ضخیم احاطه شده است. اگر شما یک جعبه را با چیزی درون آن از سمت چپ به داخل بفرستید، این دستگاه آن را تبدیل به جعبهای محتوی چیز دیگری خواهد کرد.
فرض کنید شما عدد ۴ را از سمت چپ با داخل میفرستید، میبینیم که از آن طرف کلمهی ‘dcbea’ بیرون میاید.
چطور این دستگاه عدد ۴ را به این کلمه تبدیل کرد؟ هیچ کس نمیداند. علاوه بر این، این یک فرآیند برگشتناپذیر است. یعنی با دادن کلمهی ‘dcbea’ امکان ندارد که بفهمیم چه چیزی از سمت چپ به دستگاه داده شده است. اما هر بار که شما عدد ۴ را به دستگاه بدهید، همیشه مقدار یکسان یعنی ‘dcbea’ را بر خواهد گرداند.
بیایید با ارسال یک عدد متفاوت امتحان کنیم. مثلا عدد ۲۶ خوب است؟
این بار مقدار ’94c8e’ را دریافت کردیم. جالب شد! پس مقادیر میتوانند شامل عدد هم باشند.
حالا اگر از شما این سوال را بپرسم:
یک لحظه به سوال فکر کنید.
ثبلا به شما گفتهام که دستگاه ویژگی دارد که ما میتوانیم مقداری را محاسبه کنیم که باید از سمت چپ بفرستیم تا مقدار مورد انتظارمان را در سمت راست بدهد. با چنین دستگاهی چطور میتوان به سوالی که من پرسیدم پاسخ داد؟
من یک روش در ذهن دارم. چرا هر عدد موجود در دنیا را یکی یکی امتحان نکنیم تا به کلمهای برسیم که با سه صفر در ابتدا شروع شود؟
امتحان کردن همه چیز برای محاسبهی وروردی
اگر خوشبین باشد بعد از چندهزار تلاش، ما بالاخره یه یک عدد خواهیم رسید که مقدار خروجی دلخواه در سمت راست را به ما بدهد.
خیلی سخت بود که مقدار ورودی را محاسبه کنیم که یک خروجی خاص را بدهد. در عین حال، همیشه خیلی ساده است که بررسی کنیم آیا ورودی ما خروجی دلخواه را میدهد یا نه. یادتان باشد که دستگاه برای هر عدد همیشه یک کلمهی یکسان را به عنوان خروجی تولید میکند.
پاسخ به این سوال چقدر سخت است اگر من به شما عددی، مثلا ۷۲۵۳۳ را بدهم و از شما بپرسم، «آیا این عدد، وقتی به دستگاه داده شود، کلمهای را تولید خواهد کرد که با سه صفر در ابتدا شروع شود؟»
همهی چیزی که باید انجام دهید، دادن عدد به دستگاه و دیدن این است که چه خروجی در سمت راست به شما میدهد. فقط همین!
مهمترین ویژگی چنین دستگاههایی این است که با داشتن یک خروجی، محاسبه کردن ورودی بسیار سخت است، اما با داشتن ورودی و خروجی خیلی ساده است که بررسی کنیم آیا این ورودی آن خروجی را میدهد یا نه.
ما این ویژگی دستگاه جادویی (یا تابع هش) را در ادامهی این مطلب به خاطر خواهیم داشت:
چطور از چنین دستگاههایی برای مهر و موم کردن یک برگه استفاده کنیم؟
ما از این دستگاه جادویی برای تولید یک مهر و موم برای برگهی خود استفاده خواهیم کرد. مثل همیشه با یک شرایط خیالی شروع میکنیم.
فرض کنید من به شما دو جعبه میدهم. اولین جعبه حاوی عدد ۲۰۸۹۳ است. سپس از شما میپرسم، «آیا میتوانید عددی را پیدا کنید که اگر به عدد در جعبه اضافه شود و سپس به دستگاه داده شود، به ما یک کلمه بدهد که با سه صفر در ابتدا شروع شود؟»
این مشابه حالتی است که قبلا دیدیم و یاد گرفتیم که تنها راه محاسبه چنین عددی امتحان کردن تک تک اعداد موجود در عالم است.
پس از چندین هزار تلاش، ما به عددی، مثلا ۲۱۱۹۱، میرسیم که وقتی به ۲۰۸۹۳ اضافه کنیم (۲۱۱۹۱ + ۲۰۸۹۳ = ۴۲۰۸۴) و به دستگاه بدهیم کلمهای با مشخصات مورد نظر به ما میدهد.
در این مثال، عدد ۲۱۱۹۱ مهر و موم عدد ۲۰۸۹۳ است. فرض کنید یک برگه داریم که عدد ۲۰۸۹۳ روی آن نوشته است. برای مهر و موم کردن برگه (که کسی نتواند محتوای آن را تغییر دهد) ما یک نشان با مقدار ۲۱۱۹۱ روی آن میگذاریم. به محض اینکه عدد مهر و موم (در اینجا ۲۱۱۹۱) روی برگه قرار گیرد، برگه مهر و موم شده است.
اگر هر کسی بخواهد بررسی کنید که آیا برگه تغییری کرده است، تنها چیزی که لازم است انجام دهد، جمع زدن مقدار عددی برگه با عدد مهر و موم و دادن آن به دستگاه جادویی است. اگر دستگاه یک کلمه با سه صفر در ابتدا تولید کنید، محتوا دست نخورده است. اگر کلمهی تولید شده با نیازمندی ما جور در نیاید، میتوانیم آن صفحه را بیرون بیاندازیم چرا که محتوای آن دستکاری شده و به درد نمیخورد.
ما از یک روش مهر و موم مشابه برای مهر و موم تمامی برگههایمان استفاده کرده و آنها را در پوشههای مربوطه دستهبندی میکنیم.
در نهایت، مهر و موم کردن صفحه
برای مهر و موم کردن یک صفحهی حاوی تراکنشهای شبکه، نیاز داریم تا عددی را پیدا کنیم که باید به فهرست تراکنشها اضافه شود و با دادن آن به دستگاه یک کلمه در سمت راست تولید کند که با سه صفر در ابتدا آغاز میشود.
وقتی یک عدد پس از صرف زمان و برق بر روی یک دستگاه محاسبه شد، صفحه با آن عدد مهر و موم میشود. حتی اگر کسی تلاش کند که محتوای یک صفحه را تغییر دهد، عدد مهر و موم به هر شخص دیگری اجازه میدهد که صحت آن برگه را بررسی کند.
حالا که ما در مورد مهر و موم کردن صفحه میدانیم، به زمانی بر میگردیم که نوشتن دهمین تراکنش روی برگه را تمام کرده بودیم و دیگر جای خالی برای نوشتن بیشتر نداشتیم.
به محض اینکه همه دیگر جای خالی روی برگه برای نوشتن تراکنشهای بیشتر را نداشته باشند، آنها شروع به محاسبهی عدد مهر و موم برای آن صفحه میکنند که بتوانند آن را در پوشه قرار دهند. همه در شبکه این محاسبه را انجام میدهند. اولین شخصی که در شبکه عدد مهر و موم را بیابد آن را به دیگران اعلام میکند.
به محض شنیدن عدد مهر و موم، همه بررسی میکند که آیا آن عدد مقدار خروجی مورد نظر را تولید میکند یا نه. اگر میکرد، همه صفحات خود را با آن عدد برچسب میزنند و آن را در پوشههایشان میگذارند.
اما اگر برای یک نفر، مثلا نفر شمارهی ۷، عدد مهر و موم اعلام شده، مقدار خروجی مورد نظر را تولید نکند چه؟ چنین حالتهایی معمولا پیش نمیآید. دلایل احتمالی به این شرح هستند:
فارغ ازاینکه دلیل چه میتواند باشد، نفر شمارهی ۷ تنها یک انتخاب دارد – کنار گذاشتن برگهی خود و کپی کردن از برگهی شخص دیگری که بتواند آن را در پوشه قرار دهد. تا زمانی که این شخص برگه را در پوشه قرار ندهد نمیتواند به نوشتن تراکنشهای بشتر ادامه دهد، که باعث میشود ممنوعیت وی از بودن در شبکه میشود.
خوب چرا هر کسی منابع خود را صرف محاسبهای کند وقتی میداند که شخص دیگری آن را محاسبه و اعلام خواهد کرد؟ چرا راحت ننشینیم و منتظر اعلام آن نشویم؟
سوال خوبی است. این همان جایی است که انگیزهها خود را نشان میدهند. هر کسی که بخشی از بلاکچین است، واجد شرایط دریافت جایزه است. اولین کسی که عدد مهر و موم را محاسبه کنید، مقداری پول مجانی برای تلاشهایش (در اینجا مصرف برق و پردازندهی کامپیوتر) جایزه میگیرد.
به سادگی مجسم کنید، اگر فرد شمارهی ۵ عدد مهر و موم صفحه را محاسبه کند، او مقداری پول مجانی، مثلا ۱ دلار، ; که از آسمان میآید جایزه میگیرد. به عبارت دیگر، موجودی حساب شخص شمارهی ۵ به میزان ۱ دلار افزایش مییابد بدون اینکه از موجودی شخص دیگری چیزی کم شود.
این چیزی است که بیتکوین از آن متولد شده است. اولین پولی که بر روی یک بلاکچین (لیستهای توزیعشده) منتقل میشود. و در مقابل، برای اینکه اشخاص تلاشهایشان را در سطح شبکه ادامه دهند به آنها بیتکوین جایزه داده میشود.
وقتی تعداد کافی اشخاص مالک بیتکوین شوند، ارزش آن افزایش مییابد و دیگران را وادار میکنند که بیتکوین بخواهند، که این باعث رشد بیشتر ارزش بیتکوین میشود و همین طور تعداد اشخاص که بیتکوین میخواهند را بیشار میکنند و باعث افزایش ارزش آن میشود و به همین ترتیب.
به محض اینکه همه صفحههای خود را در پوشهها قرار دهند، یک صفحهی خالی بیرون میآورند و کل فرایند را از ابتدا تکرار میکنند و این کار برای همیشه ادامه مییابد.
خوب، دوستان من، بلاکچین اینطوری کار میکند.
فقط یک نکتهی کوچک باقی مانده است که هنوز به شما نگفتهام.
فرض کنید در یک پوشه پنج برگه وجود دارد، همهی آنها هم با یک عدد مهر و موم شدهاند. اگر من به برگهی دوم برگردم و مقدار یک تراکنش را به دلخواه خودم عوض کنم چه؟ عدد مهر و موم به همه این اجازه را میدهد که متوجه عدم اعتبار در تراکنشها شود، درست؟ اگر بیشتر پیش بروم و یک عدد مهر و موم جدید هم محاسبه کنم که از آن برای تراکنشهای دستکاری شده استفاده کنم و به جای مهر و موم قبلی آن را قرار دهم چه؟
برای جلوگیری از این مشکل که کسی به عقدر برگردد و یک برگه (بلاک) را به همراه عدد مهر و موم ویرایش کند، یک تغییر کوچک در نحوهی محاسبهی عدد مهر و موم وجود دارد.
جلوگیری از ویرایش اعداد مهر و موم
به خاطر بیاورید که به شما گفتم من دو جعبه به شما داده بودم – یکی حاوی عدد ۲۰۸۹۳ و دیگری یک جعبه خالی برای محاسبه توسط شما؟ در واقعیت، برای محاسبهی عدد مهر و موم در بلاکچین، به جای دو جعبه، سه جعبه وجود دارد، دو تای آن پر شده و یکی باید محاسبه شود.
و وقتی که محتویات تمامی این سه جعبه به دستگاه داده میشود، پاسخی که از سمت راست آن بیرون میآید واجد شرایط مورد نیاز است.
ما از قبل میدانیم که یک جعبه حاوی فهرست تراکنشها و یک جعبه حاوی عدد مهر و موم است. جعبهی سوم حاوی خروجی دستگاه جادویی برای برگهی قبلی است.
با این حقهی کوچک، ما مطمئن میشویم که هر برگه وابسته به برگهی قبلی خود است. در این صورت، اگر یک نفر یک برگهی قدیمی را ویرایش کند، برای معتبر نگه داشتن زنجیره باید محتویات و اعداد مهر و موم تمامی صفحههای دیگر را نیز ویرایش کند.
اگر یک نفر از بین ده نفر که در ابتدا فرض کردیم، تلاش به تقلب و ویرایش محتوای بلاکچین (پوشهی حاوی برگههای محتوی فهرست تراکنشها) کند، اون باید صفحات متعددی را تنظیم کرده و اعداد مهر و موم جدیدی را برای تمامی آن صفحات محاسبه کنید. ما میدانیم که محاسبهی اعداد مهر و موم چقدر سخت است. بنابراین، یک شخص متقلب در یک شبکه نمیتواند بر ۹ شخص صادق غلبه کند.
چیزی که اتفاق میافتد این است؛ شخص متقلب تلاش میکند یک زنجیرهی دیگر در شبکه بسازد اما آن زنجیره هرگز قادر به هماهنگی با زنجیرهی درست نخواهد بود، دلیل این موضوع ساده است، تلاشها و سرعت آن یک نفر نمیتواند بر تلاشها و سرعت ۹ نفر غلبه کند. لذا تضمین میشود که بلندترین زنجیره در شبکه یک زنجیرهی سالم است.
بلندترین زنجیره، یک زنجیرهی سالم است
وقتی به شما گفتم که یک شخص متقلب نمیتواند بر ۹ شخص صادق غلبه کند، زنگی در گوشتان صدا نکرد؟
اگر یه جای یک نفر، ۶ نفر متقلب باشند چه؟!
در این حالت، پروتکل با صورت به زمین خواهد خورد! چیزی که از آن به عنوان «حملهی ۵۱٪» نام برده میشود. اگر اکثریت اعضای یک شبکه تصمیم بگیرند که غیرصادق باشند و نسبت به بقیهی شبکه تقلب کنند، پروتکل در هدف خود شکست خواهد خورد.
و این تنها دلیل آسیبپذیری است که بلاکچین ممکن است روزی فرو بریزد. بد نیست بدانید که احتمال وقوع این مسئله بسیار بعید است، اما ما باید تمامی نقاط آسیبپذیری سیستم را بشناسیم. این سیستم بر پایهی این فرض بنا شده است که اکثریت افراد همیشه صادق هستند.
دوستان من، این همه چیز در مورد بلاکچین است!
منبع Hacker Noon
ترجمه ویرگول