ETH Price: $2,679.10 (+2.28%)
Gas: 0.96 Gwei

Contract

0xD6000fda0b38f4Bff4CfAb188E0bd18e8725a5e7
 

Overview

ETH Balance

1.849227170740871462 ETH

Eth Value

$4,954.26 (@ $2,679.10/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
List Token79941142019-06-20 8:57:142065 days ago1561021034IN
0xD6000fda...e8725a5e7
0 ETH0.0018315620
List Token74570312019-03-28 12:30:552148 days ago1553776255IN
0xD6000fda...e8725a5e7
0 ETH0.0037724941
List Token72778292019-02-28 7:32:562177 days ago1551339176IN
0xD6000fda...e8725a5e7
0 ETH0.0015675817
List Token72192872019-02-14 12:11:072190 days ago1550146267IN
0xD6000fda...e8725a5e7
0 ETH0.000737968
Set Kyber Networ...72151242019-02-13 12:06:062191 days ago1550059566IN
0xD6000fda...e8725a5e7
0 ETH0.000362512
Enable Trade72150662019-02-13 11:47:092191 days ago1550058429IN
0xD6000fda...e8725a5e7
0 ETH0.0005166912
Transfer Admin Q...72150502019-02-13 11:43:152191 days ago1550058195IN
0xD6000fda...e8725a5e7
0 ETH0.00019236
Remove Operator72150502019-02-13 11:43:152191 days ago1550058195IN
0xD6000fda...e8725a5e7
0 ETH0.000149326
List Token72150502019-02-13 11:43:152191 days ago1550058195IN
0xD6000fda...e8725a5e7
0 ETH0.00055236
Add Operator72150502019-02-13 11:43:152191 days ago1550058195IN
0xD6000fda...e8725a5e7
0 ETH0.000433666
Add Operator72150502019-02-13 11:43:152191 days ago1550058195IN
0xD6000fda...e8725a5e7
0 ETH0.000523666

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
89980432019-11-25 10:42:461906 days ago1574678566
0xD6000fda...e8725a5e7
0.29922007 ETH
89980432019-11-25 10:42:461906 days ago1574678566
0xD6000fda...e8725a5e7
0.29997 ETH
89947742019-11-24 21:41:491907 days ago1574631709
0xD6000fda...e8725a5e7
0.70888155 ETH
89947742019-11-24 21:41:491907 days ago1574631709
0xD6000fda...e8725a5e7
0.71065819 ETH
89908982019-11-24 6:13:221908 days ago1574576002
0xD6000fda...e8725a5e7
1.13439232 ETH
89908982019-11-24 6:13:221908 days ago1574576002
0xD6000fda...e8725a5e7
1.13723541 ETH
89861072019-11-23 11:20:021908 days ago1574508002
0xD6000fda...e8725a5e7
0.68571831 ETH
89861072019-11-23 11:20:021908 days ago1574508002
0xD6000fda...e8725a5e7
0.6874369 ETH
89824692019-11-22 20:42:121909 days ago1574455332
0xD6000fda...e8725a5e7
0.84739722 ETH
89824692019-11-22 20:42:121909 days ago1574455332
0xD6000fda...e8725a5e7
0.84952102 ETH
88167742019-10-26 17:51:271936 days ago1572112287
0xD6000fda...e8725a5e7
0.36907429 ETH
88167742019-10-26 17:51:271936 days ago1572112287
0xD6000fda...e8725a5e7
0.36999929 ETH
88050112019-10-24 20:20:061938 days ago1571948406
0xD6000fda...e8725a5e7
0.59785923 ETH
88050112019-10-24 20:20:061938 days ago1571948406
0xD6000fda...e8725a5e7
0.59935763 ETH
88049962019-10-24 20:15:521938 days ago1571948152
0xD6000fda...e8725a5e7
0.59236036 ETH
88049962019-10-24 20:15:521938 days ago1571948152
0xD6000fda...e8725a5e7
0.59384497 ETH
86679752019-10-03 7:36:011960 days ago1570088161
0xD6000fda...e8725a5e7
0.35235614 ETH
86679752019-10-03 7:36:011960 days ago1570088161
0xD6000fda...e8725a5e7
0.35323924 ETH
85772652019-09-19 2:49:211974 days ago1568861361
0xD6000fda...e8725a5e7
0.02378814 ETH
85772652019-09-19 2:49:211974 days ago1568861361
0xD6000fda...e8725a5e7
0.02384775 ETH
85229062019-09-10 15:32:201982 days ago1568129540
0xD6000fda...e8725a5e7
1.995 ETH
85229062019-09-10 15:32:201982 days ago1568129540
0xD6000fda...e8725a5e7
2 ETH
84989812019-09-06 22:05:451986 days ago1567807545
0xD6000fda...e8725a5e7
2.01625815 ETH
84989812019-09-06 22:05:451986 days ago1567807545
0xD6000fda...e8725a5e7
2.02131143 ETH
84956942019-09-06 9:50:101987 days ago1567763410
0xD6000fda...e8725a5e7
0.14940056 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KyberDutchXReserve

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-02-13
*/

pragma solidity 0.4.18;

// File: contracts/ERC20Interface.sol

// https://github.com/ethereum/EIPs/issues/20
interface ERC20 {
    function totalSupply() public view returns (uint supply);
    function balanceOf(address _owner) public view returns (uint balance);
    function transfer(address _to, uint _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint _value) public returns (bool success);
    function approve(address _spender, uint _value) public returns (bool success);
    function allowance(address _owner, address _spender) public view returns (uint remaining);
    function decimals() public view returns(uint digits);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

// File: contracts/KyberReserveInterface.sol

/// @title Kyber Reserve contract
interface KyberReserveInterface {

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool);

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint);
}

// File: contracts/Utils.sol

/// @title Kyber constants contract
contract Utils {

    ERC20 constant internal ETH_TOKEN_ADDRESS = ERC20(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee);
    uint  constant internal PRECISION = (10**18);
    uint  constant internal MAX_QTY   = (10**28); // 10B tokens
    uint  constant internal MAX_RATE  = (PRECISION * 10**6); // up to 1M tokens per ETH
    uint  constant internal MAX_DECIMALS = 18;
    uint  constant internal ETH_DECIMALS = 18;
    mapping(address=>uint) internal decimals;

    function setDecimals(ERC20 token) internal {
        if (token == ETH_TOKEN_ADDRESS) decimals[token] = ETH_DECIMALS;
        else decimals[token] = token.decimals();
    }

    function getDecimals(ERC20 token) internal view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS) return ETH_DECIMALS; // save storage access
        uint tokenDecimals = decimals[token];
        // technically, there might be token with decimals 0
        // moreover, very possible that old tokens have decimals 0
        // these tokens will just have higher gas fees.
        if(tokenDecimals == 0) return token.decimals();

        return tokenDecimals;
    }

    function calcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(srcQty <= MAX_QTY);
        require(rate <= MAX_RATE);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (srcQty * rate * (10**(dstDecimals - srcDecimals))) / PRECISION;
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (srcQty * rate) / (PRECISION * (10**(srcDecimals - dstDecimals)));
        }
    }

    function calcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) {
        require(dstQty <= MAX_QTY);
        require(rate <= MAX_RATE);
        
        //source quantity is rounded up. to avoid dest quantity being too low.
        uint numerator;
        uint denominator;
        if (srcDecimals >= dstDecimals) {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty * (10**(srcDecimals - dstDecimals)));
            denominator = rate;
        } else {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            numerator = (PRECISION * dstQty);
            denominator = (rate * (10**(dstDecimals - srcDecimals)));
        }
        return (numerator + denominator - 1) / denominator; //avoid rounding down errors
    }
}

// File: contracts/Utils2.sol

contract Utils2 is Utils {

    /// @dev get the balance of a user.
    /// @param token The token type
    /// @return The balance
    function getBalance(ERC20 token, address user) public view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS)
            return user.balance;
        else
            return token.balanceOf(user);
    }

    function getDecimalsSafe(ERC20 token) internal returns(uint) {

        if (decimals[token] == 0) {
            setDecimals(token);
        }

        return decimals[token];
    }

    function calcDestAmount(ERC20 src, ERC20 dest, uint srcAmount, uint rate) internal view returns(uint) {
        return calcDstQty(srcAmount, getDecimals(src), getDecimals(dest), rate);
    }

    function calcSrcAmount(ERC20 src, ERC20 dest, uint destAmount, uint rate) internal view returns(uint) {
        return calcSrcQty(destAmount, getDecimals(src), getDecimals(dest), rate);
    }

    function calcRateFromQty(uint srcAmount, uint destAmount, uint srcDecimals, uint dstDecimals)
        internal pure returns(uint)
    {
        require(srcAmount <= MAX_QTY);
        require(destAmount <= MAX_QTY);

        if (dstDecimals >= srcDecimals) {
            require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
            return (destAmount * PRECISION / ((10 ** (dstDecimals - srcDecimals)) * srcAmount));
        } else {
            require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
            return (destAmount * PRECISION * (10 ** (srcDecimals - dstDecimals)) / srcAmount);
        }
    }
}

// File: contracts/PermissionGroups.sol

contract PermissionGroups {

    address public admin;
    address public pendingAdmin;
    mapping(address=>bool) internal operators;
    mapping(address=>bool) internal alerters;
    address[] internal operatorsGroup;
    address[] internal alertersGroup;
    uint constant internal MAX_GROUP_SIZE = 50;

    function PermissionGroups() public {
        admin = msg.sender;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin);
        _;
    }

    modifier onlyOperator() {
        require(operators[msg.sender]);
        _;
    }

    modifier onlyAlerter() {
        require(alerters[msg.sender]);
        _;
    }

    function getOperators () external view returns(address[]) {
        return operatorsGroup;
    }

    function getAlerters () external view returns(address[]) {
        return alertersGroup;
    }

    event TransferAdminPending(address pendingAdmin);

    /**
     * @dev Allows the current admin to set the pendingAdmin address.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdmin(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        TransferAdminPending(pendingAdmin);
        pendingAdmin = newAdmin;
    }

    /**
     * @dev Allows the current admin to set the admin in one tx. Useful initial deployment.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdminQuickly(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0));
        TransferAdminPending(newAdmin);
        AdminClaimed(newAdmin, admin);
        admin = newAdmin;
    }

    event AdminClaimed( address newAdmin, address previousAdmin);

    /**
     * @dev Allows the pendingAdmin address to finalize the change admin process.
     */
    function claimAdmin() public {
        require(pendingAdmin == msg.sender);
        AdminClaimed(pendingAdmin, admin);
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }

    event AlerterAdded (address newAlerter, bool isAdd);

    function addAlerter(address newAlerter) public onlyAdmin {
        require(!alerters[newAlerter]); // prevent duplicates.
        require(alertersGroup.length < MAX_GROUP_SIZE);

        AlerterAdded(newAlerter, true);
        alerters[newAlerter] = true;
        alertersGroup.push(newAlerter);
    }

    function removeAlerter (address alerter) public onlyAdmin {
        require(alerters[alerter]);
        alerters[alerter] = false;

        for (uint i = 0; i < alertersGroup.length; ++i) {
            if (alertersGroup[i] == alerter) {
                alertersGroup[i] = alertersGroup[alertersGroup.length - 1];
                alertersGroup.length--;
                AlerterAdded(alerter, false);
                break;
            }
        }
    }

    event OperatorAdded(address newOperator, bool isAdd);

    function addOperator(address newOperator) public onlyAdmin {
        require(!operators[newOperator]); // prevent duplicates.
        require(operatorsGroup.length < MAX_GROUP_SIZE);

        OperatorAdded(newOperator, true);
        operators[newOperator] = true;
        operatorsGroup.push(newOperator);
    }

    function removeOperator (address operator) public onlyAdmin {
        require(operators[operator]);
        operators[operator] = false;

        for (uint i = 0; i < operatorsGroup.length; ++i) {
            if (operatorsGroup[i] == operator) {
                operatorsGroup[i] = operatorsGroup[operatorsGroup.length - 1];
                operatorsGroup.length -= 1;
                OperatorAdded(operator, false);
                break;
            }
        }
    }
}

// File: contracts/Withdrawable.sol

/**
 * @title Contracts that should be able to recover tokens or ethers
 * @author Ilan Doron
 * @dev This allows to recover any tokens or Ethers received in a contract.
 * This will prevent any accidental loss of tokens.
 */
contract Withdrawable is PermissionGroups {

    event TokenWithdraw(ERC20 token, uint amount, address sendTo);

    /**
     * @dev Withdraw all ERC20 compatible tokens
     * @param token ERC20 The address of the token contract
     */
    function withdrawToken(ERC20 token, uint amount, address sendTo) external onlyAdmin {
        require(token.transfer(sendTo, amount));
        TokenWithdraw(token, amount, sendTo);
    }

    event EtherWithdraw(uint amount, address sendTo);

    /**
     * @dev Withdraw Ethers
     */
    function withdrawEther(uint amount, address sendTo) external onlyAdmin {
        sendTo.transfer(amount);
        EtherWithdraw(amount, sendTo);
    }
}

// File: contracts/dutchX/KyberDutchXReserve.sol

interface WETH9 {
    function approve(address spender, uint amount) public returns(bool);
    function withdraw(uint amount) public;
    function deposit() public payable;
}


interface DutchXExchange {
    // Two functions below are in fact: mapping (address => mapping (address => uint)) public sellVolumesCurrent;
    // Token => Token => amount
    function buyVolumes(address sellToken, address buyToken) public view returns (uint);
    function sellVolumesCurrent(address sellToken, address buyToken) public view returns (uint);
    function deposit(address tokenAddress,uint amount) public returns(uint);
    function postBuyOrder(address sellToken,address buyToken,uint auctionIndex,uint amount) public returns (uint);

    function claimBuyerFunds(address sellToken, address buyToken, address user, uint auctionIndex) public
        returns(uint returned, uint frtsIssued);

    function withdraw(address tokenAddress,uint amount) public returns (uint);
    function getAuctionIndex(address sellToken, address buyToken) public view returns(uint index);
    function getFeeRatio(address user) public view returns (uint num, uint den); // feeRatio < 10^4

    function getCurrentAuctionPrice(address sellToken, address buyToken, uint auctionIndex) public view
        returns (uint num, uint den);
}


contract KyberDutchXReserve is KyberReserveInterface, Withdrawable, Utils2 {

    uint public constant BPS = 10000;
    uint public constant DEFAULT_KYBER_FEE_BPS = 25;

    uint public feeBps = DEFAULT_KYBER_FEE_BPS;
    uint public dutchXFeeNum;
    uint public dutchXFeeDen;

    DutchXExchange public dutchX;
    address public kyberNetwork;
    WETH9 public weth;

    mapping(address => bool) public listedTokens;

    bool public tradeEnabled;

    /**
        Constructor
    */
    function KyberDutchXReserve(
        DutchXExchange _dutchX,
        address _admin,
        address _kyberNetwork,
        WETH9 _weth
    )
        public
    {
        require(address(_dutchX) != address(0));
        require(_admin != address(0));
        require(_kyberNetwork != address(0));
        require(_weth != WETH9(0));

        dutchX = _dutchX;
        admin = _admin;
        kyberNetwork = _kyberNetwork;
        weth = _weth;

        setDutchXFee();
        require(weth.approve(dutchX, 2 ** 255));
        setDecimals(ETH_TOKEN_ADDRESS);
    }

    function() public payable {
        // anyone can deposit ether
    }

    struct AuctionData {
        uint index;
        ERC20 srcToken;
        ERC20 dstToken;
        uint priceNum; // numerator
        uint priceDen; // denominator
    }

    /**
        Returns rate = dest quantity / source quantity.
    */
    function getConversionRate(
        ERC20 src,
        ERC20 dest,
        uint srcQty,
        uint blockNumber
    )
        public
        view
        returns(uint)
    {
        blockNumber;
        if (!tradeEnabled) return 0;

        if (src == ETH_TOKEN_ADDRESS) {
            if (!listedTokens[dest]) return 0;
        } else if (dest == ETH_TOKEN_ADDRESS) {
            if (!listedTokens[src]) return 0;
        } else {
            return 0;
        }

        AuctionData memory auctionData = getAuctionData(src, dest);
        if (auctionData.index == 0) return 0;

        (auctionData.priceNum, auctionData.priceDen) = dutchX.getCurrentAuctionPrice(
                auctionData.dstToken,
                auctionData.srcToken,
                auctionData.index
            );

        if (auctionData.priceNum == 0 || auctionData.priceDen == 0) return 0;

        if (!sufficientLiquidity(auctionData.srcToken, srcQty, auctionData.dstToken,
            auctionData.priceNum, auctionData.priceDen)) {
            return 0;
        }

        // if source is Eth, reduce kyber fee from source.
        uint actualSrcQty = (src == ETH_TOKEN_ADDRESS) ? srcQty * (BPS - feeBps) / BPS : srcQty;

        if (actualSrcQty == 0 || actualSrcQty * auctionData.priceDen < actualSrcQty) return 0;

        uint convertedQty = (actualSrcQty * auctionData.priceDen) / auctionData.priceNum;
        // reduce dutchX fees
        convertedQty = convertedQty * (dutchXFeeDen - dutchXFeeNum) / dutchXFeeDen;

        // if destination is Eth, reduce kyber fee from destination.
        convertedQty = (dest == ETH_TOKEN_ADDRESS) ? convertedQty * (BPS - feeBps) / BPS : convertedQty;

        // here use original srcQty, which will give the real rate (as seen by internal kyberNetwork)
        return calcRateFromQty(
            srcQty, /* srcAmount */
            convertedQty, /* destAmount */
            getDecimals(src), /* srcDecimals */
            getDecimals(dest) /* dstDecimals */
        );
    }

    event TradeExecute(
        address indexed sender,
        address src,
        uint srcAmount,
        address destToken,
        uint destAmount,
        address destAddress,
        uint auctionIndex
    );

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool)
    {
        validate;

        require(tradeEnabled);
        require(msg.sender == kyberNetwork);

        AuctionData memory auctionData = getAuctionData(srcToken, destToken);
        require(auctionData.index != 0);

        uint actualSrcQty;

        if (srcToken == ETH_TOKEN_ADDRESS){
            require(srcAmount == msg.value);
            actualSrcQty = srcAmount * (BPS - feeBps) / BPS;
            weth.deposit.value(actualSrcQty)();
        } else {
            require(msg.value == 0);
            require(srcToken.transferFrom(msg.sender, address(this), srcAmount));
            actualSrcQty = srcAmount;
        }

        dutchX.deposit(auctionData.srcToken, actualSrcQty);
        dutchX.postBuyOrder(auctionData.dstToken, auctionData.srcToken, auctionData.index, actualSrcQty);

        uint destAmount;
        uint frtsIssued;
        (destAmount, frtsIssued) = dutchX.claimBuyerFunds(
            auctionData.dstToken,
            auctionData.srcToken,
            this,
            auctionData.index
        );

        dutchX.withdraw(auctionData.dstToken, destAmount);

        if (destToken == ETH_TOKEN_ADDRESS) {
            weth.withdraw(destAmount);
            destAmount = destAmount * (BPS - feeBps) / BPS;
            destAddress.transfer(destAmount);
        } else {
            require(auctionData.dstToken.transfer(destAddress, destAmount));
        }

        require(conversionRate <= calcRateFromQty(
            srcAmount, /* srcAmount */
            destAmount, /* destAmount */
            getDecimals(srcToken), /* srcDecimals */
            getDecimals(destToken) /* dstDecimals */
        ));
        
        TradeExecute(
            msg.sender, /* sender */
            srcToken, /* src */
            srcAmount, /* srcAmount */
            destToken, /* destToken */
            destAmount, /* destAmount */
            destAddress, /* destAddress */
            auctionData.index
        );

        return true;
    }

    event FeeUpdated(
        uint bps
    );

    function setFee(uint bps) public onlyAdmin {
        require(bps <= BPS);
        feeBps = bps;
        FeeUpdated(bps);
    }

    event TokenListed(
        ERC20 token
    );

    function listToken(ERC20 token)
        public
        onlyAdmin
    {
        require(address(token) != address(0));

        listedTokens[token] = true;
        setDecimals(token);
        require(token.approve(dutchX, 2**255));
        TokenListed(token);
    }

    event TokenDelisted(ERC20 token);

    function delistToken(ERC20 token)
        public
        onlyAdmin
    {
        require(listedTokens[token]);
        listedTokens[token] = false;

        TokenDelisted(token);
    }

    event TradeEnabled(
        bool enable
    );

    function setDutchXFee() public {
        (dutchXFeeNum, dutchXFeeDen) = dutchX.getFeeRatio(this);

        // can't use denominator 0 (EVM bad instruction)
        if (dutchXFeeDen == 0) {
            tradeEnabled = false;
        }

        TradeEnabled(tradeEnabled);
    }

    function disableTrade()
        public
        onlyAlerter
        returns(bool)
    {
        tradeEnabled = false;
        TradeEnabled(tradeEnabled);
        return true;
    }

    function enableTrade()
        public
        onlyAdmin
        returns(bool)
    {
        tradeEnabled = true;
        TradeEnabled(tradeEnabled);
        return true;
    }

    event KyberNetworkSet(
        address kyberNetwork
    );

    function setKyberNetwork(
        address _kyberNetwork
    )
        public
        onlyAdmin
    {
        require(_kyberNetwork != address(0));
        kyberNetwork = _kyberNetwork;
        KyberNetworkSet(kyberNetwork);
    }

    event Execution(bool success, address caller, address destination, uint value, bytes data);

    function executeTransaction(address destination, uint value, bytes data)
        public
        onlyOperator
    {
        if (destination.call.value(value)(data)) {
            Execution(true, msg.sender, destination, value, data);
        } else {
            revert();
        }
    }

    function sufficientLiquidity(ERC20 src, uint srcQty, ERC20 dest, uint priceNum, uint priceDen)
        internal view returns(bool)
    {
        uint buyVolume = dutchX.buyVolumes(dest, src);
        uint sellVolume = dutchX.sellVolumesCurrent(dest, src);

        // 10^30 * 10^37 = 10^67
        if (sellVolume * priceNum < sellVolume) return false;
        int outstandingVolume = int((sellVolume * priceNum) / priceDen) - int(buyVolume);
        if (outstandingVolume >= int(srcQty)) return true;

        return false;
    }

    function getAuctionData(ERC20 src, ERC20 dst) internal view returns (AuctionData data) {
        data.srcToken = src == ETH_TOKEN_ADDRESS ? ERC20(weth) : src;
        data.dstToken = dst == ETH_TOKEN_ADDRESS ? ERC20(weth) : dst;
        data.index = dutchX.getAuctionIndex(data.dstToken, data.srcToken);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"enableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setDutchXFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"listToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"DEFAULT_KYBER_FEE_BPS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BPS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeBps","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dutchX","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dutchXFeeDen","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"destination","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"executeTransaction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"weth","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kyberNetwork","type":"address"}],"name":"setKyberNetwork","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bps","type":"uint256"}],"name":"setFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"srcToken","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"destToken","type":"address"},{"name":"destAddress","type":"address"},{"name":"conversionRate","type":"uint256"},{"name":"validate","type":"bool"}],"name":"trade","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"listedTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAlerters","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"},{"name":"blockNumber","type":"uint256"}],"name":"getConversionRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"delistToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetwork","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradeEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dutchXFeeNum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_dutchX","type":"address"},{"name":"_admin","type":"address"},{"name":"_kyberNetwork","type":"address"},{"name":"_weth","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"srcAmount","type":"uint256"},{"indexed":false,"name":"destToken","type":"address"},{"indexed":false,"name":"destAmount","type":"uint256"},{"indexed":false,"name":"destAddress","type":"address"},{"indexed":false,"name":"auctionIndex","type":"uint256"}],"name":"TradeExecute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bps","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"}],"name":"TokenListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"}],"name":"TokenDelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"enable","type":"bool"}],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"kyberNetwork","type":"address"}],"name":"KyberNetworkSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"success","type":"bool"},{"indexed":false,"name":"caller","type":"address"},{"indexed":false,"name":"destination","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"Execution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAdmin","type":"address"},{"indexed":false,"name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAlerter","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"AlerterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOperator","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"}]

6060604052601960075534156200001557600080fd5b604051608080620027b88339810160405280805191906020018051919060200180519190602001805160008054600160a060020a03191633600160a060020a03908116919091179091559092508516151590506200007257600080fd5b600160a060020a03831615156200008857600080fd5b600160a060020a03821615156200009e57600080fd5b600160a060020a0381161515620000b457600080fd5b600a8054600160a060020a03808716600160a060020a03199283161790925560008054868416908316179055600b8054858416908316179055600c80549284169290911691909117905562000116640100000000620007bd6200021582021704565b600c54600a54600160a060020a039182169163095ea7b391167f80000000000000000000000000000000000000000000000000000000000000006000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515620001b657600080fd5b6102c65a03f11515620001c857600080fd5b505050604051805190501515620001de57600080fd5b6200020b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee64010000000062001e886200030282021704565b50505050620003e2565b600a54600160a060020a031663edd0b5cb306000604051604001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8416028152600160a060020a0390911660048201526024016040805180830381600087803b15156200028757600080fd5b6102c65a03f115156200029957600080fd5b50505060405180519060200180516009819055600892909255501515620002c557600e805460ff191690555b600e547f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359060ff16604051901515815260200160405180910390a1565b600160a060020a03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156200034a57600160a060020a038116600090815260066020526040902060129055620003df565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620003aa57600080fd5b6102c65a03f11515620003bc57600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b6123c680620003f26000396000f3006060604052600436106101915763ffffffff60e060020a60003504166299d386811461019357806301a12fd3146101ba57806304fe3212146101d95780631fc1e25f146101ec5780631fe884031461020b578063249d39e91461023057806324a9d8531461024357806325071db014610256578063261542a414610285578063267822471461029857806327a099d8146102ab5780633ccdbb28146103115780633f579f421461033a5780633fc8cef31461039f578063408ee7fe146103b257806354a325a6146103d15780636940030f146103f057806369fe0e2d146104035780636cf69811146104195780637093f47f1461044557806375829def1461046457806377f50f97146104835780637acc8678146104965780637c423f54146104b55780637cd44272146104c85780639870d7fe146104f3578063abffc9ac14610512578063ac8a584a14610531578063b78b842d14610550578063ce56c45414610563578063d4fac45d14610585578063d621e813146105aa578063de05ef1a146105bd578063f851a440146105d0575b005b341561019e57600080fd5b6101a66105e3565b604051901515815260200160405180910390f35b34156101c557600080fd5b610191600160a060020a036004351661064d565b34156101e457600080fd5b6101916107bd565b34156101f757600080fd5b610191600160a060020a036004351661088e565b341561021657600080fd5b61021e6109d3565b60405190815260200160405180910390f35b341561023b57600080fd5b61021e6109d8565b341561024e57600080fd5b61021e6109de565b341561026157600080fd5b6102696109e4565b604051600160a060020a03909116815260200160405180910390f35b341561029057600080fd5b61021e6109f3565b34156102a357600080fd5b6102696109f9565b34156102b657600080fd5b6102be610a08565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102fd5780820151838201526020016102e5565b505050509050019250505060405180910390f35b341561031c57600080fd5b610191600160a060020a036004358116906024359060443516610a70565b341561034557600080fd5b61019160048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610b6795505050505050565b34156103aa57600080fd5b610269610ce5565b34156103bd57600080fd5b610191600160a060020a0360043516610cf4565b34156103dc57600080fd5b610191600160a060020a0360043516610df0565b34156103fb57600080fd5b6101a6610e82565b341561040e57600080fd5b610191600435610eef565b6101a6600160a060020a03600435811690602435906044358116906064351660843560a4351515610f54565b341561045057600080fd5b6101a6600160a060020a0360043516611503565b341561046f57600080fd5b610191600160a060020a0360043516611518565b341561048e57600080fd5b6101916115b3565b34156104a157600080fd5b610191600160a060020a036004351661164d565b34156104c057600080fd5b6102be61172f565b34156104d357600080fd5b61021e600160a060020a0360043581169060243516604435606435611795565b34156104fe57600080fd5b610191600160a060020a0360043516611a3c565b341561051d57600080fd5b610191600160a060020a0360043516611b0c565b341561053c57600080fd5b610191600160a060020a0360043516611bb0565b341561055b57600080fd5b610269611d1c565b341561056e57600080fd5b610191600435600160a060020a0360243516611d2b565b341561059057600080fd5b61021e600160a060020a0360043581169060243516611dbe565b34156105b557600080fd5b6101a6611e6a565b34156105c857600080fd5b61021e611e73565b34156105db57600080fd5b610269611e79565b6000805433600160a060020a039081169116146105ff57600080fd5b600e805460ff1916600117908190557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359060ff16604051901515815260200160405180910390a15060015b90565b6000805433600160a060020a0390811691161461066957600080fd5b600160a060020a03821660009081526003602052604090205460ff16151561069057600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156107b95781600160a060020a03166005828154811015156106d557fe5b600091825260209091200154600160a060020a031614156107b15760058054600019810190811061070257fe5b60009182526020909120015460058054600160a060020a03909216918390811061072857fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560058054906107649060001983016122f8565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a16107b9565b6001016106b2565b5050565b600a54600160a060020a031663edd0b5cb3060006040516040015260405160e060020a63ffffffff8416028152600160a060020a0390911660048201526024016040805180830381600087803b151561081557600080fd5b6102c65a03f1151561082657600080fd5b5050506040518051906020018051600981905560089290925550151561085157600e805460ff191690555b600e547f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359060ff16604051901515815260200160405180910390a1565b60005433600160a060020a039081169116146108a957600080fd5b600160a060020a03811615156108be57600080fd5b600160a060020a0381166000908152600d60205260409020805460ff191660011790556108ea81611e88565b600a54600160a060020a038083169163095ea7b391167f800000000000000000000000000000000000000000000000000000000000000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561096d57600080fd5b6102c65a03f1151561097e57600080fd5b50505060405180519050151561099357600080fd5b7f017664858438d89f547fee46da0bcfc5396ea13a9fb1490b8fdd76cfa979f1a981604051600160a060020a03909116815260200160405180910390a150565b601981565b61271081565b60075481565b600a54600160a060020a031681565b60095481565b600154600160a060020a031681565b610a1061231c565b6004805480602002602001604051908101604052809291908181526020018280548015610a6657602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610a48575b5050505050905090565b60005433600160a060020a03908116911614610a8b57600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ae857600080fd5b6102c65a03f11515610af957600080fd5b505050604051805190501515610b0e57600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b600160a060020a03331660009081526002602052604090205460ff161515610b8e57600080fd5b82600160a060020a0316828260405180828051906020019080838360005b83811015610bc4578082015183820152602001610bac565b50505050905090810190601f168015610bf15780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876187965a03f19250505015610cdb577f0c522140e9193f2aabe5087aa9816c5fdea5ba2e9e42a54acfe27ffdc98d91b06001338585856040518515158152600160a060020a038086166020830152841660408201526060810183905260a06080820181815290820183818151815260200191508051906020019080838360005b83811015610c98578082015183820152602001610c80565b50505050905090810190601f168015610cc55780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1610ce0565b600080fd5b505050565b600c54600160a060020a031681565b60005433600160a060020a03908116911614610d0f57600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610d3557600080fd5b60055460329010610d4557600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610dc483826122f8565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610e0b57600080fd5b600160a060020a0381161515610e2057600080fd5b600b8054600160a060020a031916600160a060020a0383811691909117918290557f38622430bb6defd4452b087e8d0b4a6d1c4d35c179c2d7d875d4abb272b9d88b9116604051600160a060020a03909116815260200160405180910390a150565b600160a060020a03331660009081526003602052604081205460ff161515610ea957600080fd5b600e805460ff191690557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356000604051901515815260200160405180910390a150600190565b60005433600160a060020a03908116911614610f0a57600080fd5b612710811115610f1957600080fd5b60078190557f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c768160405190815260200160405180910390a150565b6000610f5e61232e565b600e546000908190819060ff161515610f7657600080fd5b600b5433600160a060020a03908116911614610f9157600080fd5b610f9b8b8a611f45565b935083511515610faa57600080fd5b600160a060020a038b1660008051602061237b833981519152141561103e57348a14610fd557600080fd5b6007546127109081038b02600c549190049350600160a060020a031663d0e30db0846040518263ffffffff1660e060020a0281526004016000604051808303818588803b151561102457600080fd5b6125ee5a03f1151561103557600080fd5b505050506110dd565b341561104957600080fd5b8a600160a060020a03166323b872dd33308d60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156110b357600080fd5b6102c65a03f115156110c457600080fd5b5050506040518051905015156110d957600080fd5b8992505b600a54600160a060020a03166347e7ef2460208601518560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561114057600080fd5b6102c65a03f1151561115157600080fd5b50505060405180515050600a54600160a060020a0316635e7f22c26040860151866020015187518760006040516020015260405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201526064810191909152608401602060405180830381600087803b15156111d657600080fd5b6102c65a03f115156111e757600080fd5b50505060405180515050600a54600160a060020a031663b02938506040860151866020015130885160006040516040015260405160e060020a63ffffffff8716028152600160a060020a03948516600482015292841660248401529216604482015260648101919091526084016040805180830381600087803b151561126c57600080fd5b6102c65a03f1151561127d57600080fd5b5050506040518051906020018051600a54929450925050600160a060020a031663f3fef3a360408601518460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112f457600080fd5b6102c65a03f1151561130557600080fd5b50505060405180515050600160a060020a03891660008051602061237b83398151915214156113ce57600c54600160a060020a0316632e1a7d4d8360405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b151561137657600080fd5b6102c65a03f1151561138757600080fd5b5050600754612710915081038302049150600160a060020a03881682156108fc0283604051600060405180830381858888f1935050505015156113c957600080fd5b611455565b8360400151600160a060020a031663a9059cbb898460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561142f57600080fd5b6102c65a03f1151561144057600080fd5b50505060405180519050151561145557600080fd5b6114718a836114638e61204c565b61146c8d61204c565b61210a565b87111561147d57600080fd5b600160a060020a0333167fd7dd4b527e22d0655c20ef5e9f1db6f8b4059d29617cc7584d2e32f6b4fbf8ae8c8c8c868d8a51604051600160a060020a03968716815260208101959095529285166040808601919091526060850192909252909316608083015260a082015260c001905180910390a25060019a9950505050505050505050565b600d6020526000908152604090205460ff1681565b60005433600160a060020a0390811691161461153357600080fd5b600160a060020a038116151561154857600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146115ce57600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60005433600160a060020a0390811691161461166857600080fd5b600160a060020a038116151561167d57600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b61173761231c565b6005805480602002602001604051908101604052809291908181526020018280548015610a6657602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610a48575050505050905090565b600061179f61232e565b600e54600090819060ff1615156117b95760009350611a31565b600160a060020a03881660008051602061237b833981519152141561180857600160a060020a0387166000908152600d602052604090205460ff1615156118035760009350611a31565b61185b565b600160a060020a03871660008051602061237b833981519152141561185257600160a060020a0388166000908152600d602052604090205460ff1615156118035760009350611a31565b60009350611a31565b6118658888611f45565b9250825115156118785760009350611a31565b600a54600160a060020a031663fdab1b7b60408501518560200151865160006040516040015260405160e060020a63ffffffff8616028152600160a060020a03938416600482015291909216602482015260448101919091526064016040805180830381600087803b15156118ec57600080fd5b6102c65a03f115156118fd57600080fd5b50505060405180519060200180516080860152506060840190815251158061192757508260800151155b156119355760009350611a31565b6119528360200151878560400151866060015187608001516121ad565b15156119615760009350611a31565b600160a060020a03881660008051602061237b833981519152146119855785611992565b6007546127109081038702045b91508115806119a657508183608001518302105b156119b45760009350611a31565b8260600151836080015183028115156119c957fe5b0490506009546008546009540382028115156119e157fe5b049050600160a060020a03871660008051602061237b83398151915214611a085780611a15565b6007546127109081038202045b9050611a2e8682611a258b61204c565b61146c8b61204c565b93505b505050949350505050565b60005433600160a060020a03908116911614611a5757600080fd5b600160a060020a03811660009081526002602052604090205460ff1615611a7d57600080fd5b60045460329010611a8d57600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610dc483826122f8565b60005433600160a060020a03908116911614611b2757600080fd5b600160a060020a0381166000908152600d602052604090205460ff161515611b4e57600080fd5b600160a060020a0381166000908152600d602052604090819020805460ff191690557f6621c4efc5efa31320394260425b7d14cbb9d7e3754b2c98c04af66b1cbf315b90829051600160a060020a03909116815260200160405180910390a150565b6000805433600160a060020a03908116911614611bcc57600080fd5b600160a060020a03821660009081526002602052604090205460ff161515611bf357600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156107b95781600160a060020a0316600482815481101515611c3857fe5b600091825260209091200154600160a060020a03161415611d1457600480546000198101908110611c6557fe5b60009182526020909120015460048054600160a060020a039092169183908110611c8b57fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600480546000190190611cc790826122f8565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a16107b9565b600101611c15565b600b54600160a060020a031681565b60005433600160a060020a03908116911614611d4657600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f193505050501515611d7757600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b6000600160a060020a03831660008051602061237b8339815191521415611df05750600160a060020a03811631611e64565b82600160a060020a03166370a082318360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611e4757600080fd5b6102c65a03f11515611e5857600080fd5b50505060405180519150505b92915050565b600e5460ff1681565b60085481565b600054600160a060020a031681565b600160a060020a03811660008051602061237b8339815191521415611ec857600160a060020a038116600090815260066020526040902060129055611f42565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611f0e57600080fd5b6102c65a03f11515611f1f57600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b611f4d61232e565b600160a060020a03831660008051602061237b83398151915214611f715782611f7e565b600c54600160a060020a03165b600160a060020a039081166020830152821660008051602061237b83398151915214611faa5781611fb7565b600c54600160a060020a03165b600160a060020a0390811660408301908152600a54909116906314584a9d9051836020015160006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561202a57600080fd5b6102c65a03f1151561203b57600080fd5b505050604051805182525092915050565b600080600160a060020a03831660008051602061237b83398151915214156120775760129150612104565b50600160a060020a0382166000908152600660205260409020548015156121005782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156120de57600080fd5b6102c65a03f115156120ef57600080fd5b505050604051805190509150612104565b8091505b50919050565b60006b204fce5e3e2502611000000085111561212557600080fd5b6b204fce5e3e2502611000000084111561213e57600080fd5b828210612179576012838303111561215557600080fd5b84838303600a0a02670de0b6b3a7640000850281151561217157fe5b0490506121a5565b6012828403111561218957600080fd5b84828403600a0a670de0b6b3a764000086020281151561217157fe5b949350505050565b600a54600090819081908190600160a060020a031663b8beafd6888b846040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561221657600080fd5b6102c65a03f1151561222757600080fd5b5050506040518051600a54909450600160a060020a0316905063b64c4905888b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561229557600080fd5b6102c65a03f115156122a657600080fd5b5050506040518051905091508186830210156122c557600093506122ec565b82858784028115156122d357fe5b040390508781126122e757600193506122ec565b600093505b50505095945050505050565b815481835581811511610ce057600083815260209020610ce091810190830161235c565b60206040519081016040526000815290565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b61064a91905b808211156123765760008155600101612362565b50905600000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea165627a7a72305820d82e0158f764732f605978178c0d7ea42d43a5d4d6db4e8e7eb6bea013b546fa0029000000000000000000000000b9812e2fa995ec53b5b6df34d21f9304762c5497000000000000000000000000f069cb44739a913c16622edc31a066e38913d82500000000000000000000000065897adcba42dcca5dd162c647b1cc3e31238490000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x6060604052600436106101915763ffffffff60e060020a60003504166299d386811461019357806301a12fd3146101ba57806304fe3212146101d95780631fc1e25f146101ec5780631fe884031461020b578063249d39e91461023057806324a9d8531461024357806325071db014610256578063261542a414610285578063267822471461029857806327a099d8146102ab5780633ccdbb28146103115780633f579f421461033a5780633fc8cef31461039f578063408ee7fe146103b257806354a325a6146103d15780636940030f146103f057806369fe0e2d146104035780636cf69811146104195780637093f47f1461044557806375829def1461046457806377f50f97146104835780637acc8678146104965780637c423f54146104b55780637cd44272146104c85780639870d7fe146104f3578063abffc9ac14610512578063ac8a584a14610531578063b78b842d14610550578063ce56c45414610563578063d4fac45d14610585578063d621e813146105aa578063de05ef1a146105bd578063f851a440146105d0575b005b341561019e57600080fd5b6101a66105e3565b604051901515815260200160405180910390f35b34156101c557600080fd5b610191600160a060020a036004351661064d565b34156101e457600080fd5b6101916107bd565b34156101f757600080fd5b610191600160a060020a036004351661088e565b341561021657600080fd5b61021e6109d3565b60405190815260200160405180910390f35b341561023b57600080fd5b61021e6109d8565b341561024e57600080fd5b61021e6109de565b341561026157600080fd5b6102696109e4565b604051600160a060020a03909116815260200160405180910390f35b341561029057600080fd5b61021e6109f3565b34156102a357600080fd5b6102696109f9565b34156102b657600080fd5b6102be610a08565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102fd5780820151838201526020016102e5565b505050509050019250505060405180910390f35b341561031c57600080fd5b610191600160a060020a036004358116906024359060443516610a70565b341561034557600080fd5b61019160048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610b6795505050505050565b34156103aa57600080fd5b610269610ce5565b34156103bd57600080fd5b610191600160a060020a0360043516610cf4565b34156103dc57600080fd5b610191600160a060020a0360043516610df0565b34156103fb57600080fd5b6101a6610e82565b341561040e57600080fd5b610191600435610eef565b6101a6600160a060020a03600435811690602435906044358116906064351660843560a4351515610f54565b341561045057600080fd5b6101a6600160a060020a0360043516611503565b341561046f57600080fd5b610191600160a060020a0360043516611518565b341561048e57600080fd5b6101916115b3565b34156104a157600080fd5b610191600160a060020a036004351661164d565b34156104c057600080fd5b6102be61172f565b34156104d357600080fd5b61021e600160a060020a0360043581169060243516604435606435611795565b34156104fe57600080fd5b610191600160a060020a0360043516611a3c565b341561051d57600080fd5b610191600160a060020a0360043516611b0c565b341561053c57600080fd5b610191600160a060020a0360043516611bb0565b341561055b57600080fd5b610269611d1c565b341561056e57600080fd5b610191600435600160a060020a0360243516611d2b565b341561059057600080fd5b61021e600160a060020a0360043581169060243516611dbe565b34156105b557600080fd5b6101a6611e6a565b34156105c857600080fd5b61021e611e73565b34156105db57600080fd5b610269611e79565b6000805433600160a060020a039081169116146105ff57600080fd5b600e805460ff1916600117908190557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359060ff16604051901515815260200160405180910390a15060015b90565b6000805433600160a060020a0390811691161461066957600080fd5b600160a060020a03821660009081526003602052604090205460ff16151561069057600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156107b95781600160a060020a03166005828154811015156106d557fe5b600091825260209091200154600160a060020a031614156107b15760058054600019810190811061070257fe5b60009182526020909120015460058054600160a060020a03909216918390811061072857fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560058054906107649060001983016122f8565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a16107b9565b6001016106b2565b5050565b600a54600160a060020a031663edd0b5cb3060006040516040015260405160e060020a63ffffffff8416028152600160a060020a0390911660048201526024016040805180830381600087803b151561081557600080fd5b6102c65a03f1151561082657600080fd5b5050506040518051906020018051600981905560089290925550151561085157600e805460ff191690555b600e547f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7359060ff16604051901515815260200160405180910390a1565b60005433600160a060020a039081169116146108a957600080fd5b600160a060020a03811615156108be57600080fd5b600160a060020a0381166000908152600d60205260409020805460ff191660011790556108ea81611e88565b600a54600160a060020a038083169163095ea7b391167f800000000000000000000000000000000000000000000000000000000000000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561096d57600080fd5b6102c65a03f1151561097e57600080fd5b50505060405180519050151561099357600080fd5b7f017664858438d89f547fee46da0bcfc5396ea13a9fb1490b8fdd76cfa979f1a981604051600160a060020a03909116815260200160405180910390a150565b601981565b61271081565b60075481565b600a54600160a060020a031681565b60095481565b600154600160a060020a031681565b610a1061231c565b6004805480602002602001604051908101604052809291908181526020018280548015610a6657602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610a48575b5050505050905090565b60005433600160a060020a03908116911614610a8b57600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ae857600080fd5b6102c65a03f11515610af957600080fd5b505050604051805190501515610b0e57600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b600160a060020a03331660009081526002602052604090205460ff161515610b8e57600080fd5b82600160a060020a0316828260405180828051906020019080838360005b83811015610bc4578082015183820152602001610bac565b50505050905090810190601f168015610bf15780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876187965a03f19250505015610cdb577f0c522140e9193f2aabe5087aa9816c5fdea5ba2e9e42a54acfe27ffdc98d91b06001338585856040518515158152600160a060020a038086166020830152841660408201526060810183905260a06080820181815290820183818151815260200191508051906020019080838360005b83811015610c98578082015183820152602001610c80565b50505050905090810190601f168015610cc55780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a1610ce0565b600080fd5b505050565b600c54600160a060020a031681565b60005433600160a060020a03908116911614610d0f57600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610d3557600080fd5b60055460329010610d4557600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610dc483826122f8565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610e0b57600080fd5b600160a060020a0381161515610e2057600080fd5b600b8054600160a060020a031916600160a060020a0383811691909117918290557f38622430bb6defd4452b087e8d0b4a6d1c4d35c179c2d7d875d4abb272b9d88b9116604051600160a060020a03909116815260200160405180910390a150565b600160a060020a03331660009081526003602052604081205460ff161515610ea957600080fd5b600e805460ff191690557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356000604051901515815260200160405180910390a150600190565b60005433600160a060020a03908116911614610f0a57600080fd5b612710811115610f1957600080fd5b60078190557f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c768160405190815260200160405180910390a150565b6000610f5e61232e565b600e546000908190819060ff161515610f7657600080fd5b600b5433600160a060020a03908116911614610f9157600080fd5b610f9b8b8a611f45565b935083511515610faa57600080fd5b600160a060020a038b1660008051602061237b833981519152141561103e57348a14610fd557600080fd5b6007546127109081038b02600c549190049350600160a060020a031663d0e30db0846040518263ffffffff1660e060020a0281526004016000604051808303818588803b151561102457600080fd5b6125ee5a03f1151561103557600080fd5b505050506110dd565b341561104957600080fd5b8a600160a060020a03166323b872dd33308d60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156110b357600080fd5b6102c65a03f115156110c457600080fd5b5050506040518051905015156110d957600080fd5b8992505b600a54600160a060020a03166347e7ef2460208601518560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561114057600080fd5b6102c65a03f1151561115157600080fd5b50505060405180515050600a54600160a060020a0316635e7f22c26040860151866020015187518760006040516020015260405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201526064810191909152608401602060405180830381600087803b15156111d657600080fd5b6102c65a03f115156111e757600080fd5b50505060405180515050600a54600160a060020a031663b02938506040860151866020015130885160006040516040015260405160e060020a63ffffffff8716028152600160a060020a03948516600482015292841660248401529216604482015260648101919091526084016040805180830381600087803b151561126c57600080fd5b6102c65a03f1151561127d57600080fd5b5050506040518051906020018051600a54929450925050600160a060020a031663f3fef3a360408601518460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156112f457600080fd5b6102c65a03f1151561130557600080fd5b50505060405180515050600160a060020a03891660008051602061237b83398151915214156113ce57600c54600160a060020a0316632e1a7d4d8360405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b151561137657600080fd5b6102c65a03f1151561138757600080fd5b5050600754612710915081038302049150600160a060020a03881682156108fc0283604051600060405180830381858888f1935050505015156113c957600080fd5b611455565b8360400151600160a060020a031663a9059cbb898460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561142f57600080fd5b6102c65a03f1151561144057600080fd5b50505060405180519050151561145557600080fd5b6114718a836114638e61204c565b61146c8d61204c565b61210a565b87111561147d57600080fd5b600160a060020a0333167fd7dd4b527e22d0655c20ef5e9f1db6f8b4059d29617cc7584d2e32f6b4fbf8ae8c8c8c868d8a51604051600160a060020a03968716815260208101959095529285166040808601919091526060850192909252909316608083015260a082015260c001905180910390a25060019a9950505050505050505050565b600d6020526000908152604090205460ff1681565b60005433600160a060020a0390811691161461153357600080fd5b600160a060020a038116151561154857600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a039081169116146115ce57600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60005433600160a060020a0390811691161461166857600080fd5b600160a060020a038116151561167d57600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b61173761231c565b6005805480602002602001604051908101604052809291908181526020018280548015610a6657602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610a48575050505050905090565b600061179f61232e565b600e54600090819060ff1615156117b95760009350611a31565b600160a060020a03881660008051602061237b833981519152141561180857600160a060020a0387166000908152600d602052604090205460ff1615156118035760009350611a31565b61185b565b600160a060020a03871660008051602061237b833981519152141561185257600160a060020a0388166000908152600d602052604090205460ff1615156118035760009350611a31565b60009350611a31565b6118658888611f45565b9250825115156118785760009350611a31565b600a54600160a060020a031663fdab1b7b60408501518560200151865160006040516040015260405160e060020a63ffffffff8616028152600160a060020a03938416600482015291909216602482015260448101919091526064016040805180830381600087803b15156118ec57600080fd5b6102c65a03f115156118fd57600080fd5b50505060405180519060200180516080860152506060840190815251158061192757508260800151155b156119355760009350611a31565b6119528360200151878560400151866060015187608001516121ad565b15156119615760009350611a31565b600160a060020a03881660008051602061237b833981519152146119855785611992565b6007546127109081038702045b91508115806119a657508183608001518302105b156119b45760009350611a31565b8260600151836080015183028115156119c957fe5b0490506009546008546009540382028115156119e157fe5b049050600160a060020a03871660008051602061237b83398151915214611a085780611a15565b6007546127109081038202045b9050611a2e8682611a258b61204c565b61146c8b61204c565b93505b505050949350505050565b60005433600160a060020a03908116911614611a5757600080fd5b600160a060020a03811660009081526002602052604090205460ff1615611a7d57600080fd5b60045460329010611a8d57600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610dc483826122f8565b60005433600160a060020a03908116911614611b2757600080fd5b600160a060020a0381166000908152600d602052604090205460ff161515611b4e57600080fd5b600160a060020a0381166000908152600d602052604090819020805460ff191690557f6621c4efc5efa31320394260425b7d14cbb9d7e3754b2c98c04af66b1cbf315b90829051600160a060020a03909116815260200160405180910390a150565b6000805433600160a060020a03908116911614611bcc57600080fd5b600160a060020a03821660009081526002602052604090205460ff161515611bf357600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156107b95781600160a060020a0316600482815481101515611c3857fe5b600091825260209091200154600160a060020a03161415611d1457600480546000198101908110611c6557fe5b60009182526020909120015460048054600160a060020a039092169183908110611c8b57fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600480546000190190611cc790826122f8565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a16107b9565b600101611c15565b600b54600160a060020a031681565b60005433600160a060020a03908116911614611d4657600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f193505050501515611d7757600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b6000600160a060020a03831660008051602061237b8339815191521415611df05750600160a060020a03811631611e64565b82600160a060020a03166370a082318360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611e4757600080fd5b6102c65a03f11515611e5857600080fd5b50505060405180519150505b92915050565b600e5460ff1681565b60085481565b600054600160a060020a031681565b600160a060020a03811660008051602061237b8339815191521415611ec857600160a060020a038116600090815260066020526040902060129055611f42565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611f0e57600080fd5b6102c65a03f11515611f1f57600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b611f4d61232e565b600160a060020a03831660008051602061237b83398151915214611f715782611f7e565b600c54600160a060020a03165b600160a060020a039081166020830152821660008051602061237b83398151915214611faa5781611fb7565b600c54600160a060020a03165b600160a060020a0390811660408301908152600a54909116906314584a9d9051836020015160006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561202a57600080fd5b6102c65a03f1151561203b57600080fd5b505050604051805182525092915050565b600080600160a060020a03831660008051602061237b83398151915214156120775760129150612104565b50600160a060020a0382166000908152600660205260409020548015156121005782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156120de57600080fd5b6102c65a03f115156120ef57600080fd5b505050604051805190509150612104565b8091505b50919050565b60006b204fce5e3e2502611000000085111561212557600080fd5b6b204fce5e3e2502611000000084111561213e57600080fd5b828210612179576012838303111561215557600080fd5b84838303600a0a02670de0b6b3a7640000850281151561217157fe5b0490506121a5565b6012828403111561218957600080fd5b84828403600a0a670de0b6b3a764000086020281151561217157fe5b949350505050565b600a54600090819081908190600160a060020a031663b8beafd6888b846040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561221657600080fd5b6102c65a03f1151561222757600080fd5b5050506040518051600a54909450600160a060020a0316905063b64c4905888b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561229557600080fd5b6102c65a03f115156122a657600080fd5b5050506040518051905091508186830210156122c557600093506122ec565b82858784028115156122d357fe5b040390508781126122e757600193506122ec565b600093505b50505095945050505050565b815481835581811511610ce057600083815260209020610ce091810190830161235c565b60206040519081016040526000815290565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b61064a91905b808211156123765760008155600101612362565b50905600000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea165627a7a72305820d82e0158f764732f605978178c0d7ea42d43a5d4d6db4e8e7eb6bea013b546fa0029

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

000000000000000000000000b9812e2fa995ec53b5b6df34d21f9304762c5497000000000000000000000000f069cb44739a913c16622edc31a066e38913d82500000000000000000000000065897adcba42dcca5dd162c647b1cc3e31238490000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : _dutchX (address): 0xb9812E2fA995EC53B5b6DF34d21f9304762C5497
Arg [1] : _admin (address): 0xF069cb44739A913c16622EDC31A066e38913d825
Arg [2] : _kyberNetwork (address): 0x65897aDCBa42dcCA5DD162c647b1cC3E31238490
Arg [3] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000b9812e2fa995ec53b5b6df34d21f9304762c5497
Arg [1] : 000000000000000000000000f069cb44739a913c16622edc31a066e38913d825
Arg [2] : 00000000000000000000000065897adcba42dcca5dd162c647b1cc3e31238490
Arg [3] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


Swarm Source

bzzr://d82e0158f764732f605978178c0d7ea42d43a5d4d6db4e8e7eb6bea013b546fa

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.