// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; /** * @title SOMA NonTransferable Security Contract. * @author SOMA.finance. * @notice Interface of the {NonTransferable} contract. */ interface INonTransferable { /** * @notice Emitted when an account has been granted whitelist. * @param account The address of the account. * @param sender The sender responsible for sending the transaction */ event Whitelisted(address indexed account, address indexed sender); /** * @notice Emitted after an account has whitelist revoked. * @param account The address of the account. * @param sender The sender responsible for sending the transaction */ event WhitelistedRevoked(address indexed account, address indexed sender); /** * @notice Gets whether or not an account has been whitelisted. * @param account The account to check against */ function whitelisted(address account) external view returns (bool); /** * @notice Whitelists an account to be able to transfer the token. * @param account The account to whitelist transfer functionality. * @custom:emits Whitelisted * @custom:requirement The function caller must have the GLOBAL_WHITELIST_ROLE or LOCAL_WHITELIST_ROLE. */ function whitelist(address account) external; /** * @notice Revokes the whitelist from an account, preventing it from transfering tokens again. * @param account The account to revoke the whitelist from. * @custom:emits WhitelistRevoked * @custom:requirement The function caller must have the GLOBAL_WHITELIST_ROLE or LOCAL_WHITELIST_ROLE. */ function revokeWhitelist(address account) external; }