شبکه بیت کوین چگونه کار میکند؟ تراکنشهای بیت کوین چگونه انجام میشوند؟ ماینینگ و داشتن بیت کوین دقیقا به چه معناست؟ در این پست به تمام این سوالات به صورت کاملا فنی پاسخ داده خواهد شد.
قبل از هر چیز باید بدانید که برای استفاده از بیت کوین نیازی به داشتن دانش فنی خیلی بالایی ندارید همانطور که برای استفاده از اینترنت نیاز نیست که بدانید اینترنت چگونه کار میکند.
بیت کوین چیست و چرا ارزشمند است؟
بیت کوین شبکه ای با هدف پرداخت های همتا به همتا است و ارز دیجیتال آن هم بیت کوین (BTC) نام دارد.
درست مانند ارزهای رایج ملی مثل دلار، بیت کوین به خودی خود ارزشی ندارد. مانند یک دلار، ارزشمندی بیت کوین هم فقط به دلیل اعتبار آن در نزد کاربرانش است که باعث عرضه و تقاضا میشود.
شاید این مسئله را ندانید اما از دهه ۱۹۷۰ به بعد، پولهای رایج جهان هیچ پشتوانهای ندارند و فقط اعتبار و اعتماد به پول یک کشور ارزش آن را تعیین میکند. در دهه ۱۹۷۰، دولت آمریکا قانون استاندارد طلا را لغو کرد و دلار رسما بدون پشتوانه شد. یک دلار آمریکا و بیشتر ارزهای ملی دیگر اکنون ارزششان نسبت به اعتبار و کاربرد آن تعیین میشود. ارزش بیت کوین را هم کاربران و شبکه آن تعیین میکنند.
دقیقا بیت کوین چیست؟
هنگام ارسال بیت کوین شما به شبکه اعلام میکنید که مقداری از حساب شما کسر شود و به حساب گیرنده واریز شود.
نودها (Nodes) یا همان کامپیوترهای موجود در شبکه بیت کوین، تراکنش را در دفترهای خود اعمال میکنند و آن را به دیگر نودها پاس میدهند.
به غیر از ویژگیهای امنیتی، تمام چیزی که در بیت کوین داریم به شرح زیر است:
سیستمی که به گروهی از کامپیوترها اجازه میدهد تا از یک دفترکل (Ledger) نگهداری کنند.
در بانکها هم همینگونه است. بانکها یک دفترکل دیجیتال دارند که تراکنشها و دارایی مشتریان در آن ثبت شده است. مثلا محمد ۱۰ میلیون تومان پول دارد و علی ۵ میلیون تومان. این اطلاعات روی دفترکل بانکها ثبت میشوند. وقتی محمد ۵ میلیون تومان به علی پول میفرستد، در دفتر کل موجود در بانک، ۵ میلیون تومان از حساب محمد کسر میشود و به حساب علی واریز میشود. در هنگام انجام تراکنش بانکی، پول فیزیکی منتقل نمیشود بلکه فقط مالکیت پول تغییر میکند.
اما تفاوت دفترکل بلاک چین با دفتر کل بانکها چیست؟
حقیقت این است که در بیت کوین به جای یک نهاد مرکزی، دفترکل به صورت گروهی نگهداری میشود و همین موضوع تفاوتهای عمده ای را ایجاد میکند.
اول از همه، برخلاف بانک که شما فقط میتوانید تراکنشهای خود را ببینید، در بیت کوین همه میتوانند تراکنشهای هر فرد دیگری را ببینند.
در سیستم بانکی شما مجبور هستید به بانک، کورکورانه اعتماد کنید اما در بیت کوین شما با تعداد زیادی افراد غریبه سر و کار دارید که هیچ نیازی به اعتماد کردن ندارد.
سیستم بیت کوین به طرز شگفت انگیزی طراحی شده است و هیچ اعتمادی در شبکه آن نیاز نیست.
اگر رضا بخواهد برای محسن ۵ بیت کوین ارسال کند، باید درخواستش را به شبکه اعلام کند که ۵ بیت کوین از من کم کن و ۵ بیت کوین به محسن اضافه کن. هر نود در شبکه پیام را دریافت و کپی دفتر حساب و کتاب خود را طبق این درخواست بهروز میکند. همه این فرایند به صورت دیجیتالی صورت میگیرد.
اما نودها چگونه مطمئن میشوند که این درخواست معتبر است؟ اگر کسی که این پیام را فرستاده، واقعا بیت کوین نداشته باشد چه؟
به منظور انجام تراکنش در شبکه بیت کوین، شما به یک کیف پول دیجیتال (Wallet) نیاز دارید. کیف پول بیت کوین برنامهای است که اجازه ذخیره و تبادل بیت کوین را به شما میدهد.
در بیت کوین، کیف پول شما بانک شخصی شماست. برای اینکه تضمین شود که فقط کیف پول مورد نظر بتواند بیت کوین های داخل خود را خرج کند، هر کیف پول با نوعی روش رمزنگاری محافظت میشود.
کلید عمومی و کلید خصوصی
دو رشته کلید رمزنگاری شده در هر کی پول بیت کوین وجود دارد که مجزا بوده اما باهم ارتباط مکمل دارند. این دو کلید: کلید عمومی (Public Key) و کلید خصوصی (private key) نام دارند. ارتباط این دو به این صورت است که وقتی یک پیام توسط یک کلید عمومی خاص رمزگذاری میشود، فقط کلید خصوصی جفت شده با آن میتواند پیام را باز کند و بخواند. برعکس این موضوع هم صدق میکند: وقتی شما یک پیام را با کلید خصوصی رمزگذاری میکنید، فقط کلید عمومی جفت شده با آن میتواند پیام را از حالت رمزنگاری خارج کند.
رضا برای ارسال بیت کوین باید پیامی را که با کلید خصوصی کیف پولش رمزنگاری شده، به شبکه ارسال کند. به این شکل مشخص میشود که بیت کوینها دقیقا از طریق کیف پول رضا ارسال شدهاند و فرد دیگری به دروغ این پیام را به شبکه نفرستاده است.
هر نود (کامپیوتر متصل شده به شبکه به صورت مستقیم)، تراکنش ارسال شده از رضا را بررسی میکند تا مطمئن شود این پیام دقیقا از کیف پول رضا ارسال شده است. برای این کار، نودها با استفاده از کلید عمومی کیف پول رضا، پیام ارسال شده را میخوانند.
هنگامی که کیف پول شما یک درخواست تراکنش را با استفاده از کلید خصوصی رمزنگاری میکند، به نوعی یک امضای دیجیتال میسازد که نشان میدهد هر تراکنش متعلق به کدام کیف پول است.
این امضای دیجیتال یک رشته ی متنی است که از کلید خصوصی و پیام درخواست تراکنش تولید میشود.
با هرگونه تغییر در درخواست تراکنش، امضای دیجیتال به طور کامل تغییر میکند. این کار باعث میشود تا نتوان پیامهای درخواست تراکنش را تغییر داد.
اگر بخواهیم مفاهیم بالا را به صورت روانتر بگوییم:
در بیت کوین برای خرج کردن داراییها نیاز به یک نوع کلمه عبور است و این کلمه عبور، امضای دیجیتال نام دارد.
مثل یک امضای دست نویس، امضای دیجیتال معتبر بودن یک پیام را تصدیق میکند. اما این کار با استفاده از یک الگوریتم ریاضی خاص انجام میشود و کپی و جعل آن را غیرممکن میکند.
امضای دیجیتال مانند یک کلمه عبور ساده و ثابت نیست بلکه برای هر تراکنش، باید امضایی کاملا متفاوت درج شود.
یادتان باشد که در شبکه بیت کوین شما با افراد کاملا غریبه سر و کار دارید، بنابراین باید امنیت شما تامین شود و داراییهای شما امن بماند.
یک امضای دیجیتال با استفاده از دو کلید جداگانه کار میکند. این دو کلید با وجود متفاوت بودن، مکمل یکدیگر هستند.
کلید خصوصی، یک امضا تولید میکند و با یک کلید عمومی بقیه میتوانند معتبر بودن امضا را بررسی کنند.
کلید خصوصی را به عنوان کلمه عبور واقعی در نظر بگیرید و امضای دیجیتال مدرکی است که نشان میدهد شما کلمه عبور را دارید.
در واقع آدرسهای کیف پول براساس کلیدهای عمومی هستند. بنابراین وقتی شما قصد ارسال بیت کوین دارید در در حقیقت به کلید عمومی فرد بیت کوین ارسال میکنید.
برای ارسال بیت کوین باید ثابت کنید که شما دارنده واقعی کلید عمومی هستید. شما این کار را با استفاده از تولید یک امضای دیجیتال از پیام تراکنش و کلید خصوصی انجام میدهید . بقیه نودهای شبکه میتوانند از امضا برای بررسی و تایید کلید عمومی شما استفاده کنند.
طی ریاضیات پشت یک امضای دیجیتال، نودها قادر خواهند بود که بدون دیدن کلید خصوصی، مالکیت آن را تایید کنند. همچنین، از آنجایی که امضا به پیام بستگی دارد، برای هر تراکنش، امضایی متفاوت وجود خواهد داشت و در نتیجه این امضاها نمیتوانند دوباره برای تراکنشهای دیگر استفاده شوند.
وابسته بودن امضا به پیام همچنین بدان معنی است که هیچ کس نمیتواند پیام را تغییر دهد از آنجایی که هر تغییر در پیام، امضا را غیرمعتبر میکند، نودها آن را نمیپذیرند.
چگونه موجودی حسابها مشخص میشود؟
سیستم بیت کوین میزان موجودی حسابها را ذخیره نمیکند. در بیت کوین تنها چیزی که ثبت میشود تراکنشهای تایید شده هستند.
به عبارت دیگر دفترکل بیت کوین فقط سوابق تراکنشهای منتشر شده را ذخیره میکند.
به جای ذخیره موجودی حسابها، مالکیت در بیت کوین بر اساس تراکنشهای قبلی تعیین میشود.
اگر مریم قصد ارسال ۱۰ بیت کوین به محمد را داشته باشد، او درخواست تراکنشی را ایجاد میکند. درخواست تراکنش مریم دارای پیوندهایی به تراکنشهای ورودی قبلی است و جمع میزان آنها باید حداقل ۱۰ بیت کوین باشد تا تراکنش انجام شود. به این پیوندها اصطلاحا انپوت (input) یا ورودی میگویند. در واقع هنگامی که مریم قصد ارسال بیت کوین را داشته باشد، باید تراکنشهای ورودی قبلی خود را به عنوان مدرک به شبکه نشان دهد.
به عبارت دیگر و زبان سادهتر وقتی شما قصد ارسال بیت کوین دارید، به شبکه تراکنشهای دریافتی قبلی خود را نشان میدهید و میگویید اینها مدارک دریافت بیت کوین هستند.
نودهای شبکه مقدار را بررسی کرده و مطمئن میشوند که این انپوتها خرج نشده باشند. در حقیقت یک بار خود برنامه کیف پول مقدار موجودی شما را بررسی میکند و یک بار نودهای شبکه این کار را با استفاده از اطلاعات تراکنشهای قبلی انجام میدهند. این فرایند موجب میشود که دوبار خرج کردن (خرج کردن دوباره بیت کوین) امکان پذیر نباشد.گ
داشتن بیت کوین بدان معناست که شما در شبکه بیت کوین تراکنشهایی دارید که خرج نشدهاند. همانطور که میدانید بیت کوین کاملا متن باز و مستقل از هر نهادی است. از این رو کلید خصوصی یک کیف پول به منزله کلید بیت کوینهای شماست. همیشه از کیف پول خود نسخه پشتیبان تهیه کنید و هرگز کلید خصوصی خود را در اختیار کسی قرار ندهید.
بینهایت آدرس
هر کس میتواند بدون نیاز به وارد کردن نام یا مشخصات خود به شبکه بیت کوین متصل شود. شبکه بیت کوین اجازه ساخت هر تعداد کیف پولی را به کاربران میدهد و هر کیف پول کلیدهای عمومی و خصوصی خاص خودش را دارد.
شاید فکر کنید که تولید یک کلید عمومی برای ساخت آدرس کیف پول، به معنای مشخص شدن هویت شخصی شما باشد. اما حتی این قدم هم ناشناس است و حتی میتواند بدون نیاز به اینترنت انجام شود.
شما میتوانید به سادگی و با یک کلیک در کیف پول خود کلید عمومی و خصوصی جدید بسازید.
اما یک مسئله:
در هنگام ساخت کیف پول امکان بررسی داشتن یا نداشتن یک آدرس توسط فرد دیگر وجود ندارد.
برای اینکه جمله بالا را بهتر درک کنید، فرایند ساخت ایمیل را در نظر بگیرید. هنگامی که قصد ساخت ایمیل دارید، سرویس ایمیل دهی (مثل جیمیل) از شما میخواهد که یک آدرس ایمیل برای خود مشخص کنید. شما آدرس دلخواه خود را وارد میکنید اما سیستم به شما میگوید که این آدرس ثبت شده است و نمیتوانید آن را برای خود بردارید. در بیت کوین اینگونه نیست.
بنابراین اگر بتوانید کلید خصوصی یک نفر را حدس بزنید به داراییهای او دسترسی خواهید داشت اما حدس کلید خصوصی تقریبا محال است. چرا؟
حداکثر تعداد آدرسهای احتمالی بیت کوین ۲¹⁶⁰ است یعنی ۱۴۶۱۵۰۱۶۳۷۳۳۰۹۰۲۹۱۸۲۰۳۶۸۴۸۳۲۷۱۶۲۸۳۰۱۹۶۵۵۹۳۲۵۴۲۹۷۶ احتمال برای آدرسهای بیت کوین وجود دارد.
برای اینکه بزرگی این عدد را خوب درک کنید به این مثال توجه فرمایید:
تخمین زده میشود که تعداد دانههای شن و ماسه در دنیا تقریبا ۷.۵ میلیون تریلیون باشد. حالا فرض کنید هر دانه شن یک کره زمین باشد و با احتساب شنهای این کرههای زمین، بازهم رقمی که به دست میآید خیلی پایینتر از احتمال آدرسهای بیت کوین است.
این موضوع باعث میشود تا هک یا حملات سایبری با استفاده از حدس زدن اعداد تقریبا غیرممکن شود.
مفهوم بلاک، بلاک چین و استخراج (ماینینگ) در بیت کوین
برای جلوگیری از دوبار خرج کردن بیت کوینها، یک مفهوم دیگر در سیستم بیت کوین وجود دارد.
تراکنشها از نودی به نود دیگر منتقل میشوند. بنابراین ترتیب رسیدن دو تراکنش مختلف به یک نود میتواند متفاوت باشد.
یک کاربر خراب کار میتواند به فرد دیگری بیت کوین بفرستد و بعد از اینکه آن فرد کالا یا پول بیت کوین را داد تراکنشی مخالف تراکنش قبلی بفرستد. و در این صورت به دلیل عدم وجود ترتیب زمانی، نودها ممکن است تراکنش دوم را زودتر دریافت کنند و عملا بیت کوینها دوبار خرج شوند
بنابراین چگونه میتوان فهمید که چه تراکنشی زودتر ارسال شده است؟
به همین دلیل سیستم بلاک چینی برای شبکه بیت کوین در نظر گرفته شده است. شبکه بیت کوین تراکنشها را با گذاشتن آنها در بلاک مرتب میکند.
هر بلاک دارای تعدادی تراکنش بوده و به بلاک قبلی خود متصل است. طبق این سیستم، در زمانی مشخص یک بلاک بعد از بلاک قبلی قرار میگیرد. به زنجیرهای از این بلاکها زنجیره بلاکی یا همان بلاک چین میگویند.
تمام تراکنشهایی که در یک بلاک خاص قرار دارند به عنوان تراکنشهای ارسال شده در یک زمان در نظر گرفته میشوند و تراکنشهایی که هنوز در بلاک وارد نشده باشند به عنوان تایید نشده یا آنکانفرم (unconfirm) در نظر گرفته میشوند. زمانی که تراکنش در بلاک ثبت شود و آن بلاک به شبکه ارسال شود، تراکنش یک تایید (Confirm) میخورد. زمانی که بلاکهای جدیدی روی بلاک تراکنش قبلی ثبت شوند، تعداد تایید هم به همان میزان بالا میرود.
ماینینگ بیت کوین
هر نود میتواند تراکنشها را در یک بلاک قرار دهد و آنها را به دیگر نودها مخابره کند اما یک شرط دارد و آن این است که نود باید ماینر یا استخراج کننده باشد.
برای اینکه بلاکها به بلاک چین اضافه شوند، هر بلاک باید دارای جواب یک معادله ریاضی پیچیده باشد. تنها راه حل کردن معادله، حدس زدن اعداد است. به عمل پیدا کردن معادله بلاکها، ماینینگ میگویند.
ماینرها این کار را انجام میدهند و اعداد را انقدر حدس میزنند تا جواب درست معادله را به دست آورند.
برای یک کامپیوتر عادی حل کردن این مسئله ریاضی و پیدا کردن جواب درست میتواند چندین سال طول بکشد. بنابراین کامپیوترهای قدرتمندی برای پیدا کردن جواب درست تلاش میکنند.
شبکه نسبت به جمع قدرت کامپیوترها، طوری تنظیم میکند که تقریبا هر ۱۰ دقیقه جواب درست توسط یکی از کامپیوترها پیدا شود. نودی (ماینری) که جواب درست را پیدا میکند، حق پخش آن بلاک به سایر نودها و در نتیجه اضافه کردن به بلاک چین را بهدست میآورد.
اما اگر به فرض محال دو نود (ماینر) همزمان معادله را حل کنند و باهم بلاکهای خود را به شبکه بفرستند چه؟
در این مورد، هر دو بلاک به شبکه اعلام میشوند و هر نود، بلاکی را که اول دریافت کرده است، در بلاک چین خود قرار میدهد. اما طبق قوانین بیت کوین، هر نود باید بلندترین زنجیره موجود از بلاک چین را دنبال کند. بنابراین اگر بر سر آخرین بلاک توافق حاصل نشود، به محض اینکه معادله آخرین بلاک حل شد، همه نودها بلندترین زنجیره خواهند پذیرفت.
با توجه به احتمال کم حل شدن بلاکها در یک زمان، تقریبا غیرممکن است که به طور متوالی چند بلاک در یک زمان حل شوند.
عدم توافق بر سر آخرین بلاک در زنجیره میتواند باعث تقلب و دوبار خرج کردن شود. اگر یک تراکنش در بلاک زنجیره کوتاهتر باشد، زمانی که بلاک بعدی استخراج شود، این تراکنش و تمام تراکنشهای آن بلاک دوباره به صورت تایید نشده (آنکانفرم) در میآیند.
فرض کنید که مریم میخواهد از محمد با بیت کوین، یک فایل بخرد. مریم بیت کوین را به محمد میفرستد و محمد پس از دیدن اولین تایید (کانفرم)، فایل را به مریم میدهد. حالا اگر مریم بتواند زنجیره ای طولانی تر بسازد که تراکنش برگشت با انپوتهای یکسان داخل آن باشد، او میتواند پول خود را برگشت بزند و در عمل بیت کوین را دوبار خرج کند.
اما آیا مریم میتواند این کار را انجام دهد؟
او برای انجام این کار باید با کامپیوترهای زیادی که در حال رقابت برای یافتن جواب معامله کند، مسابقه دهد. حتی اگر به فرض محال او بتواند یک بلاک را پیش از بقیه حل کند، احتمال حل شدن بلاکهای دوم، سوم، چهارم و … به شدت پایین است و هر چه جلوتر میرویم پایینتر میآید.
مریم اگر بیش از ۵۰ درصد قدرت شبکه را در اختیار داشته باشد، شانس او برای حل کردن بلاک بیش از ۵۰ درصد خواهد بود اما برای حل کردن دو بلاک متوالی او فقط ۲۵ درصد شانس خواهد داشت و هر چه تعداد بلاکها بیشتر میشوند شانس مریم کمتر و کمتر خواهد شد تا به صفر برسد.
به همین خاطر است که فروشندگان و صرافیها برای تایید تراکنش و ارائه خدمات، حداقل دو تا ۶ تایید (کانفرم – Confirm) را ضروری میدانند. معمولا ۶ کانفرم، امنترین حالت ممکن برای تراکنش است و بعد از آن تراکنش دیگر مشکلی نخواهد داشت.
اما ماینرها چرا این کار را انجام میدهند؟
برای ایجاد انگیزه در ماینرها برای حفظ امنیت شبکه و همچنین تولید واحدهای بیت کوین جدید به صورت غیرمتمرکز، برای پیدا کردن جواب معادله بلاکها، پاداش در نظر گرفته شده است. پاداش بلاک بیت کوین ابتدا ۵۰ واحد بیت کوین بود اما این پاداش پس از هر ۲۰۰,۰۰۰ بلاک نصف میشود. در حال حاضر پاداش بلاک بیت کوین ۱۲.۵ واحد است. پس از گذشتن ۲۰۰,۰۰۰ بلاک این رقم به ۳.۲۵ نصف خواهد شد و همینطور ادامه خواهد یافت.
به دلیل بالا رفتن سختی شبکه بیت کوین و سخت بودن انجام عمل ماینینگ به صورت فردی، ماینرها به صورت گروهی در فضایهای مجازی به نام استخر استخراج (mining pool) جمع میشوند تا از قدرت پردازش جمعی برای استخراج استفاده کنند. استخر استخراج محل مجازی است که استخراج کنندگان در آن جمع می شوند و همه برای استخراج یک بلاک تلاش می کنند. در این روش هر ماینر یا استخراج کننده معمولا بر اساس توان پردازشی خود سود میبرد اما پاداش بلاک اصلی به استخر استخراج تعلق میگیرد.
همانطور که گفتیم، سختی شبکه بیت کوین نسبت به قدرت پردازشی شبکه، طوری تنظیم میشود تا پاداش بلاک تقریبا هر ۱۰ دقیقه به دست بیاید.
همچنین تراکنشهای بیت کوین دارای کارمزد هستند. ماینرها اغلب تراکنشهایی را داخل بلاک قرار میدهند که کارمزد بهتری دارند و بنابراین تراکنشهایی که کارمزد بالاتر دارند زودتر تایید خواهند شد. کاربر خودش حق دارد که کارمزد تراکنشش را مشخص کند اما اگر برای تراکنش خود کارمزد مناسب مشخص نکنید، تایید تراکنش میتواند، چند روز یا تا ابد طول بکشد.
علاوه بر پاداش بلاک، میزان کل کارمزد تراکنشهای یک بلاک هم به ماینر تعلق میگیرد.
منبع:ارز دیجیتال