ERC20
contract ERC20
is IERC20
Implementation of the `IERC20` interface. * This implementation was taken from https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.3.0/contracts/token/ERC20/ERC20.sol This differs from the original one only in the definition for the `_balances` mapping: we made it `internal` instead of `private` since we use the `_balances` in the `ERC677BridgeToken` child contract to be able to transfer tokens to address(0) (see its `_superTransfer` function). The original OpenZeppelin implementation doesn't allow transferring to address(0). * This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using `_mint`. For a generic mechanism see `ERC20Mintable`. * *For a detailed writeup see our guide [How to implement supply mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).* * We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and 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 just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. * Finally, the non-standard `decreaseAllowance` and `increaseAllowance` functions have been added to mitigate the well-known issues around setting allowances. See `IERC20.approve`.
Index
Reference
Functions
_approve
function _approve(address owner, address spender, uint256 value) internal
Sets `amount` as the allowance of `spender` over the `owner`s tokens. * This is 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.
- Parameters:
owner
- addressspender
- addressvalue
- uint256
_burn
function _burn(address account, uint256 value) internal
Destoys `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.
- Parameters:
account
- addressvalue
- uint256
_burnFrom
function _burnFrom(address account, uint256 amount) internal
Destoys `amount` tokens from `account`.`amount` is then deducted from the caller's allowance. * See `_burn` and `_approve`.
- Parameters:
account
- addressamount
- uint256
_mint
function _mint(address account, uint256 amount) internal
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.
- Parameters:
account
- addressamount
- uint256
_transfer
function _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 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`.
- Parameters:
sender
- addressrecipient
- addressamount
- uint256
allowance
function allowance(address owner, address spender) public view returns (uint256)
See `IERC20.allowance`.
- Parameters:
owner
- addressspender
- address- Returns:
- uint256
approve
function approve(address spender, uint256 value) public returns (bool)
See `IERC20.approve`. * Requirements: * - `spender` cannot be the zero address.
- Parameters:
spender
- addressvalue
- uint256- Returns:
- bool
balanceOf
function balanceOf(address account) public view returns (uint256)
See `IERC20.balanceOf`.
- Parameters:
account
- address- Returns:
- uint256
decreaseAllowance
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool)
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`.
- Parameters:
spender
- addresssubtractedValue
- uint256- Returns:
- bool
increaseAllowance
function increaseAllowance(address spender, uint256 addedValue) public returns (bool)
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.
- Parameters:
spender
- addressaddedValue
- uint256- Returns:
- bool
totalSupply
function totalSupply() public view returns (uint256)
See `IERC20.totalSupply`.
- Returns:
- uint256
transfer
function transfer(address recipient, uint256 amount) public returns (bool)
See `IERC20.transfer`. * Requirements: * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.
- Parameters:
recipient
- addressamount
- uint256- Returns:
- bool
transferFrom
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool)
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 `value`. - the caller must have allowance for `sender`'s tokens of at least `amount`.
- Parameters:
sender
- addressrecipient
- addressamount
- uint256- Returns:
- bool