از گذشته تا کنون همواره مسئله خرید و فروش با چالشهای مختلفی روبهرو بوده است. از مشکلات معاملات کالا به کالا گرفته تا پیچیدگیهای تبادل در دنیای کنونی. اگر اختراع پول و اعتبار را دو ابزاری بدانیم که تا حد زیادی این چالشها را برطرف نمودهاند، گام بعدی قطعا باید ایجاد پول دیجیتال میبود. در سالهای متمادی تلاشهای بسیاری برای ایجاد پولهای دیجیتال انجام شده است. اما هیچکدام نتوانستند به طور کامل مشکلات پیش رو را حل کنند تا نوبت به بیتکوین رسید.
شما هر چه قدر هم که برنامهنویس خوبی باشید، هیچگاه نمیتوانید بدون داشتن سواد پولی و مالی، چیزی مثل بیتکوین خلق کنید. از میان تمام چالشهای موجود برای پیدایش یک پول دیجیتال، یکی از بزرگترین چالشها از همین نقطه شروع میشود: Double Spending یا دو بار خرج کردن یک پول؛ یکی از نگرانیهای اصلی هر توسعهدهنده حوزه رمزارزها. این مشکل به مواردی اشاره دارد که فردی بیش از یک بار موجودی آن رمزارز را خرج میکند، که به طور موثر بین سابقه اطلاعاتی هزینه و مقدار ارز دیجیتال موجود و همچنین نحوه توزیع آن اختلاف ایجاد میکند.
سیستمهای مالی سنتی یا فیات، با وجود یک نهاد مرکزی مثل بانک که وظیفه چاپ و نظارت بر اصالت پولها را دارد، مشکل دو بار خرج کردن (double spending) یک پول راندارند. فرض کنید برای یک ساندویچ ده هزار تومان میپردازید. بعد از آن صورت حساب را هم به فروشنده ساندویچ میدهید. حال دیگر نمیتوانید آن ده هزار تومان را در جای دیگری خرج کنید. انجام تراکنشها به وسیله یک ارز دیجیتال مانند بیتکوین، کاملاً دیجیتالی است. این بدان معنی است که میتوان جزئیات تراکنش را کپی کرد و آن را مجدداً به شبکه فرستاد به طوری که یک BTC یکسان بتواند چندین بار توسط یک مالک خرج شود. پس توسعهدهندگان چگونه توانستند مشکل چند بار خرج کردن ارزهای دیجیتال را برطرف کنند؟
درک بلاکچین
بلاکچینی مانند بیتکوین، به تنهایی قادر به جلوگیری از double spending نیست. در عوض تمام تراکنشها به شبکه ارسال میشوند. جایی که به طور جداگانه تأیید شده و به وسیله confirmation mechanism، محافظت میشوند. در مورد بیتکوین و بسیاری از ارزهای دیجیتال، تراکنشهایی که به این روش تایید شوند، غیرقابل برگشت خواهند بود. البته که تراکنشها برای همیشه به صورت عمومی بر روی شبکه در دسترس خواهند بود.
بیت کوین اولین ارز دیجیتال بزرگی بود که مشکل double spending را حل کرد. این امر با اجرای مکانیسم تأیید و نگهداری یک سیستم دفتر کل مشترک و جهانی انجام شد. به این ترتیب بیتکوین سوابقی از تراکنشهای دارای time-stampedرا نگهداری میکند که به زمان ایجاد این ارز دیجیتال در سال 2009 باز میگردد. در ادبیات بیتکوین، «بلاک» فایلی از دادههای ثبت شده دائمی است. همه تراکنشهای اخیر در قالب بلاکها نوشته میشوند. مانند دفتر کل معاملات سهام در بورس. اطلاعات بلاکها هر چند دقیقه به دفتر کل اضافه میشود. همه گرههای شبکه یک کپی از دفتر کل را نگهداری میکنند. کاربران هم میتوانند شبکه را پیمایش کرده و تراکنشها را از نظر کمیت بررسی کنند. البته جزئیات مربوط به هویت خریدار و فروشنده در هر تراکنش با رمزگذاری سطح بالایی محافظت میشود. که این یعنی دفتر کل هم از دستکاری منابع خارجی محافظت میشود. وقتی دفتر کل در شبکه به روز میشود، همه کیف پولهای بیتکوین نیز به روز میشوند.
مقابله با double spending
تصور کنید که یک بیتکوین دارید و سعی میکنید که دو بار آن را در دو تراکنش جداگانه خرج کنید. میتوان با ارسال همان بیتکوین به دو آدرس جداگانه، این کار را انجام داد. هر دوی این تراکنشها وارد مجموعه معاملات تایید نشده میشوند. اولین تراکنش در ابتدا از طریق confirmation mechanism، تأیید شده و سپس در بلاک بعدی قرار میگیرد و به دفتر کل اضافه میشود. اما تراکنش دوم در فرآیند تأیید نامعتبر شناخته شده و تأیید نمیشود. زیرا دارایی شما در دفتر کل به روزرسانی شده و موجودی کنونی شما صفر است. زمانی که هر دو تراکنشها برای تایید به طور همزمان از مجموعه معاملات خارج شوند، تراکنش با بیشترین تعداد تایید در بلاکچین گنجانده میشود. در حالی که تراکنش دیگر کنار گذاشته میشود.
آسیبپذیریهایی هم در این سیستم وجود دارد که میتواند امکان انجام حملات double spending را فراهم کند. به عنوان مثال، اگر یک مهاجم به نحوی بتواند حداقل 51 درصد از قدرت شبکه را کنترل کند، میتواند double spending را انجام دهد. اگر یک مهاجم به نحوی قادر به کنترل این قدرت محاسباتی باشد، میتواند تراکنشها را معکوس کرده و یک بلاک چین مجزا و خصوصی ایجاد کند. با این حال، رشد سریع بیت کوین عملاً غیرممکن بودن این نوع حمله را تضمین کرده است.
اثبات کار و Mining
حالا بیایید کمی فنیتر صحبت کنیم. کاربران با استفاده از هش میتوانند دستکاریهایی مانند double spending را در عمل تشخیص دهند. هشها، رشتههای طولانی از اعداد هستند که پایه اصلی عملکرد مکانیسم اثبات کار (POW) میباشد. با قرار دادن مجموعهای از دادهها در یک تابع هش (بیت کوین از SHA256استفاده میکند)، این تابع یک هش یکتا به شما تحویل میدهد. با این حال به دلیل avalanche effect (اثر بهمنی)، حتی یک تغییر کوچک در هر بخشی از دادههای اصلی، منجر به یک هش کاملاً غیرقابل تشخیص میشود. اندازه مجموعه داده اصلی هر چه باشد، هش تولید شده توسط یک تابع معین به همان طول خواهد بود. در ضمن هش یک تابع یک طرفه است. یعنی نمیتوان از آن برای به دست آوردن دادههای اصلی یا ورودی استفاده کرد.
ایجاد یک هش برای مجموعهای از تراکنشهای بیتکوین، کار نسبتا سادهای برای کامپیوترهای امروزی میباشد. بنابراین برای تبدیل این فرآیند به «کار»، شبکه بیتکوین سطح معینی از «سختی» را تعیین میکند. این سختی به گونهای است که تقریباً هر 10 دقیقه یک بلوک جدید -به همراه یک هش معتبر- به شبکه اضافه میشود. تنظیم سختی شبکه با ایجاد یک «هدف» برای هش انجام میشود. هر چه هدف کمتر باشد، مجموعه هشهای معتبر کوچکتر شده و تولید آن دشوارتر خواهد بود. برای مثال فرض کنید که شبکه تنها هشهایی را معتبر میداند که چهار کارکتر اول آنها مقدار صفر باشد. بنابراین شما باید تا زمانی که به هش مورد نظر برسید پردازش را ادامه دهید. از طرفی یک مجموعه از داده معین میتواند تنها یک هش ایجاد کند. پس سوال اینجاست که استخراجکنندگان چگونه میتوانند هش معتبری تولید کنند، در حالی که نمیتوانند دادهها را تغییر دهند؟ در واقع آنها ورودی را با افزودن یک عدد صحیح به نام nonce تغییر میدهند. این عدد صحیح به صورت جداگانه از دادهها در بلاک نوشته خواهد شد اما مقدار آن در خروجی نهایی هش تاثیرگذار خواهد بود.
اثبات کار، تغییر هر یک از بلاکهای موجود در شبکه را بسیار دشوار میکند. زیرا چنین تغییری مستلزم استخراج مجدد همه بلوکهای بعدی است. همچنین انحصار قدرت محاسباتی شبکه را برای کاربر یا مجموعهای از کاربران دشوار میکند. زیرا ماشینآلات و توان مورد نیاز برای تکمیل توابع هش ارزان نیستند.
میبینید که حل یک مسئله ساده در دنیای فیزیکی و متمرکز، میتواند تا چه حد در دنیای بلاکچین و غیرمتمرکز دشوار باشد. در واقع حل یک چالش، مستلزم حل چالشهای دیگری خواهد بود. همین هم است که خلق چیزی مانند بیتکوین را شگفتانگیز میکند.