MarmottoshisWLbyRpGmAx

mail@pastecode.io avatar
unknown
javascript
2 years ago
3.4 kB
10
Indexable
Never
contract MarmottoshisWLbyRpGmAx is ERC721, Ownable {
    constructor() ERC721("MarmottoshisWLbyRpGmAx", "MWL") {}

    struct Player {
        string twitter;
        uint tokenID;
        bool exists;
    }

    struct TokenMeta {
        uint tokenID;
        bool isWL;
    }

    uint constant maxWLSupply = 10;

    mapping (address => Player) Players;
    mapping (uint => TokenMeta) Tokens;

    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    Counters.Counter private _winners;

    function alreadyPlayed(address _address) public view returns(bool exists) {
        return Players[_address].exists;
    }

    function play(string memory Twitter, string memory Q1, string memory Q2, string memory Q3, string memory Q4, string memory Q5) public {
        bool isWL = true;

        if (keccak256(bytes(Q1)) != keccak256(bytes("alpha"))) { isWL = false; }
        if (keccak256(bytes(Q2)) != keccak256(bytes("beta"))) { isWL = false; }
        if (keccak256(bytes(Q3)) != keccak256(bytes("gamma"))) { isWL = false; }
        if (keccak256(bytes(Q4)) != keccak256(bytes("beta"))) { isWL = false; }
        if (keccak256(bytes(Q5)) != keccak256(bytes("alpha"))) { isWL = false; }

        uint totalMinted = _tokenIds.current();        
        uint totalWinners = _winners.current();

        require(totalWinners < maxWLSupply, "Nombre de WL max atteint");
        require(keccak256(bytes(Twitter)) != keccak256(bytes("")), "Compte Twitter manquant");
        require(!alreadyPlayed(msg.sender), "Une seule participation par personne");
        _mint(msg.sender, totalMinted);
        _tokenIds.increment();

        if (isWL == true) { _winners.increment(); }
        
        Players[msg.sender].tokenID = totalMinted;
        Players[msg.sender].twitter = Twitter;
        Tokens[totalMinted].isWL = isWL;
        Players[msg.sender].exists = true;
    }

    function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
        require(_exists(_tokenId), "Ce token n'existe pas !");
        bool isWL = Tokens[_tokenId].isWL;
        string memory json_output;

        if (isWL == true) { // WL

        json_output = Base64.encode(
            bytes(
                string(
                    abi.encodePacked('{"id":', Strings.toString(_tokenId), ', "name": "WL obtenue", "description": "Bravo :)", "image": "ipfs://bafybeielkcdabtfm4t6hkdcxvefdvew3y3nfw4feyevlebka45quof74ei"}')
                )
            )
        );

       } else { // NO WL

        json_output = Base64.encode(
            bytes(
                string(
                    abi.encodePacked('{"id":', Strings.toString(_tokenId), ', "name": "WL non obtenue", "description": "Petit lot de consolation ;)", "image": "ipfs://bafkreidqyuu2m33kg76jyxatiyyh3pajqjf3lnkjibtibynl44x2jcfd4a"}')
                )
            )
        );

       }

        return string(abi.encodePacked('data:application/json;base64,', json_output));
    }

    function getPlayerInfos(address _address) view public onlyOwner returns(string memory){
        require (Players[_address].exists, "Joueur inexistant");
        return(Players[_address].twitter);
    }

    function getTotalWinners() view public returns(uint){
        return _winners.current();
    }

}