# 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;
    }
}