Latest 14 txns

TxHash Age From To Value [TxFee]
0x264ef199d8eb355e5d298719ba7aecc3b15303918a14857c18bb9defbc5e74ee22 days 10 hrs ago0x73e5c11b416de31f554b7f4db65a7fc5a85e6db4  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.002401893
0xe024594003ddff22325062229348ce3641890c0a45dc08e1e6a1c754648dc7dd44 days 17 hrs ago0x73e5c11b416de31f554b7f4db65a7fc5a85e6db4  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.000729309
0x353f2693abf274f303e9283208ccb13c03a1b9abf583fd75e22fe882d61e32a544 days 17 hrs ago0x73e5c11b416de31f554b7f4db65a7fc5a85e6db4  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.001515528
0x487c8dbf26b39057d55fa4033b58beafe9c133f142234e9c7b52ae774e4cc29c44 days 17 hrs ago0x73e5c11b416de31f554b7f4db65a7fc5a85e6db4  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.000411978
0x2dd76bdc5ba05684febbd9e43359be88fb7292e7f84943ab65453513b18b084f44 days 20 hrs ago0x1be6064ca70e40a39473372be0ac8a5e16f7be45  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.00045479
0xd4c3021b4cd251628683402c8ec73a08a42c456e11305a0202771082511f6d7c49 days 22 hrs ago0x50e736c4ce00e76ef949ac06611a411576b5c383  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.00063882
0xd6627bfd39f47359a43ca382976bcbbfe7fc7cb6554ffe9612eb6f093c3d035149 days 22 hrs ago0x50e736c4ce00e76ef949ac06611a411576b5c383  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.00144336
0xd4824f8cf9c2bae9c6af455a5d69362c4d8caed20d37a946bc42796b247d1c9449 days 22 hrs ago0x50e736c4ce00e76ef949ac06611a411576b5c383  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.00174336
0x43e74bcc903a5771215a9ea636c918419b102c8374fd2d0fb15547d5a9a8260249 days 22 hrs ago0x50e736c4ce00e76ef949ac06611a411576b5c383  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.0004389
0x478c5b1a137abfea86c9af31dbe7c12a36f7631c97728c1a8e580e7a7dee3a7649 days 22 hrs ago0x50e736c4ce00e76ef949ac06611a411576b5c383  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.00090736
0xfcd93a2ee6b910d4e9bd5929c25028e3cfac88d363256579ca9bc739615557ea49 days 22 hrs ago0x50e736c4ce00e76ef949ac06611a411576b5c383  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.0009551
0x1fdbb3e9f269b4d9b6da063a2f8b1de8e6198a4fa1eb1f2a886ea9c9561e3cff49 days 22 hrs ago0x50e736c4ce00e76ef949ac06611a411576b5c383  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.00135238
0x7ef848d8e9bd83223d057d2c50900686c2caa8aad2b2d8babe4fea2cd561497149 days 22 hrs ago0x50e736c4ce00e76ef949ac06611a411576b5c383  IN   0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether0.00174208
0x12a43ac1c4f5374ee90f55d3752a634739a0f1ef99fc561b43ce407e1f46417649 days 22 hrs ago0x50e736c4ce00e76ef949ac06611a411576b5c383  IN    Contract Creation0 Ether0.0424266
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x1c5689797b56c14f12bd1856c93a41afc61a9250d0a0b294b7031501d588a3c3505597924 mins ago0x81ae4de9a3aec67a35c05c889052260e39bc42a40x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c60 Ether
0x1c5689797b56c14f12bd1856c93a41afc61a9250d0a0b294b7031501d588a3c3505597924 mins ago0x3f9a8e219ab1ad42f96b22c294e564b2b48fe6360x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x1c5689797b56c14f12bd1856c93a41afc61a9250d0a0b294b7031501d588a3c3505597924 mins ago0x713b0c6d6e194af67e3642683b92a62b5b87880e0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x20b59050c0048ddb5864d94bc7a058978bb30a29c141326478492f8d5b0e6c21505597525 mins ago0x81ae4de9a3aec67a35c05c889052260e39bc42a40x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c60 Ether
0x20b59050c0048ddb5864d94bc7a058978bb30a29c141326478492f8d5b0e6c21505597525 mins ago0x3f9a8e219ab1ad42f96b22c294e564b2b48fe6360x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x20b59050c0048ddb5864d94bc7a058978bb30a29c141326478492f8d5b0e6c21505597525 mins ago0x713b0c6d6e194af67e3642683b92a62b5b87880e0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x20b59050c0048ddb5864d94bc7a058978bb30a29c141326478492f8d5b0e6c21505597525 mins ago0x1cb14fdcec864aa7ad27724769b3d2063bdd6e450x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x94bcde71dff35812e61c996a20b231b95a6f399eca1bc6f5076ec09af479286550557261 hr 14 mins ago0x81ae4de9a3aec67a35c05c889052260e39bc42a40x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c60 Ether
0x94bcde71dff35812e61c996a20b231b95a6f399eca1bc6f5076ec09af479286550557261 hr 14 mins ago0x3f9a8e219ab1ad42f96b22c294e564b2b48fe6360x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x94bcde71dff35812e61c996a20b231b95a6f399eca1bc6f5076ec09af479286550557261 hr 14 mins ago0x713b0c6d6e194af67e3642683b92a62b5b87880e0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x94bcde71dff35812e61c996a20b231b95a6f399eca1bc6f5076ec09af479286550557261 hr 14 mins ago0x1cb14fdcec864aa7ad27724769b3d2063bdd6e450x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x23f04f0cfde27d9256bcf9d589b8626659967191529e15563d389f59cfb0cf8750556931 hr 20 mins ago0x81ae4de9a3aec67a35c05c889052260e39bc42a40x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c60 Ether
0x23f04f0cfde27d9256bcf9d589b8626659967191529e15563d389f59cfb0cf8750556931 hr 20 mins ago0x3f9a8e219ab1ad42f96b22c294e564b2b48fe6360x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x23f04f0cfde27d9256bcf9d589b8626659967191529e15563d389f59cfb0cf8750556931 hr 20 mins ago0x713b0c6d6e194af67e3642683b92a62b5b87880e0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x23f04f0cfde27d9256bcf9d589b8626659967191529e15563d389f59cfb0cf8750556931 hr 20 mins ago0x1cb14fdcec864aa7ad27724769b3d2063bdd6e450x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x7b8fd68a713407d0a1142e2cd07967bc3b6eedbdc0e7852911a453a9a66cee9e50556661 hr 26 mins ago0x81ae4de9a3aec67a35c05c889052260e39bc42a40x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c60 Ether
0x7b8fd68a713407d0a1142e2cd07967bc3b6eedbdc0e7852911a453a9a66cee9e50556661 hr 26 mins ago0x3f9a8e219ab1ad42f96b22c294e564b2b48fe6360x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x7b8fd68a713407d0a1142e2cd07967bc3b6eedbdc0e7852911a453a9a66cee9e50556661 hr 26 mins ago0x3eafe85fbed7fd20a3b34c4857147ad3856850660x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x3d288ce854d0e0e259a162cf10c4029e9a130d9176c55274362c9f7b753a4d8750551833 hrs 4 mins ago0x81ae4de9a3aec67a35c05c889052260e39bc42a40x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c60 Ether
0x3d288ce854d0e0e259a162cf10c4029e9a130d9176c55274362c9f7b753a4d8750551833 hrs 4 mins ago0x3f9a8e219ab1ad42f96b22c294e564b2b48fe6360x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x3d288ce854d0e0e259a162cf10c4029e9a130d9176c55274362c9f7b753a4d8750551833 hrs 4 mins ago0x713b0c6d6e194af67e3642683b92a62b5b87880e0x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x3d288ce854d0e0e259a162cf10c4029e9a130d9176c55274362c9f7b753a4d8750551833 hrs 4 mins ago0x1cb14fdcec864aa7ad27724769b3d2063bdd6e450x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0x08b886b1a06558198a72f00be9dba6636c00097deccacf6ce05065bfc4852f1950551393 hrs 15 mins ago0x81ae4de9a3aec67a35c05c889052260e39bc42a40x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c60 Ether
0x08b886b1a06558198a72f00be9dba6636c00097deccacf6ce05065bfc4852f1950551393 hrs 15 mins ago0x3f9a8e219ab1ad42f96b22c294e564b2b48fe6360x81ae4de9a3aec67a35c05c889052260e39bc42a40 Ether
0xea0d3f28279b6daf1fada152144d52249b4d00ec8018592d106ec03775a90a4450551233 hrs 19 mins ago0x81ae4de9a3aec67a35c05c889052260e39bc42a40x4e470dc7321e84ca96fcaedd0c8abcebbaeb68c60 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0x42530d2F9D286e59ffd162574A6149aFe8f7c9f7
Contract Name: FeeBurner
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.18;

// File: contracts/FeeBurnerInterface.sol

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

// File: contracts/ERC20Interface.sol

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

// File: contracts/PermissionGroups.sol

contract PermissionGroups {

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

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

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

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

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

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

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

    event TransferAdminPending(address pendingAdmin);

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

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

    event AdminClaimed( address newAdmin, address previousAdmin);

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

    event AlerterAdded (address newAlerter, bool isAdd);

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

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

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

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

    event OperatorAdded(address newOperator, bool isAdd);

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

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

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

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

// File: contracts/Withdrawable.sol

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

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

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

    event EtherWithdraw(uint amount, address sendTo);

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

// File: contracts/Utils.sol

/// @title Kyber constants contract
contract Utils {

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

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

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

        return tokenDecimals;
    }

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

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

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

// File: contracts/Utils2.sol

contract Utils2 is Utils {

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

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

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

        return decimals[token];
    }

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

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

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

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

// File: contracts/KyberNetworkInterface.sol

/// @title Kyber Network interface
interface KyberNetworkInterface {
    function maxGasPrice() public view returns(uint);
    function getUserCapInWei(address user) public view returns(uint);
    function getUserCapInTokenWei(address user, ERC20 token) public view returns(uint);
    function enabled() public view returns(bool);
    function info(bytes32 id) public view returns(uint);

    function searchBestRate(ERC20 src, ERC20 dest, uint srcAmount, bool usePermissionless) public view
        returns(address, uint);

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

    function tradeWithHint(address trader, ERC20 src, uint srcAmount, ERC20 dest, address destAddress,
        uint maxDestAmount, uint minConversionRate, address walletId, bytes hint) public payable returns(uint);
}

// File: contracts/FeeBurner.sol

interface BurnableToken {
    function transferFrom(address _from, address _to, uint _value) public returns (bool);
    function burnFrom(address _from, uint256 _value) public returns (bool);
}


contract FeeBurner is Withdrawable, FeeBurnerInterface, Utils2 {

    mapping(address=>uint) public reserveFeesInBps;
    mapping(address=>address) public reserveKNCWallet; //wallet holding knc per reserve. from here burn and send fees.
    mapping(address=>uint) public walletFeesInBps; // wallet that is the source of tx is entitled so some fees.
    mapping(address=>uint) public reserveFeeToBurn;
    mapping(address=>uint) public feePayedPerReserve; // track burned fees and sent wallet fees per reserve.
    mapping(address=>mapping(address=>uint)) public reserveFeeToWallet;
    address public taxWallet;
    uint public taxFeeBps = 0; // burned fees are taxed. % out of burned fees.

    BurnableToken public knc;
    KyberNetworkInterface public kyberNetwork;
    uint public kncPerEthRatePrecision = 600 * PRECISION; //--> 1 ether = 600 knc tokens

    function FeeBurner(
        address _admin,
        BurnableToken _kncToken,
        KyberNetworkInterface _kyberNetwork,
        uint _initialKncToEthRatePrecision
    )
        public
    {
        require(_admin != address(0));
        require(_kncToken != address(0));
        require(_kyberNetwork != address(0));
        require(_initialKncToEthRatePrecision != 0);

        kyberNetwork = _kyberNetwork;
        admin = _admin;
        knc = _kncToken;
        kncPerEthRatePrecision = _initialKncToEthRatePrecision;
    }

    event ReserveDataSet(address reserve, uint feeInBps, address kncWallet);

    function setReserveData(address reserve, uint feesInBps, address kncWallet) public onlyOperator {
        require(feesInBps < 100); // make sure it is always < 1%
        require(kncWallet != address(0));
        reserveFeesInBps[reserve] = feesInBps;
        reserveKNCWallet[reserve] = kncWallet;
        ReserveDataSet(reserve, feesInBps, kncWallet);
    }

    event WalletFeesSet(address wallet, uint feesInBps);

    function setWalletFees(address wallet, uint feesInBps) public onlyAdmin {
        require(feesInBps < 10000); // under 100%
        walletFeesInBps[wallet] = feesInBps;
        WalletFeesSet(wallet, feesInBps);
    }

    event TaxFeesSet(uint feesInBps);

    function setTaxInBps(uint _taxFeeBps) public onlyAdmin {
        require(_taxFeeBps < 10000); // under 100%
        taxFeeBps = _taxFeeBps;
        TaxFeesSet(_taxFeeBps);
    }

    event TaxWalletSet(address taxWallet);

    function setTaxWallet(address _taxWallet) public onlyAdmin {
        require(_taxWallet != address(0));
        taxWallet = _taxWallet;
        TaxWalletSet(_taxWallet);
    }

    event KNCRateSet(uint ethToKncRatePrecision, uint kyberEthKnc, uint kyberKncEth, address updater);

    function setKNCRate() public {
        //query kyber for knc rate sell and buy
        uint kyberEthKncRate;
        uint kyberKncEthRate;
        (kyberEthKncRate, ) = kyberNetwork.getExpectedRate(ETH_TOKEN_ADDRESS, ERC20(knc), (10 ** 18));
        (kyberKncEthRate, ) = kyberNetwork.getExpectedRate(ERC20(knc), ETH_TOKEN_ADDRESS, (10 ** 18));

        //check "reasonable" spread == diff not too big. rate wasn't tampered.
        require(kyberEthKncRate * kyberKncEthRate < PRECISION ** 2 * 2);
        require(kyberEthKncRate * kyberKncEthRate > PRECISION ** 2 / 2);

        require(kyberEthKncRate <= MAX_RATE);
        kncPerEthRatePrecision = kyberEthKncRate;
        KNCRateSet(kncPerEthRatePrecision, kyberEthKncRate, kyberKncEthRate, msg.sender);
    }

    event AssignFeeToWallet(address reserve, address wallet, uint walletFee);
    event AssignBurnFees(address reserve, uint burnFee);

    function handleFees(uint tradeWeiAmount, address reserve, address wallet) public returns(bool) {
        require(msg.sender == address(kyberNetwork));
        require(tradeWeiAmount <= MAX_QTY);

        uint kncAmount = calcDestAmount(ETH_TOKEN_ADDRESS, ERC20(knc), tradeWeiAmount, kncPerEthRatePrecision);
        uint fee = kncAmount * reserveFeesInBps[reserve] / 10000;

        uint walletFee = fee * walletFeesInBps[wallet] / 10000;
        require(fee >= walletFee);
        uint feeToBurn = fee - walletFee;

        if (walletFee > 0) {
            reserveFeeToWallet[reserve][wallet] += walletFee;
            AssignFeeToWallet(reserve, wallet, walletFee);
        }

        if (feeToBurn > 0) {
            AssignBurnFees(reserve, feeToBurn);
            reserveFeeToBurn[reserve] += feeToBurn;
        }

        return true;
    }

    event BurnAssignedFees(address indexed reserve, address sender, uint quantity);

    event SendTaxFee(address indexed reserve, address sender, address taxWallet, uint quantity);

    // this function is callable by anyone
    function burnReserveFees(address reserve) public {
        uint burnAmount = reserveFeeToBurn[reserve];
        uint taxToSend = 0;
        require(burnAmount > 2);
        reserveFeeToBurn[reserve] = 1; // leave 1 twei to avoid spikes in gas fee
        if (taxWallet != address(0) && taxFeeBps != 0) {
            taxToSend = (burnAmount - 1) * taxFeeBps / 10000;
            require(burnAmount - 1 > taxToSend);
            burnAmount -= taxToSend;
            if (taxToSend > 0) {
                require(knc.transferFrom(reserveKNCWallet[reserve], taxWallet, taxToSend));
                SendTaxFee(reserve, msg.sender, taxWallet, taxToSend);
            }
        }
        require(knc.burnFrom(reserveKNCWallet[reserve], burnAmount - 1));

        //update reserve "payments" so far
        feePayedPerReserve[reserve] += (taxToSend + burnAmount - 1);

        BurnAssignedFees(reserve, msg.sender, (burnAmount - 1));
    }

    event SendWalletFees(address indexed wallet, address reserve, address sender);

    // this function is callable by anyone
    function sendFeeToWallet(address wallet, address reserve) public {
        uint feeAmount = reserveFeeToWallet[reserve][wallet];
        require(feeAmount > 1);
        reserveFeeToWallet[reserve][wallet] = 1; // leave 1 twei to avoid spikes in gas fee
        require(knc.transferFrom(reserveKNCWallet[reserve], wallet, feeAmount - 1));

        feePayedPerReserve[reserve] += (feeAmount - 1);
        SendWalletFees(wallet, reserve, msg.sender);
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"alerter","type":"address"}],"name":"removeAlerter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"reserveKNCWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"reserveFeeToWallet","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperators","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"reserveFeeToBurn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"taxWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kncPerEthRatePrecision","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"reserveFeesInBps","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"taxFeeBps","outputs":[{"name":"","type":"uint256"}],"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":"","type":"address"}],"name":"walletFeesInBps","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"reserve","type":"address"},{"name":"feesInBps","type":"uint256"},{"name":"kncWallet","type":"address"}],"name":"setReserveData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"wallet","type":"address"},{"name":"feesInBps","type":"uint256"}],"name":"setWalletFees","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[],"name":"setKNCRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOperator","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_taxFeeBps","type":"uint256"}],"name":"setTaxInBps","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kyberNetwork","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"sendTo","type":"address"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"},{"name":"user","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"feePayedPerReserve","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"wallet","type":"address"},{"name":"reserve","type":"address"}],"name":"sendFeeToWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"knc","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_taxWallet","type":"address"}],"name":"setTaxWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reserve","type":"address"}],"name":"burnReserveFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tradeWeiAmount","type":"uint256"},{"name":"reserve","type":"address"},{"name":"wallet","type":"address"}],"name":"handleFees","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_admin","type":"address"},{"name":"_kncToken","type":"address"},{"name":"_kyberNetwork","type":"address"},{"name":"_initialKncToEthRatePrecision","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"reserve","type":"address"},{"indexed":false,"name":"feeInBps","type":"uint256"},{"indexed":false,"name":"kncWallet","type":"address"}],"name":"ReserveDataSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"wallet","type":"address"},{"indexed":false,"name":"feesInBps","type":"uint256"}],"name":"WalletFeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"feesInBps","type":"uint256"}],"name":"TaxFeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"taxWallet","type":"address"}],"name":"TaxWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethToKncRatePrecision","type":"uint256"},{"indexed":false,"name":"kyberEthKnc","type":"uint256"},{"indexed":false,"name":"kyberKncEth","type":"uint256"},{"indexed":false,"name":"updater","type":"address"}],"name":"KNCRateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"reserve","type":"address"},{"indexed":false,"name":"wallet","type":"address"},{"indexed":false,"name":"walletFee","type":"uint256"}],"name":"AssignFeeToWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"reserve","type":"address"},{"indexed":false,"name":"burnFee","type":"uint256"}],"name":"AssignBurnFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"reserve","type":"address"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"quantity","type":"uint256"}],"name":"BurnAssignedFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"reserve","type":"address"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"taxWallet","type":"address"},{"indexed":false,"name":"quantity","type":"uint256"}],"name":"SendTaxFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"wallet","type":"address"},{"indexed":false,"name":"reserve","type":"address"},{"indexed":false,"name":"sender","type":"address"}],"name":"SendWalletFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"TokenWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"sendTo","type":"address"}],"name":"EtherWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"pendingAdmin","type":"address"}],"name":"TransferAdminPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAdmin","type":"address"},{"indexed":false,"name":"previousAdmin","type":"address"}],"name":"AdminClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAlerter","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"AlerterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOperator","type":"address"},{"indexed":false,"name":"isAdd","type":"bool"}],"name":"OperatorAdded","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526000600e55682086ac351052600000601155341561002157600080fd5b604051608080611dd78339810160405280805191906020018051919060200180519190602001805160008054600160a060020a03191633600160a060020a039081169190911790915590925085161515905061007c57600080fd5b600160a060020a038316151561009157600080fd5b600160a060020a03821615156100a657600080fd5b8015156100b257600080fd5b60108054600160a060020a0319908116600160a060020a0394851617909155600080548216958416959095178555600f805490911693909216929092179055601155611cd390819061010490396000f3006060604052600436106101875763ffffffff60e060020a60003504166301a12fd3811461018c5780630a377f3a146101ad57806322dbf6d2146101e8578063267822471461021f57806327a099d8146102325780632b84fe83146102985780632dc0562d146102b757806330125416146102ca578063384c4d2f146102dd5780633b215823146102fc5780633ccdbb281461030f578063408ee7fe1461033857806345ab63b91461035757806346b8c49e1461037657806365dfc20f1461039f57806375829def146103c157806377f50f97146103e05780637acc8678146103f35780637c423f54146104125780637f3681f6146104255780639870d7fe146104385780639fad2dcb14610457578063ac8a584a1461046d578063b78b842d1461048c578063ce56c4541461049f578063d4fac45d146104c1578063dc93f7c9146104e6578063dd3ff4f614610505578063e61387e01461052a578063ea414b281461053d578063f6486cad1461055c578063f851a4401461057b578063fd062d3b1461058e575b600080fd5b341561019757600080fd5b6101ab600160a060020a03600435166105ca565b005b34156101b857600080fd5b6101cc600160a060020a036004351661073a565b604051600160a060020a03909116815260200160405180910390f35b34156101f357600080fd5b61020d600160a060020a0360043581169060243516610755565b60405190815260200160405180910390f35b341561022a57600080fd5b6101cc610772565b341561023d57600080fd5b610245610781565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561028457808201518382015260200161026c565b505050509050019250505060405180910390f35b34156102a357600080fd5b61020d600160a060020a03600435166107ea565b34156102c257600080fd5b6101cc6107fc565b34156102d557600080fd5b61020d61080b565b34156102e857600080fd5b61020d600160a060020a0360043516610811565b341561030757600080fd5b61020d610823565b341561031a57600080fd5b6101ab600160a060020a036004358116906024359060443516610829565b341561034357600080fd5b6101ab600160a060020a0360043516610920565b341561036257600080fd5b61020d600160a060020a0360043516610a1c565b341561038157600080fd5b6101ab600160a060020a036004358116906024359060443516610a2e565b34156103aa57600080fd5b6101ab600160a060020a0360043516602435610b10565b34156103cc57600080fd5b6101ab600160a060020a0360043516610b9f565b34156103eb57600080fd5b6101ab610c3a565b34156103fe57600080fd5b6101ab600160a060020a0360043516610cd4565b341561041d57600080fd5b610245610db6565b341561043057600080fd5b6101ab610e1c565b341561044357600080fd5b6101ab600160a060020a0360043516611038565b341561046257600080fd5b6101ab600435611108565b341561047857600080fd5b6101ab600160a060020a036004351661116c565b341561049757600080fd5b6101cc6112d8565b34156104aa57600080fd5b6101ab600435600160a060020a03602435166112e7565b34156104cc57600080fd5b61020d600160a060020a036004358116906024351661137a565b34156104f157600080fd5b61020d600160a060020a036004351661142c565b341561051057600080fd5b6101ab600160a060020a036004358116906024351661143e565b341561053557600080fd5b6101cc6115ae565b341561054857600080fd5b6101ab600160a060020a03600435166115bd565b341561056757600080fd5b6101ab600160a060020a0360043516611648565b341561058657600080fd5b6101cc6118f2565b341561059957600080fd5b6105b6600435600160a060020a0360243581169060443516611901565b604051901515815260200160405180910390f35b6000805433600160a060020a039081169116146105e657600080fd5b600160a060020a03821660009081526003602052604090205460ff16151561060d57600080fd5b50600160a060020a0381166000908152600360205260408120805460ff191690555b6005548110156107365781600160a060020a031660058281548110151561065257fe5b600091825260209091200154600160a060020a0316141561072e5760058054600019810190811061067f57fe5b60009182526020909120015460058054600160a060020a0390921691839081106106a557fe5b60009182526020909120018054600160a060020a031916600160a060020a039290921691909117905560058054906106e1906000198301611c4e565b507f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762826000604051600160a060020a039092168252151560208201526040908101905180910390a1610736565b60010161062f565b5050565b600860205260009081526040902054600160a060020a031681565b600c60209081526000928352604080842090915290825290205481565b600154600160a060020a031681565b610789611c77565b60048054806020026020016040519081016040528092919081815260200182805480156107df57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116107c1575b505050505090505b90565b600a6020526000908152604090205481565b600d54600160a060020a031681565b60115481565b60076020526000908152604090205481565b600e5481565b60005433600160a060020a0390811691161461084457600080fd5b82600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156108a157600080fd5b6102c65a03f115156108b257600080fd5b5050506040518051905015156108c757600080fd5b7f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e6838383604051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b60005433600160a060020a0390811691161461093b57600080fd5b600160a060020a03811660009081526003602052604090205460ff161561096157600080fd5b6005546032901061097157600080fd5b7f5611bf3e417d124f97bf2c788843ea8bb502b66079fbee02158ef30b172cb762816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600360205260409020805460ff1916600190811790915560058054909181016109f08382611c4e565b5060009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055565b60096020526000908152604090205481565b600160a060020a03331660009081526002602052604090205460ff161515610a5557600080fd5b60648210610a6257600080fd5b600160a060020a0381161515610a7757600080fd5b600160a060020a0383811660009081526007602090815260408083208690556008909152908190208054600160a060020a031916928416929092179091557f999efec8241b9b7a1d9c2d2e207cde178cb3a02ca6a94d070eecb369674ead6f9084908490849051600160a060020a03938416815260208101929092529091166040808301919091526060909101905180910390a1505050565b60005433600160a060020a03908116911614610b2b57600080fd5b6127108110610b3957600080fd5b600160a060020a038216600090815260096020526040908190208290557f19f0c31fd2313f709ad6b9f15595720ff5765b72b394025288ac4f355fee0952908390839051600160a060020a03909216825260208201526040908101905180910390a15050565b60005433600160a060020a03908116911614610bba57600080fd5b600160a060020a0381161515610bcf57600080fd5b6001547f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4090600160a060020a0316604051600160a060020a03909116815260200160405180910390a160018054600160a060020a031916600160a060020a0392909216919091179055565b60015433600160a060020a03908116911614610c5557600080fd5b6001546000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed91600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a16001805460008054600160a060020a0319908116600160a060020a03841617909155169055565b60005433600160a060020a03908116911614610cef57600080fd5b600160a060020a0381161515610d0457600080fd5b7f3b81caf78fa51ecbc8acb482fd7012a277b428d9b80f9d156e8a54107496cc4081604051600160a060020a03909116815260200160405180910390a16000547f65da1cfc2c2e81576ad96afb24a581f8e109b7a403b35cbd3243a1c99efdb9ed908290600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a160008054600160a060020a031916600160a060020a0392909216919091179055565b610dbe611c77565b60058054806020026020016040519081016040528092919081815260200182805480156107df57602002820191906000526020600020908154600160a060020a031681526001909101906020018083116107c1575050505050905090565b601054600f546000918291600160a060020a039182169163809a9e559173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9116670de0b6b3a7640000856040516040015260405160e060020a63ffffffff8616028152600160a060020a03938416600482015291909216602482015260448101919091526064016040805180830381600087803b1515610eaf57600080fd5b6102c65a03f11515610ec057600080fd5b50505060405180519060200180515050601054600f54919350600160a060020a039081169163809a9e55911673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee670de0b6b3a764000060006040516040015260405160e060020a63ffffffff8616028152600160a060020a03938416600482015291909216602482015260448101919091526064016040805180830381600087803b1515610f6157600080fd5b6102c65a03f11515610f7257600080fd5b505050604051805190602001805150909150506f01812f9cf7920e2b66973e200000000082820210610fa357600080fd5b6e604be73de4838ad9a5cf880000000081830211610fc057600080fd5b69d3c21bcecceda1000000821115610fd757600080fd5b60118290557fe55ada78a782c5b59f55b44255857da4f2ed737a5a94b83e9275ee710d0d48c4828083336040519384526020840192909252604080840191909152600160a060020a0390911660608301526080909101905180910390a15050565b60005433600160a060020a0390811691161461105357600080fd5b600160a060020a03811660009081526002602052604090205460ff161561107957600080fd5b6004546032901061108957600080fd5b7f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b816001604051600160a060020a039092168252151560208201526040908101905180910390a1600160a060020a0381166000908152600260205260409020805460ff1916600190811790915560048054909181016109f08382611c4e565b60005433600160a060020a0390811691161461112357600080fd5b612710811061113157600080fd5b600e8190557f560f2dab6b3f89e548b63a9eabb6e43ec0e70bb81bdc69e5dc578c72bab629f58160405190815260200160405180910390a150565b6000805433600160a060020a0390811691161461118857600080fd5b600160a060020a03821660009081526002602052604090205460ff1615156111af57600080fd5b50600160a060020a0381166000908152600260205260408120805460ff191690555b6004548110156107365781600160a060020a03166004828154811015156111f457fe5b600091825260209091200154600160a060020a031614156112d05760048054600019810190811061122157fe5b60009182526020909120015460048054600160a060020a03909216918390811061124757fe5b60009182526020909120018054600160a060020a031916600160a060020a03929092169190911790556004805460001901906112839082611c4e565b507f091a7a4b85135fdd7e8dbc18b12fabe5cc191ea867aa3c2e1a24a102af61d58b826000604051600160a060020a039092168252151560208201526040908101905180910390a1610736565b6001016111d1565b601054600160a060020a031681565b60005433600160a060020a0390811691161461130257600080fd5b600160a060020a03811682156108fc0283604051600060405180830381858888f19350505050151561133357600080fd5b7fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de8282604051918252600160a060020a031660208201526040908101905180910390a15050565b6000600160a060020a03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156113b25750600160a060020a03811631611426565b82600160a060020a03166370a082318360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561140957600080fd5b6102c65a03f1151561141a57600080fd5b50505060405180519150505b92915050565b600b6020526000908152604090205481565b600160a060020a038082166000908152600c60209081526040808320938616835292905220546001811161147157600080fd5b600160a060020a038083166000818152600c602090815260408083208886168452825280832060019055600f54938352600890915280822054928416936323b872dd931691879160001987019190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561151357600080fd5b6102c65a03f1151561152457600080fd5b50505060405180519050151561153957600080fd5b600160a060020a038083166000908152600b60205260409081902080548401600019019055908416907fb3f3e7375c0c0c4f7dd94069a5a4e68667827491318da786c818b8c7a794924e908490339051600160a060020a039283168152911660208201526040908101905180910390a2505050565b600f54600160a060020a031681565b60005433600160a060020a039081169116146115d857600080fd5b600160a060020a03811615156115ed57600080fd5b600d8054600160a060020a031916600160a060020a0383161790557f847d0f7f2b16c8dd0b72c0606e65e8bf1b624633d37905b0e08145a295ab875881604051600160a060020a03909116815260200160405180910390a150565b600160a060020a0381166000908152600a6020526040812054906002821161166f57600080fd5b600160a060020a038084166000908152600a6020526040902060019055600d54161580159061169f5750600e5415155b156117e05750600e54612710600019830191820204908190116116c157600080fd5b808203915060008111156117e057600f54600160a060020a0384811660009081526008602052604080822054600d54948416946323b872dd9491821693911691869190516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561175857600080fd5b6102c65a03f1151561176957600080fd5b50505060405180519050151561177e57600080fd5b600d54600160a060020a03808516917f540d888e67a7f36992e365be9fddab5e2fd60e27b220d330c18f04650fd562e09133911684604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a25b600f54600160a060020a0384811660009081526008602052604080822054938316936379cc6790931691600019870191516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561185857600080fd5b6102c65a03f1151561186957600080fd5b50505060405180519050151561187e57600080fd5b600160a060020a0383166000818152600b6020526040908190208054848601016000199081019091557f2f8d2d194cbe1816411754a2fc9478a11f0707da481b11cff7c69791eb877ee191339186019051600160a060020a03909216825260208201526040908101905180910390a2505050565b600054600160a060020a031681565b601054600090819081908190819033600160a060020a0390811691161461192757600080fd5b6b204fce5e3e2502611000000088111561194057600080fd5b600f546011546119739173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee91600160a060020a03909116908b90611ad0565b600160a060020a038816600090815260076020526040902054909450612710908502600160a060020a0388166000908152600960205260409020549190049350612710908402049150818310156119c957600080fd5b508082036000821115611a5657600160a060020a038088166000908152600c60209081526040808320938a1683529290528190208054840190557f366bc34352215bf0bd3b527cfd6718605e1f5938777e42bcd8ed92f578368f529088908890859051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b6000811115611ac2577ff838f6ddc89706878e3c3e698e9b5cbfbf2c0e3d3dcd0bd2e00f1ccf313e01858782604051600160a060020a03909216825260208201526040908101905180910390a1600160a060020a0387166000908152600a602052604090208054820190555b506001979650505050505050565b6000611aee83611adf87611af9565b611ae887611af9565b85611bbd565b90505b949350505050565b600080600160a060020a03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415611b2a5760129150611bb7565b50600160a060020a038216600090815260066020526040902054801515611bb35782600160a060020a031663313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611b9157600080fd5b6102c65a03f11515611ba257600080fd5b505050604051805190509150611bb7565b8091505b50919050565b60006b204fce5e3e25026110000000851115611bd857600080fd5b69d3c21bcecceda1000000821115611bef57600080fd5b838310611c225760128484031115611c0657600080fd5b670de0b6b3a7640000858302858503600a0a025b049050611af1565b60128385031115611c3257600080fd5b828403600a0a670de0b6b3a764000002828602811515611c1a57fe5b815481835581811511611c7257600083815260209020611c72918101908301611c89565b505050565b60206040519081016040526000815290565b6107e791905b80821115611ca35760008155600101611c8f565b50905600a165627a7a72305820f9b210059e9ba28d3224396b1c3388f90f0ce6880379b61e406497bfae0e80600029000000000000000000000000e53f6b237b8026c01dff39dff8d5b2f7607783240000000000000000000000004e470dc7321e84ca96fcaedd0c8abcebbaeb68c60000000000000000000000001b859ac2361a875a6c0db7a035530916b28187580000000000000000000000000000000000000000000000000000000000400e18

   Swarm Source:
bzzr://f9b210059e9ba28d3224396b1c3388f90f0ce6880379b61e406497bfae0e8060

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward