《道德经》第三十六章第一句“将欲歙(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 ;
	}
}

下面是本次实验配套的教学视频: