Note
|
This document is better viewed at https://docs.openzeppelin.com/contracts/api/token/erc20 |
This set of interfaces, contracts, and utilities are all related to the ERC20 Token Standard.
Tip
|
For an overview of ERC20 tokens and a walk through on how to create a token contract read our ERC20 guide. |
There are a few core contracts that implement the behavior specified in the EIP:
-
{IERC20}: the interface all ERC20 implementations should conform to.
-
{IERC20Metadata}: the extended ERC20 interface including the
name
,symbol
anddecimals
functions. -
{ERC20}: the implementation of the ERC20 interface, including the
name
,symbol
anddecimals
optional standard extension to the base interface.
Additionally there are multiple custom extensions, including:
-
{ERC20Burnable}: destruction of own tokens.
-
{ERC20Capped}: enforcement of a cap to the total supply when minting tokens.
-
{ERC20Pausable}: ability to pause token transfers.
-
{ERC20Snapshot}: efficient storage of past token balances to be later queried at any point in time.
-
{ERC20Permit}: gasless approval of tokens (standardized as ERC2612).
-
{ERC20FlashMint}: token level support for flash loans through the minting and burning of ephemeral tokens (standardized as ERC3156).
-
{ERC20Votes}: support for voting and vote delegation.
-
{ERC20VotesComp}: support for voting and vote delegation (compatible with Compound’s token, with uint96 restrictions).
-
{ERC20Wrapper}: wrapper to create an ERC20 backed by another ERC20, with deposit and withdraw methods. Useful in conjunction with {ERC20Votes}.
-
{ERC20TokenizedVault}: tokenized vault that manages shares (represented as ERC20) that are backed by assets (another ERC20).
Finally, there are some utilities to interact with ERC20 contracts in various ways.
-
{SafeERC20}: a wrapper around the interface that eliminates the need to handle boolean return values.
-
{TokenTimelock}: hold tokens for a beneficiary until a specified time.
The following related EIPs are in draft status.
-
{ERC20Permit}
Note
|
This core set of contracts is designed to be unopinionated, allowing developers to access the internal functions in ERC20 (such as _mint ) and expose them as external functions in the way they prefer. On the other hand, ERC20 Presets (such as {ERC20PresetMinterPauser}) are designed using opinionated patterns to provide developers with ready to use, deployable contracts.
|
{{ERC20Burnable}}
{{ERC20Capped}}
{{ERC20Pausable}}
{{ERC20Snapshot}}
{{ERC20Votes}}
{{ERC20VotesComp}}
{{ERC20Wrapper}}
{{ERC20FlashMint}}
{{ERC20TokenizedVault}}
The following EIPs are still in Draft status. Due to their nature as drafts, the details of these contracts may change and we cannot guarantee their stability. Minor releases of OpenZeppelin Contracts may contain breaking changes for the contracts in this directory, which will be duly announced in the changelog. The EIPs included here are used by projects in production and this may make them less likely to change significantly.
{{ERC20Permit}}
These contracts are preconfigured combinations of the above features. They can be used through inheritance or as models to copy and paste their source code.
{{ERC20PresetMinterPauser}}
{{ERC20PresetFixedSupply}}