一、分析
1、前置知识
上一篇我写了智能合约的重入攻击漏洞,这一篇让我们来了解一下合约另外一个漏洞--溢出漏洞。
首先我们来看看溢出是什么:
溢出(overflow) 分为两种上溢和下溢:所谓上溢是指在运行单项数值计算时,当计算产生出来的结果非常大,大于寄存器或存储器所能存储或表示的能力限制就会产生上溢,例如在 solidity 中,uint8 所能表示的范围是 0 - 255 这 256 个数,当使用 uint8 类型在实际运算中计算 255 + 1 是会出现上溢的,这样计算出来的结果为 0 也就是 uint8 类型可表示的最小值。同样的,下溢就是当计算产生出来的结果非常小,小于寄存器或存储器所能存储或表示的能力限制就会产生下溢。例如在 Solidity 中,当使用 uint8 类型计算 0 - 1 时就会产生下溢,这样计算出来的值为 255 也就是 uint8 类型可表示的最大值。
2、漏洞合约
pragma solidity ^0.7.6;
contract TimeLock {
mapping(