شبکه بیت کوین چگونه کار میکند؟ تراکنشهای بیت کوین چگونه انجام میشوند؟ وقتی یک تراکنش ارسال میکنید، چه اتفاقی در پشت پرده رخ میدهد؟ ماینینگ بیت کوین چیست؟ داشتن بیت کوین دقیقاً به چه معناست؟ در این مطلب قصد داریم با نگاهی عمیق به شبکه بیت کوین، نحوه کار این شبکه را با جزئیات فنی توضیح دهیم.
قبل از هر چیز، باید بدانید که برای استفاده از بیت کوین نیازی به داشتن دانش فنی نیست، همانطور که برای استفاده از اینترنت نیاز نیست بدانید اینترنت چگونه کار میکند. اگر دوست ندارید خیلی درگیر مبانی فنی شوید، میتوانید به مقاله «بیت کوین چیست؟» مراجعه کنید و از نظر تئوری درباره چگونگی کار بیت کوین بخوانید.
همچنین لازم به ذکر است که این مقاله بیت کوین را نه کاملاً فنی بلکه بهنوعی «نیمه فنی» توضیح میدهد. شبکه بیت کوین دارای اجزای بسیار پیچیدهای است که پرداختن به همه آنها با جزئیات کامل، نیاز به نگارش یک کتاب قطور دارد. با این حال، در این مقاله سعی شده است که تا جای ممکن به سؤالات متداول مربوط به چگونگی کار بیت کوین پاسخ داده شود.
دقیقاً بیت کوین چیست؟
از اساسیترین نگاه، بیت کوین یک برنامه کامپیوتری است. بخش بزرگی از این برنامه یک فایل دیجیتال است. این فایل دیجیتال که دفتر کل (ledger) نام دارد، شبیه به دفتر حسابوکتاب سنتی عمل کرده و حسابها و موجودی هر نفر را در خود ثبت میکند.
یکی از چیزهایی که بیت کوین را از سیستمهای متمرکز متمایز میکند، نحوه نگهداری و بهروزرسانی دفتر کل است.
در بیت کوین بهجای یک نهاد مرکزی، دفتر کل بهصورت گروهی و اشتراکی توسط اعضای شبکه نگهداری میشود. این یعنی هرکسی میتواند از دفتر کل نگهداری کرده و آن را بهروز کند. به هر کامپیوتری که بهطور مستقیم به شبکه متصل شود و دفتر کل را دریافت کند، نود (Node) گفته میشود.
در سیستمهای متمرکز شما مجبور به اعتماد کورکورانه هستید. وقتی در سیستم بانکی برای کسی پول واریز میکنید، درواقع به بانک اعتماد کردهاید که پول را به حساب فرد واریز خواهد کرد و پول شما بلوکه نخواهد شد. اما در بیت کوین با ریاضیات، منطق و رمزنگاری نیاز به اعتماد از بین میرود. درواقع بهجای اعتماد به یک نهاد متمرکز که میتواند مرتکب خطای عمدی یا غیرعمدی شود، به منطق و ریاضیات اعتماد میکنید.
تمام چیزی که در بیت کوین با آن سروکار داریم را میتوان در این یکی دو جمله خلاصه کرد: سیستمی که به همه (کامپیوترها) اجازه میدهد در نگهداری سابقه تراکنشها سهیم باشند + ویژگیهای امنیتی برای جلوگیری از تقلب و حمله به شبکه.
زمانی که بیت کوین ارسال میکنید چه اتفاقی رخ میدهد؟
گفتیم که همه افراد میتوانند در حفظ و نگهداری دفتر کل بیت کوین سهیم باشند. در سادهترین توضیح، هنگام ارسال بیت کوین به شبکه اعلام میکنید که مقداری از حساب شما کسر شود و به حساب گیرنده واریز شود. نودها یا همان کامپیوترهای موجود در شبکه بیت کوین، پیام شما را دریافت کرده و آن را در دفترهای خود اعمال میکنند. سپس پیام را به دیگر نودها پاس میدهند.
بانکها هم یک دفتر کل دیجیتال دارند که تراکنشها و دارایی مشتریان در آن ثبت شده است. مثلاً محمد ۱۰ میلیون تومان پول دارد و علی ۵ میلیون تومان؛ این اطلاعات روی دفتر کل بانکها ثبت میشود. وقتی محمد ۵ میلیون تومان برای علی میفرستد، در دفتر کل موجود در بانک، ۵ میلیون تومان از حساب محمد کسر میشود و به حساب علی واریز میشود. در هنگام انجام تراکنش بانکی، پول فیزیکی منتقل نمیشود، بلکه فقط مالکیت پول تغییر میکند.
در بیت کوین، اگر رضا بخواهد برای محسن ۵ بیت کوین ارسال کند، باید درخواستش را به شبکه اعلام کند که «۵ بیت کوین از من کم کن و ۵ بیت کوین به محسن اضافه کن.» هر نود در شبکه، پیام را دریافت کرده و کپیِ دفتر حسابوکتاب خود را طبق این درخواست بهروز میکند. همه این فرایند بهصورت دیجیتالی انجام میشود.
امضای دیجیتال و کلیدهای عمومی و خصوصی
همانطور که اشاره شد، درخواست تراکنش از سوی یک کاربر به شبکه ارسال میشود و کامپیوترهای فعال در شبکه آن را اعمال میکنند. اما آنها چگونه مطمئن میشوند که این درخواست معتبر است؟ اگر کسی که این پیام را فرستاده است، واقعاً بیت کوین نداشته باشد چه؟
وقتی یک چک را برای نقد کردن به بانک میبرید، اولین چیزی که کارمند بانک برای انجام درخواست شما بررسی میکند چیست؟ درست حدس زدید: امضای فرد دارنده دسته چک.
در شبکه بیت کوین هم هر پیامِ تراکنش باید امضای معتبر داشته باشد تا قبول شود، اما نه امضای دستنویس؛ امضایی از جنس دیجیتال، چیزی که نتوان آن را جعل کرد.
در درون هر کیف پول بیت کوین، دو رشته متنی وجود دارد که مجزا هستند، اما با هم ارتباط مکمل دارند: کلید عمومی (Public Key) و کلید خصوصی (Private Key).
رضا برای ارسال بیت کوین باید پیام تراکنش را با کلید خصوصی کیف پولش امضا و به شبکه ارسال کند. به این شکل، بدون اینکه نیاز به استفاده از نام و مشخصات هویتی در شبکه بیت کوین باشد، مشخص میشود که بیت کوینها دقیقاً از طریق کیف پول رضا ارسال شدهاند و فرد دیگری به دروغ این پیام را به شبکه نفرستاده است. داشتن کلید خصوصی به منزله داشتن داراییها است. برای همین گفته میشود که هرگز نباید کلید خصوصی کیف پول خود را در اختیار فرد دیگری قرار بدهید.
هر نود، امضای تراکنش رضا را بررسی میکند تا از درستی آن مطمئن شود. اما چگونه شبکه میتواند بدون داشتن کلید خصوصی، از اعتبار امضای دیجیتال اطمینان حاصل کند؟ اینجاست که کلید عمومی بهکار میآید. با استفاده از کلید عمومی که افشای آن هیچ مشکلی ندارد، نودها میتوانند بدون دیدن کلید خصوصی، از اعتبار امضای تراکنش اطمینان حاصل کنند.
امضای دیجیتال برای هر تراکنش منحصر بهفرد است و با هرگونه تغییر در درخواست تراکنش، امضا بهطور کامل تغییر میکند. به این ترتیب، نمیتوان پیامهای درخواست تراکنش را تغییر داد.
موجودی هر کیف پول چگونه مشخص میشود؟
سیستم بیت کوین میزان موجودی حسابها را ذخیره نمیکند و اصلاً در بطن این شبکه چیزی بهنام «حساب» تعریف نشده است. در بیت کوین تنها چیزی که ثبت میشود تاریخچه تراکنشها است. دفتر کل بیت کوین فقط سوابق تراکنشها را ذخیره میکند و بنابراین، بهجای ذخیره موجودی حسابها، مالکیت در بیت کوین براساس تراکنشهای قبلی تعیین میشود.
تا به اینجا میدانیم که با الزام امضای دیجیتال در تراکنشهای بیت کوین، کسی نمیتواند پیام غیرمعتبر خود را در شبکه اعمال کند، اما فرض کنیم که مالک یک کلید خصوصی هستید و با امضای معتبر تراکنش را ارسال میکنید، شبکه چگونه متوجه میشود که موجودی کافی دارید؟ اگر بهعنوان مثال، ۰.۱ بیت کوین موجودی داشته باشید، اما بخواهید ۱ بیت کوین برای کسی ارسال کنید، شبکه چگونه متوجه این ایراد میشود؟
اگر فردی قصد ارسال ۱۰ بیت کوین را داشته باشد، درخواست تراکنش او دارای پیوندهایی به تراکنشهای ورودی قبلی است که جمع میزان آنها باید حداقل ۱۰ بیت کوین باشد تا تراکنش انجام شود. به این پیوندها اصطلاحاً «اینپوت» (input) یا ورودی میگویند.
به بیان ساده، وقتی قصد ارسال بیت کوین دارید، به شبکه بیت کوین تراکنشهای قبلی خود را نشان میدهید و میگویید اینها مدارکی هستند که نشان میدهند شما این میزان بیت کوین را دارید.
نودهای شبکه مقدار را بررسی کرده و مطمئن میشوند که موجودی کافی است. در حقیقت یک بار خود برنامه کیف پول مقدار موجودی شما را بررسی میکند و یک بار نودهای شبکه این کار را با استفاده از اطلاعات تراکنشهای قبلی انجام میدهند. این فرایند موجب میشود که دوبار خرج کردن (خرج کردن دوباره بیت کوین) امکانپذیر نباشد.
برای درک بهتر، بیایید یک تراکنش واقعی بیت کوین را بررسی کنیم. تصویر زیر اطلاعات درون یک تراکنش واقعی بیت کوین را نشان میدهد:
این تراکنش به ۶ ورودی اشاره دارد که مجموعشان ۱۳۹.۶ واحد بیت کوین میشود. در بخش خروجی (Recipients یا همان output)، دو خط به چشم میخورد. اولین خط، مقدار بیت کوینی است که پس از انجام تراکنش به آدرس فرستنده برگشت داده شده است. این مانند این است که به یک فروشنده برای خرید یک قهوه ۹هزار تومانی یک اسکناس ۱۰هزار تومانی پرداخت کنید و هزار تومان پس بگیرید.
روند کار اینگونه است که هر ورودی باید بهطور کامل در یک تراکنش مصرف شود. بنابراین، اگر یک ورودی نداشته باشید که دقیقاً برابر با مقدار تراکنش شما باشد (که در اغلب مواقع همینطور است)، از ورودیهای دیگر استفاده میکنید و مقدار باقیمانده به خودتان بازمیگردد.
داشتن بیت کوین بدان معناست که در شبکه بیت کوین تراکنشهایی دارید که خرج نشدهاند.
بینهایت آدرس
هر کس میتواند بدون نیاز به وارد کردن نام یا مشخصات خود به شبکه بیت کوین متصل شود. شبکه بیت کوین اجازه ساخت هر تعداد کیف پولی را به کاربران میدهد و هر کیف پول یک کلید خصوصی خاص خودش را دارد.
شاید فکر کنید که تولید یک کلید عمومی برای ساخت آدرس کیف پول، بهمعنای مشخص شدن هویت شخصی شما باشد، اما این قدم هم ناشناس است و حتی میتواند بدون نیاز به اینترنت انجام شود. بهسادگی و با یک کلیک میتوانید در کیف پول خود کلیدهای جدید بسازید.
اما یک مسئله: در هنگام ساخت کیف پول امکان بررسی تکراری بودن یا نبودن آدرس یا کلید نیست.
برای اینکه جمله بالا را بهتر درک کنید، فرایند ساخت ایمیل را در نظر بگیرید. هنگامی که قصد ساخت ایمیل دارید، سرویس ایمیل دهی (مثل جیمیل) از شما میخواهد که یک آدرس ایمیل برای خود مشخص کنید. شما آدرس دلخواه خود را وارد میکنید، اما سیستم به شما میگوید که این آدرس ثبت شده است و نمیتوانید آن را برای خود بردارید. در بیت کوین اینگونه نیست. بنابراین، اگر بتوانید کلید خصوصی یک نفر را حدس بزنید، به داراییهای او دسترسی خواهید داشت. اما حدس کلید خصوصی تقریباً محال است. چرا؟
حداکثر تعداد آدرسهای احتمالی بیت کوین ۲¹⁶⁰ است یعنی ۱۴۶۱۵۰۱۶۳۷۳۳۰۹۰۲۹۱۸۲۰۳۶۸۴۸۳۲۷۱۶۲۸۳۰۱۹۶۵۵۹۳۲۵۴۲۹۷۶ احتمال برای آدرسهای بیت کوین وجود دارد.
برای اینکه بزرگی این عدد را خوب درک کنید به این مثال توجه کنید:
تخمین زده میشود که تعداد دانههای شن و ماسه در دنیا تقریبا ۷.۵ میلیون تریلیون باشد. حالا فرض کنید هر دانه شن یک کره زمین باشد و با احتساب شنهای این کرههای زمین، بازهم رقمی که بهدست میآید خیلی پایینتر از احتمال آدرسهای بیت کوین است.
این موضوع باعث میشود تا هک یا حملات سایبری با استفاده از حدس زدن کلیدها غیرممکن باشد.
بلاک و بلاک چین
تا اینجا به لطف امضای دیجیتال و مفهوم ورودی و خروجی در تراکنشها، مطمئن هستیم که کسی نمیتواند تراکنش غیرمعتبر ارسال کند یا بیشتر از موجودی خود انتقال دهد. اما بازهم امنیت بهشکل کامل در شبکه بیت کوین برقرار نشده است.
همانطور که بالاتر گفته شد، تراکنشها پس از ارسال به شبکه، از نودی به نود دیگر منتقل میشوند. بنابراین ترتیب رسیدن دو تراکنش مختلف به یک نود میتواند متفاوت باشد.
یک کاربر خرابکار میتواند به فرد دیگری بیت کوین بفرستد و بعد از اینکه آن فرد کالا یا پول بیت کوین را داد، تراکنشی مخالف تراکنش قبلی بفرستد و در این صورت، بهدلیل عدم وجود ترتیب زمانی، نودها ممکن است تراکنش دوم را زودتر دریافت کنند و عملاً بیت کوینها دوبار خرج شود.
بنابراین چگونه میتوان فهمید که چه تراکنشی زودتر ارسال شده است؟
برای حل این مشکل، در شبکه بیت کوین سیستم بلاک چینی در نظر گرفته شده است. شبکه بیت کوین تراکنشها را با گذاشتن آنها در بستههایی بهنام «بلاک» (Block) مرتب میکند.
حداکثر حجم بلاک بیت کوین حدود ۱ مگابایت است و در هر بلاک بیت کوین بهطور میانگین حداکثر ۲.۵ هزار تراکنش جای میگیرد. بلاکهای بیت کوین بهطور میانگین هر ده دقیقه یکبار طی فرایند ماینینگ ایجاد میشوند که در ادامه درباره آن میخوانید.
هر بلاک یک هش (بخوانید شناسه منحصر بهفرد) و هش بلاک قبلی را در خود دارد. در واقع بلاکها به ترتیب به یکدیگر متصل هستند و یک زنجیره را شکل دادهاند. اگر چیزی داخل یک بلاک تغییر کند، هش بلاک هم تغییر میکند و به این ترتیب بلاکهای دیگر غیرمعتبر میشوند. از این رو گفته میشود بلاک چین تغییرناپذیر است.
تمام تراکنشهایی که در یک بلاک خاص قرار دارند، بهعنوان تراکنشهای ارسالشده در یک زمان در نظر گرفته میشوند و تراکنشهایی که هنوز در بلاک وارد نشده باشند، بهعنوان تأییدنشده یا آنکانفرم (unconfirmed) برچسب میخورند. زمانی که تراکنش در بلاک ثبت شود و آن بلاک به شبکه ارسال شود، تراکنش یک تأیید (confirm) میخورد. زمانی که بلاکهای جدیدی روی بلاک تراکنش قبلی ثبت شوند، تعداد تأیید هم به همان میزان بالا میرود.
ماینینگ بیت کوین
ماینینگ (mining) اصلیترین چیزی است که امنیت شبکه بیت کوین را تأمین میکند. هر نود میتواند تراکنشها را در یک بلاک قرار دهد و آنها را به دیگر نودها مخابره کند، اما برای جلوگیری از ایجاد بلاکهای متعدد، دستکاری بلاک چین و حمله به بیت کوین، برای ساخت بلاک یک شرط وجود دارد و آن این است که نود باید ماینر یا استخراجکننده باشد.
برای اینکه بلاکها به بلاک چین اضافه شوند، هر بلاک باید دارای جواب یک مسئله ریاضی پیچیده باشد. با بهرهمندی از فناوری «تابع هش رمزنگاری»، تنها راهِ حل کردن مسئله ریاضی، حدس زدن اعداد است. بهعمل پیدا کردن معادله بلاکها، «استخراج» یا همان ماینینگ میگویند. حدس زدن مداوم اعداد هم فقط با سختافزارهای کامپیوتری که قدرت پردازش دارند، قابل انجام است و این فرایند برق مصرف میکند.
نام علمی ماینینگ، «اثبات کار» (Proof Of Work) است. درواقع استخراجکنندگان با قدرت پردازش سختافزارهای خود اثبات میکنند که به پروتکل بیت کوین پایبند هستند. اگر کسی بخواهد به شبکه بیت کوین حمله کند، مجبور است بیش از ۵۰ درصد از قدرت پردازش بیت کوین را از آن خود کند. با توجه به گسترش شبکه بیت کوین، این کار بسیار هزینهبر است و از نظر منطقی توجیه ندارد.
برای ایجاد انگیزه در ماینرها در افزایش امنیت شبکه و همچنین تولید واحدهای بیت کوین جدید بهصورت غیرمتمرکز، برای پیدا کردن جواب معادله بلاکها پاداش در نظر گرفته شده است. پاداش بلاک بیت کوین ابتدا ۵۰ واحد بیت کوین بود، اما این پاداش پس از هر ۲۰۰,۰۰۰ بلاک (تقریباً هر چهار سال یکبار) نصف میشود. در حال حاضر پاداش بلاک بیت کوین ۶.۲۵ واحد است.
همچنین تراکنشهای بیت کوین دارای کارمزد هستند. ماینرها اغلب تراکنشهایی را داخل بلاک قرار میدهند که کارمزد بهتری دارند و بنابراین تراکنشهایی که کارمزد بالاتر دارند، زودتر تأیید خواهند شد. کاربر خودش حق دارد که کارمزد تراکنشش را مشخص کند، اما اگر برای تراکنش خود کارمزد مناسب مشخص نکنید، تأیید تراکنش میتواند تا چند روز طول بکشد یا اصلاً تایید نشود. علاوه بر پاداش بلاک، میزان کل کارمزد تراکنشهای یک بلاک هم به ماینر تعلق میگیرد.
سختی استخراج
بهدلیل اینکه زمان بلاک بیت کوین ۱۰ دقیقه است، تقریباً هر ده دقیقه بیت کوینهای جدید تولید میشوند و به یک ماینر تعلق میگیرند. حالا ممکن است که یک ماینر بسیار قدرتمند بتواند جواب معادله را مثلاً در ۵ دقیقه پیدا کند. این باعث اختلال در کار شبکه و استخراج سریع تمام واحدهای بیت کوین خواهد شد. به همین منظور، چیزی بهنام سختی شبکه در بیت کوین تعبیه شده است.
شبکه بهطور خودکار نسبت به قدرت پردازش موجود، سختی پیدا کردن پاسخ معادلات را کم و زیاد میکند تا ماینرها بتوانند بهطور میانگین در ده دقیقه به جواب برسند، نه بیشتر نه کمتر. با اضافه شدن قدرت پردازش ماینرها، سختی افزایش مییابد و با کم شدن آن، سختی هم کمتر میشود. در شبکه بیت کوین، سختی شبکه بعد از هر ۲,۰۱۶ بلاک (تقریباً هر دو هفته یکبار) تنظیم میشود.
استخر استخراج
بهدلیل بالا رفتن سختی شبکه بیت کوین و سخت بودن انجام عمل ماینینگ بهصورت فردی، ماینرها بهصورت گروهی در محلی مجازی به نام استخر استخراج (mining pool) جمع میشوند تا از قدرت پردازش جمعی برای استخراج استفاده کنند.
به عبارت دیگر، ماینرهای سراسر دنیا دستگاههای استخراج خود را به استخرهای استخراج معتبر متصل میکنند و استخر استخراج به نمایندگی از همه و با مجموع قدرت پردازشی که دارد، برای ماینینگ و بهدست آوردن پاداش بلاک تلاش میکند. در این روش، هر استخراجکننده معمولاً براساس توان پردازشی خود سود میبرد، اما پاداش بلاک اصلی به استخر استخراج تعلق میگیرد.
در صورت اقدام به استخراج مستقیم بیت کوین از طرف یک ماینر عادی، شانس حل کردن معادله بلاک نزدیک به صفر خواهد بود.
استخراج دو بلاک همزمان
اگر به فرض محال دو نود (ماینر) همزمان معادله را حل کنند و باهم بلاکهای خود را به شبکه بفرستند چه؟
در این مورد، هر دو بلاک به شبکه اعلام میشوند و هر نود، بلاکی را که اول دریافت کرده است، در بلاک چین خود قرار میدهد. اما طبق قوانین بیت کوین، هر نود باید بلندترین زنجیره موجود از بلاک چین را دنبال کند. بنابراین، اگر بر سر آخرین بلاک توافق حاصل نشود، بهمحض اینکه معادله آخرین بلاک حل شد، همه نودها بلندترین زنجیره را خواهند پذیرفت.
عدم توافق بر سر آخرین بلاک در زنجیره میتواند باعث تقلب و دوبار خرج کردن شود. اگر یک تراکنش در بلاک زنجیره کوتاهتر باشد، زمانی که بلاک بعدی استخراج شود، این تراکنش و تمام تراکنشهای آن بلاک دوباره بهصورت تأیید نشده (آنکانفرم) در میآیند.
فرض کنید که فرد خرابکاری میخواهد از فرد دیگری با بیت کوین، یک فایل بخرد. خرابکار بیت کوین را به قربانی میفرستد و قربانی پس از دیدن اولین تأیید (کانفرم)، فایل را به خرابکار میدهد. حالا اگر خرابکار بتواند در شبکه بیت کوین زنجیرهای طولانیتر بسازد که تراکنش برگشت داخل آن باشد، میتواند پول خود را برگشت بزند و در عمل بیت کوین را دوبار خرج کند. اما این تا چه حد عملی است؟ در صورتی که یک ماینر خرابکار بیش از ۵۰٪ قدرت پردازش شبکه را داشته باشد و بهعبارتی حمله ۵۱ درصد به شبکه انجام دهد.
او برای انجام این کار باید با کامپیوترهای زیادی که در حال رقابت برای یافتن جواب معادله بلاک هستند، مسابقه دهد. حتی اگر بر فرض محال او بتواند یک بلاک را پیش از بقیه حل کند، احتمال حل شدن بلاکهای دوم، سوم، چهارم و … بهشدت پایین است و هر چه جلوتر میرویم پایینتر میآید. اگر یک خرابکار بیش از ۵۰ درصد قدرت شبکه را در اختیار داشته باشد، شانس او برای حل کردن بلاک بیش از ۵۰ درصد خواهد بود، اما برای حل کردن دو بلاک متوالی او فقط ۲۵ درصد شانس خواهد داشت و هرچه تعداد بلاکها بیشتر میشوند شانس خرابکار کمتر و کمتر خواهد شد تا به نزدیک صفر برسد.
بههمین خاطر است که فروشندگان و صرافیها برای تأیید تراکنش و ارائه خدمات، حداقل دو الی ۶ تأیید (کانفرم – Confirm) را ضروری میدانند. ۶ کانفرم امنترین حالت ممکن برای تراکنش است و بعد از آن تراکنش دیگر مشکلی نخواهد داشت.
سخن پایانی
اگرچه درک کامل بیت کوین و نحوه کار آن در ابتدا کمی مشکل بهنظر میرسد، این به شما کمک خواهد کرد تا علاوهبر فهمیدن کامل ایده بیت کوین، با مفاهیمی چون بلاک چین و ماینینگ که در دهها ارز دیجیتال دیگر هم وجود دارد، آشنا شوید. البته همانطور که در ابتدای مقاله هم اشاره شد، برای استفاده از پادشاه ارزهای دیجیتال نیاز به وارد شدن به مسائل فنی نیست و امروزه بهلطف نرمافزارهای متعدد، کار کردن با بیت کوین بهسادگی ارسال یک پیامک است.