سلام
تا جایی که من میدونم، وقتی میخواییم یه قرارداد هوشمند رو توی شبکه اتریوم دیپلوی کنیم، قراردادی که نوشتیم رو کامپایل میکنیم و بایت کد ایجاد شده رو میزاریم توی دیتا تراکنش و دریافت کننده تراکنش هم میزاریم روی آدرس صفر (0x0000000000000000000000000000000000000000) و تراکنش رو سابمیت میکنیم و بعد از ماین شدن تراکنش آدرسی که قرار داد در اون دیپلوی شده رو میفهمیم
حالا این قرار داد که مربوط به openGSN هستش آدرس قرار داد های تستنت و میننتش یکی هستش
سوالی که دارم اینه :
انقدر سعی تلاش کرده که تونسته همیچن کاری بکنه ( که بعید میدونم)؟
یا روش خاصی داره انجام همیچین کاری ؟
برخلاف تصور من آدرس های قرارداد های هوشمند از تابعی رندوم وابسته به زمان محاسبه نمیشه
بلکه آدرس قرارداد های هوشمند از ترکیب آدرس فرستنده تراکنش به علاوه nonce اون آدرس محاسبه میشه
و اگه آدرس فرستنده و nonce آدرس در دوشبکه یکسان باشه آدرس قرارداد هوشمند هم یکی میشه
تو این بخش از این ارائه هم به این میپردازه که آدرس های قرارداد هوشمند ها قابل محاسبه هستن ممکنه چه آسیب پذیری رو به وجود بیاره .
(فرض کنید ما یه قرارداد هوشمند داشته باشیم که کارش دیپلوی قرارداد های هوشمند دیگه باشه و لاجیک اون قرارداد هوشمندی که دیپلوی شده توسط قرارداد هوشمند اولیه این باشه که در ابتدا حتما باید 0 تا اتر داشته باشه ؛ این جاست که هکر یا هر کس دیگه ای با هر منظوری میتونه سیستم رو خراب کنه. چطوری ؟ آدرس قرارداد هوشمند اولیه رو داره و میتونه nonce اون آدرس رو هم پیدا کنه و اینطوری میتونه آدرس قرارداد های هوشمندی که قراره تو آینده دیپلوی بشن توسط این قرارداد هوشمند رو محاسبه کنه و از قبل بهشون اتر واریز کنه ، این طوری لاجیک قرارداد هوشمندی که قراره دیپلوی بشه رو شکونده(منطقش این بود که حتما باید در ابتدا صفر تا اتر داشته باشه))
دقیقا برای جلوگیری از این نوع attack هست که میگن نباید منطق قرارداد ها وابسته بالانس قرارداد باشه
این لینک خیلی جامع هست برای Smart Contract Weakness Classification که این هم یکی از مواردش هست: