ERC20
This contract is an ERC20 token.
                Name
                
                        Rubic
                
            
            
                Symbol
                RBC
            
            
                Decimals
                18
            
            
                Total Supply
                124,000,000 RBC
            
            
            
        
                About
                    
                        link
                    
                     
            
            
                Rubic (RBC) is a cryptocurrency and operates on the Ethereum platform. Rubic has a current supply of 124,000,000 with 102,350,000 in circulation. The last known price of Rubic is 0.0910476 USD and is down -2.10 over the last 24 hours. It is currently trading on 7 active market(s) with $134,550.83 traded over the last 24 hours. More information can be found at https://rubic.exchange/.
            
        Stats
                Public Functions
                26
            
            
                Event Types
                12
            
            
                Code Size
                21,967 bytes
            
        Events (12) keyboard_arrow_up
Constants (8) keyboard_arrow_up
State Variables (10) keyboard_arrow_up
Functions
renounceOwnership keyboard_arrow_up
transferOwnership keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
Source Code
function transferOwnership(address _newOwner) public onlyOwner {
  _transferOwnership(_newOwner);
}
pause keyboard_arrow_up
unpause keyboard_arrow_up
totalSupply keyboard_arrow_up
balanceOf keyboard_arrow_up
transfer keyboard_arrow_up
Requirements help
Source Code
function transfer(address _to, uint256 _value) public returns (bool _success) {
  require(!paused);
  return super.transfer(_to, _value);
}
burn keyboard_arrow_up
allowance keyboard_arrow_up
transferFrom keyboard_arrow_up
Requirements help
Source Code
function transferFrom(
  address _from,
  address _to,
  uint256 _value
) public returns (bool _success) {
  require(!paused);
  return super.transferFrom(_from, _to, _value);
}
approve keyboard_arrow_up
Source Code
function approve(address _spender, uint256 _value) public returns (bool) {
  allowed[msg.sender][_spender] = _value;
  emit Approval(msg.sender, _spender, _value);
  return true;
}
increaseApproval keyboard_arrow_up
Source Code
function increaseApproval(address _spender, uint256 _addedValue)
  public
  returns (bool)
{
  allowed[msg.sender][_spender] = (
    allowed[msg.sender][_spender].add(_addedValue)
  );
  emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
  return true;
}
decreaseApproval keyboard_arrow_up
Source Code
function decreaseApproval(address _spender, uint256 _subtractedValue)
  public
  returns (bool)
{
  uint256 oldValue = allowed[msg.sender][_spender];
  if (_subtractedValue > oldValue) {
    allowed[msg.sender][_spender] = 0;
  } else {
    allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
  }
  emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
  return true;
}
mint keyboard_arrow_up
Modifiers help
hasMintPermission checks for the following:
canMint checks for the following:
Source Code
function mint(address _to, uint256 _amount)
  public
  hasMintPermission
  canMint
  returns (bool)
{
  totalSupply_ = totalSupply_.add(_amount);
  balances[_to] = balances[_to].add(_amount);
  emit Mint(_to, _amount);
  emit Transfer(address(0), _to, _amount);
  return true;
}
finishMinting keyboard_arrow_up
actualBalanceOf keyboard_arrow_up
freezingBalanceOf keyboard_arrow_up
freezingCount keyboard_arrow_up
Source Code
function freezingCount(address _addr) public view returns (uint256 count) {
  uint64 release = chains[toKey(_addr, 0)];
  while (release != 0) {
    count++;
    release = chains[toKey(_addr, release)];
  }
}
getFreezing keyboard_arrow_up
Source Code
function getFreezing(address _addr, uint256 _index)
  public
  view
  returns (uint64 _release, uint256 _balance)
{
  for (uint256 i = 0; i < _index + 1; i++) {
    _release = chains[toKey(_addr, _release)];
    if (_release == 0) {
      return;
    }
  }
  _balance = freezings[toKey(_addr, _release)];
}
freezeTo keyboard_arrow_up
Requirements help
Source Code
function freezeTo(
  address _to,
  uint256 _amount,
  uint64 _until
) public {
  require(_to != address(0));
  require(_amount <= balances[msg.sender]);
  balances[msg.sender] = balances[msg.sender].sub(_amount);
  bytes32 currentKey = toKey(_to, _until);
  freezings[currentKey] = freezings[currentKey].add(_amount);
  freezingBalance[_to] = freezingBalance[_to].add(_amount);
  freeze(_to, _until);
  emit Transfer(msg.sender, _to, _amount);
  emit Freezed(_to, _until, _amount);
}
releaseOnce keyboard_arrow_up
Parameters help
This function has no parameters.
Source Code
function releaseOnce() public {
  bytes32 headKey = toKey(msg.sender, 0);
  uint64 head = chains[headKey];
  require(head != 0);
  require(uint64(block.timestamp) > head);
  bytes32 currentKey = toKey(msg.sender, head);
  uint64 next = chains[currentKey];
  uint256 amount = freezings[currentKey];
  delete freezings[currentKey];
  balances[msg.sender] = balances[msg.sender].add(amount);
  freezingBalance[msg.sender] = freezingBalance[msg.sender].sub(amount);
  if (next == 0) {
    delete chains[headKey];
  } else {
    chains[headKey] = next;
    delete chains[currentKey];
  }
  emit Released(msg.sender, amount);
}
releaseAll keyboard_arrow_up
Parameters help
This function has no parameters.
Source Code
function releaseAll() public returns (uint256 tokens) {
  uint256 release;
  uint256 balance;
  (release, balance) = getFreezing(msg.sender, 0);
  while (release != 0 && block.timestamp > release) {
    releaseOnce();
    tokens += balance;
    (release, balance) = getFreezing(msg.sender, 0);
  }
}
mintAndFreeze keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
canMint checks for the following:
Requirements help
Source Code
function mintAndFreeze(
  address _to,
  uint256 _amount,
  uint64 _until
) public onlyOwner canMint returns (bool) {
  totalSupply_ = totalSupply_.add(_amount);
  bytes32 currentKey = toKey(_to, _until);
  freezings[currentKey] = freezings[currentKey].add(_amount);
  freezingBalance[_to] = freezingBalance[_to].add(_amount);
  freeze(_to, _until);
  emit Mint(_to, _amount);
  emit Freezed(_to, _until, _amount);
  emit Transfer(msg.sender, _to, _amount);
  return true;
}
name keyboard_arrow_up
symbol 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.
internal MainToken.init keyboard_arrow_up
internal FreezableToken.toKey keyboard_arrow_up
Source Code
function toKey(address _addr, uint256 _release)
  internal
  pure
  returns (bytes32 result)
{
  // WISH masc to increase entropy
  result = 0x5749534800000000000000000000000000000000000000000000000000000000;
  assembly {
    result := or(result, mul(_addr, 0x10000000000000000))
    result := or(result, _release)
  }
}
internal FreezableToken.freeze keyboard_arrow_up
Requirements help
Source Code
function freeze(address _to, uint64 _until) internal {
  require(_until > block.timestamp);
  bytes32 key = toKey(_to, _until);
  bytes32 parentKey = toKey(_to, uint64(0));
  uint64 next = chains[parentKey];
  if (next == 0) {
    chains[parentKey] = _until;
    return;
  }
  bytes32 nextKey = toKey(_to, next);
  uint256 parent;
  while (next != 0 && _until > next) {
    parent = next;
    parentKey = nextKey;
    next = chains[nextKey];
    nextKey = toKey(_to, next);
  }
  if (_until == next) {
    return;
  }
  if (next != 0) {
    chains[key] = next;
  }
  chains[parentKey] = _until;
}
internal Ownable._transferOwnership keyboard_arrow_up
Source Code
function _transferOwnership(address _newOwner) internal {
  require(_newOwner != address(0));
  emit OwnershipTransferred(owner, _newOwner);
  owner = _newOwner;
}
internal BurnableToken._burn keyboard_arrow_up
Requirements help
Source Code
function _burn(address _who, uint256 _value) internal {
  require(_value <= balances[_who]);
  // no need to require value <= totalSupply, since that would imply the
  // sender's balance is greater than the totalSupply, which *should* be an assertion failure
  balances[_who] = balances[_who].sub(_value);
  totalSupply_ = totalSupply_.sub(_value);
  emit Burn(_who, _value);
  emit Transfer(_who, address(0), _value);
}
internal Ownable._transferOwnership keyboard_arrow_up
Source Code
function _transferOwnership(address _newOwner) internal {
  require(_newOwner != address(0));
  emit OwnershipTransferred(owner, _newOwner);
  owner = _newOwner;
}
 
         
    



