我理解为什么以及如何使用SafeMath库。然而,我想知道是否有一种最佳实践指南,如何和何时使用该库,以及在哪些情况下不必使用。
从安全的角度来看,只要在任何手术中使用它,都是不会失败的,对吧?尽管如此,仍然有许多非常高质量的智能合同,它们在某些情况下仍然只使用库,而不是全部。我想这是为了节气?
何时和何时不使用SafeMath库,是否有任何建议或最佳实践指南?
发布于 2018-07-24 08:28:18
您可能知道,库用于输入验证。因此,当您需要验证输入时,应该使用它。
请考虑以下示例:
pragma solidity ^0.4.24;
contract MyStuff {
function safeFunc() public pure returns (uint256) {
uint256 a = 5;
uint256 b = 6;
return a + b;
}
function unsafeFunc(uint256 a) public pure returns (uint256) {
uint256 b = 6;
return a + b;
}
}safeFunc不将数字作为输入参数,因此不一定需要验证它们。您始终知道这些值是有效的,因为它们不能更改。
unsafeFunc将其中一个数字作为输入参数,因此不能确定使用该参数不会造成任何问题。恶意用户可能会提供max(uint256)作为参数,并导致溢出。
即使没有使用SafeMath (即使应该使用它),也可能是因为:
1)没有人(开发人员以外)知道存在漏洞(例如,源代码未发布)。
2)以其他方式验证输入。
( 3)开发没有意义/效益。
4)没有人注意到这种剥削
https://ethereum.stackexchange.com/questions/54998
复制相似问题