interface IERC1363Receiver {
    /**
     * @notice Handle the receipt of ERC1363 tokens
     * @dev Any ERC1363 smart contract calls this function on the recipient
     * after a `transfer` or a `transferFrom`. This function MAY throw to revert and reject the
     * transfer. Return of other than the magic value MUST result in the
     * transaction being reverted.
     * Note: the token contract address is always the message sender.
     * @param operator address The address which called `transferAndCall` or `transferFromAndCall` function
     * @param sender address The address which are token transferred from
     * @param amount uint256 The amount of tokens transferred
     * @param data bytes Additional data with no specified format
     * @return `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` unless throwing
     */
    function onTransferReceived(
        address operator,
        address sender,
        uint256 amount,
        bytes calldata data
    ) external returns (bytes4);
}
/**
 * @title IERC1363Receiver Interface
 * @author Vittorio Minacori (https://github.com/vittominacori)
 * @dev Interface for any contract that wants to support transferAndCall or transferFromAndCall
 *  from ERC1363 token contracts as defined in
 *  https://eips.ethereum.org/EIPS/eip-1363
 */
function onTransferReceived(
    address operator,
    address sender,
    uint256 amount,
    bytes calldata data
) external returns (bytes4);

/**
 * @notice Handle the receipt of ERC1363 tokens
 * @dev Any ERC1363 smart contract calls this function on the recipient
 * after a `transfer` or a `transferFrom`. This function MAY throw to revert and reject the
 * transfer. Return of other than the magic value MUST result in the
 * transaction being reverted.
 * Note: the token contract address is always the message sender.
 * @param operator address The address which called `transferAndCall` or `transferFromAndCall` function
 * @param sender address The address which are token transferred from
 * @param amount uint256 The amount of tokens transferred
 * @param data bytes Additional data with no specified format
 * @return `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` unless throwing
 */