CSV اختصار OP_CHECKSEQUENCEVERIFY في Bitcoin Script. تتيح مع BIP 68 قفلًا نسبيًا: لا يصبح مسار إنفاق معين متاحًا إلا عندما يبلغ المخرج المؤكد العمر المطلوب. والمخرج مبلغ مستلم مع شروط إنفاقه. الانتظار وحده لا يعوّض التوقيع ولا يرسل المال.
تستطيع آنا وبيتر إنفاق العملات المحفوظة معًا باتفاقهما. ويريدان أيضًا مسار استرداد تستخدمه آنا وحدها، لكن بعد انتظار يُحسب من تأكيد المخرج المعني. تساعد CSV على فرض هذا الشرط. وبخلاف CLTV التي تحدد ارتفاعًا أو وقتًا ثابتًا، ليست الحدود هنا نقطة واحدة محددة مسبقًا في السجل كله. إنها مرتبطة بعملات بعينها. إنشاء محفظة أو إعداد توقيع أو انتظار معاملة غير مؤكدة مدة طويلة لا يحل محل نقطة البداية هذه. المحفظة تطبيق أو جهاز لاستقبال البيتكوين وإرساله. [1] [2] [8]
تجمع الكتلة معاملات في دفعة تُضاف إلى السجل المشترك. ارتفاع الكتلة هو موضعها في السلسلة. تخيّل مخرجًا تأكد عند الارتفاع 900000 وتأخيرًا مطلوبًا قدره 10 كتل. وفق هذا القفل، تكون أول كتلة ممكنة للإنفاق هي 900010. وفاصل قدره 9 كتل فقط لا يكفي. هذا ليس وعدًا بعدد دقيق من الدقائق؛ فالكتل لا تأتي على فواصل منتظمة. كما أن بلوغ العمر المطلوب ليس تأكيدًا للدفعة. يجب أن تكون المعاملة صالحة في بقية جوانبها، وأن يدرجها معدّن فعلًا في كتلة. [2] [4] [9]
يمكن ترميز التأخير بخطوات مقدارها 512 ثانية. عندها يمثل الرمز 2 مدة 1024 ثانية. لكن المقارنة ليست بين ساعتي حاسوب. البداية هي Median Time Past للكتلة السابقة للكتلة التي أكدت المخرج، والطرف الآخر هو Median Time Past للكتلة السابقة للكتلة المرشحة. إنها القيمة الوسطى لأوقات آخر ما يصل إلى 11 كتلة بعد ترتيبها. يجب أن يبلغ الفرق بين هاتين القيمتين الوسيطتين التأخير المطلوب. هذا ليس منبّهًا دقيقًا بالتوقيت المحلي. [2] [4] [7]
يمكن أن تجمع المحفظة مبالغ مستلمة سابقًا لإجراء دفعة. يشير كل مدخل معاملة إلى مخرج مستلم سابقًا، ويُقاس عمر المخرج من تأكيده في السلسلة. أما حقل nSequence فيوجد في المدخل نفسه. يحمل هذا الحقل المعلومات المستخدمة في الانتظار النسبي. لا يكفي أن يكون بعض المال قد بلغ العمر المطلوب؛ يجب استيفاء جميع الأقفال المنطبقة على المعاملة. وقد تغير إعادة تنظيم السلسلة موضع التأكيد أيضًا. لذا فإن إمكان الإنفاق سابقًا ليس خاصية لا رجعة فيها للعملة. عند إعادة التنظيم، تعتمد الشبكة فرعًا صالحًا آخر من السلسلة، فيحل محل جزء من سجل الكتل السابق. [2] [4] [9]
تتحقق Full Node من القواعد باستقلالية عبر فحوص مترابطة. تقارن CSV وفق BIP 112 معامل السكربت مع nSequence للمدخل الذي ينفق المخرج. وهي لا تحسب العمر بنفسها؛ تتولى BIP 68 ذلك عند التحقق من المعاملة. مع معامل عادي بلا علامة تعطيل، يجب ألا تقل نسخة المعاملة عن 2، وأن يكون البت 31 في nSequence غير مفعّل. البت مفتاح صغير داخل حقل عددي. يؤدي المعامل السالب أو النسخة الأقدم أو nSequence غير المتوافق إلى فشل الفحص. [1] [2] [3]
يحدد البت 22 كيفية قراءة التأخير. إن لم يكن مفعّلًا فالوحدة كتل، وإن كان مفعّلًا فالوحدة خطوات مقدارها 512 ثانية. يجب أن يستخدم معامل السكربت وnSequence النوع نفسه. فكّر في مقارنة القياسات: العدد الأكبر لا يكفي إذا كانت جهة تعدّ الكيلومترات والأخرى الساعات. هنا يكون الاختلاف بين عدد الكتل والمدة الزمنية. [1] [2] [3]
تحمل البتات الدنيا وعددها 16 طول التأخير. ويختار القناع 0x0000ffff هذا الجزء من الحقل العددي. تقارنه CSV مع نوع التأخير، ولا تعتبر كل nSequence كبير انتظارًا أطول تلقائيًا. بعد اختيار البتات المعنية، يجب ألا يتجاوز مطلب السكربت قيمة المدخل. هذا حدّ تقني مهم لمصممي المحافظ، لكن لا ينبغي للمستخدم العادي ضبطه يدويًا من دون فهم الإجراء كاملًا. [1] [2] [3]
التأخير الصفري لا يضيف انتظارًا، لكن بقية فحوص CSV العادية تبقى مطلوبة. وهناك حالة أخرى يكون فيها البت 31 مفعّلًا داخل معامل السكربت غير السالب نفسه. عندها تعمل CSV كتعليمة NOP، بلا أثر على القفل النسبي. مثل هذا المعامل لا يفرض انتظارًا. ويجب تمييزه عن العلامة نفسها في nSequence للمدخل: مع معامل عادي، يجب أن تكون علامة المدخل غير مفعّلة. [1] [3]
إذا احتاج مسار استرداد آنا إلى توقيعها، فعليها تقديمه بعد التأخير أيضًا. المفتاح الخاص قيمة عددية سرية تُستخدم لإنشاء هذا التوقيع. لن يعود مفتاح خاص مفقود، وقد يظل فرع آخر يسمح بإنفاق أبكر. أثناء تنفيذ السكربت، تترك CSV معاملها على المكدس، مساحة العمل التي تتراكم فيها البيانات؛ لذا تتبعها كثيرًا OP_DROP لإزالته. إزالة البيانات لا تمنح أحدًا حق أخذ المال. تحدد التوقيعات وبقية شروط المسار المختار ذلك الحق. [1] [3] [5]
أدخلت BIP 112 تعليمة CSV بدل OP_NOP3 بالتزامن مع BIP 68 وBIP 113. إنها قدرة نشطة، لا مجرد خطة. ومن استخداماتها قنوات الدفع في Lightning Network، حيث قد يمنح التأخير الطرف الآخر وقتًا للاستجابة، لكنه لا يرتب الاستجابة نفسها. بعد انتهاء الانتظار، تظل المعاملة بحاجة إلى البث والتأكيد. وتبقى الرسوم والبيانات المتاحة وحالة السلسلة مؤثرة. توثق Bitcoin Core v29.0 والمواصفات المذكورة تفاصيل التحقق. [1] [2] [6]
للحصول على صورة أوضح، اقرأ هذا المدخل مع CLTV, Opcode, Timelock, Bitcoin Script, Bitcoin, Full Node. تشير إلى هذا المدخل أيضًا التأكيد, Timelock, HTLC, Opcode.