Bymidr
بخش ۰ | فهرست ۵. چرایی انتخاب مدل UTXO و تأثیر آن بر امنیت و مقیاسپذیری بسیاری از توسعهدهندگان که از دنیای بانکداری سنتی یا اتریوم میآیند، در اولین مواجهه با بیتکوین گیج میشوند: «چرا در بیتکوین چیزی به نام "موجودی حساب" (Account Balance) ذخیره نمیشود؟»…
چرا ساتوشی این مدل را انتخاب کرد؟
۱. مقیاسپذیری از طریق پردازش موازی (Parallelism): این مهمترین دلیل فنی است. در مدل Account (مثل اتریوم)، چون همه تراکنشها روی یک «حالت جهانی» (Global State) و موجودی حسابها اثر میگذارند، باید بهترتیب پردازش شوند (Sequential). اما در مدل UTXO، تراکنشها مستقل هستند. اگر علی به رضا پول بدهد و سارا به مریم، این دو تراکنش به UTXOهای متفاوتی دست میزنند. بنابراین نودها میتوانند این تراکنشها را بهصورت موازی اعتبارسنجی کنند. این ویژگی برای مقیاسپذیری شبکه حیاتی است.
۲. امنیت و سادگی اعتبارسنجی (Simple Verification): برای بررسی اینکه آیا یک تراکنش معتبر است، نود فقط باید یک سوال ساده بپرسد: «آیا این UTXO در مجموعه UTXO Set وجود دارد و خرج نشده است؟» نود نیازی ندارد تاریخچه حساب کاربر را چک کند یا نگران تداخل (Race Condition) با تراکنشهای دیگر باشد. به محض خرج شدن، آن UTXO از لیست حذف (Prune) میشود.
۳. حریم خصوصی (Privacy): در مدل بانکی، شما یک شماره حساب ثابت دارید. در مدل UTXO، کاربران تشویق میشوند برای هر تراکنش (مخصوصاً برای بقیه پول یا Change) از یک آدرس جدید استفاده کنند. این باعث میشود ردیابی جریان پول و خوشهبندی آدرسها (Address Clustering) برای تحلیلگران زنجیره دشوارتر شود.
۴. قطعیت (Determinism): در مدل UTXO، شما دقیقاً میدانید کدام تکه پول را خرج میکنید و سایز تراکنش (و کارمزد آن) قبل از ارسال کاملاً مشخص است. در مدل Account (مثل قراردادهای هوشمند)، نتیجه تراکنش ممکن است به وضعیت لحظهای شبکه وابسته باشد و حتی تراکنش شکست بخورد اما کارمزد کسر شود!
۱. مقیاسپذیری از طریق پردازش موازی (Parallelism): این مهمترین دلیل فنی است. در مدل Account (مثل اتریوم)، چون همه تراکنشها روی یک «حالت جهانی» (Global State) و موجودی حسابها اثر میگذارند، باید بهترتیب پردازش شوند (Sequential). اما در مدل UTXO، تراکنشها مستقل هستند. اگر علی به رضا پول بدهد و سارا به مریم، این دو تراکنش به UTXOهای متفاوتی دست میزنند. بنابراین نودها میتوانند این تراکنشها را بهصورت موازی اعتبارسنجی کنند. این ویژگی برای مقیاسپذیری شبکه حیاتی است.
۲. امنیت و سادگی اعتبارسنجی (Simple Verification): برای بررسی اینکه آیا یک تراکنش معتبر است، نود فقط باید یک سوال ساده بپرسد: «آیا این UTXO در مجموعه UTXO Set وجود دارد و خرج نشده است؟» نود نیازی ندارد تاریخچه حساب کاربر را چک کند یا نگران تداخل (Race Condition) با تراکنشهای دیگر باشد. به محض خرج شدن، آن UTXO از لیست حذف (Prune) میشود.
۳. حریم خصوصی (Privacy): در مدل بانکی، شما یک شماره حساب ثابت دارید. در مدل UTXO، کاربران تشویق میشوند برای هر تراکنش (مخصوصاً برای بقیه پول یا Change) از یک آدرس جدید استفاده کنند. این باعث میشود ردیابی جریان پول و خوشهبندی آدرسها (Address Clustering) برای تحلیلگران زنجیره دشوارتر شود.
۴. قطعیت (Determinism): در مدل UTXO، شما دقیقاً میدانید کدام تکه پول را خرج میکنید و سایز تراکنش (و کارمزد آن) قبل از ارسال کاملاً مشخص است. در مدل Account (مثل قراردادهای هوشمند)، نتیجه تراکنش ممکن است به وضعیت لحظهای شبکه وابسته باشد و حتی تراکنش شکست بخورد اما کارمزد کسر شود!
Bymidr
چرا ساتوشی این مدل را انتخاب کرد؟ ۱. مقیاسپذیری از طریق پردازش موازی (Parallelism): این مهمترین دلیل فنی است. در مدل Account (مثل اتریوم)، چون همه تراکنشها روی یک «حالت جهانی» (Global State) و موجودی حسابها اثر میگذارند، باید بهترتیب پردازش شوند (Sequential).…
انتخاب مدل UTXO باعث شد بیتکوین بیشتر شبیه به "طلای دیجیتال قابل انتقال" باشد تا یک دفتر حسابداری دیجیتال. این مدل اگرچه برنامهنویسی روی بیتکوین (Smart Contracts) را سختتر میکند، اما در عوض امنیتی بینظیر و قابلیت اعتبارسنجی موازی را فراهم میکند که برای یک شبکهٔ پول جهانی که قرار نیست هرگز متوقف شود، اولویت اول است.
پایان بخش ۰ | فهرست
در بخش بعدی (بخش ۱)، وارد کالبدشکافی فنی میشیم و میبینیم این مفاهیم چگونه پیادهسازی شدهاند.
پایان بخش ۰ | فهرست
در بخش بعدی (بخش ۱)، وارد کالبدشکافی فنی میشیم و میبینیم این مفاهیم چگونه پیادهسازی شدهاند.
بخش ۱ | فهرست
۱. معرفی فنی بیتکوین: نگاه لایهای به سیستم (The Bitcoin Stack)
برای اینکه بیتکوین را درک کنیم، باید اول یک پیشفرض ذهنی را دور بریزیم: بیتکوین یک «اپلیکیشن» یا یک «فایل» نیست.
بیتکوین یک پروتکل است؛ مجموعهای از قوانین، کدها و ارتباطی که روی هزاران کامپیوتر مستقل اجرا میشود تا یک هدف واحد را محقق کند: «توافق جهانی بر سر اینکه چه کسی، چقدر دارایی دارد.»
هدف این پروتکل، ایجاد و نگهداری یک «ماشین حالت توزیعشده» (Distributed State Machine) است. برای اینکه هزاران کامپیوتر بدون هماهنگکننده مرکزی کار کنند، بیتکوین معماری خود را در ۴ لایهٔ متمایز بنا کرده است:
لایه ۱: شبکه (The Network Layer)
این زیرساخت فیزیکی و ارتباطی سیستم است.
توپولوژی: شبکه بهصورت P2P (همتا-به-همتا) و تخت (Flat) است. هیچ نودی «سرور» یا «رئیس» نیست.
پروتکل انتشار (Gossip Protocol): مکانیزم انتقال داده، «شایعهافکنی» است. هر نود به ۸ تا ۱۲۵ نود دیگر متصل است. وقتی پیامی (تراکنش یا بلاک) دریافت میکند، پس از اعتبارسنجی اولیه، آن را به همسایگانش میفرستد. این روش (Flooding) تضمین میکند که دادهها در چند ثانیه به تمام جهان میرسند و سانسور کردن شبکه عملاً غیرممکن میشود.
لایه ۲: داده (The Data Layer)
این لایه، «ساختار» اطلاعات را تعریف میکند. اینجا جایی است که بایتها معنا پیدا میکنند.
تراکنشها (Transactions): اتمهای سیستم هستند که تغییر مالکیت (UTXO) را حمل میکنند.
ساختار بلاک (Block Structure): بلاکها کانتینرهایی هستند که تراکنشها را دستهبندی میکنند.
بلاکچین (Blockchain): ساختار دادهای از نوع «لیست پیوندی» (Linked List) است. هر بلاک با استفاده از هشِ بلاکِ قبلی، به گذشته زنجیر میشود. این لایه تضمین میکند که ترتیب زمانی و یکپارچگی تاریخی دادهها حفظ شود.
لایه ۳: اجماع (The Consensus Layer)
این «مغز متفکر» سیستم و مهمترین لایه بیتکوین است. در این لایه مشخص میشود کدام داده «معتبر» و کدام «حقیقت» است.
قوانین اعتبارسنجی (Validation Rules): مجموعهای از قوانین سفتوسخت (Hard-coded) که تمام نودها اجرا میکنند. (مثلاً: تراکنش نباید بیشتر از ورودیاش خرج کند).
اجماع ناکاموتو (Nakamoto Consensus): مکانیزمی که اختلافنظرها را حل میکند. اگر دو نسخه از تاریخچه وجود داشته باشد، قانونی که میگوید «زنجیرهای که بیشترین Proof-of-Work (انرژی) را دارد، حقیقت است» اجرا میشود.
لایه ۴: کاربرد و اسکریپت (The Application Layer)
این لایه، رابط کاربری پروتکل است و تعیین میکند پولها چگونه «قفل» و «باز» شوند.
اسکریپت (Script): برخلاف حسابهای بانکی که فقط «رمز عبور» دارند، بیتکوین از یک زبان برنامهنویسی برای قفل کردن پول استفاده میکند. شما میتوانید پول را طوری قفل کنید که برای خرج شدن نیاز به «امضای علی» + «گذشتن ۳۰ روز» + «یک عدد تصادفی» داشته باشد. (قراردادهای هوشمند اولیه).
تمایز حیاتی: پروتکل در برابر پیادهسازی برای درک، باید تفاوت این دو را بدانیم:
۱. پروتکل بیتکوین (The Standard):
قوانین انتزاعی است که در مستندات (BIPs) تعریف شده. مثل قوانین گرامر زبان. هیچکس مالک آن نیست.
۲. بیتکوین کور (Bitcoin Core):
نرمافزاری است که این قوانین را پیادهسازی کرده است (Reference Implementation). اگر شما نرمافزاری بنویسید که دقیقاً همین لایههای ۱ تا ۳ را رعایت کند، نرمافزار شما هم «بیتکوین» است. قدرت بیتکوین در این است که هزاران نسخه مختلف نرمافزار میتوانند با هم صحبت کنند، چون همه به یک پروتکل واحد پایبندند.
این معماری لایهای، تنها چارچوب مفهومی سیستم است. برای اینکه این چارچوب جان بگیرد و عملیاتی شود، نیاز به سختافزارهایی دارد که این کدها را اجرا کنند. در سیستمهای متمرکز، این زیرساخت سرورهای شرکت است، اما در بیتکوین، این وظیفه بر عهدهٔ هزاران بازیگر مستقل (node) با نقشهای متفاوت است که در ادامه آن ها را بررسی میکنیم.
۱. معرفی فنی بیتکوین: نگاه لایهای به سیستم (The Bitcoin Stack)
برای اینکه بیتکوین را درک کنیم، باید اول یک پیشفرض ذهنی را دور بریزیم: بیتکوین یک «اپلیکیشن» یا یک «فایل» نیست.
بیتکوین یک پروتکل است؛ مجموعهای از قوانین، کدها و ارتباطی که روی هزاران کامپیوتر مستقل اجرا میشود تا یک هدف واحد را محقق کند: «توافق جهانی بر سر اینکه چه کسی، چقدر دارایی دارد.»
هدف این پروتکل، ایجاد و نگهداری یک «ماشین حالت توزیعشده» (Distributed State Machine) است. برای اینکه هزاران کامپیوتر بدون هماهنگکننده مرکزی کار کنند، بیتکوین معماری خود را در ۴ لایهٔ متمایز بنا کرده است:
لایه ۱: شبکه (The Network Layer)
این زیرساخت فیزیکی و ارتباطی سیستم است.
توپولوژی: شبکه بهصورت P2P (همتا-به-همتا) و تخت (Flat) است. هیچ نودی «سرور» یا «رئیس» نیست.
پروتکل انتشار (Gossip Protocol): مکانیزم انتقال داده، «شایعهافکنی» است. هر نود به ۸ تا ۱۲۵ نود دیگر متصل است. وقتی پیامی (تراکنش یا بلاک) دریافت میکند، پس از اعتبارسنجی اولیه، آن را به همسایگانش میفرستد. این روش (Flooding) تضمین میکند که دادهها در چند ثانیه به تمام جهان میرسند و سانسور کردن شبکه عملاً غیرممکن میشود.
لایه ۲: داده (The Data Layer)
این لایه، «ساختار» اطلاعات را تعریف میکند. اینجا جایی است که بایتها معنا پیدا میکنند.
تراکنشها (Transactions): اتمهای سیستم هستند که تغییر مالکیت (UTXO) را حمل میکنند.
ساختار بلاک (Block Structure): بلاکها کانتینرهایی هستند که تراکنشها را دستهبندی میکنند.
بلاکچین (Blockchain): ساختار دادهای از نوع «لیست پیوندی» (Linked List) است. هر بلاک با استفاده از هشِ بلاکِ قبلی، به گذشته زنجیر میشود. این لایه تضمین میکند که ترتیب زمانی و یکپارچگی تاریخی دادهها حفظ شود.
لایه ۳: اجماع (The Consensus Layer)
این «مغز متفکر» سیستم و مهمترین لایه بیتکوین است. در این لایه مشخص میشود کدام داده «معتبر» و کدام «حقیقت» است.
قوانین اعتبارسنجی (Validation Rules): مجموعهای از قوانین سفتوسخت (Hard-coded) که تمام نودها اجرا میکنند. (مثلاً: تراکنش نباید بیشتر از ورودیاش خرج کند).
اجماع ناکاموتو (Nakamoto Consensus): مکانیزمی که اختلافنظرها را حل میکند. اگر دو نسخه از تاریخچه وجود داشته باشد، قانونی که میگوید «زنجیرهای که بیشترین Proof-of-Work (انرژی) را دارد، حقیقت است» اجرا میشود.
لایه ۴: کاربرد و اسکریپت (The Application Layer)
این لایه، رابط کاربری پروتکل است و تعیین میکند پولها چگونه «قفل» و «باز» شوند.
اسکریپت (Script): برخلاف حسابهای بانکی که فقط «رمز عبور» دارند، بیتکوین از یک زبان برنامهنویسی برای قفل کردن پول استفاده میکند. شما میتوانید پول را طوری قفل کنید که برای خرج شدن نیاز به «امضای علی» + «گذشتن ۳۰ روز» + «یک عدد تصادفی» داشته باشد. (قراردادهای هوشمند اولیه).
تمایز حیاتی: پروتکل در برابر پیادهسازی برای درک، باید تفاوت این دو را بدانیم:
۱. پروتکل بیتکوین (The Standard):
قوانین انتزاعی است که در مستندات (BIPs) تعریف شده. مثل قوانین گرامر زبان. هیچکس مالک آن نیست.
۲. بیتکوین کور (Bitcoin Core):
نرمافزاری است که این قوانین را پیادهسازی کرده است (Reference Implementation). اگر شما نرمافزاری بنویسید که دقیقاً همین لایههای ۱ تا ۳ را رعایت کند، نرمافزار شما هم «بیتکوین» است. قدرت بیتکوین در این است که هزاران نسخه مختلف نرمافزار میتوانند با هم صحبت کنند، چون همه به یک پروتکل واحد پایبندند.
این معماری لایهای، تنها چارچوب مفهومی سیستم است. برای اینکه این چارچوب جان بگیرد و عملیاتی شود، نیاز به سختافزارهایی دارد که این کدها را اجرا کنند. در سیستمهای متمرکز، این زیرساخت سرورهای شرکت است، اما در بیتکوین، این وظیفه بر عهدهٔ هزاران بازیگر مستقل (node) با نقشهای متفاوت است که در ادامه آن ها را بررسی میکنیم.
یک کتاب خوب...
این کتاب بهت نشون میده که خیلی از خستگیها، اضطرابها و فشارهایی که هر روز تجربه میکنیم، فقط مشکلات شخصی یا فردی نیستن، بلکه ریشههای جدی در ساختارهای اقتصادی، سیاسی و اجتماعی دارن. خشمگین بودن از نظام سرمایهداری اشکالی نداره کمک میکنه بفهمیم چطور بعضی سیستمها طوری طراحی شدن که بهطور سیستماتیک نابرابری و فرسودگی رو بازتولید میکنن. این کتاب یه نگاه متفاوت به اقتصاد و قدرت میده و ذهنت رو به سؤالهای مهمتری باز میکنه.
توی این زمونه که روانشناس جماعت، رؤیافروشهای دوزاری اینستاگرام، آدمهای سطحی و ریاکار و اشخاص بهظاهر روشنفکر (آخوندهای مدرن)، فردگرایی رو بهشدت بولد میکنن و هر چیزی رو ربط میدن به فردیت و از این راه پول درمیارن؛ همون کاری که آخوند با «گناه» میکرد، اینا با «ذهنیت» میکنن.
میگن هرچی سرت میاد، تقصیر خودته؛ فقیری؟ خوب فکر نکردی. خستهای؟ درست تلاش نکردی. بدبختی؟ ذهنت مسمومه!
این نگاه، سیستمهای ناعادلانهی اقتصادی و سیاسی رو کاملاً تبرئه میکنه و همهچیو میاندازه گردن فرد. خوندن این کتاب، بیشتر از هر چیز کمک میکنه بفهمیم خیلی از مشکلات، فردی نیستن؛ ساختاریان.
پس پیشنهاد میکنم حتماً بخونیدش.
این کتاب بهت نشون میده که خیلی از خستگیها، اضطرابها و فشارهایی که هر روز تجربه میکنیم، فقط مشکلات شخصی یا فردی نیستن، بلکه ریشههای جدی در ساختارهای اقتصادی، سیاسی و اجتماعی دارن. خشمگین بودن از نظام سرمایهداری اشکالی نداره کمک میکنه بفهمیم چطور بعضی سیستمها طوری طراحی شدن که بهطور سیستماتیک نابرابری و فرسودگی رو بازتولید میکنن. این کتاب یه نگاه متفاوت به اقتصاد و قدرت میده و ذهنت رو به سؤالهای مهمتری باز میکنه.
توی این زمونه که روانشناس جماعت، رؤیافروشهای دوزاری اینستاگرام، آدمهای سطحی و ریاکار و اشخاص بهظاهر روشنفکر (آخوندهای مدرن)، فردگرایی رو بهشدت بولد میکنن و هر چیزی رو ربط میدن به فردیت و از این راه پول درمیارن؛ همون کاری که آخوند با «گناه» میکرد، اینا با «ذهنیت» میکنن.
میگن هرچی سرت میاد، تقصیر خودته؛ فقیری؟ خوب فکر نکردی. خستهای؟ درست تلاش نکردی. بدبختی؟ ذهنت مسمومه!
این نگاه، سیستمهای ناعادلانهی اقتصادی و سیاسی رو کاملاً تبرئه میکنه و همهچیو میاندازه گردن فرد. خوندن این کتاب، بیشتر از هر چیز کمک میکنه بفهمیم خیلی از مشکلات، فردی نیستن؛ ساختاریان.
پس پیشنهاد میکنم حتماً بخونیدش.
بخش ۱ | فهرست
۲. معماری شبکه و انواع نودها (Network Topography)
شبکه بیتکوین یک ساختار Mesh (توری) نامنظم است. هیچ سلسلهمراتبی وجود ندارد؛ اما همه نودها یکسان نیستند. بر اساس اینکه هر کامپیوتر چقدر از دادههای بلاکچین را ذخیره میکند و چه وظیفهای در اعتبارسنجی دارد، نودها به ۴ دسته فنی تقسیم میشوند.
۱. نودهای کامل (Full Nodes): حافظان حقیقت
اینها شهروندان درجهیک شبکه هستند. یک Full Node تمام تاریخچه بیتکوین (از بلاک جنسیس تا الان) را دانلود و تکتک تراکنشها را بازبینی میکند.
وظیفه : اجرای کامل قوانین اجماع (Consensus Rules).
عملکرد: وقتی یک نود کامل بلاک جدیدی دریافت میکند، کورکورانه آن را قبول نمیکند. چک میکند که:
۱. آیا ماینر PoW معتبر تولید کرده؟
۲. آیا تراکنشها امضای معتبر دارند؟
۳. آیا بیتکوینهای خرج شده، قبلاً موجود بودهاند (UTXO)؟
قدرت: اگر ۹۹٪ ماینرها تصمیم بگیرند قانونی را عوض کنند (مثلاً ۲۱ میلیون را بکنند ۲۲ میلیون)، نودهای کامل بلاکهای آنها را رد (Reject) میکنند. ماینرها بدون نودها، انرژی خود را هدر دادهاند.
۲. نودهای هرسشده (Pruned Nodes): کامل اما سبک
مشکل Full Node این است که حجم بلاکچین زیاد است (بیش از ۶۰۰ گیگابایت در ۲۰۲۵).
نود Pruned یک راهکار است: «من همه چیز را اعتبارسنجی میکنم، اما تاریخچه قدیمی را نگه نمیدارم.»
نحوه کار: این نود ابتدا کل بلاکچین را دانلود و اعتبارسنجی میکند (IBD - Initial Block Download). اما به محض اینکه مطمئن شد بلاکهای قدیمی معتبرند، دادههای خام آنها را پاک میکند و فقط مجموعه UTXO (Chainstate) را نگه میدارد.
نکته فنی: امنیت نود Pruned دقیقاً برابر با Full Node آرشیوی است. تفاوت فقط در این است که نمیتواند تاریخچه قدیمی را به نودهای جدید سرویس دهد.
۳. نودهای سبک (SPV / Light Nodes): توریستهای شبکه
اکثر کیفپولهای موبایل (مثل Trust Wallet یا BlueWallet) از این نوع هستند. گوشی موبایل توان پردازش و ذخیره ۶۰۰ گیگ دیتا را ندارد.
معماری (BIP-37): این نودها بلاکچین را دانلود نمیکنند. آنها فقط هدر بلاکها (Block Headers) را دانلود میکنند (که حجم ناچیزی دارد، ۸۰ بایت به ازای هر بلاک).
وابستگی به اعتماد: این نودها تراکنشها را اعتبارسنجی نمیکنند. آنها فرض میکنند «چون این بلاک Proof-of-Work سنگینی دارد، پس حتماً معتبر است».
تکنیک Merkle Proof: اگر بخواهند بدانند تراکنش شما انجام شده، از یک Full Node درخواست میکنند تا با استفاده از مسیر مرکل (Merkle Path)، اثبات کند که تراکنش در بلاک وجود دارد.
۴. نودهای استخراج (Mining Nodes): کارگران شبکه
ماینرها در واقع Full Nodeهایی هستند که به سختافزار تخصصی (ASIC) متصل شدهاند.
وظیفه: گوش دادن به شبکه، جمعآوری تراکنشها از Mempool، ساختن یک بلاک کاندید (Candidate Block) و تلاش برای پیدا کردن هش معتبر (انجام کار فیزیکی).
رابطه با استخر: امروزه اکثر ماینرها خودشان نود اجرا نمیکنند؛ بلکه فقط هشریت خود را از طریق پروتکل Stratum به یک استخر (Mining Pool) میفرستند. در این سناریو، مدیر استخر «مغز» است (نود کامل دارد و بلاک میسازد) و ماینرها فقط «عضله» هستند.
۲. معماری شبکه و انواع نودها (Network Topography)
شبکه بیتکوین یک ساختار Mesh (توری) نامنظم است. هیچ سلسلهمراتبی وجود ندارد؛ اما همه نودها یکسان نیستند. بر اساس اینکه هر کامپیوتر چقدر از دادههای بلاکچین را ذخیره میکند و چه وظیفهای در اعتبارسنجی دارد، نودها به ۴ دسته فنی تقسیم میشوند.
۱. نودهای کامل (Full Nodes): حافظان حقیقت
اینها شهروندان درجهیک شبکه هستند. یک Full Node تمام تاریخچه بیتکوین (از بلاک جنسیس تا الان) را دانلود و تکتک تراکنشها را بازبینی میکند.
وظیفه : اجرای کامل قوانین اجماع (Consensus Rules).
عملکرد: وقتی یک نود کامل بلاک جدیدی دریافت میکند، کورکورانه آن را قبول نمیکند. چک میکند که:
۱. آیا ماینر PoW معتبر تولید کرده؟
۲. آیا تراکنشها امضای معتبر دارند؟
۳. آیا بیتکوینهای خرج شده، قبلاً موجود بودهاند (UTXO)؟
قدرت: اگر ۹۹٪ ماینرها تصمیم بگیرند قانونی را عوض کنند (مثلاً ۲۱ میلیون را بکنند ۲۲ میلیون)، نودهای کامل بلاکهای آنها را رد (Reject) میکنند. ماینرها بدون نودها، انرژی خود را هدر دادهاند.
۲. نودهای هرسشده (Pruned Nodes): کامل اما سبک
مشکل Full Node این است که حجم بلاکچین زیاد است (بیش از ۶۰۰ گیگابایت در ۲۰۲۵).
نود Pruned یک راهکار است: «من همه چیز را اعتبارسنجی میکنم، اما تاریخچه قدیمی را نگه نمیدارم.»
نحوه کار: این نود ابتدا کل بلاکچین را دانلود و اعتبارسنجی میکند (IBD - Initial Block Download). اما به محض اینکه مطمئن شد بلاکهای قدیمی معتبرند، دادههای خام آنها را پاک میکند و فقط مجموعه UTXO (Chainstate) را نگه میدارد.
نکته فنی: امنیت نود Pruned دقیقاً برابر با Full Node آرشیوی است. تفاوت فقط در این است که نمیتواند تاریخچه قدیمی را به نودهای جدید سرویس دهد.
۳. نودهای سبک (SPV / Light Nodes): توریستهای شبکه
اکثر کیفپولهای موبایل (مثل Trust Wallet یا BlueWallet) از این نوع هستند. گوشی موبایل توان پردازش و ذخیره ۶۰۰ گیگ دیتا را ندارد.
معماری (BIP-37): این نودها بلاکچین را دانلود نمیکنند. آنها فقط هدر بلاکها (Block Headers) را دانلود میکنند (که حجم ناچیزی دارد، ۸۰ بایت به ازای هر بلاک).
وابستگی به اعتماد: این نودها تراکنشها را اعتبارسنجی نمیکنند. آنها فرض میکنند «چون این بلاک Proof-of-Work سنگینی دارد، پس حتماً معتبر است».
تکنیک Merkle Proof: اگر بخواهند بدانند تراکنش شما انجام شده، از یک Full Node درخواست میکنند تا با استفاده از مسیر مرکل (Merkle Path)، اثبات کند که تراکنش در بلاک وجود دارد.
۴. نودهای استخراج (Mining Nodes): کارگران شبکه
ماینرها در واقع Full Nodeهایی هستند که به سختافزار تخصصی (ASIC) متصل شدهاند.
وظیفه: گوش دادن به شبکه، جمعآوری تراکنشها از Mempool، ساختن یک بلاک کاندید (Candidate Block) و تلاش برای پیدا کردن هش معتبر (انجام کار فیزیکی).
رابطه با استخر: امروزه اکثر ماینرها خودشان نود اجرا نمیکنند؛ بلکه فقط هشریت خود را از طریق پروتکل Stratum به یک استخر (Mining Pool) میفرستند. در این سناریو، مدیر استخر «مغز» است (نود کامل دارد و بلاک میسازد) و ماینرها فقط «عضله» هستند.
Bymidr
بخش ۱ | فهرست ۲. معماری شبکه و انواع نودها (Network Topography) شبکه بیتکوین یک ساختار Mesh (توری) نامنظم است. هیچ سلسلهمراتبی وجود ندارد؛ اما همه نودها یکسان نیستند. بر اساس اینکه هر کامپیوتر چقدر از دادههای بلاکچین را ذخیره میکند و چه وظیفهای در…
ما اکنون «معماری شبکه» و «بازیگران» را شناختیم. اما این نودها دقیقاً چه چیزی را برای هم میفرستند؟ زبان مشترک آنها چیست؟
برای اینکه یک نود در آمریکا بتواند تراکنش یک نود در ایران را بفهمد، آنها نیاز به استانداردهای دقیق دادهسازی دارند. در قسمت بعدی، وارد مبحث «استانداردهای داده و سریالسازی» میشویم تا ببینیم بیتکوین چطور اعداد و بایتها را مدیریت میکند.
برای اینکه یک نود در آمریکا بتواند تراکنش یک نود در ایران را بفهمد، آنها نیاز به استانداردهای دقیق دادهسازی دارند. در قسمت بعدی، وارد مبحث «استانداردهای داده و سریالسازی» میشویم تا ببینیم بیتکوین چطور اعداد و بایتها را مدیریت میکند.
بخش ۱ | فهرست
۳. استانداردهای داده و سریالسازی (Data Serialization)
وقتی یک نود بیتکوین پیامی برای نود دیگر میفرستد، نمیتواند یک فایل JSON یا XML بفرستد. این فرمتها برای شبکهای که تکتک بایتهایش هزینه دارد، بسیار سنگین و ناکارآمد هستند.
بیتکوین از پروتکلهای سریالسازی دودویی (Binary Serialization) اختصاصی و فوقفشرده استفاده میکند. برای اینکه بتوانید تراکنشهای خام (Raw Transactions) را بخوانید، باید با ۳ مفهوم کلیدی در استاندارد دادههای بیتکوین آشنا شوید.
۱. سریالسازی اعداد: چالش Endianness
در علوم کامپیوتر، دو روش برای ذخیره اعداد چندبایتی در حافظه وجود دارد. این موضوع در بیتکوین حیاتی است، چون استاندارد داخلی پروتکل با آنچه شما در مرورگرهای بلاکچین (Block Explorers) میبینید، معکوس است.
Big-Endian (BE):
روش انسانی. بایتِ باارزش (MSB) اول میآید. (مثل نوشتن عدد ۱۲۳).
کاربرد: در نمایش آدرسهای IP و پورتها (لایه شبکه).
Little-Endian (LE):
روش ماشینی. بایتِ کمارزش (LSB) اول میآید.
کاربرد: تقریباً همه جای بیتکوین! مقادیر تراکنش، نانسها، و مهمتر از همه هشها در محاسبات داخلی بهصورت Little-Endian پردازش میشوند.
نکته (دام بزرگ):
وقتی هش یک تراکنش (TxID) را در سایتهایی مثل mempool.space میبینید، آن هش بهصورت Big-Endian نمایش داده میشود تا برای انسان خوانا باشد. اما در کدنویسی و داخل پروتکل، آن هش بهصورت Little-Endian ذخیره شده است. اگر این بایتها را برعکس نکنید (Byte Swapping)، تراکنش شما نامعتبر میشود.
۲. فشردهسازی اعداد: VarInt (Variable Integer)
در یک بلاک، گاهی تعداد تراکنشها ۵ عدد است، گاهی ۵۰۰۰ عدد. اگر برای شمارش تعداد تراکنشها همیشه ۸ بایت فضا رزرو کنیم، فضای بلاک هدر میرود.
بیتکوین از فرمت CompactSize (VarInt) استفاده میکند که طولش متغیر است:
اگر عدد کوچک باشد (< 253): فقط ۱ بایت اشغال میکند.
اگر عدد متوسط باشد: ۳ بایت (۱ بایت پیشوند + ۲ بایت عدد).
اگر عدد بزرگ باشد: ۵ یا ۹ بایت.
این باعث میشود هدر بلاکها و تراکنشها تا حد ممکن کوچک و سبک باقی بمانند.
۳. واحدهای اندازهگیری وزن: Bytes vs vBytes vs WU
تا سال ۲۰۱۷، سایز بلاک فقط با «بایت» سنجیده میشد (حداکثر ۱ مگابایت). اما بعد از آپگرید SegWit، مفهوم سایز تغییر کرد تا هزینه تراکنشها بهینهتر شود.
Weight Units (WU):
واحد دقیق و واقعی سایز در موتور اجماع. حداکثر سایز بلاک ۴,۰۰۰,۰۰۰ WU است.
دادههای اصلی (Legacy): ضریب ۴ میگیرند (هر بایت = 4 WU).
دادههای امضا (Witness): ضریب ۱ میگیرند (هر بایت = 1 WU).
Virtual Bytes (vByte):
واحدی که کیفپولها و صرافیها برای محاسبه کارمزد استفاده میکنند تا درک آن راحتتر باشد.
نتیجه: این استاندارد باعث میشود که ذخیره کردن "امضاها" (Witness Data) در بلاکچین ۴ برابر ارزانتر از ذخیره کردن "دادههای تراکنش" باشد. این یک مشوق اقتصادی برای استفاده از آدرسهای جدید SegWit است.
-----------
حالا ما میدانیم شبکه چطور کار میکند (P2P)، نودها چه انواعی دارند (Full/SPV) و دادهها چطور نوشته میشوند (Little-Endian/VarInt).
وقت آن است که ذرهبین را برداریم و روی مهمترین موجودیت شبکه زوم کنیم. در ادامه، یک «تراکنش واقعی» را بیتبهبایت کالبدشکافی میکنیم تا ببینیم وقتی پول میفرستیم، دقیقاً چه دیتایی در کابلهای اینترنت جابهجا میشود.
۳. استانداردهای داده و سریالسازی (Data Serialization)
وقتی یک نود بیتکوین پیامی برای نود دیگر میفرستد، نمیتواند یک فایل JSON یا XML بفرستد. این فرمتها برای شبکهای که تکتک بایتهایش هزینه دارد، بسیار سنگین و ناکارآمد هستند.
بیتکوین از پروتکلهای سریالسازی دودویی (Binary Serialization) اختصاصی و فوقفشرده استفاده میکند. برای اینکه بتوانید تراکنشهای خام (Raw Transactions) را بخوانید، باید با ۳ مفهوم کلیدی در استاندارد دادههای بیتکوین آشنا شوید.
۱. سریالسازی اعداد: چالش Endianness
در علوم کامپیوتر، دو روش برای ذخیره اعداد چندبایتی در حافظه وجود دارد. این موضوع در بیتکوین حیاتی است، چون استاندارد داخلی پروتکل با آنچه شما در مرورگرهای بلاکچین (Block Explorers) میبینید، معکوس است.
Big-Endian (BE):
روش انسانی. بایتِ باارزش (MSB) اول میآید. (مثل نوشتن عدد ۱۲۳).
کاربرد: در نمایش آدرسهای IP و پورتها (لایه شبکه).
Little-Endian (LE):
روش ماشینی. بایتِ کمارزش (LSB) اول میآید.
کاربرد: تقریباً همه جای بیتکوین! مقادیر تراکنش، نانسها، و مهمتر از همه هشها در محاسبات داخلی بهصورت Little-Endian پردازش میشوند.
نکته (دام بزرگ):
وقتی هش یک تراکنش (TxID) را در سایتهایی مثل mempool.space میبینید، آن هش بهصورت Big-Endian نمایش داده میشود تا برای انسان خوانا باشد. اما در کدنویسی و داخل پروتکل، آن هش بهصورت Little-Endian ذخیره شده است. اگر این بایتها را برعکس نکنید (Byte Swapping)، تراکنش شما نامعتبر میشود.
۲. فشردهسازی اعداد: VarInt (Variable Integer)
در یک بلاک، گاهی تعداد تراکنشها ۵ عدد است، گاهی ۵۰۰۰ عدد. اگر برای شمارش تعداد تراکنشها همیشه ۸ بایت فضا رزرو کنیم، فضای بلاک هدر میرود.
بیتکوین از فرمت CompactSize (VarInt) استفاده میکند که طولش متغیر است:
اگر عدد کوچک باشد (< 253): فقط ۱ بایت اشغال میکند.
اگر عدد متوسط باشد: ۳ بایت (۱ بایت پیشوند + ۲ بایت عدد).
اگر عدد بزرگ باشد: ۵ یا ۹ بایت.
این باعث میشود هدر بلاکها و تراکنشها تا حد ممکن کوچک و سبک باقی بمانند.
۳. واحدهای اندازهگیری وزن: Bytes vs vBytes vs WU
تا سال ۲۰۱۷، سایز بلاک فقط با «بایت» سنجیده میشد (حداکثر ۱ مگابایت). اما بعد از آپگرید SegWit، مفهوم سایز تغییر کرد تا هزینه تراکنشها بهینهتر شود.
Weight Units (WU):
واحد دقیق و واقعی سایز در موتور اجماع. حداکثر سایز بلاک ۴,۰۰۰,۰۰۰ WU است.
دادههای اصلی (Legacy): ضریب ۴ میگیرند (هر بایت = 4 WU).
دادههای امضا (Witness): ضریب ۱ میگیرند (هر بایت = 1 WU).
Virtual Bytes (vByte):
واحدی که کیفپولها و صرافیها برای محاسبه کارمزد استفاده میکنند تا درک آن راحتتر باشد.
نتیجه: این استاندارد باعث میشود که ذخیره کردن "امضاها" (Witness Data) در بلاکچین ۴ برابر ارزانتر از ذخیره کردن "دادههای تراکنش" باشد. این یک مشوق اقتصادی برای استفاده از آدرسهای جدید SegWit است.
-----------
حالا ما میدانیم شبکه چطور کار میکند (P2P)، نودها چه انواعی دارند (Full/SPV) و دادهها چطور نوشته میشوند (Little-Endian/VarInt).
وقت آن است که ذرهبین را برداریم و روی مهمترین موجودیت شبکه زوم کنیم. در ادامه، یک «تراکنش واقعی» را بیتبهبایت کالبدشکافی میکنیم تا ببینیم وقتی پول میفرستیم، دقیقاً چه دیتایی در کابلهای اینترنت جابهجا میشود.
This media is not supported in your browser
VIEW IN TELEGRAM
بخش ۱ | فهرست
۴. آناتومی تراکنش (Transaction Anatomy)
وقتی در کیفپولتان دکمه Send را میزنید، موبایل شما پیامی مثل "علی به حميدرضا پول داد" نمیفرستد.
کیفپول شما یک رشته طولانی از اعداد هگزادسیمال (Hex) میسازد که به آن Raw Transaction میگویند. اگر این رشته را کالبدشکافی کنیم، میبینیم که از ۳ بخش اصلی تشکیل شده است: ورودیها (Inputs)، خروجیها (Outputs) و قفلهای زمانی (Locktime).
برای درک ساختار تراکنش بیتکوین، باید تصورات بانکی را دور بریزید.
در بانک، وقتی پولی جابهجا میشود، عدد حساب شما کم و عدد حساب دیگری زیاد میشود.
اما در بیتکوین، تراکنش شبیه به «ذوب کردن طلا و ساختن شمش جدید» است.
همان طور که گفتیم هر تراکنش از سه بخش اصلی تشکیل شده است:
۱. ورودیها (Inputs): طلاهایی که ذوب میکنیم (منابع پول).
۲. خروجیها (Outputs): شمشهای جدیدی که میسازیم (مقصد پول).
۳. قفل زمانی (Locktime): شرط زمانی برای اعتبار تراکنش.
بیایید این بخشها را باز کنیم:
۱. ورودیها (Inputs): «چکهای قبلی را نقد کن»
شما در بیتکوین نمیتوانید بگویید «از موجودی من ۵ تا کم کن». شما باید دقیقاً به شبکه بگویید کدام پول را میخواهید خرج کنید.
هر ورودی شامل دو چیز است:
آدرسدهی (Pointer): شما باید به یک تراکنش در گذشته اشاره کنید. مثلاً بگویید: «یادتان هست در تراکنش شماره X، علی ۵ بیتکوین به من داد؟ من میخواهم آن ۵ تا را خرج کنم.»
کلید بازکننده (Unlocking Script): حالا باید ثابت کنید که صاحب آن ۵ بیتکوین هستید. اینجا امضای دیجیتال خود را قرار میدهید تا قفل آن پول باز شود.
۲. خروجیها (Outputs): «صندوقهای قفلدار جدید بساز»
حالا که پولهای قدیمی (ورودیها) باز شدند، باید آنها را به مقصد جدید بفرستید. اما در بیتکوین شما پول را به "آدمها" نمیفرستید؛ شما پول را داخل یک صندوق شیشهای میگذارید و روی آن قفل میزنید.
هر خروجی شامل دو چیز است:
مبلغ (Amount): چقدر پول در این صندوق است؟ (مثلاً ۲ بیتکوین).
قفل (Locking Script): شرط باز کردن صندوق چیست؟ معمولاً شرط این است: «فقط کسی که کلید خصوصیِ متناظر با این آدرس را دارد، میتواند این صندوق را باز کند.»
نکته مهم (بقیه پول): اگر شما یک ورودی ۵ بیتکوینی دارید و میخواهید ۲ بیتکوین به حمیدرضا بدهید، نمیتوانید ۵ را نصف کنید. شما کل ۵ تا را به تراکنش میآورید؛ ۲ تا را به یک خروجی برای حميدرضا میفرستید و ۳ تای باقیمانده را به یک خروجی جدید برای خودتان (به عنوان بقیه پول یا Change) میفرستید.
۳. کارمزد (Fee): انعام نامرئی
عجیب است که در ساختار تراکنش، هیچ فیلدی به نام "کارمزد" وجود ندارد!
کارمزد به صورت ضمنی محاسبه میشود:
یعنی اگر ۵ بیتکوین وارد کردید و مجموع خروجیها (پول حمیدرضا + بقیه پول خودتان) شد ۴.۹۹ بیتکوین، آن ۰.۰۱ باقیمانده اتوماتیک به ماینر میرسد.
۴. بخش شاهد (Witness): پیوست تراکنش (SegWit)
تا قبل از سال ۲۰۱۷، امضای دیجیتال (که حجم زیادی دارد) دقیقاً وسط تراکنش بود.
در آپدیت SegWit، توسعه دهندگان تصمیم گرفتند امضاها را از بدنه اصلی جدا کنند و به انتهای تراکنش سنجاق کنند (مثل فایل Attachment در ایمیل).
چرا؟ چون با این کار حجم اصلی تراکنش کم میشود و کارمزد کمتری میپردازید. به این دادههای امضا که جدا شدهاند، Witness Data میگویند.
پس یک تراکنش در واقع سندی است که میگوید: «من ثابت میکنم صاحب این پولهای قدیمی هستم (Input)، آنها را مصرف میکنم و پولهای جدیدی با قفلهای جدید میسازم (Output).»
حالا این برگههای تراکنش باید کجا بایگانی شوند؟ نمیتوان آنها را همینطور رها کرد. آنها باید دستهبندی، مُهر و موم و زنجیر شوند. در قسمت آخر این بخش، میبینیم که «بلاک» چگونه این تراکنشها را در خود جای میدهد.
۴. آناتومی تراکنش (Transaction Anatomy)
وقتی در کیفپولتان دکمه Send را میزنید، موبایل شما پیامی مثل "علی به حميدرضا پول داد" نمیفرستد.
کیفپول شما یک رشته طولانی از اعداد هگزادسیمال (Hex) میسازد که به آن Raw Transaction میگویند. اگر این رشته را کالبدشکافی کنیم، میبینیم که از ۳ بخش اصلی تشکیل شده است: ورودیها (Inputs)، خروجیها (Outputs) و قفلهای زمانی (Locktime).
برای درک ساختار تراکنش بیتکوین، باید تصورات بانکی را دور بریزید.
در بانک، وقتی پولی جابهجا میشود، عدد حساب شما کم و عدد حساب دیگری زیاد میشود.
اما در بیتکوین، تراکنش شبیه به «ذوب کردن طلا و ساختن شمش جدید» است.
همان طور که گفتیم هر تراکنش از سه بخش اصلی تشکیل شده است:
۱. ورودیها (Inputs): طلاهایی که ذوب میکنیم (منابع پول).
۲. خروجیها (Outputs): شمشهای جدیدی که میسازیم (مقصد پول).
۳. قفل زمانی (Locktime): شرط زمانی برای اعتبار تراکنش.
بیایید این بخشها را باز کنیم:
۱. ورودیها (Inputs): «چکهای قبلی را نقد کن»
شما در بیتکوین نمیتوانید بگویید «از موجودی من ۵ تا کم کن». شما باید دقیقاً به شبکه بگویید کدام پول را میخواهید خرج کنید.
هر ورودی شامل دو چیز است:
آدرسدهی (Pointer): شما باید به یک تراکنش در گذشته اشاره کنید. مثلاً بگویید: «یادتان هست در تراکنش شماره X، علی ۵ بیتکوین به من داد؟ من میخواهم آن ۵ تا را خرج کنم.»
کلید بازکننده (Unlocking Script): حالا باید ثابت کنید که صاحب آن ۵ بیتکوین هستید. اینجا امضای دیجیتال خود را قرار میدهید تا قفل آن پول باز شود.
۲. خروجیها (Outputs): «صندوقهای قفلدار جدید بساز»
حالا که پولهای قدیمی (ورودیها) باز شدند، باید آنها را به مقصد جدید بفرستید. اما در بیتکوین شما پول را به "آدمها" نمیفرستید؛ شما پول را داخل یک صندوق شیشهای میگذارید و روی آن قفل میزنید.
هر خروجی شامل دو چیز است:
مبلغ (Amount): چقدر پول در این صندوق است؟ (مثلاً ۲ بیتکوین).
قفل (Locking Script): شرط باز کردن صندوق چیست؟ معمولاً شرط این است: «فقط کسی که کلید خصوصیِ متناظر با این آدرس را دارد، میتواند این صندوق را باز کند.»
نکته مهم (بقیه پول): اگر شما یک ورودی ۵ بیتکوینی دارید و میخواهید ۲ بیتکوین به حمیدرضا بدهید، نمیتوانید ۵ را نصف کنید. شما کل ۵ تا را به تراکنش میآورید؛ ۲ تا را به یک خروجی برای حميدرضا میفرستید و ۳ تای باقیمانده را به یک خروجی جدید برای خودتان (به عنوان بقیه پول یا Change) میفرستید.
۳. کارمزد (Fee): انعام نامرئی
عجیب است که در ساختار تراکنش، هیچ فیلدی به نام "کارمزد" وجود ندارد!
کارمزد به صورت ضمنی محاسبه میشود:
Input - Output = Fee
یعنی اگر ۵ بیتکوین وارد کردید و مجموع خروجیها (پول حمیدرضا + بقیه پول خودتان) شد ۴.۹۹ بیتکوین، آن ۰.۰۱ باقیمانده اتوماتیک به ماینر میرسد.
۴. بخش شاهد (Witness): پیوست تراکنش (SegWit)
تا قبل از سال ۲۰۱۷، امضای دیجیتال (که حجم زیادی دارد) دقیقاً وسط تراکنش بود.
در آپدیت SegWit، توسعه دهندگان تصمیم گرفتند امضاها را از بدنه اصلی جدا کنند و به انتهای تراکنش سنجاق کنند (مثل فایل Attachment در ایمیل).
چرا؟ چون با این کار حجم اصلی تراکنش کم میشود و کارمزد کمتری میپردازید. به این دادههای امضا که جدا شدهاند، Witness Data میگویند.
پس یک تراکنش در واقع سندی است که میگوید: «من ثابت میکنم صاحب این پولهای قدیمی هستم (Input)، آنها را مصرف میکنم و پولهای جدیدی با قفلهای جدید میسازم (Output).»
حالا این برگههای تراکنش باید کجا بایگانی شوند؟ نمیتوان آنها را همینطور رها کرد. آنها باید دستهبندی، مُهر و موم و زنجیر شوند. در قسمت آخر این بخش، میبینیم که «بلاک» چگونه این تراکنشها را در خود جای میدهد.
This media is not supported in your browser
VIEW IN TELEGRAM
بخش ۱ | فهرست
۵. آناتومی بلاک: کانتینر ابدیت (Block Anatomy)
اگر تراکنشها را «مسافران» شبکه بدانیم، بلاک مثل یک «اتوبوس» است که آنها را سوار میکند و به مقصد (بلاکچین) میرساند.
از دید فنی، بلاک دو قسمت کاملاً مجزا دارد: سربرگ (Header) که کوچک است و بدنه (Body) که حجیم است.
هدر بلاک (Block Header): ۸۰ بایت سرنوشتساز
تمام جادوی ماینینگ و امنیت بیتکوین فقط در همین ۸۰ بایت اتفاق میافتد. وقتی ماینرها مشغول "کار" هستند، کاری به ۱ مگابایت تراکنش ندارند؛ آنها فقط همین هدر کوچک را هش میکنند.
این هدر شامل ۶ فیلد حیاتی است:
۱. نسخه (Version): قوانین نرمافزاری که ماینر با آن کار میکند.
۲. هش بلاک قبلی (Previous Block Hash): این همان «زنجیر» است! این فیلد، اثر انگشت بلاک قبل را در دل بلاک جدید حک میکند. اگر حتی یک بایت از بلاک ۱۰ سال پیش عوض شود، هش آن عوض میشود، زنجیر پاره میشود و کل شبکه میفهمد.
۳. ریشه مرکل (Merkle Root): اثر انگشت نهایی تمام تراکنشهای داخل این بلاک (در ادامه توضیح میدهیم).
۴. زمان (Timestamp): زمان تولید بلاک به وقت یونیکس.
۵. هدف سختی (Bits/Target): عددی که میگوید "پیدا کردن هش برای این بلاک چقدر سخت است؟"
۶. نانس (Nonce): تنها عددی که ماینر اجازه دارد تغییر دهد تا برنده مسابقه شود.
۲. بدنه بلاک: لیست مسافران
در زیر هدر، لیست تمام تراکنشهایی که در این ۱۰ دقیقه تأیید شدهاند قرار دارد.
اما اولین تراکنش همیشه خاص است:
تراکنش کوینبیس (Coinbase Tx):
این تنها تراکنشی است که «ورودی» ندارد! پولی از ناکجاآباد (Input = Null) خلق میشود و به آدرس ماینر واریز میشود. این شامل پاداش شبکه (Subsidy) + مجموع کارمزد تراکنشهای آن بلاک است.
۳. درخت مرکل (Merkle Tree):
چطور میتوانیم مطمئن شویم یک تراکنش خاص در بلاک وجود دارد، بدون اینکه کل ۱ مگابایت بلاک را دانلود کنیم؟ (مشکل کیفپولهای موبایلی).
ساتوشی از ساختاری به نام درخت مرکل استفاده کرد.
روش کار: تراکنشها دو به دو با هم هش میشوند، نتیجهها دوباره دو به دو هش میشوند تا در نهایت فقط یک هش ۳۲ بایتی باقی بماند که به آن Merkle Root میگویند.
کاربرد: این ریشه در «هدر بلاک» قرار میگیرد. اگر حتی یک ویرگول در یکی از ۳۰۰۰ تراکنش پایین تغییر کند، ریشهٔ بالای درخت کاملاً عوض میشود. این یعنی با داشتن فقط ۸۰ بایت (هدر)، میتوان صحت هزاران تراکنش را تضمین کرد.
پایان بخش ۱
ما اکنون زیرساخت بیتکوین را درک کردیم:
۱. دیدیم که بیتکوین یک پشته پروتکل ۴ لایه است.
۲. فهمیدیم قدرت دست نودها است، نه فقط ماینرها.
۳. یاد گرفتیم زبان نودها سریالسازی خاصی دارد.
۴. تراکنشها را به عنوان ذوب کردن طلا (Input/Output) شناختیم.
۵. و دیدیم که چطور در بلاکها بستهبندی و زنجیر میشوند.
اما یک سوال بزرگ باقی مانده:
«چطور مطمئن شویم کسی که تراکنش میسازد، واقعاً صاحب پول است؟»
«چطور آدرسها ساخته میشوند که تکراری نباشند؟»
پاسخ در رمزنگاری است.
در بخش دوم، وارد دنیای «رمزنگاری در بیتکوین» میشویم.
۵. آناتومی بلاک: کانتینر ابدیت (Block Anatomy)
اگر تراکنشها را «مسافران» شبکه بدانیم، بلاک مثل یک «اتوبوس» است که آنها را سوار میکند و به مقصد (بلاکچین) میرساند.
از دید فنی، بلاک دو قسمت کاملاً مجزا دارد: سربرگ (Header) که کوچک است و بدنه (Body) که حجیم است.
هدر بلاک (Block Header): ۸۰ بایت سرنوشتساز
تمام جادوی ماینینگ و امنیت بیتکوین فقط در همین ۸۰ بایت اتفاق میافتد. وقتی ماینرها مشغول "کار" هستند، کاری به ۱ مگابایت تراکنش ندارند؛ آنها فقط همین هدر کوچک را هش میکنند.
این هدر شامل ۶ فیلد حیاتی است:
۱. نسخه (Version): قوانین نرمافزاری که ماینر با آن کار میکند.
۲. هش بلاک قبلی (Previous Block Hash): این همان «زنجیر» است! این فیلد، اثر انگشت بلاک قبل را در دل بلاک جدید حک میکند. اگر حتی یک بایت از بلاک ۱۰ سال پیش عوض شود، هش آن عوض میشود، زنجیر پاره میشود و کل شبکه میفهمد.
۳. ریشه مرکل (Merkle Root): اثر انگشت نهایی تمام تراکنشهای داخل این بلاک (در ادامه توضیح میدهیم).
۴. زمان (Timestamp): زمان تولید بلاک به وقت یونیکس.
۵. هدف سختی (Bits/Target): عددی که میگوید "پیدا کردن هش برای این بلاک چقدر سخت است؟"
۶. نانس (Nonce): تنها عددی که ماینر اجازه دارد تغییر دهد تا برنده مسابقه شود.
۲. بدنه بلاک: لیست مسافران
در زیر هدر، لیست تمام تراکنشهایی که در این ۱۰ دقیقه تأیید شدهاند قرار دارد.
اما اولین تراکنش همیشه خاص است:
تراکنش کوینبیس (Coinbase Tx):
این تنها تراکنشی است که «ورودی» ندارد! پولی از ناکجاآباد (Input = Null) خلق میشود و به آدرس ماینر واریز میشود. این شامل پاداش شبکه (Subsidy) + مجموع کارمزد تراکنشهای آن بلاک است.
۳. درخت مرکل (Merkle Tree):
چطور میتوانیم مطمئن شویم یک تراکنش خاص در بلاک وجود دارد، بدون اینکه کل ۱ مگابایت بلاک را دانلود کنیم؟ (مشکل کیفپولهای موبایلی).
ساتوشی از ساختاری به نام درخت مرکل استفاده کرد.
روش کار: تراکنشها دو به دو با هم هش میشوند، نتیجهها دوباره دو به دو هش میشوند تا در نهایت فقط یک هش ۳۲ بایتی باقی بماند که به آن Merkle Root میگویند.
کاربرد: این ریشه در «هدر بلاک» قرار میگیرد. اگر حتی یک ویرگول در یکی از ۳۰۰۰ تراکنش پایین تغییر کند، ریشهٔ بالای درخت کاملاً عوض میشود. این یعنی با داشتن فقط ۸۰ بایت (هدر)، میتوان صحت هزاران تراکنش را تضمین کرد.
پایان بخش ۱
ما اکنون زیرساخت بیتکوین را درک کردیم:
۱. دیدیم که بیتکوین یک پشته پروتکل ۴ لایه است.
۲. فهمیدیم قدرت دست نودها است، نه فقط ماینرها.
۳. یاد گرفتیم زبان نودها سریالسازی خاصی دارد.
۴. تراکنشها را به عنوان ذوب کردن طلا (Input/Output) شناختیم.
۵. و دیدیم که چطور در بلاکها بستهبندی و زنجیر میشوند.
اما یک سوال بزرگ باقی مانده:
«چطور مطمئن شویم کسی که تراکنش میسازد، واقعاً صاحب پول است؟»
«چطور آدرسها ساخته میشوند که تکراری نباشند؟»
پاسخ در رمزنگاری است.
در بخش دوم، وارد دنیای «رمزنگاری در بیتکوین» میشویم.
انسانهای اولیه در گروههای کوچک زندگی میکردند.
اما وقتی توانستند روایتهای مشترک ایجاد کنند، سازمانهایی بسیار بزرگ شکل گرفت:
ملتها
ادیان
دولتها
بازارها
شرکتها
قوانین
پول
اینها همگی داستانهایی هستند که فقط در ذهن ما وجود دارند—اما زندگی واقعی ما را اداره میکنند.
مثلا
پول روی کاغذ چاپ میشود، اما ارزش آن کاملاً خیالی است.
حقوق بشر یک واقعیت فیزیکی نیست؛ مفهوم ذهنی است اما میلیونها انسان برایش میجنگند.
ملتها اساساً داستان جمعیاند؛ هیچ «خط مرزی طبیعی» وجود ندارد.
با این حال این داستانها رفتار میلیاردها انسان را شکل میدهند.
چگونه داستانها همکاری عظیم ایجاد کردند؟
برای مثال:
دین
به هزاران نفر میگوید که با هم احساس «خویشاوندی معنوی» کنند.
پول
به میلیونها نفر اجازه میدهد تبادل کنند بدون اینکه همدیگر را بشناسند.
دولت
به مردم امکان میدهد قوانین مشترک داشته باشند.
شرکتها
به غریبهها اجازه میدهد با اعتماد مشترک، تجارت کنند.
پس داستانها مهمترین ابزار تکامل فرهنگی انسان هستند.
داستانها چگونه تغییر میکنند؟
داستانها ثابت نمیمانند.
با تغییر شرایط اقتصادی، سیاسی و علمی:
داستانهای قدیمی از بین میروند
داستانهای جدید جایگزین میشوند
کمونیسم
ناسیونالیسم
سرمایهداری
داستانهای مصرفگرایی
داستانهای تکنولوژی و علم
بشر امروز بیشتر از هر زمان دیگر، به داستانهای جدیدی مثل دادهباوری (Dataism) ایمان میآورد.
خطر: وقتی داستانها انسانها را کنترل میکنند
داستانها مفیدند، اما میتوانند خطرناک شوند:
مردم برای یک «داستان» میمیرند
جنگها و نسلکشیها اغلب از داستانهای غلط شروع میشوند
انسان ممکن است فکر کند «حقیقتِ داستان» مهمتر از انسانهاست
برای نمونه:
جنگ جهانی دوم، انقلابها، پاکسازیهای قومی، نسل کشی در غزه.
باید مراقب داستانهایی باشیم که میسازیم.
انسانها با توانایی روایتسازی، جهان را سازمان دادند.
بیشتر ساختارهای اجتماعی—از پول تا ملت—نتیجهٔ داستانهای مشترکند.
این داستانها قدرت جمعی حیرتانگیزی ایجاد میکنند.
اما میتوانند موجب نابودی و رنج هم بشوند.
قرن ۲۱ شاهد ظهور داستانهای جدید مانند دادهباوری خواهد بود.
سؤال اینجاست:
ما امروز اسیر کدام داستانها هستیم—و کدامشان ارزش باور دارند؟
شاید مهمترین مهارت قرن ۲۱، تشخیص «داستانهای خطرناک» از «داستانهای نجاتبخش» باشد.
اندکی تفکر.
اما وقتی توانستند روایتهای مشترک ایجاد کنند، سازمانهایی بسیار بزرگ شکل گرفت:
ملتها
ادیان
دولتها
بازارها
شرکتها
قوانین
پول
اینها همگی داستانهایی هستند که فقط در ذهن ما وجود دارند—اما زندگی واقعی ما را اداره میکنند.
مثلا
پول روی کاغذ چاپ میشود، اما ارزش آن کاملاً خیالی است.
حقوق بشر یک واقعیت فیزیکی نیست؛ مفهوم ذهنی است اما میلیونها انسان برایش میجنگند.
ملتها اساساً داستان جمعیاند؛ هیچ «خط مرزی طبیعی» وجود ندارد.
با این حال این داستانها رفتار میلیاردها انسان را شکل میدهند.
چگونه داستانها همکاری عظیم ایجاد کردند؟
برای مثال:
دین
به هزاران نفر میگوید که با هم احساس «خویشاوندی معنوی» کنند.
پول
به میلیونها نفر اجازه میدهد تبادل کنند بدون اینکه همدیگر را بشناسند.
دولت
به مردم امکان میدهد قوانین مشترک داشته باشند.
شرکتها
به غریبهها اجازه میدهد با اعتماد مشترک، تجارت کنند.
پس داستانها مهمترین ابزار تکامل فرهنگی انسان هستند.
داستانها چگونه تغییر میکنند؟
داستانها ثابت نمیمانند.
با تغییر شرایط اقتصادی، سیاسی و علمی:
داستانهای قدیمی از بین میروند
داستانهای جدید جایگزین میشوند
کمونیسم
ناسیونالیسم
سرمایهداری
داستانهای مصرفگرایی
داستانهای تکنولوژی و علم
بشر امروز بیشتر از هر زمان دیگر، به داستانهای جدیدی مثل دادهباوری (Dataism) ایمان میآورد.
خطر: وقتی داستانها انسانها را کنترل میکنند
داستانها مفیدند، اما میتوانند خطرناک شوند:
مردم برای یک «داستان» میمیرند
جنگها و نسلکشیها اغلب از داستانهای غلط شروع میشوند
انسان ممکن است فکر کند «حقیقتِ داستان» مهمتر از انسانهاست
برای نمونه:
جنگ جهانی دوم، انقلابها، پاکسازیهای قومی، نسل کشی در غزه.
باید مراقب داستانهایی باشیم که میسازیم.
انسانها با توانایی روایتسازی، جهان را سازمان دادند.
بیشتر ساختارهای اجتماعی—از پول تا ملت—نتیجهٔ داستانهای مشترکند.
این داستانها قدرت جمعی حیرتانگیزی ایجاد میکنند.
اما میتوانند موجب نابودی و رنج هم بشوند.
قرن ۲۱ شاهد ظهور داستانهای جدید مانند دادهباوری خواهد بود.
سؤال اینجاست:
ما امروز اسیر کدام داستانها هستیم—و کدامشان ارزش باور دارند؟
شاید مهمترین مهارت قرن ۲۱، تشخیص «داستانهای خطرناک» از «داستانهای نجاتبخش» باشد.
اندکی تفکر.
محل درآمد کسانی که ادعا می کنند از ترید پول درمیارند👇🏻
کمیسیون ریفرال صرافیها
پکیچ فروشی
پامپ و دامپ توکنهای با نقدینگی پایین و خالی کردنشون سر افراد ناآگاه
همکاری مستقیم & غیرمستقیم با صرافیها برای لیکویید کردن کاربران
شیلکردن پروژهها و توکنها در ازای پول
فروش سیگنال، چنل VIP و اشتراکهای ماهانه
فروش ربات، یا استراتژی ترید و این خزعبلات
و کلی شارلاتانبازی دیگه که اگه وقت باشه، میشه مفصل دربارهش صحبت کرد
در نتیجه، گول یه عده شیادهای ایرانی رو نخورید که با دریوزگی و حرومزادگی، مردم رو میکشن سمت ترید (قمار) و شبهعلمی به اسم تکنیکال.
بخش عمدهی سود پایدار در ترید توسط مؤسسات مالی (Market Makers، Hedge Funds و Proprietary Trading Firms) است که با سرمایهی بالا، دسترسی اطلاعاتی برتر، مدلهای کمی (Quantitative Models) و استراتژیهای مبتنی بر Big Data فعالیت میکنند.
در مقابل، افراد عادی که با شبهعلم تکنیکال چهارتا چارت قیمتی رو خطخطی میکنن و شکل الاغ و غورباقه میکشن، عملاً هیچ شانسی در برابر این بازیگرها ندارن و طبق آمار، ۹۹٪شون بدون استثنا تو ترید پولشون پودر میشه.
با دلار ۱۳۵ هزار تومنی که هر روز هم به لطف الیگارشها و ج.ا ملعون گرونتر میشه، پولتون رو سفت بچسبید و به دام این حرومزادهها نیفتید.
بهترین کاری که میتونید انجام بدید، سرمایهگذاری در داراییهای سخت (Hard Assets) هست.
(اون هم فقط در صورتی که نیازهای اولیه زندگیتون تأمین باشه)
برای بلندمدت:
۱. طلا — اگر ریسکپذیریتون پایینه
۲.بیتکوین — اگر جوونید و ریسکپذیریتون بالاست
اگر من بودم، بیتکوین رو انتخاب میکردم به دلایل زیاد.
کمیسیون ریفرال صرافیها
پکیچ فروشی
پامپ و دامپ توکنهای با نقدینگی پایین و خالی کردنشون سر افراد ناآگاه
همکاری مستقیم & غیرمستقیم با صرافیها برای لیکویید کردن کاربران
شیلکردن پروژهها و توکنها در ازای پول
فروش سیگنال، چنل VIP و اشتراکهای ماهانه
فروش ربات، یا استراتژی ترید و این خزعبلات
و کلی شارلاتانبازی دیگه که اگه وقت باشه، میشه مفصل دربارهش صحبت کرد
در نتیجه، گول یه عده شیادهای ایرانی رو نخورید که با دریوزگی و حرومزادگی، مردم رو میکشن سمت ترید (قمار) و شبهعلمی به اسم تکنیکال.
بخش عمدهی سود پایدار در ترید توسط مؤسسات مالی (Market Makers، Hedge Funds و Proprietary Trading Firms) است که با سرمایهی بالا، دسترسی اطلاعاتی برتر، مدلهای کمی (Quantitative Models) و استراتژیهای مبتنی بر Big Data فعالیت میکنند.
در مقابل، افراد عادی که با شبهعلم تکنیکال چهارتا چارت قیمتی رو خطخطی میکنن و شکل الاغ و غورباقه میکشن، عملاً هیچ شانسی در برابر این بازیگرها ندارن و طبق آمار، ۹۹٪شون بدون استثنا تو ترید پولشون پودر میشه.
با دلار ۱۳۵ هزار تومنی که هر روز هم به لطف الیگارشها و ج.ا ملعون گرونتر میشه، پولتون رو سفت بچسبید و به دام این حرومزادهها نیفتید.
بهترین کاری که میتونید انجام بدید، سرمایهگذاری در داراییهای سخت (Hard Assets) هست.
(اون هم فقط در صورتی که نیازهای اولیه زندگیتون تأمین باشه)
برای بلندمدت:
۱. طلا — اگر ریسکپذیریتون پایینه
۲.بیتکوین — اگر جوونید و ریسکپذیریتون بالاست
اگر من بودم، بیتکوین رو انتخاب میکردم به دلایل زیاد.
سیاست زمانی قابلفهمتر میشود که بفهمیم بسیاری از مسائل سیاسی در نهایت به تقابل منافع ثروتمندان و فقرا بازمیگردد…
…و این منافع اغلب در یک تعارض صفرجمع قرار دارند.
«همهٔ ما در این مسیر با هم هستیم!» یک دروغ است.
«این اقلیتاند، نه اکثریت، که سرنوشت امور جهان را رقم میزنند…
…و منافع این اقلیت تقریباً همیشه با منافع اکثریت متفاوت است.»
— فرانچسکو گوئیچاردینی
…و این منافع اغلب در یک تعارض صفرجمع قرار دارند.
«همهٔ ما در این مسیر با هم هستیم!» یک دروغ است.
«این اقلیتاند، نه اکثریت، که سرنوشت امور جهان را رقم میزنند…
…و منافع این اقلیت تقریباً همیشه با منافع اکثریت متفاوت است.»
— فرانچسکو گوئیچاردینی
بخش ۲ | فهرست
۱. توابع هش: چسب نگهدارندهٔ بلاکچین (Hash Functions)
اگر بلاکچین را یک ساختمان فرض کنیم، توابع هش ملاتی هستند که آجرها را به هم میچسبانند. بدون هش، هیچ راهی برای اثبات اینکه دادهها تغییر نکردهاند وجود نداشت. در بیتکوین، همه چیز (از آدرسها تا امنیت شبکه) به الگوریتم SHA-256 وابسته است.
۲. چرا SHA-256؟ (یک استاندارد نظامی)
این الگوریتم توسط سازمان امنیت ملی آمریکا (NSA) طراحی و سپس بهصورت عمومی و متنباز بهعنوان یک استاندارد رمزنگاری منتشر شد.
عدد ۲۵۶ نشاندهنده طول خروجی بر حسب «بیت» است. یعنی هر ورودی که به آن بدهید، در نهایت به یک رشته ۲۵۶ بیتی تبدیل میشود.
ما به این خروجی Digest یا «خلاصه» میگوییم.
۳. ویژگی «بهمنی» (The Avalanche Effect)
این ویژگی تضمینکننده امنیت بیتکوین است. بیایید در عمل ببینیم:
ورودی ۱:
خروجی ۱:
حالا فقط حرف اول را کوچک میکنیم:
ورودی ۲:
خروجی ۲:
کاملاً متفاوت!
نکته فنی:
کوچکترین تغییر در تراکنش شما (حتی جابهجایی یک سنت)، باعث میشود هشِ کل بلاک بهطور کامل تغییر کند.
چون هر بلاک هشِ بلاک قبلی را در خود دارد، این تغییر مثل یک موج تا آخرین بلاکِ شبکه پیش میرود و همه نودها متوجه تقلب میشوند.
۴. جادوی Double SHA-256 (SHA256d)
چرا دو بار؟
در زمان طراحی بیتکوین، نگرانیهایی درباره نوعی حمله به نام Length Extension Attack وجود داشت. هش کردنِ دوباره، یک لایه محافظتی اضافی در برابر این دسته از حملات احتمالی ایجاد میکرد.
نکته: خود SHA-256 شکسته نیست؛ Double SHA-256 صرفاً یک تصمیم محافظهکارانه در طراحی اولیه بیتکوین بود.
۵. نقش هش در «سختی شبکه»
ماینینگ چیزی نیست جز یک مسابقه هش کردن.
شبکه به ماینرها میگوید:
«باید هشی از بلاک پیدا کنید که با مثلاً ۲۰ عدد صفر شروع شود.»
از آنجایی که خروجی هش کاملاً تصادفی است، تنها راه برای پیدا کردن چنین هشی، امتحان کردنِ تریلیونها عدد مختلف (Nonce) در هر ثانیه است.
اینجاست که هش، مفهوم انرژی فیزیکی را به امنیت دیجیتال گره میزند.
-----------
توابع هش به ما یکپارچگی (Integrity) میدهند؛ یعنی مطمئن میشویم داده دستنخورده است.
اما هش بهتنهایی نمیتواند ثابت کند که چه کسی اجازه خرج کردن پول را دارد.
برای حل مشکل «هویت» و «مالکیت»، نیاز به ابزار قدرتمندتری داریم: رمزنگاری کلید عمومی.
در قسمت بعد میبینیم که چطور با استفاده از ساختار منحنیهای بیضوی، امضایی میسازیم که جعل آن عملاً غیرممکن است.
۱. توابع هش: چسب نگهدارندهٔ بلاکچین (Hash Functions)
اگر بلاکچین را یک ساختمان فرض کنیم، توابع هش ملاتی هستند که آجرها را به هم میچسبانند. بدون هش، هیچ راهی برای اثبات اینکه دادهها تغییر نکردهاند وجود نداشت. در بیتکوین، همه چیز (از آدرسها تا امنیت شبکه) به الگوریتم SHA-256 وابسته است.
۲. چرا SHA-256؟ (یک استاندارد نظامی)
این الگوریتم توسط سازمان امنیت ملی آمریکا (NSA) طراحی و سپس بهصورت عمومی و متنباز بهعنوان یک استاندارد رمزنگاری منتشر شد.
عدد ۲۵۶ نشاندهنده طول خروجی بر حسب «بیت» است. یعنی هر ورودی که به آن بدهید، در نهایت به یک رشته ۲۵۶ بیتی تبدیل میشود.
ما به این خروجی Digest یا «خلاصه» میگوییم.
۳. ویژگی «بهمنی» (The Avalanche Effect)
این ویژگی تضمینکننده امنیت بیتکوین است. بیایید در عمل ببینیم:
ورودی ۱:
Bitcoin
خروجی ۱:
6b8810274447abb7930b13e1f010ec4d4911e4566c5122a000fd0292730f3080
حالا فقط حرف اول را کوچک میکنیم:
ورودی ۲:
bitcoin
خروجی ۲:
e3e4f9c1b7a2c0c8f8d6c3e9a1b0d7c4e6f8a9c0b1d2e3f4a5b6c7d8e9f0
کاملاً متفاوت!
نکته فنی:
کوچکترین تغییر در تراکنش شما (حتی جابهجایی یک سنت)، باعث میشود هشِ کل بلاک بهطور کامل تغییر کند.
چون هر بلاک هشِ بلاک قبلی را در خود دارد، این تغییر مثل یک موج تا آخرین بلاکِ شبکه پیش میرود و همه نودها متوجه تقلب میشوند.
۴. جادوی Double SHA-256 (SHA256d)
SHA256d(data) = SHA256(SHA256(data))
چرا دو بار؟
در زمان طراحی بیتکوین، نگرانیهایی درباره نوعی حمله به نام Length Extension Attack وجود داشت. هش کردنِ دوباره، یک لایه محافظتی اضافی در برابر این دسته از حملات احتمالی ایجاد میکرد.
نکته: خود SHA-256 شکسته نیست؛ Double SHA-256 صرفاً یک تصمیم محافظهکارانه در طراحی اولیه بیتکوین بود.
۵. نقش هش در «سختی شبکه»
ماینینگ چیزی نیست جز یک مسابقه هش کردن.
شبکه به ماینرها میگوید:
«باید هشی از بلاک پیدا کنید که با مثلاً ۲۰ عدد صفر شروع شود.»
از آنجایی که خروجی هش کاملاً تصادفی است، تنها راه برای پیدا کردن چنین هشی، امتحان کردنِ تریلیونها عدد مختلف (Nonce) در هر ثانیه است.
اینجاست که هش، مفهوم انرژی فیزیکی را به امنیت دیجیتال گره میزند.
-----------
توابع هش به ما یکپارچگی (Integrity) میدهند؛ یعنی مطمئن میشویم داده دستنخورده است.
اما هش بهتنهایی نمیتواند ثابت کند که چه کسی اجازه خرج کردن پول را دارد.
برای حل مشکل «هویت» و «مالکیت»، نیاز به ابزار قدرتمندتری داریم: رمزنگاری کلید عمومی.
در قسمت بعد میبینیم که چطور با استفاده از ساختار منحنیهای بیضوی، امضایی میسازیم که جعل آن عملاً غیرممکن است.
This media is not supported in your browser
VIEW IN TELEGRAM
بخش ۲ | فهرست
۲. کلیدهای خصوصی، عمومی و نقشه راه تولید آدرس (Keys & Address Generation)
اگر توابع هش «نگهبان» سلامت دادهها بودند، سیستم کلیدها «صاحبخانه» را مشخص میکنند. در بیتکوین، مالکیت با هویت فردی (اسم یا کد ملی) تعریف نمیشود، بلکه با دانستن یک عدد تعریف میشود.
۱. کلید خصوصی (Private Key): ریشهٔ قدرت
همه چیز با یک کلید خصوصی شروع میشود. از نظر فنی، کلید خصوصی فقط یک عدد ۲۵۶ بیتی است.
تولید و آنتروپی: این عدد باید کاملاً تصادفی باشد. تعداد حالتهای ممکن برای یک کلید خصوصی 2^{256} است. این حجم از فضا چنان بزرگ است که حتی اگر تمام کامپیوترهای جهان از ابتدای خلقت تا امروز شروع به جستجوی کلید شما میکردند، احتمال پیدا کردن آن نزدیک به صفر بود.
قانون مالکیت: در پروتکل بیتکوین، هیچ راهی برای بازیابی کلید خصوصی وجود ندارد. هر کسی این عدد را داشته باشد، صاحبِ بیتکوینهاست.
۲. کلید عمومی (Public Key): عبور از مسیر یکطرفه
برای اینکه دیگران بتوانند برای شما پول بفرستند، باید نسخهای از کلید خود را عمومی کنید. اینجاست که از استانداردی به نام ECDSA (با منحنی اختصاصی secp256k1) استفاده میشود.
رابطه یکطرفه: این فرآیند یکطرفه است. یعنی داشتن کلید عمومی به هیچ وجه اجازه نمیدهد کسی کلید خصوصی شما را مهندسی معکوس کند.
فشردهسازی: امروزه برای صرفهجویی در فضای بلاکچین، کلیدهای عمومی بهصورت «فشرده» (Compressed) ذخیره میشوند که حجم آنها را به ۳۳ بایت کاهش میدهد.
۳. تولید آدرس: چرا مستقیم از کلید عمومی استفاده نمیکنیم؟
شاید بپرسید چرا همان کلید عمومی را به عنوان آدرس استفاده نمیکنیم؟ بیتکوین به دو دلیل آدرس را طی یک فرآیند پیچیدهتر میسازند: امنیت لایهبندی شده و کاهش حجم داده.
مراحل تبدیل کلید عمومی به آدرس (نسل قدیمی یا Legacy):
هش اول: کلید عمومی وارد تابع SHA-256 میشود.
هش دوم: خروجی مرحله قبل وارد تابع RIPEMD-160 میشود. حاصل این مرحله یک رشته ۲۰ بایتی است که به آن HASH160 میگویند.
مزیت: آدرس کوتاهتر میشود و در برابر حملاتی که ممکن است در آینده علیه منحنیهای هوشمند کشف شود، یک لایه حفاظتیِ اضافه ایجاد میکند.
۴. کدگذاری Base58Check: جلوگیری از خطای انسانی
رشتهای که در مرحله قبل به دست میآید، برای انسان خوانا نیست. برای تبدیل آن به آدرس نهایی که با عدد 1 شروع میشود، از استاندارد Base58 استفاده میشود.
حذف کاراکترهای گیجکننده: در این استاندارد، حروف و اعدادی که شبیه هم هستند حذف شدهاند (مانند 0 و O یا I و l).
Checksum (بررسی خطا) : قبل از نهایی شدن آدرس، یک کد ۴ بایتی به انتهای آن اضافه میشود. اگر شما هنگام تایپ آدرس حتی یک حرف را اشتباه بنویسید، کیفپول با چک کردن این کد متوجه میشود که آدرس نامعتبر است و اجازه ارسال پول را نمیدهد.
-----------
تا اینجا یاد گرفتیم که چطور از یک عدد مخفی، یک آدرس عمومی ساخته میشود. اما با تکامل بیتکوین، انواع جدیدی از آدرسها (مانند SegWit با شروع 3 یا Native SegWit با شروع bc1) معرفی شدند که هر کدام ویژگیهای فنی و مزایای خاص خود را در کاهش کارمزد دارند.
در مبحث بعدی، به بررسی انواع آدرسهای بیتکوین (Address Types) میپردازیم.
۲. کلیدهای خصوصی، عمومی و نقشه راه تولید آدرس (Keys & Address Generation)
اگر توابع هش «نگهبان» سلامت دادهها بودند، سیستم کلیدها «صاحبخانه» را مشخص میکنند. در بیتکوین، مالکیت با هویت فردی (اسم یا کد ملی) تعریف نمیشود، بلکه با دانستن یک عدد تعریف میشود.
۱. کلید خصوصی (Private Key): ریشهٔ قدرت
همه چیز با یک کلید خصوصی شروع میشود. از نظر فنی، کلید خصوصی فقط یک عدد ۲۵۶ بیتی است.
تولید و آنتروپی: این عدد باید کاملاً تصادفی باشد. تعداد حالتهای ممکن برای یک کلید خصوصی 2^{256} است. این حجم از فضا چنان بزرگ است که حتی اگر تمام کامپیوترهای جهان از ابتدای خلقت تا امروز شروع به جستجوی کلید شما میکردند، احتمال پیدا کردن آن نزدیک به صفر بود.
قانون مالکیت: در پروتکل بیتکوین، هیچ راهی برای بازیابی کلید خصوصی وجود ندارد. هر کسی این عدد را داشته باشد، صاحبِ بیتکوینهاست.
۲. کلید عمومی (Public Key): عبور از مسیر یکطرفه
برای اینکه دیگران بتوانند برای شما پول بفرستند، باید نسخهای از کلید خود را عمومی کنید. اینجاست که از استانداردی به نام ECDSA (با منحنی اختصاصی secp256k1) استفاده میشود.
رابطه یکطرفه: این فرآیند یکطرفه است. یعنی داشتن کلید عمومی به هیچ وجه اجازه نمیدهد کسی کلید خصوصی شما را مهندسی معکوس کند.
فشردهسازی: امروزه برای صرفهجویی در فضای بلاکچین، کلیدهای عمومی بهصورت «فشرده» (Compressed) ذخیره میشوند که حجم آنها را به ۳۳ بایت کاهش میدهد.
۳. تولید آدرس: چرا مستقیم از کلید عمومی استفاده نمیکنیم؟
شاید بپرسید چرا همان کلید عمومی را به عنوان آدرس استفاده نمیکنیم؟ بیتکوین به دو دلیل آدرس را طی یک فرآیند پیچیدهتر میسازند: امنیت لایهبندی شده و کاهش حجم داده.
مراحل تبدیل کلید عمومی به آدرس (نسل قدیمی یا Legacy):
هش اول: کلید عمومی وارد تابع SHA-256 میشود.
هش دوم: خروجی مرحله قبل وارد تابع RIPEMD-160 میشود. حاصل این مرحله یک رشته ۲۰ بایتی است که به آن HASH160 میگویند.
مزیت: آدرس کوتاهتر میشود و در برابر حملاتی که ممکن است در آینده علیه منحنیهای هوشمند کشف شود، یک لایه حفاظتیِ اضافه ایجاد میکند.
۴. کدگذاری Base58Check: جلوگیری از خطای انسانی
رشتهای که در مرحله قبل به دست میآید، برای انسان خوانا نیست. برای تبدیل آن به آدرس نهایی که با عدد 1 شروع میشود، از استاندارد Base58 استفاده میشود.
حذف کاراکترهای گیجکننده: در این استاندارد، حروف و اعدادی که شبیه هم هستند حذف شدهاند (مانند 0 و O یا I و l).
Checksum (بررسی خطا) : قبل از نهایی شدن آدرس، یک کد ۴ بایتی به انتهای آن اضافه میشود. اگر شما هنگام تایپ آدرس حتی یک حرف را اشتباه بنویسید، کیفپول با چک کردن این کد متوجه میشود که آدرس نامعتبر است و اجازه ارسال پول را نمیدهد.
-----------
تا اینجا یاد گرفتیم که چطور از یک عدد مخفی، یک آدرس عمومی ساخته میشود. اما با تکامل بیتکوین، انواع جدیدی از آدرسها (مانند SegWit با شروع 3 یا Native SegWit با شروع bc1) معرفی شدند که هر کدام ویژگیهای فنی و مزایای خاص خود را در کاهش کارمزد دارند.
در مبحث بعدی، به بررسی انواع آدرسهای بیتکوین (Address Types) میپردازیم.
بخش ۲ | فهرست
۳. انواع آدرسهای بیتکوین: از لایهی نمایش تا اسکریپتهای هوشمند
در بیتکوین، «آدرس» صرفاً یک کد برای شناسایی کاربر نیست؛ بلکه یک رابط کاربری (UI) برای دستورات برنامهنویسی است که در لایه اسکریپت اجرا میشوند. هر نوع آدرس به نودهای شبکه میگوید که پول با چه منطقی قفل شده و با چه هزینهای باید باز شود.
بیایید آنها را به ترتیب تاریخی بررسی کنیم.
۱. آدرسهای Legacy (P2PKH) — نسل اول
شکل ظاهری:
این آدرسها که با عدد 1 شروع میشوند، اولین و سادهترین روش آدرسدهی در بیتکوین هستند.
فرآیند: در این مدل، آدرس حاصل دو مرحله هشِ متوالی (SHA256 و سپس RIPEMD160) روی کلید عمومی است که با کدگذاری Base58Check به فرمت متنی تبدیل شده است.
چالش فنی: بزرگترین مشکل این آدرسها این است که تمام دادههای امضا (Signature) و کلید عمومی باید در بدنه اصلی تراکنش ذخیره شوند. از آنجا که حجم بلاک محدود است، این تراکنشها فضای زیادی اشغال کرده و منجر به افزایش شدید کارمزد میشوند.
۲. آدرسهای Nested SegWit (نسل P2SH) — یک قدم به سمت انعطافپذیری
شکل ظاهری:
این آدرسها با عدد 3 شروع میشوند و یک راهکار میانبر برای ارتقای شبکه بودند.
منطق «پاکتنامه»: برای اینکه کیفپولهای قدیمی بتوانند با قوانین جدید (SegWit) کار کنند، آدرسهای جدید را درون یک قالب قدیمی به نام P2SH بستهبندی کردند.
ویژگی فنی: این آدرسها اجازه میدهند به جای قفل کردن پول به یک شخص، آن را به یک «اسکریپت» (Script) قفل کنید. این موضوع راه را برای تراکنشهای چندامضایی (Multi-sig) هموار کرد، جایی که برای خرج کردن پول، تأیید مثلاً ۲ نفر از ۳ نفر لازم است.
۳. آدرسهای Native SegWit (استاندارد Bech32)
این آدرسها با
شروع میشوند و بهینهترین حالت برای استفادههای روزمره هستند.
بایتها: در این نسل، دادههای امضا از بدنه اصلی تراکنش جدا شده و به بخش Witness منتقل میشوند. طبق قوانین شبکه، بایتهای بخش Witness با تخفیف ۷۵ درصدی در محاسبه وزن بلاک (Block Weight) روبرو میشوند؛ به همین دلیل کارمزد این تراکنشها بسیار کمتر است.
استاندارد Bech32: این آدرسها برخلاف نسلهای قبل، Case-insensitive (حساس نبودن به حروف کوچک و بزرگ) هستند و از الگوریتم تشخیص خطای BCH استفاده میکنند که احتمال ارسال پول به آدرس اشتباه را به صفر نزدیک میکند.
۴. آدرسهای Taproot (نسل Bech32m)
جدیدترین استاندارد بیتکوین که با
شروع میشود و در اواخر سال ۲۰۲۱ فعال شد.
امضاهای Schnorr: در لایه زیرین این آدرسها، به جای الگوریتم ECDSA از امضاهای Schnorr استفاده شده است. این فناوری اجازه میدهد تا چندین امضا در یک امضای واحد ادغام شوند.
حریم خصوصی در سطح اسکریپت: با Taproot، یک تراکنش پیچیده (مثلاً قرارداد هوشمندی که چندین شرط برای خرج کردن دارد) از بیرون دقیقاً شبیه به یک تراکنش ساده تکامضایی دیده میشود. این یعنی تحلیلگران بلاکچین دیگر نمیتوانند از روی ظاهر آدرس، نوع قرارداد شما را تشخیص دهند.
-----------
ما اکنون میدانیم که آدرسها چگونه ساخته میشوند و چه تفاوتهای ساختاری دارند. اما یک قطعه حیاتی در پازل امنیت باقی مانده است: امضای دیجیتال.
چگونه میتوان بدون فاش کردن کلید خصوصی، به کل شبکه ثابت کرد که ما صاحب واقعی آدرسی هستیم که پول در آن قفل شده است؟
در مبحث بعدی، به سراغ امنیت تراکنشها یعنی الگوریتم امضای ECDSA میرویم تا ببینیم این امضاها چطور ساخته و در شبکه تأیید میشوند.
۳. انواع آدرسهای بیتکوین: از لایهی نمایش تا اسکریپتهای هوشمند
در بیتکوین، «آدرس» صرفاً یک کد برای شناسایی کاربر نیست؛ بلکه یک رابط کاربری (UI) برای دستورات برنامهنویسی است که در لایه اسکریپت اجرا میشوند. هر نوع آدرس به نودهای شبکه میگوید که پول با چه منطقی قفل شده و با چه هزینهای باید باز شود.
بیایید آنها را به ترتیب تاریخی بررسی کنیم.
۱. آدرسهای Legacy (P2PKH) — نسل اول
شکل ظاهری:
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
این آدرسها که با عدد 1 شروع میشوند، اولین و سادهترین روش آدرسدهی در بیتکوین هستند.
فرآیند: در این مدل، آدرس حاصل دو مرحله هشِ متوالی (SHA256 و سپس RIPEMD160) روی کلید عمومی است که با کدگذاری Base58Check به فرمت متنی تبدیل شده است.
چالش فنی: بزرگترین مشکل این آدرسها این است که تمام دادههای امضا (Signature) و کلید عمومی باید در بدنه اصلی تراکنش ذخیره شوند. از آنجا که حجم بلاک محدود است، این تراکنشها فضای زیادی اشغال کرده و منجر به افزایش شدید کارمزد میشوند.
۲. آدرسهای Nested SegWit (نسل P2SH) — یک قدم به سمت انعطافپذیری
شکل ظاهری:
3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy
این آدرسها با عدد 3 شروع میشوند و یک راهکار میانبر برای ارتقای شبکه بودند.
منطق «پاکتنامه»: برای اینکه کیفپولهای قدیمی بتوانند با قوانین جدید (SegWit) کار کنند، آدرسهای جدید را درون یک قالب قدیمی به نام P2SH بستهبندی کردند.
ویژگی فنی: این آدرسها اجازه میدهند به جای قفل کردن پول به یک شخص، آن را به یک «اسکریپت» (Script) قفل کنید. این موضوع راه را برای تراکنشهای چندامضایی (Multi-sig) هموار کرد، جایی که برای خرج کردن پول، تأیید مثلاً ۲ نفر از ۳ نفر لازم است.
۳. آدرسهای Native SegWit (استاندارد Bech32)
این آدرسها با
bc1q
شروع میشوند و بهینهترین حالت برای استفادههای روزمره هستند.
بایتها: در این نسل، دادههای امضا از بدنه اصلی تراکنش جدا شده و به بخش Witness منتقل میشوند. طبق قوانین شبکه، بایتهای بخش Witness با تخفیف ۷۵ درصدی در محاسبه وزن بلاک (Block Weight) روبرو میشوند؛ به همین دلیل کارمزد این تراکنشها بسیار کمتر است.
استاندارد Bech32: این آدرسها برخلاف نسلهای قبل، Case-insensitive (حساس نبودن به حروف کوچک و بزرگ) هستند و از الگوریتم تشخیص خطای BCH استفاده میکنند که احتمال ارسال پول به آدرس اشتباه را به صفر نزدیک میکند.
۴. آدرسهای Taproot (نسل Bech32m)
جدیدترین استاندارد بیتکوین که با
bc1p
شروع میشود و در اواخر سال ۲۰۲۱ فعال شد.
امضاهای Schnorr: در لایه زیرین این آدرسها، به جای الگوریتم ECDSA از امضاهای Schnorr استفاده شده است. این فناوری اجازه میدهد تا چندین امضا در یک امضای واحد ادغام شوند.
حریم خصوصی در سطح اسکریپت: با Taproot، یک تراکنش پیچیده (مثلاً قرارداد هوشمندی که چندین شرط برای خرج کردن دارد) از بیرون دقیقاً شبیه به یک تراکنش ساده تکامضایی دیده میشود. این یعنی تحلیلگران بلاکچین دیگر نمیتوانند از روی ظاهر آدرس، نوع قرارداد شما را تشخیص دهند.
-----------
ما اکنون میدانیم که آدرسها چگونه ساخته میشوند و چه تفاوتهای ساختاری دارند. اما یک قطعه حیاتی در پازل امنیت باقی مانده است: امضای دیجیتال.
چگونه میتوان بدون فاش کردن کلید خصوصی، به کل شبکه ثابت کرد که ما صاحب واقعی آدرسی هستیم که پول در آن قفل شده است؟
در مبحث بعدی، به سراغ امنیت تراکنشها یعنی الگوریتم امضای ECDSA میرویم تا ببینیم این امضاها چطور ساخته و در شبکه تأیید میشوند.
بخش ۲ | فهرست
۴. امضاهای دیجیتال (ECDSA): برگه عبور تراکنشها
در سیستمهای سنتی، شما با «امضای دستی» پای یک برگه کاغذ، اجازه جابهجایی پول را میدهید. در بیتکوین، این کار توسط الگوریتم ECDSA (الگوریتم امضای دیجیتال منحنی بیضوی) انجام میشود. این امضا ثابت میکند که شما صاحب کلید خصوصی هستید، بدون اینکه آن کلید را به کسی نشان دهید.
۱. اجزای تشکیلدهنده امضا
یک امضای دیجیتال در بیتکوین از دو عدد بزرگ به نامهای r و s تشکیل شده است. برای تولید این دو عدد، سه ورودی اصلی لازم است:
هشِ تراکنش (m): خلاصهای از دادههای تراکنش (مقصد، مقدار و...).
کلید خصوصی (d): رازی که فقط فرستنده دارد.
عدد تصادفی (Nonce - k): یک عدد موقت که فقط برای یکبار امضا استفاده میشود.
۲. فرآیند تولید امضا (Signing)
وقتی میخواهید بیتکوین خرج کنید، کیفپول شما مراحل زیر را در لایه کد طی میکند:
ابتدا دادههای تراکنش را هش میکند تا یک اثر انگشت منحصربهفرد (m) به دست آید.
سپس با استفاده از کلید خصوصی و آن عدد تصادفی (k)، محاسباتی روی منحنی انجام میدهد تا جفتعدد (r, s) تولید شود.
این جفتعدد (امضا) به انتهای تراکنش پیوست میشود.
(خطر Nonce): اگر یک کیفپول ضعیف، از یک عدد تصادفی (k) تکراری برای دو امضای مختلف استفاده کند، هر کسی در شبکه میتواند با یک محاسبه ساده، کلید خصوصی آن کاربر را استخراج کند! این یکی از حساسترین بخشهای پیادهسازی نرمافزارهای کیفپول است.
۳. فرآیند تأیید (Verification): جادوی بدون بازگشت
نودهای شبکه وقتی تراکنش شما را دریافت میکنند، کلید خصوصی شما را ندارند، اما میتوانند امضا را تأیید کنند. آنها ورودیهای زیر را با هم ترکیب میکنند:
امضا (r, s)
کلید عمومی شما
هشِ تراکنش (m)
اگر اینها با هم مطابقت داشته باشند، خروجی یک «تأییدیه» است که نشان میدهد: «بله، این امضا حتماً توسط صاحب کلید خصوصیِ متناظر با این کلید عمومی ساخته شده است.»
۴. ویژگیهای امنیتی امضا در بیتکوین
تغییرناپذیری:
اگر کسی حتی یک رقم از مقدار تراکنش را بعد از امضا تغییر دهد، هش تراکنش (m) عوض میشود و امضا بلافاصله نامعتبر میگردد.
غیرقابل جعل: بدون داشتن کلید خصوصی، احتمال حدس زدن امضای درست صفر است.
یکبار مصرف بودن: هر امضا فقط برای همان تراکنش خاص معتبر است و نمیتوان آن را در جای دیگری کپی کرد.
-----------
اکنون تصویر کاملتری از زیرساخت رمزنگاری بیتکوین داریم:
هشها برای تضمین یکپارچگی داده،
کلیدها برای تعریف مالکیت، آدرسها بهعنوان نمایش عملی این مالکیت، و امضاهای دیجیتال برای صدور مجوز خرج کردن.
اما شبکه چگونه مجموعهای بزرگ از تراکنشها را در قالب یک خلاصهٔ رمزنگاریشده و قابلاعتماد در بلاک جای میدهد؟
این وظیفه بر عهدهٔ درخت مرکل است، ساختاری که سازماندهی داده در بیتکوین محسوب میشود، در مبحث آخر این بخش بهش می پردازیم.
۴. امضاهای دیجیتال (ECDSA): برگه عبور تراکنشها
در سیستمهای سنتی، شما با «امضای دستی» پای یک برگه کاغذ، اجازه جابهجایی پول را میدهید. در بیتکوین، این کار توسط الگوریتم ECDSA (الگوریتم امضای دیجیتال منحنی بیضوی) انجام میشود. این امضا ثابت میکند که شما صاحب کلید خصوصی هستید، بدون اینکه آن کلید را به کسی نشان دهید.
۱. اجزای تشکیلدهنده امضا
یک امضای دیجیتال در بیتکوین از دو عدد بزرگ به نامهای r و s تشکیل شده است. برای تولید این دو عدد، سه ورودی اصلی لازم است:
هشِ تراکنش (m): خلاصهای از دادههای تراکنش (مقصد، مقدار و...).
کلید خصوصی (d): رازی که فقط فرستنده دارد.
عدد تصادفی (Nonce - k): یک عدد موقت که فقط برای یکبار امضا استفاده میشود.
۲. فرآیند تولید امضا (Signing)
وقتی میخواهید بیتکوین خرج کنید، کیفپول شما مراحل زیر را در لایه کد طی میکند:
ابتدا دادههای تراکنش را هش میکند تا یک اثر انگشت منحصربهفرد (m) به دست آید.
سپس با استفاده از کلید خصوصی و آن عدد تصادفی (k)، محاسباتی روی منحنی انجام میدهد تا جفتعدد (r, s) تولید شود.
این جفتعدد (امضا) به انتهای تراکنش پیوست میشود.
(خطر Nonce): اگر یک کیفپول ضعیف، از یک عدد تصادفی (k) تکراری برای دو امضای مختلف استفاده کند، هر کسی در شبکه میتواند با یک محاسبه ساده، کلید خصوصی آن کاربر را استخراج کند! این یکی از حساسترین بخشهای پیادهسازی نرمافزارهای کیفپول است.
۳. فرآیند تأیید (Verification): جادوی بدون بازگشت
نودهای شبکه وقتی تراکنش شما را دریافت میکنند، کلید خصوصی شما را ندارند، اما میتوانند امضا را تأیید کنند. آنها ورودیهای زیر را با هم ترکیب میکنند:
امضا (r, s)
کلید عمومی شما
هشِ تراکنش (m)
اگر اینها با هم مطابقت داشته باشند، خروجی یک «تأییدیه» است که نشان میدهد: «بله، این امضا حتماً توسط صاحب کلید خصوصیِ متناظر با این کلید عمومی ساخته شده است.»
۴. ویژگیهای امنیتی امضا در بیتکوین
تغییرناپذیری:
اگر کسی حتی یک رقم از مقدار تراکنش را بعد از امضا تغییر دهد، هش تراکنش (m) عوض میشود و امضا بلافاصله نامعتبر میگردد.
غیرقابل جعل: بدون داشتن کلید خصوصی، احتمال حدس زدن امضای درست صفر است.
یکبار مصرف بودن: هر امضا فقط برای همان تراکنش خاص معتبر است و نمیتوان آن را در جای دیگری کپی کرد.
-----------
اکنون تصویر کاملتری از زیرساخت رمزنگاری بیتکوین داریم:
هشها برای تضمین یکپارچگی داده،
کلیدها برای تعریف مالکیت، آدرسها بهعنوان نمایش عملی این مالکیت، و امضاهای دیجیتال برای صدور مجوز خرج کردن.
اما شبکه چگونه مجموعهای بزرگ از تراکنشها را در قالب یک خلاصهٔ رمزنگاریشده و قابلاعتماد در بلاک جای میدهد؟
این وظیفه بر عهدهٔ درخت مرکل است، ساختاری که سازماندهی داده در بیتکوین محسوب میشود، در مبحث آخر این بخش بهش می پردازیم.
This media is not supported in your browser
VIEW IN TELEGRAM
بخش ۲ | فهرست
۵. درخت مرکل (Merkle Tree): ساختار یکپارچه تراکنشها
در یک بلاک بیتکوین ممکن است بیش از ۲۰۰۰ تراکنش وجود داشته باشد. اگر نودهای شبکه بخواهند هر بار برای چک کردن صحت یک تراکنش، کل دادههای بلاک را زیر و رو کنند، شبکه از کار میافتد. درخت مرکل راهکاری برای این مشکل است.
۱. ساختار درختی (Binary Hash Tree)
درخت مرکل یک ساختار درختی از هشهاست. فرآیند به این صورت است:
هر تراکنش در پایینترین لایه (برگها) هش میشود.
هشها دو به دو با هم ترکیب شده و دوباره هش میشوند
این کار آنقدر تکرار میشود تا در نهایت به یک هش واحد در نوک قله برسیم که به آن Merkle Root میگوییم.
۲. چرا ریشه مرکل (Merkle Root) حیاتی است؟
این ریشه ۳۲ بایتی، عصاره و اثر انگشت تمام تراکنشهای بلاک است.
تغییرناپذیری: اگر حتی یک «بیت» در یکی از ۲۰۰۰ تراکنش تغییر کند، اثر آن به صورت زنجیرهای به سمت بالا میرود و ریشه مرکل کاملاً عوض میشود. این یعنی با داشتن ریشه، میتوان کل محتوای بلاک را تأیید کرد.
بهرهوری در هدر: این ریشه در «Block Header» قرار میگیرد. به جای اینکه هدر بلاک شامل تمام تراکنشها باشد و مگابایتها حجم بگیرد، فقط با ۳۲ بایت، امنیت تمام آنها را تضمین میکند.
۳. کاربرد در نودهای سبک (SPV)
اینجاست که جادو اتفاق میافتد. یک کیفپول موبایلی (که کل بلاکچین را ندارد) چطور میفهمد تراکنش شما واقعاً تأیید شده؟
به جای دانلود کل بلاک، نود سبک فقط «مسیر مرکل» (Merkle Path) را از یک نود کامل میپرسد. نود کامل چند هشِ محدود را برای گوشی میفرستد و گوشی با چند بار هش کردن، میبیند آیا به ریشه مرکلِ موجود در هدر (که از قبل دارد) میرسد یا نه.
حالا ما تمام قطعات پازل رمزنگاری را داریم:
هش (برای اثر انگشت)
کلیدها (برای مالکیت)
آدرسها (برای مقصد)
امضاها (برای اجازه)
درخت مرکل (برای بستهبندی نهایی)
پایان بخش ۲
۵. درخت مرکل (Merkle Tree): ساختار یکپارچه تراکنشها
در یک بلاک بیتکوین ممکن است بیش از ۲۰۰۰ تراکنش وجود داشته باشد. اگر نودهای شبکه بخواهند هر بار برای چک کردن صحت یک تراکنش، کل دادههای بلاک را زیر و رو کنند، شبکه از کار میافتد. درخت مرکل راهکاری برای این مشکل است.
۱. ساختار درختی (Binary Hash Tree)
درخت مرکل یک ساختار درختی از هشهاست. فرآیند به این صورت است:
هر تراکنش در پایینترین لایه (برگها) هش میشود.
هشها دو به دو با هم ترکیب شده و دوباره هش میشوند
HashAB = SHA256(SHA256(HashA || HashB))
این کار آنقدر تکرار میشود تا در نهایت به یک هش واحد در نوک قله برسیم که به آن Merkle Root میگوییم.
۲. چرا ریشه مرکل (Merkle Root) حیاتی است؟
این ریشه ۳۲ بایتی، عصاره و اثر انگشت تمام تراکنشهای بلاک است.
تغییرناپذیری: اگر حتی یک «بیت» در یکی از ۲۰۰۰ تراکنش تغییر کند، اثر آن به صورت زنجیرهای به سمت بالا میرود و ریشه مرکل کاملاً عوض میشود. این یعنی با داشتن ریشه، میتوان کل محتوای بلاک را تأیید کرد.
بهرهوری در هدر: این ریشه در «Block Header» قرار میگیرد. به جای اینکه هدر بلاک شامل تمام تراکنشها باشد و مگابایتها حجم بگیرد، فقط با ۳۲ بایت، امنیت تمام آنها را تضمین میکند.
۳. کاربرد در نودهای سبک (SPV)
اینجاست که جادو اتفاق میافتد. یک کیفپول موبایلی (که کل بلاکچین را ندارد) چطور میفهمد تراکنش شما واقعاً تأیید شده؟
به جای دانلود کل بلاک، نود سبک فقط «مسیر مرکل» (Merkle Path) را از یک نود کامل میپرسد. نود کامل چند هشِ محدود را برای گوشی میفرستد و گوشی با چند بار هش کردن، میبیند آیا به ریشه مرکلِ موجود در هدر (که از قبل دارد) میرسد یا نه.
حالا ما تمام قطعات پازل رمزنگاری را داریم:
هش (برای اثر انگشت)
کلیدها (برای مالکیت)
آدرسها (برای مقصد)
امضاها (برای اجازه)
درخت مرکل (برای بستهبندی نهایی)
پایان بخش ۲
بخش ۳ | فهرست
۱. الگوریتم Proof-of-Work در سطح بایت و بلاک
استخراج (Mining) در واقع فرآیند تأیید تراکنشها و حفظ امنیت شبکه از طریق حل یک پازل رمزنگاری است. در لایهٔ پایین، این کار یعنی تغییر دادن فیلدهای یک بستهٔ ۸۰ بایتی تا رسیدن به هشی که کوچکتر از مقدار Target باشد.
۱. کالبدشکافی هدر بلاک (The 80-Byte Header)
تمام فرآیند استخراج روی Header بلاک انجام میشود، نه کل حجم بلاک. این هدر از ۶ فیلد ثابت و متغیر تشکیل شده است:
۲. مفهوم Nonce و محدودیت آن
Nonce مخفف Number used once است. ماینر از عدد ۰ شروع کرده و این عدد ۳۲ بیتی را تغییر میدهد تا خروجی هش تغییر کند.
از آنجا که Nonce فقط ۴ بایت است، تنها (حدود ۴ میلیارد) حالت دارد. ماینرهای مدرن میتوانند این فضا را در زمانی بسیار کوتاه جستجو کنند.
راهحل: وقتی تمام حالتهای Nonce امتحان شد و نتیجهای به دست نیامد، ماینر بخشهای دیگر را تغییر میدهد، معمولاً فیلد ExtraNonce در تراکنش Coinbase یا Timestamp، که باعث تغییر Merkle Root میشود و امکان شروع دوبارهٔ جستجو با Nonceهای جدید را فراهم میکند.
۳. هشینگ دوگانه (SHA256d)
بیتکوین برای افزایش مقاومت در برابر برخی حملات نظری (مانند Length Extension)، از هشینگ دوگانه استفاده میکند:
شرط موفقیت:
در عمل، این معمولاً به صورت «شروع هش با تعداد زیادی صفر» دیده میشود.
۴. تراکنش کوینبیس (Coinbase Transaction)
این اولین تراکنش در هر بلاک است و با بقیه تراکنشها فرق اساسی دارد:
تولید پول (Incentive): این تراکنش هیچ "Input" یا ورودی ندارد؛ یعنی پولی از کسی گرفته نمیشود، بلکه پاداش بلاک (در حال حاضر ۳.۱۲۵ بیتکوین) به همراه مجموع کارمزد تمام تراکنشهای بلاک در اینجا خلق شده و به آدرس ماینر واریز میشود.
فیلد Extranonce: چون ۴ بایتِ نانس در هدر کافی نیست، ماینرها در بخش "Coinbase Script" یک فضای اضافی به نام Extranonce دارند. با تغییر دادن این فیلد، Merkle Root تغییر میکند و ماینر میتواند دوباره شانس خود را با نانسهای جدید امتحان کند.
خلاصه فرآیند در لایه کد:
-----------
ماینر با این کار، «انرژی الکتریکی» را به «امنیت» تبدیل کرده است. اما اگر تعداد ماینرها افزایش یابد و این پازل سریعتر از ۱۰ دقیقه حل شود چه اتفاقی میافتد؟ (مبحث بعد: Difficulty Adjustment)
۱. الگوریتم Proof-of-Work در سطح بایت و بلاک
استخراج (Mining) در واقع فرآیند تأیید تراکنشها و حفظ امنیت شبکه از طریق حل یک پازل رمزنگاری است. در لایهٔ پایین، این کار یعنی تغییر دادن فیلدهای یک بستهٔ ۸۰ بایتی تا رسیدن به هشی که کوچکتر از مقدار Target باشد.
۱. کالبدشکافی هدر بلاک (The 80-Byte Header)
تمام فرآیند استخراج روی Header بلاک انجام میشود، نه کل حجم بلاک. این هدر از ۶ فیلد ثابت و متغیر تشکیل شده است:
Version — ۴ بایت
نسخه پروتکل (معمولاً برای آپگریدها مثل SegWit استفاده میشود).
Previous Block Hash — ۳۲ بایت
هش هدر بلاک قبلی؛ عنصری که «زنجیره» را میسازد.
Merkle Root — ۳۲ بایت
هش نهایی تمام تراکنشهای بلاک (که در بخش ۲.۵ بررسی کردیم).
Timestamp — ۴ بایت
زمان بلاک بر حسب Unix Epoch.
Bits (Target) — ۴ بایت
نمایش فشردهٔ مقدار Target در قالب Compact Encoding (نه عدد اعشاری واقعی).
Nonce — ۴ بایت
متغیری که ماینر برای تغییر خروجی هش از آن استفاده میکند.
۲. مفهوم Nonce و محدودیت آن
Nonce مخفف Number used once است. ماینر از عدد ۰ شروع کرده و این عدد ۳۲ بیتی را تغییر میدهد تا خروجی هش تغییر کند.
از آنجا که Nonce فقط ۴ بایت است، تنها (حدود ۴ میلیارد) حالت دارد. ماینرهای مدرن میتوانند این فضا را در زمانی بسیار کوتاه جستجو کنند.
راهحل: وقتی تمام حالتهای Nonce امتحان شد و نتیجهای به دست نیامد، ماینر بخشهای دیگر را تغییر میدهد، معمولاً فیلد ExtraNonce در تراکنش Coinbase یا Timestamp، که باعث تغییر Merkle Root میشود و امکان شروع دوبارهٔ جستجو با Nonceهای جدید را فراهم میکند.
۳. هشینگ دوگانه (SHA256d)
بیتکوین برای افزایش مقاومت در برابر برخی حملات نظری (مانند Length Extension)، از هشینگ دوگانه استفاده میکند:
Block Hash = SHA256(SHA256(80-byte Header))
شرط موفقیت:
Block Hash < Target
در عمل، این معمولاً به صورت «شروع هش با تعداد زیادی صفر» دیده میشود.
۴. تراکنش کوینبیس (Coinbase Transaction)
این اولین تراکنش در هر بلاک است و با بقیه تراکنشها فرق اساسی دارد:
تولید پول (Incentive): این تراکنش هیچ "Input" یا ورودی ندارد؛ یعنی پولی از کسی گرفته نمیشود، بلکه پاداش بلاک (در حال حاضر ۳.۱۲۵ بیتکوین) به همراه مجموع کارمزد تمام تراکنشهای بلاک در اینجا خلق شده و به آدرس ماینر واریز میشود.
فیلد Extranonce: چون ۴ بایتِ نانس در هدر کافی نیست، ماینرها در بخش "Coinbase Script" یک فضای اضافی به نام Extranonce دارند. با تغییر دادن این فیلد، Merkle Root تغییر میکند و ماینر میتواند دوباره شانس خود را با نانسهای جدید امتحان کند.
خلاصه فرآیند در لایه کد:
ماینر مجموعهای از تراکنشها را جمعآوری و Merkle Root را میسازد.
هدر ۸۰ بایتی تشکیل میشود.
یک Nonce انتخاب میشود.
SHA256d محاسبه میشود.
اگر Hash < Target باشد، ماینر یک هش معتبر پیدا کرده و بلاک را به شبکه منتشر میکند.
سپس نودهای شبکه بلاک را بهطور مستقل اعتبارسنجی میکنند؛ در صورت صحیح بودن، بلاک به زنجیره افزوده میشود.
در غیر این صورت، Nonce افزایش یافته و فرآیند تکرار میشود.
-----------
ماینر با این کار، «انرژی الکتریکی» را به «امنیت» تبدیل کرده است. اما اگر تعداد ماینرها افزایش یابد و این پازل سریعتر از ۱۰ دقیقه حل شود چه اتفاقی میافتد؟ (مبحث بعد: Difficulty Adjustment)