Reentrancy چیست ؟
فرض کنید صندوقدار قبل از اینکه در دفتر بنویسد «پول این مشتری پرداخت شد»، پول را تحویل بدهد و همان مشتری بتواند دوباره درخواست برداشت کند. Reentrancy یا حمله بازدرآمدی در قرارداد هوشمند از ایدهای شبیه همین مشکل میآید: یک قرارداد هنگام تعامل با قرارداد دیگر، قبل از کامل کردن تغییرات داخلی دوباره فراخوانی میشود.
در قراردادهای هوشمند، صدا زدن یک قرارداد خارجی میتواند کنترل اجرای برنامه را موقتاً به آن قرارداد بدهد. اگر وضعیت داخلی قرارداد اول هنوز بهروزرسانی نشده باشد، قرارداد دوم ممکن است دوباره به مسیر قبلی برگردد و شرایطی را ببیند که دیگر نباید معتبر باشد.
Reentrancy فقط به انتقال ETH محدود نیست و در تعامل میان قراردادها هم میتواند رخ دهد. به همین دلیل توسعهدهندگان از الگوهای محافظتی استفاده میکنند.
برای کاربر عادی، این اصطلاح بیشتر بهعنوان یک ریسک امنیتی قرارداد اهمیت دارد.
ساده بگوییم: Reentrancy یعنی برنامه قبل از تمام کردن حسابوکتاب قبلی اجازه دهد همان مسیر دوباره وارد شود.
