Initial draft of IERC777.

This commit is contained in:
Nicolás Venturo
2019-05-16 17:05:14 -03:00
parent da16fc4480
commit 197bbfbfc6

View File

@ -1,9 +1,34 @@
pragma solidity ^0.5.0; pragma solidity ^0.5.0;
/** /**
* @dev Interface of the ERC777Tken standard as defined in the EIP. * @dev Interface of the ERC777Token standard as defined in the EIP.
*/ */
interface IERC777 { interface IERC777 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the smallest part of the token that is not divisible. This
* means all token operations (creation, movement and destruction) must have
* amounts that are a multiple of this number.
*
* For most token contracts, this value will equal 1.
*/
function granularity() external view returns (uint256);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/** /**
* @dev Returns the amount of tokens owned by an account (`owner`). * @dev Returns the amount of tokens owned by an account (`owner`).
*/ */
@ -32,11 +57,61 @@ interface IERC777 {
*/ */
function burn(uint256 amount, bytes calldata data) external; function burn(uint256 amount, bytes calldata data) external;
/**
* @devs Returns true if an account is an operator of `tokenHolder`.
* Operators can send and burn tokens on behalf of their owners. All
* accounts are their own operator.
*
* See `operatorSend` and `operatorBurn`.
*/
function isOperatorFor(address operator, address tokenHolder) external view returns (bool);
/**
* @dev Make an account an operator of the caller.
*
* See `isOperatorFor`.
*
* Emits an `AuthorizedOperator` event.
*
* Requirements
*
* - `operator` cannot be calling address.
*/
function authorizeOperator(address operator) external; function authorizeOperator(address operator) external;
/**
* @dev Make an account an operator of the caller.
*
* See `isOperatorFor` and `defaultOperators`.
*
* Emits a `RevokedOperator` event.
*
* Requirements
*
* - `operator` cannot be calling address.
*/
function revokeOperator(address operator) external; function revokeOperator(address operator) external;
/**
* @dev Returns the list of default operators. These accounts are operators
* for all token holders, even if `authorizeOperator` was never called on
* them.
*
* This list is immutable, but individual holders may revoke these via
*`revokeOperator`, in which case `isOperatorFor` will return false.
*/
function defaultOperators() external view returns (address[] memory);
/**
* @dev Moves `amount` tokens from a token holder's account (`from`) to a
* specified recipient (`to`). The caller must be an operator of `from`.
*
* If send or receive hooks are registered for the holder and receiver,
* the corresponding functions will be called with `data` and
* `operatorData`. See `IERC777Sender` and `IERC777Recipient`.
*
* Emits a `Sent` event.
*/
function operatorSend( function operatorSend(
address from, address from,
address to, address to,
@ -45,6 +120,15 @@ interface IERC777 {
bytes calldata operatorData bytes calldata operatorData
) external; ) external;
/**
* @dev Destoys `amount` tokens from a token holder's account (`from`),
* reducing the total supply. The caller must be an operator of `from`.
*
* If a send hook is registered for the holder, the corresponding function
* will be called with `data` and `operatorData`. See `IERC777Sender`.
*
* Emits a `Burned` event.
*/
function operatorBurn( function operatorBurn(
address from, address from,
uint256 amount, uint256 amount,
@ -52,18 +136,6 @@ interface IERC777 {
bytes calldata operatorData bytes calldata operatorData
) external; ) external;
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function totalSupply() external view returns (uint256);
function granularity() external view returns (uint256);
function defaultOperators() external view returns (address[] memory);
function isOperatorFor(address operator, address tokenHolder) external view returns (bool);
event Sent( event Sent(
address indexed operator, address indexed operator,
address indexed from, address indexed from,