Contract Diff Checker

Contract Name:
IOIToken

Contract Source Code:

File 1 of 1 : IOIToken

pragma solidity ^0.6.2;


/**
ERC20 Token
 
Symbol          : IOI
Name            : IOI Token
Total supply    : 100000000
Decimals        : 6
 
*/
 
abstract contract ERC20Interface {
  string public name;
  string public symbol;
  uint8 public decimals;
  uint256 public totalSupply;
  function balanceOf(address _owner) public view virtual returns (uint256 balance);
  function transfer(address _to, uint256 _value) public virtual returns (bool success);
  function transferFrom(address _from, address _to, uint256 _value) public virtual returns (bool success);
  function approve(address _spender, uint256 _value) public virtual returns (bool success);
  function allowance(address _owner, address _spender) public view virtual returns (uint256 remaining);
  event Transfer(address indexed _from, address indexed _to, uint256 _value);
  event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

library SafeMath {

  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    if (a == 0) {
      return 0;
    }
    c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    return a / b;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}

abstract contract TokenRecipient {
 function receiveApproval(address _from, uint256 _value, address _token, bytes memory _extraData) public virtual;
}

contract IOIToken is ERC20Interface {
 mapping (address => uint256) _balances;
 mapping (address => mapping (address => uint256)) _allowed;
 address public childChainManagerProxy;
 address deployer;
 using SafeMath for uint256;
  
 constructor(address _childChainManagerProxy) public {
   name = "IOI Token";
   symbol = "IOI";
   decimals = 6;
   totalSupply = 100000000 * 10 ** uint256(decimals);
   _balances[msg.sender] = totalSupply;
   childChainManagerProxy = _childChainManagerProxy;
   deployer = msg.sender;
 }
 
 event Burn(address indexed from, uint256 value);
 
 function balanceOf(address _owner) public view override returns (uint256 balance) {
   return _balances[_owner];
 }
 
 function transfer(address _to, uint256 _value) public override returns (bool success) {
   _transfer(msg.sender, _to, _value);
   return true;
 }
 
 function transferFrom(address _from, address _to, uint256 _value) public override returns (bool success) {
   require(_value <= _allowed[_from][msg.sender]);
   _allowed[_from][msg.sender] -= _value;
   _transfer(_from, _to, _value);
   return true;
 }
 
 function approve(address _spender, uint256 _value) public override returns (bool success) {
   _allowed[msg.sender][_spender] = _value;
   emit Approval(msg.sender, _spender, _value);
   return true;
 }
 
 function allowance(address _owner, address _spender) public view override returns (uint256 remaining) {
   return _allowed[_owner][_spender];
 }
 
 function approveAndCall(address _spender, uint256 _value, bytes memory _extraData) public returns (bool success) {
   TokenRecipient spender = TokenRecipient(_spender);
   approve(_spender, _value);
   spender.receiveApproval(msg.sender, _value, address(this), _extraData);
   return true;
 }
 
 function burn(uint256 _value) public returns (bool success) {
   require(_balances[msg.sender] >= _value);
   _balances[msg.sender] -= _value;
   totalSupply -= _value;
   emit Burn(msg.sender, _value);
   return true;
 }
 
 function burnFrom(address _from, uint256 _value) public returns (bool success) {
   require(_balances[_from] >= _value);
   require(_value <= _allowed[_from][msg.sender]);
   _balances[_from] -= _value;
   _allowed[_from][msg.sender] -= _value;
   totalSupply -= _value;
   emit Burn(_from, _value);
   return true;
 }
 
 function _transfer(address _from, address _to, uint _value) internal {
   require(_to != address(0x0));
   require(_balances[_from] >= _value);
   require(_balances[_to] + _value > _balances[_to]);
  
   uint previousBalances = _balances[_from] + _balances[_to];
   _balances[_from] -= _value;
   _balances[_to] += _value;
   emit Transfer(_from, _to, _value);
   assert(_balances[_from] + _balances[_to] == previousBalances);
 }

 function updateChildChainManager(address newChildChainManagerProxy) external {
   require(newChildChainManagerProxy != address(0), "Bad ChildChainManagerProxy address");
   require(msg.sender == deployer, "You're not allowed");

   childChainManagerProxy = newChildChainManagerProxy;
 }

 function deposit(address user, bytes calldata depositData) external {
    require(msg.sender == childChainManagerProxy, "You're not allowed to deposit");

    uint256 amount = abi.decode(depositData, (uint256));

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

 function withdraw(uint256 amount) external {
    _balances[msg.sender] = _balances[msg.sender].sub(amount);
    totalSupply = totalSupply.sub(amount);
        
    emit Transfer(msg.sender, address(0), amount);
 }
  
 fallback() external payable {
   revert();
 }
 
 receive() external payable{
   revert();
 }
 
}

Please enter a contract address above to load the contract details and source code.

Context size (optional):