diff --git a/Solidity-Expert/Token-standards/erc777.md b/Solidity-Expert/Token-standards/erc777.md
new file mode 100644
index 0000000..eac66ff
--- /dev/null
+++ b/Solidity-Expert/Token-standards/erc777.md
@@ -0,0 +1,67 @@
+## ERC777
+
+
+
+* an ERC20-compatible interface
+
+* transfer tokens using a send function, similar to ether transfers
+
+* compatible with ERC820 for token contract registration
+
+* allow contracts and addresses to control which tokens they send through a tokensToSend function that is called prior to sending
+
+* enable contracts and addresses to be notified of the tokens' receipt by calling a tokensReceived function in the recipient, and to reduce the probability of tokens being locked into contracts by requiring contracts to provide a tokensReceived function
+
+* allow existing contracts to use proxy contracts for the `tokensToSend and `tokensReceived` functions
+
+* operate in the same way whether sending to a contract or an EOA
+
+* provide specific events for the minting and burning of tokens
+
+* enable operators (trusted third parties, intended to be verified contracts) to move tokens on behalf of a token holder
+
+* provide metadata on token transfer transactions in userData and operatorData fields
+
+
+
+---
+
+
+
+### ERC777 contract interface specification
+
+
+```
+interface ERC777Token {
+ function name() public constant returns (string);
+ function symbol() public constant returns (string);
+ function totalSupply() public constant returns (uint256);
+ function granularity() public constant returns (uint256);
+ function balanceOf(address owner) public constant returns (uint256);
+
+ function send(address to, uint256 amount, bytes userData) public;
+
+ function authorizeOperator(address operator) public;
+ function revokeOperator(address operator) public;
+ function isOperatorFor(address operator, address tokenHolder)
+ public constant returns (bool);
+ function operatorSend(address from, address to, uint256 amount,
+ bytes userData,bytes operatorData) public;
+
+ event Sent(address indexed operator, address indexed from,
+ address indexed to, uint256 amount, bytes userData,
+ bytes operatorData);
+ event Minted(address indexed operator, address indexed to,
+ uint256 amount, bytes operatorData);
+ event Burned(address indexed operator, address indexed from,
+ uint256 amount, bytes userData, bytes operatorData);
+ event AuthorizedOperator(address indexed operator,
+ address indexed tokenHolder);
+ event RevokedOperator(address indexed operator, address indexed tokenHolder);
+}
+```
+
+
+
+
+