وقتی میگوییم «بیتکوین را برای کسی فرستادم»، در پشت این جمله یک فرایند فنی چندمرحلهای قرار دارد. کیف پول باید دارایی قابل خرج را پیدا کند، تراکنش را بسازد، آن را با کلید مناسب امضا کند و به شبکه بفرستد. نودها تراکنش را بررسی میکنند، ماینرها میتوانند آن را در یک بلاک قرار دهند و نودها دوباره بلاک را اعتبارسنجی میکنند.
فهم این مسیر برای شناخت بیتکوین بسیار مهم است، چون نشان میدهد «ارسال»، «در ممپول بودن»، «تأیید» و «نهاییشدن» سه یا چهار مفهوم یکسان نیستند.
تراکنش بیتکوین چیست؟
تراکنش دادهای است که مصرف خروجیهای قبلی و ایجاد خروجیهای جدید را مشخص میکند. این خروجیهای قبلی معمولاً بهعنوان UTXO یا خروجی تراکنش خرجنشده شناخته میشوند.
بیتکوین برخلاف یک حساب بانکی معمولی، برای هر شخص یک عدد موجودی مرکزی نگهداری نمیکند. کیف پول موجودی را با بررسی UTXOهای مرتبط با کلیدهای خود محاسبه میکند.
هر UTXO شامل مقداری بیتکوین و شرایطی است که باید برای خرجکردن آن برآورده شود. تراکنش جدید، UTXOهای قبلی را مصرف میکند و UTXOهای جدیدی میسازد.
یک UTXO را چگونه تصور کنیم؟
برای سادهکردن موضوع میتوان UTXO را مانند یک اسکناس دیجیتال در نظر گرفت، با این تفاوت که این تشبیه کامل نیست. یک UTXO میتواند تمام یا بخشی از مبلغ مورد نیاز یک پرداخت را تأمین کند، اما برای خرجکردن آن باید خود خروجی قبلی مصرف و خروجیهای تازه ساخته شوند.
فرض کنید یک UTXO به ارزش ۰٫۸ بیتکوین دارید و میخواهید ۰٫۳ بیتکوین برای شخص دیگری بفرستید. کیف پول میتواند آن UTXO را بهعنوان ورودی تراکنش انتخاب کند و خروجیهایی برای گیرنده و باقیمانده ایجاد کند.
اگر ۰٫۳ بیتکوین به گیرنده برسد و ۰٫۰۰۰۱ بیتکوین کارمزد باشد، باقیمانده میتواند به یک خروجی جدید برای خود فرستنده برگردد. این خروجی را معمولاً Change مینامند. در این مثال، Change برابر با ۰٫۴۹۹۹ بیتکوین است.
بنابراین «خرجکردن بخشی از یک UTXO» در واقع به معنی مصرف UTXO قبلی و ایجاد خروجیهای جدید است.
اجزای اصلی یک تراکنش چیست؟
در سطح مفهومی، تراکنشهای عادی چند جزء مهم دارند:
- ورودیها: به خروجیهای تراکنشهای قبلی اشاره میکنند و مشخص میکنند کدام UTXOها قرار است خرج شوند.
- خروجیها: مقدار مشخصی ساتوشی را زیر شرایطی قرار میدهند که گیرنده باید برای خرجکردن آن در آینده برآورده کند.
- امضا و دادههای لازم برای خرجکردن: به نود اجازه میدهند بررسی کند شرایط خروجی قبلی رعایت شده است.
- کارمزد: اختلاف میان مجموع ارزش ورودیها و مجموع ارزش خروجیها در تراکنش عادی است.
در سطح فنیتر، هر ورودی با یک TXID و شماره خروجی یا outpoint به خروجی مشخصی از یک تراکنش قبلی اشاره میکند. لازم نیست کاربر عادی جزئیات باینری این ساختار را بداند، اما فهم این رابطه برای درک UTXO ضروری است.
کیف پول هنگام ارسال چه کاری انجام میدهد؟
وقتی کاربر مبلغ و مقصد را مشخص میکند، کیف پول چند کار انجام میدهد:
- UTXOهای قابل خرج مرتبط با کیف پول را بررسی میکند.
- مجموعهای از آنها را برای تأمین مبلغ انتخاب میکند.
- خروجی مربوط به گیرنده را میسازد.
- در صورت نیاز خروجی Change ایجاد میکند.
- کارمزد را در ساختار تراکنش لحاظ میکند.
- تراکنش را با کلیدهای لازم امضا میکند.
- تراکنش امضاشده را برای انتشار به شبکه میفرستد.
روش دقیق انتخاب UTXO به نرمافزار کیف پول بستگی دارد. کیف پول ممکن است معیارهایی مانند اندازه تراکنش، هزینه، حریم خصوصی و مدیریت خروجیها را در نظر بگیرد.
کلید خصوصی چه نقشی دارد؟
آدرس بهتنهایی اختیار خرجکردن را ثابت نمیکند. برای بسیاری از خروجیهای رایج بیتکوین، کاربر باید با کلید خصوصی مناسب یک امضای دیجیتال تولید کند.
این امضا به نودها اجازه میدهد بررسی کنند که شرایط لازم برای خرجکردن خروجی رعایت شده است، بدون اینکه کلید خصوصی برای شبکه ارسال شود.
این همان دلیل اصلی اهمیت کلید خصوصی است: هرکس بتواند شرایط لازم برای خرجکردن یک خروجی را برآورده کند، ممکن است بتواند آن دارایی را منتقل کند.
برای توضیح کاملتر رابطه کیف پول، کلید خصوصی و عبارت بازیابی، راهنمای کیف پول بیتکوین را بخوانید.
تراکنش چگونه به شبکه میرسد؟
پس از امضا، تراکنش به یک یا چند نود ارسال میشود. نود دریافتکننده ابتدا آن را با قواعد اعتبارسنجی بررسی میکند.
در یک تصویر ساده، نود باید مطمئن شود ساختار تراکنش معتبر است، ورودیها به خروجیهای واقعی اشاره میکنند، خروجیهایی که قرار است خرج شوند قبلاً خرج نشدهاند، امضاها و شرایط خرجکردن درست هستند و مجموع ارزش خروجیها از ارزش ورودیها بیشتر نیست.
اگر تراکنش معتبر باشد و سیاستهای نود اجازه دهد، میتواند در ممپول قرار بگیرد و برای همتایان دیگر منتشر شود.
ممپول چیست؟
Mempool مخفف Memory Pool است و به مجموعه تراکنشهای معتبر اما هنوز در بلاک ثبتنشده یک نود اشاره دارد.
یک نکته مهم این است که ممپول یک دیتابیس جهانی واحد نیست. هر نود میتواند بر اساس سیاستها، ظرفیت و تراکنشهایی که دریافت کرده مجموعه متفاوتی داشته باشد.
بنابراین ممکن است تراکنشی در ممپول یک نود وجود داشته باشد ولی هنوز در ممپول نود دیگری دیده نشود. همین موضوع باعث میشود مشاهده یک تراکنش در کیف پول یا یک سرویس رهگیری، با ثبتشدن آن در بلاکچین یکی نباشد.
کارمزد تراکنش چگونه شکل میگیرد؟
در تراکنش عادی، اگر مجموع ورودیها ۰٫۸ بیتکوین و مجموع خروجیها ۰٫۷۹۹۹ بیتکوین باشد، اختلاف ۰٫۰۰۰۱ بیتکوین کارمزد است.
اما مقدار کارمزد فقط با نگاهکردن به مبلغ بیتکوین ارسالشده قابل فهم نیست. اندازه تراکنش و تقاضا برای فضای بلاک نیز اهمیت دارند. به همین دلیل، در بازار کارمزد معمولاً نرخهایی مانند ساتوشی به ازای واحد وزن یا vbyte برای مقایسه اولویت تراکنشها استفاده میشوند.
وقتی فضای بلاک تقاضای زیادی دارد، کاربران ممکن است برای ورود سریعتر تراکنش به بلاک نرخ کارمزد بالاتری پیشنهاد کنند. کارمزد بیشتر تضمین قطعی زمان تأیید نیست، اما میتواند اولویت اقتصادی تراکنش را افزایش دهد.
ماینر چه کاری انجام میدهد؟
ماینر تراکنشهای مناسب را از میان تراکنشهای در دسترس انتخاب میکند و یک بلاک پیشنهادی میسازد. سپس برای این بلاک Proof of Work انجام میدهد.
اگر ماینر پاسخ معتبر پیدا کند، بلاک را در شبکه منتشر میکند. این مرحله هنوز به معنی پذیرش قطعی نیست؛ نودهای دیگر باید بلاک را مستقل از ماینر بررسی کنند.
اگر بلاک معتبر باشد و در زنجیره مورد قبول شبکه قرار بگیرد، تراکنشهای داخل آن در تاریخچه بلاکچین ثبت میشوند.
تأیید تراکنش یعنی چه؟
وقتی یک تراکنش در یک بلاک معتبر قرار میگیرد، معمولاً میگوییم تراکنش یک تأیید دارد. اگر بلاک دیگری روی آن ساخته شود، تعداد تأییدها بیشتر میشود.
افزایش تعداد تأییدها یعنی تراکنش در زنجیره عمق بیشتری پیدا کرده است. برای تغییر تاریخچه مربوط به آن، مهاجم باید با Proof of Work زنجیره جایگزین را بازسازی و با زنجیره مورد استفاده شبکه رقابت کند.
به همین دلیل، تأیید بیشتر معمولاً به معنی اطمینان عملی بیشتر است؛ اما «نهاییشدن» یک عدد ثابت و جهانی برای همه تراکنشها نیست. سرویس مقصد، ارزش انتقال و مدل ریسک میتوانند تعیین کنند چند تأیید کافی تلقی شود.
آیا تراکنش تأییدنشده قابل جایگزینی است؟
تراکنشی که هنوز در بلاک قرار نگرفته، در شرایط خاص میتواند از ممپول کنار گذاشته یا با تراکنش دیگری جایگزین شود. یکی از سازوکارهای مرتبط Replace-by-Fee یا RBF است که در صورت رعایت قواعد مربوط میتواند اجازه دهد تراکنش جایگزین با کارمزد بالاتر منتشر شود.
این موضوع یکی از دلایلی است که نباید پرداخت صفر تأیید را از نظر ریسک با تراکنش چندتأییده یکسان دانست. برای پرداختهای مهم، وضعیت تأیید را باید بر اساس نیاز واقعی دریافتکننده بررسی کرد.
چرا ارسال به آدرس اشتباه مشکلساز است؟
اگر تراکنش از نظر پروتکل معتبر باشد اما کاربر آن را به مقصد اشتباه ارسال کند، شبکه نمیتواند صرفاً به دلیل اشتباه انسانی آن را معکوس کند.
بیتکوین نمیداند صاحب واقعی یک آدرس چه کسی است و نهادی مرکزی وجود ندارد که بتواند با یک دستور دارایی را از گیرنده پس بگیرد. اگر گیرنده همکاری نکند، بازیابی دارایی ممکن است عملاً امکانپذیر نباشد.
به همین دلیل بررسی مقصد قبل از تأیید تراکنش، بهخصوص برای مبالغ قابل توجه، اهمیت زیادی دارد.
یک مثال کامل از تراکنش
فرض کنید علی میخواهد ۰٫۳ بیتکوین برای سارا ارسال کند و کیف پول علی یک UTXO به ارزش ۰٫۸ بیتکوین دارد.
کیف پول میتواند این UTXO را مصرف کند، یک خروجی ۰٫۳ بیتکوینی برای سارا بسازد و یک خروجی Change برای علی ایجاد کند. اگر کارمزد ۰٫۰۰۰۱ بیتکوین باشد، مقدار Change برابر با ۰٫۴۹۹۹ بیتکوین خواهد بود.
سپس کیف پول تراکنش را با کلید خصوصی مناسب امضا میکند و آن را منتشر میکند. نودها تراکنش را بررسی میکنند. اگر معتبر باشد، میتواند وارد ممپول شود. یک ماینر آن را در بلاک قرار میدهد، بلاک با Proof of Work منتشر میشود و نودهای دیگر آن را اعتبارسنجی میکنند.
با پذیرفتهشدن بلاک، تراکنش یک تأیید دارد. با ساختهشدن بلاکهای بعدی، عمق آن بیشتر میشود.
این مثال سادهشده است؛ جزئیات واقعی تراکنش به نوع خروجی، نسخه اسکریپت، نوع کیف پول و ساختار دقیق تراکنش بستگی دارد.
آیا همه تراکنشها یک شکل هستند؟
خیر. بیتکوین در طول زمان انواع مختلفی از ساختارهای تراکنش و اسکریپت را پشتیبانی کرده است. تفاوت در نوع خروجی، آدرس، اسکریپت و دادههای شاهد میتواند بر اندازه تراکنش، هزینه و نحوه امضا اثر بگذارد.
برای کاربر عادی لازم نیست همه جزئیات Script را بداند، اما باید بداند که «آدرس بیتکوین» یک قالب واحد برای تمام تاریخ شبکه نیست و همه تراکنشها از نظر ساختار دقیقاً شبیه هم نیستند.
تراکنش و بلاکچین چه رابطهای دارند؟
تراکنش دستور تغییر وضعیت قابل قبول شبکه را ارائه میکند؛ بلاک مجموعهای از تراکنشها را در یک بخش از تاریخچه شبکه قرار میدهد.
به بیان ساده، تراکنشها ابتدا ایجاد و منتشر میشوند. پس از اعتبارسنجی و انتخاب توسط ماینر، میتوانند در بلاک قرار بگیرند. سپس با پذیرفتهشدن بلاک، بخشی از تاریخچه مورد قبول شبکه میشوند.
برای درک ادامه این مسیر، بیتکوین چگونه کار میکند؟ تصویر بزرگتر ارتباط میان کیف پول، نود، ماینر و بلاکچین را توضیح میدهد.
جمعبندی
تراکنش بیتکوین یک پیام ساده برای کمکردن عدد موجودی نیست. کیف پول UTXOهای قابل خرج را انتخاب میکند، خروجیهای جدید را میسازد، کارمزد را در نظر میگیرد و تراکنش را با کلید مناسب امضا میکند. نودها تراکنش را اعتبارسنجی و در صورت پذیرش در ممپول خود نگهداری و منتشر میکنند.
ماینرها میتوانند تراکنش را در یک بلاک قرار دهند و با Proof of Work برای پذیرش بلاک در شبکه رقابت کنند. پس از قرارگرفتن تراکنش در بلاک، تأیید ایجاد میشود و بلاکهای بعدی عمق آن را بیشتر میکنند.
اگر این فرایند را درست بفهمید، مفاهیمی مانند کارمزد، ممپول، UTXO، تأیید، Change، RBF و نقش کلید خصوصی دیگر اصطلاحات جدا از هم نیستند؛ همه آنها اجزای یک فرایند واحد هستند.
منابع و مراجع
- Bitcoin Developer Guide — Transactions
- Bitcoin Developer Guide — Block Chain
- Bitcoin Developer Guide — Payment Processing
این مطلب با هدف آموزش و تحلیل تهیه شده است و نباید بهعنوان توصیه قطعی برای خرید، فروش یا شرطبندی تلقی شود.