# SafeNFT
"Often something that appears safe isn't safe at all."
OBJECTIVE: Claim 2 NFTs for the price of one.
// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;
import "OpenZeppelin/openzeppelin-contracts@4.4.2/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
contract SafeNFT is ERC721Enumerable {
uint256 price;
mapping(address => bool) public canClaim;
address public owner;
constructor(address _player)
ERC721("Safe Token", "SNFT") {
price = 1 gwei;
owner = _player;
}
function buyNFT() external payable {
require(price == msg.value, "INVALID_VALUE");
canClaim[msg.sender] = true;
}
function claim() external {
require(canClaim[msg.sender], "CANT_MINT");
_safeMint(msg.sender, totalSupply());
canClaim[msg.sender] = false;
}
function withdraw() public {
require(msg.sender == owner);
payable(msg.sender).transfer(address(this).balance);
}
function completed() public view returns (bool) {
return balanceOf(owner) == 2;
}
}