یک نقص فنی در بخش بهینهساز (Optimizer) زبان برنامهنویسی Vyper در نسخههای 0.3.8 تا 0.5.0b1 شناسایی شده است که میتواند پیامدهای جدی برای امنیت قراردادهای هوشمند داشته باشد.
بر اساس گزارشهای فنی، این آسیبپذیری زمانی رخ میدهد که از حالتهای بهینهسازی -O gas (حالت پیشفرض) یا -O codesize استفاده شود. در این حالت، اگر یک عبارت شرطی سهگانه (Ternary expression) شامل عملیات بیتی OR (مانند (msg.value | K) یا (len(msg.data) | K)) باشد، کامپایلر به اشتباه آن را به عنوان مقدار ثابت 1 تفسیر و کامپایل میکند.
این خطای کامپایل (Miscompilation) میتواند منجر به بروز موارد زیر شود:
- نوشتن مقادیر نادرست در حافظه (Storage writes)
- خطا در محاسبات ریاضی (Arithmetic)
- اختلال در ایندکسگذاری (Indexes)
- بازگشت مقادیر اشتباه در خروجیها یا رویدادها (Events)
نکته بسیار مهم این است که این فرآیند بدون هیچگونه هشدار یا توقف (Revert) انجام میشود. این موضوع میتواند باعث ثبت نادرست واریزیها در قراردادهای هوشمند شده و در نهایت منجر به قفل شدن دائمی سرمایهها (Lock funds) شود.