Solidity khắc phục lỗi trình tối ưu hóa Yul ảnh hưởng đến các phiên bản 0.8.19–0.8.37
Solidity đã sửa một lỗi mức độ nghiêm trọng thấp trong trình tối ưu hóa Yul ở phiên bản 0.8.38. Lỗi này ảnh hưởng đến các hợp đồng được biên dịch với trình tối ưu hóa Yul được bật trong Solidity 0.8.19–0.8.37. Trong một số điều kiện nhất định, dữ liệu theo dõi lỗi thời có thể khiến trình tối ưu hóa Yul xem hai vị trí bộ nhớ hoặc vùng lưu trữ là riêng biệt dù chúng thực sự chồng lấn. Điều này có thể khiến hợp đồng trả về giá trị cũ hoặc bỏ qua một thao tác ghi cần thiết.
Daniel Boye đã báo cáo vấn đề này; sau đó, Surya Prakash Akula chứng minh rằng lỗi có thể xảy ra với mã Solidity thông thường, không cần assembly nội tuyến. Các hợp đồng được biên dịch bằng `--via-ir` có thể bị ảnh hưởng trên diện rộng; với quy trình assembly EVM mặc định, phạm vi ảnh hưởng hẹp hơn. Lỗi không thể xảy ra khi tắt trình tối ưu hóa Yul.
Đợt rà soát của Solidity trên khoảng 283.000 bản biên dịch `via-ir` đã xác minh và 607.000 bản biên dịch assembly EVM không phát hiện khác biệt về bytecode khi so sánh các bản dựng có và không có bản sửa lỗi. Nhóm phát triển cho biết điều này cho thấy lỗi hiếm gặp, nhưng không đảm bảo rằng không có hợp đồng đã triển khai nào bị ảnh hưởng. Nhà phát triển nên nâng cấp lên Solidity 0.8.38 trở lên và đánh giá các hợp đồng đã triển khai được biên dịch bằng những phiên bản bị ảnh hưởng. Đối với trader, đây là cảnh báo có mục tiêu về độ tin cậy của hợp đồng thông minh, không phải dấu hiệu cho thấy mạng Ethereum hay thị trường đang gặp gián đoạn trên diện rộng.
Neutral
Thông báo này là cảnh báo bảo mật và nâng cấp dành cho nhà phát triển, không phải bằng chứng về việc khai thác lỗ hổng, sự cố ngừng hoạt động mạng hay thất thoát tiền. Solidity đánh giá lỗi có mức độ nghiêm trọng thấp và cho biết kết quả quét gần 890.000 bản biên dịch đã xác minh không phát hiện khác biệt bytecode giữa các bản dựng có và không có bản vá. Vấn đề cũng chỉ xảy ra khi đáp ứng các điều kiện cụ thể liên quan đến trình tối ưu hóa và việc gán lại địa chỉ, qua đó hạn chế phạm vi ảnh hưởng có thể xảy ra. Những chi tiết này khiến khả năng sự việc gây tác động tức thời trên diện rộng đến ETH hoặc giá toàn thị trường tiền mã hóa là thấp.
Trong ngắn hạn, các nhà giao dịch có thể theo dõi thông báo từ những dự án sử dụng Solidity 0.8.19–0.8.37, đặc biệt là các dự án được biên dịch bằng trình tối ưu hóa Yul hoặc tùy chọn `--via-ir`. Nếu một giao thức được sử dụng rộng rãi báo cáo rằng các hợp đồng đã triển khai có lỗ hổng hoặc đã phát sinh tổn thất do bị khai thác, niềm tin có thể suy yếu, dẫn đến việc bán token của các dự án cụ thể hoặc khiến biến động tăng tạm thời. Bài viết này không đề cập đến sự cố nào như vậy, vì thế chưa có cơ sở để diễn giải theo hướng tiêu cực trên diện rộng.
Về dài hạn, bản sửa lỗi trong Solidity 0.8.38 và các bước xác minh được khuyến nghị sẽ giúp giảm mức độ rủi ro khi các nhóm nâng cấp và kiểm thử những bản triển khai bị ảnh hưởng. Cũng như các thông báo về lỗ hổng trình biên dịch khác, những tín hiệu thị trường quan trọng là việc xác nhận có khai thác, TVL của các giao thức bị ảnh hưởng, các đợt tạm dừng khẩn cấp và biện pháp khắc phục của dự án — chứ không chỉ là sự tồn tại của một lỗi trình biên dịch đã được vá. Nhìn chung, tin tức này không nghiêng về hướng nào đối với thị trường, nhưng có ý nghĩa đối với việc theo dõi rủi ro hợp đồng thông minh.