تغییرات سالیدیتی در ورژن 0.8.7 برای سازگاری با EIP-1559 و EIP-3198

ورژن 0.8.7 سالیدیتی
ورژن 0.8.7 سالیدیتی



سالیدیتی در ورژن0.8.7، برای پشتیبانی از آپدیت لندن تغییراتی را ارائه داده‌است، این ورژن شامل بهبودهای مختلف برای SMTChecker، تبدیل Yul به کد EVM و رفع برخی از باگ‌ها می‌باشد.

سلام دوستان ??
من سارا هستم و در این پست تغییراتِ جدیدی که زبان سالیدیتی در ورژن 0.8.7 اعمال کرده و در بلاگ سالیدیتی گزارش داده رو ترجمه کردم.
امیدوارم بتونید از این پست استفاده کنید. خوشحال میشم نظرات و انتقادات شما رو بدونم. sarabavifard@gmail.com
پی نوشت سارا: برای اینکه مطالب راستچین بمونن در ابتدای بعضی از بولت‌‌ها حرف "آ" رو قراردادم.

پشتیبانی از آپدیت لندن

سالیدتی پشتیبانی از آپکد BASEFEE (EIP-3198و EIP-1559) را افزایش می‌دهد که هزینه پایه بلاک را نشان ‌می‌دهد. از طریق block.basefee جهانی یا با استفاده از ()basefee در اسمبلی داخلی یا Yul قابل دسترسی است.

قرارداد زیر یک نمونه را نشان می‌دهد:

contract Basefee {
functionbasefee_global() external view returns (uint) {
returnblock.basefee;
      }
functionbasefee_inline_assembly() external view returns (uint ret) {
assembly{
ret := basefee()
              }
      }
}

SMTChecker

آ SMTChecker اکنون همه گزارشات اثبات نشده تارگت را در یک پیام واحد جمع می‌کند، خروجی ابزار را از بین می‌برد و خوشبختانه هرگونه اطلاعات مهم را بیشتر نمایان می کند. گزینه خط فرمان --model-checker-show-unprovedو گزینه settings.modelChecker.showUnproved=true می‌تواند برای لیست تمام تارگت‌های اثبات نشده استفاده شود.

کدگذاری SMT عملیات تقسیم و باقیمانده در واقع از کدگذاری معادل با ضرب و متغیرهای slack برای عملکرد حل کننده استفاده می‌کند. با این حال، برخی از حل کننده‌های غیر پیش فرض با کدگذاری دقیق این عملیات بهتر کار می‌کنند. گزینه خط فرمان --model-checker-div-mod-no-slacksو گزینه settings.modelChecker.divModNoSlacksبه کاربر اجازه می‌دهند تا کدگذاری دقیق را برای تقسیم و باقیمانده انتخاب کند. انتظار می‌رود این گزینه فقط در هنگام استفاده از حل کننده‌های دیگر به غیر از z3 مفید باشد.

در نهایت، اهداف underflow و overflow به طور پیش فرض دیگر بررسی نمی‌شوند. این به دنبال استفاده گسترده از چک‌های تولید شده توسط کامپایلر است که انتظار می‌رود در Solidity> = 0.8.0 رخ دهد. همچنان می‌توان با انتخاب آنها از طریق گزینه خط فرمان--model-checker-targets یا تنظیماتsettings.modelChecker.targetsچک‌های Underflow و overflowرا انجام داد.

لطفاً برای اطلاعات بیشتر در مورد این مسئله و سایر گزینه‌های بررسی مدل، مستند SMTCheckerرا در مستند سالیدیتی ببینید.

تغییرات کامل

ویژگی‌های زبان:

  • برای بازیابی هزینه پایه بلوک فعلی،block.basefee جهانی را معرفی کنید.
  • یول: برای بازیابی هزینه پایه بلوک فعلی ()basefeeرا معرفی کنید.

ویژگی‌های کامپایلر:

ویژگی‌های کامپایلر:

  • آ AssemblyStack: هنگام کامپایل کد یول، بهینه ساز مبتنی بر آپکد را نیز اجرا کنید.
  • رابط خط فرمان: گزینه --pretty-json با --standard--jsonنیز کار می کند.
  • آ EVM: نسخه EVM پیش فرض را روی "London" تنظیم کنید.
  • آ SMTChecker: به طور پیش فرض underflow و overflowرا بررسی نکنید.
  • آ SMTChecker: تارگت‌های اثبات نشده به طور پیش فرض پنهان هستند و SMTCheckerفقط تعداد تارگت‌های اثبات نشده را بیان می‌کند. آنها را می‌توان با استفاده از گزینه خط فرمان ----model-checker-show-unprovedیا گزینه settings.modelChecker.showUnproved لیست کرد.
  • آ SMTChecker: تنظیم جدید برای فعال/غیرفعال کردن رمزگذاری تقسیم و باقیمانده با متغیرهای slack. گزینه خط فرمان--model-checker-div-mod-slacksو گزینه settings.modelChecker.divModWithSlacksاست.
  • آ Yul EVM Code Transform: همچنین اسلات‌های استفاده نشده از آرگومان را برای توابع بدون متغیرهای برگشتی (تحت محدودیت‌های مشابه برای توابع با متغیرهای بازگشتی) باز کنید.
  • آ Yul EVM Code Transform: از اسلات پشته‌ای که بلافاصله غیرقابل دسترسی می‌شوند استفاده نکنید.
  • آ Yul Optimizer: آرگومان‌های تابع را جابجا کرده و متغیرها را با Stack Limit Evader (که به طور پیش فرض فعال نیست) به مِمُوری بازگردانید.

رفع باگ‌ها:

  • آ Code Generator: هنگام ارسال یک لیترالِ رشتهِ خالی به bytes.concat()، خرابی را برطرف کنید.
  • کد ساز: هنگام فراخوانی توابع محدود به ساختارها و آرایه های calldata، خطای کامپایلر داخلی را برطرف کنید.
  • آ Code Generator: هنگام انتقال یک هگز لیترالِ 32 بیتی یا یک لیترال صفر به bytes.concat() با جلوگیری از چنین لیترال‌هایی، خطای کامپایلر داخلی را رفع کنید.
  • رابط خط فرمان: گزینهoptimizer-runs-- را در حالت اسمبلی / یول اعمال کنید.
  • رابط خط فرمان: هنگام انتقال مسیر دایرکتوری به --standard-json ، خرابی را برطرف کنید.
  • رابط خط فرمان: زمانی که --standard-json ، -را به عنوان نام فایل دریافت می‌کند، JSON را از ورودی استاندارد بخوانید.
  • استاندارد JSON: شامل مکان منبع برای خطاها در فایل‌هایی با نام خالی.
  • آ Type Checker: خطای داخلی را برطرف کرده و از فراخوانی‌های استاتیک با اصلاح کننده‌های اجرا نشده جلوگیری کنید.

آ Yul Code Generator: خطای کامپایلر داخلی را هنگام استفاده از کلمه طولانی با bitwise نفی برطرف کنید.

آ Yul Code Generator: مکان رفرنس‌های منبع را برای فراخوانی با توابع داخلی ثابت کنید.

آ Yul Parser: مکان رفرنس‌های منبع را برای دستورات ifبرطرف کنید.

نسخه جدید سالیدیتی را از اینجا بارگیری کنید.

منبع