Smart Contract Repository
SmoothLovePotion

SmoothLovePotion

Deploy on Alchemy
Verified
Ethereum
Verified, Token
Solidity
Verified
Ethereum

Contract Information

The following smart contract is called SmoothLovePotion. It is an ERC20 token that inherits from three other contracts: ERC20Detailed, ERC20Mintable, and ERC20GatewayWhitelist. The purpose of this contract is to create a new token called "Smooth Love Potion" with the symbol "SLP" and 0 decimal places. It also sets the mainchain gateway address and adds it as a minter.
More Info

SmoothLovePotion Source Code

// File: math/SafeMath.sol pragma solidity 0.5.17; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, "SafeMath: addition overflow"); } function sub(uint256 a, uint256 b) internal pure returns (uint256 c) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); } function div(uint256 a, uint256 b) internal pure returns (uint256 c) { // Since Solidity automatically asserts when dividing by 0, // but we only need it to revert. require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256 c) { // Same reason as `div`. require(b > 0, "SafeMath: modulo by zero"); return a % b; } } // 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: token/erc20/ERC20.sol pragma solidity 0.5.17; contract ERC20 is IERC20 { using SafeMath for uint256; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) internal _allowance; function approve(address _spender, uint256 _value) public returns (bool) { _approve(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return _allowance[_owner][_spender]; } function increaseAllowance(address _spender, uint256 _value) public returns (bool) { _approve(msg.sender, _spender, _allowance[msg.sender][_spender].add(_value)); return true; } function decreaseAllowance(address _spender, uint256 _value) public returns (bool) { _approve(msg.sender, _spender, _allowance[msg.sender][_spender].sub(_value)); return true; } function transfer(address _to, uint256 _value) public returns (bool _success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool _success) { _transfer(_from, _to, _value); _approve(_from, msg.sender, _allowance[_from][msg.sender].sub(_value)); return true; } function _approve(address _owner, address _spender, uint256 _amount) internal { require(_owner != address(0), "ERC20: approve from the zero address"); require(_spender != address(0), "ERC20: approve to the zero address"); _allowance[_owner][_spender] = _amount; emit Approval(_owner, _spender, _amount); } function _transfer(address _from, address _to, uint256 _value) internal { require(_from != address(0), "ERC20: transfer from the zero address"); require(_to != address(0), "ERC20: transfer to the zero address"); require(_to != address(this), "ERC20: transfer to this contract address"); balanceOf[_from] = balanceOf[_from].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); emit Transfer(_from, _to, _value); } } // File: token/erc20/IERC20Detailed.sol pragma solidity 0.5.17; interface IERC20Detailed { function name() external view returns (string memory _name); function symbol() external view returns (string memory _symbol); function decimals() external view returns (uint8 _decimals); } // File: token/erc20/ERC20Detailed.sol pragma solidity 0.5.17; contract ERC20Detailed is ERC20, IERC20Detailed { string public name; string public symbol; uint8 public decimals; constructor(string memory _name, string memory _symbol, uint8 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; } } // File: token/erc20/ERC20GatewayWhitelist.sol pragma solidity 0.5.17; contract ERC20GatewayWhitelist is ERC20 { address public mainchainGateway; function allowance(address _owner, address _spender) public view returns (uint256 _value) { if (_spender == mainchainGateway) return uint256(-1); return _allowance[_owner][_spender]; } function transferFrom( address _from, address _to, uint256 _value ) public returns (bool _success) { if (allowance(_from, msg.sender) != uint256(-1)) { super._approve(_from, msg.sender, _allowance[_from][msg.sender].sub(_value)); } _transfer(_from, _to, _value); return true; } function _setGateway(address _mainchainGateway) internal { require( _mainchainGateway != address(0), "ERC20GatewayWhitelist: setting gateway to the zero address" ); mainchainGateway = _mainchainGateway; } } // 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: access/HasMinters.sol pragma solidity 0.5.17; contract HasMinters is HasAdmin { event MinterAdded(address indexed _minter); event MinterRemoved(address indexed _minter); address[] public minters; mapping (address => bool) public minter; modifier onlyMinter { require(minter[msg.sender]); _; } function addMinters(address[] memory _addedMinters) public onlyAdmin { address _minter; for (uint256 i = 0; i < _addedMinters.length; i++) { _minter = _addedMinters[i]; if (!minter[_minter]) { minters.push(_minter); minter[_minter] = true; emit MinterAdded(_minter); } } } function removeMinters(address[] memory _removedMinters) public onlyAdmin { address _minter; for (uint256 i = 0; i < _removedMinters.length; i++) { _minter = _removedMinters[i]; if (minter[_minter]) { minter[_minter] = false; emit MinterRemoved(_minter); } } uint256 i = 0; while (i < minters.length) { _minter = minters[i]; if (!minter[_minter]) { minters[i] = minters[minters.length - 1]; delete minters[minters.length - 1]; minters.length--; } else { i++; } } } function isMinter(address _addr) public view returns (bool) { return minter[_addr]; } } // File: token/erc20/ERC20Mintable.sol pragma solidity 0.5.17; contract ERC20Mintable is HasMinters, ERC20 { function mint(address _to, uint256 _value) public onlyMinter returns (bool _success) { return _mint(_to, _value); } function _mint(address _to, uint256 _value) internal returns (bool success) { totalSupply = totalSupply.add(_value); balanceOf[_to] = balanceOf[_to].add(_value); emit Transfer(address(0), _to, _value); return true; } } // File: SmoothLovePotion.sol pragma solidity 0.5.17; contract SmoothLovePotion is ERC20Detailed, ERC20Mintable, ERC20GatewayWhitelist { constructor(address _mainchainGateway) public ERC20Detailed("Smooth Love Potion", "SLP", 0) { _setGateway(_mainchainGateway); address[] memory _minters = new address[](1); _minters[0] = _mainchainGateway; addMinters(_minters); } }
< // File: math/SafeMath.sol

pragma solidity 0.5.17;


library SafeMath {
  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    require(c >= a, "SafeMath: addition overflow");
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
    require(b <= a, "SafeMath: subtraction overflow");
    return a - b;
  }

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

    c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256 c) {
    // Since Solidity automatically asserts when dividing by 0,
    // but we only need it to revert.
    require(b > 0, "SafeMath: division by zero");
    return a / b;
  }

  function mod(uint256 a, uint256 b) internal pure returns (uint256 c) {
    // Same reason as `div`.
    require(b > 0, "SafeMath: modulo by zero");
    return a % b;
  }
}

// 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: token/erc20/ERC20.sol

pragma solidity 0.5.17;




contract ERC20 is IERC20 {
  using SafeMath for uint256;

  uint256 public totalSupply;
  mapping (address => uint256) public balanceOf;
  mapping (address => mapping (address => uint256)) internal _allowance;

  function approve(address _spender, uint256 _value) public returns (bool) {
    _approve(msg.sender, _spender, _value);
    return true;
  }

  function allowance(address _owner, address _spender) public view returns (uint256) {
    return _allowance[_owner][_spender];
  }

  function increaseAllowance(address _spender, uint256 _value) public returns (bool) {
    _approve(msg.sender, _spender, _allowance[msg.sender][_spender].add(_value));
    return true;
  }

  function decreaseAllowance(address _spender, uint256 _value) public returns (bool) {
    _approve(msg.sender, _spender, _allowance[msg.sender][_spender].sub(_value));
    return true;
  }

  function transfer(address _to, uint256 _value) public returns (bool _success) {
    _transfer(msg.sender, _to, _value);
    return true;
  }

  function transferFrom(address _from, address _to, uint256 _value) public returns (bool _success) {
    _transfer(_from, _to, _value);
    _approve(_from, msg.sender, _allowance[_from][msg.sender].sub(_value));
    return true;
  }

  function _approve(address _owner, address _spender, uint256 _amount) internal {
    require(_owner != address(0), "ERC20: approve from the zero address");
    require(_spender != address(0), "ERC20: approve to the zero address");

    _allowance[_owner][_spender] = _amount;
    emit Approval(_owner, _spender, _amount);
  }

  function _transfer(address _from, address _to, uint256 _value) internal {
    require(_from != address(0), "ERC20: transfer from the zero address");
    require(_to != address(0), "ERC20: transfer to the zero address");
    require(_to != address(this), "ERC20: transfer to this contract address");

    balanceOf[_from] = balanceOf[_from].sub(_value);
    balanceOf[_to] = balanceOf[_to].add(_value);
    emit Transfer(_from, _to, _value);
  }
}

// File: token/erc20/IERC20Detailed.sol

pragma solidity 0.5.17;


interface IERC20Detailed {
  function name() external view returns (string memory _name);
  function symbol() external view returns (string memory _symbol);
  function decimals() external view returns (uint8 _decimals);
}

// File: token/erc20/ERC20Detailed.sol

pragma solidity 0.5.17;




contract ERC20Detailed is ERC20, IERC20Detailed {
  string public name;
  string public symbol;
  uint8 public decimals;

  constructor(string memory _name, string memory _symbol, uint8 _decimals) public {
    name = _name;
    symbol = _symbol;
    decimals = _decimals;
  }
}

// File: token/erc20/ERC20GatewayWhitelist.sol

pragma solidity 0.5.17;


contract ERC20GatewayWhitelist is ERC20 {
  address public mainchainGateway;

  function allowance(address _owner, address _spender)
    public
    view
    returns (uint256 _value)
  {
    if (_spender == mainchainGateway) return uint256(-1);

    return _allowance[_owner][_spender];
  }

  function transferFrom(
    address _from,
    address _to,
    uint256 _value
  )
    public
    returns (bool _success)
  {
    if (allowance(_from, msg.sender) != uint256(-1)) {
      super._approve(_from, msg.sender, _allowance[_from][msg.sender].sub(_value));
    }

    _transfer(_from, _to, _value);
    return true;
  }

  function _setGateway(address _mainchainGateway) internal {
    require(
      _mainchainGateway != address(0),
      "ERC20GatewayWhitelist: setting gateway to the zero address"
    );
    mainchainGateway = _mainchainGateway;
  }
}

// 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: access/HasMinters.sol

pragma solidity 0.5.17;



contract HasMinters is HasAdmin {
  event MinterAdded(address indexed _minter);
  event MinterRemoved(address indexed _minter);

  address[] public minters;
  mapping (address => bool) public minter;

  modifier onlyMinter {
    require(minter[msg.sender]);
    _;
  }

  function addMinters(address[] memory _addedMinters) public onlyAdmin {
    address _minter;

    for (uint256 i = 0; i < _addedMinters.length; i++) {
      _minter = _addedMinters[i];

      if (!minter[_minter]) {
        minters.push(_minter);
        minter[_minter] = true;
        emit MinterAdded(_minter);
      }
    }
  }

  function removeMinters(address[] memory _removedMinters) public onlyAdmin {
    address _minter;

    for (uint256 i = 0; i < _removedMinters.length; i++) {
      _minter = _removedMinters[i];

      if (minter[_minter]) {
        minter[_minter] = false;
        emit MinterRemoved(_minter);
      }
    }

    uint256 i = 0;

    while (i < minters.length) {
      _minter = minters[i];

      if (!minter[_minter]) {
        minters[i] = minters[minters.length - 1];
        delete minters[minters.length - 1];
        minters.length--;
      } else {
        i++;
      }
    }
  }

  function isMinter(address _addr) public view returns (bool) {
    return minter[_addr];
  }
}

// File: token/erc20/ERC20Mintable.sol

pragma solidity 0.5.17;




contract ERC20Mintable is HasMinters, ERC20 {
  function mint(address _to, uint256 _value) public onlyMinter returns (bool _success) {
    return _mint(_to, _value);
  }

  function _mint(address _to, uint256 _value) internal returns (bool success) {
    totalSupply = totalSupply.add(_value);
    balanceOf[_to] = balanceOf[_to].add(_value);
    emit Transfer(address(0), _to, _value);
    return true;
  }
}

// File: SmoothLovePotion.sol

pragma solidity 0.5.17;





contract SmoothLovePotion is ERC20Detailed, ERC20Mintable, ERC20GatewayWhitelist {
  constructor(address _mainchainGateway)
    public
    ERC20Detailed("Smooth Love Potion", "SLP", 0)
  {
    _setGateway(_mainchainGateway);

    address[] memory _minters = new address[](1);
    _minters[0] = _mainchainGateway;
    addMinters(_minters);
  }
} < 

SmoothLovePotion ABI

[{"inputs":[{"internalType":"address","name":"_mainchainGateway","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"_newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldAdmin","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_addedMinters","type":"address[]"}],"name":"addMinters","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mainchainGateway","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_removedMinters","type":"address[]"}],"name":"removeMinters","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
[{"inputs":[{"internalType":"address","name":"_mainchainGateway","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"_newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldAdmin","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_addedMinters","type":"address[]"}],"name":"addMinters","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mainchainGateway","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_removedMinters","type":"address[]"}],"name":"removeMinters","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

SmoothLovePotion Bytecode

60806040523480156200001157600080fd5b506040516200167438038062001674833981810160405260208110156200003757600080fd5b5051604080518082018252601281527129b6b7b7ba34102637bb32902837ba34b7b760711b6020828101919091528251808401845260038152620534c560ec1b91810191909152600080546001600160a01b031916331780825593519293919290916001600160a01b03169082907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f908290a38251620000df90600690602086019062000330565b508151620000f590600790602085019062000330565b506008805460ff191660ff9290921691909117905550620001189050816200017d565b6040805160018082528183019092526060916020808301908038833901905050905081816000815181106200014957fe5b6001600160a01b039092166020928302919091019091015262000175816001600160e01b03620001ec16565b5050620003d5565b6001600160a01b038116620001c45760405162461bcd60e51b815260040180806020018281038252603a8152602001806200163a603a913960400191505060405180910390fd5b600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146200024c576040805162461bcd60e51b815260206004820152601360248201527f48617341646d696e3a206e6f742061646d696e00000000000000000000000000604482015290519081900360640190fd5b6000805b82518110156200032b578281815181106200026757fe5b6020908102919091018101516001600160a01b0381166000908152600290925260409091205490925060ff1662000322576001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038516908117909155600081815260026020526040808220805460ff1916909417909355915190917f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f691a25b60010162000250565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200037357805160ff1916838001178555620003a3565b82800160010185558215620003a3579182015b82811115620003a357825182559160200191906001019062000386565b50620003b1929150620003b5565b5090565b620003d291905b80821115620003b15760008155600101620003bc565b90565b61125580620003e56000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b85780639a202d471161007c5780639a202d47146104c2578063a457c2d7146104ca578063a9059cbb146104f6578063aa271e1a14610522578063dd62ed3e14610548578063f851a4401461057657610137565b806370a08231146103ae57806371e2a657146103d45780638623ec7b146104775780638f2839701461049457806395d89b41146104ba57610137565b806339509351116100ff57806339509351146102675780633dd08c381461029357806340c10f19146102b95780635a4ccad8146102e55780635fc1964f1461030957610137565b806306fdde031461013c578063095ea7b3146101b957806318160ddd146101f957806323b872dd14610213578063313ce56714610249575b600080fd5b61014461057e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017e578181015183820152602001610166565b50505050905090810190601f1680156101ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e5600480360360408110156101cf57600080fd5b506001600160a01b03813516906020013561060c565b604080519115158252519081900360200190f35b610201610623565b60408051918252519081900360200190f35b6101e56004803603606081101561022957600080fd5b506001600160a01b03813581169160208101359091169060400135610629565b610251610692565b6040805160ff9092168252519081900360200190f35b6101e56004803603604081101561027d57600080fd5b506001600160a01b03813516906020013561069b565b6101e5600480360360208110156102a957600080fd5b50356001600160a01b03166106d7565b6101e5600480360360408110156102cf57600080fd5b506001600160a01b0381351690602001356106ec565b6102ed610719565b604080516001600160a01b039092168252519081900360200190f35b6103ac6004803603602081101561031f57600080fd5b81019060208101813564010000000081111561033a57600080fd5b82018360208201111561034c57600080fd5b8035906020019184602083028401116401000000008311171561036e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061072d945050505050565b005b610201600480360360208110156103c457600080fd5b50356001600160a01b0316610918565b6103ac600480360360208110156103ea57600080fd5b81019060208101813564010000000081111561040557600080fd5b82018360208201111561041757600080fd5b8035906020019184602083028401116401000000008311171561043957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061092a945050505050565b6102ed6004803603602081101561048d57600080fd5b5035610a5a565b6103ac600480360360208110156104aa57600080fd5b50356001600160a01b0316610a81565b610144610b76565b6103ac610bd1565b6101e5600480360360408110156104e057600080fd5b506001600160a01b038135169060200135610c6e565b6101e56004803603604081101561050c57600080fd5b506001600160a01b038135169060200135610caa565b6101e56004803603602081101561053857600080fd5b50356001600160a01b0316610cb7565b6102016004803603604081101561055e57600080fd5b506001600160a01b0381358116916020013516610cd5565b6102ed610d28565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b505050505081565b6000610619338484610d37565b5060015b92915050565b60035481565b60006000196106388533610cd5565b1461067d576001600160a01b03841660009081526005602090815260408083203380855292529091205461067d918691610678908663ffffffff610e2316565b610d37565b610688848484610e80565b5060019392505050565b60085460ff1681565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610619918590610678908663ffffffff61100c16565b60026020526000908152604090205460ff1681565b3360009081526002602052604081205460ff1661070857600080fd5b6107128383611064565b9392505050565b60085461010090046001600160a01b031681565b6000546001600160a01b03163314610782576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b6000805b825181101561081b5782818151811061079b57fe5b6020908102919091018101516001600160a01b0381166000908152600290925260409091205490925060ff1615610813576001600160a01b038216600081815260026020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a25b600101610786565b5060005b600154811015610913576001818154811061083657fe5b60009182526020808320909101546001600160a01b0316808352600290915260409091205490925060ff1661090a5760018054600019810190811061087757fe5b600091825260209091200154600180546001600160a01b03909216918390811061089d57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556001805460001981019081106108d857fe5b600091825260209091200180546001600160a01b03191690556001805490610904906000198301611103565b5061090e565b6001015b61081f565b505050565b60046020526000908152604090205481565b6000546001600160a01b0316331461097f576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b6000805b82518110156109135782818151811061099857fe5b6020908102919091018101516001600160a01b0381166000908152600290925260409091205490925060ff16610a52576001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038516908117909155600081815260026020526040808220805460ff1916909417909355915190917f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f691a25b600101610983565b60018181548110610a6757fe5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610ad6576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b6001600160a01b038116610b1b5760405162461bcd60e51b81526004018080602001828103825260278152602001806111fa6027913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106045780601f106105d957610100808354040283529160200191610604565b6000546001600160a01b03163314610c26576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b600080546040516001600160a01b03909116917fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f91a2600080546001600160a01b0319169055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610619918590610678908663ffffffff610e2316565b6000610619338484610e80565b6001600160a01b031660009081526002602052604090205460ff1690565b6008546000906001600160a01b03838116610100909204161415610cfc575060001961061d565b506001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6000546001600160a01b031681565b6001600160a01b038316610d7c5760405162461bcd60e51b81526004018080602001828103825260248152602001806111d66024913960400191505060405180910390fd5b6001600160a01b038216610dc15760405162461bcd60e51b81526004018080602001828103825260228152602001806111676022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082821115610e7a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b038316610ec55760405162461bcd60e51b81526004018080602001828103825260258152602001806111b16025913960400191505060405180910390fd5b6001600160a01b038216610f0a5760405162461bcd60e51b81526004018080602001828103825260238152602001806111446023913960400191505060405180910390fd5b6001600160a01b038216301415610f525760405162461bcd60e51b81526004018080602001828103825260288152602001806111896028913960400191505060405180910390fd5b6001600160a01b038316600090815260046020526040902054610f7b908263ffffffff610e2316565b6001600160a01b038085166000908152600460205260408082209390935590841681522054610fb0908263ffffffff61100c16565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b8181018281101561061d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60035460009061107a908363ffffffff61100c16565b6003556001600160a01b0383166000908152600460205260409020546110a6908363ffffffff61100c16565b6001600160a01b03841660008181526004602090815260408083209490945583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b8154818355818111156109135760008381526020902061091391810190830161114091905b8082111561113c5760008155600101611128565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220746f207468697320636f6e7472616374206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737348617341646d696e3a206e65772061646d696e20697320746865207a65726f2061646472657373a265627a7a72315820421285222a2aa99fd21611026104aa4615ad63a03f985d5f265e9c60a270dd9264736f6c6343000511003245524332304761746577617957686974656c6973743a2073657474696e67206761746577617920746f20746865207a65726f20616464726573730000000000000000000000001a2a1c938ce3ec39b6d47113c7955baa9dd454f2
60806040523480156200001157600080fd5b506040516200167438038062001674833981810160405260208110156200003757600080fd5b5051604080518082018252601281527129b6b7b7ba34102637bb32902837ba34b7b760711b6020828101919091528251808401845260038152620534c560ec1b91810191909152600080546001600160a01b031916331780825593519293919290916001600160a01b03169082907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f908290a38251620000df90600690602086019062000330565b508151620000f590600790602085019062000330565b506008805460ff191660ff9290921691909117905550620001189050816200017d565b6040805160018082528183019092526060916020808301908038833901905050905081816000815181106200014957fe5b6001600160a01b039092166020928302919091019091015262000175816001600160e01b03620001ec16565b5050620003d5565b6001600160a01b038116620001c45760405162461bcd60e51b815260040180806020018281038252603a8152602001806200163a603a913960400191505060405180910390fd5b600880546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146200024c576040805162461bcd60e51b815260206004820152601360248201527f48617341646d696e3a206e6f742061646d696e00000000000000000000000000604482015290519081900360640190fd5b6000805b82518110156200032b578281815181106200026757fe5b6020908102919091018101516001600160a01b0381166000908152600290925260409091205490925060ff1662000322576001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038516908117909155600081815260026020526040808220805460ff1916909417909355915190917f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f691a25b60010162000250565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200037357805160ff1916838001178555620003a3565b82800160010185558215620003a3579182015b82811115620003a357825182559160200191906001019062000386565b50620003b1929150620003b5565b5090565b620003d291905b80821115620003b15760008155600101620003bc565b90565b61125580620003e56000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b85780639a202d471161007c5780639a202d47146104c2578063a457c2d7146104ca578063a9059cbb146104f6578063aa271e1a14610522578063dd62ed3e14610548578063f851a4401461057657610137565b806370a08231146103ae57806371e2a657146103d45780638623ec7b146104775780638f2839701461049457806395d89b41146104ba57610137565b806339509351116100ff57806339509351146102675780633dd08c381461029357806340c10f19146102b95780635a4ccad8146102e55780635fc1964f1461030957610137565b806306fdde031461013c578063095ea7b3146101b957806318160ddd146101f957806323b872dd14610213578063313ce56714610249575b600080fd5b61014461057e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017e578181015183820152602001610166565b50505050905090810190601f1680156101ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e5600480360360408110156101cf57600080fd5b506001600160a01b03813516906020013561060c565b604080519115158252519081900360200190f35b610201610623565b60408051918252519081900360200190f35b6101e56004803603606081101561022957600080fd5b506001600160a01b03813581169160208101359091169060400135610629565b610251610692565b6040805160ff9092168252519081900360200190f35b6101e56004803603604081101561027d57600080fd5b506001600160a01b03813516906020013561069b565b6101e5600480360360208110156102a957600080fd5b50356001600160a01b03166106d7565b6101e5600480360360408110156102cf57600080fd5b506001600160a01b0381351690602001356106ec565b6102ed610719565b604080516001600160a01b039092168252519081900360200190f35b6103ac6004803603602081101561031f57600080fd5b81019060208101813564010000000081111561033a57600080fd5b82018360208201111561034c57600080fd5b8035906020019184602083028401116401000000008311171561036e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061072d945050505050565b005b610201600480360360208110156103c457600080fd5b50356001600160a01b0316610918565b6103ac600480360360208110156103ea57600080fd5b81019060208101813564010000000081111561040557600080fd5b82018360208201111561041757600080fd5b8035906020019184602083028401116401000000008311171561043957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061092a945050505050565b6102ed6004803603602081101561048d57600080fd5b5035610a5a565b6103ac600480360360208110156104aa57600080fd5b50356001600160a01b0316610a81565b610144610b76565b6103ac610bd1565b6101e5600480360360408110156104e057600080fd5b506001600160a01b038135169060200135610c6e565b6101e56004803603604081101561050c57600080fd5b506001600160a01b038135169060200135610caa565b6101e56004803603602081101561053857600080fd5b50356001600160a01b0316610cb7565b6102016004803603604081101561055e57600080fd5b506001600160a01b0381358116916020013516610cd5565b6102ed610d28565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b505050505081565b6000610619338484610d37565b5060015b92915050565b60035481565b60006000196106388533610cd5565b1461067d576001600160a01b03841660009081526005602090815260408083203380855292529091205461067d918691610678908663ffffffff610e2316565b610d37565b610688848484610e80565b5060019392505050565b60085460ff1681565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610619918590610678908663ffffffff61100c16565b60026020526000908152604090205460ff1681565b3360009081526002602052604081205460ff1661070857600080fd5b6107128383611064565b9392505050565b60085461010090046001600160a01b031681565b6000546001600160a01b03163314610782576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b6000805b825181101561081b5782818151811061079b57fe5b6020908102919091018101516001600160a01b0381166000908152600290925260409091205490925060ff1615610813576001600160a01b038216600081815260026020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a25b600101610786565b5060005b600154811015610913576001818154811061083657fe5b60009182526020808320909101546001600160a01b0316808352600290915260409091205490925060ff1661090a5760018054600019810190811061087757fe5b600091825260209091200154600180546001600160a01b03909216918390811061089d57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556001805460001981019081106108d857fe5b600091825260209091200180546001600160a01b03191690556001805490610904906000198301611103565b5061090e565b6001015b61081f565b505050565b60046020526000908152604090205481565b6000546001600160a01b0316331461097f576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b6000805b82518110156109135782818151811061099857fe5b6020908102919091018101516001600160a01b0381166000908152600290925260409091205490925060ff16610a52576001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038516908117909155600081815260026020526040808220805460ff1916909417909355915190917f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f691a25b600101610983565b60018181548110610a6757fe5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610ad6576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b6001600160a01b038116610b1b5760405162461bcd60e51b81526004018080602001828103825260278152602001806111fa6027913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106045780601f106105d957610100808354040283529160200191610604565b6000546001600160a01b03163314610c26576040805162461bcd60e51b81526020600482015260136024820152722430b9a0b236b4b71d103737ba1030b236b4b760691b604482015290519081900360640190fd5b600080546040516001600160a01b03909116917fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f91a2600080546001600160a01b0319169055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610619918590610678908663ffffffff610e2316565b6000610619338484610e80565b6001600160a01b031660009081526002602052604090205460ff1690565b6008546000906001600160a01b03838116610100909204161415610cfc575060001961061d565b506001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6000546001600160a01b031681565b6001600160a01b038316610d7c5760405162461bcd60e51b81526004018080602001828103825260248152602001806111d66024913960400191505060405180910390fd5b6001600160a01b038216610dc15760405162461bcd60e51b81526004018080602001828103825260228152602001806111676022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082821115610e7a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b038316610ec55760405162461bcd60e51b81526004018080602001828103825260258152602001806111b16025913960400191505060405180910390fd5b6001600160a01b038216610f0a5760405162461bcd60e51b81526004018080602001828103825260238152602001806111446023913960400191505060405180910390fd5b6001600160a01b038216301415610f525760405162461bcd60e51b81526004018080602001828103825260288152602001806111896028913960400191505060405180910390fd5b6001600160a01b038316600090815260046020526040902054610f7b908263ffffffff610e2316565b6001600160a01b038085166000908152600460205260408082209390935590841681522054610fb0908263ffffffff61100c16565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b8181018281101561061d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60035460009061107a908363ffffffff61100c16565b6003556001600160a01b0383166000908152600460205260409020546110a6908363ffffffff61100c16565b6001600160a01b03841660008181526004602090815260408083209490945583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b8154818355818111156109135760008381526020902061091391810190830161114091905b8082111561113c5760008155600101611128565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220746f207468697320636f6e7472616374206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737348617341646d696e3a206e65772061646d696e20697320746865207a65726f2061646472657373a265627a7a72315820421285222a2aa99fd21611026104aa4615ad63a03f985d5f265e9c60a270dd9264736f6c6343000511003245524332304761746577617957686974656c6973743a2073657474696e67206761746577617920746f20746865207a65726f20616464726573730000000000000000000000001a2a1c938ce3ec39b6d47113c7955baa9dd454f2

Check out more smart contracts

Build blockchain magic with Alchemy

Alchemy combines the most powerful web3 developer products and tools with resources, community and legendary support.