DCIPs/assets/eip-4974/IERC4974.sol

61 lines
2.5 KiB
Solidity

// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.0;
/// @title EIP-4974 Ratings
/// @dev See https://eips.ethereum.org/EIPS/EIP-4974
/// Note: the EIP-165 identifier for this interface is #######.
/// Must initialize contracts with an `operator` address that is not `address(0)`.
interface IERC4974 /* is ERC165 */ {
/// @dev Emits when operator changes.
/// MUST emit when `operator` changes by any mechanism.
/// MUST ONLY emit by `setOperator`.
event NewOperator(address indexed _operator);
/// @dev Emits when operator issues a rating.
/// MUST emit when rating is assigned by any mechanism.
/// MUST ONLY emit by `rate`.
event Rating(address _rated, int8 _rating);
/// @dev Emits when operator removes a rating.
/// MUST emit when rating is removed by any mechanism.
/// MUST ONLY emit by `remove`.
event Removal(address _removed);
/// @notice Appoint operator authority.
/// @dev MUST throw unless `msg.sender` is `operator`.
/// MUST throw if `operator` address is either already current `operator`
/// or is the zero address.
/// MUST emit an `Appointment` event.
/// @param _operator New operator of the smart contract.
function setOperator(address _operator) external;
/// @notice Rate an address.
/// MUST emit a Rating event with each successful call.
/// @param _rated Address to be rated.
/// @param _rating Total EXP tokens to reallocate.
function rate(address _rated, int8 _rating) external;
/// @notice Remove a rating from an address.
/// MUST emit a Remove event with each successful call.
/// @param _removed Address to be removed.
function removeRating(address _removed) external;
/// @notice Return a rated address' rating.
/// @dev MUST register each time `Rating` emits.
/// SHOULD throw for queries about the zero address.
/// @param _rated An address for whom to query rating.
/// @return int8 The rating assigned.
function ratingOf(address _rated) external view returns (int8);
}
interface IERC165 {
/// @notice Query if a contract implements an interface.
/// @dev Interface identification is specified in EIP-165. This function
/// uses less than 30,000 gas.
/// @param interfaceID The interface identifier, as specified in EIP-165.
/// @return bool `true` if the contract implements `interfaceID` and
/// `interfaceID` is not 0xffffffff, `false` otherwise.
function supportsInterface(bytes4 interfaceID) external view returns (bool);
}