همانطور که میدانید و ما هم در مقالات قبلی چندین بار به این موضوع اشاره کردیم، به محض اینکه تراکنشهای بیت کوین تأیید بخورند به هیچ وجه قابل برگشت نخواهند بود. ما در این مقاله قابلیت بسیار جذابی با عنوان Replace By Fee یا RBF را به شما معرفی خواهیم کرد که از این مشکل جلوگیری میکند.
این قابلیت در طرح پیشنهادی BIP125 مطرح و در نسخه 0.12.0 Bitcoin Core اجرا شد که جنجال زیادی به پا کرد و هنوز هم محل مناقشه است.
Replace By Fee چیست؟
به زبان ساده، اگر فرستنده یک تراکنش قابلیت RBF را فعال کند، در صورتی که آن تراکنش استخراج نشود، فرستنده میتواند همان تراکنش را با کارمزد بیشتری به شبکه ارسال کند. این تراکنش دوم حاوی همان اطلاعات تراکنش ارسال نشده ( UTXO) قبلیست.
برای درک بهتر RBF بهتر است آن را با ذکر مثالی توضیح دهیم. شرایطی را در نظر بگیرید که آلیس و باب قصد دارند که مقداری بیت کوین برای هم ارسال کنند. آلیس از باب میخواهد که برای او 1 بیت کوین ارسال کند.
باب میخواهد در ازای این ارسال 0.000001 BTCبه عنوان کارمزد به شبکه پرداخت کند. او با کلیدهای خصوصی خود تراکنش را امضا میکند و منتظر میماند تا ماینرها تراکنش او را استخراج کنند. ساعتها میگذرد اما تراکنش او تأیید نمیشود.
بعد از گذشت 72 ساعت باب متوجه میشود که ماینرها اصلاً تراکنش او را انتخاب نکردهاند. به دو دلیل ممکن است ماینر ها تراکنش او را از ممپول (Mempool) برنداشته باشند.
تذکر: همه تراکنشهایی که توسط کاربران ایجاد میشوند در محلی به نام ممپول ذخیره میشوند وماینرها تراکنشها را از آنجا انتخاب میکنند.
چرا ماینر ها تراکنشی را انتخاب نمیکنند؟
کارمزد کم
در شبکه بیتکوین محدودیتهای به خصوصی وجود دارد. برای مثال سایز بلاک نمیتواند از 2 مگابایت بیشتر شود و یا هر ماینر در ازای حل موفقیت آمیز یک بلاک مقدار مشخصی بیتکوین پاداش میگیرد. بنابراین ماینرها به جهت بالا بردن سود خود و جبران هزینه فرآیند استخراج، تراکنش هایی که کارمزد بیشتری دارند را انتخاب میکنند. پس اگر تراکنشی کارمزد کافی برای استخراج نداشته باشد، از طرف ماینر پذیرفته نمیشود. اینجاست که RBF به کار میآید.
تراکم بالا در ممپول
در نظر بگیرید که تعداد زیادی از کاربران قصد خرید بیت کوین را داشته باشند. در این شرایط ممپول از اطلاعات این حجم از تراکنش ها پر میشود. بیشتر این کاربران برای اینکه به انجام تراکنش خود سرعت ببخشند، کارمزد بالایی را انتخاب میکنند.
بنابراین در چنین شرایطی، تراکنش هایی که کارمزد به نسبت کم تری دارند از طرف ماینر ها انتخاب نمیشوند. پس باب قابلیت RBF را در زمان انجام تراکنش فعال میکند. (که بیشتر کیف پولهای بیتکوین به این قابلیت مجهز هستند). در ابتدا باب تراکنشی با 0.000001 کارمزد میسازد. اما تراکنش او استخراج نمیشود. از آنجایی که باب قابلیت RBF را فعال کرده بود، حالا میتواند با استفاده از این گزینه از دادههای همان UTXO برای ایجاد تراکنشی جدید اما با کارمزدی بالاتر بهره ببرد.
این بار باب در شرایطی بسیار اورژانسی کارمزد تراکنش بعدی را به 0.001 بیتکوین افزایش میدهد. این تراکنش از طرف ماینر انتخاب میشود چرا که از نظر او کارمزدش معقول و سودآور است.
انواع مختلف RBF
- Full RBF: این قابلیت به کاربر این امکان را میدهد که بدون قید و شرط تراکنش قبلی خود را با یک تراکنش جدیدی که کارمزد معقول و به اندازه ای دارد ،جایگزین کند.
- Opt-in RBF: این قابلیتیست که کاربر به دلخواه خود میتواند آن را فعال کند. معمولاً این ویژگی بسته به شرایط کاربر و کیف پولی که انتخاب میکند، فعال میشود. این ویژگی با استفاده از فیلد sequence و BIP 125 فعال می شود.
- First-seen-safe RBF: این نوع از RBF در صورتی قابل استفاده است که داده های تراکنش جدید عیناً شبیه به اطلاعات تراکنش قبلی باشد. تنها با این تفاوت که کارمزد تراکنش جدید بیشتر از تراکنش قبلی باشد.
حمله دوبار خرج کردن با استفاده از RBF
شرایطی را در نظر بگیرید که کاربری بخواهد هزینه خرید خود از فروشگاه آنلاینی را با بیت کوین پرداخت کند. او پس از فعال کردن قابلیت RBF تراکنشی با حداقل کارمزد ایجاد میکند. سپس به فروشنده اطلاع میدهد که تراکنش مربوط به زودی تأیید خواهد شد.
فروشنده هم به امید اینکه تراکنش به زودی استخراج میشود، کالای مشتری را برای او ارسال میکند. حالا در نظر بگیرید که این کاربر بدجنس میتواند با کاربرد قابلیت Full RBF یا Opt-in-RBF با استفاده از داده های همان UTXO تراکنش قبلی آن مبلغ را به حساب خودش ارسال کند. و با این حرکت منجر به وقوع حمله دوبار خرج کردن شود.به همین علت RBF بسیار مورد انتقاد قرار گرفته است.
جمع بندی
پس پیشنهاد میکنیم برای اعتبار دادن به یک تراکنش منتظر بمانید تا تراکنش مورد نظر حداقل 6 تأییدیه (Confirmation) دریافت کند. چرا که اگر تراکنشی حتی ۱ تأییدیه هم دریافت کرده باشد، دیگر لغو شدنی نیست. در آخر، توصیه میکنیم در بکار بردن تراکنشهایی که RBF در آنها فعال شده است احتیاط کنید.
قابلیت RBF بیت کوین به شما این امکان را میدهد تا با کارمزد بیشتر، تراکنش بیت کوین را برای بار دوم در کل شبکه مخابره کنید. در نتیجه، ماینرها زمان بیشتری برای انتخاب یک تراکنش، لغو تراکنش قبلی و اجرای تراکنش جدید دارند.
همه تراکنشهایی که توسط کاربران شبکه بیت کوین ایجاد میشوند در محلی به نام ممپول (Memepool) ذخیره میشوند و ماینرها تراکنش های معلق را از این مکان انتخاب میکنند.