contract RootWINR is
    ERC20,
    AccessControlMixin,
    NativeMetaTransaction,
    ContextMixin,
    IMintableERC20,
    Pausable
{
    bytes32 public constant PREDICATE_ROLE = keccak256("PREDICATE_ROLE");
    uint256 private immutable _cap = 10000000000 ether;

    constructor() ERC20("JustBet", "WINR") {
        _setupContractId("JustBetRootWINR");
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(PREDICATE_ROLE, _msgSender());
        _mint(_msgSender(), 1722919230 ether);
        _initializeEIP712("JustBet");
    }

    /**
     * @dev See {IMintableERC20-mint}.
     */
    function mint(address user, uint256 amount)
        external
        override
        only(PREDICATE_ROLE)
    {
        require(totalSupply() + amount <= cap(), "Max supply of WINR reached.");
        _mint(user, amount);
    }

    function cap() public view virtual returns (uint256) {
        return _cap;
    }

    function _msgSender() internal view override returns (address sender) {
        return ContextMixin.msgSender();
    }
}
function mint(address user, uint256 amount)
    external
    override
    only(PREDICATE_ROLE)
{
    require(totalSupply() + amount <= cap(), "Max supply of WINR reached.");
    _mint(user, amount);
}

/**
 * @dev See {IMintableERC20-mint}.
 */