BASIC Token
ERC20
This contract is an ERC20 token.
Name
BASIC Token
Symbol
BASIC
Decimals
18
Total Supply
8,326,258,167 BASIC
About link description
BASIC (BASIC) is a cryptocurrency and operates on the Ethereum platform. BASIC has a current supply of 8,326,258,166.69 with 5,071,501,456.657481 in circulation. The last known price of BASIC is 0.00695755 USD and is up 2.08 over the last 24 hours. It is currently trading on 4 active market(s) with $2,442,965.18 traded over the last 24 hours. More information can be found at https://basic.finance/.
Stats
Public Functions
32
Event Types
11
Code Size
21,570 bytes
Events (11) keyboard_arrow_up
State Variables (13) keyboard_arrow_up
Functions
totalSupply keyboard_arrow_up
balanceOf keyboard_arrow_up
Source Code
function balanceOf(address owner) public view returns (uint256) {
uint256 totalBalance = super.balanceOf(owner);
if (timelockList[owner].length > 0) {
for (uint256 i = 0; i < timelockList[owner].length; i++) {
totalBalance = totalBalance.add(timelockList[owner][i]._amount);
}
}
return totalBalance;
}
allowance keyboard_arrow_up
transfer keyboard_arrow_up
Modifiers help
notFrozen checks for the following:
Source Code
function transfer(address to, uint256 value)
public
notFrozen(msg.sender)
returns (bool)
{
if (timelockList[msg.sender].length > 0) {
_autoUnlock(msg.sender);
}
return super.transfer(to, value);
}
approve keyboard_arrow_up
Source Code
function approve(address spender, uint256 value)
public
whenNotPaused
returns (bool)
{
return super.approve(spender, value);
}
transferFrom keyboard_arrow_up
Modifiers help
notFrozen checks for the following:
Source Code
function transferFrom(
address from,
address to,
uint256 value
) public notFrozen(from) returns (bool) {
if (timelockList[from].length > 0) {
_autoUnlock(msg.sender);
}
return super.transferFrom(from, to, value);
}
increaseAllowance keyboard_arrow_up
Source Code
function increaseAllowance(address spender, uint256 addedValue)
public
returns (bool)
{
require(spender != address(0));
_allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue);
emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
return true;
}
decreaseAllowance keyboard_arrow_up
Source Code
function decreaseAllowance(address spender, uint256 subtractedValue)
public
returns (bool)
{
require(spender != address(0));
_allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(
subtractedValue
);
emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
return true;
}
burn keyboard_arrow_up
burnFrom keyboard_arrow_up
isOwner keyboard_arrow_up
transferOwnership keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
Source Code
function transferOwnership(address _newOwner) public onlyOwner {
require(_newOwner != address(0));
newOwner = _newOwner;
}
acceptOwnership keyboard_arrow_up
isPauser keyboard_arrow_up
addPauser keyboard_arrow_up
removePauser keyboard_arrow_up
renouncePauser keyboard_arrow_up
paused keyboard_arrow_up
pause keyboard_arrow_up
unpause keyboard_arrow_up
Parameters help
This function has no parameters.
Modifiers help
onlyPauser checks for the following:
One or more of the following:
-null - ORnull
whenPaused checks for the following:
_paused must be true
Source Code
function unpause() public onlyPauser whenPaused {
_paused = false;
emit Unpaused(msg.sender);
}
increaseAllowance keyboard_arrow_up
Source Code
function increaseAllowance(address spender, uint256 addedValue)
public
whenNotPaused
returns (bool success)
{
return super.increaseAllowance(spender, addedValue);
}
decreaseAllowance keyboard_arrow_up
Source Code
function decreaseAllowance(address spender, uint256 subtractedValue)
public
whenNotPaused
returns (bool success)
{
return super.decreaseAllowance(spender, subtractedValue);
}
name keyboard_arrow_up
symbol keyboard_arrow_up
decimals keyboard_arrow_up
freezeAccount keyboard_arrow_up
unfreezeAccount keyboard_arrow_up
Modifiers help
onlyPauser checks for the following:
One or more of the following:
-null - ORnull
Source Code
function unfreezeAccount(address holder) public onlyPauser returns (bool) {
require(frozenAccount[holder]);
frozenAccount[holder] = false;
emit Unfreeze(holder);
return true;
}
lock keyboard_arrow_up
Modifiers help
onlyPauser checks for the following:
One or more of the following:
-null - ORnull
Source Code
function lock(
address holder,
uint256 value,
uint256 releaseTime
) public onlyPauser returns (bool) {
require(
_balances[holder] >= value,
"There is not enough balances of holder."
);
_lock(holder, value, releaseTime);
return true;
}
transferWithLock keyboard_arrow_up
Modifiers help
onlyPauser checks for the following:
One or more of the following:
-null - ORnull
Source Code
function transferWithLock(
address holder,
uint256 value,
uint256 releaseTime
) public onlyPauser returns (bool) {
_transfer(msg.sender, holder, value);
_lock(holder, value, releaseTime);
return true;
}
unlock keyboard_arrow_up
Modifiers help
onlyPauser checks for the following:
One or more of the following:
-null - ORnull
Requirements help
Source Code
function unlock(address holder, uint256 idx) public onlyPauser returns (bool) {
require(timelockList[holder].length > idx, "There is not lock info.");
_unlock(holder, idx);
return true;
}
upgradeTo keyboard_arrow_up
constructor keyboard_arrow_up
Parameters help
This function has no parameters.
Source Code
function() external payable {
address impl = implementation;
require(impl != address(0));
assembly {
let ptr := mload(0x40)
calldatacopy(ptr, 0, calldatasize)
let result := delegatecall(gas, impl, ptr, calldatasize, 0, 0)
let size := returndatasize
returndatacopy(ptr, 0, size)
switch result
case 0 {
revert(ptr, size)
}
default {
return(ptr, size)
}
}
}
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.
internal BASIC._lock keyboard_arrow_up
Source Code
function _lock(
address holder,
uint256 value,
uint256 releaseTime
) internal returns (bool) {
_balances[holder] = _balances[holder].sub(value);
timelockList[holder].push(LockInfo(releaseTime, value));
emit Lock(holder, value, releaseTime);
return true;
}
internal BASIC._unlock keyboard_arrow_up
Source Code
function _unlock(address holder, uint256 idx) internal returns (bool) {
LockInfo storage lockinfo = timelockList[holder][idx];
uint256 releaseAmount = lockinfo._amount;
delete timelockList[holder][idx];
timelockList[holder][idx] = timelockList[holder][
timelockList[holder].length.sub(1)
];
timelockList[holder].length -= 1;
emit Unlock(holder, releaseAmount);
_balances[holder] = _balances[holder].add(releaseAmount);
return true;
}
internal BASIC._autoUnlock keyboard_arrow_up
Source Code
function _autoUnlock(address holder) internal returns (bool) {
for (uint256 idx = 0; idx < timelockList[holder].length; idx++) {
if (timelockList[holder][idx]._releaseTime <= now) {
// If lockupinfo was deleted, loop restart at same position.
if (_unlock(holder, idx)) {
idx -= 1;
}
}
}
return true;
}
internal BASIC._setImplementation keyboard_arrow_up
internal ERC20._transfer keyboard_arrow_up
Source Code
function _transfer(
address from,
address to,
uint256 value
) internal {
require(to != address(0));
_balances[from] = _balances[from].sub(value);
_balances[to] = _balances[to].add(value);
emit Transfer(from, to, value);
}
internal ERC20._mint keyboard_arrow_up
Source Code
function _mint(address account, uint256 value) internal {
require(account != address(0));
_totalSupply = _totalSupply.add(value);
_balances[account] = _balances[account].add(value);
emit Transfer(address(0), account, value);
}
internal ERC20._burn keyboard_arrow_up
Requirements help
Source Code
function _burn(address account, uint256 value) internal {
require(account != address(0));
_totalSupply = _totalSupply.sub(value);
_balances[account] = _balances[account].sub(value);
emit Transfer(account, address(0), value);
}
internal ERC20._burnFrom keyboard_arrow_up
Requirements help
Source Code
function _burnFrom(address account, uint256 value) internal {
_allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);
_burn(account, value);
emit Approval(account, msg.sender, _allowed[account][msg.sender]);
}
internal Pausable.constructor keyboard_arrow_up
internal PauserRole.constructor keyboard_arrow_up
internal PauserRole._addPauser keyboard_arrow_up
internal PauserRole._removePauser keyboard_arrow_up
internal ERC20._transfer keyboard_arrow_up
Source Code
function _transfer(
address from,
address to,
uint256 value
) internal {
require(to != address(0));
_balances[from] = _balances[from].sub(value);
_balances[to] = _balances[to].add(value);
emit Transfer(from, to, value);
}
internal ERC20._mint keyboard_arrow_up
Source Code
function _mint(address account, uint256 value) internal {
require(account != address(0));
_totalSupply = _totalSupply.add(value);
_balances[account] = _balances[account].add(value);
emit Transfer(address(0), account, value);
}
internal ERC20._burn keyboard_arrow_up
Requirements help
Source Code
function _burn(address account, uint256 value) internal {
require(account != address(0));
_totalSupply = _totalSupply.sub(value);
_balances[account] = _balances[account].sub(value);
emit Transfer(account, address(0), value);
}
internal ERC20._burnFrom keyboard_arrow_up
Requirements help
Source Code
function _burnFrom(address account, uint256 value) internal {
_allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);
_burn(account, value);
emit Approval(account, msg.sender, _allowed[account][msg.sender]);
}