《道德经》第三十六章第一句“将欲歙(xi)之,必固张之;将欲弱之,必固强之;将欲废之,必固兴之;将欲取之,比固与之。”Solidity的整型向上溢出就是这样的道理,你要想其失效,就得先给予它想要的,等它膨胀到超出其能够承受的范围,它就会开始失常了。而在历史上,黑客对BEC智能也曾化用过这样的技巧,使得一些合约发行的币一夜归零。这种整型溢出的错误对于合约的运行是及其危险的。
实验目的
1. 了解Solidity中的整型溢出。
2. 学会处理Solidity中整型溢出问题。
实验要求
1.查看下面的代码,按注释中的要求将三个答案分别写入注释的括号内。然后编译部署,分别调用三个函数,检查你的答案是否正确。
2.请查阅资料,理解整型溢出的原理。思考是否有防范整型溢出的方法并对上面的代码进行防溢出的优化。
以下是本次实验所使用的测试代码,请使用remix编辑器完成该实验
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.6.0;
contract demo{
//函数add将会返回什么值? (1)
function add() public pure returns (uint8 _overflow) {
uint8 max = 256 - 1;
return max + 1;
}
//函数sub将会返回什么值? (2)
function sub() public pure returns (uint8 _underflow) {
uint8 min = 0;
return min - 1;
}
//函数mul将会返回什么值? (3)
function mul_overflow() public pure returns (uint8 _overflow) {
uint8 mul = 128;
return mul*2 ;
}
}
下面是本次实验配套的教学视频:
