智能合约中整数溢出和下溢漏洞

整数溢出和下溢:

当数学运算的结果超出整数类型所能表示的范围时,会导致数值错误地回绕,这可以被攻击者利用来获取额外的代币或资源。

溢出示例

假设我们有一个智能合约,它接收用户存款并存储在一个变量中。如果用户尝试存入的金额加上现有的余额超出了整数的最大值(在Solidity中,uint256类型的最大值是2^256-1),就会发生溢出。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract OverflowExample {uint256 public balance;function deposit(uint256 amount) public {balance += amount;}function getBalance() public view returns (uint256) {return balance;}
}

测试溢出

为了测试溢出,我们假设balance已经是uint256类型的最大值,再尝试存入任何正数,都将导致溢出,即结果将从最大值回绕到0。

// 假设balance已经是uint256的最大值
uint256 maxUint256 = type(uint256).max;
balance = maxUint256;
// 尝试存入任何正数都会导致溢出
deposit(1);
// 此时,balance将变为0

下溢示例

下溢通常发生在减法操作中,如果从一个较小的数中减去一个较大的数,结果将低于最小整数值(对于无符号整数,最小值是0),从而导致下溢。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract UnderflowExample {uint256 public balance;function withdraw(uint256 amount) public {balance -= amount;}function getBalance() public view returns (uint256) {return balance;}
}

测试下溢

在无符号整数中,下溢实际上会导致值从0回绕到最大值,但这通常不是预期的行为,因此仍然被视为错误。

// 假设balance为0
balance = 0;
// 尝试取出任何正数都会导致下溢
withdraw(1);
// 此时,balance将变成uint256的最大值

解决方案

为了避免整数溢出和下溢,Solidity提供了安全数学库SafeMath,它包含了检查溢出和下溢的整数运算函数。自Solidity 0.8.0起,安全数学操作符checkedAdd, checkedSub, checkedMul, 和 checkedDiv被引入,可以自动检测并抛出异常。

using SafeMath for uint256;function deposit(uint256 amount) public {balance = balance.checkedAdd(amount);
}function withdraw(uint256 amount) public {balance = balance.checkedSub(amount);
}

这样,如果检测到溢出或下溢,Solidity将自动抛出异常,阻止交易执行,从而保护合约免受此类错误的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

夏日骑行新宠降临!VELO Eden Angel坐垫 —— 让你的征途如诗般惬意!

夏日炎炎,是时候与维乐Eden Angel坐垫(型号VL-6319)共舞,开启一场关于自由与舒适的长途骑行盛宴!这不仅是一款坐垫,它是你探索世界、追逐夏日风光的秘密武器。    聚丙烯底壳与钢弓的精妙组合&#xff…

Soildworks学习笔记(一)

1.如何添加M3,M4等螺丝孔: 有时候异形孔向导显示灰色是因为没有退出草图选项卡,选择异形孔向导就可以进行异形孔的设定和放置: solidwork放置螺丝孔以及显示螺纹的问题_.16-m3 solidwork-CSDN博客 2.如何修剪线条: 如何倒圆角或…

20240607给Toybrick的TB-RK3588开发板在Buildroot下适配瑞芯微7.86寸QXGATFT-LCD EDP屏幕1536x2048

20240607给Toybrick的TB-RK3588开发板在Buildroot下适配瑞芯微7.86寸QXGATFT-LCD EDP屏幕1536x2048 2024/6/7 13:59 1、背光部分&#xff1a;&backlight { pwms <&pwm2 0 25000 0>; status "okay"; }; &pwm2 { status "okay&…

京准电子 GPS网络时间服务器为工业4.0保驾护航

京准电子 GPS网络时间服务器为工业4.0保驾护航 京准电子 GPS网络时间服务器为工业4.0保驾护航 工业4.0起源于 2011 年——被广泛归因于德国政府在当年汉诺威工业博览会上公布的一项战略。十三年过去了&#xff0c;制造业发生了很大变化。在许多情况下&#xff0c;工业4.0的基本…

C#面:AJAX的底层实现原理

C# AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种用于在应用程序中现异步通信的技术。它许在不刷新个页面的情况下&#xff0c;通过与服务器进行异步通信来更新部分页面内容。 C# AJAX的底层实现原理主要包括以下几个方面&#xff1a; XMLHttpRequest对…

生活中优秀学习习惯

早起&#xff1a; 23点睡--4至6点起床&#xff08;睡足7、8个钟头&#xff09;&#xff0c;起来第一件事是工作&#xff08;或学习&#xff09;。不是吃早餐&#xff0c;不是刷牙。&#xff08;空腹工作一段时间&#xff09;--做推理让头脑运作&#xff0c;不要背书&#xff0…

海康威视综合安防管理平台 多处 FastJson反序列化RCE漏洞复现

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 由于…

每日一练 2024.6.7

给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作&#xff0c;在每一步操作中&#xff0c;你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。 通过执行操作&#xff0c;删除所有 "AB" 和 "CD" 子串&#x…

如何备份和恢复华为手机?

智能手机已成为我们日常生活中不可或缺的一部分&#xff0c;它们存储着大量敏感数据。因此&#xff0c;确保数据安全&#xff0c;定期备份至关重要&#xff0c;以防手机意外丢失、损坏或被盗。 如果您拥有华为设备&#xff0c;并且正在寻找如何将华为手机备份到PC的方法&#…

爱校对繁体字校对上线——让企业文档更精准

在港澳台地区&#xff0c;企业每天都要处理大量繁体字文档&#xff0c;确保文档的准确性和专业性至关重要。爱校对全新推出的繁体字校对服务&#xff0c;专为企业设计&#xff0c;自动检测并修正拼写和语法错误&#xff0c;让您的文档管理更加轻松高效&#xff0c;提升企业形象…

ubuntu20.04 升级(卸载安装)NVIDIA 驱动程序

ubuntu20.04 升级(卸载安装)NVIDIA 驱动程序 首先确认自己所需的型号&#xff0c;然后去官网上下载对应的驱动&#xff1a;https://www.nvidia.cn/Download/index.aspx?langcn 所需安装依赖包&#xff1a; sudo apt install -y build-essential g gcc make dkms卸载旧版本的…

【权威主办|投稿优惠】2024年应用物理、力学与数学国际会议(APMM 2024)

2024年应用物理、力学与数学国际会议&#xff08;APMM 2024&#xff09; 2024 International Conference on Applied Physics, Mechanics, and Mathematics 【重要信息】 大会地点&#xff1a;南昌 大会官网&#xff1a;http://www.iacapmm.com 投稿邮箱&#xff1a;iacapmmsu…

香港优才diy推荐信很难写?看看140分获批的人怎么写!(附上模板)

大家好&#xff0c;我是已获批香港优才的糖爸。 香港优才diy推荐信作为申请材料中的重要一环&#xff0c;对于申请人过往工作的综合软实力和入境处的审核具有重要影响。如何撰写一份优秀的雇主推荐信呢&#xff1f;就我的获批经验来谈谈。 一、明确推荐信的目的 雇主推荐信的主…

外贸干货|如何提高商机转化率?

常常听到外贸业务员抱怨“询盘质量不高”、“有询盘没转化”、“有些客户只是来比价格的”……想必大家都不陌生&#xff01; 但难道只有询盘问题、客户问题吗&#xff1f;我们自身的处理真的没问题吗&#xff1f;我想只有更多的自省自查我们可以控制的问题&#xff0c;优化我们…

【位运算】个人练习-Leetcode-2897. Apply Operations on Array to Maximize Sum of Squares

题目链接&#xff1a;https://leetcode.cn/problems/apply-operations-on-array-to-maximize-sum-of-squares/description/ 题目大意&#xff1a;给定一个数组nums[]&#xff0c;给出一种操作&#xff0c;该操作选定两个不同的数组元素x, y&#xff0c;然后将其中一个变为x AN…

大模型在信用卡行业的应用探索

2022年11月&#xff0c;OpenAI发布ChatGPT3.5&#xff0c;迅速引起各界广泛关注&#xff0c;引发了人工智能领域新一轮发展热潮。ChatGPT作为一款基于人工智能技术的大语言模型&#xff08;LLMs&#xff09;&#xff0c;在文本生成、对话理解、多领域知识覆盖等方面具有卓越表现…

替代LT3741大功率20A恒压恒流驱动器

1. 产品特性(替代LT3741) ➢ CTRL 引脚对输出电流提供精确控制 ➢ 2%的电压调节精度 ➢ 6%的电流调节精度 ➢ 输入电压范围&#xff08;外接达林顿 NPN 管&#xff09;&#xff1a; 6V~40V ➢ 输入电压范围&#xff08;外接单颗 NPN 管&#xff09;&#xff1a; 5.25V~40V…

markdown图片离线备份,批量替换url

之前在某站写了很多笔记&#xff0c;最近想着迁移备份下&#xff0c;找到了接口写了个脚本将文章爬取下来了。文章是基于 Markdown 格式的&#xff0c;在写作时粘贴图片&#xff0c;直接上传到他们图床服务器了。Markdown 文本里面是个<img src"https://aaa.com/bbb.jp…

神经网络 torch.nn---Containers

torch.nn — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) nn是Neural Network的简称&#xff0c;帮助程序员方便执行如下的与神经网络相关的行为&#xff1a; &#xff08;1&#xff09;创建神经网络 &#xff08;2&#xff09;训练…

基于SpringBoot的装饰工程管理系统源码数据库

如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大&#xff0c;容错率低&#xff0c;管…