Ethereum-Solidity 测验 Q29:什么是溢出/下溢?

发布: (2026年2月8日 GMT+8 01:41)
2 分钟阅读
原文: Dev.to

Source: Dev.to

溢出与下溢

溢出和下溢是当计算产生的数超出变量数据类型固定范围时出现的算术错误。

术语会发生什么示例(uint8:范围 0–255)
溢出超过最大值,数字“回绕”到最底部。255 + 1 --> 0
下溢低于最小值,数字“跳转”到最高位。0 - 1 --> 255

Solidity 0.8.0 之前的版本

在 0.8.0 之前,Solidity 不会检查这些错误。开发者必须依赖诸如 SafeMath 的库来防止溢出和下溢。

Solidity 0.8.0 及以后

从 Solidity 0.8.0 开始,编译器内置了检查。如果发生溢出或下溢,交易会自动因 Panic 错误而回滚。

unchecked

当你确信计算是安全的且想通过跳过检查来节省 gas 时,可以将代码包裹在 unchecked 块中:

// This will NOT revert; it will wrap around to 0
unchecked {
    uint8 x = 255;
    x++; 
}

类型转换注意事项

即使在 Solidity 0.8.0+,将较大类型转换为较小类型(例如 uint256uint8)仍可能在不回滚的情况下产生静默回绕。进行类型转换前,请始终确认该值在目标类型的范围内。

推荐:使用 uint256

除非有特定原因(例如将数据装入单个 32 字节存储槽),否则建议使用 uint256。其巨大的范围(2^256 - 1)使得在典型的金融应用中几乎不可能出现溢出。

0 浏览
Back to Blog

相关文章

阅读更多 »

Scrap Labs – 金属3D打印机

真实金属打印。由废料构建。 在Scrap Labs,我们的使命是通过最先进的金属打印技术赋能建设者和创作者,使其……

Power BI 中的主键和次键

Power Bi 中主键和次键的封面图片。https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2...