Bài đăng
avatar

Một hợp đồng tiếp tục chạy sau một lời gọi thất bại hiện không có cách đáng tin cậy nào để xác định liệu bên được gọi có đã hoàn tác có chủ ý hay đơn giản là hết gas do người gửi chọn. Khoảng trống này là gốc rễ của hành vi gây rối do thiếu gas, và một đề xuất bản nháp mới cố gắng khắc phục nó ở cấp độ EVM. EIP-8456, được mở để thảo luận trên Ethereum Magicians vào thứ Hai, thêm một lệnh gọi là CALLSTATUS, tạm thời ở opcode 0xA5 với 2 gas. Nó đẩy trạng thái hoàn thành của lệnh gọi hoặc tạo gần nhất trong khung hiện tại dưới dạng ba bit. Bit 0 có nghĩa là hoàn tác, bit 1 có nghĩa là dừng bất thường như hết gas, và bit 2 có nghĩa là có điều gì đó trong khung bên dưới đã dừng. Tác giả chỉ ra rằng bằng chứng duy nhất hiện nay là phép tính gasleft() sau lời gọi, và mọi phân nhánh điều chỉnh giá gas đều đã phá vỡ các ngưỡng đó. Giá gas hai chiều được đề xuất trong EIP-8037 sẽ làm cho phép tính này yếu hơn nữa, vì nguồn dự trữ của nó không thể nhìn thấy qua opcode GAS. Vậy tại sao lại cần bit thứ ba? Hầu hết các lời gọi thực tế đều đi qua các trung gian như proxy, bao bọc functionCall của OpenZeppelin, Multicall3 hoặc trình kiểm tra chữ ký ERC-1271. Nếu chỉ báo trạng thái kết thúc của bên được gọi trực tiếp, thì một bao bọc bắt dừng do hết gas và hoàn tác với lý do sẽ trông giống như một hoàn tác có chủ ý. Bản nháp giữ một cờ dính di chuyển lên mọi khung, để người gửi chỉ kiểm soát gas không bao giờ có thể khiến người gọi đọc được một hoàn tác đơn thuần. Nó báo cáo kết quả thay vì nguyên nhân, và bên được gọi vẫn có thể tạo ra sự dừng có chủ ý bằng INVALID. Nó chỉ bảo vệ mã được viết sau khi nó được triển khai, vì các hợp đồng đã triển khai sẽ không đọc nó. Chưa có đánh giá bên ngoài nào, số opcode vẫn đang mở, và một bản mẫu cùng các bài kiểm tra cho 58 trường hợp được liệt kê vẫn đang chờ thực hiện. Liên kết - https://t.co/KnByUBgWrY

Nội dung này chỉ nhằm mục đích thông tin và giáo dục. Nội dung có thể bao gồm thông tin từ bên thứ ba, nội dung được tài trợ hoặc tài liệu quảng cáo mà nhà sáng tạo nội dung có thể nhận được thù lao. Không có nội dung nào trong nguồn cấp dữ liệu này cấu thành lời khuyên đầu tư hoặc đảm bảo lợi nhuận. Bạn hoàn toàn chịu trách nhiệm về các quyết định đầu tư của mình. Luôn luôn tự nghiên cứu và thận trọng trước khi giao dịch. Chúng tôi không đảm bảo tính chính xác của thông tin từ bên thứ ba và không chịu trách nhiệm cho bất kỳ tổn thất nào có thể phát sinh. Hiệu suất trong quá khứ không phải là chỉ báo cho kết quả trong tương lai. Vui lòng tham khảo Điều khoản Cộng đồng và Tuyên bố Tiết lộ Rủi ro của chúng tôi để biết thêm chi tiết.

avatarĐăng câu trả lời của bạn

Bình luận