智能合约漏洞——uint 算术溢出

本文介绍了智能合约中算术溢出的现象,通过示例展示了无符号整数类型在加减运算中可能引发的上溢和下溢问题。例如,当超过变量所能表示的最大值时,结果会被截断导致错误。为了避免此类问题,可以使用SafeMath这样的算术运算库,确保在执行智能合约时的安全性。
摘要由CSDN通过智能技术生成

​算术溢出:指对应无符号整数类型的变量,如果某个算术计算结果超出其所能表达的数值范围,就会发生上溢和下溢的现象。

示例上溢

(uint8 A1, uint A2) = (255, 255);A1 = A1 + 1;A2 = A2 + 128;

得到结果为A1将为0,A2将为127。

A1计算过程1111 1111 + 0000 0001 = 1 0000 0000,因为uint8 只保留8位进制,“1” 就被舍弃,结果为0000 0000,即0.

A2计算过程1111 1111 + 1000 0000 = 1 0111 1111,同样保留8位进制,结果为0111 1111,即127。

示例下溢

uint8 B1;uint8 B2;B1 = B1 - 1;B2 = B2 - B1;

得到结果为B1将为255,B2将为1。

0000 0000 - 0000 0001 = 1111 1111;即255

0000 0000 - 1111 1111 = 0000 0001;即1

如何避免:使用算术运算库智能合约——SafeMath(uint专属)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值