A token is a representation of something in the blockchain. This something can be money, time, services, shares in a company, a virtual pet, anything. By representing things as tokens, we can allow smart contracts to interact with them, exchange them, create or destroy them.
# Ethereum Token Contracts
On Ethereum there is the distinction between token contracts and the actual tokens themselves.
A token contract is a smart contract. "Sending tokens" means "calling a method on a smart contract that someone wrote and deployed". A token contract is the mapping of addresses to balances, plus some methods to add and subtract from those balances.
These balances represent the tokens themselves. Someone "has tokens" when their balance in the token contract is non-zero. These balances could be considered money, experience points in a game, deeds of ownership, or voting rights, and each of these tokens would be stored in different token contracts.
# Types of tokens
Tokens generally have two distinct types of tokens, fungible and non-fungible tokens (NFTs). Fungible goods are equivalent and interchangeable, like Ether, fiat currencies and voting rights. Non-fungible goods are unique and distinct, like deeds of ownership or collectibles. Generally for NFTs you care about which NFTs you have, while in fungible tokens you care about how much you have.
# Common Token Standards within Ethereum
ERC20: the most widespread token standard for fungible assets, albeit somewhat limited by its simplicity.
ERC721: the de-facto solution for non-fungible tokens, often used for collectibles and games.
ERC777: a richer standard for fungible tokens, enabling new use cases and building on past learnings. Backwards compatible with ERC20.
ERC1155: a novel standard for multi-tokens, allowing for a single contract to represent multiple fungible and non-fungible tokens, along with batched operations for increased gas efficiency.
Tokens - OpenZeppelin Docs