IERC20
Interface of the ERC20 standard as defined in the EIP.
Functions
totalSupply()
balanceOf(account)
transfer(recipient, amount)
allowance(owner, spender)
approve(spender, amount)
transferFrom(sender, recipient, amount)
Events
Transfer(from, to, value)
Approval(owner, spender, value)
totalSupply() → uint256
external
Returns the amount of tokens in existence.
balanceOf(address account) → uint256
external
Returns the amount of tokens owned by account
.
transfer(address recipient, uint256 amount) → bool
external
Moves amount
tokens from the caller’s account to recipient
.
Returns a boolean value indicating whether the operation succeeded.
Emits a Transfer event.
allowance(address owner, address spender) → uint256
external
Returns the remaining number of tokens that spender
will beallowed to spend on behalf of owner
through transferFrom. This iszero by default.
This value changes when approve or transferFrom are called.
approve(address spender, uint256 amount) → bool
external
Sets amount
as the allowance of spender
over the caller’s tokens.
Returns a boolean value indicating whether the operation succeeded.
Beware that changing an allowance with this method brings the riskthat someone may use both the old and the new allowance by unfortunatetransaction ordering. One possible solution to mitigate this racecondition is to first reduce the spender’s allowance to 0 and set thedesired value afterwards:https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 |
Emits an Approval event.
transferFrom(address sender, address recipient, uint256 amount) → bool
external
Moves amount
tokens from sender
to recipient
using theallowance mechanism. amount
is then deducted from the caller’sallowance.
Returns a boolean value indicating whether the operation succeeded.
Emits a Transfer event.
Transfer(address from, address to, uint256 value)
event
Emitted when value
tokens are moved from one account (from
) toanother (to
).
Note that value
may be zero.
Approval(address owner, address spender, uint256 value)
event
Emitted when the allowance of a spender
for an owner
is set bya call to approve. value
is the new allowance.
ERC20
Implementation of the IERC20 interface.
This implementation is agnostic to the way tokens are created. This meansthat a supply mechanism has to be added in a derived contract using _mint.For a generic mechanism see ERC20PresetMinterPauser.
For a detailed writeup see our guideHowto implement supply mechanisms. |
We have followed general OpenZeppelin guidelines: functions revert insteadof returning false
on failure. This behavior is nonetheless conventionaland does not conflict with the expectations of ERC20 applications.
Additionally, an Approval event is emitted on calls to transferFrom.This allows applications to reconstruct the allowance for all accounts justby listening to said events. Other implementations of the EIP may not emitthese events, as it isn’t required by the specification.
Finally, the non-standard decreaseAllowance and increaseAllowancefunctions have been added to mitigate the well-known issues around settingallowances. See IERC20.approve.
Functions
constructor(name_, symbol_)
name()
symbol()
decimals()
totalSupply()
balanceOf(account)
transfer(recipient, amount)
allowance(owner, spender)
approve(spender, amount)
transferFrom(sender, recipient, amount)
increaseAllowance(spender, addedValue)
decreaseAllowance(spender, subtractedValue)
_transfer(sender, recipient, amount)
_mint(account, amount)
_burn(account, amount)
_approve(owner, spender, amount)
_setupDecimals(decimals_)
_beforeTokenTransfer(from, to, amount)
Events
IERC20
Transfer(from, to, value)
Approval(owner, spender, value)
constructor(string name_, string symbol_)
public
Sets the values for name and symbol, initializes decimals witha 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 duringconstruction.
name() → string
public
Returns the name of the token.
symbol() → string
public
Returns the symbol of the token, usually a shorter version of thename.
decimals() → uint8
public
Returns the number of decimals used to get its user representation.For example, if decimals
equals 2
, a balance of 505
tokens shouldbe displayed to a user as 5,05
(505 / 10 ** 2
).
Tokens usually opt for a value of 18, imitating the relationship betweenEther and Wei. This is the value ERC20 uses, unless _setupDecimals iscalled.
This information is only used for display purposes: it inno way affects any of the arithmetic of the contract, includingIERC20.balanceOf and IERC20.Transfer. |
totalSupply() → uint256
public
See IERC20.totalSupply.
balanceOf(address account) → uint256
public
See IERC20.balanceOf.
transfer(address recipient, uint256 amount) → bool
public
See IERC20.Transfer.
Requirements:
recipient
cannot be the zero address.the caller must have a balance of at least
amount
.
allowance(address owner, address spender) → uint256
public
See IERC20.allowance.
approve(address spender, uint256 amount) → bool
public
See IERC20.approve.
Requirements:
spender
cannot be the zero address.
transferFrom(address sender, address recipient, uint256 amount) → bool
public
See IERC20.transferFrom.
Emits an Approval event indicating the updated allowance. This is notrequired by the EIP. See the note at the beginning of ERC20.
Requirements:
sender
andrecipient
cannot be the zero address.sender
must have a balance of at leastamount
.the caller must have allowance for
sender
's tokens of at leastamount
.
increaseAllowance(address spender, uint256 addedValue) → bool
public
Atomically increases the allowance granted to spender
by the caller.
This is an alternative to approve that can be used as a mitigation forproblems described in IERC20.approve.
Emits an Approval event indicating the updated allowance.
Requirements:
spender
cannot be the zero address.
decreaseAllowance(address spender, uint256 subtractedValue) → bool
public
Atomically decreases the allowance granted to spender
by the caller.
This is an alternative to approve that can be used as a mitigation forproblems 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 leastsubtractedValue
.
_transfer(address sender, address recipient, uint256 amount)
internal
Moves tokens amount
from sender
to recipient
.
This is internal function is equivalent to transfer, and can be used toe.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 leastamount
.
_mint(address account, uint256 amount)
internal
Creates amount
tokens and assigns them to account
, increasingthe total supply.
Emits a transfer event with from
set to the zero address.
Requirements:
to
cannot be the zero address.
_burn(address account, uint256 amount)
internal
Destroys amount
tokens from account
, reducing thetotal supply.
Emits a transfer event with to
set to the zero address.
Requirements:
account
cannot be the zero address.account
must have at leastamount
tokens.
_approve(address owner, address spender, uint256 amount)
internal
Sets amount
as the allowance of spender
over the owner
s tokens.
This internal function is equivalent to approve
, and can be used toe.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.
_setupDecimals(uint8 decimals_)
internal
Sets decimals to a value other than the default one of 18.
This function should only be called from the constructor. Mostapplications that interact with token contracts will not expectdecimals to ever change, and may work incorrectly if it does. |
_beforeTokenTransfer(address from, address to, uint256 amount)
internal
Hook that is called before any transfer of tokens. This includesminting and burning.
Calling conditions:
when
from
andto
are both non-zero,amount
offrom
's tokenswill be to transferred toto
.when
from
is zero,amount
tokens will be minted forto
.when
to
is zero,amount
offrom
's tokens will be burned.from
andto
are never both zero.
To learn more about hooks, head to Using Hooks.