// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {ERC721URIStorage} from '@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol'; import {ERC721} from '@openzeppelin/contracts/token/ERC721/ERC721.sol'; import {Counters} from '@openzeppelin/contracts/utils/Counters.sol'; /// @title VotingPrizeNFT contract VotingPrizeNFT is ERC721URIStorage { using Counters for Counters.Counter; Counters.Counter private _tokenIds; address public owner; address public voting; string public metadataURI; constructor(string memory _metadataURI) ERC721('VotingPrizeNFT', 'Prize') { owner = msg.sender; metadataURI = _metadataURI; } function setVotingAddress(address _voting) public { require(msg.sender == owner); voting = _voting; } function awardItem(address winner) public returns (uint256) { require(msg.sender == voting); uint256 newItemId = _tokenIds.current(); _mint(winner, newItemId); _setTokenURI(newItemId, metadataURI); _tokenIds.increment(); return newItemId; } }