إرسال الدفعة لا يعني تأكيدها. قبل أن يدرجها معدّن في كتلة، قد تحتفظ بها العقد، وهي برامج تتحقق من معاملات بيتكوين وتمررها، في Mempool، أي قائمة المعاملات المنتظرة لدى كل عقدة. يتيح RBF ضمن شروط معينة قبول معاملة جديدة بدلًا منها، تنفق واحدًا على الأقل من مخرجات UTXO نفسها، أي المخرجات التي لم تُنفق بعد. يجب أن يحمل البديل توقيعات صالحة وأن يُرسل إلى الشبكة؛ ورفع الرسوم وحده لا يضمن تأكيدًا سريعًا.
أرسلت آنا 20,000 sat، لكن الدفعة ما زالت تنتظر. الاختصار sat يعني satoshi، أصغر وحدة من bitcoin. تعرض محفظتها رفع الرسوم باستخدام RBF. في مثال بسيط، تنفق المعاملة الأصلية 50,000 sat: يحصل المستلم على 20,000 sat، وتبلغ الرسوم 200 sat، ويعود إلى آنا الباقي وهو 29,800 sat. يمكن للبديل أن يُبقي مبلغ المستلم 20,000 sat، ويرفع الرسوم إلى 2,000 sat، ويعيد إلى آنا 28,000 sat. تشرح هذه الأرقام الفكرة، ولا توصي برسوم حالية. قبل التوقيع، تتحقق آنا من العنوان ومبلغ المستلم وإجمالي الرسوم الجديد. يجب أن تستطيع المحفظة توقيع المدخلات المطلوبة؛ وقد يلزم توصيل المحفظة المادية مجددًا. يحمل البديل txid جديدًا، وهو معرّف المعاملة، لذا قد يحتاج المستلم إلى رابط تتبع جديد. رفع الرسوم يختلف عن إنشاء دفعة ثانية مستقلة باستخدام UTXO أخرى: قد تتأكد الدفعتان المستقلتان، فتدفع مرتين. [1] [2] [12]
قد تعرض المحفظة مبلغًا واردًا قبل أول تأكيد. تسمى هذه الحالة zero-conf: شوهدت الدفعة لكنها ليست في كتلة بعد. قد تتأكد نسخة أخرى أولًا ويختفي المبلغ الوارد المعروض. لذلك لا تثبت عبارة ‘RBF معطّل’ أن الدفعة مضمونة. تسليم سلعة مقابل دفعة غير مؤكدة يعني قبول مخاطرة تجارية عن وعي. بعد إدراج المعاملة في كتلة لا يعيد RBF كتابتها؛ أما احتمال إعادة تنظيم السلسلة فهو خطر مختلف، ومن أجله يُنتظر عدد أكبر من التأكيدات للدفعات المهمة. [1]
لا يشترط RBF نفسه الإبقاء على المستلم الأصلي. يمكن للبديل رفع الرسوم والدفع للشخص نفسه، أو إرسال الأموال إلى وجهة أخرى. تحاول النسختان إنفاق UTXO نفسه، فهما تقنيًا محاولتان متعارضتان، أو Double Spend؛ ولا يكفي المصطلح وحده للحكم بوجود احتيال. لكن المهاجم لا يستطيع توقيع دفعة شخص آخر كما يشاء: على البديل أيضًا استيفاء شروط الإنفاق، ومنها التوقيعات المطلوبة. إذا عرضت المحفظة ‘الإلغاء’ باستبدال الدفعة بأخرى إلى نفسك، فهذه محاولة لسبق المعاملة الأصلية وليست تراجعًا مضمونًا عنها. [1]
يغيّر RBF المعاملة المنتظرة نفسها. أما Child Pays for Parent (CPFP) فيُبقي المعاملة الأصلية وينشئ معاملة جديدة تنفق أحد مخرجاتها. ولكي يحصل المعدّن على رسوم الجديدة، عليه إدراج الأصلية أيضًا، فيستطيع تقييم معدل رسومهما المشترك. تسمى الجديدة المعاملة الابنة والأصلية المعاملة الأم. يستطيع إنشاء الابنة من يملك صلاحية إنفاق المخرج المعني، كالمستلم أو المرسل الذي يستخدم الباقي العائد إليه. تعتمد الإمكانية على دعم المحفظة والتوقيعات المطلوبة وروابط الاعتماد بين المعاملات. لا يستبدل CPFP الدفعة الأصلية ولا يضمن وقت تأكيدها. [2]
ليس Mempool طابورًا واحدًا مشتركًا لكل Bitcoin. لكل عقدة قائمتها وقواعدها لقبول المعاملات المنتظرة وتمريرها. ينتمي RBF إلى هذه السياسة المحلية، لا إلى قواعد الإجماع التي تحدد صلاحية الكتل. لذلك يستطيع المعدّن اختيار معاملة متعارضة صالحة لم تكن عقدة أخرى تحتفظ بها. ثم يتحقق Full Node من الكتلة كاملة وفق قواعد Bitcoin؛ ولا يحدد تفضيله السابق في mempool نتيجة التحقق. قبول عقدة واحدة للبديل لا يَعِد بقبوله في كل مكان. [1] [6]
يهم مستخدم المحفظة رقمان مختلفان: ما سيدفعه إجمالًا، والمعدل الذي يعرضه مقارنة بحجم المعاملة. لحجم افتراضي قدره 200 vB، تعني رسوم 200 sat معدلًا قدره 1 sat/vB؛ وللحجم نفسه تعني 2,000 sat معدل 10 sat/vB. البايت الافتراضي vB وحدة حجم مشتقة من وزن المعاملة. قد يغيّر بناؤها من جديد حجمها، وعلى المحفظة حينئذ إعادة حساب المعدل أيضًا. إجمالي الرسوم مبلغ بوحدة satoshi، والمعدل مبلغ لكل بايت افتراضي بوحدة sat/vB. في الاستبدال المفرد في Core 30 يجب تغطية مجموع رسوم جميع المعاملات المطرودة، إضافة إلى تكلفة يحددها incrementalrelayfee وفق حجم البديل. ويجب أن يتجاوز معدل البديل معدلات المعاملات المتعارضة مباشرة. لا يكفي رفع المعدل وحده أو إضافة satoshi فحسب؛ قيمة incrementalrelayfee الافتراضية في Core 30 هي 0.1 sat/vB، وقد تختلف إعدادات العقدة. [2] [9]
قد توجد دفعة منتظرة أخرى تعتمد بالفعل على الأولى: شخص ينفق مخرجًا من المعاملة الأولى التي لم تتأكد بعد. تسمى هذه المعاملات اللاحقة توابع. عند حذف المعاملة الأم تصبح توابعها غير قابلة للاستخدام في mempool أيضًا، ولذلك يجب على العقدة تقييم المجموعة المتأثرة كاملة. قد يطرد استبدال المعاملة الأم من mempool أيضًا المعاملات التابعة التي تنفق مخرجاتها. لذلك لا تقتصر المقارنة دائمًا على معاملتين. يحد Core 30 في الاستبدال المفرد مجموع أعداد التوابع لكل معاملة متعارضة مباشرة، شاملة المعاملة نفسها، عند 100؛ وقد تُحسب التوابع المشتركة أكثر من مرة. تؤثر رسوم الحزمة وعلاقاتها في نجاح الاستبدال. [2]
تحتاج العقدة أيضًا إلى منع إغراقها بإعادة حساب البدائل بلا توقف. هذه حماية من DoS، أي هجوم يستهدف إتاحة الخدمة. UTXO مخرج غير منفق من معاملة سابقة، ويشير إليه مدخل المعاملة الجديدة. تصف القواعد التالية Bitcoin Core 30 تحديدًا، وليست قانونًا ثابتًا لا يتغير في Bitcoin. تقيّد سياسة Bitcoin Core 30 للمعاملة البديلة المفردة أيضًا المدخلات الجديدة غير المؤكدة وعدد المعاملات المطرودة. يجب استيفاء القواعد المحلية لأشكال المعاملات المقبولة (المعيارية)، إلى جانب قواعد التمرير والصلاحية؛ مجرد إنفاق UTXO نفسه لا يكفي. تحمي القيود قدرة المعالجة والذاكرة وسعة النقل؛ ويجب تقييم قواعد استبدال الحزم على حدة بحسب إصدار العقدة. غيّر Core 31 هذه السياسة مع إدخال Cluster Mempool، الذي يقيّم المعاملات المعلّقة المترابطة ضمن مجموعات. يجب أن يحسّن الاستبدال ما يسمى feerate diagram، وهو مخطط يقارن الرسوم التراكمية بالمساحة التي تُشغل تدريجيًا. وتبقى شروط أخرى، منها كفاية إجمالي الرسوم والرسوم الإضافية لتمرير المعاملة البديلة. لذلك لا تطبّق حدود Core 30 المذكورة أعلاه تلقائيًا على الإصدارات الأحدث؛ تحقّق من قواعد عقدتك. [2] [13]
لماذا ما زالت بعض المحافظ تعرض مفتاح RBF؟ كانت العقد التي تطبق سياسة opt-in RBF الأصلية تتطلب إشارة مسبقة تسمح بالاستبدال. أتاح Bitcoin Core 24 ضبط full-RBF دون هذا الشرط، وفعّله Core 28 افتراضيًا، ثم أزال Core 29 المفتاح mempoolfullrbf. تشرح تفاصيل BIP125 التالية الإشارة الأصلية، لا قاعدة عامة لكل عقد اليوم. يصف BIP125 إشارة opt-in صريحة عندما تكون قيمة nSequence لأحد المدخلات على الأقل أقل من 0xfffffffe، ويصف أيضًا وراثة الإشارة من سلف غير مؤكد. هذه سياسة تاريخية وليست شرط إجماع. يسمح full-RBF بتقييم البديل دون هذه الإشارة؛ غيابها لا يضمن تعذر استبدال الدفعة. [1] [3] [4] [5] [6]
هذا الجزء مخصص للعمل بعقدتك الخاصة. RPC أوامر للاستعلام من البرنامج أو التحكم فيه؛ لا تحتاج معرفتها لاستخدام زر رفع الرسوم. يعرض getmempoolentry حالة معاملة موجودة في mempool تلك العقدة؛ ويختبر testmempoolaccept بديلًا مرشحًا واحدًا موقّعًا وفق mempool الحالي وقواعد عقدتك دون بثّه. لا تضمن النتيجة قبول العقد الأخرى أو إدراج المعاملة في كتلة. فعّل Core 28 سياسة full-RBF بالإعداد الافتراضي لـ mempoolfullrbf، وأزال Core 29 هذا الخيار. يعرض getmempoolinfo إعدادات الرسوم، لكن الحقل fullrbf موسوم بأنه متقادم في Core 30؛ تحقّق دائمًا من الإصدار والإعداد الفعلي. [5] [6] [7] [8] [10] [11]
للحصول على صورة أوضح، اقرأ هذا المدخل مع Transaction Fees, Mempool, CPFP (Child Pays for Parent), الإنفاق المزدوج, التأكيد, Fee Rate. تشير إلى هذا المدخل أيضًا Change Address, التأكيد, الإنفاق المزدوج, Fee Rate.