Solidity
數學運算後需要檢查^0.8
我正在查看一些協議合約,我已經看到他們使用*require()*語句檢查了非常明顯的數學運算。本合約使用solidity 0.8.11
uint256 id = vaultCount; vaultCount = vaultCount + 1; require(vaultCount >= id);
這是什麼原因?我知道由於不足和溢出,在 0.8 之前需要這樣做。但為什麼現在需要它?
有兩種解釋,這兩種解釋都是藉口而不是理由
- 他們為 Solidity < 0.8 編寫了合約,這意味著它沒有內置的溢出檢查。然後當他們移植到 0.8.11 時,他們沒有註意到這一點(我過去一直對此感到內疚。)
- 他們只是不知道 Solidity >= 0.8 已內置溢出檢查
更清楚地說,要回答您的問題,絕對沒有必要,而且重新進行編譯器已經做過的檢查是在浪費精力