Skip to content

Latest commit

 

History

History
11 lines (9 loc) · 1.4 KB

公众号.md

File metadata and controls

11 lines (9 loc) · 1.4 KB

链上储存

动态数组位置的计算公式:slot A => length,slotV = keccak256(slotA) + index

整数溢出

乘法溢出 加法溢出 减法溢出 在Solidity语言中,变量支持的整数类型步长以8递增,支持从uint8到uint256,以及int8到int256。例如,一个 uint8类型 ,只能存储在范围 0到2^8-1,也就是[0,255] 的数字,一个 uint256类型 ,只能存储在范围 0到2^256-1的数字

uint256当取最大整数值,上溢之后直接返回值为0,uint256当取0下溢之后直接返回值为2^256-1

//SPDX-License-Identifier: UNLICENSEDpragma solidity ^0.8.0;contract MyTest{ //加法溢出 //如果uint256 类型的变量达到了它的最大值(2256 - 1),如果在加上一个大于0的值便会变成0 function addOverflow() public returns (uint256 _overflow) { uint256 max = 2256 - 1; return max+1; } //减法溢出 //如果uint256 类型的变量达到了它的最小值(0),如果在减去一个小于0的值便会变成2256-1(uin256类型的最大值) function subUnderflow() public returns (uint256 _underflow) { uint256 min = 0; return min - 1; } //乘法溢出 //如果uint256 类型的变量超过了它的最大值(2256 - 1),最后它的值就会回绕变成0 function mulOverflow() public returns (uint256 _underflow) { uint256 mul = 2**255; return mul * 2; }}