ERC-20
Source Code
Overview
Max Total Supply
2.426438 ERC20 ***
Holders
16
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xB8f0a8FC...7ee5E6980 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
ERC223WrapperToken
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-11-30
*/
pragma solidity =0.8.19;
// ERC-7417 Token Converter and all the related contracts.
// https://eips.ethereum.org/EIPS/eip-7417
// Written by Dexaran (dexaran@ethereumclassic.org & x.com/Dexaran)
// ERC-20 token standard contains a known flaw described here: https://medium.com/dex223/known-problems-of-erc20-token-standard-e98887b9532c
// If a ERC-20 token is transferred to a smart-contract which is not designed to receive them
// then instead of an error the transfer successfully moves tokens to the balance of the contract.
// In this case ERC-20 tokens get permanently stuck on the balance of the contract they were deposited to.
// As of 31 November, 2024 $83,000,000 worth of ERC-20 tokens were lost because of this issue https://dexaran.github.io/erc20-losses/
// In order to mitigate this problem the Converter and wrapper contracts implement an extraction function which allows the
// address that deployed them to extract any stuck ERC-20 tokens.
// Contact information is provided so that anyone who has deposited tokens into the contract can request a token withdrawal.
/* Disclaimer of liability
YOU ACKNOWLEDGE AND AGREE THAT THE SOFTWARE IS PROVIDED TO YOU ON AN "AS IS" BASIS.
THE LICENSOR DISCLAIMS ANY AND ALL REPRESENTATIONS AND WARRANTIES, EXPRESS OR IMPLIED
INCLUDING (WITHOUT LIMITATION) ANY IMPLIED WARRANTIES OF MERCHANTABILITY, OR HARDWARE
OR SOFTWARE COMPATIBILITY, OR FITNESS FOR A PARTICULAR PURPOSE OR USE, INCLUDING YOUR
PARTICULAR BUSINESS OR INTENDED USE, OR OF THE SOFTWARE'S RELIABILITY, PERFORMANCE OR
CONTINUED AVAILABILITY. THE LICENSOR DOES NOT REPRESENT OR WARRANT THAT THE
SOFTWARE OR EXPORT DATA MADE THEREOF WILL BE FREE FROM ANY DEFECTS OR ERRORS AND THAT ANY SUCH
EFFECTS OR ERRORS WILL BE CORRECTED, OR THAT IT WILL OPERATE WITHOUT INTERRUPTION.
YOU AGREE THAT YOU ARE SOLELY RESPONSIBLE FOR ALL COSTS AND EXPENSES ASSOCIATED
WITH RECTIFICATION, REPAIR OR DAMAGE CAUSED BY SUCH DEFECTS, ERRORS OR INTERRUPTIONS.
FURTHER, THE LICENSOR DOES NOT REPRESENT AND WARRANT THAT THE SOFTWARE DOES NOT
INFRINGE THE INTELLECTUAL PROPERTY RIGHT OF ANY OTHER PERSON. YOU ACCEPT
RESPONSIBILITY TO VERIFY THAT THE SOFTWARE MEETS YOUR SPECIFIC REQUIREMENTS.
*/
library Address {
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
/// @return The name of the token
function name() external view returns (string memory);
/// @return The symbol of the token
function symbol() external view returns (string memory);
/// @return The number of decimal places the token has
function decimals() external view returns (uint8);
}
abstract contract IERC223Recipient {
function tokenReceived(address _from, uint _value, bytes memory _data) public virtual returns (bytes4)
{
return 0x8943ec02;
}
}
abstract contract ERC165 {
/*
* bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
*/
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
mapping(bytes4 => bool) private _supportedInterfaces;
constructor () {
// Derived contracts need only register support for their own interfaces,
// we register support for ERC165 itself here
_registerInterface(_INTERFACE_ID_ERC165);
}
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return _supportedInterfaces[interfaceId];
}
function _registerInterface(bytes4 interfaceId) internal virtual {
require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
_supportedInterfaces[interfaceId] = true;
}
}
abstract contract IERC223 {
function name() public view virtual returns (string memory);
function symbol() public view virtual returns (string memory);
function decimals() public view virtual returns (uint8);
function totalSupply() public view virtual returns (uint256);
function balanceOf(address who) public virtual view returns (uint);
function transfer(address to, uint value) public virtual returns (bool success);
function transfer(address to, uint value, bytes calldata data) public payable virtual returns (bool success);
event Transfer(address indexed from, address indexed to, uint value, bytes data);
}
/**
* @dev Interface of the ERC20 standard.
*/
interface IERC223WrapperToken {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function standard() external view returns (string memory);
function origin() external view returns (address);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external payable returns (bool);
function transfer(address to, uint256 value, bytes calldata data) external payable returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function mint(address _recipient, uint256 _quantity) external;
function burn(address _recipient, uint256 _quantity) external;
}
interface IERC20WrapperToken {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function standard() external view returns (string memory);
function origin() external view returns (address);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function mint(address _recipient, uint256 _quantity) external;
function burn(address _recipient, uint256 _quantity) external;
}
contract ERC20Rescue
{
// ERC20 tokens can get stuck on a contracts balance due to lack of error handling.
//
// The author of the ERC7417 can extract ERC20 tokens if they are mistakenly sent
// to the wrapper-contracts balance.
// Contact dexaran@ethereumclassic.org
address public extractor = 0x01000B5fE61411C466b70631d7fF070187179Bbf;
function safeTransfer(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
}
function rescueERC20(address _token, uint256 _amount) external
{
safeTransfer(_token, extractor, _amount);
}
}
contract ERC223WrapperToken is IERC223, ERC165, ERC20Rescue
{
address public creator = msg.sender;
address private wrapper_for;
mapping(address account => mapping(address spender => uint256)) private allowances;
event Transfer(address indexed from, address indexed to, uint256 amount);
event TransferData(bytes data);
event Approval(address indexed owner, address indexed spender, uint256 amount);
function set(address _wrapper_for) external
{
require(msg.sender == creator);
wrapper_for = _wrapper_for;
}
uint256 private _totalSupply;
mapping(address => uint256) private balances; // List of user balances.
function totalSupply() public view override returns (uint256) { return _totalSupply; }
function balanceOf(address _owner) public view override returns (uint256) { return balances[_owner]; }
/**
* @dev The ERC165 introspection function.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return
interfaceId == type(IERC223WrapperToken).interfaceId ||
interfaceId == type(IERC223).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev Standard ERC223 transfer function.
* Calls _to if it is a contract. Does not transfer tokens to contracts
* which do not explicitly declare the tokenReceived function.
* @param _to - transfer recipient. Can be contract or EOA.
* @param _value - the quantity of tokens to transfer.
* @param _data - metadata to send alongside the transaction. Can be used to encode subsequent calls in the recipient.
*/
function transfer(address _to, uint _value, bytes calldata _data) public payable override returns (bool success)
{
balances[msg.sender] = balances[msg.sender] - _value;
balances[_to] = balances[_to] + _value;
if (msg.value > 0)
{
(bool sent, bytes memory data) = _to.call{value: msg.value}("");
require(sent);
}
if(Address.isContract(_to)) {
IERC223Recipient(_to).tokenReceived(msg.sender, _value, _data);
}
emit Transfer(msg.sender, _to, _value); // Old ERC20 compatible event.
emit TransferData(_data); // Log _data in a separate event to keep `event Transfer(...)` compatible
// with the ERC-20 ecosystem.
return true;
}
/**
* @dev Standard ERC223 transfer function without _data parameter. It is supported for
* backwards compatibility with ERC20 services.
* Calls _to if it is a contract. Does not transfer tokens to contracts
* which do not explicitly declare the tokenReceived function.
* @param _to - transfer recipient. Can be contract or EOA.
* @param _value - the quantity of tokens to transfer.
*/
function transfer(address _to, uint _value) public override returns (bool success)
{
bytes memory _empty = hex"00000000";
balances[msg.sender] = balances[msg.sender] - _value;
balances[_to] = balances[_to] + _value;
if(Address.isContract(_to)) {
IERC223Recipient(_to).tokenReceived(msg.sender, _value, _empty);
}
emit Transfer(msg.sender, _to, _value); // Old ERC20 compatible event.
// If the function accepts _data parameter then
// TransferData(...) event is emitted to log data
// separately from the transfer event.
return true;
}
function name() public view override returns (string memory) { return IERC20Metadata(wrapper_for).name(); }
function symbol() public view override returns (string memory) { return string.concat(IERC20Metadata(wrapper_for).symbol(), "223"); }
function decimals() public view override returns (uint8) { return IERC20Metadata(wrapper_for).decimals(); }
function standard() public pure returns (uint32) { return 223; }
function origin() public view returns (address) { return wrapper_for; }
/**
* @dev Minting function which will only be called by the converter contract.
* @param _recipient - the address which will receive tokens.
* @param _quantity - the number of tokens to create.
*/
function mint(address _recipient, uint256 _quantity) external
{
require(msg.sender == creator, "Wrapper Token: Only the creator contract can mint wrapper tokens.");
balances[_recipient] += _quantity;
_totalSupply += _quantity;
emit Transfer(address(0x0), _recipient, _quantity);
}
/**
* @dev Burning function which will only be called by the converter contract.
* @param _quantity - the number of tokens to destroy. TokenConverter can only destroy tokens on it's own address.
* Only the token converter is allowed to burn wrapper-tokens.
*/
function burn(uint256 _quantity) external
{
require(msg.sender == creator, "Wrapper Token: Only the creator contract can destroy wrapper tokens.");
balances[msg.sender] -= _quantity;
_totalSupply -= _quantity;
}
// ERC20 functions for backwards compatibility.
function allowance(address owner, address spender) public view virtual returns (uint256) {
return allowances[owner][spender];
}
function approve(address _spender, uint _value) public returns (bool) {
require(_spender != address(0), "ERC223: Spender error.");
allowances[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function transferFrom(address _from, address _to, uint _value) public returns (bool) {
require(allowances[_from][msg.sender] >= _value, "ERC223: Insufficient allowance.");
balances[_from] -= _value;
allowances[_from][msg.sender] -= _value;
balances[_to] += _value;
emit Transfer(_from, _to, _value); // ERC20 compatible event.
// transferFrom never accepts _data
// so we are not emitting TransferData(...) event here.
return true;
}
}
// Disclaimer of liability
// ERC-20 standard contains a known security problem.
// Transferring ERC-20 tokens to any smart-contract which is not designed to receive tokens
// will resulte in a permanent loss of tokens.
// It is not possible to prevent this on the token's side (other than not to implement ERC-20 standard).
// This service is built to ensure the transition process that would allow to
// stop using ERC-20 tokens and replace them with ERC-223 (a safer standard) instead.
contract ERC20WrapperToken is IERC20, ERC165, ERC20Rescue
{
address public creator = msg.sender;
address public wrapper_for;
mapping(address account => mapping(address spender => uint256)) private allowances;
function set(address _wrapper_for) external
{
require(msg.sender == creator);
wrapper_for = _wrapper_for;
}
uint256 private _totalSupply;
mapping(address => uint256) private balances; // List of user balances.
function balanceOf(address _owner) public view override returns (uint256) { return balances[_owner]; }
function name() public view returns (string memory) { return IERC20Metadata(wrapper_for).name(); }
function symbol() public view returns (string memory) { return string.concat(IERC223(wrapper_for).symbol(), "20"); }
function decimals() public view returns (uint8) { return IERC20Metadata(wrapper_for).decimals(); }
function totalSupply() public view override returns (uint256) { return _totalSupply; }
function origin() public view returns (address) { return wrapper_for; }
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return
interfaceId == type(IERC20).interfaceId ||
interfaceId == type(IERC20WrapperToken).interfaceId ||
super.supportsInterface(interfaceId);
}
function transfer(address _to, uint _value) public override returns (bool success)
{
balances[msg.sender] = balances[msg.sender] - _value;
balances[_to] = balances[_to] + _value;
emit Transfer(msg.sender, _to, _value); // ERC20 compatible event.
// ERC20 transfer function does not accept _data
// so we are not emitting the TransferData(...) event here.
return true;
}
function mint(address _recipient, uint256 _quantity) external
{
require(msg.sender == creator, "Wrapper Token: Only the creator contract can mint wrapper tokens.");
balances[_recipient] += _quantity;
_totalSupply += _quantity;
emit Transfer(address(0x0), _recipient, _quantity);
}
function burn(address _from, uint256 _quantity) external
{
require(msg.sender == creator, "Wrapper Token: Only the creator contract can destroy wrapper tokens.");
balances[_from] -= _quantity;
_totalSupply -= _quantity;
}
function allowance(address owner, address spender) public view virtual returns (uint256) {
return allowances[owner][spender];
}
function approve(address _spender, uint _value) public returns (bool) {
// Safety checks.
require(_spender != address(0), "ERC20: Spender error.");
allowances[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function transferFrom(address _from, address _to, uint _value) public returns (bool) {
require(allowances[_from][msg.sender] >= _value, "ERC20: Insufficient allowance.");
balances[_from] -= _value;
allowances[_from][msg.sender] -= _value;
balances[_to] += _value;
emit Transfer(_from, _to, _value);
return true;
}
}
contract ERC7417TokenConverter is IERC223Recipient
{
event ERC223WrapperCreated(address indexed _token, address indexed _ERC223Wrapper);
event ERC20WrapperCreated(address indexed _token, address indexed _ERC20Wrapper);
mapping (address => ERC223WrapperToken) public erc223Wrappers; // A list of token wrappers. First one is ERC20 origin, second one is ERC223 version.
mapping (address => ERC20WrapperToken) public erc20Wrappers;
mapping (address => address) public erc223Origins;
mapping (address => address) public erc20Origins;
mapping (address => uint256) public erc20Supply; // Token => how much was deposited.
function getERC20WrapperFor(address _token) public view returns (address)
{
return address(erc20Wrappers[_token]);
}
function getERC223WrapperFor(address _token) public view returns (address)
{
return address(erc223Wrappers[_token]);
}
function getERC20OriginFor(address _token) public view returns (address)
{
return (address(erc20Origins[_token]));
}
function getERC223OriginFor(address _token) public view returns (address)
{
return (address(erc223Origins[_token]));
}
function predictWrapperAddress(address _token,
bool _isERC20 // Is the provided _token a ERC20 or not?
// If it is set as ERC20 then we will predict the address of a
// ERC223 wrapper for that token.
// Otherwise we will predict ERC20 wrapper address.
) view external returns (address)
{
bytes memory _bytecode;
if(_isERC20)
{
_bytecode = type(ERC223WrapperToken).creationCode;
}
else
{
_bytecode = type(ERC20WrapperToken).creationCode;
}
bytes32 hash = keccak256(
abi.encodePacked(
bytes1(0xff), address(this), keccak256(abi.encode(_token)), keccak256(_bytecode)
)
);
return address(uint160(uint(hash)));
}
function tokenReceived(address _from, uint _value, bytes memory /* _data */) public override returns (bytes4)
{
require(erc223Origins[msg.sender] == address(0), "Error: creating wrapper for a wrapper token.");
// There are two possible cases:
// 1. A user deposited ERC223 origin token to convert it to ERC20 wrapper
// 2. A user deposited ERC223 wrapper token to unwrap it to ERC20 origin.
if(erc20Origins[msg.sender] != address(0))
{
// Origin for deposited token exists.
// Unwrap ERC-223 wrapper.
erc20Supply[erc20Origins[msg.sender]] -= _value;
safeTransfer(erc20Origins[msg.sender], _from, _value);
ERC223WrapperToken(msg.sender).burn(_value);
return this.tokenReceived.selector;
}
// Otherwise origin for the sender token doesn't exist
// There are two possible cases:
// 1. ERC20 wrapper for the deposited token exists
// 2. ERC20 wrapper for the deposited token doesn't exist and must be created.
else if(address(erc20Wrappers[msg.sender]) == address(0))
{
// Create ERC-20 wrapper if it doesn't exist.
createERC20Wrapper(msg.sender);
}
// Mint ERC-20 wrapper tokens for the deposited ERC-223 token
// if the ERC-20 wrapper didn't exist then it was just created in the above statement.
erc20Wrappers[msg.sender].mint(_from, _value);
return this.tokenReceived.selector;
}
function createERC223Wrapper(address _token) public returns (address)
{
require(address(erc223Wrappers[_token]) == address(0), "ERROR: Wrapper exists");
require(!isWrapper(_token), "Error: Creating wrapper for a wrapper token");
ERC223WrapperToken _newERC223Wrapper = new ERC223WrapperToken{salt: keccak256(abi.encode(_token))}();
_newERC223Wrapper.set(_token);
erc223Wrappers[_token] = _newERC223Wrapper;
erc20Origins[address(_newERC223Wrapper)] = _token;
emit ERC223WrapperCreated(_token, address(_newERC223Wrapper));
return address(_newERC223Wrapper);
}
function createERC20Wrapper(address _token) public returns (address)
{
require(address(erc20Wrappers[_token]) == address(0), "ERROR: Wrapper already exists.");
require(!isWrapper(_token), "Error: Creating wrapper for a wrapper token");
ERC20WrapperToken _newERC20Wrapper = new ERC20WrapperToken{salt: keccak256(abi.encode(_token))}();
_newERC20Wrapper.set(_token);
erc20Wrappers[_token] = _newERC20Wrapper;
erc223Origins[address(_newERC20Wrapper)] = _token;
emit ERC20WrapperCreated(_token, address(_newERC20Wrapper));
return address(_newERC20Wrapper);
}
function wrapERC20toERC223(address _ERC20token, uint256 _amount) public returns (bool)
{
// If there is no active wrapper for a token that user wants to wrap
// then create it.
if(address(erc223Wrappers[_ERC20token]) == address(0))
{
createERC223Wrapper(_ERC20token);
}
uint256 _converterBalance = IERC20(_ERC20token).balanceOf(address(this)); // Safety variable.
safeTransferFrom(_ERC20token, msg.sender, address(this), _amount);
_amount = IERC20(_ERC20token).balanceOf(address(this)) - _converterBalance;
erc20Supply[_ERC20token] += _amount;
erc223Wrappers[_ERC20token].mint(msg.sender, _amount);
return true;
}
function unwrapERC20toERC223(address _ERC20token, uint256 _amount) public returns (bool)
{
require(IERC20(_ERC20token).balanceOf(msg.sender) >= _amount, "Error: Insufficient balance.");
require(erc223Origins[_ERC20token] != address(0), "Error: provided token is not a ERC-20 wrapper.");
ERC20WrapperToken(_ERC20token).burn(msg.sender, _amount);
safeTransfer(erc223Origins[_ERC20token], msg.sender, _amount);
return true;
}
function convertERC20(address _token, uint256 _amount) public returns (bool)
{
if(isWrapper(_token)) return unwrapERC20toERC223(_token, _amount);
else return wrapERC20toERC223(_token, _amount);
}
function isWrapper(address _token) public view returns (bool)
{
return erc20Origins[_token] != address(0) || erc223Origins[_token] != address(0);
}
function extractStuckERC20(address _token) external
{
require(msg.sender == address(0x01000B5fE61411C466b70631d7fF070187179Bbf));
require(address(erc20Wrappers[_token]) == address(0), "Error: provided token is not an ERC-20");
safeTransfer(_token, address(0x01000B5fE61411C466b70631d7fF070187179Bbf), IERC20(_token).balanceOf(address(this)) - erc20Supply[_token]);
}
function safeTransfer(address token, address to, uint value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
}
function safeTransferFrom(address token, address from, address to, uint value) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":"amount","type":"uint256"}],"name":"Transfer","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"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransferData","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extractor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"origin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wrapper_for","type":"address"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"standard","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"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":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
0x6080604052600180546001600160a01b03199081167301000b5fe61411c466b70631d7ff070187179bbf17909155600280549091163317905534801561004457600080fd5b506100556301ffc9a760e01b61005a565b6100dd565b6001600160e01b031980821690036100b85760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b61153a806100ec6000396000f3fe6080604052600436106101445760003560e01c806340c10f19116100c0578063938b5f3211610074578063a9059cbb11610059578063a9059cbb14610385578063be45fd62146103a5578063dd62ed3e146103b857600080fd5b8063938b5f321461035257806395d89b411461037057600080fd5b80635a3b7e42116100a55780635a3b7e42146102e057806370a08231146102fc5780638cd4426d1461033257600080fd5b806340c10f19146102a057806342966c68146102c057600080fd5b806318160ddd1161011757806323b872dd116100fc57806323b872dd146102375780632801617e14610257578063313ce5671461027957600080fd5b806318160ddd146101f857806319d16c491461021757600080fd5b806301ffc9a71461014957806302d05d3f1461017e57806306fdde03146101b6578063095ea7b3146101d8575b600080fd5b34801561015557600080fd5b50610169610164366004611072565b6103fe565b60405190151581526020015b60405180910390f35b34801561018a57600080fd5b5060025461019e906001600160a01b031681565b6040516001600160a01b039091168152602001610175565b3480156101c257600080fd5b506101cb6104d3565b60405161017591906110e6565b3480156101e457600080fd5b506101696101f3366004611115565b610563565b34801561020457600080fd5b506005545b604051908152602001610175565b34801561022357600080fd5b5060015461019e906001600160a01b031681565b34801561024357600080fd5b5061016961025236600461113f565b61063e565b34801561026357600080fd5b5061027761027236600461117b565b6107b6565b005b34801561028557600080fd5b5061028e610807565b60405160ff9091168152602001610175565b3480156102ac57600080fd5b506102776102bb366004611115565b61088e565b3480156102cc57600080fd5b506102776102db366004611196565b6109d9565b3480156102ec57600080fd5b5060405160df8152602001610175565b34801561030857600080fd5b5061020961031736600461117b565b6001600160a01b031660009081526006602052604090205490565b34801561033e57600080fd5b5061027761034d366004611115565b610ada565b34801561035e57600080fd5b506003546001600160a01b031661019e565b34801561037c57600080fd5b506101cb610af6565b34801561039157600080fd5b506101696103a0366004611115565b610ba5565b6101696103b33660046111af565b610cf7565b3480156103c457600080fd5b506102096103d3366004611236565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f3ed8c78500000000000000000000000000000000000000000000000000000000148061049157507fffffffff0000000000000000000000000000000000000000000000000000000082167fddef4e1000000000000000000000000000000000000000000000000000000000145b806104cd57507fffffffff00000000000000000000000000000000000000000000000000000000821660009081526020819052604090205460ff165b92915050565b600354604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916306fdde039160048083019260009291908290030181865afa158015610536573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055e9190810190611298565b905090565b60006001600160a01b0383166105da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433232333a205370656e646572206572726f722e0000000000000000000060448201526064015b60405180910390fd5b3360008181526004602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600192915050565b6001600160a01b03831660009081526004602090815260408083203384529091528120548211156106cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433232333a20496e73756666696369656e7420616c6c6f77616e63652e0060448201526064016105d1565b6001600160a01b038416600090815260066020526040812080548492906106f3908490611374565b90915550506001600160a01b03841660009081526004602090815260408083203384529091528120805484929061072b908490611374565b90915550506001600160a01b03831660009081526006602052604081208054849290610758908490611387565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107a491815260200190565b60405180910390a35060019392505050565b6002546001600160a01b031633146107cd57600080fd5b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600354604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa15801561086a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055e919061139a565b6002546001600160a01b0316331461094e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5772617070657220546f6b656e3a204f6e6c79207468652063726561746f722060448201527f636f6e74726163742063616e206d696e74207772617070657220746f6b656e7360648201527f2e00000000000000000000000000000000000000000000000000000000000000608482015260a4016105d1565b6001600160a01b03821660009081526006602052604081208054839290610976908490611387565b92505081905550806005600082825461098f9190611387565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6002546001600160a01b03163314610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f5772617070657220546f6b656e3a204f6e6c79207468652063726561746f7220908201527f636f6e74726163742063616e2064657374726f79207772617070657220746f6b60648201527f656e732e00000000000000000000000000000000000000000000000000000000608482015260a4016105d1565b3360009081526006602052604081208054839290610ab9908490611374565b925050819055508060056000828254610ad29190611374565b909155505050565b600154610af29083906001600160a01b031683610ede565b5050565b600354604080517f95d89b4100000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916395d89b419160048083019260009291908290030181865afa158015610b59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b819190810190611298565b604051602001610b9191906113bd565b604051602081830303815290604052905090565b60408051808201825260048152600060208083018290523382526006905291822054610bd2908490611374565b33600090815260066020526040808220929092556001600160a01b03861681522054610bff908490611387565b6001600160a01b038516600090815260066020526040902055833b15610cad576040517f8943ec020000000000000000000000000000000000000000000000000000000081526001600160a01b03851690638943ec0290610c68903390879086906004016113fe565b6020604051808303816000875af1158015610c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cab919061142f565b505b6040518381526001600160a01b0385169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060019392505050565b33600090815260066020526040812054610d12908590611374565b33600090815260066020526040808220929092556001600160a01b03871681522054610d3f908590611387565b6001600160a01b0386166000908152600660205260409020553415610dc357600080866001600160a01b03163460405160006040518083038185875af1925050503d8060008114610dac576040519150601f19603f3d011682016040523d82523d6000602084013e610db1565b606091505b509150915081610dc057600080fd5b50505b843b15610e5a576040517f8943ec020000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638943ec0290610e15903390889088908890600401611477565b6020604051808303816000875af1158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e58919061142f565b505b6040518481526001600160a01b0386169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a37f3ba9136826ac751de05d770d8d34fa4440ada49a5fb0e9aa1678aece66dad9768383604051610ecb9291906114aa565b60405180910390a1506001949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691610f6891906114c6565b6000604051808303816000865af19150503d8060008114610fa5576040519150601f19603f3d011682016040523d82523d6000602084013e610faa565b606091505b5091509150818015610fd4575080511580610fd4575080806020019051810190610fd491906114e2565b61103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016105d1565b5050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461106f57600080fd5b50565b60006020828403121561108457600080fd5b813561108f81611041565b9392505050565b60005b838110156110b1578181015183820152602001611099565b50506000910152565b600081518084526110d2816020860160208601611096565b601f01601f19169290920160200192915050565b60208152600061108f60208301846110ba565b80356001600160a01b038116811461111057600080fd5b919050565b6000806040838503121561112857600080fd5b611131836110f9565b946020939093013593505050565b60008060006060848603121561115457600080fd5b61115d846110f9565b925061116b602085016110f9565b9150604084013590509250925092565b60006020828403121561118d57600080fd5b61108f826110f9565b6000602082840312156111a857600080fd5b5035919050565b600080600080606085870312156111c557600080fd5b6111ce856110f9565b935060208501359250604085013567ffffffffffffffff808211156111f257600080fd5b818701915087601f83011261120657600080fd5b81358181111561121557600080fd5b88602082850101111561122757600080fd5b95989497505060200194505050565b6000806040838503121561124957600080fd5b611252836110f9565b9150611260602084016110f9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156112aa57600080fd5b815167ffffffffffffffff808211156112c257600080fd5b818401915084601f8301126112d657600080fd5b8151818111156112e8576112e8611269565b604051601f8201601f19908116603f0116810190838211818310171561131057611310611269565b8160405282815287602084870101111561132957600080fd5b61133a836020830160208801611096565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104cd576104cd611345565b808201808211156104cd576104cd611345565b6000602082840312156113ac57600080fd5b815160ff8116811461108f57600080fd5b600082516113cf818460208701611096565b7f3232330000000000000000000000000000000000000000000000000000000000920191825250600301919050565b6001600160a01b038416815282602082015260606040820152600061142660608301846110ba565b95945050505050565b60006020828403121561144157600080fd5b815161108f81611041565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b03851681528360208201526060604082015260006114a060608301848661144c565b9695505050505050565b6020815260006114be60208301848661144c565b949350505050565b600082516114d8818460208701611096565b9190910192915050565b6000602082840312156114f457600080fd5b8151801515811461108f57600080fdfea26469706673582212201e141e7b503d0d8504f142e7a0d2ac431443eba67444d0b3faeb118e2bd64b8b64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101445760003560e01c806340c10f19116100c0578063938b5f3211610074578063a9059cbb11610059578063a9059cbb14610385578063be45fd62146103a5578063dd62ed3e146103b857600080fd5b8063938b5f321461035257806395d89b411461037057600080fd5b80635a3b7e42116100a55780635a3b7e42146102e057806370a08231146102fc5780638cd4426d1461033257600080fd5b806340c10f19146102a057806342966c68146102c057600080fd5b806318160ddd1161011757806323b872dd116100fc57806323b872dd146102375780632801617e14610257578063313ce5671461027957600080fd5b806318160ddd146101f857806319d16c491461021757600080fd5b806301ffc9a71461014957806302d05d3f1461017e57806306fdde03146101b6578063095ea7b3146101d8575b600080fd5b34801561015557600080fd5b50610169610164366004611072565b6103fe565b60405190151581526020015b60405180910390f35b34801561018a57600080fd5b5060025461019e906001600160a01b031681565b6040516001600160a01b039091168152602001610175565b3480156101c257600080fd5b506101cb6104d3565b60405161017591906110e6565b3480156101e457600080fd5b506101696101f3366004611115565b610563565b34801561020457600080fd5b506005545b604051908152602001610175565b34801561022357600080fd5b5060015461019e906001600160a01b031681565b34801561024357600080fd5b5061016961025236600461113f565b61063e565b34801561026357600080fd5b5061027761027236600461117b565b6107b6565b005b34801561028557600080fd5b5061028e610807565b60405160ff9091168152602001610175565b3480156102ac57600080fd5b506102776102bb366004611115565b61088e565b3480156102cc57600080fd5b506102776102db366004611196565b6109d9565b3480156102ec57600080fd5b5060405160df8152602001610175565b34801561030857600080fd5b5061020961031736600461117b565b6001600160a01b031660009081526006602052604090205490565b34801561033e57600080fd5b5061027761034d366004611115565b610ada565b34801561035e57600080fd5b506003546001600160a01b031661019e565b34801561037c57600080fd5b506101cb610af6565b34801561039157600080fd5b506101696103a0366004611115565b610ba5565b6101696103b33660046111af565b610cf7565b3480156103c457600080fd5b506102096103d3366004611236565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f3ed8c78500000000000000000000000000000000000000000000000000000000148061049157507fffffffff0000000000000000000000000000000000000000000000000000000082167fddef4e1000000000000000000000000000000000000000000000000000000000145b806104cd57507fffffffff00000000000000000000000000000000000000000000000000000000821660009081526020819052604090205460ff165b92915050565b600354604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916306fdde039160048083019260009291908290030181865afa158015610536573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261055e9190810190611298565b905090565b60006001600160a01b0383166105da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433232333a205370656e646572206572726f722e0000000000000000000060448201526064015b60405180910390fd5b3360008181526004602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600192915050565b6001600160a01b03831660009081526004602090815260408083203384529091528120548211156106cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433232333a20496e73756666696369656e7420616c6c6f77616e63652e0060448201526064016105d1565b6001600160a01b038416600090815260066020526040812080548492906106f3908490611374565b90915550506001600160a01b03841660009081526004602090815260408083203384529091528120805484929061072b908490611374565b90915550506001600160a01b03831660009081526006602052604081208054849290610758908490611387565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107a491815260200190565b60405180910390a35060019392505050565b6002546001600160a01b031633146107cd57600080fd5b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600354604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163313ce5679160048083019260209291908290030181865afa15801561086a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055e919061139a565b6002546001600160a01b0316331461094e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5772617070657220546f6b656e3a204f6e6c79207468652063726561746f722060448201527f636f6e74726163742063616e206d696e74207772617070657220746f6b656e7360648201527f2e00000000000000000000000000000000000000000000000000000000000000608482015260a4016105d1565b6001600160a01b03821660009081526006602052604081208054839290610976908490611387565b92505081905550806005600082825461098f9190611387565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6002546001600160a01b03163314610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f5772617070657220546f6b656e3a204f6e6c79207468652063726561746f7220908201527f636f6e74726163742063616e2064657374726f79207772617070657220746f6b60648201527f656e732e00000000000000000000000000000000000000000000000000000000608482015260a4016105d1565b3360009081526006602052604081208054839290610ab9908490611374565b925050819055508060056000828254610ad29190611374565b909155505050565b600154610af29083906001600160a01b031683610ede565b5050565b600354604080517f95d89b4100000000000000000000000000000000000000000000000000000000815290516060926001600160a01b0316916395d89b419160048083019260009291908290030181865afa158015610b59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b819190810190611298565b604051602001610b9191906113bd565b604051602081830303815290604052905090565b60408051808201825260048152600060208083018290523382526006905291822054610bd2908490611374565b33600090815260066020526040808220929092556001600160a01b03861681522054610bff908490611387565b6001600160a01b038516600090815260066020526040902055833b15610cad576040517f8943ec020000000000000000000000000000000000000000000000000000000081526001600160a01b03851690638943ec0290610c68903390879086906004016113fe565b6020604051808303816000875af1158015610c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cab919061142f565b505b6040518381526001600160a01b0385169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060019392505050565b33600090815260066020526040812054610d12908590611374565b33600090815260066020526040808220929092556001600160a01b03871681522054610d3f908590611387565b6001600160a01b0386166000908152600660205260409020553415610dc357600080866001600160a01b03163460405160006040518083038185875af1925050503d8060008114610dac576040519150601f19603f3d011682016040523d82523d6000602084013e610db1565b606091505b509150915081610dc057600080fd5b50505b843b15610e5a576040517f8943ec020000000000000000000000000000000000000000000000000000000081526001600160a01b03861690638943ec0290610e15903390889088908890600401611477565b6020604051808303816000875af1158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e58919061142f565b505b6040518481526001600160a01b0386169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a37f3ba9136826ac751de05d770d8d34fa4440ada49a5fb0e9aa1678aece66dad9768383604051610ecb9291906114aa565b60405180910390a1506001949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691610f6891906114c6565b6000604051808303816000865af19150503d8060008114610fa5576040519150601f19603f3d011682016040523d82523d6000602084013e610faa565b606091505b5091509150818015610fd4575080511580610fd4575080806020019051810190610fd491906114e2565b61103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016105d1565b5050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461106f57600080fd5b50565b60006020828403121561108457600080fd5b813561108f81611041565b9392505050565b60005b838110156110b1578181015183820152602001611099565b50506000910152565b600081518084526110d2816020860160208601611096565b601f01601f19169290920160200192915050565b60208152600061108f60208301846110ba565b80356001600160a01b038116811461111057600080fd5b919050565b6000806040838503121561112857600080fd5b611131836110f9565b946020939093013593505050565b60008060006060848603121561115457600080fd5b61115d846110f9565b925061116b602085016110f9565b9150604084013590509250925092565b60006020828403121561118d57600080fd5b61108f826110f9565b6000602082840312156111a857600080fd5b5035919050565b600080600080606085870312156111c557600080fd5b6111ce856110f9565b935060208501359250604085013567ffffffffffffffff808211156111f257600080fd5b818701915087601f83011261120657600080fd5b81358181111561121557600080fd5b88602082850101111561122757600080fd5b95989497505060200194505050565b6000806040838503121561124957600080fd5b611252836110f9565b9150611260602084016110f9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156112aa57600080fd5b815167ffffffffffffffff808211156112c257600080fd5b818401915084601f8301126112d657600080fd5b8151818111156112e8576112e8611269565b604051601f8201601f19908116603f0116810190838211818310171561131057611310611269565b8160405282815287602084870101111561132957600080fd5b61133a836020830160208801611096565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104cd576104cd611345565b808201808211156104cd576104cd611345565b6000602082840312156113ac57600080fd5b815160ff8116811461108f57600080fd5b600082516113cf818460208701611096565b7f3232330000000000000000000000000000000000000000000000000000000000920191825250600301919050565b6001600160a01b038416815282602082015260606040820152600061142660608301846110ba565b95945050505050565b60006020828403121561144157600080fd5b815161108f81611041565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b03851681528360208201526060604082015260006114a060608301848661144c565b9695505050505050565b6020815260006114be60208301848661144c565b949350505050565b600082516114d8818460208701611096565b9190910192915050565b6000602082840312156114f457600080fd5b8151801515811461108f57600080fdfea26469706673582212201e141e7b503d0d8504f142e7a0d2ac431443eba67444d0b3faeb118e2bd64b8b64736f6c63430008130033
Deployed Bytecode Sourcemap
8601:6606:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9582:292;;;;;;;;;;-1:-1:-1;9582:292:0;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;9582:292:0;;;;;;;;8669:35;;;;;;;;;;-1:-1:-1;8669:35:0;;;;-1:-1:-1;;;;;8669:35:0;;;;;;-1:-1:-1;;;;;802:55:1;;;784:74;;772:2;757:18;8669:35:0;638:226:1;12420:111:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14315:278::-;;;;;;;;;;-1:-1:-1;14315:278:0;;;;;:::i;:::-;;:::i;9300:98::-;;;;;;;;;;-1:-1:-1;9383:12:0;;9300:98;;;2290:25:1;;;2278:2;2263:18;9300:98:0;2144:177:1;8015:69:0;;;;;;;;;;-1:-1:-1;8015:69:0;;;;-1:-1:-1;;;;;8015:69:0;;;14601:603;;;;;;;;;;-1:-1:-1;14601:603:0;;;;;:::i;:::-;;:::i;9041:135::-;;;;;;;;;;-1:-1:-1;9041:135:0;;;;;:::i;:::-;;:::i;:::-;;12678:115;;;;;;;;;;;;;:::i;:::-;;;3022:4:1;3010:17;;;2992:36;;2980:2;2965:18;12678:115:0;2850:184:1;13211:326:0;;;;;;;;;;-1:-1:-1;13211:326:0;;;;;:::i;:::-;;:::i;13855:248::-;;;;;;;;;;-1:-1:-1;13855:248:0;;;;;:::i;:::-;;:::i;12799:80::-;;;;;;;;;;-1:-1:-1;12799:80:0;;12873:3;3368:42:1;;3356:2;3341:18;12799:80:0;3224:192:1;9404:102:0;;;;;;;;;;-1:-1:-1;9404:102:0;;;;;:::i;:::-;-1:-1:-1;;;;;9487:16:0;9469:7;9487:16;;;:8;:16;;;;;;;9404:102;8466:128;;;;;;;;;;-1:-1:-1;8466:128:0;;;;;:::i;:::-;;:::i;12885:88::-;;;;;;;;;;-1:-1:-1;12959:11:0;;-1:-1:-1;;;;;12959:11:0;12885:88;;12537:135;;;;;;;;;;;;;:::i;11644:768::-;;;;;;;;;;-1:-1:-1;11644:768:0;;;;;:::i;:::-;;:::i;10356:828::-;;;;;;:::i;:::-;;:::i;14166:141::-;;;;;;;;;;-1:-1:-1;14166:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;14273:17:0;;;14246:7;14273:17;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;14166:141;9582:292;9667:4;9704:52;;;9719:37;9704:52;;:109;;-1:-1:-1;9773:40:0;;;9788:25;9773:40;9704:109;:162;;;-1:-1:-1;4475:33:0;;;4451:4;4475:33;;;;;;;;;;;;;9830:36;9684:182;9582:292;-1:-1:-1;;9582:292:0:o;12420:111::-;12509:11;;12494:34;;;;;;;;12470:13;;-1:-1:-1;;;;;12509:11:0;;12494:32;;:34;;;;;12509:11;;12494:34;;;;;;;12509:11;12494:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12494:34:0;;;;;;;;;;;;:::i;:::-;12487:41;;12420:111;:::o;14315:278::-;14379:4;-1:-1:-1;;;;;14404:22:0;;14396:57;;;;;;;5776:2:1;14396:57:0;;;5758:21:1;5815:2;5795:18;;;5788:30;5854:24;5834:18;;;5827:52;5896:18;;14396:57:0;;;;;;;;;14477:10;14466:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;14466:32:0;;;;;;;;;;;;:41;;;14523:38;2290:25:1;;;14466:32:0;;14477:10;14523:38;;2263:18:1;14523:38:0;;;;;;;-1:-1:-1;14581:4:0;14315:278;;;;:::o;14601:603::-;-1:-1:-1;;;;;14707:17:0;;14680:4;14707:17;;;:10;:17;;;;;;;;14725:10;14707:29;;;;;;;;:39;-1:-1:-1;14707:39:0;14699:83;;;;;;;6127:2:1;14699:83:0;;;6109:21:1;6166:2;6146:18;;;6139:30;6205:33;6185:18;;;6178:61;6256:18;;14699:83:0;5925:355:1;14699:83:0;-1:-1:-1;;;;;14795:15:0;;;;;;:8;:15;;;;;:25;;14814:6;;14795:15;:25;;14814:6;;14795:25;:::i;:::-;;;;-1:-1:-1;;;;;;;14831:17:0;;;;;;:10;:17;;;;;;;;14849:10;14831:29;;;;;;;:39;;14864:6;;14831:17;:39;;14864:6;;14831:39;:::i;:::-;;;;-1:-1:-1;;;;;;;14881:13:0;;;;;;:8;:13;;;;;:23;;14898:6;;14881:13;:23;;14898:6;;14881:23;:::i;:::-;;;;;;;;14938:3;-1:-1:-1;;;;;14922:28:0;14931:5;-1:-1:-1;;;;;14922:28:0;;14943:6;14922:28;;;;2290:25:1;;2278:2;2263:18;;2144:177;14922:28:0;;;;;;;;-1:-1:-1;15192:4:0;14601:603;;;;;:::o;9041:135::-;9123:7;;-1:-1:-1;;;;;9123:7:0;9109:10;:21;9101:30;;;;;;9142:11;:26;;;;-1:-1:-1;;;;;9142:26:0;;;;;;;;;;9041:135::o;12678:115::-;12767:11;;12752:38;;;;;;;;12728:5;;-1:-1:-1;;;;;12767:11:0;;12752:36;;:38;;;;;;;;;;;;;;12767:11;12752:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13211:326::-;13311:7;;-1:-1:-1;;;;;13311:7:0;13297:10;:21;13289:99;;;;;;;7217:2:1;13289:99:0;;;7199:21:1;7256:2;7236:18;;;7229:30;7295:34;7275:18;;;7268:62;7366:34;7346:18;;;7339:62;7438:3;7417:19;;;7410:32;7459:19;;13289:99:0;7015:469:1;13289:99:0;-1:-1:-1;;;;;13399:20:0;;;;;;:8;:20;;;;;:33;;13423:9;;13399:20;:33;;13423:9;;13399:33;:::i;:::-;;;;;;;;13459:9;13443:12;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;13484:45:0;;2290:25:1;;;-1:-1:-1;;;;;13484:45:0;;;13501:3;;13484:45;;2278:2:1;2263:18;13484:45:0;;;;;;;13211:326;;:::o;13855:248::-;13935:7;;-1:-1:-1;;;;;13935:7:0;13921:10;:21;13913:102;;;;;;;7691:2:1;13913:102:0;;;7673:21:1;7730:2;7710:18;;;7703:30;;;7769:34;7749:18;;;7742:62;7840:34;7820:18;;;7813:62;7912:6;7891:19;;;7884:35;7936:19;;13913:102:0;7489:472:1;13913:102:0;14035:10;14026:20;;;;:8;:20;;;;;:33;;14050:9;;14026:20;:33;;14050:9;;14026:33;:::i;:::-;;;;;;;;14086:9;14070:12;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;13855:248:0:o;8466:128::-;8567:9;;8546:40;;8559:6;;-1:-1:-1;;;;;8567:9:0;8578:7;8546:12;:40::i;:::-;8466:128;;:::o;12537:135::-;12640:11;;12625:36;;;;;;;;12587:13;;-1:-1:-1;;;;;12640:11:0;;12625:34;;:36;;;;;12640:11;;12625:36;;;;;;;12640:11;12625:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12625:36:0;;;;;;;;;;;;:::i;:::-;12611:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;12604:65;;12537:135;:::o;11644:768::-;11743:35;;;;;;;;;;;11713:12;11743:35;;;;;;;11821:10;11812:20;;:8;:20;;;;;;:29;;11835:6;;11812:29;:::i;:::-;11798:10;11789:20;;;;:8;:20;;;;;;:52;;;;-1:-1:-1;;;;;11868:13:0;;;;;;:22;;11884:6;;11868:22;:::i;:::-;-1:-1:-1;;;;;11852:13:0;;;;;;:8;:13;;;;;:38;2617:20;;2656:8;11901:118;;11944:63;;;;;-1:-1:-1;;;;;11944:35:0;;;;;:63;;11980:10;;11992:6;;12000;;11944:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11901:118;12034:33;;2290:25:1;;;-1:-1:-1;;;;;12034:33:0;;;12043:10;;12034:33;;2278:2:1;2263:18;12034:33:0;;;;;;;-1:-1:-1;12400:4:0;;11644:768;-1:-1:-1;;;11644:768:0:o;10356:828::-;10517:10;10455:12;10508:20;;;:8;:20;;;;;;:29;;10531:6;;10508:29;:::i;:::-;10494:10;10485:20;;;;:8;:20;;;;;;:52;;;;-1:-1:-1;;;;;10564:13:0;;;;;;:22;;10580:6;;10564:22;:::i;:::-;-1:-1:-1;;;;;10548:13:0;;;;;;:8;:13;;;;;:38;10601:9;:13;10597:147;;10642:9;10653:17;10674:3;-1:-1:-1;;;;;10674:8:0;10690:9;10674:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10641:63;;;;10727:4;10719:13;;;;;;10626:118;;10597:147;2617:20;;2656:8;10754:117;;10797:62;;;;;-1:-1:-1;;;;;10797:35:0;;;;;:62;;10833:10;;10845:6;;10853:5;;;;10797:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10754:117;10886:33;;2290:25:1;;;-1:-1:-1;;;;;10886:33:0;;;10895:10;;10886:33;;2278:2:1;2263:18;10886:33:0;;;;;;;10966:19;10979:5;;10966:19;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;11172:4:0;10356:828;;;;;;:::o;8097:361::-;8292:45;;;-1:-1:-1;;;;;10503:55:1;;;8292:45:0;;;10485:74:1;10575:18;;;;10568:34;;;8292:45:0;;;;;;;;;;10458:18:1;;;;8292:45:0;;;;;;;;;;;;;8281:57;;-1:-1:-1;;;;8281:10:0;;;;:57;;8292:45;8281:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8245:93;;;;8357:7;:57;;;;-1:-1:-1;8369:11:0;;:16;;:44;;;8400:4;8389:24;;;;;;;;;;;;:::i;:::-;8349:101;;;;;;;11389:2:1;8349:101:0;;;11371:21:1;11428:2;11408:18;;;11401:30;11467:33;11447:18;;;11440:61;11518:18;;8349:101:0;11187:355:1;8349:101:0;8167:291;;8097:361;;;:::o;14:177:1:-;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;68:117;14:177;:::o;196:245::-;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;:::-;430:5;196:245;-1:-1:-1;;;196:245:1:o;869:250::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1054:11;;;1048:18;1035:11;;;1028:39;1000:2;993:10;964:113;;;-1:-1:-1;;1111:1:1;1093:16;;1086:27;869:250::o;1124:330::-;1166:3;1204:5;1198:12;1231:6;1226:3;1219:19;1247:76;1316:6;1309:4;1304:3;1300:14;1293:4;1286:5;1282:16;1247:76;:::i;:::-;1368:2;1356:15;-1:-1:-1;;1352:88:1;1343:98;;;;1443:4;1339:109;;1124:330;-1:-1:-1;;1124:330:1:o;1459:220::-;1608:2;1597:9;1590:21;1571:4;1628:45;1669:2;1658:9;1654:18;1646:6;1628:45;:::i;1684:196::-;1752:20;;-1:-1:-1;;;;;1801:54:1;;1791:65;;1781:93;;1870:1;1867;1860:12;1781:93;1684:196;;;:::o;1885:254::-;1953:6;1961;2014:2;2002:9;1993:7;1989:23;1985:32;1982:52;;;2030:1;2027;2020:12;1982:52;2053:29;2072:9;2053:29;:::i;:::-;2043:39;2129:2;2114:18;;;;2101:32;;-1:-1:-1;;;1885:254:1:o;2326:328::-;2403:6;2411;2419;2472:2;2460:9;2451:7;2447:23;2443:32;2440:52;;;2488:1;2485;2478:12;2440:52;2511:29;2530:9;2511:29;:::i;:::-;2501:39;;2559:38;2593:2;2582:9;2578:18;2559:38;:::i;:::-;2549:48;;2644:2;2633:9;2629:18;2616:32;2606:42;;2326:328;;;;;:::o;2659:186::-;2718:6;2771:2;2759:9;2750:7;2746:23;2742:32;2739:52;;;2787:1;2784;2777:12;2739:52;2810:29;2829:9;2810:29;:::i;3039:180::-;3098:6;3151:2;3139:9;3130:7;3126:23;3122:32;3119:52;;;3167:1;3164;3157:12;3119:52;-1:-1:-1;3190:23:1;;3039:180;-1:-1:-1;3039:180:1:o;3421:733::-;3509:6;3517;3525;3533;3586:2;3574:9;3565:7;3561:23;3557:32;3554:52;;;3602:1;3599;3592:12;3554:52;3625:29;3644:9;3625:29;:::i;:::-;3615:39;;3701:2;3690:9;3686:18;3673:32;3663:42;;3756:2;3745:9;3741:18;3728:32;3779:18;3820:2;3812:6;3809:14;3806:34;;;3836:1;3833;3826:12;3806:34;3874:6;3863:9;3859:22;3849:32;;3919:7;3912:4;3908:2;3904:13;3900:27;3890:55;;3941:1;3938;3931:12;3890:55;3981:2;3968:16;4007:2;3999:6;3996:14;3993:34;;;4023:1;4020;4013:12;3993:34;4068:7;4063:2;4054:6;4050:2;4046:15;4042:24;4039:37;4036:57;;;4089:1;4086;4079:12;4036:57;3421:733;;;;-1:-1:-1;;4120:2:1;4112:11;;-1:-1:-1;;;3421:733:1:o;4159:260::-;4227:6;4235;4288:2;4276:9;4267:7;4263:23;4259:32;4256:52;;;4304:1;4301;4294:12;4256:52;4327:29;4346:9;4327:29;:::i;:::-;4317:39;;4375:38;4409:2;4398:9;4394:18;4375:38;:::i;:::-;4365:48;;4159:260;;;;;:::o;4424:184::-;4476:77;4473:1;4466:88;4573:4;4570:1;4563:15;4597:4;4594:1;4587:15;4613:956;4693:6;4746:2;4734:9;4725:7;4721:23;4717:32;4714:52;;;4762:1;4759;4752:12;4714:52;4795:9;4789:16;4824:18;4865:2;4857:6;4854:14;4851:34;;;4881:1;4878;4871:12;4851:34;4919:6;4908:9;4904:22;4894:32;;4964:7;4957:4;4953:2;4949:13;4945:27;4935:55;;4986:1;4983;4976:12;4935:55;5015:2;5009:9;5037:2;5033;5030:10;5027:36;;;5043:18;;:::i;:::-;5177:2;5171:9;5239:4;5231:13;;-1:-1:-1;;5227:22:1;;;5251:2;5223:31;5219:40;5207:53;;;5275:18;;;5295:22;;;5272:46;5269:72;;;5321:18;;:::i;:::-;5361:10;5357:2;5350:22;5396:2;5388:6;5381:18;5436:7;5431:2;5426;5422;5418:11;5414:20;5411:33;5408:53;;;5457:1;5454;5447:12;5408:53;5470:68;5535:2;5530;5522:6;5518:15;5513:2;5509;5505:11;5470:68;:::i;:::-;5557:6;4613:956;-1:-1:-1;;;;;;;4613:956:1:o;6285:184::-;6337:77;6334:1;6327:88;6434:4;6431:1;6424:15;6458:4;6455:1;6448:15;6474:128;6541:9;;;6562:11;;;6559:37;;;6576:18;;:::i;6607:125::-;6672:9;;;6693:10;;;6690:36;;;6706:18;;:::i;6737:273::-;6805:6;6858:2;6846:9;6837:7;6833:23;6829:32;6826:52;;;6874:1;6871;6864:12;6826:52;6906:9;6900:16;6956:4;6949:5;6945:16;6938:5;6935:27;6925:55;;6976:1;6973;6966:12;7966:443;8187:3;8225:6;8219:13;8241:66;8300:6;8295:3;8288:4;8280:6;8276:17;8241:66;:::i;:::-;8368:5;8329:16;;8354:20;;;-1:-1:-1;8401:1:1;8390:13;;7966:443;-1:-1:-1;7966:443:1:o;8414:409::-;-1:-1:-1;;;;;8621:6:1;8617:55;8606:9;8599:74;8709:6;8704:2;8693:9;8689:18;8682:34;8752:2;8747;8736:9;8732:18;8725:30;8580:4;8772:45;8813:2;8802:9;8798:18;8790:6;8772:45;:::i;:::-;8764:53;8414:409;-1:-1:-1;;;;;8414:409:1:o;8828:249::-;8897:6;8950:2;8938:9;8929:7;8925:23;8921:32;8918:52;;;8966:1;8963;8956:12;8918:52;8998:9;8992:16;9017:30;9041:5;9017:30;:::i;9292:325::-;9380:6;9375:3;9368:19;9432:6;9425:5;9418:4;9413:3;9409:14;9396:43;;9484:1;9477:4;9468:6;9463:3;9459:16;9455:27;9448:38;9350:3;9606:4;-1:-1:-1;;9531:2:1;9523:6;9519:15;9515:88;9510:3;9506:98;9502:109;9495:116;;9292:325;;;;:::o;9622:435::-;-1:-1:-1;;;;;9839:6:1;9835:55;9824:9;9817:74;9927:6;9922:2;9911:9;9907:18;9900:34;9970:2;9965;9954:9;9950:18;9943:30;9798:4;9990:61;10047:2;10036:9;10032:18;10024:6;10016;9990:61;:::i;:::-;9982:69;9622:435;-1:-1:-1;;;;;;9622:435:1:o;10062:244::-;10219:2;10208:9;10201:21;10182:4;10239:61;10296:2;10285:9;10281:18;10273:6;10265;10239:61;:::i;:::-;10231:69;10062:244;-1:-1:-1;;;;10062:244:1:o;10613:287::-;10742:3;10780:6;10774:13;10796:66;10855:6;10850:3;10843:4;10835:6;10831:17;10796:66;:::i;:::-;10878:16;;;;;10613:287;-1:-1:-1;;10613:287:1:o;10905:277::-;10972:6;11025:2;11013:9;11004:7;11000:23;10996:32;10993:52;;;11041:1;11038;11031:12;10993:52;11073:9;11067:16;11126:5;11119:13;11112:21;11105:5;11102:32;11092:60;;11148:1;11145;11138:12
Swarm Source
ipfs://1e141e7b503d0d8504f142e7a0d2ac431443eba67444d0b3faeb118e2bd64b8b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)