Blockwell

Kattana

ERC20

This contract is an ERC20 token.

Name Kattana
Symbol KTN
Decimals 18
Total Supply 10,000,000 KTN

About link

Kattana (KTN) is a cryptocurrency and operates on the Ethereum platform. Kattana has a current supply of 10,000,000 with 1,188,281.49991768 in circulation. The last known price of Kattana is 5.28924699 USD and is up 5.95 over the last 24 hours. It is currently trading on 6 active market(s) with $136,932.18 traded over the last 24 hours. More information can be found at https://kattana.io/.

Stats

Public Functions 24
Event Types 5
Code Size 51,656 bytes

Library Use

Uses SafeERC20 for IERC20.

Events (5) keyboard_arrow_up

Approval Event

Parameters help
owner
address help
spender
address help
value
uint256 help

LockTransfer Event

Parameters help
lock
LockType help
from
address help
to
address help
amount
uint help

Note Event

Parameters help
sender
address help
data
bytes help

OwnershipTransferred Event

Parameters help
previousOwner
address help
newOwner
address help

Transfer Event

Parameters help
from
address help
to
address help
value
uint256 help

LockConfig Struct

Members
releaseStart
uint32 help
vesting
uint32 help

Lock Struct

Members
balance
uint128 help
released
uint128 help

MONTH Constant

uint help
30 days

YEAR Constant

uint help
365 days

DAY_ONE Constant

uint help
1617969600

KTN Constant

uint help
UNKNOWN VALUE

TRAP_BLOCKS Constant

uint8 help
3

ACTIVITY_TRAP_BLOCKS Constant

uint8 help
3

TRADES_PER_BLOCK_LIMIT Constant

uint8 help
15

protected Variable

bool help

trapAmount Variable

uint128 help

liquidityAddedBlock Variable

uint96 help

liquidityPool Variable

address help

bought Variable

mapping(address => uint) help

lockConfigs Variable

mapping(LockType => LockConfig) help
Internal Variable

locks Variable

mapping(LockType => mapping(address => Lock)) help
Internal Variable

_owner Variable

address help
Internal Variable

_balances Variable

mapping(address => uint256) help
Internal Variable

_allowances Variable

mapping(address => mapping(address => uint256)) help
Internal Variable

_totalSupply Variable

uint256 help
Internal Variable

_name Variable

string help
Internal Variable

_symbol Variable

string help
Internal Variable

_decimals Variable

uint8 help
Internal Variable

tradedInBlock Variable

mapping(address => bool[]) help
Internal Variable

tradesInBlockCount Variable

uint8[] help
Internal Variable

Functions Expand All Collapse All

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help view
Source Code
function name() public view virtual returns (string memory) {
  return _name;
}

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help view
Source Code
function symbol() public view virtual returns (string memory) {
  return _symbol;
}

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help view
Source Code
function decimals() public view virtual returns (uint8) {
  return _decimals;
}

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help view
Source Code
function totalSupply() public view virtual override returns (uint256) {
  return _totalSupply;
}

Parameters help

Name Type
account
address help

Properties

Visibility help public
Mutability help view
Source Code
function balanceOf(address account)
  public
  view
  virtual
  override
  returns (uint256)
{
  return _balances[account];
}

Parameters help

Name Type
recipient
address help
amount
uint256 help

Properties

Visibility help public
Mutability help transaction

Requirements help

Source Code
function transfer(address recipient, uint256 amount)
  public
  virtual
  override
  returns (bool)
{
  _transfer(_msgSender(), recipient, amount);
  return true;
}

Parameters help

Name Type
owner
address help
spender
address help

Properties

Visibility help public
Mutability help view
Source Code
function allowance(address owner, address spender)
  public
  view
  virtual
  override
  returns (uint256)
{
  return _allowances[owner][spender];
}

Parameters help

Name Type
spender
address help
amount
uint256 help

Properties

Visibility help public
Mutability help transaction

Requirements help

Source Code
function approve(address spender, uint256 amount)
  public
  virtual
  override
  returns (bool)
{
  _approve(_msgSender(), spender, amount);
  return true;
}

Parameters help

Name Type
sender
address help
recipient
address help
amount
uint256 help

Properties

Visibility help public
Mutability help transaction

Requirements help

Source Code
function transferFrom(
  address sender,
  address recipient,
  uint256 amount
) public virtual override returns (bool) {
  _transfer(sender, recipient, amount);
  _approve(
    sender,
    _msgSender(),
    _allowances[sender][_msgSender()].sub(
      amount,
      "ERC20: transfer amount exceeds allowance"
    )
  );
  return true;
}

Parameters help

Name Type
spender
address help
addedValue
uint256 help

Properties

Visibility help public
Mutability help transaction

Requirements help

Source Code
function increaseAllowance(address spender, uint256 addedValue)
  public
  virtual
  returns (bool)
{
  _approve(
    _msgSender(),
    spender,
    _allowances[_msgSender()][spender].add(addedValue)
  );
  return true;
}

Parameters help

Name Type
spender
address help
subtractedValue
uint256 help

Properties

Visibility help public
Mutability help transaction

Requirements help

Source Code
function decreaseAllowance(address spender, uint256 subtractedValue)
  public
  virtual
  returns (bool)
{
  _approve(
    _msgSender(),
    spender,
    _allowances[_msgSender()][spender].sub(
      subtractedValue,
      "ERC20: decreased allowance below zero"
    )
  );
  return true;
}

burn keyboard_arrow_up

Parameters help

Name Type
amount
uint256 help

Properties

Visibility help public
Mutability help transaction

Requirements help

Source Code
function burn(uint256 amount) public virtual {
  _burn(_msgSender(), amount);
}

burnFrom keyboard_arrow_up

Parameters help

Name Type
account
address help
amount
uint256 help

Properties

Visibility help public
Mutability help transaction

Requirements help

Source Code
function burnFrom(address account, uint256 amount) public virtual {
  uint256 decreasedAllowance = allowance(account, _msgSender()).sub(
    amount,
    "ERC20: burn amount exceeds allowance"
  );

  _approve(account, _msgSender(), decreasedAllowance);
  _burn(account, amount);
}

owner keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help view
Source Code
function owner() public view virtual returns (address) {
  return _owner;
}

renounceOwnership keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help transaction

Modifiers help

Source Code
function renounceOwnership() public virtual onlyOwner {
  emit OwnershipTransferred(_owner, address(0));
  _owner = address(0);
}

transferOwnership keyboard_arrow_up

Parameters help

Name Type
newOwner
address help

Properties

Visibility help public
Mutability help transaction

Modifiers help

Requirements help

Source Code
function transferOwnership(address newOwner) public virtual onlyOwner {
  require(newOwner != address(0), "Ownable: new owner is the zero address");
  emit OwnershipTransferred(_owner, newOwner);
  _owner = newOwner;
}

withdrawLocked keyboard_arrow_up

Parameters help

Name Type
_token
IERC20 help
_receiver
address help
_amount
uint help

Properties

Visibility help public
Mutability help transaction

Modifiers help

Source Code
function withdrawLocked(
  IERC20 _token,
  address _receiver,
  uint256 _amount
) external onlyOwner() note() {
  _token.safeTransfer(_receiver, _amount);
}

batchTransfer keyboard_arrow_up

Parameters help

Name Type
_to
address[] help
_amount
uint[] help

Properties

Visibility help public
Mutability help transaction
Source Code
function batchTransfer(address[] memory _to, uint256[] memory _amount) public {
  require(_to.length == _amount.length, "Invalid input");
  for (uint256 _i = 0; _i < _to.length; _i++) {
    transfer(_to[_i], _amount[_i]);
  }
}

batchTransferLock keyboard_arrow_up

Parameters help

Name Type
_lockType
LockType help
_to
address[] help
_amount
uint[] help

Properties

Visibility help public
Mutability help transaction
Source Code
function batchTransferLock(
  LockType _lockType,
  address[] memory _to,
  uint256[] memory _amount
) public {
  require(_to.length == _amount.length, "Invalid input");
  for (uint256 _i = 0; _i < _to.length; _i++) {
    transferLock(_lockType, _to[_i], _amount[_i]);
  }
}

transferLock keyboard_arrow_up

Parameters help

Name Type
_lockType
LockType help
_to
address help
_amount
uint help

Properties

Visibility help public
Mutability help transaction
Source Code
function transferLock(
  LockType _lockType,
  address _to,
  uint256 _amount
) public {
  require(_amount > 0, "Invalid amount");
  Lock memory _lock = locks[_lockType][_msgSender()];
  require(_lock.released == 0, "Cannot transfer after release");
  require(_lock.balance >= _amount, "Insuffisient locked funds");

  locks[_lockType][_msgSender()].balance = _lock
  .balance
  .sub(_amount)
  .toUInt128();
  locks[_lockType][_to].balance = locks[_lockType][_to]
  .balance
  .add(_amount)
  .toUInt128();
  emit LockTransfer(_lockType, _msgSender(), _to, _amount);
}

releaseLock keyboard_arrow_up

Parameters help

Name Type
_lock
LockType help

Properties

Visibility help public
Mutability help transaction

Modifiers help

note checks for the following:
Source Code
function releaseLock(LockType _lock) external note() {
  _release(_lock, _msgSender());
}

releasable keyboard_arrow_up

Parameters help

Name Type
_lockType
LockType help
_holder
address help

Properties

Visibility help public
Mutability help view
Source Code
function releasable(LockType _lockType, address _holder)
  public
  view
  returns (uint256)
{
  LockConfig memory _lockConfig = lockConfigs[_lockType];

  Lock memory _lock = locks[_lockType][_holder];
  uint256 _balance = _lock.balance;
  uint256 _released = _lock.released;

  uint256 _vestedBalance = _balance.mul(_since(_lockConfig.releaseStart)) /
    _lockConfig.vesting;
  uint256 _balanceToRelease = Math.min(_vestedBalance, _balance);

  if (_balanceToRelease <= _released) {
    return 0;
  }

  // Underflow cannot happen here, SafeMath usage left for code style.
  return _balanceToRelease.sub(_released);
}

releasableTotal keyboard_arrow_up

Parameters help

Name Type
_holder
address help

Properties

Visibility help public
Mutability help view
Source Code
function releasableTotal(address _holder)
  public
  view
  returns (uint256[9] memory _result)
{
  _result[1] = releasable(LockType.Seed, _holder);
  _result[2] = releasable(LockType.Private, _holder);
  _result[3] = releasable(LockType.Strategic, _holder);
  _result[4] = releasable(LockType.Liquidity, _holder);
  _result[5] = releasable(LockType.Foundation, _holder);
  _result[6] = releasable(LockType.Team, _holder);
  _result[7] = releasable(LockType.Reserve, _holder);
  _result[8] = releasable(LockType.Advisors, _holder);
}

disableProtection keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help transaction

Modifiers help

Source Code
function disableProtection() external onlyOwner() {
  protected = false;
}

Internal Functions Expand All Collapse All

Internal functions are parts of the contract that can't be used directly, but instead are used by the public functions listed above.

internal KattanaToken._passed keyboard_arrow_up

Parameters help

Name Type
_time
uint help

Properties

Visibility help private
Mutability help view
Source Code
function _passed(uint256 _time) private view returns (bool) {
  return block.timestamp > _time;
}

internal KattanaToken._notPassed keyboard_arrow_up

Parameters help

Name Type
_time
uint help

Properties

Visibility help private
Mutability help view
Source Code
function _notPassed(uint256 _time) private view returns (bool) {
  return _not(_passed(_time));
}

internal KattanaToken._since keyboard_arrow_up

Parameters help

Name Type
_timestamp
uint help

Properties

Visibility help private
Mutability help view
Source Code
function _since(uint256 _timestamp) private view returns (uint256) {
  if (_notPassed(_timestamp)) {
    return 0;
  }
  return block.timestamp.sub(_timestamp);
}

internal KattanaToken._not keyboard_arrow_up

Parameters help

Name Type
_condition
bool help

Properties

Visibility help private
Mutability help pure
Source Code
function _not(bool _condition) private pure returns (bool) {
  return !_condition;
}

internal KattanaToken._release keyboard_arrow_up

Parameters help

Name Type
_lockType
LockType help
_holder
address help

Properties

Visibility help private
Mutability help transaction
Source Code
function _release(LockType _lockType, address _holder) private {
  LockConfig memory _lockConfig = lockConfigs[_lockType];

  Lock memory _lock = locks[_lockType][_holder];
  uint256 _balance = _lock.balance;
  uint256 _released = _lock.released;

  uint256 _vestedBalance = _balance.mul(_since(_lockConfig.releaseStart)) /
    _lockConfig.vesting;
  uint256 _balanceToRelease = Math.min(_vestedBalance, _balance);

  require(_balanceToRelease > _released, "Insufficient unlocked");

  // Underflow cannot happen here, SafeMath usage left for code style.
  uint256 _amount = _balanceToRelease.sub(_released);

  locks[_lockType][_holder].released = _balanceToRelease.toUInt128();
  _transfer(address(uint256(_lockType)), _holder, _amount);
}

internal KattanaToken._beforeTokenTransfer keyboard_arrow_up

Parameters help

Name Type
_from
address help
_to
address help
_amount
uint help

Properties

Visibility help internal
Mutability help transaction
Source Code
function _beforeTokenTransfer(
  address _from,
  address _to,
  uint256 _amount
) internal override {
  super._beforeTokenTransfer(_from, _to, _amount);
  if (protected) {
    LiquidityActivityTrap_validateTransfer(_from, _to, _amount);
    LiquidityTrap_validateTransfer(_from, _to, _amount);
  }
}

internal LiquidityTrap.LiquidityTrap_validateTransfer keyboard_arrow_up

Parameters help

Name Type
_from
address help
_to
address help
_amount
uint help

Properties

Visibility help internal
Mutability help transaction
Source Code
function LiquidityTrap_validateTransfer(
  address _from,
  address _to,
  uint256 _amount
) internal {
  KnowingLiquidityAddedBlock_validateTransfer(_from, _to, _amount);
  if (_blocksSince(liquidityAddedBlock) < TRAP_BLOCKS) {
    // Do not trap technical addresses.
    if (_from == liquidityPool && _to != liquidityPool && uint256(_to) > 1000) {
      bought[_to] = bought[_to].add(_amount);
    }
  }

  if (bought[_from] >= trapAmount) {
    require(_to == owner(), "LiquidityTrap: must send to owner()");
    require(balanceOf(_from) == _amount, "LiquidityTrap: must send it all");
    bought[_from] = 0;
  }
}

internal KnowingLiquidityAddedBlock.KnowingLiquidityAddedBlock_validateTransfer keyboard_arrow_up

Parameters help

Name Type
address help
_to
address help
_amount
uint help

Properties

Visibility help internal
Mutability help transaction
Source Code
function KnowingLiquidityAddedBlock_validateTransfer(
  address,
  address _to,
  uint256 _amount
) internal {
  if (liquidityAddedBlock == 0 && _to == liquidityPool && _amount > 0) {
    liquidityAddedBlock = block.number.toUInt96();
  }
}

internal LiquidityProtectedBase._blocksSince keyboard_arrow_up

Parameters help

Name Type
_blockNumber
uint help

Properties

Visibility help internal
Mutability help view
Source Code
function _blocksSince(uint256 _blockNumber) internal view returns (uint256) {
  if (_blockNumber > block.number) {
    return 0;
  }
  return block.number - _blockNumber;
}

internal Context._msgSender keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgSender() internal view virtual returns (address payable) {
  return msg.sender;
}

internal Context._msgData keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgData() internal view virtual returns (bytes memory) {
  this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
  return msg.data;
}

internal Context._msgSender keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgSender() internal view virtual returns (address payable) {
  return msg.sender;
}

internal Context._msgData keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgData() internal view virtual returns (bytes memory) {
  this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
  return msg.data;
}

internal ERC20._transfer keyboard_arrow_up

Parameters help

Name Type
sender
address help
recipient
address help
amount
uint256 help

Properties

Visibility help internal
Mutability help transaction

Requirements help

Source Code
function _transfer(
  address sender,
  address recipient,
  uint256 amount
) internal virtual {
  require(sender != address(0), "ERC20: transfer from the zero address");
  require(recipient != address(0), "ERC20: transfer to the zero address");

  _beforeTokenTransfer(sender, recipient, amount);

  _balances[sender] = _balances[sender].sub(
    amount,
    "ERC20: transfer amount exceeds balance"
  );
  _balances[recipient] = _balances[recipient].add(amount);
  emit Transfer(sender, recipient, amount);
}

internal ERC20._mint keyboard_arrow_up

Parameters help

Name Type
account
address help
amount
uint256 help

Properties

Visibility help internal
Mutability help transaction

Requirements help

Source Code
function _mint(address account, uint256 amount) internal virtual {
  require(account != address(0), "ERC20: mint to the zero address");

  _beforeTokenTransfer(address(0), account, amount);

  _totalSupply = _totalSupply.add(amount);
  _balances[account] = _balances[account].add(amount);
  emit Transfer(address(0), account, amount);
}

internal ERC20._burn keyboard_arrow_up

Parameters help

Name Type
account
address help
amount
uint256 help

Properties

Visibility help internal
Mutability help transaction

Requirements help

Source Code
function _burn(address account, uint256 amount) internal virtual {
  require(account != address(0), "ERC20: burn from the zero address");

  _beforeTokenTransfer(account, address(0), amount);

  _balances[account] = _balances[account].sub(
    amount,
    "ERC20: burn amount exceeds balance"
  );
  _totalSupply = _totalSupply.sub(amount);
  emit Transfer(account, address(0), amount);
}

internal ERC20._approve keyboard_arrow_up

Parameters help

Name Type
owner
address help
spender
address help
amount
uint256 help

Properties

Visibility help internal
Mutability help transaction

Requirements help

Source Code
function _approve(
  address owner,
  address spender,
  uint256 amount
) internal virtual {
  require(owner != address(0), "ERC20: approve from the zero address");
  require(spender != address(0), "ERC20: approve to the zero address");

  _allowances[owner][spender] = amount;
  emit Approval(owner, spender, amount);
}

internal ERC20._setupDecimals keyboard_arrow_up

Parameters help

Name Type
decimals_
uint8 help

Properties

Visibility help internal
Mutability help transaction
Source Code
function _setupDecimals(uint8 decimals_) internal virtual {
  _decimals = decimals_;
}

internal ERC20._beforeTokenTransfer keyboard_arrow_up

Parameters help

Name Type
from
address help
to
address help
amount
uint256 help

Properties

Visibility help internal
Mutability help transaction
Source Code
function _beforeTokenTransfer(
  address from,
  address to,
  uint256 amount
) internal virtual {}

internal Context._msgSender keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgSender() internal view virtual returns (address payable) {
  return msg.sender;
}

internal Context._msgData keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgData() internal view virtual returns (bytes memory) {
  this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
  return msg.data;
}

internal LiquidityActivityTrap.LiquidityActivityTrap_validateTransfer keyboard_arrow_up

Parameters help

Name Type
_from
address help
_to
address help
_amount
uint help

Properties

Visibility help internal
Mutability help transaction
Source Code
function LiquidityActivityTrap_validateTransfer(
  address _from,
  address _to,
  uint256 _amount
) internal {
  KnowingLiquidityAddedBlock_validateTransfer(_from, _to, _amount);
  uint256 sinceLiquidity = _blocksSince(liquidityAddedBlock);
  if (_blocksSince(liquidityAddedBlock) < ACTIVITY_TRAP_BLOCKS) {
    // Do not trap technical addresses.
    if (
      _from == liquidityPool &&
      _to != liquidityPool &&
      uint256(_to) > 1000 &&
      _amount > 0
    ) {
      tradedInBlock[_to][sinceLiquidity] = true;
      if (tradesInBlockCount[sinceLiquidity] < type(uint8).max) {
        tradesInBlockCount[sinceLiquidity]++;
      }
    } else if (
      _from != liquidityPool &&
      _to == liquidityPool &&
      uint256(_from) > 1000 &&
      _amount > 0
    ) {
      // Do not count addLiquidity.
      if (tradesInBlockCount[sinceLiquidity] > 0) {
        tradedInBlock[_from][sinceLiquidity] = true;
        if (tradesInBlockCount[sinceLiquidity] < type(uint8).max) {
          tradesInBlockCount[sinceLiquidity]++;
        }
      }
    }
  }
  uint8[ACTIVITY_TRAP_BLOCKS] memory traps = tradesInBlockCount;
  bool[ACTIVITY_TRAP_BLOCKS] memory blocks = tradedInBlock[_from];
  for (uint256 i = 0; i < ACTIVITY_TRAP_BLOCKS; i++) {
    if (traps[i] > TRADES_PER_BLOCK_LIMIT && blocks[i]) {
      require(_to == owner(), "LiquidityActivityTrap: must send to owner()");
      require(
        balanceOf(_from) == _amount,
        "LiquidityActivityTrap: must send it all"
      );
      delete tradedInBlock[_from];
      break;
    }
  }
}

internal KnowingLiquidityAddedBlock.KnowingLiquidityAddedBlock_validateTransfer keyboard_arrow_up

Parameters help

Name Type
address help
_to
address help
_amount
uint help

Properties

Visibility help internal
Mutability help transaction
Source Code
function KnowingLiquidityAddedBlock_validateTransfer(
  address,
  address _to,
  uint256 _amount
) internal {
  if (liquidityAddedBlock == 0 && _to == liquidityPool && _amount > 0) {
    liquidityAddedBlock = block.number.toUInt96();
  }
}

internal LiquidityProtectedBase._blocksSince keyboard_arrow_up

Parameters help

Name Type
_blockNumber
uint help

Properties

Visibility help internal
Mutability help view
Source Code
function _blocksSince(uint256 _blockNumber) internal view returns (uint256) {
  if (_blockNumber > block.number) {
    return 0;
  }
  return block.number - _blockNumber;
}

internal Context._msgSender keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgSender() internal view virtual returns (address payable) {
  return msg.sender;
}

internal Context._msgData keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgData() internal view virtual returns (bytes memory) {
  this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
  return msg.data;
}

internal Context._msgSender keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgSender() internal view virtual returns (address payable) {
  return msg.sender;
}

internal Context._msgData keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgData() internal view virtual returns (bytes memory) {
  this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
  return msg.data;
}

internal ERC20._transfer keyboard_arrow_up

Parameters help

Name Type
sender
address help
recipient
address help
amount
uint256 help

Properties

Visibility help internal
Mutability help transaction

Requirements help

Source Code
function _transfer(
  address sender,
  address recipient,
  uint256 amount
) internal virtual {
  require(sender != address(0), "ERC20: transfer from the zero address");
  require(recipient != address(0), "ERC20: transfer to the zero address");

  _beforeTokenTransfer(sender, recipient, amount);

  _balances[sender] = _balances[sender].sub(
    amount,
    "ERC20: transfer amount exceeds balance"
  );
  _balances[recipient] = _balances[recipient].add(amount);
  emit Transfer(sender, recipient, amount);
}

internal ERC20._mint keyboard_arrow_up

Parameters help

Name Type
account
address help
amount
uint256 help

Properties

Visibility help internal
Mutability help transaction

Requirements help

Source Code
function _mint(address account, uint256 amount) internal virtual {
  require(account != address(0), "ERC20: mint to the zero address");

  _beforeTokenTransfer(address(0), account, amount);

  _totalSupply = _totalSupply.add(amount);
  _balances[account] = _balances[account].add(amount);
  emit Transfer(address(0), account, amount);
}

internal ERC20._burn keyboard_arrow_up

Parameters help

Name Type
account
address help
amount
uint256 help

Properties

Visibility help internal
Mutability help transaction

Requirements help

Source Code
function _burn(address account, uint256 amount) internal virtual {
  require(account != address(0), "ERC20: burn from the zero address");

  _beforeTokenTransfer(account, address(0), amount);

  _balances[account] = _balances[account].sub(
    amount,
    "ERC20: burn amount exceeds balance"
  );
  _totalSupply = _totalSupply.sub(amount);
  emit Transfer(account, address(0), amount);
}

internal ERC20._approve keyboard_arrow_up

Parameters help

Name Type
owner
address help
spender
address help
amount
uint256 help

Properties

Visibility help internal
Mutability help transaction

Requirements help

Source Code
function _approve(
  address owner,
  address spender,
  uint256 amount
) internal virtual {
  require(owner != address(0), "ERC20: approve from the zero address");
  require(spender != address(0), "ERC20: approve to the zero address");

  _allowances[owner][spender] = amount;
  emit Approval(owner, spender, amount);
}

internal ERC20._setupDecimals keyboard_arrow_up

Parameters help

Name Type
decimals_
uint8 help

Properties

Visibility help internal
Mutability help transaction
Source Code
function _setupDecimals(uint8 decimals_) internal virtual {
  _decimals = decimals_;
}

internal ERC20._beforeTokenTransfer keyboard_arrow_up

Parameters help

Name Type
from
address help
to
address help
amount
uint256 help

Properties

Visibility help internal
Mutability help transaction
Source Code
function _beforeTokenTransfer(
  address from,
  address to,
  uint256 amount
) internal virtual {}

internal Context._msgSender keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgSender() internal view virtual returns (address payable) {
  return msg.sender;
}

internal Context._msgData keyboard_arrow_up

Parameters help

This function has no parameters.

Properties

Visibility help internal
Mutability help view
Source Code
function _msgData() internal view virtual returns (bytes memory) {
  this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
  return msg.data;
}