ETH Price: $2,711.26 (+1.03%)

Contract

0x4459B42D034330ecC1E4D604c0a5c855b857Df2c
 

Overview

ETH Balance

3.5933627027 ETH

Eth Value

$9,742.56 (@ $2,711.26/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Eth206298962024-08-28 21:53:11169 days ago1724881991IN
0x4459B42D...5b857Df2c
0 ETH0.0012856640.93300079
Withdraw Eth206298822024-08-28 21:50:23169 days ago1724881823IN
0x4459B42D...5b857Df2c
0 ETH0.0012887341.03060822
Withdraw Eth206298672024-08-28 21:47:11169 days ago1724881631IN
0x4459B42D...5b857Df2c
0 ETH0.0012894341.05294796
Transfer150719392022-07-03 21:12:25956 days ago1656882745IN
0x4459B42D...5b857Df2c
0.00003693 ETH0.0021143664
Issue Refunds147257922022-05-06 21:05:041014 days ago1651871104IN
0x4459B42D...5b857Df2c
0 ETH0.0010619636.1667247
Single Value Air...129935772021-08-09 22:07:521284 days ago1628546872IN
0x4459B42D...5b857Df2c
0 ETH0.0030837544.4
Single Value Air...128758472021-07-22 11:19:041302 days ago1626952744IN
0x4459B42D...5b857Df2c
0 ETH0.0669142912.4
Transfer128730052021-07-22 0:26:211303 days ago1626913581IN
0x4459B42D...5b857Df2c
0.00445 ETH0.001566933
Single Value Air...128726272021-07-21 23:01:151303 days ago1626908475IN
0x4459B42D...5b857Df2c
0 ETH0.062342511.4
Single Value Air...128722982021-07-21 21:49:201303 days ago1626904160IN
0x4459B42D...5b857Df2c
0 ETH0.068188912.4
Single Value Air...128716512021-07-21 19:25:101303 days ago1626895510IN
0x4459B42D...5b857Df2c
0 ETH0.03931713.4
Single Value Air...128716432021-07-21 19:23:361303 days ago1626895416IN
0x4459B42D...5b857Df2c
0 ETH0.07368813.4
Transfer128702172021-07-21 14:03:551303 days ago1626876235IN
0x4459B42D...5b857Df2c
0.0225 ETH0.000437514.4
Single Value Air...128700922021-07-21 13:34:261303 days ago1626874466IN
0x4459B42D...5b857Df2c
0 ETH0.0791867614.4
Single Value Air...128698162021-07-21 12:33:461303 days ago1626870826IN
0x4459B42D...5b857Df2c
0 ETH0.0736875213.4
Transfer128682092021-07-21 6:29:411304 days ago1626848981IN
0x4459B42D...5b857Df2c
0.005 ETH0.0003159710.4
Transfer128682092021-07-21 6:29:411304 days ago1626848981IN
0x4459B42D...5b857Df2c
0.005 ETH0.0003159710.4
Transfer128682092021-07-21 6:29:411304 days ago1626848981IN
0x4459B42D...5b857Df2c
0.0075 ETH0.0004938110.4
Single Value Air...128660662021-07-20 22:18:591304 days ago1626819539IN
0x4459B42D...5b857Df2c
0 ETH0.001144512.4
Single Value Air...128646802021-07-20 17:04:581304 days ago1626800698IN
0x4459B42D...5b857Df2c
0 ETH0.0494873613.4
Multi Value Aird...128533412021-07-18 22:41:421306 days ago1626648102IN
0x4459B42D...5b857Df2c
0 ETH0.0065946350.4
Single Value Air...127668022021-07-05 9:55:161319 days ago1625478916IN
0x4459B42D...5b857Df2c
0 ETH0.013567674.4
Multi Value Aird...127323452021-06-30 1:11:511325 days ago1625015511IN
0x4459B42D...5b857Df2c
0 ETH0.0143394413
Multi Value Aird...127319192021-06-29 23:34:351325 days ago1625009675IN
0x4459B42D...5b857Df2c
0 ETH0.0188170812
Multi Value Aird...127264402021-06-29 3:01:471326 days ago1624935707IN
0x4459B42D...5b857Df2c
0 ETH0.0427373219.4
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
206298962024-08-28 21:53:11169 days ago1724881991
0x4459B42D...5b857Df2c
0.005 ETH
206298822024-08-28 21:50:23169 days ago1724881823
0x4459B42D...5b857Df2c
0.02105 ETH
206298672024-08-28 21:47:11169 days ago1724881631
0x4459B42D...5b857Df2c
0.025 ETH
129935772021-08-09 22:07:521284 days ago1628546872
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0.00445 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
128758472021-07-22 11:19:041302 days ago1626952744
0x4459B42D...5b857Df2c
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DappleAirdrops

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-07-28
*/

/***
 * ██████╗ █████╗██████╗██████╗██╗    ███████╗     █████╗████████╗██████╗██████╗ ██████╗██████╗███████╗
 * ██╔══████╔══████╔══████╔══████║    ██╔════╝    ██╔══██████╔══████╔══████╔══████╔═══████╔══████╔════╝
 * ██║  ███████████████╔██████╔██║    █████╗      ███████████████╔██║  ████████╔██║   ████████╔███████╗
 * ██║  ████╔══████╔═══╝██╔═══╝██║    ██╔══╝      ██╔══██████╔══████║  ████╔══████║   ████╔═══╝╚════██║
 * ██████╔██║  ████║    ██║    ██████████████╗    ██║  ██████║  ████████╔██║  ██╚██████╔██║    ███████║
 * ╚═════╝╚═╝  ╚═╚═╝    ╚═╝    ╚══════╚══════╝    ╚═╝  ╚═╚═╚═╝  ╚═╚═════╝╚═╝  ╚═╝╚═════╝╚═╝    ╚══════╝
 *        
 * MIT License
 *
 * Copyright (c) 2018 Dapple Airdrops
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 * 
 * @author Zenos Pavlakou
 */
 
pragma solidity ^0.4.19;

library SafeMath {
    
    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }
        
        c = a * b;
        assert(c / a == b);
        return c;
    }
    

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }


    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }


    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}



contract Ownable {
    
    address public owner;
    
    event OwnershipTransferred(address indexed from, address indexed to);
    
    
    /**
     * Constructor assigns ownership to the address used to deploy the contract.
     * */
    function Ownable() public {
        owner = msg.sender;
    }


    /**
     * Any function with this modifier in its method signature can only be executed by
     * the owner of the contract. Any attempt made by any other account to invoke the 
     * functions with this modifier will result in a loss of gas and the contract's state
     * will remain untampered.
     * */
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    /**
     * Allows for the transfer of ownership to another address;
     * 
     * @param _newOwner The address to be assigned new ownership.
     * */
    function transferOwnership(address _newOwner) public onlyOwner {
        require(
            _newOwner != address(0)
            && _newOwner != owner 
        );
        OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }
}



/**
 * Contract acts as an interface between the DappleAirdrops contract and all ERC20 compliant
 * tokens. 
 * */
contract ERCInterface {
    function transferFrom(address _from, address _to, uint256 _value) public;
    function balanceOf(address who) constant public returns (uint256);
    function allowance(address owner, address spender) constant public returns (uint256);
    function transfer(address to, uint256 value) public returns(bool);
}



contract DappleAirdrops is Ownable {
    
    using SafeMath for uint256;
    
    mapping (address => uint256) public bonusDropsOf;
    mapping (address => uint256) public ethBalanceOf;
    mapping (address => bool) public tokenIsBanned;
    mapping (address => uint256) public trialDrops;
        
    uint256 public rate;
    uint256 public dropUnitPrice;
    uint256 public bonus;
    uint256 public maxDropsPerTx;
    uint256 public maxTrialDrops;
    string public constant website = "www.dappleairdrops.com";
    
    event BonusCreditGranted(address indexed to, uint256 credit);
    event BonusCreditRevoked(address indexed from, uint256 credit);
    event CreditPurchased(address indexed by, uint256 etherValue, uint256 credit);
    event AirdropInvoked(address indexed by, uint256 creditConsumed);
    event BonustChanged(uint256 from, uint256 to);
    event TokenBanned(address indexed tokenAddress);
    event TokenUnbanned(address indexed tokenAddress);
    event EthWithdrawn(address indexed by, uint256 totalWei);
    event RateChanged(uint256 from, uint256 to);
    event MaxDropsChanged(uint256 from, uint256 to);
    event RefundIssued(address indexed to, uint256 totalWei);
    event ERC20TokensWithdrawn(address token, address sentTo, uint256 value);

    
    /**
     * Constructor sets the rate such that 1 ETH = 10,000 credits (i.e., 10,000 airdrop recipients)
     * which equates to a unit price of 0.00001 ETH per airdrop recipient. The bonus percentage
     * is set to 20% but is subject to change. Bonus credits will only be issued after once normal
     * credits have been used (unless credits have been granted to an address by the owner of the 
     * contract).
     * */
    function DappleAirdrops() public {
        rate = 10000;
        dropUnitPrice = 1e14; 
        bonus = 20;
        maxDropsPerTx = 100;
        maxTrialDrops = 100;
    }
    
    
    /**
     * Checks whether or not an ERC20 token has used its free trial of 100 drops. This is a constant 
     * function which does not alter the state of the contract and therefore does not require any gas 
     * or a signature to be executed. 
     * 
     * @param _addressOfToken The address of the token being queried.
     * 
     * @return true if the token being queried has not used its 100 first free trial drops, false
     * otherwise.
     * */
    function tokenHasFreeTrial(address _addressOfToken) public view returns(bool) {
        return trialDrops[_addressOfToken] < maxTrialDrops;
    }
    
    
    /**
     * Checks how many remaining free trial drops a token has.
     * 
     * @param _addressOfToken the address of the token being queried.
     * 
     * @return the total remaining free trial drops of a token.
     * */
    function getRemainingTrialDrops(address _addressOfToken) public view returns(uint256) {
        if(tokenHasFreeTrial(_addressOfToken)) {
            return maxTrialDrops.sub(trialDrops[_addressOfToken]);
        } 
        return 0;
    }
    
    
    /**
     * Allows for the price of drops to be changed by the owner of the contract. Any attempt made by 
     * any other account to invoke the function will result in a loss of gas and the price will remain 
     * untampered.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function setRate(uint256 _newRate) public onlyOwner returns(bool) {
        require(
            _newRate != rate 
            && _newRate > 0
        );
        RateChanged(rate, _newRate);
        rate = _newRate;
        uint256 eth = 1 ether;
        dropUnitPrice = eth.div(rate);
        return true;
    }
    
    
    function getRate() public view returns(uint256) {
        return rate;
    }

    
    /**
     * Allows for the maximum number of participants to be queried. This is a constant function 
     * which does not alter the state of the contract and therefore does not require any gas or a
     * signature to be executed. 
     * 
     * @return the maximum number of recipients per transaction.
     * */
    function getMaxDropsPerTx() public view returns(uint256) {
        return maxDropsPerTx;
    }
    
    
    /**
     * Allows for the maximum number of recipients per transaction to be changed by the owner. 
     * Any attempt made by any other account to invoke the function will result in a loss of gas 
     * and the maximum number of recipients will remain untampered.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function setMaxDrops(uint256 _maxDrops) public onlyOwner returns(bool) {
        require(_maxDrops >= 100);
        MaxDropsChanged(maxDropsPerTx, _maxDrops);
        maxDropsPerTx = _maxDrops;
        return true;
    }
    
    /**
     * Allows for the bonus to be changed at any point in time by the owner of the contract. Any
     * attempt made by any other account to invoke the function will result in a loss of gas and 
     * the bonus will remain untampered.
     * 
     * @param _newBonus The value of the new bonus to be set.
     * */
    function setBonus(uint256 _newBonus) public onlyOwner returns(bool) {
        require(bonus != _newBonus);
        BonustChanged(bonus, _newBonus);
        bonus = _newBonus;
    }
    
    
    /**
     * Allows for bonus drops to be granted to a recipient address by the owner of the contract. 
     * Any attempt made by any other account to invoke the function will result in a loss of gas 
     * and the bonus drops of the recipient will remain untampered.
     * 
     * @param _addr The address which will receive bonus credits.
     * @param _bonusDrops The amount of bonus drops to be granted.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function grantBonusDrops(address _addr, uint256 _bonusDrops) public onlyOwner returns(bool) {
        require(
            _addr != address(0) 
            && _bonusDrops > 0
        );
        bonusDropsOf[_addr] = bonusDropsOf[_addr].add(_bonusDrops);
        BonusCreditGranted(_addr, _bonusDrops);
        return true;
    }
    
    
    /**
     * Allows for bonus drops of an address to be revoked by the owner of the contract. Any 
     * attempt made by any other account to invoke the function will result in a loss of gas
     * and the bonus drops of the recipient will remain untampered.
     * 
     * @param _addr The address to revoke bonus credits from.
     * @param _bonusDrops The amount of bonus drops to be revoked.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function revokeBonusCreditOf(address _addr, uint256 _bonusDrops) public onlyOwner returns(bool) {
        require(
            _addr != address(0) 
            && bonusDropsOf[_addr] >= _bonusDrops
        );
        bonusDropsOf[_addr] = bonusDropsOf[_addr].sub(_bonusDrops);
        BonusCreditRevoked(_addr, _bonusDrops);
        return true;
    }
    
    
    /**
     * Allows for the credit of an address to be queried. This is a constant function which
     * does not alter the state of the contract and therefore does not require any gas or a
     * signature to be executed. 
     * 
     * @param _addr The address of which to query the credit balance of. 
     * 
     * @return The total amount of credit the address has (minus any bonus credits).
     * */
    function getDropsOf(address _addr) public view returns(uint256) {
        return (ethBalanceOf[_addr].mul(rate)).div(10 ** 18);
    }
    
    
    /**
     * Allows for the bonus credit of an address to be queried. This is a constant function 
     * which does not alter the state of the contract and therefore does not require any gas 
     * or a signature to be executed. 
     * 
     * @param _addr The address of which to query the bonus credits. 
     * 
     * @return The total amount of bonus credit the address has (minus non-bonus credit).
     * */
    function getBonusDropsOf(address _addr) public view returns(uint256) {
        return bonusDropsOf[_addr];
    }
    
    
    /**
     * Allows for the total credit (bonus + non-bonus) of an address to be queried. This is a 
     * constant function which does not alter the state of the contract and therefore does not  
     * require any gas or a signature to be executed. 
     * 
     * @param _addr The address of which to query the total credits. 
     * 
     * @return The total amount of credit the address has (bonus + non-bonus credit).
     * */
    function getTotalDropsOf(address _addr) public view returns(uint256) {
        return getDropsOf(_addr).add(getBonusDropsOf(_addr));
    }
    
    
    /**
     * Allows for the total ETH balance of an address to be queried. This is a constant
     * function which does not alter the state of the contract and therefore does not  
     * require any gas or a signature to be executed. 
     * 
     * @param _addr The address of which to query the total ETH balance. 
     * 
     * @return The total amount of ETH balance the address has.
     * */
    function getEthBalanceOf(address _addr) public view returns(uint256) {
        return ethBalanceOf[_addr];
    }

    
    /**
     * Allows for suspected fraudulent ERC20 tokens to be banned from being airdropped by the 
     * owner of the contract. Any attempt made by any other account to invoke the function will 
     * result in a loss of gas and the token to remain unbanned.
     * 
     * @param _tokenAddr The contract address of the ERC20 token to be banned from being airdropped. 
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function banToken(address _tokenAddr) public onlyOwner returns(bool) {
        require(!tokenIsBanned[_tokenAddr]);
        tokenIsBanned[_tokenAddr] = true;
        TokenBanned(_tokenAddr);
        return true;
    }
    
    
    /**
     * Allows for previously suspected fraudulent ERC20 tokens to become unbanned by the owner
     * of the contract. Any attempt made by any other account to invoke the function will 
     * result in a loss of gas and the token to remain banned.
     * 
     * @param _tokenAddr The contract address of the ERC20 token to be banned from being airdropped. 
     * 
     * @return true if function executes successfully, false otherwise.
     **/
    function unbanToken(address _tokenAddr) public onlyOwner returns(bool) {
        require(tokenIsBanned[_tokenAddr]);
        tokenIsBanned[_tokenAddr] = false;
        TokenUnbanned(_tokenAddr);
        return true;
    }
    
    
    /**
     * Allows for the allowance of a token from its owner to this contract to be queried. 
     * 
     * As part of the ERC20 standard all tokens which fall under this category have an allowance 
     * function which enables owners of tokens to allow (or give permission) to another address 
     * to spend tokens on behalf of the owner. This contract uses this as part of its protocol.
     * Users must first give permission to the contract to transfer tokens on their behalf, however,
     * this does not mean that the tokens will ever be transferrable without the permission of the 
     * owner. This is a security feature which was implemented on this contract. It is not possible
     * for the owner of this contract or anyone else to transfer the tokens which belong to others. 
     * 
     * @param _addr The address of the token's owner.
     * @param _addressOfToken The contract address of the ERC20 token.
     * 
     * @return The ERC20 token allowance from token owner to this contract. 
     * */
    function getTokenAllowance(address _addr, address _addressOfToken) public view returns(uint256) {
        ERCInterface token = ERCInterface(_addressOfToken);
        return token.allowance(_addr, address(this));
    }
    
    
    /**
     * Allows users to buy and receive credits automatically when sending ETH to the contract address.
     * */
    function() public payable {
        ethBalanceOf[msg.sender] = ethBalanceOf[msg.sender].add(msg.value);
        CreditPurchased(msg.sender, msg.value, msg.value.mul(rate));
    }

    
    /**
     * Allows users to withdraw their ETH for drops which they have bought and not used. This 
     * will result in the credit of the user being set back to 0. However, bonus credits will 
     * remain the same because they are granted when users use their drops. 
     * 
     * @param _eth The amount of ETH to withdraw
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function withdrawEth(uint256 _eth) public returns(bool) {
        require(
            ethBalanceOf[msg.sender] >= _eth
            && _eth > 0 
        );
        uint256 toTransfer = _eth;
        ethBalanceOf[msg.sender] = ethBalanceOf[msg.sender].sub(_eth);
        msg.sender.transfer(toTransfer);
        EthWithdrawn(msg.sender, toTransfer);
    }
    
    
    /**
     * Allows for refunds to be made by the owner of the contract. Any attempt made by any other account 
     * to invoke the function will result in a loss of gas and no refunds will be made.
     * */
    function issueRefunds(address[] _addrs) public onlyOwner returns(bool) {
        require(_addrs.length <= maxDropsPerTx);
        for(uint i = 0; i < _addrs.length; i++) {
            if(_addrs[i] != address(0) && ethBalanceOf[_addrs[i]] > 0) {
                uint256 toRefund = ethBalanceOf[_addrs[i]];
                ethBalanceOf[_addrs[i]] = 0;
                _addrs[i].transfer(toRefund);
                RefundIssued(_addrs[i], toRefund);
            }
        }
    }
    
    
    /**
     * Allows for the distribution of an ERC20 token to be transferred to up to 100 recipients at 
     * a time. This function only facilitates batch transfers of constant values (i.e., all recipients
     * will receive the same amount of tokens).
     * 
     * @param _addressOfToken The contract address of an ERC20 token.
     * @param _recipients The list of addresses which will receive tokens. 
     * @param _value The amount of tokens all addresses will receive. 
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function singleValueAirdrop(address _addressOfToken,  address[] _recipients, uint256 _value) public returns(bool) {
        ERCInterface token = ERCInterface(_addressOfToken);
        require(
            _recipients.length <= maxDropsPerTx 
            && (
                getTotalDropsOf(msg.sender)>= _recipients.length 
                || tokenHasFreeTrial(_addressOfToken) 
            )
            && !tokenIsBanned[_addressOfToken]
        );
        for(uint i = 0; i < _recipients.length; i++) {
            if(_recipients[i] != address(0)) {
                token.transferFrom(msg.sender, _recipients[i], _value);
            }
        }
        if(tokenHasFreeTrial(_addressOfToken)) {
            trialDrops[_addressOfToken] = trialDrops[_addressOfToken].add(_recipients.length);
        } else {
            updateMsgSenderBonusDrops(_recipients.length);
        }
        AirdropInvoked(msg.sender, _recipients.length);
        return true;
    }
    
    
    /**
     * Allows for the distribution of an ERC20 token to be transferred to up to 100 recipients at 
     * a time. This function facilitates batch transfers of differing values (i.e., all recipients
     * can receive different amounts of tokens).
     * 
     * @param _addressOfToken The contract address of an ERC20 token.
     * @param _recipients The list of addresses which will receive tokens. 
     * @param _values The corresponding values of tokens which each address will receive.
     * 
     * @return true if function executes successfully, false otherwise.
     * */    
    function multiValueAirdrop(address _addressOfToken,  address[] _recipients, uint256[] _values) public returns(bool) {
        ERCInterface token = ERCInterface(_addressOfToken);
        require(
            _recipients.length <= maxDropsPerTx 
            && _recipients.length == _values.length 
            && (
                getTotalDropsOf(msg.sender) >= _recipients.length
                || tokenHasFreeTrial(_addressOfToken)
            )
            && !tokenIsBanned[_addressOfToken]
        );
        for(uint i = 0; i < _recipients.length; i++) {
            if(_recipients[i] != address(0) && _values[i] > 0) {
                token.transferFrom(msg.sender, _recipients[i], _values[i]);
            }
        }
        if(tokenHasFreeTrial(_addressOfToken)) {
            trialDrops[_addressOfToken] = trialDrops[_addressOfToken].add(_recipients.length);
        } else {
            updateMsgSenderBonusDrops(_recipients.length);
        }
        AirdropInvoked(msg.sender, _recipients.length);
        return true;
    }
    
    
    /**
     * Invoked internally by the airdrop functions. The purpose of thie function is to grant bonus 
     * drops to users who spend their ETH airdropping tokens, and to remove bonus drops when users 
     * no longer have ETH in their account but do have some bonus drops when airdropping tokens.
     * 
     * @param _drops The amount of recipients which received tokens from the airdrop.
     * */
    function updateMsgSenderBonusDrops(uint256 _drops) internal {
        if(_drops <= getDropsOf(msg.sender)) {
            bonusDropsOf[msg.sender] = bonusDropsOf[msg.sender].add(_drops.mul(bonus).div(100));
            ethBalanceOf[msg.sender] = ethBalanceOf[msg.sender].sub(_drops.mul(dropUnitPrice));
            owner.transfer(_drops.mul(dropUnitPrice));
        } else {
            uint256 remainder = _drops.sub(getDropsOf(msg.sender));
            if(ethBalanceOf[msg.sender] > 0) {
                bonusDropsOf[msg.sender] = bonusDropsOf[msg.sender].add(getDropsOf(msg.sender).mul(bonus).div(100));
                owner.transfer(ethBalanceOf[msg.sender]);
                ethBalanceOf[msg.sender] = 0;
            }
            bonusDropsOf[msg.sender] = bonusDropsOf[msg.sender].sub(remainder);
        }
    }
    

    /**
     * Allows for any ERC20 tokens which have been mistakenly  sent to this contract to be returned 
     * to the original sender by the owner of the contract. Any attempt made by any other account 
     * to invoke the function will result in a loss of gas and no tokens will be transferred out.
     * 
     * @param _addressOfToken The contract address of an ERC20 token.
     * @param _recipient The address which will receive tokens. 
     * @param _value The amount of tokens to refund.
     * 
     * @return true if function executes successfully, false otherwise.
     * */  
    function withdrawERC20Tokens(address _addressOfToken,  address _recipient, uint256 _value) public onlyOwner returns(bool){
        require(
            _addressOfToken != address(0)
            && _recipient != address(0)
            && _value > 0
        );
        ERCInterface token = ERCInterface(_addressOfToken);
        token.transfer(_recipient, _value);
        ERC20TokensWithdrawn(_addressOfToken, _recipient, _value);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"maxDropsPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBonus","type":"uint256"}],"name":"setBonus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddr","type":"address"}],"name":"banToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addressOfToken","type":"address"}],"name":"tokenHasFreeTrial","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_bonusDrops","type":"uint256"}],"name":"grantBonusDrops","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newRate","type":"uint256"}],"name":"setRate","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMaxDropsPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenIsBanned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getTotalDropsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addrs","type":"address[]"}],"name":"issueRefunds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"trialDrops","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getDropsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addressOfToken","type":"address"},{"name":"_recipients","type":"address[]"},{"name":"_values","type":"uint256[]"}],"name":"multiValueAirdrop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ethBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bonusDropsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addressOfToken","type":"address"},{"name":"_recipients","type":"address[]"},{"name":"_value","type":"uint256"}],"name":"singleValueAirdrop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getBonusDropsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dropUnitPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addressOfToken","type":"address"}],"name":"getRemainingTrialDrops","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getEthBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addressOfToken","type":"address"},{"name":"_recipient","type":"address"},{"name":"_value","type":"uint256"}],"name":"withdrawERC20Tokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"website","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxTrialDrops","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_eth","type":"uint256"}],"name":"withdrawEth","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_bonusDrops","type":"uint256"}],"name":"revokeBonusCreditOf","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"},{"name":"_addressOfToken","type":"address"}],"name":"getTokenAllowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxDrops","type":"uint256"}],"name":"setMaxDrops","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddr","type":"address"}],"name":"unbanToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"credit","type":"uint256"}],"name":"BonusCreditGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"credit","type":"uint256"}],"name":"BonusCreditRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"by","type":"address"},{"indexed":false,"name":"etherValue","type":"uint256"},{"indexed":false,"name":"credit","type":"uint256"}],"name":"CreditPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"by","type":"address"},{"indexed":false,"name":"creditConsumed","type":"uint256"}],"name":"AirdropInvoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"uint256"},{"indexed":false,"name":"to","type":"uint256"}],"name":"BonustChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenAddress","type":"address"}],"name":"TokenBanned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenAddress","type":"address"}],"name":"TokenUnbanned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"by","type":"address"},{"indexed":false,"name":"totalWei","type":"uint256"}],"name":"EthWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"uint256"},{"indexed":false,"name":"to","type":"uint256"}],"name":"RateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"uint256"},{"indexed":false,"name":"to","type":"uint256"}],"name":"MaxDropsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"totalWei","type":"uint256"}],"name":"RefundIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"sentTo","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ERC20TokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a0319909116179055612710600555655af3107a40006006556014600755606460088190556009556118778061005a6000396000f3006060604052600436106101875763ffffffff60e060020a60003504166303a19a4f811461021d5780630b98f9751461024257806318fe1a8d1461026c57806323a0fb021461028b5780632a501a43146102aa5780632c4e722e146102cc57806334fcf437146102df5780633f92edaf146102f55780634db67caf146103085780634f95e96014610327578063528976de14610346578063656b6b6b14610395578063679aefce146103b457806371f124c5146103c7578063724ef94c146103e65780637252bbf21461048357806375b4d78c146104a25780638da5cb5b146104b55780638eb5f58e146104e45780639d06583814610503578063a379298514610562578063a39a2b7614610581578063adc7612614610594578063b28fc973146105b3578063bcdd1e13146105d2578063beb0a416146105fa578063c13e285d14610684578063c311d04914610697578063c44412e3146106ad578063ea7ee010146106cf578063eb1cfa82146106f4578063f2fde38b1461070a578063f332a2451461072b575b600160a060020a0333166000908152600260205260409020546101b0903463ffffffff61074a16565b600160a060020a0333166000818152600260205260409020919091556005547fc4174c525ef524021f6e3727a9bbe7fa797780670e51c9cd76ceb8e5dfe6c97b90349061020490829063ffffffff61076016565b60405191825260208201526040908101905180910390a2005b341561022857600080fd5b61023061078f565b60405190815260200160405180910390f35b341561024d57600080fd5b610258600435610795565b604051901515815260200160405180910390f35b341561027757600080fd5b610258600160a060020a0360043516610805565b341561029657600080fd5b610258600160a060020a03600435166108a0565b34156102b557600080fd5b610258600160a060020a03600435166024356108c2565b34156102d757600080fd5b610230610985565b34156102ea57600080fd5b61025860043561098b565b341561030057600080fd5b610230610a2d565b341561031357600080fd5b610258600160a060020a0360043516610a33565b341561033257600080fd5b610230600160a060020a0360043516610a48565b341561035157600080fd5b6102586004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610a6b95505050505050565b34156103a057600080fd5b610230600160a060020a0360043516610c35565b34156103bf57600080fd5b610230610c47565b34156103d257600080fd5b610230600160a060020a0360043516610c4d565b34156103f157600080fd5b61025860048035600160a060020a031690604460248035908101908301358060208082020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650610c9595505050505050565b341561048e57600080fd5b610230600160a060020a0360043516610eac565b34156104ad57600080fd5b610230610ebe565b34156104c057600080fd5b6104c8610ec4565b604051600160a060020a03909116815260200160405180910390f35b34156104ef57600080fd5b610230600160a060020a0360043516610ed3565b341561050e57600080fd5b61025860048035600160a060020a03169060446024803590810190830135806020808202016040519081016040528093929190818152602001838360200280828437509496505093359350610ee592505050565b341561056d57600080fd5b610230600160a060020a036004351661100d565b341561058c57600080fd5b610230611028565b341561059f57600080fd5b610230600160a060020a036004351661102e565b34156105be57600080fd5b610230600160a060020a0360043516611078565b34156105dd57600080fd5b610258600160a060020a0360043581169060243516604435611093565b341561060557600080fd5b61060d6111bd565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610649578082015183820152602001610631565b50505050905090810190601f1680156106765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068f57600080fd5b6102306111f4565b34156106a257600080fd5b6102586004356111fa565b34156106b857600080fd5b610258600160a060020a03600435166024356112e5565b34156106da57600080fd5b610230600160a060020a03600435811690602435166113c1565b34156106ff57600080fd5b610258600435611444565b341561071557600080fd5b610729600160a060020a03600435166114b3565b005b341561073657600080fd5b610258600160a060020a036004351661156a565b60008282018381101561075957fe5b9392505050565b600082151561077157506000610789565b5081810281838281151561078157fe5b041461078957fe5b92915050565b60085481565b6000805433600160a060020a039081169116146107b157600080fd5b6007548214156107c057600080fd5b7fc233b8877183b2d7aeb5d3baf2b545240e5c94d7a1f5ed6938ff87a1cf95a2d16007548360405191825260208201526040908101905180910390a160079190915590565b6000805433600160a060020a0390811691161461082157600080fd5b600160a060020a03821660009081526003602052604090205460ff161561084757600080fd5b600160a060020a03821660008181526003602052604090819020805460ff191660011790557f5f9fbe3bc9355d7eb80002cf096327839eecbdf5ffc15955fbe7609433b18c55905160405180910390a25060015b919050565b600954600160a060020a03821660009081526004602052604090205410919050565b6000805433600160a060020a039081169116146108de57600080fd5b600160a060020a038316158015906108f65750600082115b151561090157600080fd5b600160a060020a03831660009081526001602052604090205461092a908363ffffffff61074a16565b600160a060020a0384166000818152600160205260409081902092909255907f17641426a9871fbd505cf22302be09d58b40768a741ae1b9a270bdb46ff72cf69084905190815260200160405180910390a250600192915050565b60055481565b60008054819033600160a060020a039081169116146109a957600080fd5b60055483141580156109bb5750600083115b15156109c657600080fd5b7f4ac9052a820bf4f8c02d7588587cae835573b5b99ea7ad4ca002f17f319f71866005548460405191825260208201526040908101905180910390a1506005829055670de0b6b3a7640000610a21818463ffffffff61160216565b60065550600192915050565b60085490565b60036020526000908152604090205460ff1681565b6000610789610a568361100d565b610a5f84610c4d565b9063ffffffff61074a16565b600080548190819033600160a060020a03908116911614610a8b57600080fd5b60085484511115610a9b57600080fd5b600091505b8351821015610c2e576000848381518110610ab757fe5b90602001906020020151600160a060020a031614158015610b125750600060026000868581518110610ae557fe5b90602001906020020151600160a060020a0316600160a060020a0316815260200190815260200160002054115b15610c235760026000858481518110610b2757fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020549050600060026000868581518110610b6657fe5b90602001906020020151600160a060020a03168152602081019190915260400160002055838281518110610b9657fe5b90602001906020020151600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610bd057600080fd5b838281518110610bdc57fe5b90602001906020020151600160a060020a03167fa171b6942063c6f2800ce40a780edce37baa2b618571b11eedd1e69e626e7d768260405190815260200160405180910390a25b600190910190610aa0565b5050919050565b60046020526000908152604090205481565b60055490565b600554600160a060020a038216600090815260026020526040812054909161078991670de0b6b3a764000091610c89919063ffffffff61076016565b9063ffffffff61160216565b6000806000859150600854855111158015610cb1575083518551145b8015610cd457508451610cc333610a48565b101580610cd45750610cd4866108a0565b8015610cf95750600160a060020a03861660009081526003602052604090205460ff16155b1515610d0457600080fd5b5060005b8451811015610e02576000858281518110610d1f57fe5b90602001906020020151600160a060020a031614158015610d5557506000848281518110610d4957fe5b90602001906020020151115b15610dfa5781600160a060020a03166323b872dd33878481518110610d7657fe5b90602001906020020151878581518110610d8c57fe5b9060200190602002015160405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610de557600080fd5b6102c65a03f11515610df657600080fd5b5050505b600101610d08565b610e0b866108a0565b15610e5857610e3a8551600160a060020a0388166000908152600460205260409020549063ffffffff61074a16565b600160a060020a038716600090815260046020526040902055610e62565b610e628551611617565b33600160a060020a03167f22a4421eda5c487da9a0a4a06f0c582468448c11c1d02478e2442686d8de589a865160405190815260200160405180910390a250600195945050505050565b60026020526000908152604090205481565b60075481565b600054600160a060020a031681565b60016020526000908152604090205481565b6000806000859150600854855111158015610f1757508451610f0633610a48565b101580610f175750610f17866108a0565b8015610f3c5750600160a060020a03861660009081526003602052604090205460ff16155b1515610f4757600080fd5b5060005b8451811015610e02576000858281518110610f6257fe5b90602001906020020151600160a060020a0316146110055781600160a060020a03166323b872dd33878481518110610f9657fe5b906020019060200201518760405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610ff057600080fd5b6102c65a03f1151561100157600080fd5b5050505b600101610f4b565b600160a060020a031660009081526001602052604090205490565b60065481565b6000611039826108a0565b1561107057600160a060020a0382166000908152600460205260409020546009546110699163ffffffff61183916565b905061089b565b506000919050565b600160a060020a031660009081526002602052604090205490565b60008054819033600160a060020a039081169116146110b157600080fd5b600160a060020a038516158015906110d15750600160a060020a03841615155b80156110dd5750600083115b15156110e857600080fd5b5083600160a060020a03811663a9059cbb858560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561114757600080fd5b6102c65a03f1151561115857600080fd5b50505060405180519050507ee763f7778b8ceef7270c89b7d1df1008b0e482da39c43831417733af96fb0d858585604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1506001949350505050565b60408051908101604052601681527f7777772e646170706c6561697264726f70732e636f6d00000000000000000000602082015281565b60095481565b600160a060020a03331660009081526002602052604081205481908390108015906112255750600083115b151561123057600080fd5b50600160a060020a033316600090815260026020526040902054829061125c908263ffffffff61183916565b600160a060020a03331660008181526002602052604090819020929092559082156108fc0290839051600060405180830381858888f1935050505015156112a257600080fd5b33600160a060020a03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405190815260200160405180910390a250919050565b6000805433600160a060020a0390811691161461130157600080fd5b600160a060020a038316158015906113325750600160a060020a038316600090815260016020526040902054829010155b151561133d57600080fd5b600160a060020a038316600090815260016020526040902054611366908363ffffffff61183916565b600160a060020a0384166000818152600160205260409081902092909255907fc1bc87fca69dd3948590175e7c7e66a498d583b1bf99540547fc38e7f10058599084905190815260200160405180910390a250600192915050565b600081600160a060020a03811663dd62ed3e8530856040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561142257600080fd5b6102c65a03f1151561143357600080fd5b505050604051805195945050505050565b6000805433600160a060020a0390811691161461146057600080fd5b606482101561146e57600080fd5b7f9b7e3ed6ece2694ef31c25bc941a429a17a30546dd406649a5b7178d76c215996008548360405191825260208201526040908101905180910390a150600855600190565b60005433600160a060020a039081169116146114ce57600080fd5b600160a060020a038116158015906114f45750600054600160a060020a03828116911614155b15156114ff57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805433600160a060020a0390811691161461158657600080fd5b600160a060020a03821660009081526003602052604090205460ff1615156115ad57600080fd5b600160a060020a03821660008181526003602052604090819020805460ff191690557fe9c9a473410d8fd0bb91117f70a4b750bce859ab398b18cc49160f5ff41d66e4905160405180910390a2506001919050565b6000818381151561160f57fe5b049392505050565b600061162233610c4d565b82116117245761166a6116456064610c896007548661076090919063ffffffff16565b600160a060020a0333166000908152600160205260409020549063ffffffff61074a16565b600160a060020a0333166000908152600160205260409020556006546116c09061169b90849063ffffffff61076016565b600160a060020a0333166000908152600260205260409020549063ffffffff61183916565b600160a060020a0333811660009081526002602052604081209290925590546006549116906108fc906116fa90859063ffffffff61076016565b9081150290604051600060405180830381858888f19350505050151561171f57600080fd5b611835565b61173d61173033610c4d565b839063ffffffff61183916565b600160a060020a0333166000908152600260205260408120549192509011156117f2576117836116456064610c8960075461177733610c4d565b9063ffffffff61076016565b600160a060020a0333811660009081526001602090815260408083209490945581546002909152908390205491169181156108fc02919051600060405180830381858888f1935050505015156117d857600080fd5b600160a060020a0333166000908152600260205260408120555b600160a060020a03331660009081526001602052604090205461181b908263ffffffff61183916565b600160a060020a0333166000908152600160205260409020555b5050565b60008282111561184557fe5b509003905600a165627a7a72305820a8090f9412a7d9c8f57e4257f36c53e68d08da3bbae797eb767bd2d9f8077a5f0029

Deployed Bytecode

0x6060604052600436106101875763ffffffff60e060020a60003504166303a19a4f811461021d5780630b98f9751461024257806318fe1a8d1461026c57806323a0fb021461028b5780632a501a43146102aa5780632c4e722e146102cc57806334fcf437146102df5780633f92edaf146102f55780634db67caf146103085780634f95e96014610327578063528976de14610346578063656b6b6b14610395578063679aefce146103b457806371f124c5146103c7578063724ef94c146103e65780637252bbf21461048357806375b4d78c146104a25780638da5cb5b146104b55780638eb5f58e146104e45780639d06583814610503578063a379298514610562578063a39a2b7614610581578063adc7612614610594578063b28fc973146105b3578063bcdd1e13146105d2578063beb0a416146105fa578063c13e285d14610684578063c311d04914610697578063c44412e3146106ad578063ea7ee010146106cf578063eb1cfa82146106f4578063f2fde38b1461070a578063f332a2451461072b575b600160a060020a0333166000908152600260205260409020546101b0903463ffffffff61074a16565b600160a060020a0333166000818152600260205260409020919091556005547fc4174c525ef524021f6e3727a9bbe7fa797780670e51c9cd76ceb8e5dfe6c97b90349061020490829063ffffffff61076016565b60405191825260208201526040908101905180910390a2005b341561022857600080fd5b61023061078f565b60405190815260200160405180910390f35b341561024d57600080fd5b610258600435610795565b604051901515815260200160405180910390f35b341561027757600080fd5b610258600160a060020a0360043516610805565b341561029657600080fd5b610258600160a060020a03600435166108a0565b34156102b557600080fd5b610258600160a060020a03600435166024356108c2565b34156102d757600080fd5b610230610985565b34156102ea57600080fd5b61025860043561098b565b341561030057600080fd5b610230610a2d565b341561031357600080fd5b610258600160a060020a0360043516610a33565b341561033257600080fd5b610230600160a060020a0360043516610a48565b341561035157600080fd5b6102586004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610a6b95505050505050565b34156103a057600080fd5b610230600160a060020a0360043516610c35565b34156103bf57600080fd5b610230610c47565b34156103d257600080fd5b610230600160a060020a0360043516610c4d565b34156103f157600080fd5b61025860048035600160a060020a031690604460248035908101908301358060208082020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650610c9595505050505050565b341561048e57600080fd5b610230600160a060020a0360043516610eac565b34156104ad57600080fd5b610230610ebe565b34156104c057600080fd5b6104c8610ec4565b604051600160a060020a03909116815260200160405180910390f35b34156104ef57600080fd5b610230600160a060020a0360043516610ed3565b341561050e57600080fd5b61025860048035600160a060020a03169060446024803590810190830135806020808202016040519081016040528093929190818152602001838360200280828437509496505093359350610ee592505050565b341561056d57600080fd5b610230600160a060020a036004351661100d565b341561058c57600080fd5b610230611028565b341561059f57600080fd5b610230600160a060020a036004351661102e565b34156105be57600080fd5b610230600160a060020a0360043516611078565b34156105dd57600080fd5b610258600160a060020a0360043581169060243516604435611093565b341561060557600080fd5b61060d6111bd565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610649578082015183820152602001610631565b50505050905090810190601f1680156106765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068f57600080fd5b6102306111f4565b34156106a257600080fd5b6102586004356111fa565b34156106b857600080fd5b610258600160a060020a03600435166024356112e5565b34156106da57600080fd5b610230600160a060020a03600435811690602435166113c1565b34156106ff57600080fd5b610258600435611444565b341561071557600080fd5b610729600160a060020a03600435166114b3565b005b341561073657600080fd5b610258600160a060020a036004351661156a565b60008282018381101561075957fe5b9392505050565b600082151561077157506000610789565b5081810281838281151561078157fe5b041461078957fe5b92915050565b60085481565b6000805433600160a060020a039081169116146107b157600080fd5b6007548214156107c057600080fd5b7fc233b8877183b2d7aeb5d3baf2b545240e5c94d7a1f5ed6938ff87a1cf95a2d16007548360405191825260208201526040908101905180910390a160079190915590565b6000805433600160a060020a0390811691161461082157600080fd5b600160a060020a03821660009081526003602052604090205460ff161561084757600080fd5b600160a060020a03821660008181526003602052604090819020805460ff191660011790557f5f9fbe3bc9355d7eb80002cf096327839eecbdf5ffc15955fbe7609433b18c55905160405180910390a25060015b919050565b600954600160a060020a03821660009081526004602052604090205410919050565b6000805433600160a060020a039081169116146108de57600080fd5b600160a060020a038316158015906108f65750600082115b151561090157600080fd5b600160a060020a03831660009081526001602052604090205461092a908363ffffffff61074a16565b600160a060020a0384166000818152600160205260409081902092909255907f17641426a9871fbd505cf22302be09d58b40768a741ae1b9a270bdb46ff72cf69084905190815260200160405180910390a250600192915050565b60055481565b60008054819033600160a060020a039081169116146109a957600080fd5b60055483141580156109bb5750600083115b15156109c657600080fd5b7f4ac9052a820bf4f8c02d7588587cae835573b5b99ea7ad4ca002f17f319f71866005548460405191825260208201526040908101905180910390a1506005829055670de0b6b3a7640000610a21818463ffffffff61160216565b60065550600192915050565b60085490565b60036020526000908152604090205460ff1681565b6000610789610a568361100d565b610a5f84610c4d565b9063ffffffff61074a16565b600080548190819033600160a060020a03908116911614610a8b57600080fd5b60085484511115610a9b57600080fd5b600091505b8351821015610c2e576000848381518110610ab757fe5b90602001906020020151600160a060020a031614158015610b125750600060026000868581518110610ae557fe5b90602001906020020151600160a060020a0316600160a060020a0316815260200190815260200160002054115b15610c235760026000858481518110610b2757fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020549050600060026000868581518110610b6657fe5b90602001906020020151600160a060020a03168152602081019190915260400160002055838281518110610b9657fe5b90602001906020020151600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610bd057600080fd5b838281518110610bdc57fe5b90602001906020020151600160a060020a03167fa171b6942063c6f2800ce40a780edce37baa2b618571b11eedd1e69e626e7d768260405190815260200160405180910390a25b600190910190610aa0565b5050919050565b60046020526000908152604090205481565b60055490565b600554600160a060020a038216600090815260026020526040812054909161078991670de0b6b3a764000091610c89919063ffffffff61076016565b9063ffffffff61160216565b6000806000859150600854855111158015610cb1575083518551145b8015610cd457508451610cc333610a48565b101580610cd45750610cd4866108a0565b8015610cf95750600160a060020a03861660009081526003602052604090205460ff16155b1515610d0457600080fd5b5060005b8451811015610e02576000858281518110610d1f57fe5b90602001906020020151600160a060020a031614158015610d5557506000848281518110610d4957fe5b90602001906020020151115b15610dfa5781600160a060020a03166323b872dd33878481518110610d7657fe5b90602001906020020151878581518110610d8c57fe5b9060200190602002015160405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610de557600080fd5b6102c65a03f11515610df657600080fd5b5050505b600101610d08565b610e0b866108a0565b15610e5857610e3a8551600160a060020a0388166000908152600460205260409020549063ffffffff61074a16565b600160a060020a038716600090815260046020526040902055610e62565b610e628551611617565b33600160a060020a03167f22a4421eda5c487da9a0a4a06f0c582468448c11c1d02478e2442686d8de589a865160405190815260200160405180910390a250600195945050505050565b60026020526000908152604090205481565b60075481565b600054600160a060020a031681565b60016020526000908152604090205481565b6000806000859150600854855111158015610f1757508451610f0633610a48565b101580610f175750610f17866108a0565b8015610f3c5750600160a060020a03861660009081526003602052604090205460ff16155b1515610f4757600080fd5b5060005b8451811015610e02576000858281518110610f6257fe5b90602001906020020151600160a060020a0316146110055781600160a060020a03166323b872dd33878481518110610f9657fe5b906020019060200201518760405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610ff057600080fd5b6102c65a03f1151561100157600080fd5b5050505b600101610f4b565b600160a060020a031660009081526001602052604090205490565b60065481565b6000611039826108a0565b1561107057600160a060020a0382166000908152600460205260409020546009546110699163ffffffff61183916565b905061089b565b506000919050565b600160a060020a031660009081526002602052604090205490565b60008054819033600160a060020a039081169116146110b157600080fd5b600160a060020a038516158015906110d15750600160a060020a03841615155b80156110dd5750600083115b15156110e857600080fd5b5083600160a060020a03811663a9059cbb858560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561114757600080fd5b6102c65a03f1151561115857600080fd5b50505060405180519050507ee763f7778b8ceef7270c89b7d1df1008b0e482da39c43831417733af96fb0d858585604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1506001949350505050565b60408051908101604052601681527f7777772e646170706c6561697264726f70732e636f6d00000000000000000000602082015281565b60095481565b600160a060020a03331660009081526002602052604081205481908390108015906112255750600083115b151561123057600080fd5b50600160a060020a033316600090815260026020526040902054829061125c908263ffffffff61183916565b600160a060020a03331660008181526002602052604090819020929092559082156108fc0290839051600060405180830381858888f1935050505015156112a257600080fd5b33600160a060020a03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405190815260200160405180910390a250919050565b6000805433600160a060020a0390811691161461130157600080fd5b600160a060020a038316158015906113325750600160a060020a038316600090815260016020526040902054829010155b151561133d57600080fd5b600160a060020a038316600090815260016020526040902054611366908363ffffffff61183916565b600160a060020a0384166000818152600160205260409081902092909255907fc1bc87fca69dd3948590175e7c7e66a498d583b1bf99540547fc38e7f10058599084905190815260200160405180910390a250600192915050565b600081600160a060020a03811663dd62ed3e8530856040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561142257600080fd5b6102c65a03f1151561143357600080fd5b505050604051805195945050505050565b6000805433600160a060020a0390811691161461146057600080fd5b606482101561146e57600080fd5b7f9b7e3ed6ece2694ef31c25bc941a429a17a30546dd406649a5b7178d76c215996008548360405191825260208201526040908101905180910390a150600855600190565b60005433600160a060020a039081169116146114ce57600080fd5b600160a060020a038116158015906114f45750600054600160a060020a03828116911614155b15156114ff57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805433600160a060020a0390811691161461158657600080fd5b600160a060020a03821660009081526003602052604090205460ff1615156115ad57600080fd5b600160a060020a03821660008181526003602052604090819020805460ff191690557fe9c9a473410d8fd0bb91117f70a4b750bce859ab398b18cc49160f5ff41d66e4905160405180910390a2506001919050565b6000818381151561160f57fe5b049392505050565b600061162233610c4d565b82116117245761166a6116456064610c896007548661076090919063ffffffff16565b600160a060020a0333166000908152600160205260409020549063ffffffff61074a16565b600160a060020a0333166000908152600160205260409020556006546116c09061169b90849063ffffffff61076016565b600160a060020a0333166000908152600260205260409020549063ffffffff61183916565b600160a060020a0333811660009081526002602052604081209290925590546006549116906108fc906116fa90859063ffffffff61076016565b9081150290604051600060405180830381858888f19350505050151561171f57600080fd5b611835565b61173d61173033610c4d565b839063ffffffff61183916565b600160a060020a0333166000908152600260205260408120549192509011156117f2576117836116456064610c8960075461177733610c4d565b9063ffffffff61076016565b600160a060020a0333811660009081526001602090815260408083209490945581546002909152908390205491169181156108fc02919051600060405180830381858888f1935050505015156117d857600080fd5b600160a060020a0333166000908152600260205260408120555b600160a060020a03331660009081526001602052604090205461181b908263ffffffff61183916565b600160a060020a0333166000908152600160205260409020555b5050565b60008282111561184557fe5b509003905600a165627a7a72305820a8090f9412a7d9c8f57e4257f36c53e68d08da3bbae797eb767bd2d9f8077a5f0029

Swarm Source

bzzr://a8090f9412a7d9c8f57e4257f36c53e68d08da3bbae797eb767bd2d9f8077a5f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.