Contract 0x63825c174ab367968EC60f061753D3bbD36A0D8F 6

 

Contract Overview

Kyber: Reserve
Balance:
0 Ether

EtherValue:
$0.00

Token:
 
Txn Hash
Method
Block
From
To
Value
0xdcf95e761fa77ef0652c9dd84bcbc1623b983a86678e3e8aeb0f4b3e16458db4Withdraw114965712020-12-21 11:47:48714 days 18 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.00478051108
0x09f55ce899f3b5043b9f9a72b684cc349f4391ada673617cda8f066ac0e3cc04Withdraw114950772020-12-21 6:33:09714 days 23 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0023906452
0xe905b4a2ad3ca464b2b7c3e36e46ac90ecd5f14bb38843bfd8645d6f7210e46eWithdraw114934782020-12-21 0:24:23715 days 5 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0033101272
0x1ac556bdd3b34ddf63a3cd29aaf505d030b5c3cb2009ad66d2f05b76f4a9e965Withdraw114934482020-12-21 0:18:04715 days 5 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0032641571
0xc49f2f2eba38e72a59c93382a72bd6d594f017e36dceda4e5829ecfb551f9f50Withdraw114933982020-12-21 0:07:46715 days 6 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0028503862
0x34af4dd0bb64a6ad97ef57abc2ac8db11078ab326e2181702b8c2a85896ab3caWithdraw114933052020-12-20 23:46:37715 days 6 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0034099958
0x6e394768872e9ed21ac973339f014ee34c4e2fd2022a855d8b6101d2901fff93Withdraw114927802020-12-20 21:54:39715 days 8 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0020688345
0x8e132364b4bef8394580955198e08b313596a3cfdb08c41ca28ea9e6e66a34f1Withdraw114917042020-12-20 17:55:47715 days 12 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0018389640
0x2e1ad631c48d4e8457b95c1e934c1b2f8272c648b04024ec82c751f5fbdfab40Withdraw114916342020-12-20 17:39:38715 days 12 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.001930942
0x6a2b6498b4779ebc0485ca412d3e428c114099ae0e1d941ccb09c7b500cf2593Withdraw114915752020-12-20 17:29:20715 days 12 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0018849341
0xfff296a647fe5feb5bb1e107e36d12275c2956ac80c6da16f4bc17f43b6543dcWithdraw114915482020-12-20 17:24:27715 days 12 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0024303141
0x1744d3b9ff36e38082d390267ca44bfdf9dbc8474e8316342dc483d24bebb65cWithdraw114913762020-12-20 16:46:07715 days 13 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0018389640
0xfe4950e947c735123e65b0482cbf61edafe96af55aa17a7b6853d7ad71a3d01eWithdraw114913512020-12-20 16:41:00715 days 13 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0018389640
0x06abf963586c5e061823b0edfd44a5570ddce8b2a8e216861033e6496eeae9a3Withdraw114913312020-12-20 16:36:22715 days 13 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.001930942
0x75290c37a21650db01eeb765fab9a3897a2dcd8b46d9d234c30b783b7893db70Withdraw114913062020-12-20 16:30:53715 days 13 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.001930942
0x24935f7398c04e2d486f80b57d93ccabf492b267b949a7cec9a90711932c1787Withdraw114912812020-12-20 16:25:14715 days 13 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.001930942
0x7d202c5e72df894897d791b5054a5abc5e794535bc237574cbb9a64f47659936Withdraw114912622020-12-20 16:20:12715 days 13 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.001930942
0x8ba75b9ca978b118c1390d3629238cec2b6e75ba2fbe085ed54d823a0de7ecfeWithdraw114912352020-12-20 16:14:40715 days 13 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.001930942
0x075da1c6c6740b08390de7ad51f8db3696ca1f5bfbdb116c1dd3401d836a4e78Withdraw114912112020-12-20 16:10:09715 days 14 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.001930942
0x8c59bc9d3127ca16a7a286d70e820860c4770de81d4ce3e3bd0e425aa1a9dfd6Withdraw114907622020-12-20 14:35:39715 days 15 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0028962949
0xa25ef0a979e64114eefdac217f006f671fd0a325ec4b0ba105f83d23af4d377bWithdraw114906272020-12-20 14:04:48715 days 16 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.001930942
0x1cfc56d7aac5f14dadceb15d5773269c88640cb27b8d8b4d3a3476685429c332Withdraw114906002020-12-20 13:59:24715 days 16 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0018849341
0xb1e7ddc8b54dbf6ebf929018351b83023d1fa8ab74a2038fbc4f7c6900bd1897Withdraw114905772020-12-20 13:52:15715 days 16 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0018389640
0x4659f5c450fad0f6d78641de0d73040a7458bdd6246fd999461a84c50ae24aaeWithdraw114905612020-12-20 13:47:21715 days 16 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0017929839
0x194e86dcc98c12cc06f9d4517b90c25219dcc0461d0f0599c64e837226e16a1fWithdraw114905342020-12-20 13:42:25715 days 16 hrs ago0x5bab5ef16cfac98e216a229db17913454b0f9365 IN  Kyber: Reserve0 Ether0.0017929839
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xa923f06d8c51d5779aae57bbfcef9fc3677a63a1af0c7cc056de775fd0198328139626242022-01-08 4:32:30332 days 1 hr ago Kyber: Reserve0x4662a827bec08e60b858c22881a209dc4dd85adf555.209425 Ether
0xda3cda676a0cd5c1d52aa7709e1a07ae593cd3827e5e450326e7eeab7f32297c123685982021-05-04 15:34:55580 days 14 hrs ago Kyber: Reserve0x387ad93bfe9957a4eeba0cb2ff9303f6ec0833d0122 Ether
0x98b5011ec856e060cb7ca884cc110640272a240ffce6a1140e93d81628ae250b117906262021-02-04 15:35:42669 days 14 hrs ago Kyber: Reserve0x894ac7c600ff7ae588d2e75cf196c50dee08c89860 Ether
0x7ad5cfb836aa94df6d0c339cd785afeeec9aab897da4618c07ca7bd160f0f2f8115422172020-12-28 11:41:53707 days 18 hrs ago Kyber: Reserve0x387ad93bfe9957a4eeba0cb2ff9303f6ec0833d01,000 Ether
0x4ff6220423fffdbf1ddce5077f9bf3fdf2f7615e23e931fda681b4078a20206f115012072020-12-22 4:59:39714 days 1 hr ago Kyber: Reserve0x3a9b02c14d967333ce68e353a64653e258da2baa10 Ether
0xd1f5bca7218a14944c72c6704dd53eb2944137419540eab779e8965532d46ce6115011502020-12-22 4:44:26714 days 1 hr ago Kyber: Contract 2 Kyber: Reserve0.009982 Ether
0x25f0099770b3584750c96b16c9db3b909073fe4001c1ed7bab8e8eb456a8b5a1115010482020-12-22 4:21:32714 days 1 hr ago Kyber: Contract 2 Kyber: Reserve80.85906 Ether
0x1b0aa714b87059acc43e1b68122c43855d3933c7d0b6bf8678ec9e40281fb068115010442020-12-22 4:20:49714 days 1 hr ago Kyber: Contract 2 Kyber: Reserve6.16035115 Ether
0xf755fd8bfce564543e9803c1b932510fbc3bf64012522841527fae264a331a32115010232020-12-22 4:15:19714 days 1 hr ago Kyber: Contract 2 Kyber: Reserve37.07101687 Ether
0xa2297756196291a697232827f834142916274d6de8cdbc9c0374395dd7036a21115009032020-12-22 3:47:47714 days 2 hrs ago Kyber: Contract 2 Kyber: Reserve18.05748624 Ether
0x13b212827a9ab830e09114685b0a14ce16ebe06de4d15c5473307dd57cd568cf115008272020-12-22 3:32:03714 days 2 hrs ago Kyber: Contract 2 Kyber: Reserve35.964 Ether
0xc5cc29d2e08dce146f7e668316e50b231d619553eb1d71282de4b7fcbc12ff74115007262020-12-22 3:07:24714 days 3 hrs ago Kyber: Contract 2 Kyber: Reserve5.86881525 Ether
0xb3e03c9aaf604b1673fc49529078a4b11513bfeaf7e4b66b9a70988d9e1f92c6115002012020-12-22 1:12:15714 days 5 hrs ago Kyber: Contract 2 Kyber: Reserve13.9525278 Ether
0x796f135c0c5af147b661a21d641efaed6a9d6ea23497a4f65b95e23717604338115001792020-12-22 1:08:13714 days 5 hrs ago Kyber: Contract 2 Kyber: Reserve29.32257651 Ether
0xfa9327b7ede23b0ea7fb614fd9a450a5a6dd004944f0d6ed666bb0d96d89c459114991142020-12-21 21:12:33714 days 9 hrs ago Kyber: Reserve Kyber: Contract 228.0393156 Ether
0xc5eaf0d2e5b6248d13e0f92fe4a9e610b1bad1e67bb8c8a5071f5a50d454e384114990512020-12-21 21:00:08714 days 9 hrs ago Kyber: Reserve Kyber: Contract 285.37249745 Ether
0x52f80914c497fe5d6ed522f9a6fa97a5fc3601764fb020c1e839e67b60ecfb29114990122020-12-21 20:52:27714 days 9 hrs ago Kyber: Reserve Kyber: Contract 298.86402363 Ether
0xacf2747476adb3365a69bef25248a08df53a8c2403e433b8ea8d663d020bfea9114989412020-12-21 20:35:34714 days 9 hrs ago Kyber: Reserve Kyber: Contract 2108.53072817 Ether
0x036ccb78d55c7d77d6e99b80511f7d620ea4231c7a826d6c951f923158025014114984272020-12-21 18:44:32714 days 11 hrs ago Kyber: Reserve Kyber: Contract 23.32489663 Ether
0xc8393597e25595d695c789fc9f8359f1d71b8f02cd3f649bfc5f41b4ab416968114984242020-12-21 18:44:03714 days 11 hrs ago Kyber: Reserve Kyber: Contract 23.32489663 Ether
0x3c56e8a6e9e4322fe063305dc94fb5aa27bb109c3f144c3fbee72e50b5cc3e8f114982582020-12-21 18:02:37714 days 12 hrs ago Kyber: Reserve Kyber: Contract 29.28457281 Ether
0x92244d57aa09ee4636e184e1064cb427621b576ae6dd817d32a70398070fe4a1114980092020-12-21 17:00:26714 days 13 hrs ago Kyber: Reserve Kyber: Contract 28.87579102 Ether
0x1b21503069f55ca6dcd40804c56d478665dda95b70a91dddba5b47972de80b0f114979972020-12-21 16:57:30714 days 13 hrs ago Kyber: Reserve Kyber: Contract 228.99144852 Ether
0x7b0a343e42c233e11fd17e8f38115d02c73ad73faa5a4a5be9ec68abe3af6d69114979802020-12-21 16:53:56714 days 13 hrs ago Kyber: Reserve Kyber: Contract 214.19940768 Ether
0x3bb1f45a4ff9318e2efc2bdc03a302dc531c7ffd59cf764ae3104bf0ce09e2f8114979302020-12-21 16:44:26714 days 13 hrs ago Kyber: Contract 2 Kyber: Reserve1.59245898 Ether
[ Download CSV Export 
Loading

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

Contract Name:
KyberReserve

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-01-31
*/

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

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

interface ConversionRatesInterface {

    function recordImbalance(
        ERC20 token,
        int buyAmount,
        uint rateUpdateBlock,
        uint currentBlock
    )
        public;

    function getRate(ERC20 token, uint currentBlockNumber, bool buy, uint qty) 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 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 SanityRatesInterface {
    function getSanityRate(ERC20 src, ERC20 dest) public view returns(uint);
}

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 KyberReserve is KyberReserveInterface, Withdrawable, Utils {

    address public kyberNetwork;
    bool public tradeEnabled;
    ConversionRatesInterface public conversionRatesContract;
    SanityRatesInterface public sanityRatesContract;
    mapping(bytes32=>bool) public approvedWithdrawAddresses; // sha3(token,address)=>bool

    function KyberReserve(address _kyberNetwork, ConversionRatesInterface _ratesContract, address _admin) public {
        require(_admin != address(0));
        require(_ratesContract != address(0));
        require(_kyberNetwork != address(0));
        kyberNetwork = _kyberNetwork;
        conversionRatesContract = _ratesContract;
        admin = _admin;
        tradeEnabled = true;
    }

    event DepositToken(ERC20 token, uint amount);

    function() public payable {
        DepositToken(ETH_TOKEN_ADDRESS, msg.value);
    }

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

    function trade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        public
        payable
        returns(bool)
    {
        require(tradeEnabled);
        require(msg.sender == kyberNetwork);

        require(doTrade(srcToken, srcAmount, destToken, destAddress, conversionRate, validate));

        return true;
    }

    event TradeEnabled(bool enable);

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

        return true;
    }

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

        return true;
    }

    event WithdrawAddressApproved(ERC20 token, address addr, bool approve);

    function approveWithdrawAddress(ERC20 token, address addr, bool approve) public onlyAdmin {
        approvedWithdrawAddresses[keccak256(token, addr)] = approve;
        WithdrawAddressApproved(token, addr, approve);

        setDecimals(token);
    }

    event WithdrawFunds(ERC20 token, uint amount, address destination);

    function withdraw(ERC20 token, uint amount, address destination) public onlyOperator returns(bool) {
        require(approvedWithdrawAddresses[keccak256(token, destination)]);

        if (token == ETH_TOKEN_ADDRESS) {
            destination.transfer(amount);
        } else {
            require(token.transfer(destination, amount));
        }

        WithdrawFunds(token, amount, destination);

        return true;
    }

    event SetContractAddresses(address network, address rate, address sanity);

    function setContracts(address _kyberNetwork, ConversionRatesInterface _conversionRates, SanityRatesInterface _sanityRates)
        public
        onlyAdmin
    {
        require(_kyberNetwork != address(0));
        require(_conversionRates != address(0));

        kyberNetwork = _kyberNetwork;
        conversionRatesContract = _conversionRates;
        sanityRatesContract = _sanityRates;

        SetContractAddresses(kyberNetwork, conversionRatesContract, sanityRatesContract);
    }

    ////////////////////////////////////////////////////////////////////////////
    /// status functions ///////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////
    function getBalance(ERC20 token) public view returns(uint) {
        if (token == ETH_TOKEN_ADDRESS)
            return this.balance;
        else
            return token.balanceOf(this);
    }

    function getDestQty(ERC20 src, ERC20 dest, uint srcQty, uint rate) public view returns(uint) {
        uint dstDecimals = getDecimals(dest);
        uint srcDecimals = getDecimals(src);

        return calcDstQty(srcQty, srcDecimals, dstDecimals, rate);
    }

    function getSrcQty(ERC20 src, ERC20 dest, uint dstQty, uint rate) public view returns(uint) {
        uint dstDecimals = getDecimals(dest);
        uint srcDecimals = getDecimals(src);

        return calcSrcQty(dstQty, srcDecimals, dstDecimals, rate);
    }

    function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint) {
        ERC20 token;
        bool  buy;

        if (!tradeEnabled) return 0;

        if (ETH_TOKEN_ADDRESS == src) {
            buy = true;
            token = dest;
        } else if (ETH_TOKEN_ADDRESS == dest) {
            buy = false;
            token = src;
        } else {
            return 0; // pair is not listed
        }

        uint rate = conversionRatesContract.getRate(token, blockNumber, buy, srcQty);
        uint destQty = getDestQty(src, dest, srcQty, rate);

        if (getBalance(dest) < destQty) return 0;

        if (sanityRatesContract != address(0)) {
            uint sanityRate = sanityRatesContract.getSanityRate(src, dest);
            if (rate > sanityRate) return 0;
        }

        return rate;
    }

    /// @dev do a trade
    /// @param srcToken Src token
    /// @param srcAmount Amount of src token
    /// @param destToken Destination token
    /// @param destAddress Destination address to send tokens to
    /// @param validate If true, additional validations are applicable
    /// @return true iff trade is successful
    function doTrade(
        ERC20 srcToken,
        uint srcAmount,
        ERC20 destToken,
        address destAddress,
        uint conversionRate,
        bool validate
    )
        internal
        returns(bool)
    {
        // can skip validation if done at kyber network level
        if (validate) {
            require(conversionRate > 0);
            if (srcToken == ETH_TOKEN_ADDRESS)
                require(msg.value == srcAmount);
            else
                require(msg.value == 0);
        }

        uint destAmount = getDestQty(srcToken, destToken, srcAmount, conversionRate);
        // sanity check
        require(destAmount > 0);

        // add to imbalance
        ERC20 token;
        int buy;
        if (srcToken == ETH_TOKEN_ADDRESS) {
            buy = int(destAmount);
            token = destToken;
        } else {
            buy = -1 * int(srcAmount);
            token = srcToken;
        }

        conversionRatesContract.recordImbalance(
            token,
            buy,
            0,
            block.number
        );

        // collect src tokens
        if (srcToken != ETH_TOKEN_ADDRESS) {
            require(srcToken.transferFrom(msg.sender, this, srcAmount));
        }

        // send dest tokens
        if (destToken == ETH_TOKEN_ADDRESS) {
            destAddress.transfer(destAmount);
        } else {
            require(destToken.transfer(destAddress, destAmount));
        }

        TradeExecute(msg.sender, srcToken, srcAmount, destToken, destAmount, destAddress);

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"enableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAlerter","type":"address"}],"name":"addAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sanityRatesContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"addr","type":"address"},{"name":"approve","type":"bool"}],"name":"approveWithdrawAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"destination","type":"address"}],"name":"withdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableTrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"srcToken","type":"address"},{"name":"srcAmount","type":"uint256"},{"name":"destToken","type":"address"},{"name":"destAddress","type":"address"},{"name":"conversionRate","type":"uint256"},{"name":"validate","type":"bool"}],"name":"trade","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdminQuickly","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAlerters","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"srcQty","type":"uint256"},{"name":"blockNumber","type":"uint256"}],"name":"getConversionRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"src","type":"address"},{"name":"dest","type":"address"},{"name":"dstQty","type":"uint256"},{"name":"rate","type":"uint256"}],"name":"getSrcQty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kyberNetwork","type":"address"},{"name":"_conversionRates","type":"address"},{"name":"_sanityRates","type":"address"}],"name":"setContracts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetwork","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"conversionRatesContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradeEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"approvedWithdrawAddresses","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"getBalance","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":"rate","type":"uint256"}],"name":"getDestQty","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_kyberNetwork","type":"address"},{"name":"_ratesContract","type":"address"},{"name":"_admin","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"DepositToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"origin","type":"address"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"srcAmount","type":"uint256"},{"indexed":false,"name":"destToken","type":"address"},{"indexed":false,"name":"destAmount","type":"uint256"},{"indexed":false,"name":"destAddress","type":"address"}],"name":"TradeExecute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"enable","type":"bool"}],"name":"TradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"approve","type":"bool"}],"name":"WithdrawAddressApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"destination","type":"address"}],"name":"WithdrawFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"network","type":"address"},{"indexed":false,"name":"rate","type":"address"},{"indexed":false,"name":"sanity","type":"address"}],"name":"SetContractAddresses","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"}]

6060604052341561000f57600080fd5b604051606080611e6483398101604052808051919060200180519190602001805160008054600160a060020a03191633600160a060020a039081169190911790915590925082161515905061006357600080fd5b600160a060020a038216151561007857600080fd5b600160a060020a038316151561008d57600080fd5b6007805460088054600160a060020a03958616600160a060020a031991821617909155600080549486169482169490941790935560a060020a60ff02199390941691909316171674010000000000000000000000000000000000000000179055611d68806100fc6000396000f30060606040526004361061014f5763ffffffff60e060020a60003504166299d38681146101a357806301a12fd3146101ca57806326782247146101eb57806327a099d81461021a5780633ccdbb2814610280578063408ee7fe146102a957806347e6924f146102c8578063546dc71c146102db57806369328dec146103055780636940030f1461032e5780636cf698111461034157806375829def1461036d57806377f50f971461038c5780637acc86781461039f5780637c423f54146103be5780637cd44272146103d15780639870d7fe1461040e578063a7fca9531461042d578063ac8a584a14610458578063b3066d4914610477578063b78b842d146104a2578063ce56c454146104b5578063d5847d33146104d7578063d621e813146104ea578063d7b7024d146104fd578063f851a44014610513578063f8b2cb4f14610526578063fa64dffa14610545575b7f2d0c0a8842b9944ece1495eb61121621b5e36bd6af3bba0318c695f525aef79f600080516020611d1d83398151915234604051600160a060020a03909216825260208201526040908101905180910390a1005b34156101ae57600080fd5b6101b6610570565b604051901515815260200160405180910390f35b34156101d557600080fd5b6101e9600160a060020a03600435166105fe565b005b34156101f657600080fd5b6101fe61076e565b604051600160a060020a03909116815260200160405180910390f35b341561022557600080fd5b61022d61077d565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561026c578082015183820152602001610254565b505050509050019250505060405180910390f35b341561028b57600080fd5b6101e9600160a060020a0360043581169060243590604435166107e5565b34156102b457600080fd5b6101e9600160a060020a03600435166108dc565b34156102d357600080fd5b6101fe6109d8565b34156102e657600080fd5b6101e9600160a060020a036004358116906024351660443515156109e7565b341561031057600080fd5b6101b6600160a060020a036004358116906024359060443516610ac6565b341561033957600080fd5b6101b6610c7e565b6101b6600160a060020a03600435811690602435906044358116906064351660843560a4351515610cff565b341561037857600080fd5b6101e9600160a060020a0360043516610d6c565b341561039757600080fd5b6101e9610e07565b34156103aa57600080fd5b6101e9600160a060020a0360043516610ea1565b34156103c957600080fd5b61022d610f83565b34156103dc57600080fd5b6103fc600160a060020a0360043581169060243516604435606435610fe9565b60405190815260200160405180910390f35b341561041957600080fd5b6101e9600160a060020a03600435166111d4565b341561043857600080fd5b6103fc600160a060020a03600435811690602435166044356064356112a4565b341561046357600080fd5b6101e9600160a060020a03600435166112d6565b341561048257600080fd5b6101e9600160a060020a0360043581169060243581169060443516611442565b34156104ad57600080fd5b6101fe611526565b34156104c057600080fd5b6101e9600435600160a060020a0360243516611535565b34156104e257600080fd5b6101fe6115c8565b34156104f557600080fd5b6101b66115d7565b341561050857600080fd5b6101b66004356115f8565b341561051e57600080fd5b6101fe61160d565b341561053157600080fd5b6103fc600160a060020a036004351661161c565b341561055057600080fd5b6103fc600160a060020a03600435811690602435166044356064356116c7565b6000805433600160a060020a0390811691161461058c57600080fd5b6007805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356001604051901515815260200160405180910390a15060015b90565b6000805433600160a060020a0390811691161461061a57600080fd5b600160a060020a03821660009081526003602052604090205460ff16151561064157600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b60055481101561076a5781600160a060020a031660058281548110151561068657fe5b600091825260209091200154600160a060020a03161415610762576005805460001981019081106106b357fe5b60009182526020909120015460058054600160a060020a0390921691839081106106d957fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556005805490610715906000198301611cc8565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a161076a565b600101610663565b5050565b600154600160a060020a031681565b610785611cec565b60048054806020026020016040519081016040528092919081815260200182805480156107db57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116107bd575b5050505050905090565b60005433600160a060020a0390811691161461080057600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561085d57600080fd5b6102c65a03f1151561086e57600080fd5b50505060405180519050151561088357600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b60005433600160a060020a039081169116146108f757600080fd5b600160a060020a03811660009081526003602052604090205460ff161561091d57600080fd5b6005546032901061092d57600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff1916600190811790915560058054909181016109ac8382611cc8565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b600954600160a060020a031681565b60005433600160a060020a03908116911614610a0257600080fd5b80600a600085856040516c01000000000000000000000000600160a060020a039384168102825291909216026014820152602801604051908190039020815260208101919091526040908101600020805460ff1916921515929092179091557fd5fd5351efae1f4bb760079da9f0ff9589e2c3e216337ca9d39cdff573b245c49084908490849051600160a060020a0393841681529190921660208201529015156040808301919091526060909101905180910390a1610ac1836116ee565b505050565b600160a060020a03331660009081526002602052604081205460ff161515610aed57600080fd5b600a600085846040516c01000000000000000000000000600160a060020a039384168102825291909216026014820152602801604051908190039020815260208101919091526040016000205460ff161515610b4857600080fd5b600160a060020a038416600080516020611d1d8339815191521415610b9d57600160a060020a03821683156108fc0284604051600060405180830381858888f193505050501515610b9857600080fd5b610c20565b83600160a060020a031663a9059cbb838560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610bfa57600080fd5b6102c65a03f11515610c0b57600080fd5b505050604051805190501515610c2057600080fd5b7fb67719fc33c1f17d31bf3a698690d62066b1e0bae28fcd3c56cf2c015c2863d6848484604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a15060019392505050565b600160a060020a03331660009081526003602052604081205460ff161515610ca557600080fd5b6007805474ff0000000000000000000000000000000000000000191690557f7d7f00509dd73ac4449f698ae75ccc797895eff5fa9d446d3df387598a26e7356000604051901515815260200160405180910390a150600190565b60075460009074010000000000000000000000000000000000000000900460ff161515610d2b57600080fd5b60075433600160a060020a03908116911614610d4657600080fd5b610d548787878787876117ab565b1515610d5f57600080fd5b5060019695505050505050565b60005433600160a060020a03908116911614610d8757600080fd5b600160a060020a0381161515610d9c57600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a03908116911614610e2257600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60005433600160a060020a03908116911614610ebc57600080fd5b600160a060020a0381161515610ed157600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b610f8b611cec565b60058054806020026020016040519081016040528092919081815260200182805480156107db57602002820191906000526020600020908154600160a060020a031681526001909101906020018083116107bd575050505050905090565b600080600080600080600760149054906101000a900460ff16151561101157600095506111c7565b600080516020611d1d833981519152600160a060020a038b16141561103c5760019350889450611070565b600080516020611d1d833981519152600160a060020a038a1614156110675760009350899450611070565b600095506111c7565b600854600160a060020a031663b8e9c22e8689878c60006040516020015260405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252151560448301526064820152608401602060405180830381600087803b15156110e057600080fd5b6102c65a03f115156110f157600080fd5b5050506040518051905092506111098a8a8a866116c7565b9150816111158a61161c565b101561112457600095506111c7565b600954600160a060020a0316156111c357600954600160a060020a031663a58092b78b8b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561119657600080fd5b6102c65a03f115156111a757600080fd5b5050506040518051915050808311156111c357600095506111c7565b8295505b5050505050949350505050565b60005433600160a060020a039081169116146111ef57600080fd5b600160a060020a03811660009081526002602052604090205460ff161561121557600080fd5b6004546032901061122557600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff1916600190811790915560048054909181016109ac8382611cc8565b60008060006112b286611aca565b91506112bd87611aca565b90506112cb85828487611b88565b979650505050505050565b6000805433600160a060020a039081169116146112f257600080fd5b600160a060020a03821660009081526002602052604090205460ff16151561131957600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b60045481101561076a5781600160a060020a031660048281548110151561135e57fe5b600091825260209091200154600160a060020a0316141561143a5760048054600019810190811061138b57fe5b60009182526020909120015460048054600160a060020a0390921691839081106113b157fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556004805460001901906113ed9082611cc8565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a161076a565b60010161133b565b60005433600160a060020a0390811691161461145d57600080fd5b600160a060020a038316151561147257600080fd5b600160a060020a038216151561148757600080fd5b60078054600160a060020a03808616600160a060020a0319928316179283905560088054868316908416179081905560098054868416941693909317928390557f7a85322644a4462d8ff5482d2a841a4d231f8cfb3c9f4a50f66f8b2bd568c31c938216929082169116604051600160a060020a03938416815291831660208301529091166040808301919091526060909101905180910390a1505050565b600754600160a060020a031681565b60005433600160a060020a0390811691161461155057600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f19350505050151561158157600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b600854600160a060020a031681565b60075474010000000000000000000000000000000000000000900460ff1681565b600a6020526000908152604090205460ff1681565b600054600160a060020a031681565b6000600160a060020a038216600080516020611d1d833981519152141561164e5750600160a060020a033016316116c2565b81600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156116a557600080fd5b6102c65a03f115156116b657600080fd5b50505060405180519150505b919050565b60008060006116d586611aca565b91506116e087611aca565b90506112cb85828487611c2f565b600160a060020a038116600080516020611d1d833981519152141561172e57600160a060020a0381166000908152600660205260409020601290556117a8565b80600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561177457600080fd5b6102c65a03f1151561178557600080fd5b5050506040518051600160a060020a038316600090815260066020526040902055505b50565b60008060008084156117ff57600086116117c457600080fd5b600160a060020a038a16600080516020611d1d83398151915214156117f4573489146117ef57600080fd5b6117ff565b34156117ff57600080fd5b61180b8a898b896116c7565b92506000831161181a57600080fd5b600160a060020a038a16600080516020611d1d833981519152141561184357508690508161184d565b5088905060001988025b600854600160a060020a031663c6fd2103838360004360405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156118b357600080fd5b6102c65a03f115156118c457600080fd5b505050600160a060020a038a16600080516020611d1d833981519152146119755789600160a060020a03166323b872dd33308c60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561194f57600080fd5b6102c65a03f1151561196057600080fd5b50505060405180519050151561197557600080fd5b600160a060020a038816600080516020611d1d83398151915214156119ca57600160a060020a03871683156108fc0284604051600060405180830381858888f1935050505015156119c557600080fd5b611a4d565b87600160a060020a031663a9059cbb888560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611a2757600080fd5b6102c65a03f11515611a3857600080fd5b505050604051805190501515611a4d57600080fd5b33600160a060020a03167fea9415385bae08fe9f6dc457b02577166790cde83bb18cc340aac6cb81b824de8b8b8b878c604051600160a060020a039586168152602081019490945291841660408085019190915260608401919091529216608082015260a001905180910390a25060019998505050505050505050565b600080600160a060020a038316600080516020611d1d8339815191521415611af55760129150611b82565b50600160a060020a038216600090815260066020526040902054801515611b7e5782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611b5c57600080fd5b6102c65a03f11515611b6d57600080fd5b505050604051805190509150611b82565b8091505b50919050565b600080806b204fce5e3e25026110000000871115611ba557600080fd5b69d3c21bcecceda1000000841115611bbc57600080fd5b848610611bed5760128587031115611bd357600080fd5b5050828403600a0a8502670de0b6b3a76400000282611c13565b60128686031115611bfd57600080fd5b5050670de0b6b3a76400008502848403600a0a83025b80600182840103811515611c2357fe5b04979650505050505050565b60006b204fce5e3e25026110000000851115611c4a57600080fd5b69d3c21bcecceda1000000821115611c6157600080fd5b838310611c945760128484031115611c7857600080fd5b670de0b6b3a7640000858302858503600a0a025b049050611cc0565b60128385031115611ca457600080fd5b828403600a0a670de0b6b3a764000002828602811515611c8c57fe5b949350505050565b815481835581811511610ac157600083815260209020610ac1918101908301611cfe565b60206040519081016040526000815290565b6105fb91905b80821115611d185760008155600101611d04565b50905600000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeea165627a7a723058207694399fad3d193542e132b7c6621c3a63e22a08cad0e5837adcb11bd0f57e2c0029000000000000000000000000d48846f0a55d380c14c5f0b8ca62b0b665a1e70900000000000000000000000092be5717e07ce2316fe27f842848fd06a11aa5100000000000000000000000001e1fc48948be993828a1a1e1f7e41d0a7be28930

Swarm Source

bzzr://7694399fad3d193542e132b7c6621c3a63e22a08cad0e5837adcb11bd0f57e2c
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.