// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; /** * @title SOMA Mintable Security Contract. * @author SOMA.finance. * @notice Interface of the {MintableSecurity} contract. */ interface IMintableSecurity { /** * @notice Emitted after a token is minted. * @param operator The address of the operator. * @param to The seize to address that receives minted tokens. * @param value The amount of tokens minted. */ event Minted(address indexed operator, address indexed to, bytes32 id, uint256 value, bytes data); /** * @notice Emitted after a token is burned. * @param operator The address of the operator. * @param from The seize to address that receives minted tokens. * @param value The amount of tokens minted. */ event Burned(address indexed operator, address indexed from, bytes32 id, uint256 value, bytes data); /** * @notice Mints a mintable security token. * @param amount The amount of tokens to mint. * @custom:emits Minted * @custom:requirement The function caller must have the GLOBAL_MINT_ROLE or LOCAL_MINT_ROLE. */ function mint(bytes32 id, uint256 amount, bytes memory data) external; /** * @notice Burns a mintable security token. * @param amount The amount of tokens to burn. * @custom:emits Burned * @custom:requirement The function caller must have the GLOBAL_MINT_ROLE or LOCAL_MINT_ROLE. */ function burn(bytes32 id, uint256 amount, bytes memory data) external; }