区块链众筹项目系统开发技术丨泰山众筹商城系统开发技术讲解方案

简介: 区块链众筹项目系统开发技术丨泰山众筹商城系统开发技术讲解方案

selfdestruct函数(自毁函数)由以太坊智能合约提供,用于销毁区块链上的合约系统。当合约执行自毁操作时,合约账户上剩余的以太币会发送给指定的目标,然后其存储和代码从状态中被移除。

selfdestruct函数虽然能在紧急情况下帮助开发人员删除智能合约并将合约内的余额转移到指定的地址,但这一特性也被不法分子利用,使它成为了攻击手段。

让我们来看个经典游戏“幸运7”的案例:

合约代码

漏洞分析
在“幸运7”游戏中,玩家每次向 EtherGame 合约中打入一个ETH,第七个成功打入ETH的玩家将成为 winner。winner 可以提取合约中的 7 个ETH。玩家每次玩游戏时都会调用 EtherGame.deposit 函数向合约中先打入一个ETH,随后函数会检查合约中的余额(balance)是否小于等于 7 ,只有合约中的余额小于等于 7 时才能继续否则将回滚。合约中的余额(balance)是通过 address(this).balance 取到的,这就意味着我们只要有办法在产生 winner 之前改变 EtherGame 合约中的余额让他等于 7 就会使该合约瘫痪。这样我们的攻击方向就明确了,只要我们强制给 EtherGame 合约打入一笔ETH让该合约中的余额大于7 这样后面的玩家将无法通过 EtherGame.deposit 的检查,从而使 EtherGame 合约瘫痪,永远无法产生 winner。

但是 EtherGame.deposit 函数中存在验证:require(msg.value == 1 ether, "You can only send 1 Ether"),这里要求我们每次只能打一个ETH进去,所以通过正常路径是不可能一次向 EtherGame 打入大于 1 枚的ETH的,但是我们又需要打入大于 1 枚的ETH到 EtherGame 合约中,所以selfdestruct函数就登场了。

攻击合约

攻击者调用攻击函数attack()销毁合约并将合约中的余额强制转账到“幸运7”的游戏合约地址,制造出游戏合约查询余额address(this).balance大于7的情况,导致函数回退,无法正常进行游戏的情况,使得游戏合约瘫痪。

修复建议
我们来分析一下攻击者的思路:利用selfdestruct函数强制转账给游戏地址,导致unit balance = address(this).balance查询出的balance的值大于7,诱发require(balance <= targetAmount, "Game is over");无法通过使得游戏合约瘫痪。

我们不难发现攻击者是通过影响balance从而达到目的的,那么我们就让balance不受这个影响,在最初先定义balance,再让balance的值只受通过游戏规则内的正常途径的影响,这样就不会出现balance值异常的情况了。

修复的代码:

相关文章
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
供应链 物联网 区块链
|
存储 开发框架 安全
揭秘区块链:以太坊智能合约开发的奥秘与挑战,你准备好迎接未来了吗?
【10月更文挑战第25天】本文介绍了区块链技术的基本概念及其核心特点,重点讲解了以太坊智能合约的开发流程和实际开发中的注意事项。通过安装 Truffle、Ganache 和 Remix 等工具,读者可以快速上手编写、编译、部署和测试智能合约。文章还对比了以太坊去中心化应用与传统集中式应用的优势和挑战,帮助读者全面了解以太坊智能合约开发。
384 0
|
供应链 物联网 分布式数据库
探索区块链技术与智能合约开发的边界
随着信息技术的发展,区块链作为一种分布式数据库技术正深刻影响社会。本文探讨区块链基本原理及其在金融、供应链等领域的应用,并聚焦智能合约——一种自动执行且不可篡改的代码,介绍其开发流程与丰富案例。同时,文章分析了技术与法律层面面临的挑战,展望未来发展趋势。
264 4
|
存储 安全 Java
基于Java的区块链数字身份认证系统设计与开发
基于Java的区块链数字身份认证系统设计与开发
|
区块链 C# 存储
链动未来:WPF与区块链的创新融合——从智能合约到去中心化应用,全方位解析开发安全可靠DApp的最佳路径
【8月更文挑战第31天】本文以问答形式详细介绍了区块链技术的特点及其在Windows Presentation Foundation(WPF)中的集成方法。通过示例代码展示了如何选择合适的区块链平台、创建智能合约,并在WPF应用中与其交互,实现安全可靠的消息存储和检索功能。希望这能为WPF开发者提供区块链技术应用的参考与灵感。
283 0
|
数据可视化 安全 区块链
区块链钱包浏览器开发功能,价格和时间周期
开发区块链钱包浏览器涉及账户管理、交易查询、区块浏览、智能合约查询及数据可视化等功能。价格因开发难度、需求、团队专业度及第三方服务费用而异,通常在数万至数百万元。开发周期约数月到半年,包括需求分析、设计、开发、测试和上线等阶段。
区块链钱包浏览器开发功能,价格和时间周期
|
存储 安全 区块链
SWAP交易所系统开发|区块链交易所系统开发方案
尽管Web3.0的前景仍然不确定,但像尤派数字传媒这样的先行者正在积极尝试元宇宙,并加速转型的步伐。在面对即将到来的新一代互联网时,尤派数字传媒既不会过于骄傲自大,也不会过于谨小慎微。唯有在当前基础上稳步推进,夯实基础,才能在不确定的环境中获得最大的确定性。
|
算法 区块链
区块链项目的商业模式有哪些成功案例
**评估区块链项目潜力的关键因素包括:技术创新与应用场景(如共识算法、交易速度)、团队背景与发展战略(团队经验、市场定位)、社区活跃度与合作伙伴(用户参与、合作网络)、透明度与合规性(信息透明、法规遵循)、技术可行性(技术成熟度、安全性)及商业模式与市场可行性(市场规模、用户需求)。这些综合考量帮助判断项目的成功潜力和市场前景。**
|
存储 安全 算法
如何保证区块链项目的安全性和稳定性?
**区块链安全与稳定性关键点:** - 密码学保护数据传输与存储,哈希确保不可篡改 - 安全共识算法(如PoW、PoS)保证节点共识 - 智能合约审计与应急响应机制提升安全性 - 加密、身份验证增强网络安全 - 持续技术改进,采用零知识证明、侧链 - 有效运营团队与社区参与,风险评估和维护 这些措施协同作用,确保区块链项目的稳健运行。