ETH Price: $2,170.59 (+1.71%)

Contract

0xE4C577bdEc9cE0F6c54f2f82AED5b1913B71AE2f
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Aggregate85676832019-09-17 15:18:142379 days ago1568733494IN
0xE4C577bd...13B71AE2f
0 ETH0.0043736730
Transfer79403682019-06-11 22:59:382477 days ago1560293978IN
0xE4C577bd...13B71AE2f
0 ETH0.0008264420
Aggregate79396542019-06-11 20:21:332477 days ago1560284493IN
0xE4C577bd...13B71AE2f
0.12 ETH0.000571313
Aggregate79396502019-06-11 20:19:072477 days ago1560284347IN
0xE4C577bd...13B71AE2f
0 ETH0.000634683
Aggregate79396332019-06-11 20:15:202477 days ago1560284120IN
0xE4C577bd...13B71AE2f
0 ETH0.000880983
Aggregate79396232019-06-11 20:12:462477 days ago1560283966IN
0xE4C577bd...13B71AE2f
0.0002 ETH0.000577032
Aggregate79396192019-06-11 20:11:242477 days ago1560283884IN
0xE4C577bd...13B71AE2f
0.0005 ETH0.000562462
Aggregate79396122019-06-11 20:09:372477 days ago1560283777IN
0xE4C577bd...13B71AE2f
0.02 ETH0.000500233
Aggregate79396112019-06-11 20:08:562477 days ago1560283736IN
0xE4C577bd...13B71AE2f
0.001 ETH0.000758733
Aggregate79396022019-06-11 20:06:172477 days ago1560283577IN
0xE4C577bd...13B71AE2f
0.001 ETH0.000865833
Aggregate79396002019-06-11 20:05:532477 days ago1560283553IN
0xE4C577bd...13B71AE2f
0.3 ETH0.000897063
Aggregate79395982019-06-11 20:05:162477 days ago1560283516IN
0xE4C577bd...13B71AE2f
0.001 ETH0.000758833
Aggregate79395952019-06-11 20:04:462477 days ago1560283486IN
0xE4C577bd...13B71AE2f
0.001 ETH0.000758733
Aggregate79395932019-06-11 20:04:242477 days ago1560283464IN
0xE4C577bd...13B71AE2f
0.001 ETH0.000452163
Aggregate79395872019-06-11 20:04:052477 days ago1560283445IN
0xE4C577bd...13B71AE2f
0.3 ETH0.000810095
Aggregate79395832019-06-11 20:03:332477 days ago1560283413IN
0xE4C577bd...13B71AE2f
0.00166 ETH0.000455613
Aggregate79395722019-06-11 20:02:022477 days ago1560283322IN
0xE4C577bd...13B71AE2f
0.002 ETH0.000707523
Aggregate79395682019-06-11 20:01:012477 days ago1560283261IN
0xE4C577bd...13B71AE2f
0.003 ETH0.000758733
Aggregate79395642019-06-11 19:59:572477 days ago1560283197IN
0xE4C577bd...13B71AE2f
0.005 ETH0.000620553
Aggregate79395572019-06-11 19:58:282477 days ago1560283108IN
0xE4C577bd...13B71AE2f
0 ETH0.000111671
Aggregate79395512019-06-11 19:56:262477 days ago1560282986IN
0xE4C577bd...13B71AE2f
0.026 ETH0.000652033
Aggregate79395492019-06-11 19:56:052477 days ago1560282965IN
0xE4C577bd...13B71AE2f
0.02 ETH0.000647323
Aggregate79395482019-06-11 19:55:452477 days ago1560282945IN
0xE4C577bd...13B71AE2f
0.0008 ETH0.000451773
Aggregate79395412019-06-11 19:53:502477 days ago1560282830IN
0xE4C577bd...13B71AE2f
0.0433254 ETH0.000603663
Aggregate79395312019-06-11 19:52:332477 days ago1560282753IN
0xE4C577bd...13B71AE2f
0.001 ETH0.000663093
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-79396542019-06-11 20:21:332477 days ago1560284493
0xE4C577bd...13B71AE2f
0.12 ETH
-79396232019-06-11 20:12:462477 days ago1560283966
0xE4C577bd...13B71AE2f
0.0002 ETH
-79396192019-06-11 20:11:242477 days ago1560283884
0xE4C577bd...13B71AE2f
0.0005 ETH
-79396122019-06-11 20:09:372477 days ago1560283777
0xE4C577bd...13B71AE2f
0.02 ETH
-79396112019-06-11 20:08:562477 days ago1560283736
0xE4C577bd...13B71AE2f
0.0001 ETH
-79396112019-06-11 20:08:562477 days ago1560283736
0xE4C577bd...13B71AE2f
0.0009 ETH
-79396022019-06-11 20:06:172477 days ago1560283577
0xE4C577bd...13B71AE2f
0.001 ETH
-79396002019-06-11 20:05:532477 days ago1560283553
0xE4C577bd...13B71AE2f
0.102 ETH
-79396002019-06-11 20:05:532477 days ago1560283553
0xE4C577bd...13B71AE2f
0.198 ETH
-79395982019-06-11 20:05:162477 days ago1560283516
0xE4C577bd...13B71AE2f
0.00002 ETH
-79395982019-06-11 20:05:162477 days ago1560283516
0xE4C577bd...13B71AE2f
0.00098 ETH
-79395952019-06-11 20:04:462477 days ago1560283486
0xE4C577bd...13B71AE2f
0.00002 ETH
-79395952019-06-11 20:04:462477 days ago1560283486
0xE4C577bd...13B71AE2f
0.00098 ETH
-79395932019-06-11 20:04:242477 days ago1560283464
0xE4C577bd...13B71AE2f
0.001 ETH
-79395872019-06-11 20:04:052477 days ago1560283445
0xE4C577bd...13B71AE2f
0.102 ETH
-79395872019-06-11 20:04:052477 days ago1560283445
0xE4C577bd...13B71AE2f
0.198 ETH
-79395832019-06-11 20:03:332477 days ago1560283413
0xE4C577bd...13B71AE2f
0.00166 ETH
-79395722019-06-11 20:02:022477 days ago1560283322
0xE4C577bd...13B71AE2f
0.002 ETH
-79395682019-06-11 20:01:012477 days ago1560283261
0xE4C577bd...13B71AE2f
0.00096 ETH
-79395682019-06-11 20:01:012477 days ago1560283261
0xE4C577bd...13B71AE2f
0.00204 ETH
-79395642019-06-11 19:59:572477 days ago1560283197
0xE4C577bd...13B71AE2f
0.005 ETH
-79395572019-06-11 19:58:282477 days ago1560283108
0xE4C577bd...13B71AE2f
0.01820222 ETH
-79395572019-06-11 19:58:282477 days ago1560283108
0xE4C577bd...13B71AE2f
0.00000364 ETH
-79395572019-06-11 19:58:282477 days ago1560283108
0xE4C577bd...13B71AE2f
0.01820586 ETH
-79395512019-06-11 19:56:262477 days ago1560282986
0xE4C577bd...13B71AE2f
0.026 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AggregatedTokenSwap

Compiler Version
v0.5.8+commit.23d335f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2019-06-03
*/

pragma solidity ^0.5.0;

interface IGST2 {

    function freeUpTo(uint256 value) external returns (uint256 freed);

    function freeFromUpTo(address from, uint256 value) external returns (uint256 freed);

    function balanceOf(address who) external view returns (uint256);
}



library ExternalCall {
    // Source: https://github.com/gnosis/MultiSigWallet/blob/master/contracts/MultiSigWallet.sol
    // call has been separated into its own function in order to take advantage
    // of the Solidity's code generator to produce a loop that copies tx.data into memory.
    function externalCall(address destination, uint value, bytes memory data, uint dataOffset, uint dataLength) internal returns(bool result) {
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            let x := mload(0x40)   // "Allocate" memory for output (0x40 is where "free memory" pointer is stored by convention)
            let d := add(data, 32) // First 32 bytes are the padded length of data, so exclude that
            result := call(
                sub(gas, 34710),   // 34710 is the value that solidity is currently emitting
                                   // It includes callGas (700) + callVeryLow (3, to pay for SUB) + callValueTransferGas (9000) +
                                   // callNewAccountGas (25000, in case the destination address does not exist and needs creating)
                destination,
                value,
                add(d, dataOffset),
                dataLength,        // Size of the input (in bytes) - this is what fixes the padding problem
                x,
                0                  // Output is ignored, therefore the output size is zero
            )
        }
    }
}


/**
 * @title ERC20 interface
 * @dev see https://eips.ethereum.org/EIPS/eip-20
 */
interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}


/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
     * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
     * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}


/**
 * Utility library of inline functions on addresses
 */
library Address {
    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     * @notice Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require((value == 0) || (token.allowance(address(this), spender) == 0));
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must equal true).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.

        require(address(token).isContract());

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success);

        if (returndata.length > 0) { // Return data is optional
            require(abi.decode(returndata, (bool)));
        }
    }
}



contract TokenSpender is Ownable {

    using SafeERC20 for IERC20;

    function claimTokens(IERC20 token, address who, address dest, uint256 amount) external onlyOwner {
        token.safeTransferFrom(who, dest, amount);
    }

}





contract AggregatedTokenSwap {

    using SafeERC20 for IERC20;
    using SafeMath for uint;
    using ExternalCall for address;

    address constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

    TokenSpender public spender;
    IGST2 gasToken;
    address payable owner;
    uint fee; // 10000 => 100%, 1 => 0.01%

    event OneInchFeePaid(
        IERC20 indexed toToken,
        address indexed referrer,
        uint256 fee
    );

    modifier onlyOwner {
        require(
            msg.sender == owner,
            "Only owner can call this function."
        );
        _;
    }

    constructor(
        address payable _owner,
        IGST2 _gasToken,
        uint _fee
    )
    public
    {
        spender = new TokenSpender();
        owner = _owner;
        gasToken = _gasToken;
        fee = _fee;
    }

    function setFee(uint _fee) public onlyOwner {

        fee = _fee;
    }

    function aggregate(
        IERC20 fromToken,
        IERC20 toToken,
        uint tokensAmount,
        address[] memory callAddresses,
        bytes memory callDataConcat,
        uint[] memory starts,
        uint[] memory values,
        uint mintGasPrice,
        uint minTokensAmount,
        address payable referrer
    )
    public
    payable
    returns (uint returnAmount)
    {
        returnAmount = gasleft();
        uint gasTokenBalance = gasToken.balanceOf(address(this));

        require(callAddresses.length + 1 == starts.length);

        if (address(fromToken) != ETH_ADDRESS) {

            spender.claimTokens(fromToken, msg.sender, address(this), tokensAmount);
        }

        for (uint i = 0; i < starts.length - 1; i++) {

            if (starts[i + 1] - starts[i] > 0) {

                if (
                    address(fromToken) != ETH_ADDRESS &&
                    fromToken.allowance(address(this), callAddresses[i]) == 0
                ) {

                    fromToken.safeApprove(callAddresses[i], uint256(- 1));
                }

                require(
                    callDataConcat[starts[i] + 0] != spender.claimTokens.selector[0] ||
                    callDataConcat[starts[i] + 1] != spender.claimTokens.selector[1] ||
                    callDataConcat[starts[i] + 2] != spender.claimTokens.selector[2] ||
                    callDataConcat[starts[i] + 3] != spender.claimTokens.selector[3]
                );
                require(callAddresses[i].externalCall(values[i], callDataConcat, starts[i], starts[i + 1] - starts[i]));
            }
        }

        if (address(toToken) == ETH_ADDRESS) {
            require(address(this).balance >= minTokensAmount);
        } else {
            require(toToken.balanceOf(address(this)) >= minTokensAmount);
        }

        //

        require(gasTokenBalance == gasToken.balanceOf(address(this)));
        if (mintGasPrice > 0) {
            audoRefundGas(returnAmount, mintGasPrice);
        }

        //

        returnAmount = _balanceOf(toToken, address(this)) * fee / 10000;
        if (referrer != address(0)) {
            returnAmount /= 2;
            if (!_transfer(toToken, referrer, returnAmount, true)) {
                returnAmount *= 2;
                emit OneInchFeePaid(toToken, address(0), returnAmount);
            } else {
                emit OneInchFeePaid(toToken, referrer, returnAmount / 2);
            }
        }

        _transfer(toToken, owner, returnAmount, false);

        returnAmount = _balanceOf(toToken, address(this));
        _transfer(toToken, msg.sender, returnAmount, false);
    }

    function _balanceOf(IERC20 token, address who) internal view returns(uint256) {
        if (address(token) == ETH_ADDRESS || token == IERC20(0)) {
            return who.balance;
        } else {
            return token.balanceOf(who);
        }
    }

    function _transfer(IERC20 token, address payable to, uint256 amount, bool allowFail) internal returns(bool) {
        if (address(token) == ETH_ADDRESS || token == IERC20(0)) {
            if (allowFail) {
                return to.send(amount);
            } else {
                to.transfer(amount);
                return true;
            }
        } else {
            token.safeTransfer(to, amount);
            return true;
        }
    }

    function audoRefundGas(
        uint startGas,
        uint mintGasPrice
    )
    private
    returns (uint freed)
    {
        uint MINT_BASE = 32254;
        uint MINT_TOKEN = 36543;
        uint FREE_BASE = 14154;
        uint FREE_TOKEN = 6870;
        uint REIMBURSE = 24000;

        uint tokensAmount = ((startGas - gasleft()) + FREE_BASE) / (2 * REIMBURSE - FREE_TOKEN);
        uint maxReimburse = tokensAmount * REIMBURSE;

        uint mintCost = MINT_BASE + (tokensAmount * MINT_TOKEN);
        uint freeCost = FREE_BASE + (tokensAmount * FREE_TOKEN);

        uint efficiency = (maxReimburse * 100 * tx.gasprice) / (mintCost * mintGasPrice + freeCost * tx.gasprice);

        if (efficiency > 100) {

            return refundGas(
                tokensAmount
            );
        } else {

            return 0;
        }
    }

    function refundGas(
        uint tokensAmount
    )
    private
    returns (uint freed)
    {

        if (tokensAmount > 0) {

            uint safeNumTokens = 0;
            uint gas = gasleft();

            if (gas >= 27710) {
                safeNumTokens = (gas - 27710) / (1148 + 5722 + 150);
            }

            if (tokensAmount > safeNumTokens) {
                tokensAmount = safeNumTokens;
            }

            uint gasTokenBalance = IERC20(address(gasToken)).balanceOf(address(this));

            if (tokensAmount > 0 && gasTokenBalance >= tokensAmount) {

                return gasToken.freeUpTo(tokensAmount);
            } else {

                return 0;
            }
        } else {

            return 0;
        }
    }

    function() external payable {

        if (msg.value == 0 && msg.sender == owner) {

            IERC20 _gasToken = IERC20(address(gasToken));

            owner.transfer(address(this).balance);
            _gasToken.safeTransfer(owner, _gasToken.balanceOf(address(this)));
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"fromToken","type":"address"},{"name":"toToken","type":"address"},{"name":"tokensAmount","type":"uint256"},{"name":"callAddresses","type":"address[]"},{"name":"callDataConcat","type":"bytes"},{"name":"starts","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"mintGasPrice","type":"uint256"},{"name":"minTokensAmount","type":"uint256"},{"name":"referrer","type":"address"}],"name":"aggregate","outputs":[{"name":"returnAmount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"spender","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_gasToken","type":"address"},{"name":"_fee","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"toToken","type":"address"},{"indexed":true,"name":"referrer","type":"address"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"OneInchFeePaid","type":"event"}]

608060405234801561001057600080fd5b506040516060806116a18339810180604052606081101561003057600080fd5b508051602082015160409283015192519192909161004d906100b1565b604051809103906000f080158015610069573d6000803e3d6000fd5b50600080546001600160a01b03199081166001600160a01b039384161790915560028054821695831695909517909455600180549094169216919091179091556003556100be565b61041c8061128583390190565b6111b8806100cd6000396000f3fe6080604052600436106100345760003560e01c8063261fc7ef1461013157806369fe0e2d146103a2578063e8edc816146103cc575b3415801561004c57506002546001600160a01b031633145b1561012f576001546002546040516001600160a01b03928316929190911690303180156108fc02916000818181858888f19350505050158015610093573d6000803e3d6000fd5b5060025460408051600160e01b6370a08231028152306004820152905161012d926001600160a01b0390811692908516916370a0823191602480820192602092909190829003018186803b1580156100ea57600080fd5b505afa1580156100fe573d6000803e3d6000fd5b505050506040513d602081101561011457600080fd5b50516001600160a01b038416919063ffffffff6103fd16565b505b005b610390600480360361014081101561014857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561018257600080fd5b82018360208201111561019457600080fd5b803590602001918460208302840111600160201b831117156101b557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561020457600080fd5b82018360208201111561021657600080fd5b803590602001918460018302840111600160201b8311171561023757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561028957600080fd5b82018360208201111561029b57600080fd5b803590602001918460208302840111600160201b831117156102bc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561030b57600080fd5b82018360208201111561031d57600080fd5b803590602001918460208302840111600160201b8311171561033e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602081013590604001356001600160a01b0316610457565b60408051918252519081900360200190f35b3480156103ae57600080fd5b5061012f600480360360208110156103c557600080fd5b5035610b75565b3480156103d857600080fd5b506103e1610bc6565b604080516001600160a01b039092168252519081900360200190f35b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0316600160e01b63a9059cbb02179052610452908490610bd5565b505050565b60005a60015460408051600160e01b6370a0823102815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156104ae57600080fd5b505afa1580156104c2573d6000803e3d6000fd5b505050506040513d60208110156104d857600080fd5b505187518a519192506001909101146104f057600080fd5b6001600160a01b038c1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146105d5576000809054906101000a90046001600160a01b03166001600160a01b0316630a5ea4668d33308e6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050600060405180830381600087803b1580156105bc57600080fd5b505af11580156105d0573d6000803e3d6000fd5b505050505b60005b60018851038110156108f25760008882815181106105f257fe5b602002602001015189836001018151811061060957fe5b60200260200101510311156108ea576001600160a01b038d1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906106f157508c6001600160a01b031663dd62ed3e308c848151811061065c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b1580156106c357600080fd5b505afa1580156106d7573d6000803e3d6000fd5b505050506040513d60208110156106ed57600080fd5b5051155b15610729576107298a828151811061070557fe5b60200260200101516000198f6001600160a01b0316610cd19092919063ffffffff16565b8751600160f91b600502908a908a908490811061074257fe5b60200260200101516000018151811061075757fe5b602001015160f81c60f81b6001600160f81b0319161415806107ba57508751600160f91b602f02908a908a908490811061078d57fe5b6020026020010151600101815181106107a257fe5b602001015160f81c60f81b6001600160f81b03191614155b8061080657508751600160fa1b602902908a908a90849081106107d957fe5b6020026020010151600201815181106107ee57fe5b602001015160f81c60f81b6001600160f81b03191614155b8061085257508751600160f91b603302908a908a908490811061082557fe5b60200260200101516003018151811061083a57fe5b602001015160f81c60f81b6001600160f81b03191614155b61085b57600080fd5b6108e187828151811061086a57fe5b60200260200101518a8a848151811061087f57fe5b60200260200101518b858151811061089357fe5b60200260200101518c86600101815181106108aa57fe5b6020026020010151038e86815181106108bf57fe5b60200260200101516001600160a01b0316610db890949392919063ffffffff16565b6108ea57600080fd5b6001016105d8565b506001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561092b57303184111561092657600080fd5b6109ae565b60408051600160e01b6370a08231028152306004820152905185916001600160a01b038e16916370a0823191602480820192602092909190829003018186803b15801561097757600080fd5b505afa15801561098b573d6000803e3d6000fd5b505050506040513d60208110156109a157600080fd5b505110156109ae57600080fd5b60015460408051600160e01b6370a0823102815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156109fc57600080fd5b505afa158015610a10573d6000803e3d6000fd5b505050506040513d6020811015610a2657600080fd5b50518114610a3357600080fd5b8415610a4557610a438286610ddc565b505b612710600354610a558d30610e60565b0281610a5d57fe5b0491506001600160a01b03831615610b3157600282049150610a828b84846001610f33565b610add5760028202915060006001600160a01b03168b6001600160a01b03167f713f62c1c63c3bb59b28b58e8486c5992361993a21817d75472fe9f2abad24cf846040518082815260200191505060405180910390a3610b31565b826001600160a01b03168b6001600160a01b03167f713f62c1c63c3bb59b28b58e8486c5992361993a21817d75472fe9f2abad24cf60028581610b1c57fe5b60408051929091048252519081900360200190a35b600254610b4b908c906001600160a01b0316846000610f33565b50610b568b30610e60565b9150610b658b33846000610f33565b50509a9950505050505050505050565b6002546001600160a01b03163314610bc157604051600160e51b62461bcd02815260040180806020018281038252602281526020018061116b6022913960400191505060405180910390fd5b600355565b6000546001600160a01b031681565b610be7826001600160a01b0316611004565b610bf057600080fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310610c2e5780518252601f199092019160209182019101610c0f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c90576040519150601f19603f3d011682016040523d82523d6000602084013e610c95565b606091505b509150915081610ca457600080fd5b805115610ccb57808060200190516020811015610cc057600080fd5b5051610ccb57600080fd5b50505050565b801580610d5a575060408051600160e11b636eb1769f0281523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015610d2c57600080fd5b505afa158015610d40573d6000803e3d6000fd5b505050506040513d6020811015610d5657600080fd5b5051155b610d6357600080fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0316600160e01b63095ea7b302179052610452908490610bd5565b600060405160208501600082858784018a8c6187965a03f198975050505050505050565b6000617dfe618ebf61374a611ad6615dc08561a0aa845a8b030181610dfd57fe5b0490508181028582028701848302860160003a8083028d8502019060649086020281610e2557fe5b0490506064811115610e4b57610e3a8561100e565b9a5050505050505050505050610e5a565b60009a50505050505050505050505b92915050565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480610e9457506001600160a01b038316155b15610eaa57506001600160a01b03811631610e5a565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d6020811015610f2a57600080fd5b50519050610e5a565b60006001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480610f6757506001600160a01b038516155b15610fde578115610f9e576040516001600160a01b0385169084156108fc029085906000818181858888f193505050509050610ffc565b6040516001600160a01b0385169084156108fc029085906000818181858888f19350505050158015610fd4573d6000803e3d6000fd5b5060019050610ffc565b610ff86001600160a01b038616858563ffffffff6103fd16565b5060015b949350505050565b803b15155b919050565b60008115611162576000805a9050616c3e811061103257611b6c616c3d1982010491505b8184111561103e578193505b60015460408051600160e01b6370a0823102815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561108c57600080fd5b505afa1580156110a0573d6000803e3d6000fd5b505050506040513d60208110156110b657600080fd5b5051905084158015906110c95750848110155b156111565760015460408051600160e11b6331b35c9b0281526004810188905290516001600160a01b0390921691636366b936916024808201926020929091908290030181600087803b15801561111f57600080fd5b505af1158015611133573d6000803e3d6000fd5b505050506040513d602081101561114957600080fd5b5051935061100992505050565b60009350505050611009565b50600061100956fe4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6e2ea165627a7a723058204c0334d0cd98ac3d295193b791e315e477a40b6b207c72a926c3bc2c0ceeb140002960806040819052600080546001600160a01b03191633178082556001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36103c5806100576000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630a5ea4661461005c578063715018a61461009a5780638da5cb5b146100a25780638f32d59b146100c6578063f2fde38b146100e2575b600080fd5b6100986004803603608081101561007257600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610108565b005b61009861013a565b6100aa610195565b604080516001600160a01b039092168252519081900360200190f35b6100ce6101a4565b604080519115158252519081900360200190f35b610098600480360360208110156100f857600080fd5b50356001600160a01b03166101b5565b6101106101a4565b61011957600080fd5b6101346001600160a01b03851684848463ffffffff6101d216565b50505050565b6101426101a4565b61014b57600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6101bd6101a4565b6101c657600080fd5b6101cf8161022f565b50565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b0316600160e01b6323b872dd0217905261013490859061029d565b6001600160a01b03811661024257600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6102af826001600160a01b0316610393565b6102b857600080fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106102f65780518252601f1990920191602091820191016102d7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610358576040519150601f19603f3d011682016040523d82523d6000602084013e61035d565b606091505b50915091508161036c57600080fd5b8051156101345780806020019051602081101561038857600080fd5b505161013457600080fd5b3b15159056fea165627a7a72305820527e51161d7752928ef3397f1ca34e4c247f84785325db9edb769475e7251f6a00290000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a30000000000000000000000000000000000b3f879cb30fe243b4dfee438691c040000000000000000000000000000000000000000000000000000000000000002

Deployed Bytecode

0x6080604052600436106100345760003560e01c8063261fc7ef1461013157806369fe0e2d146103a2578063e8edc816146103cc575b3415801561004c57506002546001600160a01b031633145b1561012f576001546002546040516001600160a01b03928316929190911690303180156108fc02916000818181858888f19350505050158015610093573d6000803e3d6000fd5b5060025460408051600160e01b6370a08231028152306004820152905161012d926001600160a01b0390811692908516916370a0823191602480820192602092909190829003018186803b1580156100ea57600080fd5b505afa1580156100fe573d6000803e3d6000fd5b505050506040513d602081101561011457600080fd5b50516001600160a01b038416919063ffffffff6103fd16565b505b005b610390600480360361014081101561014857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561018257600080fd5b82018360208201111561019457600080fd5b803590602001918460208302840111600160201b831117156101b557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561020457600080fd5b82018360208201111561021657600080fd5b803590602001918460018302840111600160201b8311171561023757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561028957600080fd5b82018360208201111561029b57600080fd5b803590602001918460208302840111600160201b831117156102bc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561030b57600080fd5b82018360208201111561031d57600080fd5b803590602001918460208302840111600160201b8311171561033e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602081013590604001356001600160a01b0316610457565b60408051918252519081900360200190f35b3480156103ae57600080fd5b5061012f600480360360208110156103c557600080fd5b5035610b75565b3480156103d857600080fd5b506103e1610bc6565b604080516001600160a01b039092168252519081900360200190f35b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0316600160e01b63a9059cbb02179052610452908490610bd5565b505050565b60005a60015460408051600160e01b6370a0823102815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156104ae57600080fd5b505afa1580156104c2573d6000803e3d6000fd5b505050506040513d60208110156104d857600080fd5b505187518a519192506001909101146104f057600080fd5b6001600160a01b038c1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146105d5576000809054906101000a90046001600160a01b03166001600160a01b0316630a5ea4668d33308e6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050600060405180830381600087803b1580156105bc57600080fd5b505af11580156105d0573d6000803e3d6000fd5b505050505b60005b60018851038110156108f25760008882815181106105f257fe5b602002602001015189836001018151811061060957fe5b60200260200101510311156108ea576001600160a01b038d1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906106f157508c6001600160a01b031663dd62ed3e308c848151811061065c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b1580156106c357600080fd5b505afa1580156106d7573d6000803e3d6000fd5b505050506040513d60208110156106ed57600080fd5b5051155b15610729576107298a828151811061070557fe5b60200260200101516000198f6001600160a01b0316610cd19092919063ffffffff16565b8751600160f91b600502908a908a908490811061074257fe5b60200260200101516000018151811061075757fe5b602001015160f81c60f81b6001600160f81b0319161415806107ba57508751600160f91b602f02908a908a908490811061078d57fe5b6020026020010151600101815181106107a257fe5b602001015160f81c60f81b6001600160f81b03191614155b8061080657508751600160fa1b602902908a908a90849081106107d957fe5b6020026020010151600201815181106107ee57fe5b602001015160f81c60f81b6001600160f81b03191614155b8061085257508751600160f91b603302908a908a908490811061082557fe5b60200260200101516003018151811061083a57fe5b602001015160f81c60f81b6001600160f81b03191614155b61085b57600080fd5b6108e187828151811061086a57fe5b60200260200101518a8a848151811061087f57fe5b60200260200101518b858151811061089357fe5b60200260200101518c86600101815181106108aa57fe5b6020026020010151038e86815181106108bf57fe5b60200260200101516001600160a01b0316610db890949392919063ffffffff16565b6108ea57600080fd5b6001016105d8565b506001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561092b57303184111561092657600080fd5b6109ae565b60408051600160e01b6370a08231028152306004820152905185916001600160a01b038e16916370a0823191602480820192602092909190829003018186803b15801561097757600080fd5b505afa15801561098b573d6000803e3d6000fd5b505050506040513d60208110156109a157600080fd5b505110156109ae57600080fd5b60015460408051600160e01b6370a0823102815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156109fc57600080fd5b505afa158015610a10573d6000803e3d6000fd5b505050506040513d6020811015610a2657600080fd5b50518114610a3357600080fd5b8415610a4557610a438286610ddc565b505b612710600354610a558d30610e60565b0281610a5d57fe5b0491506001600160a01b03831615610b3157600282049150610a828b84846001610f33565b610add5760028202915060006001600160a01b03168b6001600160a01b03167f713f62c1c63c3bb59b28b58e8486c5992361993a21817d75472fe9f2abad24cf846040518082815260200191505060405180910390a3610b31565b826001600160a01b03168b6001600160a01b03167f713f62c1c63c3bb59b28b58e8486c5992361993a21817d75472fe9f2abad24cf60028581610b1c57fe5b60408051929091048252519081900360200190a35b600254610b4b908c906001600160a01b0316846000610f33565b50610b568b30610e60565b9150610b658b33846000610f33565b50509a9950505050505050505050565b6002546001600160a01b03163314610bc157604051600160e51b62461bcd02815260040180806020018281038252602281526020018061116b6022913960400191505060405180910390fd5b600355565b6000546001600160a01b031681565b610be7826001600160a01b0316611004565b610bf057600080fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310610c2e5780518252601f199092019160209182019101610c0f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610c90576040519150601f19603f3d011682016040523d82523d6000602084013e610c95565b606091505b509150915081610ca457600080fd5b805115610ccb57808060200190516020811015610cc057600080fd5b5051610ccb57600080fd5b50505050565b801580610d5a575060408051600160e11b636eb1769f0281523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015610d2c57600080fd5b505afa158015610d40573d6000803e3d6000fd5b505050506040513d6020811015610d5657600080fd5b5051155b610d6357600080fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0316600160e01b63095ea7b302179052610452908490610bd5565b600060405160208501600082858784018a8c6187965a03f198975050505050505050565b6000617dfe618ebf61374a611ad6615dc08561a0aa845a8b030181610dfd57fe5b0490508181028582028701848302860160003a8083028d8502019060649086020281610e2557fe5b0490506064811115610e4b57610e3a8561100e565b9a5050505050505050505050610e5a565b60009a50505050505050505050505b92915050565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480610e9457506001600160a01b038316155b15610eaa57506001600160a01b03811631610e5a565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d6020811015610f2a57600080fd5b50519050610e5a565b60006001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480610f6757506001600160a01b038516155b15610fde578115610f9e576040516001600160a01b0385169084156108fc029085906000818181858888f193505050509050610ffc565b6040516001600160a01b0385169084156108fc029085906000818181858888f19350505050158015610fd4573d6000803e3d6000fd5b5060019050610ffc565b610ff86001600160a01b038616858563ffffffff6103fd16565b5060015b949350505050565b803b15155b919050565b60008115611162576000805a9050616c3e811061103257611b6c616c3d1982010491505b8184111561103e578193505b60015460408051600160e01b6370a0823102815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561108c57600080fd5b505afa1580156110a0573d6000803e3d6000fd5b505050506040513d60208110156110b657600080fd5b5051905084158015906110c95750848110155b156111565760015460408051600160e11b6331b35c9b0281526004810188905290516001600160a01b0390921691636366b936916024808201926020929091908290030181600087803b15801561111f57600080fd5b505af1158015611133573d6000803e3d6000fd5b505050506040513d602081101561114957600080fd5b5051935061100992505050565b60009350505050611009565b50600061100956fe4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6e2ea165627a7a723058204c0334d0cd98ac3d295193b791e315e477a40b6b207c72a926c3bc2c0ceeb1400029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a30000000000000000000000000000000000b3f879cb30fe243b4dfee438691c040000000000000000000000000000000000000000000000000000000000000002

-----Decoded View---------------
Arg [0] : _owner (address): 0x4D37f28D2db99e8d35A6C725a5f1749A085850a3
Arg [1] : _gasToken (address): 0x0000000000b3F879cb30FE243b4Dfee438691c04
Arg [2] : _fee (uint256): 2

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004d37f28d2db99e8d35a6c725a5f1749a085850a3
Arg [1] : 0000000000000000000000000000000000b3f879cb30fe243b4dfee438691c04
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000002


Swarm Source

bzzr://527e51161d7752928ef3397f1ca34e4c247f84785325db9edb769475e7251f6a

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.