Splicing هو تغيير مشترك في تمويل قناة Lightning: تنفق معاملة جديدة على السلسلة مخرج التمويل السابق وتنشئ مخرجًا جديدًا. ويُعد الطرفان أيضًا commitment transactions المناسبة، أي معاملات موقعة تتيح إغلاق القناة عند الحاجة. تستمر القناة نفسها، بدلًا من إغلاقها بالطريقة المعتادة ثم فتح قناة أخرى مستقلة.
يضيف splice-in أموالًا إلى رصيد الطرف المساهم، بينما ينقل splice-out جزءًا من رصيده إلى مخرج خارج القناة. تؤثر المساهمات في السعة الإجمالية أيضًا؛ وإذا تعادلت الإضافة والسحب فقد تبقى السعة كما هي. لكن موضع قفل أموال القناة على بيتكوين يتغير دائمًا إلى مخرج تمويل آخر. لا تتطلب العملية الإغلاق التعاوني المعتاد ثم فتح قناة من جديد. [1]
تدخل القناة أولًا حالة quiescence، وهي توقف قصير للتحديثات التي لا تتوافق مع هذه العملية. يرسل الطرف المبادر splice_init، ويرد الطرف الآخر برسالة splice_ack. يجب أن تتضمن المعاملة التي يبنيانها معًا مدخلًا واحدًا بالضبط ينفق مخرج التمويل القديم، ومخرجًا جديدًا واحدًا بالضبط يمول هذه القناة؛ ويمكن استخدام مداخل ومخارج أخرى لإضافة الأموال أو سحبها. بعدها تُتبادل التوقيعات المناسبة عبر commitment_signed وtx_signatures. [1]
بعد تبادل توقيعات المعاملة، يمكن استئناف المدفوعات حتى قبل بلوغ عدد التأكيدات المقبول. لذلك تحتفظ العقد بحالات الالتزام الخاصة بالتمويل الأصلي وsplice الجديد وبدائل RBF المحتملة في الوقت نفسه. يجب أن يكون الدفع صالحًا في جميع النسخ النشطة. وإذا انقطع الاتصال، فلا بد من استعادة الحالة الصحيحة للعملية الجارية؛ لا يكفي حفظ آخر معاملة وحدها. [1] [2]
يجب أن تتفاوض العقدتان على دعم option_splice، وأن تتفقا على المعاملة ومعدل الرسوم والمساهمات. يستطيع الطرف الآخر رفض الاقتراح برسالة tx_abort. وإلى أن يؤكد الطرفان splice نفسه باستخدام splice_locked، يجب أن تشمل التحديثات الجديدة جميع commitment transactions النشطة. لا يمكن تغيير رصيد الطرف الآخر من جانب واحد. [1] [3]
فعّل Core Lightning ميزة Splicing افتراضيًا في الإصدار 26.04. وأضاف الأمرين splicein وspliceout، وإمكانية نقل الأموال بين قناتين، المعروفة باسم cross-splice. ومع ذلك، يظل إصدار العقدة الأخرى ونوع القناة المدعوم عاملين مهمين. وجود ميزة بالاسم نفسه في محافظ مختلفة لا يعني تطابق إمكاناتها أو توافقها معًا. [4]
ينشئ Splicing معاملة بيتكوين، ولذلك تبقى رسوم السلسلة والتأكيدات واحتمال إعادة التنظيم أمورًا يجب التعامل معها. يتيح Eclair مثلًا rbfsplice لرفع معدل رسوم splice غير المؤكد. يجب مراعاة احتياطيات القناة، ومتطلبات المداخل المؤكدة، وحدود المساهمات ومحاولات RBF المتكررة، وحالة النسخ الاحتياطية. يغير النمط الخاص option_zeroconf افتراضات الثقة، ويحظر البروتوكول استخدام RBF فيه. [1] [5]
عندما يبلغ splice المختار عمق التأكيد المقبول، ويتبادل الطرفان splice_locked للـtxid نفسه، يمكنهما التوقف عن الاحتفاظ بالنسخ القديمة والبدائل التي لم تنجح. يتغير funding outpoint، أي المرجع إلى مخرج محدد في معاملة؛ وتتغير السعة وفق مجموع المساهمات. وفي القناة العامة يتغير أيضًا short_channel_id المستمد من المعاملة المؤكدة، ويمكن للطرفين إعداد announcement_signatures جديدة. [1]
تحقق من دعم العقدتين، وchannel_id، وإشارة funding_contribution_satoshis ومقداره، ومعدل الرسوم، والمداخل، والمخارج، والاحتياطيات، والتوقيعات. تابع txid لجميع بدائل RBF. بعد الاكتمال، قارن splice_locked وfunding outpoint الجديد، وكذلك short_channel_id إذا كانت القناة عامة. وتأكد من استئناف عمل HTLC ومن أن مخرج السحب يعود فعلًا إلى المحفظة المقصودة. [2] [1]
للحصول على صورة أوضح، اقرأ هذا المدخل مع Payment Channel, Lightning Network, UTXO, سيولة Lightning, Replace-by-Fee (RBF), Price Channel. تشير إلى هذا المدخل أيضًا سيولة Lightning.
01هل Splicing هو نفسه إغلاق القناة وفتحها؟+
لا. ينشئ Splicing معاملة بيتكوين أيضًا، لكن الطرفين ينقلان معًا القناة القائمة إلى مخرج تمويل جديد. أما الإغلاق المعتاد فينهي القناة القديمة، ويؤدي الفتح اللاحق إلى إنشاء قناة مستقلة.
02هل يمكن إضافة الأموال وسحبها؟+
نعم. المساهمة الموجبة هي splice-in، والسالبة هي splice-out. يجب أن يقبل الطرفان التغيير، وأن تراعي المعاملة الأرصدة وقواعد الاحتياطيات والرسوم. يتحدد إجمالي السعة النهائي بمجموع مساهمتي الطرفين.