پنج هک جالب توجه ارزهای رمزنگاری شده – قسمت هشتم
مترجم: اکرم سبزمکان
از بین رفتنِ حسابهای چندامضاییِ parity
اگرچه این مورد از نظر فنی جزو هکهای بزرگ تاریخ ارزهای رمزنگاری محسوب نمیشود، اما بیان آنچه برای کیف پولهای چندامضاییِ parity رخ داد، خالی از لطف نیست. چقدر اتفاق افتاده که شما به طور تصادفی 150 میلیون دلار را از بین برده باشید؟ این دقیقا همان چیزی است که برای کاربر «devops199» اتفاق افتاد. درست زمانیکه به طور تصادفی قرارداد زیر را خاتمه داد:
0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4.
او کمی بعد فهمید که فقط جعبه پاندورا (Pandora) را باز کرده است.
در تاریخ 20 جولای به دلیل مشکلات قبلی، یک نسخه جدید از قرارداد هوشمند کیف پول parity، منتشر شد. متأسفانه در این کد جدید، نقص بزرگی وجود داشت. مشخص شد با فراخوانی تابع initWallet ، میتوان یک کیف پول را به کیف پول چند امضایی تبدیل کرد و مالک آن شد.
Parity، از کتابخانه هدایتکننده قراردادهای هوشمند برای کیف پولهای چند امضایی خود استفاده میکرد. به این معنی که تمام کیف پولهای چندامضایی، کلیه کارهای خود را به این تک کتابخانه قراردادها ارجاع میدادند. در اصل، تمام کیف پولهای چند امضایی parity ، یک نقطه شکست داشتند و آن هم آدرس موجود در کدهای سالیدیتیِ کتابخانهی کیف پولها بود:
constant _walletLibrary = 0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4
براساس نوشته یکی از کاربران Reddit، به نام «ItsAConspiracy»، دلیل انجام این طراحی، صرفهجویی در هزینه gas بود. در واقع آنها به جای کپی و پیست کردن یک کد در هر کیف پول چند امضایی، از یک کتابخانه به عنوان یک «فضای مشترک» برای تمام کیف پولها استفاده کردند.
بنابراین به جای آنکه یک کد را در هر کیف پول تکرار کنند، یک مکان مشترک وجود داشت که هر کیف پول میتوانست در آن عمکردهایی را به انجام برساند. این کار برای صرفه جویی در میزان gas و فضای ذخیرهسازی صورت گرفته بود.
با این حال، یک نقص مهم و حیاتی وجود داشت که توسط کاربر، به طور ناخواسته، مورد سوءاستفاده قرار میگرفت.
در واقع کاربر میتوانسته به عنوان یک کیف پول، کتابخانه را مقداردهی کند و از تمام قابلیتهای صاحب آن نیز بهره ببرد، از جمله حق از بین بردن کامل آن.
تمام قراردادهای سالیدیتی دارای تابع خاتمه (kill) هستند.
به نمونه زیر توجه کنید:
تابع kill برای اتمام قراردادها و انتقال باقیمانده توکنها به خالقشان وجود دارد.
هنگامی که کاربر کیف پول را از بین ببرد، اساسا کتابخانه و تمام توابع منطقی مرتبط با آن را از بین برده است. این بدان معنی است که تمام کیف پولهای متصل به کتابخانه، بیاستفاده شده و حدود 150 میلیون دلار از بین رفته است.
پیامد
Parity در مورد این اتفاق در توییتر نوشت:
همانطور که در بالا نوشته شده، کماکان تمام داراییها مسدودند. از آنجا که اتریوم غیرقابل تغییر است، این عمل قابل لغو نیست و تنها راه بازگرداندن سرمایههای از دسترفته، یک هاردفورک است.
نظر جامعه اتریوم در مورد این موضوع دوگانه بود، بسیاری از نظرسنجیهای توییتر، آمار 50-50 مخالفین و موافقین راهحل هاردفورک را نشان میداد. یک مثال از چنین نظرسنجیهایی را در زیر میبینید:
در حال حاضر، 150 میلیون دلار اتر در جایی قرار دارد که هیچکس نمیتواند ادعای مالکیت آن را داشته باشد.
منبع: blockgeeks