寻找智能合约bug可能是一项高回报的工作,而且它也保护了生态系统免受黑客攻击。我最近有幸采访了一位开发人员,他发现了一个价值 70 亿美元的错误,并因报告该错误而获得了 220 万美元的报酬。在这篇文章中,我将详细介绍该开发人员发现的 bug 的过程,以及它如何有可能损害 70 亿美元的价值,然后再提供一些可帮助你查找错误的策略和工具。让我们开始吧。Polygon 智能合约 bug 案例背景2020 年 5 月 31 日,Matic 区块链上线(Matic 后来更名为Polygon)。 Polygon 是一种与 EVM 兼容的区块链,以其低 gas 费用和短块时间而闻名。该链最近开始探索zk-rollup 技术。如果你查看 Polygon 的“创世”区块,即区块链的第一个区块,你将看到 10 笔交易。其中一笔交易创建了一个名为 MRC20 的合约。Polygon 创世区块这个智能合约是什么?当我们发送原生区块链通证时,我们必须花费 gas。因此,Polygon 团队部署了一个合约,允许你签名一项交易以向某人发送 ETH,而其他人则可以支付这笔交易的 gas 费。这种功能被称为“元交易”,随着EIP-712的推出而普及。你可以看到,该合约获得了近 100 亿个 MATIC 通证,以帮助促进这些无需 gas 的交易。然而,这个设计精巧的合约却包含一个 bug ,而这个 bug 可能会被利用来盗走全部余额!2021 年 12 月 3 日,故事的主人公、伪匿名开发者Leon Spacewalker向Immunefi bug 赏金计划提交了一份报告,详细介绍了这个函数的问题。第二位英雄,我们称之为 Whitehat2,也在一天后报告了该 bug 。在该链于2021 年 12 月 5 日最终分叉、回滚和修复之前,大约有 800,000 个 MATIC 被盗。这次事件给我们抛出了很多问题: bug 是什么?它是如何长期未被发现的?它是怎么被发现的?bug 利用以下是发送无 gas 交易的函数  function transferWithSig(       bytes calldata sig,       uint256 amount,       bytes32 data,       uint256 expiration,       address to) external returns (address from) {       require(amount > 0);       require(           expiration == 0 || block.number
文章来自:https://www.bitpush.news/articles/3561545?from=listen

更新日期: 2023-01-15 02:17:03
文章标签:
文章链接: 发现智能合约中的 bug 的 7 个方法  [复制链接]
站方声明: 除特别标注, 本站所有文章均为原创, 互联分享, 尊重版权, 转载请注明.