ERC20

Git Source

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:

  • recipient cannot 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:

  • spender cannot 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:

  • sender and recipient cannot be the zero address.
  • sender must have a balance of at least amount.
  • the caller must have allowance for sender's tokens of at least amount.*
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:

  • spender cannot 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:

  • spender cannot be the zero address.
  • spender must have allowance for the caller of at least subtractedValue.*
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:

  • sender cannot be the zero address.
  • recipient cannot be the zero address.
  • sender must have a balance of at least amount.*
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:

  • to cannot be the zero address.*
function _mint(address account_, uint256 amount_) internal virtual;

_burn

*Destroys amount tokens from account, reducing the total supply. Emits a {Transfer} event with to set to the zero address. Requirements:

  • account cannot be the zero address.
  • account must have at least amount tokens.*
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:

  • owner cannot be the zero address.
  • spender cannot 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 from and to are both non-zero, amount of from's tokens will be to transferred to to.
  • when from is zero, amount tokens will be minted for to.
  • when to is zero, amount of from's tokens will be burned.
  • from and to are 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;