Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
actions-user committed Apr 4, 2024
2 parents ce533a6 + bbeafe3 commit 76c9591
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions S14_TimeManipulation/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -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合集的名称、代号
Expand Down Expand Up @@ -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
```

Expand Down Expand Up @@ -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 一个区块,并且验证节点不能操纵区块时间。因此这类攻击不会在以太坊上发生,但仍可能在其他公链中遇到。
这一讲,我们介绍了智能合约的操纵区块时间攻击,并使用 Foundry 复现了它。在合并(The Merge)之前,以太坊矿工可以操纵区块时间,如果抽奖合约的伪随机数依赖于区块时间,则可能被攻击。合并之后,以太坊改为固定 12s 一个区块,并且验证节点不能操纵区块时间。因此这类攻击不会在以太坊上发生,但仍可能在其他公链中遇到。

0 comments on commit 76c9591

Please sign in to comment.