Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 32255 txns
 Latest 25 transactions from a total of 32255 transactions

TxHash Age From To Value [TxFee]
0x660800c26f36867d7bc45f4ad5e74fdbb5a51a31e4bf1a2133192c17b15bc5342 days 1 hr ago0xc4ae4aedcb717b6f04cac9492c70ed85412048ed  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50.1 Ether0.00056806
0xe42db40ba42d2dba7139f44148865356637e48d4c8b3531a831c471eed61a97b55 days 10 hrs ago0xa30fab1f1e26ec5fccfb7c6ec13a3dab069c064b  IN   0x964f35fae36d75b1e72770e244f6595b68508cf51.619704 Ether0.000461377098
0xc7dbe29c3bf7f8b71af667919fb6fdb9884c04850bf85f7b6d84373d3369cff655 days 10 hrs ago0xa30fab1f1e26ec5fccfb7c6ec13a3dab069c064b  IN   0x964f35fae36d75b1e72770e244f6595b68508cf51.622349 Ether0.00029043
0xa4c25f38fca5625ce7c01c9fb2c5d819fe5ef7a784616e36b7d6512d057e744a97 days 11 hrs ago0xa30fab1f1e26ec5fccfb7c6ec13a3dab069c064b  IN   0x964f35fae36d75b1e72770e244f6595b68508cf52.34 Ether0.00040947327
0x380fac220ac1301cd0825fc70003e72bdcb77799d654585c69eeb4736f806222109 days 17 hrs ago0x0e526f675754b31d688dc264b0fb50f96096f695  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.0000028147
0x8f8e32119d56da9cb4f5737b6e40bb1ce813a25ddec028f110d845da61d2752d158 days 11 hrs ago0x65b19870bcdda3ecc112772341ae1d2f0a692535  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50.208553 Ether0.000057062
0x51c7930f72763605001794fcfe29831e2979a8d3ccd4b2b21361071570e45a71158 days 18 hrs ago0x05b580942037e6262f47a17d412778d56467ddab  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000119455128
0x66923ed1bb3af055d1a428dabec27b591457efa448f870b55d8c2913049938b1165 days 23 hrs ago0x325469ed2ec77a15bfa4e2c54fda099553fda0a4  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000142194528
0x977b2d27732163d54eb8f882712789bfe44cecaa8415eaba8c7da97c0d05fabb174 days 1 hr ago0x0b80b9348eed2ae05ba965b1916350d96e003c7e  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000341604
0x0fe748b747522704827aca789097237fa0548f6be907fb4ddc2d0d30ccf409a3176 days 10 hrs ago0xa4760c99f888d0962acc214962f427f31460fed3  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000105193746
0x31b60b81b8b876a7fefdb9291248a9036850abba102b6601734873706ba925a8178 days 6 hrs ago0xa4760c99f888d0962acc214962f427f31460fed3  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000070806834
0xc1fbc16984c420c91f8bd225689195b20aa53696e7c795b8477710602b98046e178 days 7 hrs ago0xa4760c99f888d0962acc214962f427f31460fed3  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000029043
0x505655946b97ba377c876a4c65774728aca8e8376dbfb9184ae4bf1f67d76488182 days 13 hrs ago0xc81f5b3f15c112535c1cacb2972cbafabb002308  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50.1 Ether0.000028403
0x87ff7233dea1fb7e13edb8445826d5098e987af59a2e0a2b43a5a42bfb6b9c88187 days 15 hrs ago0x664c98d2246a809a8f70112d440e2bbcffb78e4b  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000030387
0xa1fbf5a17afe80f5a4536a0775522eb590421e9d0b97c144d2470d345f70c3b8187 days 15 hrs ago0x42893ba39ac64bdbfbf91f38178ec53196552283  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50.000595 Ether0.000031539
0xad5689058b33185a7a901bd5732a0cd3867e7c2be78ffff5d6e711c2bd5a7cff187 days 16 hrs ago0x1602c2b2cd5181906f6367a260387865482666e9  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000028275
0xcd2fe3ede5e93fcbd2935a53b73aa60d4441882dca698caf86b35d72cd4370c3187 days 18 hrs ago0x1c8210400f001b7570558d5274dc50f5db70ada0  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000031283
0xbb3a552ab17b7fd9cb19ffc08ed927a31868a2ada889b9f1a9b1742a39ca21b6187 days 20 hrs ago0xb1e24695df03598b6846f61c9e009a071c29adb9  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000031219
0x2bd497cf9e2b273432b42a181cefc1740737a5200acaf5c9a2ae8c02a0fa5968188 days 4 hrs ago0x914e6a8c98de63b02932ac05cb8895057f685d1a  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50.24 Ether0.000086937
0xe9e22221b26ddf38d00c42f2673e72560ff13d1b07e601314e3b8db8cd58e811189 days 1 hr ago0x67fb8cf736057fe611a2637b70321a52190d1d22  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50.001 Ether0.000028467
0xac59fb6a7374a14d79f74360dab0847f0dd2d4b5dad092eed5d9fb16956bfcf1189 days 3 hrs ago0xa4760c99f888d0962acc214962f427f31460fed3  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000058086
0xcac8ed66e2f1508a168b7b5339c2c1428c90acb4a8cc5b5348a31105f6977bfe190 days 17 hrs ago0xcb11a9b267b7ad7c7f0422b34d476b7ab10690db  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000060646
0xf6ded62a469ab6b8d2b4eba49f06f8e6fee3af5c7fe3a011e4c183fbc6223c5d190 days 17 hrs ago0x52b122429a42fb9980ec28504cc49de4f3f4f23e  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000060518
0x950c7464397e2e7144c9932e885bea4a01a8d671016ccd9171a5ed6b1cb398c5196 days 3 hrs ago0xcea5ff08fbab07acbb5d38eb85a2456983162281  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50.303299401879617 Ether0.000627682
0x3af98cc86ff03db243eb2428c6afad75d32bf6552f68a36fae618077fefb2d97196 days 3 hrs ago0xcea5ff08fbab07acbb5d38eb85a2456983162281  IN   0x964f35fae36d75b1e72770e244f6595b68508cf50.305939401879617 Ether0.00040033
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x4774cb8550558c1a4284f450a422c4f01981d8125a78fc3eb42d81acc6dc590f666952575 days 16 hrs ago0xbf12f5661364a5dba98ccfd651a3712b87fae3a00x964f35fae36d75b1e72770e244f6595b68508cf50.002 Ether
0x8ae7145c44992a8e3e6e2e311736195e430bac5db5afa4338434c10cd3ea8c9b6459893109 days 21 hrs ago0xbf12f5661364a5dba98ccfd651a3712b87fae3a00x964f35fae36d75b1e72770e244f6595b68508cf50.1 Ether
0x11e4e57e991811b6aedfad6207ffa9597b1bb202681a6db00b40f48c7beba0d06456052110 days 12 hrs ago0xbf12f5661364a5dba98ccfd651a3712b87fae3a00x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x241f2a232670d28ee576773ebabb73384b47ebaba0e80332c0782fc5b3d06f466456046110 days 12 hrs ago0xbf12f5661364a5dba98ccfd651a3712b87fae3a00x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x015bbfca794b7b2bdf72b040caa07d4ad8245c418b6f5a9231e436dbae3cbcc06455981110 days 12 hrs ago0xbf12f5661364a5dba98ccfd651a3712b87fae3a00x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x0a03bb01d624deda1c0bdbced3ea82ed77e2720ae804269869da479fee1343a26389011121 days 12 hrs ago0xbf12f5661364a5dba98ccfd651a3712b87fae3a00x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x32de7dcb22b79b98912989280f496dafd5aa851bb9b824612c826a12b22afc2e6388971121 days 12 hrs ago0xbf12f5661364a5dba98ccfd651a3712b87fae3a00x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x66296bf174a9c3a72ff33513c993068a5b4fbf7b77a628698dee8b739765a31d6384669122 days 5 hrs ago0xbf12f5661364a5dba98ccfd651a3712b87fae3a00x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x5956cb599fb4bc2fe7622411869f1cf64ef97968207599d4f743479c98488d496012551184 days 18 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.087083164304275477 Ether
0xb140ef104a833f261b1420d419316aca8a232b25ad3b1400ee4ff1e0930c94bb5953513194 days 18 hrs ago0x70f51d971588005aeceb370768dac19bc28b61d60x964f35fae36d75b1e72770e244f6595b68508cf50.411294178743166106 Ether
0x3363717d1c58c8733917a9e8df307432ea54083289ff109147674dee851956015941860196 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.087083164304275477 Ether
0x50187bc0e5b887c70cf6309c57050409a4c762e6fc16f5c502e268410856cef25941860196 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.087083164304275477 Ether
0x50ff3b6d4a4cbeb0f056344efcc5f6d34021eca8c71cfaca56f9f4824ca198455941860196 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.087083164304275477 Ether
0x4236ddd6e76ae6af6631977eebdbb04ba30cf6c84abfad2dce621c2f421653515941860196 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.087083164304275477 Ether
0xfbaed744ee0d467da18d8c4981e3c2fd5e82a5a2d90e24d3618fbd3e1caa849c5941831196 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.087083164304275477 Ether
0x92ce371021efe16150cea0b5c78e9f03038328b0fbeb48cef0cf0092ebcbe6215941828196 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf51 wei
0x4e4044dacdfd9952f707c3df6ee7543b27bff2939b323bb0ced200aa302467ef5930159198 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.084773164304275477 Ether
0xf2a303b10e3b39cfad213036aa02018fc88fe4edde04868f5c983f5e6edfb0605930150198 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.084773164304275477 Ether
0x5cd99d80c27b9dd13218ef600beb8494dcf1eeba8c9bfee304792dd90b1d4f5f5930148198 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.084773164304275477 Ether
0x7ad8d3ea3fa81807267b00a535a07ae56da29554fd40aee7bab05bd54f381a195930080198 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.084773164304275477 Ether
0xc0505d2869b6ecf319f02ae9e0194350371b3477a8912362d1ef2657312139375930057198 days 17 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.084773164304275477 Ether
0x3550e3ab0f2803190b130516161454a0d95532f78f30d24bcc925ac48765dced5929258198 days 21 hrs ago0xfcb4393e7faef06fab01c00d67c1895545aff3b80x964f35fae36d75b1e72770e244f6595b68508cf50.084773164304275477 Ether
0x5b73ffdff93557a9d3645ca1b73386be10ec052abc9b3aa4d601973d5f9885e65925999199 days 10 hrs ago0x964f35fae36d75b1e72770e244f6595b68508cf50x2a92c04df493e21ab7cc4f31e01809d7315e43a51.038729687102115529 Ether
0x5b73ffdff93557a9d3645ca1b73386be10ec052abc9b3aa4d601973d5f9885e65925999199 days 10 hrs ago0x63825c174ab367968ec60f061753d3bbd36a0d8f0x964f35fae36d75b1e72770e244f6595b68508cf51.038729687102115529 Ether
0x072eba4b2addf0aeef50c71df476be6bc915c15ef6c2b3766bc148ee2c8c31265925811199 days 11 hrs ago0x964f35fae36d75b1e72770e244f6595b68508cf50x2aab2b157a03915c8a73adae735d0cf51c872f310.411533347753801118 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Similar Match)
Note: Displaying Similar Match Verified Source Code At Contract 0xCc92a4462761134C00b3e16A9bd6cE8bFAD387B0(Excluding Constructor Arguments if any)
Contract Name: KyberNetwork
Compiler Text: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.18;

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
    }
}

interface FeeBurnerInterface {
    function handleFees (uint tradeWeiAmount, address reserve, address wallet) public returns(bool);
}

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);
}

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);
}

interface ExpectedRateInterface {
    function getExpectedRate(ERC20 src, ERC20 dest, uint srcQty) public view
        returns (uint expectedRate, uint slippageRate);
}

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;
            }
        }
    }
}

contract WhiteListInterface {
    function getUserCapInWei(address user) external view returns (uint userCapWei);
}

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);
    }
}

contract KyberNetwork is Withdrawable, Utils {

    uint public negligibleRateDiff = 10; // basic rate steps will be in 0.01%
    KyberReserveInterface[] public reserves;
    mapping(address=>bool) public isReserve;
    WhiteListInterface public whiteListContract;
    ExpectedRateInterface public expectedRateContract;
    FeeBurnerInterface    public feeBurnerContract;
    uint                  public maxGasPrice = 50 * 1000 * 1000 * 1000; // 50 gwei
    bool                  public enabled = false; // network is enabled
    mapping(bytes32=>uint) public info; // this is only a UI field for external app.
    mapping(address=>mapping(bytes32=>bool)) public perReserveListedPairs;

    function KyberNetwork(address _admin) public {
        require(_admin != address(0));
        admin = _admin;
    }

    event EtherReceival(address indexed sender, uint amount);

    /* solhint-disable no-complex-fallback */
    function() public payable {
        require(isReserve[msg.sender]);
        EtherReceival(msg.sender, msg.value);
    }
    /* solhint-enable no-complex-fallback */

    event ExecuteTrade(address indexed sender, ERC20 src, ERC20 dest, uint actualSrcAmount, uint actualDestAmount);

    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev makes a trade between src and dest token and send dest token to destAddress
    /// @param src Src token
    /// @param srcAmount amount of src tokens
    /// @param dest   Destination token
    /// @param destAddress Address to send tokens to
    /// @param maxDestAmount A limit on the amount of dest tokens
    /// @param minConversionRate The minimal conversion rate. If actual rate is lower, trade is canceled.
    /// @param walletId is the wallet ID to send part of the fees
    /// @return amount of actual dest tokens
    function trade(
        ERC20 src,
        uint srcAmount,
        ERC20 dest,
        address destAddress,
        uint maxDestAmount,
        uint minConversionRate,
        address walletId
    )
        public
        payable
        returns(uint)
    {
        require(enabled);

        uint userSrcBalanceBefore;
        uint userSrcBalanceAfter;
        uint userDestBalanceBefore;
        uint userDestBalanceAfter;

        userSrcBalanceBefore = getBalance(src, msg.sender);
        if (src == ETH_TOKEN_ADDRESS)
            userSrcBalanceBefore += msg.value;
        userDestBalanceBefore = getBalance(dest, destAddress);

        uint actualDestAmount = doTrade(src,
                                        srcAmount,
                                        dest,
                                        destAddress,
                                        maxDestAmount,
                                        minConversionRate,
                                        walletId
                                        );
        require(actualDestAmount > 0);

        userSrcBalanceAfter = getBalance(src, msg.sender);
        userDestBalanceAfter = getBalance(dest, destAddress);

        require(userSrcBalanceAfter <= userSrcBalanceBefore);
        require(userDestBalanceAfter >= userDestBalanceBefore);

        require((userDestBalanceAfter - userDestBalanceBefore) >=
            calcDstQty((userSrcBalanceBefore - userSrcBalanceAfter), getDecimals(src), getDecimals(dest),
                minConversionRate));

        return actualDestAmount;
    }

    event AddReserveToNetwork(KyberReserveInterface reserve, bool add);

    /// @notice can be called only by admin
    /// @dev add or deletes a reserve to/from the network.
    /// @param reserve The reserve address.
    /// @param add If true, the add reserve. Otherwise delete reserve.
    function addReserve(KyberReserveInterface reserve, bool add) public onlyAdmin {

        if (add) {
            require(!isReserve[reserve]);
            reserves.push(reserve);
            isReserve[reserve] = true;
            AddReserveToNetwork(reserve, true);
        } else {
            isReserve[reserve] = false;
            // will have trouble if more than 50k reserves...
            for (uint i = 0; i < reserves.length; i++) {
                if (reserves[i] == reserve) {
                    reserves[i] = reserves[reserves.length - 1];
                    reserves.length--;
                    AddReserveToNetwork(reserve, false);
                    break;
                }
            }
        }
    }

    event ListReservePairs(address reserve, ERC20 src, ERC20 dest, bool add);

    /// @notice can be called only by admin
    /// @dev allow or prevent a specific reserve to trade a pair of tokens
    /// @param reserve The reserve address.
    /// @param src Src token
    /// @param dest Destination token
    /// @param add If true then enable trade, otherwise delist pair.
    function listPairForReserve(address reserve, ERC20 src, ERC20 dest, bool add) public onlyAdmin {
        (perReserveListedPairs[reserve])[keccak256(src, dest)] = add;

        if (src != ETH_TOKEN_ADDRESS) {
            if (add) {
                src.approve(reserve, 2**255); // approve infinity
            } else {
                src.approve(reserve, 0);
            }
        }

        setDecimals(src);
        setDecimals(dest);

        ListReservePairs(reserve, src, dest, add);
    }

    function setParams(
        WhiteListInterface    _whiteList,
        ExpectedRateInterface _expectedRate,
        FeeBurnerInterface    _feeBurner,
        uint                  _maxGasPrice,
        uint                  _negligibleRateDiff
    )
        public
        onlyAdmin
    {
        require(_whiteList != address(0));
        require(_feeBurner != address(0));
        require(_expectedRate != address(0));
        require(_negligibleRateDiff <= 100 * 100); // at most 100%

        whiteListContract = _whiteList;
        expectedRateContract = _expectedRate;
        feeBurnerContract = _feeBurner;
        maxGasPrice = _maxGasPrice;
        negligibleRateDiff = _negligibleRateDiff;
    }

    function setEnable(bool _enable) public onlyAdmin {
        if (_enable) {
            require(whiteListContract != address(0));
            require(feeBurnerContract != address(0));
            require(expectedRateContract != address(0));
        }
        enabled = _enable;
    }

    function setInfo(bytes32 field, uint value) public onlyOperator {
        info[field] = value;
    }

    /// @dev returns number of reserves
    /// @return number of reserves
    function getNumReserves() public view returns(uint) {
        return reserves.length;
    }

    /// @notice should be called off chain with as much gas as needed
    /// @dev get an array of all reserves
    /// @return An array of all reserves
    function getReserves() public view returns(KyberReserveInterface[]) {
        return reserves;
    }

    /// @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);
    }

    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev best conversion rate for a pair of tokens, if number of reserves have small differences. randomize
    /// @param src Src token
    /// @param dest Destination token
    /* solhint-disable code-complexity */
    function findBestRate(ERC20 src, ERC20 dest, uint srcQty) public view returns(uint, uint) {
        uint bestRate = 0;
        uint bestReserve = 0;
        uint numRelevantReserves = 0;
        uint numReserves = reserves.length;
        uint[] memory rates = new uint[](numReserves);
        uint[] memory reserveCandidates = new uint[](numReserves);

        for (uint i = 0; i < numReserves; i++) {
            //list all reserves that have this token.
            if (!(perReserveListedPairs[reserves[i]])[keccak256(src, dest)]) continue;

            rates[i] = reserves[i].getConversionRate(src, dest, srcQty, block.number);

            if (rates[i] > bestRate) {
                //best rate is highest rate
                bestRate = rates[i];
            }
        }

        if (bestRate > 0) {
            uint random = 0;
            uint smallestRelevantRate = (bestRate * 10000) / (10000 + negligibleRateDiff);

            for (i = 0; i < numReserves; i++) {
                if (rates[i] >= smallestRelevantRate) {
                    reserveCandidates[numRelevantReserves++] = i;
                }
            }

            if (numRelevantReserves > 1) {
                //when encountering small rate diff from bestRate. draw from relevant reserves
                random = uint(block.blockhash(block.number-1)) % numRelevantReserves;
            }

            bestReserve = reserveCandidates[random];
            bestRate = rates[bestReserve];
        }

        return (bestReserve, bestRate);
    }
    /* solhint-enable code-complexity */

    function getExpectedRate(ERC20 src, ERC20 dest, uint srcQty)
        public view
        returns (uint expectedRate, uint slippageRate)
    {
        require(expectedRateContract != address(0));
        return expectedRateContract.getExpectedRate(src, dest, srcQty);
    }

    function getUserCapInWei(address user) public view returns(uint) {
        return whiteListContract.getUserCapInWei(user);
    }

    function doTrade(
        ERC20 src,
        uint srcAmount,
        ERC20 dest,
        address destAddress,
        uint maxDestAmount,
        uint minConversionRate,
        address walletId
    )
        internal
        returns(uint)
    {
        require(tx.gasprice <= maxGasPrice);
        require(validateTradeInput(src, srcAmount, destAddress));

        uint reserveInd;
        uint rate;

        (reserveInd, rate) = findBestRate(src, dest, srcAmount);
        KyberReserveInterface theReserve = reserves[reserveInd];
        require(rate > 0);
        require(rate < MAX_RATE);
        require(rate >= minConversionRate);

        uint actualSrcAmount = srcAmount;
        uint actualDestAmount = calcDestAmount(src, dest, actualSrcAmount, rate);
        if (actualDestAmount > maxDestAmount) {
            actualDestAmount = maxDestAmount;
            actualSrcAmount = calcSrcAmount(src, dest, actualDestAmount, rate);
            require(actualSrcAmount <= srcAmount);
        }

        // do the trade
        // verify trade size is smaller than user cap
        uint ethAmount;
        if (src == ETH_TOKEN_ADDRESS) {
            ethAmount = actualSrcAmount;
        } else {
            ethAmount = actualDestAmount;
        }

        require(ethAmount <= getUserCapInWei(msg.sender));
        require(doReserveTrade(
                src,
                actualSrcAmount,
                dest,
                destAddress,
                actualDestAmount,
                theReserve,
                rate,
                true));

        if ((actualSrcAmount < srcAmount) && (src == ETH_TOKEN_ADDRESS)) {
            msg.sender.transfer(srcAmount - actualSrcAmount);
        }

        require(feeBurnerContract.handleFees(ethAmount, theReserve, walletId));

        ExecuteTrade(msg.sender, src, dest, actualSrcAmount, actualDestAmount);
        return actualDestAmount;
    }

    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev do one trade with a reserve
    /// @param src Src token
    /// @param amount amount of src tokens
    /// @param dest   Destination token
    /// @param destAddress Address to send tokens to
    /// @param reserve Reserve to use
    /// @param validate If true, additional validations are applicable
    /// @return true if trade is successful
    function doReserveTrade(
        ERC20 src,
        uint amount,
        ERC20 dest,
        address destAddress,
        uint expectedDestAmount,
        KyberReserveInterface reserve,
        uint conversionRate,
        bool validate
    )
        internal
        returns(bool)
    {
        uint callValue = 0;

        if (src == ETH_TOKEN_ADDRESS) {
            callValue = amount;
        } else {
            // take src tokens to this contract
            src.transferFrom(msg.sender, this, amount);
        }

        // reserve sends tokens/eth to network. network sends it to destination
        require(reserve.trade.value(callValue)(src, amount, dest, this, conversionRate, validate));

        if (dest == ETH_TOKEN_ADDRESS) {
            destAddress.transfer(expectedDestAmount);
        } else {
            require(dest.transfer(destAddress, expectedDestAmount));
        }

        return true;
    }

    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);
    }

    /// @notice use token address ETH_TOKEN_ADDRESS for ether
    /// @dev checks that user sent ether/tokens to contract before trade
    /// @param src Src token
    /// @param srcAmount amount of src tokens
    /// @return true if input is valid
    function validateTradeInput(ERC20 src, uint srcAmount, address destAddress) internal view returns(bool) {
        if ((srcAmount >= MAX_QTY) || (srcAmount == 0) || (destAddress == 0))
            return false;

        if (src == ETH_TOKEN_ADDRESS) {
            if (msg.value != srcAmount)
                return false;
        } else {
            if ((msg.value != 0) || (src.allowance(msg.sender, this) < srcAmount))
                return false;
        }

        return true;
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reserve","type":"address"},{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"add","type":"bool"}],"name":"listPairForReserve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes32"}],"name":"perReserveListedPairs","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"enabled","outputs":[{"name":"","type":"bool"}],"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":true,"inputs":[],"name":"maxGasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"negligibleRateDiff","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeBurnerContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"expectedRateContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whiteListContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"field","type":"bytes32"},{"name":"value","type":"uint256"}],"name":"setInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"getUserCapInWei","outputs":[{"name":"","type":"uint256"}],"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":"_enable","type":"bool"}],"name":"setEnable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isReserve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":"getExpectedRate","outputs":[{"name":"expectedRate","type":"uint256"},{"name":"slippageRate","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"reserves","outputs":[{"name":"","type":"address"}],"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":"reserve","type":"address"},{"name":"add","type":"bool"}],"name":"addReserve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_whiteList","type":"address"},{"name":"_expectedRate","type":"address"},{"name":"_feeBurner","type":"address"},{"name":"_maxGasPrice","type":"uint256"},{"name":"_negligibleRateDiff","type":"uint256"}],"name":"setParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"info","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"}],"name":"findBestRate","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"dest","type":"address"},{"name":"destAddress","type":"address"},{"name":"maxDestAmount","type":"uint256"},{"name":"minConversionRate","type":"uint256"},{"name":"walletId","type":"address"}],"name":"trade","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","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":"getNumReserves","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_admin","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":"amount","type":"uint256"}],"name":"EtherReceival","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"dest","type":"address"},{"indexed":false,"name":"actualSrcAmount","type":"uint256"},{"indexed":false,"name":"actualDestAmount","type":"uint256"}],"name":"ExecuteTrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"reserve","type":"address"},{"indexed":false,"name":"add","type":"bool"}],"name":"AddReserveToNetwork","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"reserve","type":"address"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"dest","type":"address"},{"indexed":false,"name":"add","type":"bool"}],"name":"ListReservePairs","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"}]

  Contract Creation Code Switch To Opcodes View
6060604052600a600755640ba43b7400600d55600e805460ff19169055341561002757600080fd5b60405160208061269d8339810160405280805160008054600160a060020a03191633600160a060020a039081169190911790915590925082161515905061006d57600080fd5b60008054600160a060020a03909216600160a060020a03199092169190911790556126008061009d6000396000f30060606040526004361061019d5763ffffffff60e060020a60003504166301a12fd3811461020357806303141fcd1461022457806306ac5879146102545780630902f1ac1461028a578063238dafe0146102f0578063267822471461030357806327a099d8146103325780633ccdbb28146103455780633de39c111461036e578063408ee7fe146103935780634cef5a5c146103b2578063579425b7146103c55780635dada964146103d85780635ed5ea28146103eb5780635f65d703146103fe5780636432679f1461041757806375829def146104365780637726bed31461045557806377f50f971461046d5780637a2b0587146104805780637acc86781461049f5780637c423f54146104be578063809a9e55146104d15780638334278d146105115780639870d7fe14610527578063a0d7bb1b14610546578063ac8a584a1461056a578063b5caadf214610589578063b64a097e146105ba578063b8388aca146105d0578063cb3c28c7146105f8578063ce56c4541461062a578063cfff25bb1461064c578063d4fac45d1461065f578063f851a44014610684575b600160a060020a03331660009081526009602052604090205460ff1615156101c457600080fd5b33600160a060020a03167f75f33ed68675112c77094e7c5b073890598be1d23e27cd7f6907b4a7d98ac6193460405190815260200160405180910390a2005b341561020e57600080fd5b610222600160a060020a0360043516610697565b005b341561022f57600080fd5b610222600160a060020a03600435811690602435811690604435166064351515610807565b341561025f57600080fd5b610276600160a060020a0360043516602435610a49565b604051901515815260200160405180910390f35b341561029557600080fd5b61029d610a69565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102dc5780820151838201526020016102c4565b505050509050019250505060405180910390f35b34156102fb57600080fd5b610276610ad2565b341561030e57600080fd5b610316610adb565b604051600160a060020a03909116815260200160405180910390f35b341561033d57600080fd5b61029d610aea565b341561035057600080fd5b610222600160a060020a036004358116906024359060443516610b50565b341561037957600080fd5b610381610c47565b60405190815260200160405180910390f35b341561039e57600080fd5b610222600160a060020a0360043516610c4d565b34156103bd57600080fd5b610381610d49565b34156103d057600080fd5b610316610d4f565b34156103e357600080fd5b610316610d5e565b34156103f657600080fd5b610316610d6d565b341561040957600080fd5b610222600435602435610d7c565b341561042257600080fd5b610381600160a060020a0360043516610db5565b341561044157600080fd5b610222600160a060020a0360043516610e30565b341561046057600080fd5b6102226004351515610ecb565b341561047857600080fd5b610222610f44565b341561048b57600080fd5b610276600160a060020a0360043516610fde565b34156104aa57600080fd5b610222600160a060020a0360043516610ff3565b34156104c957600080fd5b61029d6110d5565b34156104dc57600080fd5b6104f9600160a060020a036004358116906024351660443561113b565b60405191825260208201526040908101905180910390f35b341561051c57600080fd5b6103166004356111ef565b341561053257600080fd5b610222600160a060020a0360043516611217565b341561055157600080fd5b610222600160a060020a036004351660243515156112e7565b341561057557600080fd5b610222600160a060020a03600435166114ff565b341561059457600080fd5b610222600160a060020a036004358116906024358116906044351660643560843561166b565b34156105c557600080fd5b61038160043561171d565b34156105db57600080fd5b6104f9600160a060020a036004358116906024351660443561172f565b610381600160a060020a03600435811690602435906044358116906064358116906084359060a4359060c43516611a3b565b341561063557600080fd5b610222600435600160a060020a0360243516611b28565b341561065757600080fd5b610381611bbb565b341561066a57600080fd5b610381600160a060020a0360043581169060243516611bc1565b341561068f57600080fd5b610316611c73565b6000805433600160a060020a039081169116146106b357600080fd5b600160a060020a03821660009081526003602052604090205460ff1615156106da57600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156108035781600160a060020a031660058281548110151561071f57fe5b600091825260209091200154600160a060020a031614156107fb5760058054600019810190811061074c57fe5b60009182526020909120015460058054600160a060020a03909216918390811061077257fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560058054906107ae906000198301612580565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a1610803565b6001016106fc565b5050565b60005433600160a060020a0390811691161461082257600080fd5b600160a060020a0384166000908152601060205260408082208392909186908690516c01000000000000000000000000600160a060020a03938416810282529190921602601482015260280160405190819003902081526020810191909152604001600020805460ff191691151591909117905573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600160a060020a038416146109d757801561095e5782600160a060020a031663095ea7b3857f800000000000000000000000000000000000000000000000000000000000000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561093d57600080fd5b6102c65a03f1151561094e57600080fd5b50505060405180519050506109d7565b82600160a060020a031663095ea7b3856000806040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156109bb57600080fd5b6102c65a03f115156109cc57600080fd5b505050604051805150505b6109e083611c82565b6109e982611c82565b7fadb5a4f14d89b3a5ffb3900ac1ea4574d991f93887f6199fabaf25393644e01c84848484604051600160a060020a039485168152928416602084015292166040808301919091529115156060820152608001905180910390a150505050565b601060209081526000928352604080842090915290825290205460ff1681565b610a716125a4565b6008805480602002602001604051908101604052809291908181526020018280548015610ac757602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610aa9575b505050505090505b90565b600e5460ff1681565b600154600160a060020a031681565b610af26125a4565b6004805480602002602001604051908101604052809291908181526020018280548015610ac757602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610aa9575050505050905090565b60005433600160a060020a03908116911614610b6b57600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610bc857600080fd5b6102c65a03f11515610bd957600080fd5b505050604051805190501515610bee57600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b600d5481565b60005433600160a060020a03908116911614610c6857600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610c8e57600080fd5b60055460329010610c9e57600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610d1d8382612580565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b60075481565b600c54600160a060020a031681565b600b54600160a060020a031681565b600a54600160a060020a031681565b600160a060020a03331660009081526002602052604090205460ff161515610da357600080fd5b6000918252600f602052604090912055565b600a54600090600160a060020a0316636432679f83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610e1057600080fd5b6102c65a03f11515610e2157600080fd5b50505060405180519392505050565b60005433600160a060020a03908116911614610e4b57600080fd5b600160a060020a0381161515610e6057600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610ee657600080fd5b8015610f3157600a54600160a060020a03161515610f0357600080fd5b600c54600160a060020a03161515610f1a57600080fd5b600b54600160a060020a03161515610f3157600080fd5b600e805460ff1916911515919091179055565b60015433600160a060020a03908116911614610f5f57600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60096020526000908152604090205460ff1681565b60005433600160a060020a0390811691161461100e57600080fd5b600160a060020a038116151561102357600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b6110dd6125a4565b6005805480602002602001604051908101604052809291908181526020018280548015610ac757602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610aa9575050505050905090565b600b546000908190600160a060020a0316151561115757600080fd5b600b54600160a060020a031663809a9e5586868660006040516040015260405160e060020a63ffffffff8616028152600160a060020a03938416600482015291909216602482015260448101919091526064016040805180830381600087803b15156111c257600080fd5b6102c65a03f115156111d357600080fd5b5050506040518051906020018051905091509150935093915050565b60088054829081106111fd57fe5b600091825260209091200154600160a060020a0316905081565b60005433600160a060020a0390811691161461123257600080fd5b600160a060020a03811660009081526002602052604090205460ff161561125857600080fd5b6004546032901061126857600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610d1d8382612580565b6000805433600160a060020a0390811691161461130357600080fd5b81156113d157600160a060020a03831660009081526009602052604090205460ff161561132f57600080fd5b60088054600181016113418382612580565b5060009182526020808320919091018054600160a060020a031916600160a060020a038716908117909155825260099052604090819020805460ff191660019081179091557f7752182b29e356eb432239f464340b4481e1b0bfad97f06aa2ff8cdc746114499185919051600160a060020a039092168252151560208201526040908101905180910390a16114fa565b50600160a060020a0382166000908152600960205260408120805460ff191690555b6008548110156114fa5782600160a060020a031660088281548110151561141657fe5b600091825260209091200154600160a060020a031614156114f25760088054600019810190811061144357fe5b60009182526020909120015460088054600160a060020a03909216918390811061146957fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560088054906114a5906000198301612580565b507f7752182b29e356eb432239f464340b4481e1b0bfad97f06aa2ff8cdc74611449836000604051600160a060020a039092168252151560208201526040908101905180910390a16114fa565b6001016113f3565b505050565b6000805433600160a060020a0390811691161461151b57600080fd5b600160a060020a03821660009081526002602052604090205460ff16151561154257600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156108035781600160a060020a031660048281548110151561158757fe5b600091825260209091200154600160a060020a03161415611663576004805460001981019081106115b457fe5b60009182526020909120015460048054600160a060020a0390921691839081106115da57fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556004805460001901906116169082612580565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a1610803565b600101611564565b60005433600160a060020a0390811691161461168657600080fd5b600160a060020a038516151561169b57600080fd5b600160a060020a03831615156116b057600080fd5b600160a060020a03841615156116c557600080fd5b6127108111156116d457600080fd5b600a8054600160a060020a0319908116600160a060020a0397881617909155600b8054821695871695909517909455600c80549094169290941691909117909155600d55600755565b600f6020526000908152604090205481565b6000806000806000806117406125a4565b6117486125a4565b600854600096508695508594509250838080856040518059106117685750595b90808252806020026020018201604052509450856040518059106117895750595b90808252806020026020018201604052509350600092505b8583101561196257601060006008858154811015156117bc57fe5b906000526020600020900160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a0316815260200190815260200160002060008f8f6040516c01000000000000000000000000600160a060020a039384168102825291909216026014820152602801604051908190039020815260208101919091526040016000205460ff16151561185457611957565b600880548490811061186257fe5b906000526020600020900160009054906101000a9004600160a060020a0316600160a060020a0316637cd442728f8f8f4360006040516020015260405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201526064810191909152608401602060405180830381600087803b15156118f057600080fd5b6102c65a03f1151561190157600080fd5b5050506040518051905085848151811061191757fe5b602090810290910101528885848151811061192e57fe5b9060200190602002015111156119575784838151811061194a57fe5b9060200190602002015198505b6001909201916117a1565b6000891115611a27576000915060075461271001896127100281151561198457fe5b049050600092505b858310156119d957808584815181106119a157fe5b90602001906020020151106119ce57828488806001019950815181106119c357fe5b602090810290910101525b60019092019161198c565b60018711156119f657866000194301408115156119f257fe5b0691505b838281518110611a0257fe5b906020019060200201519750848881518110611a1a57fe5b9060200190602002015198505b50959c969b50959950505050505050505050565b600e546000908190819081908190819060ff161515611a5957600080fd5b611a638d33611bc1565b9450600160a060020a038d1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611a905734850194505b611a9a8b8b611bc1565b9250611aab8d8d8d8d8d8d8d611d45565b905060008111611aba57600080fd5b611ac48d33611bc1565b9350611ad08b8b611bc1565b915084841115611adf57600080fd5b82821015611aec57600080fd5b611b0a848603611afb8f611fd9565b611b048e611fd9565b8b61209d565b8383031015611b1857600080fd5b9c9b505050505050505050505050565b60005433600160a060020a03908116911614611b4357600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f193505050501515611b7457600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b60085490565b6000600160a060020a03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611bf95750600160a060020a03811631611c6d565b82600160a060020a03166370a082318360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611c5057600080fd5b6102c65a03f11515611c6157600080fd5b50505060405180519150505b92915050565b600054600160a060020a031681565b600160a060020a03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611cc857600160a060020a038116600090815260066020526040902060129055611d42565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611d0e57600080fd5b6102c65a03f11515611d1f57600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b6000806000806000806000600d543a11151515611d6157600080fd5b611d6c8e8e8d612136565b1515611d7757600080fd5b611d828e8d8f61172f565b600880549298509096509087908110611d9757fe5b6000918252602082200154600160a060020a031694508511611db857600080fd5b69d3c21bcecceda10000008510611dce57600080fd5b88851015611ddb57600080fd5b8c9250611dea8e8d8588612247565b915089821115611e1257899150611e038e8d848861226e565b92508c831115611e1257600080fd5b600160a060020a038e1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611e3e575081611e41565b50805b611e4a33610db5565b811115611e5657600080fd5b611e678e848e8e86898b600161228c565b1515611e7257600080fd5b8c83108015611e9d5750600160a060020a038e1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b15611ed657600160a060020a033316838e0380156108fc0290604051600060405180830381858888f193505050501515611ed657600080fd5b600c54600160a060020a031663fd062d3b82868b60006040516020015260405160e060020a63ffffffff86160281526004810193909352600160a060020a039182166024840152166044820152606401602060405180830381600087803b1515611f3f57600080fd5b6102c65a03f11515611f5057600080fd5b505050604051805190501515611f6557600080fd5b33600160a060020a03167f1849bd6a030a1bca28b83437fd3de96f3d27a5d172fa7e9c78e7b61468928a398f8e8686604051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a2509c9b505050505050505050505050565b600080600160a060020a03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561200a5760129150612097565b50600160a060020a0382166000908152600660205260409020548015156120935782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561207157600080fd5b6102c65a03f1151561208257600080fd5b505050604051805190509150612097565b8091505b50919050565b60006b204fce5e3e250261100000008511156120b857600080fd5b69d3c21bcecceda10000008211156120cf57600080fd5b83831061210257601284840311156120e657600080fd5b670de0b6b3a7640000858302858503600a0a025b04905061212e565b6012838503111561211257600080fd5b828403600a0a670de0b6b3a7640000028286028115156120fa57fe5b949350505050565b60006b204fce5e3e2502611000000083101580612151575082155b806121635750600160a060020a038216155b1561217057506000612240565b600160a060020a03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156121a9573483146121a457506000612240565b61223c565b3415158061222f57508284600160a060020a031663dd62ed3e333060006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561221257600080fd5b6102c65a03f1151561222357600080fd5b50505060405180519050105b1561223c57506000612240565b5060015b9392505050565b60006122658361225687611fd9565b61225f87611fd9565b8561209d565b95945050505050565b60006122658361227d87611fd9565b61228687611fd9565b856124d9565b600080600160a060020a038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156122bb575087612341565b89600160a060020a03166323b872dd33308c60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561232557600080fd5b6102c65a03f1151561233657600080fd5b505050604051805150505b84600160a060020a0316636cf69811828c8c8c308a8a60006040516020015260405160e060020a63ffffffff8a16028152600160a060020a0396871660048201526024810195909552928516604485015293166064830152608482019290925290151560a482015260c4016020604051808303818588803b15156123c457600080fd5b6125ee5a03f115156123d557600080fd5b505050506040518051905015156123eb57600080fd5b600160a060020a03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561244657600160a060020a03871686156108fc0287604051600060405180830381858888f19350505050151561244157600080fd5b6124c9565b87600160a060020a031663a9059cbb888860006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156124a357600080fd5b6102c65a03f115156124b457600080fd5b5050506040518051905015156124c957600080fd5b5060019998505050505050505050565b600080806b204fce5e3e250261100000008711156124f657600080fd5b69d3c21bcecceda100000084111561250d57600080fd5b84861061253e576012858703111561252457600080fd5b5050828403600a0a8502670de0b6b3a76400000282612564565b6012868603111561254e57600080fd5b5050670de0b6b3a76400008502848403600a0a83025b8060018284010381151561257457fe5b04979650505050505050565b8154818355818115116114fa576000838152602090206114fa9181019083016125b6565b60206040519081016040526000815290565b610acf91905b808211156125d057600081556001016125bc565b50905600a165627a7a7230582034e39f9052913bd550a6b081954b4e76ba6a387552954c015317ad871dcb2f25002900000000000000000000000060d8a82ed7efa7f27656cb34549fcd797a812235

   Swarm Source:
bzzr://34e39f9052913bd550a6b081954b4e76ba6a387552954c015317ad871dcb2f25

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.