ETH Price: $3,339.35 (-0.82%)
Gas: 5 Gwei

Contract

0x3B81DB7c9FE71A2c6d78F9ae2Fe4DF4C92272622
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Convert81577352019-07-15 20:35:581841 days ago1563222958IN
0x3B81DB7c...C92272622
0.0001 ETH0.001196612.00001
Convert78177192019-05-23 19:00:461894 days ago1558638046IN
0x3B81DB7c...C92272622
0.0000041 ETH0.000557691
Add Converter78175432019-05-23 18:20:471894 days ago1558635647IN
0x3B81DB7c...C92272622
0 ETH0.000077591.10001
Convert78161822019-05-23 13:14:481894 days ago1558617288IN
0x3B81DB7c...C92272622
0.00001 ETH0.000544161.000001
Convert74399822019-03-25 20:30:101953 days ago1553545810IN
0x3B81DB7c...C92272622
1.2 ETH0.000377951
Convert73799752019-03-16 12:03:251962 days ago1552737805IN
0x3B81DB7c...C92272622
0 ETH0.000547811
Convert73799232019-03-16 11:54:531962 days ago1552737293IN
0x3B81DB7c...C92272622
0 ETH0.000562871
Convert71786902019-02-05 14:32:572001 days ago1549377177IN
0x3B81DB7c...C92272622
5.01017453 ETH0.000364331
Convert71744592019-02-04 17:53:152002 days ago1549302795IN
0x3B81DB7c...C92272622
2 ETH0.001091313
Convert71743502019-02-04 17:22:452002 days ago1549300965IN
0x3B81DB7c...C92272622
2 ETH0.001034143
Convert69571792018-12-26 16:25:422042 days ago1545841542IN
0x3B81DB7c...C92272622
0 ETH0.00293975
Convert66132742018-10-30 19:52:192099 days ago1540929139IN
0x3B81DB7c...C92272622
0 ETH0.00252694
Convert66132122018-10-30 19:36:482099 days ago1540928208IN
0x3B81DB7c...C92272622
0 ETH0.001895043
Set Available Pr...66129652018-10-30 18:36:272099 days ago1540924587IN
0x3B81DB7c...C92272622
0 ETH0.000280566
Set Available Pr...66129612018-10-30 18:34:412099 days ago1540924481IN
0x3B81DB7c...C92272622
0 ETH0.000280566
Add Converter66129562018-10-30 18:33:402099 days ago1540924420IN
0x3B81DB7c...C92272622
0 ETH0.000423216
Add Converter66129522018-10-30 18:33:092099 days ago1540924389IN
0x3B81DB7c...C92272622
0 ETH0.000423216
Set Extra Limit66129352018-10-30 18:28:592099 days ago1540924139IN
0x3B81DB7c...C92272622
0 ETH0.000215755
0x6080604066129112018-10-30 18:23:292099 days ago1540923809IN
 Create: TokenConverterRouter
0 ETH0.007209624.1

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
81577352019-07-15 20:35:581841 days ago1563222958
0x3B81DB7c...C92272622
0.0001 ETH
78215732019-05-24 9:31:521893 days ago1558690312
0x3B81DB7c...C92272622
0.91972867 ETH
78215732019-05-24 9:31:521893 days ago1558690312
0x3B81DB7c...C92272622
0.91972867 ETH
78215732019-05-24 9:31:521893 days ago1558690312
0x3B81DB7c...C92272622
1 ETH
78215732019-05-24 9:31:521893 days ago1558690312
0x3B81DB7c...C92272622
1 ETH
78177192019-05-23 19:00:461894 days ago1558638046
0x3B81DB7c...C92272622
0.0000041 ETH
78161822019-05-23 13:14:481894 days ago1558617288
0x3B81DB7c...C92272622
0.00001 ETH
77090142019-05-06 18:55:561911 days ago1557168956
0x3B81DB7c...C92272622
0.03877712 ETH
77090142019-05-06 18:55:561911 days ago1557168956
0x3B81DB7c...C92272622
0.03877712 ETH
77090142019-05-06 18:55:561911 days ago1557168956
0x3B81DB7c...C92272622
1.08339004 ETH
77090142019-05-06 18:55:561911 days ago1557168956
0x3B81DB7c...C92272622
1.08339004 ETH
76689192019-04-30 12:58:241917 days ago1556629104
0x3B81DB7c...C92272622
0.02624002 ETH
76689192019-04-30 12:58:241917 days ago1556629104
0x3B81DB7c...C92272622
0.02624002 ETH
76689192019-04-30 12:58:241917 days ago1556629104
0x3B81DB7c...C92272622
0.67404276 ETH
76689192019-04-30 12:58:241917 days ago1556629104
0x3B81DB7c...C92272622
0.67404276 ETH
74896472019-04-02 15:14:071945 days ago1554218047
0x3B81DB7c...C92272622
0.03348258 ETH
74896472019-04-02 15:14:071945 days ago1554218047
0x3B81DB7c...C92272622
0.03348258 ETH
74896472019-04-02 15:14:071945 days ago1554218047
0x3B81DB7c...C92272622
0.86216203 ETH
74896472019-04-02 15:14:071945 days ago1554218047
0x3B81DB7c...C92272622
0.86216203 ETH
74399822019-03-25 20:30:101953 days ago1553545810
0x3B81DB7c...C92272622
1.2 ETH
73799752019-03-16 12:03:251962 days ago1552737805
0x3B81DB7c...C92272622
2.4145527 ETH
73799752019-03-16 12:03:251962 days ago1552737805
0x3B81DB7c...C92272622
2.4145527 ETH
73799232019-03-16 11:54:531962 days ago1552737293
0x3B81DB7c...C92272622
2.60935166 ETH
73799232019-03-16 11:54:531962 days ago1552737293
0x3B81DB7c...C92272622
2.60935166 ETH
73689622019-03-14 19:19:091964 days ago1552591149
0x3B81DB7c...C92272622
0.00846523 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenConverterRouter

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-10-30
*/

pragma solidity ^0.4.24;

// File: contracts/interfaces/Token.sol

contract Token {
    function transfer(address _to, uint _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function allowance(address _owner, address _spender) public view returns (uint256 remaining);
    function approve(address _spender, uint256 _value) public returns (bool success);
    function increaseApproval (address _spender, uint _addedValue) public returns (bool success);
    function balanceOf(address _owner) public view returns (uint256 balance);
}

// File: contracts/interfaces/TokenConverter.sol

contract TokenConverter {
    address public constant ETH_ADDRESS = 0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
    function getReturn(Token _fromToken, Token _toToken, uint256 _fromAmount) external view returns (uint256 amount);
    function convert(Token _fromToken, Token _toToken, uint256 _fromAmount, uint256 _minReturn) external payable returns (uint256 amount);
}

// File: contracts/interfaces/AvailableProvider.sol

interface AvailableProvider {
   function isAvailable(Token _from, Token _to, uint256 _amount) external view returns (bool);
}

// File: contracts/utils/Ownable.sol

contract Ownable {
    address public owner;

    event SetOwner(address _owner);

    modifier onlyOwner() {
        require(msg.sender == owner, "msg.sender is not the owner");
        _;
    }

    constructor() public {
        owner = msg.sender;
        emit SetOwner(msg.sender);
    }

    /**
        @dev Transfers the ownership of the contract.

        @param _to Address of the new owner
    */
    function transferTo(address _to) public onlyOwner returns (bool) {
        require(_to != address(0), "Can't transfer to address 0x0");
        emit SetOwner(_to);
        owner = _to;
        return true;
    }
}

// File: contracts/TokenConverterRouter.sol

contract TokenConverterRouter is TokenConverter, Ownable {
    address public constant ETH_ADDRESS = 0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;

    TokenConverter[] public converters;
    
    mapping(address => uint256) private converterToIndex;    
    mapping (address => AvailableProvider) public availability;

    uint256 extraLimit;
    
    event AddedConverter(address _converter);
    event Converted(address _converter, address _from, address _to, uint256 _amount, uint256 _return);
    event SetAvailableProvider(address _converter, address _provider);
    event SetExtraLimit(uint256 _extraLimit);
    event RemovedConverter(address _converter);

    event ConverterEvaluated(address _converter, address _from, address _to, uint256 _srcQty, uint256 _destQty);
    event ConverterNotAvailable(address _converter, address _provider, address _from, address _to, uint256 _srcQty);
    event ConverterError(address _converter, address _from, address _to, uint256 _srcQty);
    event ConverterAvailableError(address _converter, address _provider, address _from, address _to, uint256 _srcQty);

    event WithdrawTokens(address _token, address _to, uint256 _amount);
    event WithdrawEth(address _to, uint256 _amount);

    /*
     *  @notice External function isWorker.
     *  @dev Takes _worker, checks if the worker is valid. 
     *  @param _worker Worker address.
     *  @return bool True if worker is valid, false otherwise.
     */
    function _issetConverter(address _converter) internal view returns (bool) {
        return converterToIndex[_converter] != 0;
    }
    
    /*
    *  @notice External function allConverters.
    *  @dev Return all convertes.
    *  @return array with all address the converters.
    */
    function getConverters() external view returns (address[] memory result) {
        result = new address[](converters.length - 1);
        for (uint256 i = 1; i < converters.length; i++) {
            result[i - 1] = converters[i];
        }
    }
    
    /*
     *  @notice External function addConverter.
     *  @dev Takes _converter.
     *       Add converter.
     *  @param _converter Converter address.
     *  @return bool True if converter is added, false otherwise.
     */
    function addConverter(TokenConverter _converter) external onlyOwner returns (bool) {
        require(!_issetConverter(_converter), "The converter it already exist");
        uint256 index = converters.push(_converter) - 1;
        converterToIndex[_converter] = index;
        emit AddedConverter(_converter);
        return true;
    }
    
    /*
     *  @notice External function removeConverter.
     *  @dev Takes _converter and removes the converter.
     *  @param _worker Converter address.
     *  @return bool true if existed, false otherwise.
     */
    function removeConverter(address _converter) external onlyOwner returns (bool) {
        require(_issetConverter(_converter), "The converter is not exist.");
        uint256 index = converterToIndex[_converter];
        TokenConverter lastConverter = converters[converters.length - 1];
        converterToIndex[lastConverter] = index;
        converters[index] = lastConverter;
        converters.length--;
        delete converterToIndex[_converter];
        emit RemovedConverter(_converter);
        return true;
    }
    
    function setAvailableProvider(
        TokenConverter _converter,
        AvailableProvider _provider
    ) external onlyOwner {
        emit SetAvailableProvider(_converter, _provider);
        availability[_converter] = _provider;        
    }
    
    function setExtraLimit(uint256 _extraLimit) external onlyOwner {
        emit SetExtraLimit(_extraLimit);
        extraLimit = _extraLimit;
    }

    function convert(Token _from, Token _to, uint256 _amount, uint256 _minReturn) external payable returns (uint256 result) {
        TokenConverter converter = _getBestConverter(_from, _to, _amount);
        require(converter != address(0), "No converter candidates");

        if (_from == ETH_ADDRESS) {
            require(msg.value == _amount, "ETH not enought");
        } else {
            require(msg.value == 0, "ETH not required");
            require(_from.transferFrom(msg.sender, this, _amount), "Error pulling Token amount");
            require(_from.approve(converter, _amount), "Error approving token transfer");
        }

        result = converter.convert.value(msg.value)(_from, _to, _amount, _minReturn);
        require(result >= _minReturn, "Funds received below min return");

        emit Converted({
            _converter: converter,
            _from: _from,
            _to: _to,
            _amount: _amount,
            _return: result
        });

        if (_from != ETH_ADDRESS) {
            require(_from.approve(converter, 0), "Error removing approve");
        }

        if (_to == ETH_ADDRESS) {
            msg.sender.transfer(result);
        } else {
            require(_to.transfer(msg.sender, result), "Error sending tokens");
        }

        if (_isSimulation()) {
            // this is a simulation, we need a pessimistic simulation we add
            // the extraLimit. reasons: this algorithm is not deterministic
            // different gas depending on the best route (Kyber, Bancor, etc)
            _addExtraGasLimit();
        }
    }

    function getReturn(Token _from, Token _to, uint256 _amount) external view returns (uint256) {
        return _getBestConverterView(_from, _to, _amount).getReturn(_from, _to, _amount);
    }

    function _isSimulation() internal view returns (bool) {
        return gasleft() > block.gaslimit;
    }
    
    function _addExtraGasLimit() internal view {
        uint256 startGas = gasleft();
        while (startGas - gasleft() < extraLimit) {          
            assembly {
                let x := mload(0x0)
            }
        }
    }

    function _getBestConverterView(Token _from, Token _to, uint256 _amount) internal view returns (TokenConverter best) {
        uint256 length = converters.length;
        bytes32 bestReturn;

        for (uint256 i = 0; i < length; i++) {
            TokenConverter converter = converters[i];
            if (_isAvailableView(converter, _from, _to, _amount)) {
                (uint256 success, bytes32 newReturn) = _safeStaticCall(
                    converter,
                    abi.encodeWithSelector(
                        converter.getReturn.selector,
                        _from,
                        _to,
                        _amount
                    )
                );

                if (success == 1 && newReturn > bestReturn) {
                    bestReturn = newReturn;
                    best = converter;
                }
            }
        }
    }

    function _getBestConverter(Token _from, Token _to, uint256 _amount) internal returns (TokenConverter best) {
        uint256 length = converters.length;
        bytes32 bestReturn;

        for (uint256 i = 0; i < length; i++) {
            TokenConverter converter = converters[i];
            if (_isAvailable(converter, _from, _to, _amount)) {
                (uint256 success, bytes32 newReturn) = _safeCall(
                    converter,
                    abi.encodeWithSelector(
                        converter.getReturn.selector,
                        _from,
                        _to,
                        _amount
                    )
                );

                if (success == 1) {
                    emit ConverterEvaluated(converter, _from, _to, _amount, uint256(newReturn));
                    if (newReturn > bestReturn) {
                        bestReturn = newReturn;
                        best = converter;
                    }
                } else {
                    emit ConverterError(converter, _from, _to, _amount);
                }
            }
        }
    }

    function _isAvailable(address converter, Token _from, Token _to, uint256 _amount) internal returns (bool) {
        AvailableProvider provider = availability[converter];
        if (provider == address(0)) return true;
        (uint256 success,bytes32 available) = _safeCall(
            provider, abi.encodeWithSelector(
                provider.isAvailable.selector,
                _from,
                _to,
                _amount
            )
        );

        if (success != 1) {
            emit ConverterAvailableError(converter, provider, _from, _to, _amount);
            return false;
        }

        if (available != bytes32(1)) {
            emit ConverterNotAvailable(converter, provider, _from, _to, _amount);
            return false;
        }
        
        return true;
    }

    function _isAvailableView(address converter, Token _from, Token _to, uint256 _amount) internal view returns (bool) {
        AvailableProvider provider = availability[converter];
        if (provider == address(0)) return true;
        (uint256 success,bytes32 available) = _safeStaticCall(
            provider, abi.encodeWithSelector(
                provider.isAvailable.selector,
                _from,
                _to,
                _amount
            )
        );
        return success == 1 && available == bytes32(1);
    }

    function withdrawEther(
        address _to,
        uint256 _amount
    ) external onlyOwner {
        emit WithdrawEth(_to, _amount);
        _to.transfer(_amount);
    }

    function withdrawTokens(
        Token _token,
        address _to,
        uint256 _amount
    ) external onlyOwner returns (bool) {
        emit WithdrawTokens(_token, _to, _amount);
        return _token.transfer(_to, _amount);
    }

    function _safeStaticCall(
        address _contract,
        bytes _data
    ) internal view returns (uint256 success, bytes32 result) {
        assembly {
            let x := mload(0x40)
            success := staticcall(
                            gas,                  // Send almost all gas
                            _contract,            // To addr
                            add(0x20, _data),     // Input is data past the first 32 bytes
                            mload(_data),         // Input size is the lenght of data
                            x,                    // Store the ouput on x
                            0x20                  // Output is a single bytes32, has 32 bytes
                        )

            result := mload(x)
        }
    }

    function _safeCall(
        address _contract,
        bytes _data
    ) internal returns (uint256 success, bytes32 result) {
        assembly {
            let x := mload(0x40)
            success := call(
                            gas,                  // Send almost all gas
                            _contract,            // To addr
                            0,                    // Send ETH
                            add(0x20, _data),     // Input is data past the first 32 bytes
                            mload(_data),         // Input size is the lenght of data
                            x,                    // Store the ouput on x
                            0x20                  // Output is a single bytes32, has 32 bytes
                        )

            result := mload(x)
        }
    }

    function() external payable {}
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_extraLimit","type":"uint256"}],"name":"setExtraLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"getReturn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getConverters","outputs":[{"name":"result","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"converters","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_converter","type":"address"}],"name":"addConverter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_minReturn","type":"uint256"}],"name":"convert","outputs":[{"name":"result","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_converter","type":"address"}],"name":"removeConverter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"transferTo","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ETH_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"availability","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_converter","type":"address"},{"name":"_provider","type":"address"}],"name":"setAvailableProvider","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"}],"name":"AddedConverter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_return","type":"uint256"}],"name":"Converted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_provider","type":"address"}],"name":"SetAvailableProvider","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_extraLimit","type":"uint256"}],"name":"SetExtraLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"}],"name":"RemovedConverter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_srcQty","type":"uint256"},{"indexed":false,"name":"_destQty","type":"uint256"}],"name":"ConverterEvaluated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_provider","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_srcQty","type":"uint256"}],"name":"ConverterNotAvailable","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_srcQty","type":"uint256"}],"name":"ConverterError","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_provider","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_srcQty","type":"uint256"}],"name":"ConverterAvailableError","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_token","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"WithdrawTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"WithdrawEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_owner","type":"address"}],"name":"SetOwner","type":"event"}]

6080604081905260008054600160a060020a0319163390811790915581527f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb590602090a16118da806100526000396000f3006080604052600436106100b65763ffffffff60e060020a600035041663052f655781146100b85780631e1401f8146100d0578063522f68151461010c57806356f09125146101305780635e35359e1461019557806360a6e23a146101d35780636ce1c4dc1461020757806375892cf1146102285780638da5cb5b146102485780639e76a0071461025d578063a03fa7e31461027e578063a734f06e1461029f578063ab3a7425146102b4578063d2ec5002146102d5575b005b3480156100c457600080fd5b506100b66004356102fc565b3480156100dc57600080fd5b506100fa600160a060020a0360043581169060243516604435610384565b60408051918252519081900360200190f35b34801561011857600080fd5b506100b6600160a060020a036004351660243561043a565b34801561013c57600080fd5b50610145610509565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610181578181015183820152602001610169565b505050509050019250505060405180910390f35b3480156101a157600080fd5b506101bf600160a060020a03600435811690602435166044356105ab565b604080519115158252519081900360200190f35b3480156101df57600080fd5b506101eb6004356106a9565b60408051600160a060020a039092168252519081900360200190f35b34801561021357600080fd5b506101bf600160a060020a03600435166106d1565b6100fa600160a060020a0360043581169060243516604435606435610828565b34801561025457600080fd5b506101eb610f09565b34801561026957600080fd5b506101bf600160a060020a0360043516610f18565b34801561028a57600080fd5b506101bf600160a060020a03600435166110d9565b3480156102ab57600080fd5b506101eb6111f8565b3480156102c057600080fd5b506101eb600160a060020a0360043516611210565b3480156102e157600080fd5b506100b6600160a060020a036004358116906024351661122b565b600054600160a060020a0316331461034c576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b6040805182815290517f245bf781f1ea6a14663c9157d44f013150256fd27e57729588e6bfdb10842fc69181900360200190a1600455565b60006103918484846112fb565b604080517f1e1401f8000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483015286811660248301526044820186905291519290911691631e1401f8916064808201926020929091908290030181600087803b15801561040657600080fd5b505af115801561041a573d6000803e3d6000fd5b505050506040513d602081101561043057600080fd5b5051949350505050565b600054600160a060020a0316331461048a576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a03841681526020810183905281517fccbd99ba6da8f29b2a4f65e474e3c3973564d356c162c08d45f3dc7f0cb5b3aa929181900390910190a1604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610504573d6000803e3d6000fd5b505050565b60606000600180805490500360405190808252806020026020018201604052801561053e578160200160208202803883390190505b509150600190505b6001548110156105a757600180548290811061055e57fe5b6000918252602090912001548251600160a060020a03909116908390600019840190811061058857fe5b600160a060020a03909216602092830290910190910152600101610546565b5090565b60008054600160a060020a031633146105fc576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a0380871682528516602082015280820184905290517f70082d08c003c5341f2401bec1c2ae1dbcdc29ae17e9cc5633fa617caa8acd4c9181900360600190a183600160a060020a031663a9059cbb84846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561040657600080fd5b60018054829081106106b757fe5b600091825260209091200154600160a060020a0316905081565b600080548190600160a060020a03163314610724576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b61072d836113ef565b15610782576040805160e560020a62461bcd02815260206004820152601e60248201527f54686520636f6e76657274657220697420616c72656164792065786973740000604482015290519081900360640190fd5b50600180548082019091557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf68101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038516908117909155600081815260026020908152604091829020849055815192835290517fbd6367a8986bde60fcd4d34d7a1c20d844c887a95377d1abefaa0e46f779eb359281900390910190a150600192915050565b60008061083686868661140c565b9050600160a060020a0381161515610898576040805160e560020a62461bcd02815260206004820152601760248201527f4e6f20636f6e7665727465722063616e64696461746573000000000000000000604482015290519081900360640190fd5b600160a060020a03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561091957348414610914576040805160e560020a62461bcd02815260206004820152600f60248201527f455448206e6f7420656e6f756768740000000000000000000000000000000000604482015290519081900360640190fd5b610b44565b341561096f576040805160e560020a62461bcd02815260206004820152601060248201527f455448206e6f7420726571756972656400000000000000000000000000000000604482015290519081900360640190fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a038816916323b872dd9160648083019260209291908290030181600087803b1580156109dd57600080fd5b505af11580156109f1573d6000803e3d6000fd5b505050506040513d6020811015610a0757600080fd5b50511515610a5f576040805160e560020a62461bcd02815260206004820152601a60248201527f4572726f722070756c6c696e6720546f6b656e20616d6f756e74000000000000604482015290519081900360640190fd5b85600160a060020a031663095ea7b382866040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610ac257600080fd5b505af1158015610ad6573d6000803e3d6000fd5b505050506040513d6020811015610aec57600080fd5b50511515610b44576040805160e560020a62461bcd02815260206004820152601e60248201527f4572726f7220617070726f76696e6720746f6b656e207472616e736665720000604482015290519081900360640190fd5b604080517f75892cf1000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152878116602483015260448201879052606482018690529151918316916375892cf1913491608480830192602092919082900301818588803b158015610bbf57600080fd5b505af1158015610bd3573d6000803e3d6000fd5b50505050506040513d6020811015610bea57600080fd5b5051915082821015610c46576040805160e560020a62461bcd02815260206004820152601f60248201527f46756e64732072656365697665642062656c6f77206d696e2072657475726e00604482015290519081900360640190fd5b60408051600160a060020a0380841682528089166020830152871681830152606081018690526080810184905290517ffc68be12f5a400a9ccc7eb00b8f5e86c91f483f4fd1611ced2d7710b615ab1789181900360a00190a1600160a060020a03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610da95785600160a060020a031663095ea7b38260006040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610d2757600080fd5b505af1158015610d3b573d6000803e3d6000fd5b505050506040513d6020811015610d5157600080fd5b50511515610da9576040805160e560020a62461bcd02815260206004820152601660248201527f4572726f722072656d6f76696e6720617070726f766500000000000000000000604482015290519081900360640190fd5b600160a060020a03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610e0157604051339083156108fc029084906000818181858888f19350505050158015610dfb573d6000803e3d6000fd5b50610eeb565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a0387169163a9059cbb9160448083019260209291908290030181600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050506040513d6020811015610e9357600080fd5b50511515610eeb576040805160e560020a62461bcd02815260206004820152601460248201527f4572726f722073656e64696e6720746f6b656e73000000000000000000000000604482015290519081900360640190fd5b610ef36115a1565b15610f0057610f006115ac565b50949350505050565b600054600160a060020a031681565b6000805481908190600160a060020a03163314610f6d576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b610f76846113ef565b1515610fcc576040805160e560020a62461bcd02815260206004820152601b60248201527f54686520636f6e766572746572206973206e6f742065786973742e0000000000604482015290519081900360640190fd5b600160a060020a03841660009081526002602052604090205460018054919350906000198101908110610ffb57fe5b6000918252602080832090910154600160a060020a0316808352600290915260409091208390556001805491925082918490811061103557fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600180549061107e906000198301611855565b50600160a060020a038416600081815260026020908152604080832092909255815192835290517fa8f946cedc9f28056e1a47ca520a11758cc6d3b76946332a60a42c483e9de69e9281900390910190a15060019392505050565b60008054600160a060020a0316331461112a576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b600160a060020a038216151561118a576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e2774207472616e7366657220746f206164647265737320307830000000604482015290519081900360640190fd5b60408051600160a060020a038416815290517f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb59181900360200190a15060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600360205260009081526040902054600160a060020a031681565b600054600160a060020a0316331461127b576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a0380851682528316602082015281517fe4c027f2ff9e17e761abb4a05925909565e17101696494a74a6c5a84ac715a4a929181900390910190a1600160a060020a039182166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60015460009081808080805b858410156113e257600180548590811061131d57fe5b600091825260209091200154600160a060020a03169250611340838b8b8b6115c6565b156113d75760408051600160a060020a038c811660248301528b16604482015260648082018b9052825180830390910181526084909101909152602081018051600160e060020a03167f1e1401f8000000000000000000000000000000000000000000000000000000001790526113b890849061168a565b915091508160011480156113cb57508481115b156113d7578094508296505b600190930192611307565b5050505050509392505050565b600160a060020a0316600090815260026020526040902054151590565b60015460009081808080805b858410156113e257600180548590811061142e57fe5b600091825260209091200154600160a060020a03169250611451838b8b8b6116a9565b156115965760408051600160a060020a038c811660248301528b16604482015260648082018b9052825180830390910181526084909101909152602081018051600160e060020a03167f1e1401f8000000000000000000000000000000000000000000000000000000001790526114c9908490611834565b9150915081600114156115435760408051600160a060020a038086168252808d1660208301528b1681830152606081018a90526080810183905290517f06b64db7df7bd31e2c01990c1009d840d3b1cbc2702febac81bb6aa26e8f58a89181900360a00190a18481111561153e578094508296505b611596565b60408051600160a060020a038086168252808d1660208301528b1681830152606081018a905290517fc0dff80ded7511c10ef062ee5a67a5f8e101e7e1098cf486182f40d4bffd45949181900360800190a15b600190930192611418565b6000455a1190505b90565b60005a90505b6004545a820310156115c3576115b2565b50565b600160a060020a0380851660009081526003602052604081205490911681808215156115f5576001935061167f565b60408051600160a060020a038981166024830152881660448201526064808201889052825180830390910181526084909101909152602081018051600160e060020a03167f8ee0522a0000000000000000000000000000000000000000000000000000000017905261166890849061168a565b9150915081600114801561167c5750600181145b93505b505050949350505050565b600080604051602081855186602001885afa9051909590945092505050565b600160a060020a0380851660009081526003602052604081205490911681808215156116d8576001935061167f565b60408051600160a060020a038981166024830152881660448201526064808201889052825180830390910181526084909101909152602081018051600160e060020a03167f8ee0522a0000000000000000000000000000000000000000000000000000000017905261174b908490611834565b9092509050600182146117bb5760408051600160a060020a03808b1682528086166020830152808a1682840152881660608201526080810187905290517f5616edbe8a17573bcaf89ab664f56a707055de522a4bf9cd8b28d05bf7ec894e9181900360a00190a16000935061167f565b600181146118265760408051600160a060020a03808b1682528086166020830152808a1682840152881660608201526080810187905290517f0eb24d3febe3abfeafcde65e72b72093e641e57935316ee9afdfcbb22fd205f79181900360a00190a16000935061167f565b506001979650505050505050565b6000806040516020818551866020016000895af19051909590945092505050565b815481835581811115610504576000838152602090206105049181019083016115a991905b808211156105a7576000815560010161187a56006d73672e73656e646572206973206e6f7420746865206f776e65720000000000a165627a7a72305820361b26146f189a1aa72ff3f8911d2a9d42b2fcbab464508569183522d188b6980029

Deployed Bytecode

0x6080604052600436106100b65763ffffffff60e060020a600035041663052f655781146100b85780631e1401f8146100d0578063522f68151461010c57806356f09125146101305780635e35359e1461019557806360a6e23a146101d35780636ce1c4dc1461020757806375892cf1146102285780638da5cb5b146102485780639e76a0071461025d578063a03fa7e31461027e578063a734f06e1461029f578063ab3a7425146102b4578063d2ec5002146102d5575b005b3480156100c457600080fd5b506100b66004356102fc565b3480156100dc57600080fd5b506100fa600160a060020a0360043581169060243516604435610384565b60408051918252519081900360200190f35b34801561011857600080fd5b506100b6600160a060020a036004351660243561043a565b34801561013c57600080fd5b50610145610509565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610181578181015183820152602001610169565b505050509050019250505060405180910390f35b3480156101a157600080fd5b506101bf600160a060020a03600435811690602435166044356105ab565b604080519115158252519081900360200190f35b3480156101df57600080fd5b506101eb6004356106a9565b60408051600160a060020a039092168252519081900360200190f35b34801561021357600080fd5b506101bf600160a060020a03600435166106d1565b6100fa600160a060020a0360043581169060243516604435606435610828565b34801561025457600080fd5b506101eb610f09565b34801561026957600080fd5b506101bf600160a060020a0360043516610f18565b34801561028a57600080fd5b506101bf600160a060020a03600435166110d9565b3480156102ab57600080fd5b506101eb6111f8565b3480156102c057600080fd5b506101eb600160a060020a0360043516611210565b3480156102e157600080fd5b506100b6600160a060020a036004358116906024351661122b565b600054600160a060020a0316331461034c576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b6040805182815290517f245bf781f1ea6a14663c9157d44f013150256fd27e57729588e6bfdb10842fc69181900360200190a1600455565b60006103918484846112fb565b604080517f1e1401f8000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483015286811660248301526044820186905291519290911691631e1401f8916064808201926020929091908290030181600087803b15801561040657600080fd5b505af115801561041a573d6000803e3d6000fd5b505050506040513d602081101561043057600080fd5b5051949350505050565b600054600160a060020a0316331461048a576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a03841681526020810183905281517fccbd99ba6da8f29b2a4f65e474e3c3973564d356c162c08d45f3dc7f0cb5b3aa929181900390910190a1604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610504573d6000803e3d6000fd5b505050565b60606000600180805490500360405190808252806020026020018201604052801561053e578160200160208202803883390190505b509150600190505b6001548110156105a757600180548290811061055e57fe5b6000918252602090912001548251600160a060020a03909116908390600019840190811061058857fe5b600160a060020a03909216602092830290910190910152600101610546565b5090565b60008054600160a060020a031633146105fc576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a0380871682528516602082015280820184905290517f70082d08c003c5341f2401bec1c2ae1dbcdc29ae17e9cc5633fa617caa8acd4c9181900360600190a183600160a060020a031663a9059cbb84846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561040657600080fd5b60018054829081106106b757fe5b600091825260209091200154600160a060020a0316905081565b600080548190600160a060020a03163314610724576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b61072d836113ef565b15610782576040805160e560020a62461bcd02815260206004820152601e60248201527f54686520636f6e76657274657220697420616c72656164792065786973740000604482015290519081900360640190fd5b50600180548082019091557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf68101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038516908117909155600081815260026020908152604091829020849055815192835290517fbd6367a8986bde60fcd4d34d7a1c20d844c887a95377d1abefaa0e46f779eb359281900390910190a150600192915050565b60008061083686868661140c565b9050600160a060020a0381161515610898576040805160e560020a62461bcd02815260206004820152601760248201527f4e6f20636f6e7665727465722063616e64696461746573000000000000000000604482015290519081900360640190fd5b600160a060020a03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561091957348414610914576040805160e560020a62461bcd02815260206004820152600f60248201527f455448206e6f7420656e6f756768740000000000000000000000000000000000604482015290519081900360640190fd5b610b44565b341561096f576040805160e560020a62461bcd02815260206004820152601060248201527f455448206e6f7420726571756972656400000000000000000000000000000000604482015290519081900360640190fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a038816916323b872dd9160648083019260209291908290030181600087803b1580156109dd57600080fd5b505af11580156109f1573d6000803e3d6000fd5b505050506040513d6020811015610a0757600080fd5b50511515610a5f576040805160e560020a62461bcd02815260206004820152601a60248201527f4572726f722070756c6c696e6720546f6b656e20616d6f756e74000000000000604482015290519081900360640190fd5b85600160a060020a031663095ea7b382866040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610ac257600080fd5b505af1158015610ad6573d6000803e3d6000fd5b505050506040513d6020811015610aec57600080fd5b50511515610b44576040805160e560020a62461bcd02815260206004820152601e60248201527f4572726f7220617070726f76696e6720746f6b656e207472616e736665720000604482015290519081900360640190fd5b604080517f75892cf1000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152878116602483015260448201879052606482018690529151918316916375892cf1913491608480830192602092919082900301818588803b158015610bbf57600080fd5b505af1158015610bd3573d6000803e3d6000fd5b50505050506040513d6020811015610bea57600080fd5b5051915082821015610c46576040805160e560020a62461bcd02815260206004820152601f60248201527f46756e64732072656365697665642062656c6f77206d696e2072657475726e00604482015290519081900360640190fd5b60408051600160a060020a0380841682528089166020830152871681830152606081018690526080810184905290517ffc68be12f5a400a9ccc7eb00b8f5e86c91f483f4fd1611ced2d7710b615ab1789181900360a00190a1600160a060020a03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610da95785600160a060020a031663095ea7b38260006040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610d2757600080fd5b505af1158015610d3b573d6000803e3d6000fd5b505050506040513d6020811015610d5157600080fd5b50511515610da9576040805160e560020a62461bcd02815260206004820152601660248201527f4572726f722072656d6f76696e6720617070726f766500000000000000000000604482015290519081900360640190fd5b600160a060020a03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610e0157604051339083156108fc029084906000818181858888f19350505050158015610dfb573d6000803e3d6000fd5b50610eeb565b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a0387169163a9059cbb9160448083019260209291908290030181600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050506040513d6020811015610e9357600080fd5b50511515610eeb576040805160e560020a62461bcd02815260206004820152601460248201527f4572726f722073656e64696e6720746f6b656e73000000000000000000000000604482015290519081900360640190fd5b610ef36115a1565b15610f0057610f006115ac565b50949350505050565b600054600160a060020a031681565b6000805481908190600160a060020a03163314610f6d576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b610f76846113ef565b1515610fcc576040805160e560020a62461bcd02815260206004820152601b60248201527f54686520636f6e766572746572206973206e6f742065786973742e0000000000604482015290519081900360640190fd5b600160a060020a03841660009081526002602052604090205460018054919350906000198101908110610ffb57fe5b6000918252602080832090910154600160a060020a0316808352600290915260409091208390556001805491925082918490811061103557fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600180549061107e906000198301611855565b50600160a060020a038416600081815260026020908152604080832092909255815192835290517fa8f946cedc9f28056e1a47ca520a11758cc6d3b76946332a60a42c483e9de69e9281900390910190a15060019392505050565b60008054600160a060020a0316331461112a576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b600160a060020a038216151561118a576040805160e560020a62461bcd02815260206004820152601d60248201527f43616e2774207472616e7366657220746f206164647265737320307830000000604482015290519081900360640190fd5b60408051600160a060020a038416815290517f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb59181900360200190a15060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b600360205260009081526040902054600160a060020a031681565b600054600160a060020a0316331461127b576040805160e560020a62461bcd02815260206004820152601b602482015260008051602061188f833981519152604482015290519081900360640190fd5b60408051600160a060020a0380851682528316602082015281517fe4c027f2ff9e17e761abb4a05925909565e17101696494a74a6c5a84ac715a4a929181900390910190a1600160a060020a039182166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b60015460009081808080805b858410156113e257600180548590811061131d57fe5b600091825260209091200154600160a060020a03169250611340838b8b8b6115c6565b156113d75760408051600160a060020a038c811660248301528b16604482015260648082018b9052825180830390910181526084909101909152602081018051600160e060020a03167f1e1401f8000000000000000000000000000000000000000000000000000000001790526113b890849061168a565b915091508160011480156113cb57508481115b156113d7578094508296505b600190930192611307565b5050505050509392505050565b600160a060020a0316600090815260026020526040902054151590565b60015460009081808080805b858410156113e257600180548590811061142e57fe5b600091825260209091200154600160a060020a03169250611451838b8b8b6116a9565b156115965760408051600160a060020a038c811660248301528b16604482015260648082018b9052825180830390910181526084909101909152602081018051600160e060020a03167f1e1401f8000000000000000000000000000000000000000000000000000000001790526114c9908490611834565b9150915081600114156115435760408051600160a060020a038086168252808d1660208301528b1681830152606081018a90526080810183905290517f06b64db7df7bd31e2c01990c1009d840d3b1cbc2702febac81bb6aa26e8f58a89181900360a00190a18481111561153e578094508296505b611596565b60408051600160a060020a038086168252808d1660208301528b1681830152606081018a905290517fc0dff80ded7511c10ef062ee5a67a5f8e101e7e1098cf486182f40d4bffd45949181900360800190a15b600190930192611418565b6000455a1190505b90565b60005a90505b6004545a820310156115c3576115b2565b50565b600160a060020a0380851660009081526003602052604081205490911681808215156115f5576001935061167f565b60408051600160a060020a038981166024830152881660448201526064808201889052825180830390910181526084909101909152602081018051600160e060020a03167f8ee0522a0000000000000000000000000000000000000000000000000000000017905261166890849061168a565b9150915081600114801561167c5750600181145b93505b505050949350505050565b600080604051602081855186602001885afa9051909590945092505050565b600160a060020a0380851660009081526003602052604081205490911681808215156116d8576001935061167f565b60408051600160a060020a038981166024830152881660448201526064808201889052825180830390910181526084909101909152602081018051600160e060020a03167f8ee0522a0000000000000000000000000000000000000000000000000000000017905261174b908490611834565b9092509050600182146117bb5760408051600160a060020a03808b1682528086166020830152808a1682840152881660608201526080810187905290517f5616edbe8a17573bcaf89ab664f56a707055de522a4bf9cd8b28d05bf7ec894e9181900360a00190a16000935061167f565b600181146118265760408051600160a060020a03808b1682528086166020830152808a1682840152881660608201526080810187905290517f0eb24d3febe3abfeafcde65e72b72093e641e57935316ee9afdfcbb22fd205f79181900360a00190a16000935061167f565b506001979650505050505050565b6000806040516020818551866020016000895af19051909590945092505050565b815481835581811115610504576000838152602090206105049181019083016115a991905b808211156105a7576000815560010161187a56006d73672e73656e646572206973206e6f7420746865206f776e65720000000000a165627a7a72305820361b26146f189a1aa72ff3f8911d2a9d42b2fcbab464508569183522d188b6980029

Swarm Source

bzzr://361b26146f189a1aa72ff3f8911d2a9d42b2fcbab464508569183522d188b698

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.