Contract 0x964F35fAe36d75B1e72770e244F6595B68508CF5 3

 
 
Txn Hash
Method
Block
From
To
Value
0x30235f49acec1b3fd2684f405e95fade560a3c33ec3846a465d0bb8f27e3795fTrade73119632019-03-05 22:17:491371 days 8 hrs ago0x059fb7f921813f98cb6f9107126aa46cbc2cd4ad IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000086933
0x660800c26f36867d7bc45f4ad5e74fdbb5a51a31e4bf1a2133192c17b15bc534Trade71043982019-01-21 15:45:141414 days 14 hrs ago0xc4ae4aedcb717b6f04cac9492c70ed85412048ed IN  0x964f35fae36d75b1e72770e244f6595b68508cf50.1 Ether0.0005680620
0xe42db40ba42d2dba7139f44148865356637e48d4c8b3531a831c471eed61a97bTrade67929452018-11-29 7:09:531467 days 23 hrs ago0xa30fab1f1e26ec5fccfb7c6ec13a3dab069c064b IN  0x964f35fae36d75b1e72770e244f6595b68508cf51.619704 Ether0.0004613715.886
0xc7dbe29c3bf7f8b71af667919fb6fdb9884c04850bf85f7b6d84373d3369cff6Trade67929422018-11-29 7:07:441467 days 23 hrs ago0xa30fab1f1e26ec5fccfb7c6ec13a3dab069c064b IN  0x964f35fae36d75b1e72770e244f6595b68508cf51.622349 Ether0.0002904310
0xa4c25f38fca5625ce7c01c9fb2c5d819fe5ef7a784616e36b7d6512d057e744aTrade65365122018-10-18 6:29:031510 days ago0xa30fab1f1e26ec5fccfb7c6ec13a3dab069c064b IN  0x964f35fae36d75b1e72770e244f6595b68508cf52.34 Ether0.0004094714.13
0x380fac220ac1301cd0825fc70003e72bdcb77799d654585c69eeb4736f806222Trade64609612018-10-06 0:18:511522 days 6 hrs ago0x0e526f675754b31d688dc264b0fb50f96096f695 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000002810.1
0x8f8e32119d56da9cb4f5737b6e40bb1ce813a25ddec028f110d845da61d2752dTrade61679392018-08-18 5:57:501571 days 31 mins ago0x65b19870bcdda3ecc112772341ae1d2f0a692535 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50.208553 Ether0.000057062
0x51c7930f72763605001794fcfe29831e2979a8d3ccd4b2b21361071570e45a71Trade61662132018-08-17 22:44:031571 days 7 hrs ago0x05b580942037e6262f47a17d412778d56467ddab IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000119454.104
0x66923ed1bb3af055d1a428dabec27b591457efa448f870b55d8c2913049938b1Trade61236352018-08-10 17:49:301578 days 12 hrs ago0x325469ed2ec77a15bfa4e2c54fda099553fda0a4 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000142194.896
0x977b2d27732163d54eb8f882712789bfe44cecaa8415eaba8c7da97c0d05fabbTrade60758842018-08-02 16:36:451586 days 13 hrs ago0x0b80b9348eed2ae05ba965b1916350d96e003c7e IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000341612
0x0fe748b747522704827aca789097237fa0548f6be907fb4ddc2d0d30ccf409a3Trade60618172018-07-31 7:17:081588 days 23 hrs ago0xa4760c99f888d0962acc214962f427f31460fed3 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000105193.622
0x31b60b81b8b876a7fefdb9291248a9036850abba102b6601734873706ba925a8Trade60508342018-07-29 10:56:101590 days 19 hrs ago0xa4760c99f888d0962acc214962f427f31460fed3 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.00007082.438
0xc1fbc16984c420c91f8bd225689195b20aa53696e7c795b8477710602b98046eTrade60506062018-07-29 10:03:291590 days 20 hrs ago0xa4760c99f888d0962acc214962f427f31460fed3 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000029041
0x505655946b97ba377c876a4c65774728aca8e8376dbfb9184ae4bf1f67d76488Trade60253872018-07-25 3:56:211595 days 2 hrs ago0xc81f5b3f15c112535c1cacb2972cbafabb002308 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50.1 Ether0.00002841
0x87ff7233dea1fb7e13edb8445826d5098e987af59a2e0a2b43a5a42bfb6b9c88Trade59953892018-07-20 1:47:291600 days 4 hrs ago0x664c98d2246a809a8f70112d440e2bbcffb78e4b IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000030381
0xa1fbf5a17afe80f5a4536a0775522eb590421e9d0b97c144d2470d345f70c3b8Trade59953492018-07-20 1:38:571600 days 4 hrs ago0x42893ba39ac64bdbfbf91f38178ec53196552283 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50.000595 Ether0.000031531
0xad5689058b33185a7a901bd5732a0cd3867e7c2be78ffff5d6e711c2bd5a7cffTrade59951712018-07-20 0:58:051600 days 5 hrs ago0x1602c2b2cd5181906f6367a260387865482666e9 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000028271
0xcd2fe3ede5e93fcbd2935a53b73aa60d4441882dca698caf86b35d72cd4370c3Trade59946632018-07-19 22:52:501600 days 7 hrs ago0x1c8210400f001b7570558d5274dc50f5db70ada0 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000031281
0xbb3a552ab17b7fd9cb19ffc08ed927a31868a2ada889b9f1a9b1742a39ca21b6Trade59942632018-07-19 21:13:391600 days 9 hrs ago0xb1e24695df03598b6846f61c9e009a071c29adb9 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000031211
0x2bd497cf9e2b273432b42a181cefc1740737a5200acaf5c9a2ae8c02a0fa5968Trade59923012018-07-19 12:57:491600 days 17 hrs ago0x914e6a8c98de63b02932ac05cb8895057f685d1a IN  0x964f35fae36d75b1e72770e244f6595b68508cf50.24 Ether0.000086933
0xe9e22221b26ddf38d00c42f2673e72560ff13d1b07e601314e3b8db8cd58e811Trade59872472018-07-18 16:11:471601 days 14 hrs ago0x67fb8cf736057fe611a2637b70321a52190d1d22 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50.001 Ether0.000028461
0xac59fb6a7374a14d79f74360dab0847f0dd2d4b5dad092eed5d9fb16956bfcf1Trade59867492018-07-18 14:05:411601 days 16 hrs ago0xa4760c99f888d0962acc214962f427f31460fed3 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000058082
0xcac8ed66e2f1508a168b7b5339c2c1428c90acb4a8cc5b5348a31105f6977bfeTrade59776542018-07-17 0:33:521603 days 5 hrs ago0xcb11a9b267b7ad7c7f0422b34d476b7ab10690db IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000060642
0xf6ded62a469ab6b8d2b4eba49f06f8e6fee3af5c7fe3a011e4c183fbc6223c5dTrade59774632018-07-16 23:47:491603 days 6 hrs ago0x52b122429a42fb9980ec28504cc49de4f3f4f23e IN  0x964f35fae36d75b1e72770e244f6595b68508cf50 Ether0.000060512
0x950c7464397e2e7144c9932e885bea4a01a8d671016ccd9171a5ed6b1cb398c5Trade59450222018-07-11 13:43:141608 days 16 hrs ago0xcea5ff08fbab07acbb5d38eb85a2456983162281 IN  0x964f35fae36d75b1e72770e244f6595b68508cf50.3032994 Ether0.0006276822
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4774cb8550558c1a4284f450a422c4f01981d8125a78fc3eb42d81acc6dc590f66695252018-11-09 1:18:591488 days 5 hrs ago 0xbf12f5661364a5dba98ccfd651a3712b87fae3a0 0x964f35fae36d75b1e72770e244f6595b68508cf50.002 Ether
0x8ae7145c44992a8e3e6e2e311736195e430bac5db5afa4338434c10cd3ea8c9b64598932018-10-05 20:10:511522 days 10 hrs ago 0xbf12f5661364a5dba98ccfd651a3712b87fae3a0 0x964f35fae36d75b1e72770e244f6595b68508cf50.1 Ether
0x11e4e57e991811b6aedfad6207ffa9597b1bb202681a6db00b40f48c7beba0d064560522018-10-05 5:00:421523 days 1 hr ago 0xbf12f5661364a5dba98ccfd651a3712b87fae3a0 0x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x241f2a232670d28ee576773ebabb73384b47ebaba0e80332c0782fc5b3d06f4664560462018-10-05 4:59:501523 days 1 hr ago 0xbf12f5661364a5dba98ccfd651a3712b87fae3a0 0x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x015bbfca794b7b2bdf72b040caa07d4ad8245c418b6f5a9231e436dbae3cbcc064559812018-10-05 4:41:241523 days 1 hr ago 0xbf12f5661364a5dba98ccfd651a3712b87fae3a0 0x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x0a03bb01d624deda1c0bdbced3ea82ed77e2720ae804269869da479fee1343a263890112018-09-24 5:32:561534 days 56 mins ago 0xbf12f5661364a5dba98ccfd651a3712b87fae3a0 0x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x32de7dcb22b79b98912989280f496dafd5aa851bb9b824612c826a12b22afc2e63889712018-09-24 5:25:161534 days 1 hr ago 0xbf12f5661364a5dba98ccfd651a3712b87fae3a0 0x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x66296bf174a9c3a72ff33513c993068a5b4fbf7b77a628698dee8b739765a31d63846692018-09-23 12:29:551534 days 17 hrs ago 0xbf12f5661364a5dba98ccfd651a3712b87fae3a0 0x964f35fae36d75b1e72770e244f6595b68508cf50.01 Ether
0x5956cb599fb4bc2fe7622411869f1cf64ef97968207599d4f743479c98488d4960125512018-07-22 23:13:091597 days 7 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08708316 Ether
0xb140ef104a833f261b1420d419316aca8a232b25ad3b1400ee4ff1e0930c94bb59535132018-07-12 23:30:211607 days 6 hrs ago 0x70f51d971588005aeceb370768dac19bc28b61d6 0x964f35fae36d75b1e72770e244f6595b68508cf50.41129417 Ether
0x3363717d1c58c8733917a9e8df307432ea54083289ff109147674dee8519560159418602018-07-11 0:34:271609 days 5 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08708316 Ether
0x50187bc0e5b887c70cf6309c57050409a4c762e6fc16f5c502e268410856cef259418602018-07-11 0:34:271609 days 5 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08708316 Ether
0x50ff3b6d4a4cbeb0f056344efcc5f6d34021eca8c71cfaca56f9f4824ca1984559418602018-07-11 0:34:271609 days 5 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08708316 Ether
0x4236ddd6e76ae6af6631977eebdbb04ba30cf6c84abfad2dce621c2f4216535159418602018-07-11 0:34:271609 days 5 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08708316 Ether
0xfbaed744ee0d467da18d8c4981e3c2fd5e82a5a2d90e24d3618fbd3e1caa849c59418312018-07-11 0:28:261609 days 6 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08708316 Ether
0x92ce371021efe16150cea0b5c78e9f03038328b0fbeb48cef0cf0092ebcbe62159418282018-07-11 0:27:571609 days 6 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf51 wei
0x4e4044dacdfd9952f707c3df6ee7543b27bff2939b323bb0ced200aa302467ef59301592018-07-09 0:22:471611 days 6 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08477316 Ether
0xf2a303b10e3b39cfad213036aa02018fc88fe4edde04868f5c983f5e6edfb06059301502018-07-09 0:20:331611 days 6 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08477316 Ether
0x5cd99d80c27b9dd13218ef600beb8494dcf1eeba8c9bfee304792dd90b1d4f5f59301482018-07-09 0:19:531611 days 6 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08477316 Ether
0x7ad8d3ea3fa81807267b00a535a07ae56da29554fd40aee7bab05bd54f381a1959300802018-07-09 0:02:271611 days 6 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08477316 Ether
0xc0505d2869b6ecf319f02ae9e0194350371b3477a8912362d1ef26573121393759300572018-07-08 23:56:151611 days 6 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08477316 Ether
0x3550e3ab0f2803190b130516161454a0d95532f78f30d24bcc925ac48765dced59292582018-07-08 20:34:501611 days 9 hrs ago 0xfcb4393e7faef06fab01c00d67c1895545aff3b8 0x964f35fae36d75b1e72770e244f6595b68508cf50.08477316 Ether
0x5b73ffdff93557a9d3645ca1b73386be10ec052abc9b3aa4d601973d5f9885e659259992018-07-08 6:57:361611 days 23 hrs ago 0x964f35fae36d75b1e72770e244f6595b68508cf50x2a92c04df493e21ab7cc4f31e01809d7315e43a51.03872968 Ether
0x5b73ffdff93557a9d3645ca1b73386be10ec052abc9b3aa4d601973d5f9885e659259992018-07-08 6:57:361611 days 23 hrs ago Kyber: Reserve 0x964f35fae36d75b1e72770e244f6595b68508cf51.03872968 Ether
0x072eba4b2addf0aeef50c71df476be6bc915c15ef6c2b3766bc148ee2c8c312659258112018-07-08 6:11:111612 days 18 mins ago 0x964f35fae36d75b1e72770e244f6595b68508cf5 0x2aab2b157a03915c8a73adae735d0cf51c872f310.41153334 Ether
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xCc92a4462761134C00b3e16A9bd6cE8bFAD387B0

Contract Name:
KyberNetwork

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 2018-02-06
*/

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 Security Audit

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

6060604052600a600755640ba43b7400600d55600e805460ff19169055341561002757600080fd5b60405160208061269d8339810160405280805160008054600160a060020a03191633600160a060020a039081169190911790915590925082161515905061006d57600080fd5b60008054600160a060020a03909216600160a060020a03199092169190911790556126008061009d6000396000f30060606040526004361061019d5763ffffffff60e060020a60003504166301a12fd3811461020357806303141fcd1461022457806306ac5879146102545780630902f1ac1461028a578063238dafe0146102f0578063267822471461030357806327a099d8146103325780633ccdbb28146103455780633de39c111461036e578063408ee7fe146103935780634cef5a5c146103b2578063579425b7146103c55780635dada964146103d85780635ed5ea28146103eb5780635f65d703146103fe5780636432679f1461041757806375829def146104365780637726bed31461045557806377f50f971461046d5780637a2b0587146104805780637acc86781461049f5780637c423f54146104be578063809a9e55146104d15780638334278d146105115780639870d7fe14610527578063a0d7bb1b14610546578063ac8a584a1461056a578063b5caadf214610589578063b64a097e146105ba578063b8388aca146105d0578063cb3c28c7146105f8578063ce56c4541461062a578063cfff25bb1461064c578063d4fac45d1461065f578063f851a44014610684575b600160a060020a03331660009081526009602052604090205460ff1615156101c457600080fd5b33600160a060020a03167f75f33ed68675112c77094e7c5b073890598be1d23e27cd7f6907b4a7d98ac6193460405190815260200160405180910390a2005b341561020e57600080fd5b610222600160a060020a0360043516610697565b005b341561022f57600080fd5b610222600160a060020a03600435811690602435811690604435166064351515610807565b341561025f57600080fd5b610276600160a060020a0360043516602435610a49565b604051901515815260200160405180910390f35b341561029557600080fd5b61029d610a69565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156102dc5780820151838201526020016102c4565b505050509050019250505060405180910390f35b34156102fb57600080fd5b610276610ad2565b341561030e57600080fd5b610316610adb565b604051600160a060020a03909116815260200160405180910390f35b341561033d57600080fd5b61029d610aea565b341561035057600080fd5b610222600160a060020a036004358116906024359060443516610b50565b341561037957600080fd5b610381610c47565b60405190815260200160405180910390f35b341561039e57600080fd5b610222600160a060020a0360043516610c4d565b34156103bd57600080fd5b610381610d49565b34156103d057600080fd5b610316610d4f565b34156103e357600080fd5b610316610d5e565b34156103f657600080fd5b610316610d6d565b341561040957600080fd5b610222600435602435610d7c565b341561042257600080fd5b610381600160a060020a0360043516610db5565b341561044157600080fd5b610222600160a060020a0360043516610e30565b341561046057600080fd5b6102226004351515610ecb565b341561047857600080fd5b610222610f44565b341561048b57600080fd5b610276600160a060020a0360043516610fde565b34156104aa57600080fd5b610222600160a060020a0360043516610ff3565b34156104c957600080fd5b61029d6110d5565b34156104dc57600080fd5b6104f9600160a060020a036004358116906024351660443561113b565b60405191825260208201526040908101905180910390f35b341561051c57600080fd5b6103166004356111ef565b341561053257600080fd5b610222600160a060020a0360043516611217565b341561055157600080fd5b610222600160a060020a036004351660243515156112e7565b341561057557600080fd5b610222600160a060020a03600435166114ff565b341561059457600080fd5b610222600160a060020a036004358116906024358116906044351660643560843561166b565b34156105c557600080fd5b61038160043561171d565b34156105db57600080fd5b6104f9600160a060020a036004358116906024351660443561172f565b610381600160a060020a03600435811690602435906044358116906064358116906084359060a4359060c43516611a3b565b341561063557600080fd5b610222600435600160a060020a0360243516611b28565b341561065757600080fd5b610381611bbb565b341561066a57600080fd5b610381600160a060020a0360043581169060243516611bc1565b341561068f57600080fd5b610316611c73565b6000805433600160a060020a039081169116146106b357600080fd5b600160a060020a03821660009081526003602052604090205460ff1615156106da57600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156108035781600160a060020a031660058281548110151561071f57fe5b600091825260209091200154600160a060020a031614156107fb5760058054600019810190811061074c57fe5b60009182526020909120015460058054600160a060020a03909216918390811061077257fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560058054906107ae906000198301612580565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a1610803565b6001016106fc565b5050565b60005433600160a060020a0390811691161461082257600080fd5b600160a060020a0384166000908152601060205260408082208392909186908690516c01000000000000000000000000600160a060020a03938416810282529190921602601482015260280160405190819003902081526020810191909152604001600020805460ff191691151591909117905573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600160a060020a038416146109d757801561095e5782600160a060020a031663095ea7b3857f800000000000000000000000000000000000000000000000000000000000000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561093d57600080fd5b6102c65a03f1151561094e57600080fd5b50505060405180519050506109d7565b82600160a060020a031663095ea7b3856000806040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156109bb57600080fd5b6102c65a03f115156109cc57600080fd5b505050604051805150505b6109e083611c82565b6109e982611c82565b7fadb5a4f14d89b3a5ffb3900ac1ea4574d991f93887f6199fabaf25393644e01c84848484604051600160a060020a039485168152928416602084015292166040808301919091529115156060820152608001905180910390a150505050565b601060209081526000928352604080842090915290825290205460ff1681565b610a716125a4565b6008805480602002602001604051908101604052809291908181526020018280548015610ac757602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610aa9575b505050505090505b90565b600e5460ff1681565b600154600160a060020a031681565b610af26125a4565b6004805480602002602001604051908101604052809291908181526020018280548015610ac757602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610aa9575050505050905090565b60005433600160a060020a03908116911614610b6b57600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610bc857600080fd5b6102c65a03f11515610bd957600080fd5b505050604051805190501515610bee57600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b600d5481565b60005433600160a060020a03908116911614610c6857600080fd5b600160a060020a03811660009081526003602052604090205460ff1615610c8e57600080fd5b60055460329010610c9e57600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff191660019081179091556005805490918101610d1d8382612580565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b60075481565b600c54600160a060020a031681565b600b54600160a060020a031681565b600a54600160a060020a031681565b600160a060020a03331660009081526002602052604090205460ff161515610da357600080fd5b6000918252600f602052604090912055565b600a54600090600160a060020a0316636432679f83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610e1057600080fd5b6102c65a03f11515610e2157600080fd5b50505060405180519392505050565b60005433600160a060020a03908116911614610e4b57600080fd5b600160a060020a0381161515610e6057600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610ee657600080fd5b8015610f3157600a54600160a060020a03161515610f0357600080fd5b600c54600160a060020a03161515610f1a57600080fd5b600b54600160a060020a03161515610f3157600080fd5b600e805460ff1916911515919091179055565b60015433600160a060020a03908116911614610f5f57600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60096020526000908152604090205460ff1681565b60005433600160a060020a0390811691161461100e57600080fd5b600160a060020a038116151561102357600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b6110dd6125a4565b6005805480602002602001604051908101604052809291908181526020018280548015610ac757602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610aa9575050505050905090565b600b546000908190600160a060020a0316151561115757600080fd5b600b54600160a060020a031663809a9e5586868660006040516040015260405160e060020a63ffffffff8616028152600160a060020a03938416600482015291909216602482015260448101919091526064016040805180830381600087803b15156111c257600080fd5b6102c65a03f115156111d357600080fd5b5050506040518051906020018051905091509150935093915050565b60088054829081106111fd57fe5b600091825260209091200154600160a060020a0316905081565b60005433600160a060020a0390811691161461123257600080fd5b600160a060020a03811660009081526002602052604090205460ff161561125857600080fd5b6004546032901061126857600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff191660019081179091556004805490918101610d1d8382612580565b6000805433600160a060020a0390811691161461130357600080fd5b81156113d157600160a060020a03831660009081526009602052604090205460ff161561132f57600080fd5b60088054600181016113418382612580565b5060009182526020808320919091018054600160a060020a031916600160a060020a038716908117909155825260099052604090819020805460ff191660019081179091557f7752182b29e356eb432239f464340b4481e1b0bfad97f06aa2ff8cdc746114499185919051600160a060020a039092168252151560208201526040908101905180910390a16114fa565b50600160a060020a0382166000908152600960205260408120805460ff191690555b6008548110156114fa5782600160a060020a031660088281548110151561141657fe5b600091825260209091200154600160a060020a031614156114f25760088054600019810190811061144357fe5b60009182526020909120015460088054600160a060020a03909216918390811061146957fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560088054906114a5906000198301612580565b507f7752182b29e356eb432239f464340b4481e1b0bfad97f06aa2ff8cdc74611449836000604051600160a060020a039092168252151560208201526040908101905180910390a16114fa565b6001016113f3565b505050565b6000805433600160a060020a0390811691161461151b57600080fd5b600160a060020a03821660009081526002602052604090205460ff16151561154257600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156108035781600160a060020a031660048281548110151561158757fe5b600091825260209091200154600160a060020a03161415611663576004805460001981019081106115b457fe5b60009182526020909120015460048054600160a060020a0390921691839081106115da57fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556004805460001901906116169082612580565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a1610803565b600101611564565b60005433600160a060020a0390811691161461168657600080fd5b600160a060020a038516151561169b57600080fd5b600160a060020a03831615156116b057600080fd5b600160a060020a03841615156116c557600080fd5b6127108111156116d457600080fd5b600a8054600160a060020a0319908116600160a060020a0397881617909155600b8054821695871695909517909455600c80549094169290941691909117909155600d55600755565b600f6020526000908152604090205481565b6000806000806000806117406125a4565b6117486125a4565b600854600096508695508594509250838080856040518059106117685750595b90808252806020026020018201604052509450856040518059106117895750595b90808252806020026020018201604052509350600092505b8583101561196257601060006008858154811015156117bc57fe5b906000526020600020900160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a0316815260200190815260200160002060008f8f6040516c01000000000000000000000000600160a060020a039384168102825291909216026014820152602801604051908190039020815260208101919091526040016000205460ff16151561185457611957565b600880548490811061186257fe5b906000526020600020900160009054906101000a9004600160a060020a0316600160a060020a0316637cd442728f8f8f4360006040516020015260405160e060020a63ffffffff8716028152600160a060020a03948516600482015292909316602483015260448201526064810191909152608401602060405180830381600087803b15156118f057600080fd5b6102c65a03f1151561190157600080fd5b5050506040518051905085848151811061191757fe5b602090810290910101528885848151811061192e57fe5b9060200190602002015111156119575784838151811061194a57fe5b9060200190602002015198505b6001909201916117a1565b6000891115611a27576000915060075461271001896127100281151561198457fe5b049050600092505b858310156119d957808584815181106119a157fe5b90602001906020020151106119ce57828488806001019950815181106119c357fe5b602090810290910101525b60019092019161198c565b60018711156119f657866000194301408115156119f257fe5b0691505b838281518110611a0257fe5b906020019060200201519750848881518110611a1a57fe5b9060200190602002015198505b50959c969b50959950505050505050505050565b600e546000908190819081908190819060ff161515611a5957600080fd5b611a638d33611bc1565b9450600160a060020a038d1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611a905734850194505b611a9a8b8b611bc1565b9250611aab8d8d8d8d8d8d8d611d45565b905060008111611aba57600080fd5b611ac48d33611bc1565b9350611ad08b8b611bc1565b915084841115611adf57600080fd5b82821015611aec57600080fd5b611b0a848603611afb8f611fd9565b611b048e611fd9565b8b61209d565b8383031015611b1857600080fd5b9c9b505050505050505050505050565b60005433600160a060020a03908116911614611b4357600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f193505050501515611b7457600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b60085490565b6000600160a060020a03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611bf95750600160a060020a03811631611c6d565b82600160a060020a03166370a082318360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611c5057600080fd5b6102c65a03f11515611c6157600080fd5b50505060405180519150505b92915050565b600054600160a060020a031681565b600160a060020a03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611cc857600160a060020a038116600090815260066020526040902060129055611d42565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611d0e57600080fd5b6102c65a03f11515611d1f57600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b6000806000806000806000600d543a11151515611d6157600080fd5b611d6c8e8e8d612136565b1515611d7757600080fd5b611d828e8d8f61172f565b600880549298509096509087908110611d9757fe5b6000918252602082200154600160a060020a031694508511611db857600080fd5b69d3c21bcecceda10000008510611dce57600080fd5b88851015611ddb57600080fd5b8c9250611dea8e8d8588612247565b915089821115611e1257899150611e038e8d848861226e565b92508c831115611e1257600080fd5b600160a060020a038e1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611e3e575081611e41565b50805b611e4a33610db5565b811115611e5657600080fd5b611e678e848e8e86898b600161228c565b1515611e7257600080fd5b8c83108015611e9d5750600160a060020a038e1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b15611ed657600160a060020a033316838e0380156108fc0290604051600060405180830381858888f193505050501515611ed657600080fd5b600c54600160a060020a031663fd062d3b82868b60006040516020015260405160e060020a63ffffffff86160281526004810193909352600160a060020a039182166024840152166044820152606401602060405180830381600087803b1515611f3f57600080fd5b6102c65a03f11515611f5057600080fd5b505050604051805190501515611f6557600080fd5b33600160a060020a03167f1849bd6a030a1bca28b83437fd3de96f3d27a5d172fa7e9c78e7b61468928a398f8e8686604051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a2509c9b505050505050505050505050565b600080600160a060020a03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561200a5760129150612097565b50600160a060020a0382166000908152600660205260409020548015156120935782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561207157600080fd5b6102c65a03f1151561208257600080fd5b505050604051805190509150612097565b8091505b50919050565b60006b204fce5e3e250261100000008511156120b857600080fd5b69d3c21bcecceda10000008211156120cf57600080fd5b83831061210257601284840311156120e657600080fd5b670de0b6b3a7640000858302858503600a0a025b04905061212e565b6012838503111561211257600080fd5b828403600a0a670de0b6b3a7640000028286028115156120fa57fe5b949350505050565b60006b204fce5e3e2502611000000083101580612151575082155b806121635750600160a060020a038216155b1561217057506000612240565b600160a060020a03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156121a9573483146121a457506000612240565b61223c565b3415158061222f57508284600160a060020a031663dd62ed3e333060006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561221257600080fd5b6102c65a03f1151561222357600080fd5b50505060405180519050105b1561223c57506000612240565b5060015b9392505050565b60006122658361225687611fd9565b61225f87611fd9565b8561209d565b95945050505050565b60006122658361227d87611fd9565b61228687611fd9565b856124d9565b600080600160a060020a038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156122bb575087612341565b89600160a060020a03166323b872dd33308c60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561232557600080fd5b6102c65a03f1151561233657600080fd5b505050604051805150505b84600160a060020a0316636cf69811828c8c8c308a8a60006040516020015260405160e060020a63ffffffff8a16028152600160a060020a0396871660048201526024810195909552928516604485015293166064830152608482019290925290151560a482015260c4016020604051808303818588803b15156123c457600080fd5b6125ee5a03f115156123d557600080fd5b505050506040518051905015156123eb57600080fd5b600160a060020a03881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561244657600160a060020a03871686156108fc0287604051600060405180830381858888f19350505050151561244157600080fd5b6124c9565b87600160a060020a031663a9059cbb888860006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156124a357600080fd5b6102c65a03f115156124b457600080fd5b5050506040518051905015156124c957600080fd5b5060019998505050505050505050565b600080806b204fce5e3e250261100000008711156124f657600080fd5b69d3c21bcecceda100000084111561250d57600080fd5b84861061253e576012858703111561252457600080fd5b5050828403600a0a8502670de0b6b3a76400000282612564565b6012868603111561254e57600080fd5b5050670de0b6b3a76400008502848403600a0a83025b8060018284010381151561257457fe5b04979650505050505050565b8154818355818115116114fa576000838152602090206114fa9181019083016125b6565b60206040519081016040526000815290565b610acf91905b808211156125d057600081556001016125bc565b50905600a165627a7a7230582034e39f9052913bd550a6b081954b4e76ba6a387552954c015317ad871dcb2f25002900000000000000000000000060d8a82ed7efa7f27656cb34549fcd797a812235

Swarm Source

bzzr://34e39f9052913bd550a6b081954b4e76ba6a387552954c015317ad871dcb2f25
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.