تخيّل أن شخصًا أرسل إليك بيتكوين برسوم منخفضة، ولم تتأكد الدفعة بعد. إذا كانت محفظتك تدعم CPFP لهذه الدفعة، يمكنك إنشاء معاملة لاحقة، ربما إلى عنوان آخر تملكه. تسمى المعاملة الأصلية الأم والجديدة الابنة: تنفق الابنة مخرجًا أنشأته الأم، أي مبلغًا تحكمه شروط للإنفاق. ولكي يحصل المعدّن على رسوم الابنة، يحتاج إلى الأم أيضًا. تبقى الدفعة الأصلية كما هي؛ وقد تساعد زيادة الرسوم الإجمالية على تأكيدها، لكنها لا تضمن موعد ذلك.
تنتظر آنا 100 000 sat. يشير الاختصار sat إلى الساتوشي، أصغر وحدة في البيتكوين. ترى الدفعة بالفعل، لكن المرسل اختار رسومًا منخفضة ولم تدخل المعاملة كتلة بعد. تتيح محفظتها إنفاق هذا المخرج غير المؤكد. تنشئ آنا منه معاملة جديدة إلى عنوان تملكه وتعرض رسومًا أعلى. هي لا تدفع للمرسل ولا تكافئ خدمة خاصة، بل تدفع رسوم معاملة بيتكوين عادية. لا يستطيع المعدّن تأكيد المعاملة الجديدة دون الأصلية، لأن المخرج الذي تنفقه لن يكون موجودًا في السلسلة التي يجري التحقق منها دون المعاملة الأصلية. يجب أن تكون الأم قد تأكدت سابقًا أو ترد قبل الابنة في الكتلة نفسها، مع بقية المعاملات السابقة غير المؤكدة اللازمة. أما العكس فليس مطلوبًا: يمكن أن تتأكد الأم دون الابنة. [3] [5]
لنأخذ مثالًا بسيطًا دون معاملات سابقة أخرى غير مؤكدة. حجم الأم 200 vB ورسومها 200 sat. البايت الافتراضي، vB، مقياس للحجم مشتق من وزن المعاملة؛ وتعبّر sat/vB عن عدد الساتوشي المعروض لكل وحدة. حجم الابنة 100 vB، وتدفع آنا مقابلها 2 800 sat. إذا كان للابنة مخرج واحد فقط، فسيتبقى لآنا 97 200 sat من أصل 100 000 sat استلمتها. تدفع المعاملتان معًا 3 000 sat مقابل 300 vB، أي 10 sat/vB. معدل الابنة وحدها 28 sat/vB، لكن المعدّن يحتاج إلى إدراج الأم منخفضة الرسوم أيضًا. النظر إلى رقم الابنة المرتفع وحده يغفل هذا الاعتماد. هذا مثال حسابي، وليس توصية بمعدل الرسوم المناسب اليوم؛ تتحقق المحفظة من الأحجام الفعلية وإجمالي الرسوم المطلوب. وجود معاملات سابقة أخرى لازمة يغيّر الحساب. وللتعمق: عند قبول الحزمة محليًا، لا تُحتسب المعاملات المقبولة سابقًا مرة أخرى، وقد تستخدم العقدة، وهي برنامج يتحقق من المعاملات ويمررها، رسومًا معدّلة. لذلك قد يختلف المعدل المعروض هناك عن الحساب الإجمالي البسيط للمعدّن. الرسوم المعدّلة هنا قيمة محلية تستخدمها العقدة لاتخاذ قراراتها، ولا تغيّر الرسوم التي تدفعها المعاملة فعليًا. [3]
ليست CPFP زرًا يتيح لأي شخص تسريع معاملة شخص آخر. يجب أن تتمكن من إنفاق أحد مخارج الأم وأن تستوفي شروطه، بما فيها التوقيعات. تستطيع آنا ذلك بصفتها المستلمة؛ وقد يتمكن المرسل من استخدام مخرج يعيد إليه ما تبقى من أمواله، ويسمى change. مجرد رؤية المبلغ في مستكشف أو في Watch-only Wallet لا يكفي. تتيح Watch-only Wallet متابعة الدفعات، لكنها لا تحتفظ بنفسها بالمفاتيح الخاصة اللازمة لإنفاق الأموال. ويجب أن تدعم المحفظة أيضًا إنفاق المخرج غير المؤكد. قبل التوقيع، تحقق من المخرج الذي ستنفقه، ووجهة الأموال، والمبلغ المتبقي، وإجمالي الرسوم. إذا كان المخرج صغيرًا، فقد تستهلك الرسوم جزءًا كبيرًا من قيمته. [5]
تنشئ Replace-by-Fee (RBF) معاملة جديدة متعارضة يُراد لها أن تحل محل الأصلية. تشترك معها في مدخل واحد مُنفق على الأقل، لكن لا يلزم أن تتطابق مجموعة المدخلات كاملة. أما CPFP فتبقي الدفعة الأصلية ومعرّفها وتضيف معاملة أخرى. تتطلب RBF استيفاء شروط مدخلات المعاملة البديلة؛ وتتطلب CPFP العادية استيفاء شروط مخرج من الدفعة الأصلية. لذلك قد يتمكن المستلم من استخدام CPFP رغم عدم قدرته على توقيع بديل المرسل. إرسال دفعة مستقلة برسوم مرتفعة لا يساعد: يجب أن تعتمد الابنة فعلًا على الدفعة المنتظرة. [3]
يمنح معدل الرسوم الإجمالي الأعلى المعدّن سببًا أقوى لاختيار المعاملتين، لكنه لا يحجز مكانًا في الكتلة التالية. قد تصل معاملات تدفع أكثر، أو لا تصل الحزمة إلى بعض المعدّنين. لذلك راقب تأكيدات الدفعة الأصلية والابنة معًا. إعلان العقدة قبول المعاملة ليس تأكيدًا لها في كتلة بعد. إذا استبدل المرسل الدفعة الأصلية عبر RBF، فلن تتمكن الابنة التي تشير إلى المخرج القديم من الارتباط تلقائيًا بالمعاملة الجديدة المختلفة؛ يجب إعادة تقييم الوضع. ولا يحوّل إنشاء الابنة أموالًا واردة غير مؤكدة إلى دفعة مضمونة. [3]
تشرح الأقسام التالية القواعد لمن يريد التعمق أو تشغيل عقدته الخاصة. Mempool هي قائمة المعاملات المنتظرة لدى عقدة محددة، وليست طابورًا موحدًا للشبكة كلها. والحزمة مجموعة معاملات تُقدَّم معًا. من المهم فصل ثلاثة قرارات: هل المعاملة صالحة، وهل تقبلها العقدة، وهل يختارها المعدّن؟ يحدد الإجماع صلاحية المعاملات والكتل. تحدد سياسة mempool القبول والترحيل محليًا، وتحدد قواعد المُعدّن الاختيار لكتلة مرشحة. لا يغيّر CPFP الإجماع. قد تخالف حزمة جذابة اقتصاديًا السياسة المحلية، ولا يُلزم قبولها لدى عقدة واحدة العقد الأخرى أو المُعدّنين. [3] [5]
تتطور طرق تمرير الأم والابنة معًا. يشير package CPFP إلى تقييم المعاملات المرتبطة كحزمة. RPC أمر للتعامل مع العقدة؛ ويشير minrelaytxfee إلى الحد الأدنى لمعدل الرسوم الذي تطلبه للتمرير العادي. TRUC نظام خاص للمعاملات يقيّد العلاقات بين المعاملات السابقة واللاحقة. يتعلق التاريخ التالي بإصدارات Bitcoin Core المذكورة. أضاف Bitcoin Core 26 واجهة RPC المسماة submitpackage وpackage CPFP: كان بإمكان الابنة مساعدة أم دون الحد الأدنى الديناميكي لمعدل رسوم mempool، لكن ليس حينها دون الحد الأدنى لمعدل رسوم الترحيل. هذا القيد ليس دائمًا. يسمح Core 31 في ترحيل الحزم المدعوم ذي أم واحدة وابنة واحدة بأم دون minrelaytxfee، حتى برسوم صفرية، ويشمل ذلك معاملات خارج TRUC؛ ويجب أن تكون الأمهات الأخرى غير المؤكدة للتابعة موجودة مسبقًا في mempool. لا يزال القبول المحلي لا يضمن انتشارًا متماثلًا عبر الشبكة كلها. [1] [2]
لا تستطيع العقدة قبول شبكات اعتماد مهما بلغ حجمها. المعاملة السابقة لازمة قبل معاملة أخرى، واللاحقة تنفق مخارج أبعد في سلسلة الاعتماد. تشير WU إلى وحدات وزن المعاملة، وتصف الطوبولوجيا طريقة ارتباط المعاملات. هذه الحدود التقنية جزء من سياسة إصدار العقدة المعني. تحمي الحدود الذاكرة وموارد المعالج وسعة الاتصال. كانت إصدارات Core الأقدم تحد أعداد الأسلاف والتوابع وأحجامها؛ واستبدل Core 31 حدود mempool تلك بحدود العناقيد المترابطة. تبقى حدود الحزمة المستقلة: تحدد وثائق Core 31 حدًا أقصى قدره 25 معاملة ووزنًا إجماليًا قدره 404000 WU. الوزن ليس الحجم الافتراضي. قد تمنع بنية غير صحيحة أو تعارض أو مخالفة للقواعد المحلية لأشكال المعاملات المقبولة (المعيارية) CPFP حتى مع رسوم كافية. [2] [3]
لا يمكن دائمًا تقييم المعاملات المنتظرة المرتبطة اقتصاديًا كلًّا على حدة. تتيح Cluster Mempool للعقدة النظر في مجموعاتها المتصلة. cluster هي المجموعة المتصلة كاملة؛ أما المجموعة الأصغر التي تُعالَج أثناء اختيار المعاملات فتسمى chunk. ليست هذه أجزاء من كتل تأكدت بالفعل. يستخدم Bitcoin Core 31 نظام Cluster Mempool: يتكون العنقود من معاملات مرتبطة بعلاقات أم وابنة في أي اتجاه. الحدود الافتراضية لكل عنقود هي 64 معاملة و101 kB من الحجم الافتراضي، ويمكن ضبطها. يراعي الترتيب مجموعات تُعدّن معًا تسمى chunks ومعدلات رسومها. أتاح CPFP carveout التاريخي استثناءً محدودًا من حد التوابع؛ وأزاله Core 31، فلا يمكن بهذه الطريقة تجاوز حد عدد معاملات العنقود. [2] [4]
أوامر هذا القسم ليست بدائل متكافئة. قد يكتفي الاختبار بوصف نتيجة، بينما قد يؤدي تقديم الحزمة فعلًا إلى قبول معاملات موقّعة وتمريرها. يعرض الحقل vsize الحجم الافتراضي. ويمكن لمحفظة عادية معالجة هذه التفاصيل نيابة عن المستخدم. في Core 31، تعرض واجهة RPC المسماة getmempoolentry معلومات عن معاملة موجودة في mempool تلك العقدة: الرسوم وvsize والتبعيات وبيانات chunk؛ وتعرض getmempoolcluster العنقود المرتبط. تجري testmempoolaccept اختبارًا محليًا دون قبول أو بث؛ وعند اختبار عدة معاملات يجب أن تسبق الأسلاف التوابع وألا تتعارض المعاملات فيما بينها أو مع mempool. تقدّم submitpackage فعليًا حزمة مدعومة لقبولها في mempool وترحيلها، وليست مجرد اختبار. افحص نتائج كل معاملة والإصدار والإعداد؛ فلا تضمن أي نتيجة إدراج المعاملة في كتلة. [2] [6] [7] [8] [9]
للحصول على صورة أوضح، اقرأ هذا المدخل مع Replace-by-Fee (RBF), Transaction Fees, Fee Rate, Mempool, معاملة, UTXO. تشير إلى هذا المدخل أيضًا Change Address, التأكيد, الإنفاق المزدوج, Fee Rate.