diff --git a/S14_TimeManipulation/readme.md b/S14_TimeManipulation/readme.md index 3900fdb48..9e32613e9 100644 --- a/S14_TimeManipulation/readme.md +++ b/S14_TimeManipulation/readme.md @@ -28,10 +28,10 @@ tags: ## 漏洞例子 -此例子由[WTF Solidity合约安全: S07. 坏随机数](https://github.com/AmazingAng/WTF-Solidity/tree/main/32_Faucet)中的合约改写而成。我们改变了 `mint()` 铸造函数的条件:当区块时间能被 170 整除时才能成功铸造: +此例子由[WTF Solidity合约安全: S07. 坏随机数](https://github.com/AmazingAng/WTF-Solidity/tree/main/S07_BadRandomness)中的合约改写而成。我们改变了 `mint()` 铸造函数的条件:当区块时间能被 170 整除时才能成功铸造: ```solidity -contract TimeMnipulation is ERC721 { +contract TimeManipulation is ERC721 { uint256 totalSupply; // 构造函数,初始化NFT合集的名称、代号 @@ -110,8 +110,8 @@ contract TimeManipulationTest is Test { 在安装好 Foundry 之后,在命令行输入下列命令启动新项目,并安装 openzeppelin 库: ```shell -forge init TimeMnipulation -cd TimeMnipulation +forge init TimeManipulation +cd TimeManipulation forge install Openzeppelin/openzeppelin-contracts ``` @@ -139,8 +139,8 @@ Logs: Test result: ok. 1 passed; 0 failed; finished in 7.64ms ``` -我们可以看到,当我们将` block.timestamp` 修改为 17000时,铸造成功。 +我们可以看到,当我们将`block.timestamp` 修改为 17000时,铸造成功。 ## 总结 -这一讲,我们介绍了智能合约的操纵区块时间攻击,并使用 Foundry 复现了它。在合并(The Merge)之前,以太坊矿工可以操纵区块时间,如果抽奖合约的伪随机数依赖于区块时间,则可能被攻击。合并之后,以太坊改为固定 12s 一个区块,并且验证节点不能操纵区块时间。因此这类攻击不会在以太坊上发生,但仍可能在其他公链中遇到。 \ No newline at end of file +这一讲,我们介绍了智能合约的操纵区块时间攻击,并使用 Foundry 复现了它。在合并(The Merge)之前,以太坊矿工可以操纵区块时间,如果抽奖合约的伪随机数依赖于区块时间,则可能被攻击。合并之后,以太坊改为固定 12s 一个区块,并且验证节点不能操纵区块时间。因此这类攻击不会在以太坊上发生,但仍可能在其他公链中遇到。