ETH Price: $3,132.39 (+0.55%)
Gas: 3 Gwei

Contract

0xb5E5585D0057501c91c48094029a6F4FB10B5A01
 
Transaction Hash
Method
Block
From
To
Value
0x3552614b80446362019-06-28 6:05:161786 days ago1561701916IN
Raiden: Token Auction
0 ETH0.000126545
Transfer47064202017-12-10 4:44:352351 days ago1512881075IN
Raiden: Token Auction
100 ETH0.000448621
Transfer45876502017-11-20 9:40:032371 days ago1511170803IN
Raiden: Token Auction
0 ETH0.000448621
Transfer45617132017-11-16 5:59:452375 days ago1510811985IN
Raiden: Token Auction
0.05 ETH0.000106815
Transfer45611132017-11-16 3:26:442376 days ago1510802804IN
Raiden: Token Auction
0.01 ETH0.00044121
Transfer45408832017-11-12 21:03:232379 days ago1510520603IN
Raiden: Token Auction
1 ETH0.000448621
Claim Tokens45162902017-11-08 22:38:442383 days ago1510180724IN
Raiden: Token Auction
0 ETH0.0004601921
Claim Tokens45138562017-11-08 13:10:592383 days ago1510146659IN
Raiden: Token Auction
0 ETH0.000022961
Claim Tokens45138542017-11-08 13:10:272383 days ago1510146627IN
Raiden: Token Auction
0 ETH0.00011482
Proxy Claim Toke...45137912017-11-08 12:58:352383 days ago1510145915IN
Raiden: Token Auction
0 ETH0.000005870.1
Claim Tokens45137682017-11-08 12:53:182383 days ago1510145598IN
Raiden: Token Auction
0 ETH0.000362015
Claim Tokens45135562017-11-08 12:01:032383 days ago1510142463IN
Raiden: Token Auction
0 ETH0.000044982
Proxy Claim Toke...45135382017-11-08 11:58:292383 days ago1510142309IN
Raiden: Token Auction
0 ETH0.000047822
Transfer44763232017-11-02 12:23:492389 days ago1509625429IN
Raiden: Token Auction
2.5 ETH0.000448621
Transfer44717302017-11-01 18:31:232390 days ago1509561083IN
Raiden: Token Auction
1.1 ETH0.00044121
Transfer44711222017-11-01 16:02:202390 days ago1509552140IN
Raiden: Token Auction
0.1 ETH0.000448621
Transfer44710182017-11-01 15:38:082390 days ago1509550688IN
Raiden: Token Auction
2.5 ETH0.0004272420
Transfer44710182017-11-01 15:38:082390 days ago1509550688IN
Raiden: Token Auction
2.5 ETH0.0021362100
Transfer44710172017-11-01 15:37:372390 days ago1509550657IN
Raiden: Token Auction
2 ETH0.0006408630
Transfer44710152017-11-01 15:36:462390 days ago1509550606IN
Raiden: Token Auction
2.5 ETH0.000224310.5
Transfer44710122017-11-01 15:35:422390 days ago1509550542IN
Raiden: Token Auction
2.5 ETH0.0004272420
Transfer44710102017-11-01 15:35:032390 days ago1509550503IN
Raiden: Token Auction
2.5 ETH0.0004272420
Transfer44710032017-11-01 15:31:342390 days ago1509550294IN
Raiden: Token Auction
2.5 ETH0.0006408630
Transfer44708172017-11-01 14:48:372390 days ago1509547717IN
Raiden: Token Auction
1 ETH0.000224310.5
Transfer44708082017-11-01 14:46:022390 days ago1509547562IN
Raiden: Token Auction
1 ETH0.000002130.1
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
54504542018-04-16 10:44:332224 days ago1523875473
Raiden: Token Auction
0 ETH
44702382017-11-01 12:32:102390 days ago1509539530
Raiden: Token Auction
2 ETH
44702382017-11-01 12:32:102390 days ago1509539530
Raiden: Token Auction
2.5 ETH
44702372017-11-01 12:31:532390 days ago1509539513
Raiden: Token Auction
0.5 ETH
44702362017-11-01 12:31:412390 days ago1509539501
Raiden: Token Auction
1 ETH
44702302017-11-01 12:30:272390 days ago1509539427
Raiden: Token Auction
1.5 ETH
44702262017-11-01 12:29:432390 days ago1509539383
Raiden: Token Auction
50 ETH
44702232017-11-01 12:29:192390 days ago1509539359
Raiden: Token Auction
2.5 ETH
44702212017-11-01 12:28:502390 days ago1509539330
Raiden: Token Auction
0.8 ETH
44702172017-11-01 12:28:112390 days ago1509539291
Raiden: Token Auction
1 ETH
44702172017-11-01 12:28:112390 days ago1509539291
Raiden: Token Auction
1.86 ETH
44702152017-11-01 12:27:552390 days ago1509539275
Raiden: Token Auction
12.25363375 ETH
44702112017-11-01 12:27:212390 days ago1509539241
Raiden: Token Auction
2.5 ETH
44702102017-11-01 12:27:132390 days ago1509539233
Raiden: Token Auction
2.6 ETH
44702072017-11-01 12:26:452390 days ago1509539205
Raiden: Token Auction
84 ETH
44702062017-11-01 12:26:382390 days ago1509539198
Raiden: Token Auction
2.5 ETH
44701982017-11-01 12:25:152390 days ago1509539115
Raiden: Token Auction
3 ETH
44701972017-11-01 12:24:392390 days ago1509539079
Raiden: Token Auction
0.25 ETH
44701962017-11-01 12:24:232390 days ago1509539063
Raiden: Token Auction
2.5 ETH
44701962017-11-01 12:24:232390 days ago1509539063
Raiden: Token Auction
2.5 ETH
44701952017-11-01 12:24:122390 days ago1509539052
Raiden: Token Auction
1.49 ETH
44701942017-11-01 12:23:182390 days ago1509538998
Raiden: Token Auction
1,000 ETH
44701942017-11-01 12:23:182390 days ago1509538998
Raiden: Token Auction
1,000 ETH
44701922017-11-01 12:22:382390 days ago1509538958
Raiden: Token Auction
2.5 ETH
44701902017-11-01 12:22:182390 days ago1509538938
Raiden: Token Auction
7 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DutchAuction

Compiler Version
v0.4.17+commit.bdeb9e52

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2017-10-18
*/

pragma solidity ^0.4.17;

/// @title ERC223ReceivingContract - Standard contract implementation for compatibility with ERC223 tokens.
contract ERC223ReceivingContract {

    /// @dev Function that is called when a user or another contract wants to transfer funds.
    /// @param _from Transaction initiator, analogue of msg.sender
    /// @param _value Number of tokens to transfer.
    /// @param _data Data containig a function signature and/or parameters
    function tokenFallback(address _from, uint256 _value, bytes _data) public;
}

contract Token {
    /*
     * Implements ERC 20 standard.
     * https://github.com/ethereum/EIPs/blob/f90864a3d2b2b45c4decf95efd26b3f0c276051a/EIPS/eip-20-token-standard.md
     * https://github.com/ethereum/EIPs/issues/20
     *
     *  Added support for the ERC 223 "tokenFallback" method in a "transfer" function with a payload.
     *  https://github.com/ethereum/EIPs/issues/223
     */

    /*
     * This is a slight change to the ERC20 base standard.
     * function totalSupply() constant returns (uint256 supply);
     * is replaced with:
     * uint256 public totalSupply;
     * This automatically creates a getter function for the totalSupply.
     * This is moved to the base contract since public getter functions are not
     * currently recognised as an implementation of the matching abstract
     * function by the compiler.
     */
    uint256 public totalSupply;

    /*
     * ERC 20
     */
    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);

    /*
     * ERC 223
     */
    function transfer(address _to, uint256 _value, bytes _data) public returns (bool success);

    /*
     * Events
     */
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    // There is no ERC223 compatible Transfer event, with `_data` included.
}


/// @title Standard token contract - Standard token implementation.
contract StandardToken is Token {

    /*
     * Data structures
     */
    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;

    /*
     * Public functions
     */
    /// @notice Send `_value` tokens to `_to` from `msg.sender`.
    /// @dev Transfers sender's tokens to a given address. Returns success.
    /// @param _to Address of token receiver.
    /// @param _value Number of tokens to transfer.
    /// @return Returns success of function call.
    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != 0x0);
        require(_to != address(this));
        require(balances[msg.sender] >= _value);
        require(balances[_to] + _value >= balances[_to]);

        balances[msg.sender] -= _value;
        balances[_to] += _value;

        Transfer(msg.sender, _to, _value);

        return true;
    }

    /// @notice Send `_value` tokens to `_to` from `msg.sender` and trigger
    /// tokenFallback if sender is a contract.
    /// @dev Function that is called when a user or another contract wants to transfer funds.
    /// @param _to Address of token receiver.
    /// @param _value Number of tokens to transfer.
    /// @param _data Data to be sent to tokenFallback
    /// @return Returns success of function call.
    function transfer(
        address _to,
        uint256 _value,
        bytes _data)
        public
        returns (bool)
    {
        require(transfer(_to, _value));

        uint codeLength;

        assembly {
            // Retrieve the size of the code on target address, this needs assembly.
            codeLength := extcodesize(_to)
        }

        if (codeLength > 0) {
            ERC223ReceivingContract receiver = ERC223ReceivingContract(_to);
            receiver.tokenFallback(msg.sender, _value, _data);
        }

        return true;
    }

    /// @notice Transfer `_value` tokens from `_from` to `_to` if `msg.sender` is allowed.
    /// @dev Allows for an approved third party to transfer tokens from one
    /// address to another. Returns success.
    /// @param _from Address from where tokens are withdrawn.
    /// @param _to Address to where tokens are sent.
    /// @param _value Number of tokens to transfer.
    /// @return Returns success of function call.
    function transferFrom(address _from, address _to, uint256 _value)
        public
        returns (bool)
    {
        require(_from != 0x0);
        require(_to != 0x0);
        require(_to != address(this));
        require(balances[_from] >= _value);
        require(allowed[_from][msg.sender] >= _value);
        require(balances[_to] + _value >= balances[_to]);

        balances[_to] += _value;
        balances[_from] -= _value;
        allowed[_from][msg.sender] -= _value;

        Transfer(_from, _to, _value);

        return true;
    }

    /// @notice Allows `_spender` to transfer `_value` tokens from `msg.sender` to any address.
    /// @dev Sets approved amount of tokens for spender. Returns success.
    /// @param _spender Address of allowed account.
    /// @param _value Number of approved tokens.
    /// @return Returns success of function call.
    function approve(address _spender, uint256 _value) public returns (bool) {
        require(_spender != 0x0);

        // To change the approve amount you first have to reduce the addresses`
        // allowance to zero by calling `approve(_spender, 0)` if it is not
        // already 0 to mitigate the race condition described here:
        // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
        require(_value == 0 || allowed[msg.sender][_spender] == 0);

        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    /*
     * Read functions
     */
    /// @dev Returns number of allowed tokens that a spender can transfer on
    /// behalf of a token owner.
    /// @param _owner Address of token owner.
    /// @param _spender Address of token spender.
    /// @return Returns remaining allowance for spender.
    function allowance(address _owner, address _spender)
        constant
        public
        returns (uint256)
    {
        return allowed[_owner][_spender];
    }

    /// @dev Returns number of tokens owned by the given address.
    /// @param _owner Address of token owner.
    /// @return Returns balance of owner.
    function balanceOf(address _owner) constant public returns (uint256) {
        return balances[_owner];
    }
}


/// @title Raiden Token
contract RaidenToken is StandardToken {

    /*
     *  Terminology:
     *  1 token unit = Rei
     *  1 token = RDN = Rei * multiplier
     *  multiplier set from token's number of decimals (i.e. 10 ** decimals)
     */

    /*
     *  Token metadata
     */
    string constant public name = "Raiden Token";
    string constant public symbol = "RDN";
    uint8 constant public decimals = 18;
    uint constant multiplier = 10 ** uint(decimals);

    event Deployed(uint indexed _total_supply);
    event Burnt(
        address indexed _receiver,
        uint indexed _num,
        uint indexed _total_supply
    );

    /*
     *  Public functions
     */
    /// @dev Contract constructor function sets dutch auction contract address
    /// and assigns all tokens to dutch auction.
    /// @param auction_address Address of dutch auction contract.
    /// @param wallet_address Address of wallet.
    /// @param initial_supply Number of initially provided token units (Rei).
    function RaidenToken(
        address auction_address,
        address wallet_address,
        uint initial_supply)
        public
    {
        // Auction address should not be null.
        require(auction_address != 0x0);
        require(wallet_address != 0x0);

        // Initial supply is in Rei
        require(initial_supply > multiplier);

        // Total supply of Rei at deployment
        totalSupply = initial_supply;

        balances[auction_address] = initial_supply / 2;
        balances[wallet_address] = initial_supply / 2;

        Transfer(0x0, auction_address, balances[auction_address]);
        Transfer(0x0, wallet_address, balances[wallet_address]);

        Deployed(totalSupply);

        assert(totalSupply == balances[auction_address] + balances[wallet_address]);
    }

    /// @notice Allows `msg.sender` to simply destroy `num` token units (Rei). This means the total
    /// token supply will decrease.
    /// @dev Allows to destroy token units (Rei).
    /// @param num Number of token units (Rei) to burn.
    function burn(uint num) public {
        require(num > 0);
        require(balances[msg.sender] >= num);
        require(totalSupply >= num);

        uint pre_balance = balances[msg.sender];

        balances[msg.sender] -= num;
        totalSupply -= num;
        Burnt(msg.sender, num, totalSupply);
        Transfer(msg.sender, 0x0, num);

        assert(balances[msg.sender] == pre_balance - num);
    }

}


/// @title Dutch auction contract - distribution of a fixed number of tokens using an auction.
/// The contract code is inspired by the Gnosis auction contract. Main difference is that the
/// auction ends if a fixed number of tokens was sold.
contract DutchAuction {
    /*
     * Auction for the RDN Token.
     *
     * Terminology:
     * 1 token unit = Rei
     * 1 token = RDN = Rei * token_multiplier
     * token_multiplier set from token's number of decimals (i.e. 10 ** decimals)
     */

    // Wait 7 days after the end of the auction, before anyone can claim tokens
    uint constant public token_claim_waiting_period = 7 days;

    // Bid value over which the address has to be whitelisted
    // At deployment moment, less than 1k$
    uint constant public bid_threshold = 2.5 ether;

    /*
     * Storage
     */

    RaidenToken public token;
    address public owner_address;
    address public wallet_address;
    address public whitelister_address;

    // Price decay function parameters to be changed depending on the desired outcome

    // Starting price in WEI; e.g. 2 * 10 ** 18
    uint public price_start;

    // Divisor constant; e.g. 524880000
    uint public price_constant;

    // Divisor exponent; e.g. 3
    uint32 public price_exponent;

    // For calculating elapsed time for price
    uint public start_time;
    uint public end_time;
    uint public start_block;

    // Keep track of all ETH received in the bids
    uint public received_wei;

    // Keep track of cumulative ETH funds for which the tokens have been claimed
    uint public funds_claimed;

    uint public token_multiplier;

    // Total number of Rei (RDN * token_multiplier) that will be auctioned
    uint public num_tokens_auctioned;

    // Wei per RDN (Rei * token_multiplier)
    uint public final_price;

    // Bidder address => bid value
    mapping (address => uint) public bids;

    // Whitelist for addresses that want to bid more than bid_threshold
    mapping (address => bool) public whitelist;

    Stages public stage;

    /*
     * Enums
     */
    enum Stages {
        AuctionDeployed,
        AuctionSetUp,
        AuctionStarted,
        AuctionEnded,
        TokensDistributed
    }

    /*
     * Modifiers
     */
    modifier atStage(Stages _stage) {
        require(stage == _stage);
        _;
    }

    modifier isOwner() {
        require(msg.sender == owner_address);
        _;
    }

    modifier isWhitelister() {
        require(msg.sender == whitelister_address);
        _;
    }

    /*
     * Events
     */

    event Deployed(
        uint indexed _price_start,
        uint indexed _price_constant,
        uint32 indexed _price_exponent
    );
    event Setup();
    event AuctionStarted(uint indexed _start_time, uint indexed _block_number);
    event BidSubmission(
        address indexed _sender,
        uint _amount,
        uint _missing_funds
    );
    event ClaimedTokens(address indexed _recipient, uint _sent_amount);
    event AuctionEnded(uint _final_price);
    event TokensDistributed();

    /*
     * Public functions
     */

    /// @dev Contract constructor function sets the starting price, divisor constant and
    /// divisor exponent for calculating the Dutch Auction price.
    /// @param _wallet_address Wallet address to which all contributed ETH will be forwarded.
    /// @param _price_start High price in WEI at which the auction starts.
    /// @param _price_constant Auction price divisor constant.
    /// @param _price_exponent Auction price divisor exponent.
    function DutchAuction(
        address _wallet_address,
        address _whitelister_address,
        uint _price_start,
        uint _price_constant,
        uint32 _price_exponent)
        public
    {
        require(_wallet_address != 0x0);
        require(_whitelister_address != 0x0);
        wallet_address = _wallet_address;
        whitelister_address = _whitelister_address;

        owner_address = msg.sender;
        stage = Stages.AuctionDeployed;
        changeSettings(_price_start, _price_constant, _price_exponent);
        Deployed(_price_start, _price_constant, _price_exponent);
    }

    /// @dev Fallback function for the contract, which calls bid() if the auction has started.
    function () public payable atStage(Stages.AuctionStarted) {
        bid();
    }

    /// @notice Set `_token_address` as the token address to be used in the auction.
    /// @dev Setup function sets external contracts addresses.
    /// @param _token_address Token address.
    function setup(address _token_address) public isOwner atStage(Stages.AuctionDeployed) {
        require(_token_address != 0x0);
        token = RaidenToken(_token_address);

        // Get number of Rei (RDN * token_multiplier) to be auctioned from token auction balance
        num_tokens_auctioned = token.balanceOf(address(this));

        // Set the number of the token multiplier for its decimals
        token_multiplier = 10 ** uint(token.decimals());

        stage = Stages.AuctionSetUp;
        Setup();
    }

    /// @notice Set `_price_start`, `_price_constant` and `_price_exponent` as
    /// the new starting price, price divisor constant and price divisor exponent.
    /// @dev Changes auction price function parameters before auction is started.
    /// @param _price_start Updated start price.
    /// @param _price_constant Updated price divisor constant.
    /// @param _price_exponent Updated price divisor exponent.
    function changeSettings(
        uint _price_start,
        uint _price_constant,
        uint32 _price_exponent)
        internal
    {
        require(stage == Stages.AuctionDeployed || stage == Stages.AuctionSetUp);
        require(_price_start > 0);
        require(_price_constant > 0);

        price_start = _price_start;
        price_constant = _price_constant;
        price_exponent = _price_exponent;
    }

    /// @notice Adds account addresses to whitelist.
    /// @dev Adds account addresses to whitelist.
    /// @param _bidder_addresses Array of addresses.
    function addToWhitelist(address[] _bidder_addresses) public isWhitelister {
        for (uint32 i = 0; i < _bidder_addresses.length; i++) {
            whitelist[_bidder_addresses[i]] = true;
        }
    }

    /// @notice Removes account addresses from whitelist.
    /// @dev Removes account addresses from whitelist.
    /// @param _bidder_addresses Array of addresses.
    function removeFromWhitelist(address[] _bidder_addresses) public isWhitelister {
        for (uint32 i = 0; i < _bidder_addresses.length; i++) {
            whitelist[_bidder_addresses[i]] = false;
        }
    }

    /// @notice Start the auction.
    /// @dev Starts auction and sets start_time.
    function startAuction() public isOwner atStage(Stages.AuctionSetUp) {
        stage = Stages.AuctionStarted;
        start_time = now;
        start_block = block.number;
        AuctionStarted(start_time, start_block);
    }

    /// @notice Finalize the auction - sets the final RDN token price and changes the auction
    /// stage after no bids are allowed anymore.
    /// @dev Finalize auction and set the final RDN token price.
    function finalizeAuction() public atStage(Stages.AuctionStarted)
    {
        // Missing funds should be 0 at this point
        uint missing_funds = missingFundsToEndAuction();
        require(missing_funds == 0);

        // Calculate the final price = WEI / RDN = WEI / (Rei / token_multiplier)
        // Reminder: num_tokens_auctioned is the number of Rei (RDN * token_multiplier) that are auctioned
        final_price = token_multiplier * received_wei / num_tokens_auctioned;

        end_time = now;
        stage = Stages.AuctionEnded;
        AuctionEnded(final_price);

        assert(final_price > 0);
    }

    /// --------------------------------- Auction Functions ------------------


    /// @notice Send `msg.value` WEI to the auction from the `msg.sender` account.
    /// @dev Allows to send a bid to the auction.
    function bid()
        public
        payable
        atStage(Stages.AuctionStarted)
    {
        require(msg.value > 0);
        require(bids[msg.sender] + msg.value <= bid_threshold || whitelist[msg.sender]);
        assert(bids[msg.sender] + msg.value >= msg.value);

        // Missing funds without the current bid value
        uint missing_funds = missingFundsToEndAuction();

        // We require bid values to be less than the funds missing to end the auction
        // at the current price.
        require(msg.value <= missing_funds);

        bids[msg.sender] += msg.value;
        received_wei += msg.value;

        // Send bid amount to wallet
        wallet_address.transfer(msg.value);

        BidSubmission(msg.sender, msg.value, missing_funds);

        assert(received_wei >= msg.value);
    }

    /// @notice Claim auction tokens for `msg.sender` after the auction has ended.
    /// @dev Claims tokens for `msg.sender` after auction. To be used if tokens can
    /// be claimed by beneficiaries, individually.
    function claimTokens() public atStage(Stages.AuctionEnded) returns (bool) {
        return proxyClaimTokens(msg.sender);
    }

    /// @notice Claim auction tokens for `receiver_address` after the auction has ended.
    /// @dev Claims tokens for `receiver_address` after auction has ended.
    /// @param receiver_address Tokens will be assigned to this address if eligible.
    function proxyClaimTokens(address receiver_address)
        public
        atStage(Stages.AuctionEnded)
        returns (bool)
    {
        // Waiting period after the end of the auction, before anyone can claim tokens
        // Ensures enough time to check if auction was finalized correctly
        // before users start transacting tokens
        require(now > end_time + token_claim_waiting_period);
        require(receiver_address != 0x0);

        if (bids[receiver_address] == 0) {
            return false;
        }

        // Number of Rei = bid_wei / Rei = bid_wei / (wei_per_RDN * token_multiplier)
        uint num = (token_multiplier * bids[receiver_address]) / final_price;

        // Due to final_price floor rounding, the number of assigned tokens may be higher
        // than expected. Therefore, the number of remaining unassigned auction tokens
        // may be smaller than the number of tokens needed for the last claimTokens call
        uint auction_tokens_balance = token.balanceOf(address(this));
        if (num > auction_tokens_balance) {
            num = auction_tokens_balance;
        }

        // Update the total amount of funds for which tokens have been claimed
        funds_claimed += bids[receiver_address];

        // Set receiver bid to 0 before assigning tokens
        bids[receiver_address] = 0;

        require(token.transfer(receiver_address, num));

        ClaimedTokens(receiver_address, num);

        // After the last tokens are claimed, we change the auction stage
        // Due to the above logic, rounding errors will not be an issue
        if (funds_claimed == received_wei) {
            stage = Stages.TokensDistributed;
            TokensDistributed();
        }

        assert(token.balanceOf(receiver_address) >= num);
        assert(bids[receiver_address] == 0);
        return true;
    }

    /// @notice Get the RDN price in WEI during the auction, at the time of
    /// calling this function. Returns `0` if auction has ended.
    /// Returns `price_start` before auction has started.
    /// @dev Calculates the current RDN token price in WEI.
    /// @return Returns WEI per RDN (token_multiplier * Rei).
    function price() public constant returns (uint) {
        if (stage == Stages.AuctionEnded ||
            stage == Stages.TokensDistributed) {
            return 0;
        }
        return calcTokenPrice();
    }

    /// @notice Get the missing funds needed to end the auction,
    /// calculated at the current RDN price in WEI.
    /// @dev The missing funds amount necessary to end the auction at the current RDN price in WEI.
    /// @return Returns the missing funds amount in WEI.
    function missingFundsToEndAuction() constant public returns (uint) {

        // num_tokens_auctioned = total number of Rei (RDN * token_multiplier) that is auctioned
        uint required_wei_at_price = num_tokens_auctioned * price() / token_multiplier;
        if (required_wei_at_price <= received_wei) {
            return 0;
        }

        // assert(required_wei_at_price - received_wei > 0);
        return required_wei_at_price - received_wei;
    }

    /*
     *  Private functions
     */

    /// @dev Calculates the token price (WEI / RDN) at the current timestamp
    /// during the auction; elapsed time = 0 before auction starts.
    /// Based on the provided parameters, the price does not change in the first
    /// `price_constant^(1/price_exponent)` seconds due to rounding.
    /// Rounding in `decay_rate` also produces values that increase instead of decrease
    /// in the beginning; these spikes decrease over time and are noticeable
    /// only in first hours. This should be calculated before usage.
    /// @return Returns the token price - Wei per RDN.
    function calcTokenPrice() constant private returns (uint) {
        uint elapsed;
        if (stage == Stages.AuctionStarted) {
            elapsed = now - start_time;
        }

        uint decay_rate = elapsed ** price_exponent / price_constant;
        return price_start * (1 + elapsed) / (1 + elapsed + decay_rate);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"num_tokens_auctioned","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"final_price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price_exponent","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"end_time","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"bid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"token_multiplier","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price_start","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bid_threshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"funds_claimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token_claim_waiting_period","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelister_address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bidder_addresses","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bids","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token_address","type":"address"}],"name":"setup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"startAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"received_wei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_bidder_addresses","type":"address[]"}],"name":"addToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner_address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"start_time","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price_constant","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"receiver_address","type":"address"}],"name":"proxyClaimTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"start_block","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"missingFundsToEndAuction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet_address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_wallet_address","type":"address"},{"name":"_whitelister_address","type":"address"},{"name":"_price_start","type":"uint256"},{"name":"_price_constant","type":"uint256"},{"name":"_price_exponent","type":"uint32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_price_start","type":"uint256"},{"indexed":true,"name":"_price_constant","type":"uint256"},{"indexed":true,"name":"_price_exponent","type":"uint32"}],"name":"Deployed","type":"event"},{"anonymous":false,"inputs":[],"name":"Setup","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_start_time","type":"uint256"},{"indexed":true,"name":"_block_number","type":"uint256"}],"name":"AuctionStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_missing_funds","type":"uint256"}],"name":"BidSubmission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_sent_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_final_price","type":"uint256"}],"name":"AuctionEnded","type":"event"},{"anonymous":false,"inputs":[],"name":"TokensDistributed","type":"event"}]

606060405234156200001057600080fd5b60405160a08062001cfa8339810160405280805190602001909190805190602001909190805190602001909190805190602001909190805190602001909190505060008573ffffffffffffffffffffffffffffffffffffffff16141515156200007857600080fd5b60008473ffffffffffffffffffffffffffffffffffffffff16141515156200009f57600080fd5b84600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160006101000a81548160ff021916908360048111156200018257fe5b0217905550620001a8838383620001e86401000000000262001962176401000000009004565b8063ffffffff1682847f386f36f3306fb418dd13e11a0f5b005c8b23a70fb5da6c18ab5123e5fe68598560405160405180910390a45050505050620002a6565b60006004811115620001f657fe5b601160009054906101000a900460ff1660048111156200021257fe5b1480620002465750600160048111156200022857fe5b601160009054906101000a900460ff1660048111156200024457fe5b145b15156200025257600080fd5b6000831115156200026257600080fd5b6000821115156200027257600080fd5b826004819055508160058190555080600660006101000a81548163ffffffff021916908363ffffffff160217905550505050565b611a4480620002b66000396000f3006060604052361561017e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303cc7b85146101be57806308b309e3146101e75780630c64a7391461021057806316243356146102455780631998aeef1461026e5780631e3359621461027857806329b4d111146102a15780632a887299146102ca5780632aefb7c5146102f357806348c54b9d1461031c5780634b7829f1146103495780634e01291814610372578063548db174146103c757806362ea82db1461042157806366d382031461046e5780636b64c769146104a75780637b10e717146104bc5780637f649783146104e557806380edef8e1461053f578063834ee417146105945780639b19251a146105bd5780639dbf05431461060e578063a035b1fe14610637578063aeaaaa0814610660578063b87fb3db146106b1578063c040e6b8146106da578063c5cd88db14610711578063e776a5b51461073a578063f77282ab1461078f578063fc0c546a146107a4575b600280600481111561018c57fe5b601160009054906101000a900460ff1660048111156101a757fe5b1415156101b357600080fd5b6101bb6107f9565b50005b34156101c957600080fd5b6101d1610a78565b6040518082815260200191505060405180910390f35b34156101f257600080fd5b6101fa610a7e565b6040518082815260200191505060405180910390f35b341561021b57600080fd5b610223610a84565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561025057600080fd5b610258610a9a565b6040518082815260200191505060405180910390f35b6102766107f9565b005b341561028357600080fd5b61028b610aa0565b6040518082815260200191505060405180910390f35b34156102ac57600080fd5b6102b4610aa6565b6040518082815260200191505060405180910390f35b34156102d557600080fd5b6102dd610aac565b6040518082815260200191505060405180910390f35b34156102fe57600080fd5b610306610ab8565b6040518082815260200191505060405180910390f35b341561032757600080fd5b61032f610abe565b604051808215151515815260200191505060405180910390f35b341561035457600080fd5b61035c610b04565b6040518082815260200191505060405180910390f35b341561037d57600080fd5b610385610b0b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d257600080fd5b61041f600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050610b31565b005b341561042c57600080fd5b610458600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c29565b6040518082815260200191505060405180910390f35b341561047957600080fd5b6104a5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c41565b005b34156104b257600080fd5b6104ba610f25565b005b34156104c757600080fd5b6104cf61101d565b6040518082815260200191505060405180910390f35b34156104f057600080fd5b61053d600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050611023565b005b341561054a57600080fd5b61055261111b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561059f57600080fd5b6105a7611141565b6040518082815260200191505060405180910390f35b34156105c857600080fd5b6105f4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611147565b604051808215151515815260200191505060405180910390f35b341561061957600080fd5b610621611167565b6040518082815260200191505060405180910390f35b341561064257600080fd5b61064a61116d565b6040518082815260200191505060405180910390f35b341561066b57600080fd5b610697600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111e3565b604051808215151515815260200191505060405180910390f35b34156106bc57600080fd5b6106c461175c565b6040518082815260200191505060405180910390f35b34156106e557600080fd5b6106ed611762565b604051808260048111156106fd57fe5b60ff16815260200191505060405180910390f35b341561071c57600080fd5b610724611775565b6040518082815260200191505060405180910390f35b341561074557600080fd5b61074d6117b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561079a57600080fd5b6107a26117d9565b005b34156107af57600080fd5b6107b76118b9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600280600481111561080957fe5b601160009054906101000a900460ff16600481111561082457fe5b14151561083057600080fd5b60003411151561083f57600080fd5b6722b1c8c1227a000034600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011115806108e05750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15156108eb57600080fd5b3434600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011015151561093857fe5b610940611775565b915081341115151561095157600080fd5b34600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555034600a60008282540192505081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501515610a1057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167fc9c6176cbf7c0a8c29655fe8ccbe5e28382ca11459d145223308723bfc6975453484604051808381526020018281526020019250505060405180910390a234600a5410151515610a7457fe5b5050565b600d5481565b600e5481565b600660009054906101000a900463ffffffff1681565b60085481565b600c5481565b60045481565b6722b1c8c1227a000081565b600b5481565b60006003806004811115610ace57fe5b601160009054906101000a900460ff166004811115610ae957fe5b141515610af557600080fd5b610afe336111e3565b91505090565b62093a8081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b8f57600080fd5b600090505b81518163ffffffff161015610c2557600060106000848463ffffffff16815181101515610bbd57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610b94565b5050565b600f6020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c9d57600080fd5b6000806004811115610cab57fe5b601160009054906101000a900460ff166004811115610cc657fe5b141515610cd257600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff1614151515610cf857600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610dfc57600080fd5b6102c65a03f11515610e0d57600080fd5b50505060405180519050600d819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610eaa57600080fd5b6102c65a03f11515610ebb57600080fd5b5050506040518051905060ff16600a0a600c819055506001601160006101000a81548160ff02191690836004811115610ef057fe5b02179055507f587930504fa5b1062f394d90f9dac9ecadd354ed23a97af9ea4e44dff4870a8460405160405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f8157600080fd5b6001806004811115610f8f57fe5b601160009054906101000a900460ff166004811115610faa57fe5b141515610fb657600080fd5b6002601160006101000a81548160ff02191690836004811115610fd557fe5b021790555042600781905550436009819055506009546007547ff8910119ddbef5440c54532457dfe8250a10ed39e583292818f44724b9e1344c60405160405180910390a350565b600a5481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561108157600080fd5b600090505b81518163ffffffff16101561111757600160106000848463ffffffff168151811015156110af57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611086565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60106020528060005260406000206000915054906101000a900460ff1681565b60055481565b60006003600481111561117c57fe5b601160009054906101000a900460ff16600481111561119757fe5b14806111c757506004808111156111aa57fe5b601160009054906101000a900460ff1660048111156111c557fe5b145b156111d557600090506111e0565b6111dd6118de565b90505b90565b600080600060038060048111156111f657fe5b601160009054906101000a900460ff16600481111561121157fe5b14151561121d57600080fd5b62093a80600854014211151561123257600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff161415151561125857600080fd5b6000600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156112a95760009350611754565b600e54600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c54028115156112f957fe5b0492506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156113c057600080fd5b6102c65a03f115156113d157600080fd5b505050604051805190509150818311156113e9578192505b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600b600082825401925050819055506000600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561154957600080fd5b6102c65a03f1151561155a57600080fd5b50505060405180519050151561156f57600080fd5b8473ffffffffffffffffffffffffffffffffffffffff167fe9aa550fd75d0d28e07fa9dd67d3ae705678776f6c4a75abd09534f93e7d7907846040518082815260200191505060405180910390a2600a54600b54141561161a576004601160006101000a81548160ff021916908360048111156115e857fe5b02179055507fcea85459abe456c560868e61c476933dcee35a72aba5f546e93715929a69618660405160405180910390a15b826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231876000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156116df57600080fd5b6102c65a03f115156116f057600080fd5b505050604051805190501015151561170457fe5b6000600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561174f57fe5b600193505b505050919050565b60095481565b601160009054906101000a900460ff1681565b600080600c5461178361116d565b600d540281151561179057fe5b049050600a54811115156117a757600091506117af565b600a54810391505b5090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060028060048111156117e957fe5b601160009054906101000a900460ff16600481111561180457fe5b14151561181057600080fd5b611818611775565b915060008214151561182957600080fd5b600d54600a54600c540281151561183c57fe5b04600e81905550426008819055506003601160006101000a81548160ff0219169083600481111561186957fe5b02179055507f45806e512b1f4f10e33e8b3cb64d1d11d998d8c554a95e0841fc1c701278bd5d600e546040518082815260200191505060405180910390a16000600e541115156118b557fe5b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600260048111156118f057fe5b601160009054906101000a900460ff16600481111561190b57fe5b141561191957600754420391505b600554600660009054906101000a900463ffffffff1663ffffffff16830a81151561194057fe5b049050808260010101826001016004540281151561195a57fe5b049250505090565b6000600481111561196f57fe5b601160009054906101000a900460ff16600481111561198a57fe5b14806119bb57506001600481111561199e57fe5b601160009054906101000a900460ff1660048111156119b957fe5b145b15156119c657600080fd5b6000831115156119d557600080fd5b6000821115156119e457600080fd5b826004819055508160058190555080600660006101000a81548163ffffffff021916908363ffffffff1602179055505050505600a165627a7a72305820c02791b2eab317ec1431d443a7209661995d304d4de51163c18e708c731a4759002900000000000000000000000000c7122633a4ef0bc72f7d02456ee2b11e97561e0000000000000000000000007f07a4a25863ff8445f28cd89b7228d91f2f818b0000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000000000000000000000000000000000005ddb19800000000000000000000000000000000000000000000000000000000000000003

Deployed Bytecode

0x6060604052361561017e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303cc7b85146101be57806308b309e3146101e75780630c64a7391461021057806316243356146102455780631998aeef1461026e5780631e3359621461027857806329b4d111146102a15780632a887299146102ca5780632aefb7c5146102f357806348c54b9d1461031c5780634b7829f1146103495780634e01291814610372578063548db174146103c757806362ea82db1461042157806366d382031461046e5780636b64c769146104a75780637b10e717146104bc5780637f649783146104e557806380edef8e1461053f578063834ee417146105945780639b19251a146105bd5780639dbf05431461060e578063a035b1fe14610637578063aeaaaa0814610660578063b87fb3db146106b1578063c040e6b8146106da578063c5cd88db14610711578063e776a5b51461073a578063f77282ab1461078f578063fc0c546a146107a4575b600280600481111561018c57fe5b601160009054906101000a900460ff1660048111156101a757fe5b1415156101b357600080fd5b6101bb6107f9565b50005b34156101c957600080fd5b6101d1610a78565b6040518082815260200191505060405180910390f35b34156101f257600080fd5b6101fa610a7e565b6040518082815260200191505060405180910390f35b341561021b57600080fd5b610223610a84565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561025057600080fd5b610258610a9a565b6040518082815260200191505060405180910390f35b6102766107f9565b005b341561028357600080fd5b61028b610aa0565b6040518082815260200191505060405180910390f35b34156102ac57600080fd5b6102b4610aa6565b6040518082815260200191505060405180910390f35b34156102d557600080fd5b6102dd610aac565b6040518082815260200191505060405180910390f35b34156102fe57600080fd5b610306610ab8565b6040518082815260200191505060405180910390f35b341561032757600080fd5b61032f610abe565b604051808215151515815260200191505060405180910390f35b341561035457600080fd5b61035c610b04565b6040518082815260200191505060405180910390f35b341561037d57600080fd5b610385610b0b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156103d257600080fd5b61041f600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050610b31565b005b341561042c57600080fd5b610458600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c29565b6040518082815260200191505060405180910390f35b341561047957600080fd5b6104a5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c41565b005b34156104b257600080fd5b6104ba610f25565b005b34156104c757600080fd5b6104cf61101d565b6040518082815260200191505060405180910390f35b34156104f057600080fd5b61053d600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050611023565b005b341561054a57600080fd5b61055261111b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561059f57600080fd5b6105a7611141565b6040518082815260200191505060405180910390f35b34156105c857600080fd5b6105f4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611147565b604051808215151515815260200191505060405180910390f35b341561061957600080fd5b610621611167565b6040518082815260200191505060405180910390f35b341561064257600080fd5b61064a61116d565b6040518082815260200191505060405180910390f35b341561066b57600080fd5b610697600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506111e3565b604051808215151515815260200191505060405180910390f35b34156106bc57600080fd5b6106c461175c565b6040518082815260200191505060405180910390f35b34156106e557600080fd5b6106ed611762565b604051808260048111156106fd57fe5b60ff16815260200191505060405180910390f35b341561071c57600080fd5b610724611775565b6040518082815260200191505060405180910390f35b341561074557600080fd5b61074d6117b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561079a57600080fd5b6107a26117d9565b005b34156107af57600080fd5b6107b76118b9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600280600481111561080957fe5b601160009054906101000a900460ff16600481111561082457fe5b14151561083057600080fd5b60003411151561083f57600080fd5b6722b1c8c1227a000034600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011115806108e05750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15156108eb57600080fd5b3434600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011015151561093857fe5b610940611775565b915081341115151561095157600080fd5b34600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555034600a60008282540192505081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501515610a1057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167fc9c6176cbf7c0a8c29655fe8ccbe5e28382ca11459d145223308723bfc6975453484604051808381526020018281526020019250505060405180910390a234600a5410151515610a7457fe5b5050565b600d5481565b600e5481565b600660009054906101000a900463ffffffff1681565b60085481565b600c5481565b60045481565b6722b1c8c1227a000081565b600b5481565b60006003806004811115610ace57fe5b601160009054906101000a900460ff166004811115610ae957fe5b141515610af557600080fd5b610afe336111e3565b91505090565b62093a8081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b8f57600080fd5b600090505b81518163ffffffff161015610c2557600060106000848463ffffffff16815181101515610bbd57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610b94565b5050565b600f6020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c9d57600080fd5b6000806004811115610cab57fe5b601160009054906101000a900460ff166004811115610cc657fe5b141515610cd257600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff1614151515610cf857600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610dfc57600080fd5b6102c65a03f11515610e0d57600080fd5b50505060405180519050600d819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610eaa57600080fd5b6102c65a03f11515610ebb57600080fd5b5050506040518051905060ff16600a0a600c819055506001601160006101000a81548160ff02191690836004811115610ef057fe5b02179055507f587930504fa5b1062f394d90f9dac9ecadd354ed23a97af9ea4e44dff4870a8460405160405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f8157600080fd5b6001806004811115610f8f57fe5b601160009054906101000a900460ff166004811115610faa57fe5b141515610fb657600080fd5b6002601160006101000a81548160ff02191690836004811115610fd557fe5b021790555042600781905550436009819055506009546007547ff8910119ddbef5440c54532457dfe8250a10ed39e583292818f44724b9e1344c60405160405180910390a350565b600a5481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561108157600080fd5b600090505b81518163ffffffff16101561111757600160106000848463ffffffff168151811015156110af57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611086565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60106020528060005260406000206000915054906101000a900460ff1681565b60055481565b60006003600481111561117c57fe5b601160009054906101000a900460ff16600481111561119757fe5b14806111c757506004808111156111aa57fe5b601160009054906101000a900460ff1660048111156111c557fe5b145b156111d557600090506111e0565b6111dd6118de565b90505b90565b600080600060038060048111156111f657fe5b601160009054906101000a900460ff16600481111561121157fe5b14151561121d57600080fd5b62093a80600854014211151561123257600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff161415151561125857600080fd5b6000600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156112a95760009350611754565b600e54600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c54028115156112f957fe5b0492506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156113c057600080fd5b6102c65a03f115156113d157600080fd5b505050604051805190509150818311156113e9578192505b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600b600082825401925050819055506000600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561154957600080fd5b6102c65a03f1151561155a57600080fd5b50505060405180519050151561156f57600080fd5b8473ffffffffffffffffffffffffffffffffffffffff167fe9aa550fd75d0d28e07fa9dd67d3ae705678776f6c4a75abd09534f93e7d7907846040518082815260200191505060405180910390a2600a54600b54141561161a576004601160006101000a81548160ff021916908360048111156115e857fe5b02179055507fcea85459abe456c560868e61c476933dcee35a72aba5f546e93715929a69618660405160405180910390a15b826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231876000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156116df57600080fd5b6102c65a03f115156116f057600080fd5b505050604051805190501015151561170457fe5b6000600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151561174f57fe5b600193505b505050919050565b60095481565b601160009054906101000a900460ff1681565b600080600c5461178361116d565b600d540281151561179057fe5b049050600a54811115156117a757600091506117af565b600a54810391505b5090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060028060048111156117e957fe5b601160009054906101000a900460ff16600481111561180457fe5b14151561181057600080fd5b611818611775565b915060008214151561182957600080fd5b600d54600a54600c540281151561183c57fe5b04600e81905550426008819055506003601160006101000a81548160ff0219169083600481111561186957fe5b02179055507f45806e512b1f4f10e33e8b3cb64d1d11d998d8c554a95e0841fc1c701278bd5d600e546040518082815260200191505060405180910390a16000600e541115156118b557fe5b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600260048111156118f057fe5b601160009054906101000a900460ff16600481111561190b57fe5b141561191957600754420391505b600554600660009054906101000a900463ffffffff1663ffffffff16830a81151561194057fe5b049050808260010101826001016004540281151561195a57fe5b049250505090565b6000600481111561196f57fe5b601160009054906101000a900460ff16600481111561198a57fe5b14806119bb57506001600481111561199e57fe5b601160009054906101000a900460ff1660048111156119b957fe5b145b15156119c657600080fd5b6000831115156119d557600080fd5b6000821115156119e457600080fd5b826004819055508160058190555080600660006101000a81548163ffffffff021916908363ffffffff1602179055505050505600a165627a7a72305820c02791b2eab317ec1431d443a7209661995d304d4de51163c18e708c731a47590029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000c7122633a4ef0bc72f7d02456ee2b11e97561e0000000000000000000000007f07a4a25863ff8445f28cd89b7228d91f2f818b0000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000000000000000000000000000000000005ddb19800000000000000000000000000000000000000000000000000000000000000003

-----Decoded View---------------
Arg [0] : _wallet_address (address): 0x00C7122633A4EF0BC72f7D02456EE2B11E97561e
Arg [1] : _whitelister_address (address): 0x7F07A4A25863FF8445F28CD89B7228d91F2f818B
Arg [2] : _price_start (uint256): 2000000000000000000
Arg [3] : _price_constant (uint256): 1574640000
Arg [4] : _price_exponent (uint32): 3

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000000c7122633a4ef0bc72f7d02456ee2b11e97561e
Arg [1] : 0000000000000000000000007f07a4a25863ff8445f28cd89b7228d91f2f818b
Arg [2] : 0000000000000000000000000000000000000000000000001bc16d674ec80000
Arg [3] : 000000000000000000000000000000000000000000000000000000005ddb1980
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003


Swarm Source

bzzr://c02791b2eab317ec1431d443a7209661995d304d4de51163c18e708c731a4759

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  ]
[ 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.