جلسه هشتم (اسلاید‌ها و بقیه منابع)

سلام
من یه موضوعی رو متوجه نشدم و این برام یه مشکلی به وجود اورده مشکلم اینه:
ما تو کانترکت خودمون از کانترکت ownable استفاده می کنیم تا یک تابع فقط توسط صاحب کانترکت فراخوانی بشه. حالا سیوال من اینجاست چطور یک کانترکت مهاجم نمی تونه (طبق عکس) msg.sender بشه؟مگه اول msg.sender رو برابر با owner نمیکنه کانترکت ownable تو کانتسراکتر خودش؟ وقتی مهاجم تابع finalize(عکس دوم) روفراخوانی می کنه می شه msg.sender دیگه
مرسی


1 پسندیده

داخل constructor قرار گرفتن یعنی اینکه موقع دیپلوی قرار داد اون اجرا میشه (اگه اشتباه نکنم غیر قابل تغییر هم هست ) پس هرکسی که دیپلوی کرده اون میشه owner

2 پسندیده

دقیق متوجه نشدم مگه متغیرهای توی constructor حالت داینامیک نیستن؟ اگر اینجوری باشه که تمام متغیرها ثابت می شن

1 پسندیده

درسته دینامیک هستن ولی constructor موقع دیپلوی تغییراتشو انجام میده خوب اگه یک هکر بیاد دیپلوی کنه خودش میشه owner قرار داد خودش به اون کانترکت اصلی خودت کاری نداره چون جدا فقط اون کانترکت دیپلوی شده
(منظورم از تغییر ناپذیر بالا این بود که call نمیشه کردش و جای owner زد .

1 پسندیده

ولی یک جا خوندم الان که میشه constructor parent رو call کرد حالا ولی تا یک مرحله بود اگه کسی اطلاعت دقیق تر داره که ایا میشه اینجا کانستراکتور رو کال کرد و دسترسی جا owner رو گرفت بگه

1 پسندیده

سلام
ممنون می شیم در مورد این صحبت ما کمک کنید. @shayan
مرسی

سلام
عکس یک کانترکتی که از کانترکت دیگری مشتق شده گذاشتم. تو این عکس بخش constructor دیدم اومده constructor اون قرارداد parent رو هم اورده. یعنی ما اگر از قراردادهای دیگه بخواییم ارث بری کنیم باید constructor همه اونا رو هم به constructor کانترکت خودمون بیاریم مثل عکس؟(منبع عکس : building Eth dapps)
مرسی

سلام
در اول جلسه گفته شد ترتیب ارث بری از ‌base ترین به بعد است. کسی یک سوال پرسید که وقتی A از B ارث بری کرده ، چرا ما بیاییم بعد is هم A را بنویسیم هم B رو
بعد جواب دادن که به اعضای A دسترسی داشته باشیم. خب اگر عضو private باشد که بعد ارث بری بازهم دسترسی نداریم. اگر internal باشد که بدون نوشتن A باز هم دسترسی خواهیم داشت.
من آخر نفهمیدم چرا هم از A ارث بری کنیم هم از B. بنظرم کار بیهوده ایه و پاسخ مدرس رو هم متوجه نشدم

سلام
البته میدونم خیلی دیره برای پاسخگویی(چون خیلی وقت ازش گذشته) اما الان که پست بالا اومد و دیدمش میگم که شاید به درد سایر دوستان هم بخوره زمانی.
بله، وقتی که ما از یک کانترکت بخوایم ارث بری کنیم، اگر اون کانترکت توی constructor اش ورودی بخواد بگیره، باید توی قراردادی که داره ارث بری رو انجام میده هم constructor رو بیاریم و ورودی های مورد نظر رو بهش بدیم.
حالا اگه کانترکت فرزند، خودش هم قرار باشه که constructor اش مقدار بگیره، در عین حال که به constructor کانترکت والد مقدار میدیم، باید به constructor فرزند هم مقدار بدیم

1 پسندیده

ممکنه که یک سری توابع یا متغیرها توی کانترکت A باشن اما توی B نباشن، یا بالعکس

1 پسندیده

ممنون خب اگر اون توابع یا متغیرها private باشن که در هر حالی نمیشه بهش دسترسی داشت ، اگر internal باشن که شما از B ارث بری کنی به توابع و متغیرهای A هم دسترسی خواهی داشت

contract A
contract B is A
contract C is B

اگر ممکنه مثال نقض بزنین که متوجه شم :slightly_smiling_face: