# ERC777 Events ###### tags: erc777, events, rengo-labs, casper-network, rust, proposal ## Events ERC777 ### Sent ``` event Sent( address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData ); ``` Emmited on token movements, when `amount` tokens are sent via `_move()` function call. ### Minted ``` event Minted( address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData ); ``` Emitted when `amount` tokens are created by `operator` and assigned to `to`. Note that some additional user `data` and `operatorData` can be logged in the event. ### Burned ``` event Burned( address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData ); ``` Emitted when `operator` destroys `amount` tokens from `account`. Note that some additional user `data` and `operatorData` can be logged in the event. ### AuthorizedOperator ``` event AuthorizedOperator( address indexed operator, address indexed tokenHolder ); ``` Emitted when `operator` is made operator for `tokenHolder`. ### RevokedOperator ``` event RevokedOperator( address indexed operator, address indexed tokenHolder ); ``` Emitted when `operator` is revoked its operator status for `tokenHolder`. ## Events ERC20 ### Transfer ``` event Transfer(address from, address to, uint256 value) ``` Emitted when `value` tokens are moved `from` account `to` another. Note that `value` may be zero. ### Approval ``` event Approval(address owner, address spender, uint256 value) ``` Emitted when the allowance of a `spender` for an `owner` is set by a call to approve. `Value` is the new allowance. ## ERC777 Functions that emit events ### Directly emit events. #### `_mint()` emit Minted(operator, account, amount, userData, operatorData); emit Transfer(address(0), account, amount); #### `_burn()` emit Burned(operator, from, amount, data, operatorData); emit Transfer(from, address(0), amount); #### `_move` emit Sent(operator, from, to, amount, userData, operatorData); emit Transfer(from, to, amount); #### `authorizeOperator()` emit AuthorizedOperator(operator, _msgSender()); #### `revokeOperator()` emit RevokedOperator(operator, _msgSender()); #### `_approve()` emit Approval(holder, spender, value); ### Indirectly emit events. #### `_send()` Emits a {Sent} and {IERC20-Transfer} events. Because calls `_move()`. #### `_spendAllowance()` Emits a {IERC20-Approval} event. Because calls `_approve()` function. #### `send()` Emits a {Sent} and {IERC20-Transfer} events. Because calls `_send()`. #### `transfer()` Emits a {Sent} and {IERC20-Transfer} events. Because calls `_send()`. #### `burn()` Emits a {Burned} and {IERC20-Transfer} events for ERC20 compatibility. Because calls `_burn()`. #### `approve()` Emits a {IERC20-Approval} event. Because calls `_approve()`. #### `transferFrom()` Emits a {Sent}, {IERC20-Transfer} and {IERC20-Approval} events. Because calls `_send()` and `_spendAllowance()`. #### `operatorSend()` Emits a {Sent} and {IERC20-Transfer} events. Because calls `_send()`. #### `operatorBurn()` Emits a {Burned} and {IERC20-Transfer} events. Because calls `_burn()`. ## Examples for ERC777Token, ERC777Recipient and ERC777Sender contract's implementations (Solidity). https://forum.openzeppelin.com/t/simple-erc777-token-example/746 ## Tests examples for ERC777 [ERC777.behavior.js](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/test/token/ERC777/ERC777.behavior.js) [ERC777.test.js](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/test/token/ERC777/ERC777.test.js)