// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
/**
* @title Solace Token (SOLACE)
* @author solace.fi
* @notice The native governance token of the Solace Coverage Protocol.
*/
interface ISOLACE is IERC20Metadata {
/***************************************
EVENTS
***************************************/
/// @notice Emitted when a minter is added.
event MinterAdded(address indexed minter);
/// @notice Emitted when a minter is removed.
event MinterRemoved(address indexed minter);
/***************************************
MINT FUNCTIONS
***************************************/
/**
* @notice Returns true if `account` is authorized to mint [**SOLACE**](../SOLACE).
* @param account Account to query.
* @return status True if `account` can mint, false otherwise.
*/
function isMinter(address account) external view returns (bool status);
/**
* @notice Mints new [**SOLACE**](../SOLACE) to the receiver account.
* Can only be called by authorized minters.
* @param account The receiver of new tokens.
* @param amount The number of new tokens.
*/
function mint(address account, uint256 amount) external;
/**
* @notice Burns [**SOLACE**](../SOLACE) from msg.sender.
* @param amount Amount to burn.
*/
function burn(uint256 amount) external;
/**
* @notice Adds a new minter.
* Can only be called by the current [**governor**](/docs/protocol/governance).
* @param minter The new minter.
*/
function addMinter(address minter) external;
/**
* @notice Removes a minter.
* Can only be called by the current [**governor**](/docs/protocol/governance).
* @param minter The minter to remove.
*/
function removeMinter(address minter) external;
}
|