contract OjamuToken is ERC20Snapshot, AccessControl {

    uint256 constant INITIAL_SUPPLY =  100000000 * (10**18);
    bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE");

    constructor() ERC20("Ojamu Token", "OJA") {

        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(BURNER_ROLE, _msgSender());

        _mint(_msgSender(), INITIAL_SUPPLY);
    }

    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public {
        require(hasRole(BURNER_ROLE, msg.sender), "Caller is not BURNER_ROLE");

        _burn(_msgSender(), amount);
    }

    /**
     * @dev Creates a new snapshot and returns its snapshot id.
     *
     * Emits a {Snapshot} event that contains the same id.
     */
    function snapshot() public {
        require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not DEFAULT_ADMIN_ROLE");

        _snapshot();
    }
    

}
function snapshot() public {
    require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not DEFAULT_ADMIN_ROLE");

    _snapshot();
}

/**
 * @dev Creates a new snapshot and returns its snapshot id.
 *
 * Emits a {Snapshot} event that contains the same id.
 */