ERC20
This contract is an ERC20 token.
Name
ELF Token
Symbol
ELF
Decimals
18
Total Supply
880,000,000 ELF
About
link
description
aelf (ELF) is a cryptocurrency and operates on the Ethereum platform. aelf has a current supply of 879,999,999.9864658 with 544,480,199.9864658 in circulation. The last known price of aelf is 0.18699281 USD and is down -3.23 over the last 24 hours. It is currently trading on 60 active market(s) with $15,522,666.93 traded over the last 24 hours. More information can be found at http://aelf.io/.
Stats
Public Functions
21
Event Types
13
Code Size
17,268 bytes
Library Use
Uses SafeMath for uint256.
Events (13) keyboard_arrow_up
State Variables (16) keyboard_arrow_up
Functions
transferOwnership keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
Source Code
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
balanceOf keyboard_arrow_up
transfer keyboard_arrow_up
Modifiers help
canTransfer checks for the following:
Requirements help
Source Code
function transfer(address _to, uint256 _value)
public
canTransfer
returns (bool)
{
require(_to != address(0));
require(_value <= balances[msg.sender]);
// SafeMath.sub will throw if there is not enough balance.
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
Transfer(msg.sender, _to, _value);
return true;
}
allowance keyboard_arrow_up
transferFrom keyboard_arrow_up
Modifiers help
canTransfer checks for the following:
Requirements help
Source Code
function transferFrom(
address _from,
address _to,
uint256 _value
) public canTransfer returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
Transfer(_from, _to, _value);
return true;
}
approve keyboard_arrow_up
Modifiers help
canTransfer checks for the following:
Source Code
function approve(address _spender, uint256 _value)
public
canTransfer
returns (bool)
{
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
increaseApproval keyboard_arrow_up
Modifiers help
canTransfer checks for the following:
Source Code
function increaseApproval(address _spender, uint256 _addedValue)
public
canTransfer
returns (bool)
{
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(
_addedValue
);
Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
decreaseApproval keyboard_arrow_up
Modifiers help
canTransfer checks for the following:
Source Code
function decreaseApproval(address _spender, uint256 _subtractedValue)
public
canTransfer
returns (bool)
{
uint256 oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
setTransferable keyboard_arrow_up
disableSetTransferable keyboard_arrow_up
setAElfDevMultisig keyboard_arrow_up
Modifiers help
only checks for the following:
nonZeroAddress checks for the following:
Source Code
function setAElfDevMultisig(address _aelfDevMultisig)
public
only(aelfDevMultisig)
nonZeroAddress(_aelfDevMultisig)
{
aelfDevMultisig = _aelfDevMultisig;
SetAElfDevMultisig(msg.sender, _aelfDevMultisig);
}
setAElfCommunityMultisig keyboard_arrow_up
Modifiers help
only checks for the following:
nonZeroAddress checks for the following:
Source Code
function setAElfCommunityMultisig(address _aelfCommunityMultisig)
public
only(aelfCommunityMultisig)
nonZeroAddress(_aelfCommunityMultisig)
{
aelfCommunityMultisig = _aelfCommunityMultisig;
SetAElfCommunityMultisig(msg.sender, _aelfCommunityMultisig);
}
setDurationOfLock keyboard_arrow_up
Modifiers help
canMint checks for the following:
only checks for the following:
Requirements help
Source Code
function setDurationOfLock(uint256 _durationOfLock)
public
canMint
only(aelfCommunityMultisig)
{
require(_durationOfLock >= TIMETHRESHOLD);
durationOfLock = _durationOfLock;
SetDurationOfLock(msg.sender);
}
getLockTokens keyboard_arrow_up
Modifiers help
nonZeroAddress checks for the following:
Source Code
function getLockTokens(address _owner)
public
view
nonZeroAddress(_owner)
returns (uint256 value, uint256 blockNumber)
{
return (lockTokens[_owner].value, lockTokens[_owner].blockNumber);
}
approveMintTokens keyboard_arrow_up
Modifiers help
nonZeroAddress checks for the following:
canMint checks for the following:
only checks for the following:
Requirements help
Source Code
function approveMintTokens(address _owner, uint256 _amount)
public
nonZeroAddress(_owner)
canMint
only(aelfCommunityMultisig)
returns (bool)
{
require(_amount > 0);
uint256 previousLockTokens = lockTokens[_owner].value;
require(previousLockTokens + _amount >= previousLockTokens);
uint256 curTotalSupply = totalSupply;
require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow
require(curTotalSupply + _amount <= totalSupplyCap); // Check for overflow of total supply cap
uint256 previousBalanceTo = balanceOf(_owner);
require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
lockTokens[_owner].value = previousLockTokens.add(_amount);
uint256 curBlockNumber = getCurrentBlockNumber();
lockTokens[_owner].blockNumber = curBlockNumber.add(durationOfLock);
ApproveMintTokens(_owner, _amount);
return true;
}
withdrawMintTokens keyboard_arrow_up
Modifiers help
nonZeroAddress checks for the following:
canMint checks for the following:
only checks for the following:
Requirements help
Source Code
function withdrawMintTokens(address _owner, uint256 _amount)
public
nonZeroAddress(_owner)
canMint
only(aelfCommunityMultisig)
returns (bool)
{
require(_amount > 0);
uint256 previousLockTokens = lockTokens[_owner].value;
require(previousLockTokens - _amount >= 0);
lockTokens[_owner].value = previousLockTokens.sub(_amount);
if (previousLockTokens - _amount == 0) {
lockTokens[_owner].blockNumber = 0;
}
WithdrawMintTokens(_owner, _amount);
return true;
}
mintTokens keyboard_arrow_up
Modifiers help
canMint checks for the following:
only checks for the following:
nonZeroAddress checks for the following:
Requirements help
Source Code
function mintTokens(address _owner)
public
canMint
only(aelfDevMultisig)
nonZeroAddress(_owner)
returns (bool)
{
require(lockTokens[_owner].blockNumber <= getCurrentBlockNumber());
uint256 _amount = lockTokens[_owner].value;
uint256 curTotalSupply = totalSupply;
require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow
require(curTotalSupply + _amount <= totalSupplyCap); // Check for overflow of total supply cap
uint256 previousBalanceTo = balanceOf(_owner);
require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
totalSupply = curTotalSupply.add(_amount);
balances[_owner] = previousBalanceTo.add(_amount);
lockTokens[_owner].value = 0;
lockTokens[_owner].blockNumber = 0;
MintTokens(_owner, _amount);
Transfer(0, _owner, _amount);
return true;
}
mintTokensWithinTime keyboard_arrow_up
Modifiers help
nonZeroAddress checks for the following:
canMint checks for the following:
only checks for the following:
Requirements help
Source Code
function mintTokensWithinTime(address _owner, uint256 _amount)
public
nonZeroAddress(_owner)
canMint
only(aelfDevMultisig)
returns (bool)
{
require(_amount > 0);
require(getCurrentBlockNumber() < (deployBlockNumber + MINTTIME));
uint256 curTotalSupply = totalSupply;
require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow
require(curTotalSupply + _amount <= totalSupplyCap); // Check for overflow of total supply cap
uint256 previousBalanceTo = balanceOf(_owner);
require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
totalSupply = curTotalSupply.add(_amount);
balances[_owner] = previousBalanceTo.add(_amount);
MintTokens(_owner, _amount);
Transfer(0, _owner, _amount);
return true;
}
transferForMultiAddresses keyboard_arrow_up
Modifiers help
canTransfer checks for the following:
Source Code
function transferForMultiAddresses(address[] _addresses, uint256[] _amounts)
public
canTransfer
returns (bool)
{
for (uint256 i = 0; i < _addresses.length; i++) {
require(_addresses[i] != address(0));
require(_amounts[i] <= balances[msg.sender]);
require(_amounts[i] > 0);
// SafeMath.sub will throw if there is not enough balance.
balances[msg.sender] = balances[msg.sender].sub(_amounts[i]);
balances[_addresses[i]] = balances[_addresses[i]].add(_amounts[i]);
Transfer(msg.sender, _addresses[i], _amounts[i]);
}
return true;
}
burnTokens keyboard_arrow_up
Requirements help
Source Code
function burnTokens(uint256 _amount) public returns (bool) {
require(_amount > 0);
uint256 curTotalSupply = totalSupply;
require(curTotalSupply >= _amount);
uint256 previousBalanceTo = balanceOf(msg.sender);
require(previousBalanceTo >= _amount);
totalSupply = curTotalSupply.sub(_amount);
balances[msg.sender] = previousBalanceTo.sub(_amount);
BurnTokens(msg.sender, _amount);
Transfer(msg.sender, 0, _amount);
return true;
}
finishMinting keyboard_arrow_up
Internal Functions
Internal functions are parts of the contract that can't be used directly, but instead are used by the public functions listed above.