1. 6 يوليو 2022، يوم أربعاء عادي للغاية.

أنهى المبرمج شياو سان أخيرًا اختبار العقد النهائي، ولف على الكرسي الاصطناعي، وتمدد بحماس.

"حسنًا، المهمة التالية هي مهمة أخرى اليوم - بناء ونشر عقدة التوقيع المساحي لإيثريوم."

بعد شهرين، أصبحت Ethereum على وشك الدخول في عملية الدمج، حيث يمتلك Xiaosan 289 ETH كاملة في محفظته، ويخطط لاستخدامها في الإدارة المالية.

"ولكن يبدو أن هناك خطأ في محفظة دفتر الأستاذ اليوم؟ انسَ الأمر، دعنا نذهب إلى الحساب الذي نشرت فيه العقد. على أي حال، سوف يستهلك نشر العقد واختباره بعض الغاز."

بعد أن نقر على زر تشغيل سكربت التحويل، ذهب “الصغير 3” ليصنع كوب قهوة. كوب لاتيه عادي، مثل الأربعاء العادي تمامًا؛ ممل وبلا أي شيء يميّزه.

بعد ما خلّص قهوة، رجع “الصغير 3”، وهو يشرب في نفس الوقت بدأ يحدّث Etherscan، ويتحقق هل تأكدّت المعاملة التي أرسلها للتو أم لا. «همم؟ يبدو أن حساب المستلم ليس صحيحًا…»

فجأة، شعرت “الصغير 3” بصدمة داخل صدره؛ انزلق كوب القهوة الذي بيده على الأرض، وتدفّقت على الفور على أطرافه برودة تجعل الدم يتجمّد:

«انتهى كل شيء! أنا أرسلت 289 ETH إلى حساب اختبار Hardhat!»

Hardhat هو إطار تطوير الإيثيريوم الأكثر شيوعًا والاستخدامًا. يقدم مجموعة من الأدوات والميزات التي تسهّل على المطورين تطوير العقود الذكية واختبارها ونشرها على منصة الإيثيريوم.

بالنسبة للمطوّرين، لدى Hardhat أهم ميزة: إنشاء بيئة إيثروم محلية أو Fork لنسخة منها على جهازك، وذلك لاختبار العقود محليًا.

عندما تنفّذ محليًا أمر npx hardhat node،

يقوم Hardhat بإنشاء شبكة محاكاة محليًا، وفي الوقت نفسه يولّد 20 حساب EOA ثابتًا لِلاختبار مع مفاتيحها الخاصة المقابلة.

في الوقت نفسه، يقوم Hardhat أيضًا بتهيئة أرصدة قدرها 10000 ETH لهذه الحسابات الـ20 EOA، لكي يتمكن المطورون من استخدام هذه الحسابات لنشر عقود محلية وإجراء الاختبارات.

(عندي 20 حسابًا «قيمتها فوق المليار»، أنا ملك localhost!)

انتبه: هذه الشبكة المحاكاة المحلية لا علاقة لها إطلاقًا بالشبكة الرئيسية لإيثيريوم. وحتى أرصدة الـ10000 ETH الموجودة على حسابات الـ20 EOA هي أيضًا موجودة فقط محليًا.

لكن بما أن حسابات الـ20 التي تم إنشاؤها ثابتة، وأن المفاتيح الخاصة مكشوفة، ففي شبكة الإيثيريوم الرئيسية يستطيع أي شخص استخدام هذه المفاتيح الخاصة للاستيلاء على الأصول الموجودة داخل هذه الحسابات.

تخيّل مهندسًا أنه بعد الانتهاء من اختبارات العقد، نسي تبديل البيئة، وجعل بيئة الاختبار وكأنها الشبكة الرئيسية، ثم أرسل ETH إلى عشرين حساب اختبارًا… فحدثت الكارثة…

كما ورد سابقًا، في 6 يوليو من العام الماضي، أرسل صديقنا threepvault.eth مبلغ 289 ETH إلى حساب اختبار Hardhat.

0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266

ولماذا كان الحساب هو 0xf39F تحديدًا؟ لأنه أول حساب اختبار تم توليده عبر Hardhat، لذا فهو الأكثر استخدامًا.

لذلك أرجّح أن هذا المبرمج المسكين نسخ حساب الاختبار الأول ليُكمل الاختبارات، ثم نسي تبديل الإعدادات، فأرسل 289 ETH على الشبكة الرئيسية إلى عنوان حساب الاختبار هذا بالخطأ.

إذا حسبنا سعر العملة وقتها، فإن 289 ETH كانت تساوي 340 ألف دولار. والآن تصبح أكثر من 500 ألف دولار—كارثة بقيمة 3 ملايين يوان صيني تقريبًا.

ماذا حدث بعد ذلك؟ لنلق نظرة على بيانات السلسلة:

حدث هذا التحويل الخاطئ في البلوك 15086827، وكانت تلك الأيام ما يزال عصر POW في الإيثيريوم.

هذا البلوك هو بُلوك Flashbots، وقد التقطه MEV Searcher محظوظًا “فرصة” الـBackrun.

تم إدراج هذا التحويل الخاطئ داخل حزمة MEV، وتلتها مباشرةً عمليات تداول تحقق أرباحًا (arbitrage). وبعد دفع رسوم الغاز البالغة 4.8 ETH، نقل تقريبًا 284 ETH المتبقية داخل حساب اختبار Hardhat 0xf39F إلى الحساب 0x043D.

من 100 ETH إلى 10 ETH ثم إلى 1 ETH، وفي النهاية لم يترك حتى 0.1 ETH:

من هنا، كان من المفترض أن تُحسب هذه الأصول التي قيمتها بين 2 إلى 3 ملايين يوان… ذهبت أدراج الرياح بلا رجعة.

بعد 40 دقيقة من وقوع الكارثة، ظهر صاحب المظلومية مجددًا على الإنترنت.

أرسل للهاكر NFT اسمه Message In a Bottle، ويمكنه تغليف نص في صورة ثم سكِّه كـNFT.

في هذا الـNFT، وصف رحلة مشاعره من البداية إلى النهاية:

مرحبًا، كنت أحاول استيك (stake) عقدة تحقق (validator node).

اليومين… الليلة. اضطررت إلى إرسال ETH إلى محفظة ساخنة بسبب خلل في ليدجر.

كنت أعتقد أني أرسلته إلى محفظة مُنشئ العقد الخاص بي… اتضح أنه حساب اختبار Hardhat عام (public).

أنا عادة حذر جدًا (محفظة عتادية، إرسال معاملات اختبار صغيرة) لكن الليلة كنت مهملًا. يترك طعمًا سيئًا…

إذا صادفت أن رأيت هذا، فأنا أحب أن أحاول التفاوض على مكافأة أو شيء مشابه. لقد ارتكبت خطأً غبيًا جدًا.

ترجم هذا:

مرحبًا، الليلة أريد أن أستيك عقدة تحقق. وبسبب وجود خلل في ledger، كان عليّ إرسال الـeth إلى محفظة ساخنة.

اعتقدت أنني أرسلته إلى محفظة نشر عقدي… (بعد ما خلّصت التحويل) اكتشفت أنه حساب اختبار Hardhat عام.

أنا عادة حذر جدًا (محفظة عتادية، وإرسال معاملات اختبار صغيرة… إلخ) لكن الليلة كنت مهملًا جدًا. أشعر أن الأمر سيئ للغاية.

إذا كنت ترى هذا، فأنا أود جدًا محاولة التفاوض على مكافأة أو شيء مشابه. لقد ارتكبت خطأً غبيًا جدًا.

لكن الهاكر لم يهتم بطلب صاحب المظلومية.

بعد خمس ساعات من وقوع الكارثة، استيقظ مالك حساب 0x043D، أي هذا الهاكر من نوع MEVSearcher. ومن دون تردد بدأ بنقل الأصول: قسم إجمالي الـ284 ETH إلى أجزاء صغيرة وكبيرة، وكلها على دفعات، ثم حولها إلى Tornado.

لكن القصة لم تنتهِ هنا.

بعد 15 ساعة من وقوع الكارثة، عاد صاحب المظلومية إلى الظهور على الإنترنت مرة أخرى.

بعد أن فقد 289 ETH، لم أعرف كيف استطاع صاحب المظلومية أن يمر بهذه الـ15 ساعة…

الآن من المفترض أنه تقبّل حقيقة فقدان 289 ETH، لكنه لم يتقبّلها بالكامل.

اشترى صاحب المظلومية اسم نطاق ENS اسمه

سأدفع 100 ETH إذا fund سارعت بالإرجاع إلى threepvault.eth (إذا أعاد لك المال سأدفع لك 100 ETH)، وأرسلت هذا النطاق أيضًا إلى الهاكر وقدّمت له Offer الخاص به.

ربما يريد إيصال رسالة بهذه الطريقة، على أمل أن يستيقظ الهاكر ضميره أو يُظهر بعض الرحمة—أن يعيد له 189 ETH.

في مارس 2023، وبعد مرور أكثر من نصف عام على وقوع الكارثة، لم يقم الهاكر بأي حركة حتى الآن، ولا توجد أي معاملة أُرسلت، ولم تصل إلى حساب صاحب المظلومية أي إيداعات من Tornado. أظن أن القصة انتهت هنا، ولن يكون هناك أي متابعة. هذه هي الغابة المظلمة: لا أحد سيشتري خطأك، ولا يثق الناس إلا بأنفسهم.