Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x73B1714FB3BFaeFA12F3707bEfcBa3205f9A1162
Balance 0 ETH
Nonce 1
Code Size 3220 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

3220 bytes
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063a5a5fdb811610071578063a5a5fdb81461014e578063b31c710a1461017a578063c42bd05a14610182578063ca628c781461018a578063dc73e49c14610192578063f851a4401461019a576100a9565b80635a4ccad8146100ae5780638f283970146100d257806390646b4a146100fa57806391d03dfa146101205780639a202d4714610146575b600080fd5b6100b66101a2565b604080516001600160a01b039092168252519081900360200190f35b6100f8600480360360208110156100e857600080fd5b50356001600160a01b03166101b1565b005b6100f86004803603602081101561011057600080fd5b50356001600160a01b03166102a6565b6100f86004803603602081101561013657600080fd5b50356001600160a01b0316610441565b6100f8610620565b6100f86004803603604081101561016457600080fd5b506001600160a01b0381351690602001356106bd565b6100b6610934565b6100b6610943565b6100f8610952565b6100f8610aa4565b6100b6610c01565b6003546001600160a01b031681565b6000546001600160a01b03163314610206576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b6001600160a01b03811661024b5760405162461bcd60e51b8152600401808060200182810382526027815260200180610c396027913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146102fb576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b6003546001600160a01b03161561039c576002546003546040805163095ea7b360e01b81526001600160a01b0392831660048201526000602482018190529151929093169263095ea7b39260448083019360209383900390910190829087803b15801561036757600080fd5b505af115801561037b573d6000803e3d6000fd5b505050506040513d602081101561039157600080fd5b505161039c57600080fd5b600380546001600160a01b0319166001600160a01b0383811691909117918290556002546040805163095ea7b360e01b8152938316600485015260001960248501525191169163095ea7b39160448083019260209291908290030181600087803b15801561040957600080fd5b505af115801561041d573d6000803e3d6000fd5b505050506040513d602081101561043357600080fd5b505161043e57600080fd5b50565b6001600160a01b0381166104865760405162461bcd60e51b8152600401808060200182810382526028815260200180610c116028913960400191505060405180910390fd5b600154604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156104d157600080fd5b505afa1580156104e5573d6000803e3d6000fd5b505050506040513d60208110156104fb57600080fd5b5051600154604080516323b872dd60e01b81523360048201523060248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b15801561055a57600080fd5b505af115801561056e573d6000803e3d6000fd5b505050506040513d602081101561058457600080fd5b505161058f57600080fd5b600354600254604080516385eb3a3560e01b81526001600160a01b038681166004830152928316602482015260448101859052905191909216916385eb3a359160648083019260209291908290030181600087803b1580156105f057600080fd5b505af1158015610604573d6000803e3d6000fd5b505050506040513d602081101561061a57600080fd5b50505050565b6000546001600160a01b03163314610675576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b600080546040516001600160a01b03909116917fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f91a2600080546001600160a01b0319169055565b6001600160a01b0382166107025760405162461bcd60e51b8152600401808060200182810382526028815260200180610c116028913960400191505060405180910390fd5b600154604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561074d57600080fd5b505afa158015610761573d6000803e3d6000fd5b505050506040513d602081101561077757600080fd5b5051600154604080516323b872dd60e01b81523360048201523060248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b1580156107d657600080fd5b505af11580156107ea573d6000803e3d6000fd5b505050506040513d602081101561080057600080fd5b505161080b57600080fd5b8082111561081857600080fd5b6002546040805163a9059cbb60e01b8152336004820152848403602482015290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561086d57600080fd5b505af1158015610881573d6000803e3d6000fd5b505050506040513d602081101561089757600080fd5b50516108a257600080fd5b600354600254604080516385eb3a3560e01b81526001600160a01b038781166004830152928316602482015260448101869052905191909216916385eb3a359160648083019260209291908290030181600087803b15801561090357600080fd5b505af1158015610917573d6000803e3d6000fd5b505050506040513d602081101561092d57600080fd5b5050505050565b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031633146109a7576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b600254604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b1580156109fb57600080fd5b505afa158015610a0f573d6000803e3d6000fd5b505050506040513d6020811015610a2557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610a7657600080fd5b505af1158015610a8a573d6000803e3d6000fd5b505050506040513d6020811015610aa057600080fd5b5050565b600154604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610aef57600080fd5b505afa158015610b03573d6000803e3d6000fd5b505050506040513d6020811015610b1957600080fd5b5051600154604080516323b872dd60e01b81523360048201523060248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b158015610b7857600080fd5b505af1158015610b8c573d6000803e3d6000fd5b505050506040513d6020811015610ba257600080fd5b5051610bad57600080fd5b6002546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561040957600080fd5b6000546001600160a01b03168156fe546f6b656e537761703a20726563697069656e7420697320746865207a65726f206164647265737348617341646d696e3a206e65772061646d696e20697320746865207a65726f2061646472657373a265627a7a72315820046c95de273744f0ea3e057c4db8b3ad3047c8c01616078bca5204fa7005fc0b64736f6c63430005110032

Verified Source Code Partial Match

Compiler: v0.5.17+commit.d19bba13 EVM: istanbul Optimization: Yes (200 runs)
TokenSwap.sol 127 lines
// File: access/HasAdmin.sol

pragma solidity 0.5.17;


contract HasAdmin {
  event AdminChanged(address indexed _oldAdmin, address indexed _newAdmin);
  event AdminRemoved(address indexed _oldAdmin);

  address public admin;

  modifier onlyAdmin {
    require(msg.sender == admin, "HasAdmin: not admin");
    _;
  }

  constructor() internal {
    admin = msg.sender;
    emit AdminChanged(address(0), admin);
  }

  function changeAdmin(address _newAdmin) external onlyAdmin {
    require(_newAdmin != address(0), "HasAdmin: new admin is the zero address");
    emit AdminChanged(admin, _newAdmin);
    admin = _newAdmin;
  }

  function removeAdmin() external onlyAdmin {
    emit AdminRemoved(admin);
    admin = address(0);
  }
}

// File: token/erc20/IERC20.sol

pragma solidity 0.5.17;


interface IERC20 {
  event Transfer(address indexed _from, address indexed _to, uint256 _value);
  event Approval(address indexed _owner, address indexed _spender, uint256 _value);

  function totalSupply() external view returns (uint256 _supply);
  function balanceOf(address _owner) external view returns (uint256 _balance);

  function approve(address _spender, uint256 _value) external returns (bool _success);
  function allowance(address _owner, address _spender) external view returns (uint256 _value);

  function transfer(address _to, uint256 _value) external returns (bool _success);
  function transferFrom(address _from, address _to, uint256 _value) external returns (bool _success);
}

// File: MainchainGateway.sol

pragma solidity 0.5.17;


contract MainchainGateway {
  function depositERC20For(address _user, address _token, uint256 _amount) external returns (uint256);
}

// File: TokenSwap.sol

pragma solidity 0.5.17;





/**
  * Smart contract wallet to support swapping between old ERC-20 token to a new contract.
  * It also supports swap and deposit into mainchainGateway in a single transaction.
  * Pre-requisites: New token needs to be transferred to this contract.
  * Dev should check that the decimals and supply of old token and new token are identical.
 */
contract TokenSwap is HasAdmin {
  IERC20 public oldToken;
  IERC20 public newToken;
  MainchainGateway public mainchainGateway;

  constructor(
    IERC20 _oldToken,
    IERC20 _newToken
  )
    public
  {
    oldToken = _oldToken;
    newToken = _newToken;
  }

  function setGateway(MainchainGateway _mainchainGateway) external onlyAdmin {
    if (address(mainchainGateway) != address(0)) {
      require(newToken.approve(address(mainchainGateway), 0));
    }

    mainchainGateway = _mainchainGateway;
    require(newToken.approve(address(mainchainGateway), uint256(-1)));
  }

  function swapToken() external {
    uint256 _balance = oldToken.balanceOf(msg.sender);
    require(oldToken.transferFrom(msg.sender, address(this), _balance));
    require(newToken.transfer(msg.sender, _balance));
  }

  function swapAndBridge(address _recipient, uint256 _amount) external {
    require(_recipient != address(0), "TokenSwap: recipient is the zero address");
    uint256 _balance = oldToken.balanceOf(msg.sender);
    require(oldToken.transferFrom(msg.sender, address(this), _balance));

    require(_amount <= _balance);
    require(newToken.transfer(msg.sender, _balance - _amount));
    mainchainGateway.depositERC20For(_recipient, address(newToken), _amount);
  }

  function swapAndBridgeAll(address _recipient) external {
    require(_recipient != address(0), "TokenSwap: recipient is the zero address");
    uint256 _balance = oldToken.balanceOf(msg.sender);
    require(oldToken.transferFrom(msg.sender, address(this), _balance));
    mainchainGateway.depositERC20For(_recipient, address(newToken), _balance);
  }

  // Used when some old token lost forever
  function withdrawToken() external onlyAdmin {
    newToken.transfer(msg.sender, newToken.balanceOf(address(this)));
  }
}

Read Contract

admin 0xf851a440 → address
mainchainGateway 0x5a4ccad8 → address
newToken 0xc42bd05a → address
oldToken 0xb31c710a → address

Write Contract 7 functions

These functions modify contract state and require a wallet transaction to execute.

changeAdmin 0x8f283970
address _newAdmin
removeAdmin 0x9a202d47
No parameters
setGateway 0x90646b4a
address _mainchainGateway
swapAndBridge 0xa5a5fdb8
address _recipient
uint256 _amount
swapAndBridgeAll 0x91d03dfa
address _recipient
swapToken 0xdc73e49c
No parameters
withdrawToken 0xca628c78
No parameters

Recent Transactions

No transactions found for this address