Chuyển đến nội dung chính

Bài đăng

Hiển thị các bài đăng có nhãn tài liệu lập trình solidity

Tài liệu lập trình Solidity bài 40: Overflows & Underflows. Ngăn chặn lỗi tràn dữ liệu trong SOLIDITY

Overflows & Underflows Tài liệu lập trình Solidity bài 40: Overflows & Underflows. Ngăn chặn lỗi tràn dữ liệu trong SOLIDITY Lỗi tràn dữ liệu trong SOLIDITY Giả sử chúng ta có một uint8, chỉ có thể có 8 bit. Điều đó có nghĩa là số lớn nhất chúng ta có thể lưu trữ là số nhị phân 11111111 (hoặc ở dạng thập phân, 2 ^ 8 - 1 = 255). Hãy xem đoạn mã sau. Kết  quả của số uint 8 number = 255 ; number++; Trong trường hợp này, chúng tôi đã làm cho nó bị tràn. Vì thế biến số number này tràn ngược trở lại với giá trị bằng 0 mặc dù chúng tôi đã tăng nó lên. (Nếu bạn thêm 1 vào nhị phân 11111111, nó sẽ đặt lại về 00000000, giống như đồng hồ đi từ 23:59 đến 00:00). Một lỗi tràn dưới cũng tương tự, nếu bạn trừ 1 từ uint8 bằng 0, thì nó sẽ bằng 255 (bởi vì uints không có dấu và không thể âm). Mặc dù chúng ta không sử dụng uint8 ở đây và có vẻ như uint256 sẽ không bị tràn khi tăng 1 mỗi lần (2 ^ 256 là một con số thực sự lớn), nhưng vẫn tốt để đưa các biện pháp bảo vệ vào hợp đồng để ứng dụng D