ERC20
Inherits: IERC20
State Variables
ERC20TOKEN_ERC1820_INTERFACE_ID
bytes32 private constant ERC20TOKEN_ERC1820_INTERFACE_ID = keccak256("ERC20Token");
_balances
mapping(address => uint256) internal _balances;
_allowances
mapping(address => mapping(address => uint256)) internal _allowances;
_totalSupply
uint256 internal _totalSupply;
_name
string internal _name;
_symbol
string internal _symbol;
_decimals
uint8 internal _decimals;
Functions
constructor
Sets the values for name and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction.
constructor(string memory name_, string memory symbol_, uint8 decimals_);
name
Returns the name of the token.
function name() public view returns (string memory);
symbol
Returns the symbol of the token, usually a shorter version of the name.
function symbol() public view returns (string memory);
decimals
Returns the number of decimals used to get its user representation.
For example, if decimals equals 2, a balance of 505 tokens should
be displayed to a user as 5,05 (505 / 10 ** 2).
Tokens usually opt for a value of 18, imitating the relationship between
Ether and Wei. This is the value ERC20 uses, unless {_setupDecimals} is
called.
NOTE: This information is only used for display purposes: it in
no way affects any of the arithmetic of the contract, including
{IERC20-balanceOf} and {IERC20-transfer}.
function decimals() public view returns (uint8);
totalSupply
See IERC20-totalSupply.
function totalSupply() public view override returns (uint256);
balanceOf
See IERC20-balanceOf.
function balanceOf(address account) public view virtual override returns (uint256);
transfer
*See IERC20-transfer. Requirements:
recipientcannot be the zero address.- the caller must have a balance of at least
amount.*
function transfer(address recipient, uint256 amount) public virtual override returns (bool);
allowance
See IERC20-allowance.
function allowance(address owner, address spender) public view virtual override returns (uint256);
approve
*See IERC20-approve. Requirements:
spendercannot be the zero address.*
function approve(address spender, uint256 amount) public virtual override returns (bool);
transferFrom
*See IERC20-transferFrom. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements:
senderandrecipientcannot be the zero address.sendermust have a balance of at leastamount.- the caller must have allowance for
sender's tokens of at leastamount.*
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool);
increaseAllowance
*Atomically increases the allowance granted to spender by the caller.
This is an alternative to approve that can be used as a mitigation for
problems described in {IERC20-approve}.
Emits an {Approval} event indicating the updated allowance.
Requirements:
spendercannot be the zero address.*
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool);
decreaseAllowance
*Atomically decreases the allowance granted to spender by the caller.
This is an alternative to approve that can be used as a mitigation for
problems described in {IERC20-approve}.
Emits an {Approval} event indicating the updated allowance.
Requirements:
spendercannot be the zero address.spendermust have allowance for the caller of at leastsubtractedValue.*
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool);
_transfer
*Moves tokens amount from sender to recipient.
This is internal function is equivalent to transfer, and can be used to
e.g. implement automatic token fees, slashing mechanisms, etc.
Emits a {Transfer} event.
Requirements:
sendercannot be the zero address.recipientcannot be the zero address.sendermust have a balance of at leastamount.*
function _transfer(address sender, address recipient, uint256 amount) internal virtual;
_mint
*Creates amount tokens and assigns them to account, increasing
the total supply.
Emits a {Transfer} event with from set to the zero address.
Requirements:
tocannot be the zero address.*
function _mint(address account_, uint256 ammount_) internal virtual;
_burn
*Destroys amount tokens from account, reducing the
total supply.
Emits a {Transfer} event with to set to the zero address.
Requirements:
accountcannot be the zero address.accountmust have at leastamounttokens.*
function _burn(address account, uint256 amount) internal virtual;
_approve
*Sets amount as the allowance of spender over the owner s tokens.
This internal function is equivalent to approve, and can be used to
e.g. set automatic allowances for certain subsystems, etc.
Emits an {Approval} event.
Requirements:
ownercannot be the zero address.spendercannot be the zero address.*
function _approve(address owner, address spender, uint256 amount) internal virtual;
_beforeTokenTransfer
Sets decimals to a value other than the default one of 18. WARNING: This function should only be called from the constructor. Most applications that interact with token contracts will not expect {decimals} to ever change, and may work incorrectly if it does.
*Hook that is called before any transfer of tokens. This includes minting and burning. Calling conditions:
- when
fromandtoare both non-zero,amountoffrom's tokens will be to transferred toto. - when
fromis zero,amounttokens will be minted forto. - when
tois zero,amountoffrom's tokens will be burned. fromandtoare never both zero. To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].*
function _beforeTokenTransfer(address from_, address to_, uint256 amount_) internal virtual;