الإنفاق المزدوج لا يعني إنشاء بيتكوين جديدة. ينشئ المرسل معاملتين تحاولان إنفاق مبلغ واحد على الأقل من الأموال نفسها التي تلقاها سابقًا. قد تنتشر المعاملتان في الشبكة، لكن لا يمكن أن تكونا صحيحتين في السجل نفسه. قبول دفعة دون تأكيد، أو zero-conf، يعني التصرف قبل أن يتضح أي خيار سيبقى.
لنفترض أن لدى توم مخرجًا تلقاه سابقًا بقيمة 100 000 sat، وهي أصغر وحدات بيتكوين. يُسمى هذا المخرج الذي لم يُنفق بعد UTXO. يُعدّ توم دفعة ترسل إلى أليس 99 000 sat وتترك 1 000 sat رسومًا. لكنه يستطيع أيضًا توقيع معاملة أخرى تنفق UTXO نفسه وترسل المال إلى وجهة مختلفة. المعاملتان تستخدمان مصدر الأموال نفسه، ولذلك تتعارضان. الأمر ليس كنسخ ملف: عقدة Bitcoin، وهي حاسوب يتحقق من القواعد، لن تسمح بإنفاق المخرج نفسه مرتين في سلسلة صحيحة واحدة. ينجح الاحتيال إذا سلّمت أليس السلعة مقابل الدفعة الأولى، بينما استقر السجل المقبول على الثانية. لم تظهر عملات جديدة؛ بل اعتمدت أليس على الخيار الخاسر. تقنيًا، يشير كل مدخل إلى مخرج سابق باستخدام معرّف معاملته txid ورقم المخرج. ويُسمى هذا الزوج outpoint. [1] [3] [7]
قد ترى أليس دفعة واردة خلال ثوانٍ. لكن ذلك لا يعني أنها سُجلت في كتلة. Mempool هو مخزون العقدة المحلي للمعاملات غير المؤكدة؛ لا يوجد Mempool عالمي واحد ولا ترتيب وصول مشترك لكل شبكة Bitcoin. ربما تلقت عقدة أخرى المعاملة المتعارضة أولًا، أو لم تر معاملة أليس بعد. سياسة first-seen تعطي الأولوية عند إعادة الإرسال للخيار الذي وصل أولًا. لكنها لا تعد بأن يضعه أحد المعدّنين في كتلة. لذا لا تكفي صورة شاشة المحفظة أو txid وحده لإثبات التسوية. المهم هو حالة تلك الدفعة المحددة في سلسلة جرى التحقق منها بصورة موثوقة. [2] [5]
قد تكون أليس هي من ترسل دفعة سليمة تنتظر منذ وقت طويل. تسمح Replace-by-Fee، أو RBF، باستبدال معاملة غير مؤكدة بأخرى، عادة برسوم أعلى. ويمكن أن يحصل المستلم على المبلغ نفسه رغم تغير txid. يستخدم البديل جزءًا من الأموال نفسها على الأقل، ولذلك يتعارض تقنيًا مع الأصل، حتى إن لم يحاول أحد خداع المستلم. المهم محتوى الدفعة الجديدة وظروفها، لا مجرد علامة RBF. لكن الآلية نفسها قد تُستخدم أيضًا لتوجيه المال إلى مكان آخر. أصبحت Full-RBF السياسة الافتراضية في Bitcoin Core منذ الإصدار 28؛ وهي لا تشترط أن تشير المعاملة الأصلية إلى قابليتها للاستبدال. ويظل البديل ملزمًا بقواعد العقدة الخاصة بالرسوم ومنع إساءة الاستخدام. لذلك لا يجعل غياب إشارة RBF دفعةً غير مؤكدة غير قابلة للتراجع. [5] [6] [15]
تكتسب الدفعة تأكيدًا حين تدخل كتلة صحيحة تقبلها العقدة. وعادة تجعل الكتل التالية استبدال هذا السجل أصعب، فتقلل خطر نجاح الاحتيال. لكن لا يوجد عدد آمن لكل الحالات. خسارة ثمن قهوة تختلف عن تسليم سيارة أو السماح بسحب كبير من منصة تداول. التأكيدات الستة التي يكثر ذكرها عرف متبع، وليست قاعدة في Bitcoin. ينبغي مراعاة القيمة، وإمكان تعويض الضرر، والسلوك غير المعتاد للسلسلة، وجودة مصدر المعلومات. عزل العقدة، المعروف باسم Eclipse Attack، قد يشوّه رؤيتها للشبكة. لذلك يجب أن يصاحب الانتظارُ التحققَ، لا أن يحل محله. [2] [10]
انتقال العقدة إلى فرع صحيح آخر يُسمى إعادة تنظيم. يثبت Proof of Work العمل اللازم لإنتاج الكتل، ويُسمى العمل المتراكم للفرع chainwork. بعد تأكيد الدفعة، لا يعود من الممكن إلغاؤها باستبدال معاملة في Mempool. يجب أن يستبعد فرع بديل صحيح الدفعة الأصلية، ويضم الإنفاق الآخر، ويراكم عملًا أكثر، أي chainwork أكبر، من السلسلة النشطة لدى المستلم. ويمكن أن تحدث إعادة تنظيم للسلسلة دون احتيال، مثلًا عند تعدين كتل في أوقات متقاربة جدًا أو بسبب خلل في البرمجيات أو الشبكة. ولا يُعد الإنفاق المزدوج ناجحًا ضد الضحية إلا إذا حصل المهاجم على قيمة بفضل فوز المعاملة المتعارضة. قد يعرض Bitcoin Core عددًا سالبًا من التأكيدات في الحقل confirmations للمعاملة الخاسرة في المحفظة، ويعرض التعارضات المرتبطة بها في الحقل walletconflicts. [4] [7] [8]
Hashrate هو سرعة الحسابات أثناء التعدين. الحصة الأكبر تساعد في السباق على السجل، لكنها لا تعفي من القواعد الأخرى. يتوقف احتمال أن يلحق الفرع المُعدّن سرًا بالسلسلة الناتجة عن التعدين الأمين، من بين عوامل أخرى، على حصة المهاجم من قدرة الشبكة الحسابية وعدد التأكيدات. أما القيمة التي يمكن أن يحصل عليها فتؤثر أساسًا في جدوى الهجوم اقتصاديًا. حصة أقل من 50 % لا تعني انعدام فرصة النجاح؛ أما الاحتفاظ بالأغلبية فيزيد كثيرًا احتمال اللحاق بالفرع الآخر. لكن حتى الأغلبية لا تتيح للمعدّنين تزوير التوقيعات، أو إنفاق UTXO يخص الآخرين، أو مخالفة قواعد الإصدار، أو إجبار العقد الكاملة على قبول كتلة غير صالحة. عند تقييم الهجوم، يجب احتساب القدرة الحسابية والطاقة والمكافآت التي يفوّتها المهاجم بترك التعدين الأمين. ويهم أيضًا رأس المال المتاح وخطر الفشل واحتمال انكشاف الهجوم. وقد يشمل العائد أرباحًا من مراكز في الأسواق المالية، ولذلك لا تكفي أسعار استئجار أجهزة التعدين وحدها للتقدير. [1] [10] [12]
تعني race هنا سباق التوقيت: قد يرى المستلم والمعدّنون معاملتين مختلفتين أولًا. في race attack، أي هجوم السباق، يرسل الدافع معاملة إلى التاجر ومعاملة متعارضة إلى المعدّنين أو عقد أخرى. ويحاول أن يجعل التاجر يسلّم البضاعة بصورة لا يمكن التراجع عنها قبل أن تختار كتلة أحد الخيارين. تعتمد النتيجة على انتشار المعاملات، وما يراه التاجر من الشبكة، واختيار المعدّنين، وتوقيت تسليم البضاعة. تحسّن مراقبة الشبكة عبر عدة عقد مستقلة اكتشاف التعارضات، لكنها لا تضمن تسوية لا رجعة فيها. تصف أسماء race وFinney وVector76 سيناريوهات هجوم، ولا تمثل حقول بيانات في المعاملة أو قواعد إجماع مختلفة. [2] [11]
Finney attack اسم سيناريو يتحكم فيه المهاجم بقدرة تعدين أيضًا. وهو ليس رفع الرسوم المعتاد في المحفظة. في Finney attack، يبدأ مهاجم قادر على التعدين بتعدين كتلة سرًا، تتضمن معاملة متعارضة تعيد القيمة إليه. ثم يدفع باستخدام UTXO نفسه إلى تاجر يقبل الدفعات دون تأكيد، وينشر الكتلة المخفية بعد استلام البضاعة. لا تنجح الخطة إلا إذا بقيت الكتلة قابلة للاستخدام وقبلتها الشبكة قبل أن تُفشل كتلة منافسة عُدّنت بأمانة تلك الاستعدادات. لذلك يخاطر المهاجم بمكافأة الكتلة وتكاليف التعدين. انتظار إدراج معاملة التاجر في كتلة جرى التحقق منها يوقف هذا الأسلوب التقليدي، لكنه لا يزيل خطر إعادة تنظيم السلسلة لاحقًا. [1] [11]
RPC هي الواجهة البرمجية للعقدة. الأسماء التالية أوامر وحقول لمطوري أنظمة الدفع، وليست نوعًا آخر من التأكيد. يمكن لنظام التاجر أن يراقب الإنفاقات المتعارضة في Mempool عبر عقدته الكاملة، ويستدعي gettxspendingprevout، ويقرأ الحقل walletconflicts، ويقارن أحدث كتلة في السلسلة النشطة، وينبّه عند فقدان التأكيدات. تقلل زيادة عدد العقد المتصلة أو المستقلة من المناطق غير المرئية، لكن عدم اكتشاف تعارض دليل ضعيف على الأمان؛ فقد يحتفظ المهاجم بالمعاملة المتعارضة دون نشرها أو يرسلها عبر مسار آخر. يعرض مستكشف الكتل ما تراه عقدته هو، وقد يتأخر. يتيح اكتشاف التعارض وقف تسليم البضاعة، لكنه لا يمكّن من إملاء المعاملة التي يختارها المعدّنون، ولا يجعل الدفعة غير المؤكدة مساوية للدفعة المؤكدة. [8] [9] [11]
تحقق من الدفعة الواردة فعلًا، ووجهتها ومبلغها وتأكيداتها. إيصال يقدمه المرسل لا يغني عن ذلك. تتيح لك عقدة كاملة تملكها التحقق من القواعد مباشرة. وعند استخدام خدمة أخرى، افهم على من تعتمد في المعلومات وحفظ الأموال إن كانت الخدمة تتولاّه. على نظام التاجر ربط الطلب بمخرجات محددة ومتابعة بدائل المعاملة أيضًا. يجب أن يوقف التعارض أو فقدان التأكيدات أي تسليم لا يمكن التراجع عنه. دفعة لاحقة تنفق مبلغًا متبقيًا غير مؤكد تعتمد على المعاملة الأصلية، وليست دليلًا مستقلًا على أمانها. تتيح Lightning Network دفعات سريعة عبر قنوات تموّلها معاملة Bitcoin. يتبادل طرفا القناة معاملات commitment موقّعة تسجّل كيفية توزيع الأموال. وعند التحديث، يسلّمان الطرف الآخر بيانات سرية تتيح فرض عقوبة إذا نشرا لاحقًا حالة قديمة؛ ويُسمى إبطال الحالة السابقة بهذه الطريقة revocation. وتتطلب الحماية اكتشاف المحاولة والرد عليها في الوقت المناسب. هذه آلية مختلفة عن تسليم البضاعة مقابل تحويل غير مؤكد على السلسلة. القناة المفتوحة دون تأكيد، أو zero-conf channel، تثق عمدًا بالطرف الذي يمولها، ولا تزيل خطر إنفاق هذا التمويل مرتين. [13] [14]
للحصول على صورة أوضح، اقرأ هذا المدخل مع معاملة, التأكيد, Mempool, Proof of Work, Replace-by-Fee (RBF), Bitcoin. تشير إلى هذا المدخل أيضًا التأكيد, Reorg, Stale Block, Replace-by-Fee (RBF).