Verified
Ethereum
Verified, Token
Solidity
Verified
Ethereum

Contract Information

The following smart contract is called AXSToken and it is an ERC20 token with a total supply of 270 million AXS tokens. The contract inherits from ERC20Detailed and ERC20GatewayWhitelist contracts. The constructor sets the token name, symbol, and decimal places. It also sets the total supply, assigns the entire supply to the contract creator, and sets the mainchain gateway address.
More Info

AXSToken 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: AXSToken.sol pragma solidity 0.5.17; contract AXSToken is ERC20Detailed, ERC20GatewayWhitelist { constructor(address _mainchainGateway) public ERC20Detailed("Axie Infinity Shard", "AXS", 18) { totalSupply = uint256(270000000).mul(uint256(10)**18); balanceOf[msg.sender] = totalSupply; emit Transfer(address(0), msg.sender, totalSupply); _setGateway(_mainchainGateway); } }
< // 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: AXSToken.sol

pragma solidity 0.5.17;




contract AXSToken is ERC20Detailed, ERC20GatewayWhitelist {
  constructor(address _mainchainGateway)
    public
    ERC20Detailed("Axie Infinity Shard", "AXS", 18)
  {
    totalSupply = uint256(270000000).mul(uint256(10)**18);
    balanceOf[msg.sender] = totalSupply;
    emit Transfer(address(0), msg.sender, totalSupply);

    _setGateway(_mainchainGateway);
  }
} < 

AXSToken ABI

[{"inputs":[{"internalType":"address","name":"_mainchainGateway","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":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":[],"name":"mainchainGateway","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":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":"_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":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":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":[],"name":"mainchainGateway","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":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"}]

AXSToken Bytecode

60806040523480156200001157600080fd5b5060405162000d2b38038062000d2b833981810160405260208110156200003757600080fd5b5051604080518082018252601381527f4178696520496e66696e697479205368617264000000000000000000000000006020828101918252835180850190945260038085526241585360e81b9185019190915282519293926012926200009e92916200022a565b508151620000b49060049060208501906200022a565b506005805460ff191660ff9290921691909117905550620000f09050631017df80670de0b6b3a764000062000156602090811b6200088b17901c565b60008181553380825260016020908152604080842085905580519485525191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a36200014f816001600160e01b03620001bb16565b50620002cf565b6000826200016757506000620001b5565b50818102818382816200017657fe5b0414620001b55760405162461bcd60e51b815260040180806020018281038252602181526020018062000d0a6021913960400191505060405180910390fd5b92915050565b6001600160a01b038116620002025760405162461bcd60e51b815260040180806020018281038252603a81526020018062000cd0603a913960400191505060405180910390fd5b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026d57805160ff19168380011785556200029d565b828001600101855582156200029d579182015b828111156200029d57825182559160200191906001019062000280565b50620002ab929150620002af565b5090565b620002cc91905b80821115620002ab5760008155600101620002b6565b90565b6109f180620002df6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635a4ccad8116100715780635a4ccad81461021057806370a082311461023457806395d89b411461025a578063a457c2d714610262578063a9059cbb1461028e578063dd62ed3e146102ba576100b4565b806306fdde03146100b9578063095ea7b31461013657806318160ddd1461017657806323b872dd14610190578063313ce567146101c657806339509351146101e4575b600080fd5b6100c16102e8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100fb5781810151838201526020016100e3565b50505050905090810190601f1680156101285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101626004803603604081101561014c57600080fd5b506001600160a01b038135169060200135610376565b604080519115158252519081900360200190f35b61017e61038d565b60408051918252519081900360200190f35b610162600480360360608110156101a657600080fd5b506001600160a01b03813581169160208101359091169060400135610393565b6101ce6103fc565b6040805160ff9092168252519081900360200190f35b610162600480360360408110156101fa57600080fd5b506001600160a01b038135169060200135610405565b610218610441565b604080516001600160a01b039092168252519081900360200190f35b61017e6004803603602081101561024a57600080fd5b50356001600160a01b0316610455565b6100c1610467565b6101626004803603604081101561027857600080fd5b506001600160a01b0381351690602001356104c2565b610162600480360360408110156102a457600080fd5b506001600160a01b0381351690602001356104fe565b61017e600480360360408110156102d057600080fd5b506001600160a01b038135811691602001351661050b565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561036e5780601f106103435761010080835404028352916020019161036e565b820191906000526020600020905b81548152906001019060200180831161035157829003601f168201915b505050505081565b600061038333848461055e565b5060015b92915050565b60005481565b60006000196103a2853361050b565b146103e7576001600160a01b0384166000908152600260209081526040808320338085529252909120546103e79186916103e2908663ffffffff61064a16565b61055e565b6103f28484846106a7565b5060019392505050565b60055460ff1681565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103839185906103e2908663ffffffff61083316565b60055461010090046001600160a01b031681565b60016020526000908152604090205481565b6004805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561036e5780601f106103435761010080835404028352916020019161036e565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103839185906103e2908663ffffffff61064a16565b60006103833384846106a7565b6005546000906001600160a01b038381166101009092041614156105325750600019610387565b506001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6001600160a01b0383166105a35760405162461bcd60e51b81526004018080602001828103825260248152602001806109996024913960400191505060405180910390fd5b6001600160a01b0382166105e85760405162461bcd60e51b81526004018080602001828103825260228152602001806109096022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000828211156106a1576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0383166106ec5760405162461bcd60e51b81526004018080602001828103825260258152602001806109746025913960400191505060405180910390fd5b6001600160a01b0382166107315760405162461bcd60e51b81526004018080602001828103825260238152602001806108e66023913960400191505060405180910390fd5b6001600160a01b0382163014156107795760405162461bcd60e51b815260040180806020018281038252602881526020018061092b6028913960400191505060405180910390fd5b6001600160a01b0383166000908152600160205260409020546107a2908263ffffffff61064a16565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546107d7908263ffffffff61083316565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b81810182811015610387576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261089a57506000610387565b50818102818382816108a857fe5b04146103875760405162461bcd60e51b81526004018080602001828103825260218152602001806109536021913960400191505060405180910390fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220746f207468697320636f6e74726163742061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a7231582095f49deabe52e00860ba84f6d37c2f2e1a01e050df211941a057490c6d93f0ab64736f6c6343000511003245524332304761746577617957686974656c6973743a2073657474696e67206761746577617920746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f770000000000000000000000001a2a1c938ce3ec39b6d47113c7955baa9dd454f2
60806040523480156200001157600080fd5b5060405162000d2b38038062000d2b833981810160405260208110156200003757600080fd5b5051604080518082018252601381527f4178696520496e66696e697479205368617264000000000000000000000000006020828101918252835180850190945260038085526241585360e81b9185019190915282519293926012926200009e92916200022a565b508151620000b49060049060208501906200022a565b506005805460ff191660ff9290921691909117905550620000f09050631017df80670de0b6b3a764000062000156602090811b6200088b17901c565b60008181553380825260016020908152604080842085905580519485525191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a36200014f816001600160e01b03620001bb16565b50620002cf565b6000826200016757506000620001b5565b50818102818382816200017657fe5b0414620001b55760405162461bcd60e51b815260040180806020018281038252602181526020018062000d0a6021913960400191505060405180910390fd5b92915050565b6001600160a01b038116620002025760405162461bcd60e51b815260040180806020018281038252603a81526020018062000cd0603a913960400191505060405180910390fd5b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026d57805160ff19168380011785556200029d565b828001600101855582156200029d579182015b828111156200029d57825182559160200191906001019062000280565b50620002ab929150620002af565b5090565b620002cc91905b80821115620002ab5760008155600101620002b6565b90565b6109f180620002df6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80635a4ccad8116100715780635a4ccad81461021057806370a082311461023457806395d89b411461025a578063a457c2d714610262578063a9059cbb1461028e578063dd62ed3e146102ba576100b4565b806306fdde03146100b9578063095ea7b31461013657806318160ddd1461017657806323b872dd14610190578063313ce567146101c657806339509351146101e4575b600080fd5b6100c16102e8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100fb5781810151838201526020016100e3565b50505050905090810190601f1680156101285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101626004803603604081101561014c57600080fd5b506001600160a01b038135169060200135610376565b604080519115158252519081900360200190f35b61017e61038d565b60408051918252519081900360200190f35b610162600480360360608110156101a657600080fd5b506001600160a01b03813581169160208101359091169060400135610393565b6101ce6103fc565b6040805160ff9092168252519081900360200190f35b610162600480360360408110156101fa57600080fd5b506001600160a01b038135169060200135610405565b610218610441565b604080516001600160a01b039092168252519081900360200190f35b61017e6004803603602081101561024a57600080fd5b50356001600160a01b0316610455565b6100c1610467565b6101626004803603604081101561027857600080fd5b506001600160a01b0381351690602001356104c2565b610162600480360360408110156102a457600080fd5b506001600160a01b0381351690602001356104fe565b61017e600480360360408110156102d057600080fd5b506001600160a01b038135811691602001351661050b565b6003805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561036e5780601f106103435761010080835404028352916020019161036e565b820191906000526020600020905b81548152906001019060200180831161035157829003601f168201915b505050505081565b600061038333848461055e565b5060015b92915050565b60005481565b60006000196103a2853361050b565b146103e7576001600160a01b0384166000908152600260209081526040808320338085529252909120546103e79186916103e2908663ffffffff61064a16565b61055e565b6103f28484846106a7565b5060019392505050565b60055460ff1681565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103839185906103e2908663ffffffff61083316565b60055461010090046001600160a01b031681565b60016020526000908152604090205481565b6004805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561036e5780601f106103435761010080835404028352916020019161036e565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103839185906103e2908663ffffffff61064a16565b60006103833384846106a7565b6005546000906001600160a01b038381166101009092041614156105325750600019610387565b506001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6001600160a01b0383166105a35760405162461bcd60e51b81526004018080602001828103825260248152602001806109996024913960400191505060405180910390fd5b6001600160a01b0382166105e85760405162461bcd60e51b81526004018080602001828103825260228152602001806109096022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000828211156106a1576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0383166106ec5760405162461bcd60e51b81526004018080602001828103825260258152602001806109746025913960400191505060405180910390fd5b6001600160a01b0382166107315760405162461bcd60e51b81526004018080602001828103825260238152602001806108e66023913960400191505060405180910390fd5b6001600160a01b0382163014156107795760405162461bcd60e51b815260040180806020018281038252602881526020018061092b6028913960400191505060405180910390fd5b6001600160a01b0383166000908152600160205260409020546107a2908263ffffffff61064a16565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546107d7908263ffffffff61083316565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b81810182811015610387576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261089a57506000610387565b50818102818382816108a857fe5b04146103875760405162461bcd60e51b81526004018080602001828103825260218152602001806109536021913960400191505060405180910390fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220746f207468697320636f6e74726163742061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a265627a7a7231582095f49deabe52e00860ba84f6d37c2f2e1a01e050df211941a057490c6d93f0ab64736f6c6343000511003245524332304761746577617957686974656c6973743a2073657474696e67206761746577617920746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f770000000000000000000000001a2a1c938ce3ec39b6d47113c7955baa9dd454f2

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.