ETH Price: $3,647.93 (+1.11%)
 
Transaction Hash
Method
Block
From
To
Exit155094842022-09-10 15:16:51848 days ago1662823011IN
0x72a73495...e308FBe08
0 ETH0.0009524513.8572993
Transfer68379642018-12-06 17:57:052222 days ago1544119025IN
0x72a73495...e308FBe08
0.003 ETH0.001033458
Withdraw67968862018-11-29 22:44:472229 days ago1543531487IN
0x72a73495...e308FBe08
0 ETH0.000217525
Sell67968562018-11-29 22:37:202229 days ago1543531040IN
0x72a73495...e308FBe08
0 ETH0.000277035
Sell67958632018-11-29 18:51:382229 days ago1543517498IN
0x72a73495...e308FBe08
0 ETH0.000363669
Withdraw67772192018-11-26 16:44:302232 days ago1543250670IN
0x72a73495...e308FBe08
0 ETH0.000174024
Buy67733592018-11-26 1:22:462233 days ago1543195366IN
0x72a73495...e308FBe08
0.0047 ETH0.000532345
Withdraw66971752018-11-13 13:50:132245 days ago1542117013IN
0x72a73495...e308FBe08
0 ETH0.000217525
Withdraw66466592018-11-05 7:21:552254 days ago1541402515IN
0x72a73495...e308FBe08
0 ETH0.0005503312.65
Sell66466552018-11-05 7:20:432254 days ago1541402443IN
0x72a73495...e308FBe08
0 ETH0.0007646113.8
Sell66466442018-11-05 7:18:582254 days ago1541402338IN
0x72a73495...e308FBe08
0 ETH0.0007008912.65
Withdraw66256252018-11-01 20:22:212257 days ago1541103741IN
0x72a73495...e308FBe08
0 ETH0.000391549
Sell66255482018-11-01 20:04:272257 days ago1541102667IN
0x72a73495...e308FBe08
0 ETH0.000633669
Withdraw66234852018-11-01 11:54:332257 days ago1541073273IN
0x72a73495...e308FBe08
0 ETH0.000256549
Withdraw66091472018-10-30 3:36:362260 days ago1540870596IN
0x72a73495...e308FBe08
0 ETH0.000350218.05
Withdraw66055632018-10-29 13:31:102260 days ago1540819870IN
0x72a73495...e308FBe08
0 ETH0.0004350510
Sell66055592018-10-29 13:30:302260 days ago1540819830IN
0x72a73495...e308FBe08
0 ETH0.0004040710
Withdraw66018592018-10-28 22:49:412261 days ago1540766981IN
0x72a73495...e308FBe08
0 ETH0.000391549
Sell66017992018-10-28 22:33:572261 days ago1540766037IN
0x72a73495...e308FBe08
0 ETH0.0007202913
Reinvest66009112018-10-28 19:05:442261 days ago1540753544IN
0x72a73495...e308FBe08
0 ETH0.000287222.5
Withdraw66006292018-10-28 17:58:082261 days ago1540749488IN
0x72a73495...e308FBe08
0 ETH0.0217525500
Sell66006162018-10-28 17:54:382261 days ago1540749278IN
0x72a73495...e308FBe08
0 ETH0.0277035500
Sell66004822018-10-28 17:28:142261 days ago1540747694IN
0x72a73495...e308FBe08
0 ETH0.0013249657
Withdraw66003952018-10-28 17:07:122261 days ago1540746432IN
0x72a73495...e308FBe08
0 ETH0.0043505100
Withdraw65978522018-10-28 7:10:242262 days ago1540710624IN
0x72a73495...e308FBe08
0 ETH0.000130513
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
155094842022-09-10 15:16:51848 days ago1662823011
0x72a73495...e308FBe08
0.00009733 ETH
67968862018-11-29 22:44:472229 days ago1543531487
0x72a73495...e308FBe08
0.02030527 ETH
67772192018-11-26 16:44:302232 days ago1543250670
0x72a73495...e308FBe08
0.00378326 ETH
66971752018-11-13 13:50:132245 days ago1542117013
0x72a73495...e308FBe08
0.02802531 ETH
66466592018-11-05 7:21:552254 days ago1541402515
0x72a73495...e308FBe08
1.17575648 ETH
66256252018-11-01 20:22:212257 days ago1541103741
0x72a73495...e308FBe08
0.05942054 ETH
66234852018-11-01 11:54:332257 days ago1541073273
0x72a73495...e308FBe08
0.63935096 ETH
66091472018-10-30 3:36:362260 days ago1540870596
0x72a73495...e308FBe08
0.0559484 ETH
66055632018-10-29 13:31:102260 days ago1540819870
0x72a73495...e308FBe08
0.70357164 ETH
66018592018-10-28 22:49:412261 days ago1540766981
0x72a73495...e308FBe08
0.58039499 ETH
66006292018-10-28 17:58:082261 days ago1540749488
0x72a73495...e308FBe08
2.89941692 ETH
66003952018-10-28 17:07:122261 days ago1540746432
0x72a73495...e308FBe08
0.35090961 ETH
65978522018-10-28 7:10:242262 days ago1540710624
0x72a73495...e308FBe08
0.09947166 ETH
65969452018-10-28 3:34:062262 days ago1540697646
0x72a73495...e308FBe08
0.08075 ETH
65968422018-10-28 3:13:382262 days ago1540696418
0x72a73495...e308FBe08
0.00013277 ETH
65955862018-10-27 22:14:352262 days ago1540678475
0x72a73495...e308FBe08
0.06222352 ETH
65954782018-10-27 21:49:172262 days ago1540676957
0x72a73495...e308FBe08
0.02535647 ETH
65950782018-10-27 20:12:092262 days ago1540671129
0x72a73495...e308FBe08
0.02676566 ETH
65941082018-10-27 16:23:222262 days ago1540657402
0x72a73495...e308FBe08
3.70573333 ETH
65904722018-10-27 2:02:342263 days ago1540605754
0x72a73495...e308FBe08
0.05654383 ETH
65802032018-10-25 9:58:252264 days ago1540461505
0x72a73495...e308FBe08
0.05575221 ETH
65764482018-10-24 19:06:512265 days ago1540408011
0x72a73495...e308FBe08
0.65224817 ETH
65736142018-10-24 8:08:522266 days ago1540368532
0x72a73495...e308FBe08
0.00739304 ETH
65728392018-10-24 5:03:202266 days ago1540357400
0x72a73495...e308FBe08
0.12441823 ETH
65647232018-10-22 21:22:442267 days ago1540243364
0x72a73495...e308FBe08
0.26284182 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
P4

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-08-04
*/

pragma solidity ^0.4.21;

// File: contracts/P4RTYRelay.sol

/*
 * Visit: https://p4rty.io
 * Discord: https://discord.gg/7y3DHYF
 * Copyright Mako Labs LLC 2018 All Rights Reseerved
*/

interface P4RTYRelay {
    /**
    * @dev Will relay to internal implementation
    * @param beneficiary Token purchaser
    * @param tokenAmount Number of tokens to be minted
    */
    function relay(address beneficiary, uint256 tokenAmount) external;
}

// File: contracts/ReinvestProxy.sol

/*
 * Visit: https://p4rty.io
 * Discord: https://discord.gg/7y3DHYF
 * Copyright Mako Labs LLC 2018 All Rights Reseerved
*/
interface ReinvestProxy {

    /// @dev Converts all incoming ethereum to tokens for the caller,
    function reinvestFor(address customer) external payable;

}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    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 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

// File: openzeppelin-solidity/contracts/ownership/Whitelist.sol

/**
 * @title Whitelist
 * @dev The Whitelist contract has a whitelist of addresses, and provides basic authorization control functions.
 * @dev This simplifies the implementation of "user permissions".
 */
contract Whitelist is Ownable {
  mapping(address => bool) public whitelist;

  event WhitelistedAddressAdded(address addr);
  event WhitelistedAddressRemoved(address addr);

  /**
   * @dev Throws if called by any account that's not whitelisted.
   */
  modifier onlyWhitelisted() {
    require(whitelist[msg.sender]);
    _;
  }

  /**
   * @dev add an address to the whitelist
   * @param addr address
   * @return true if the address was added to the whitelist, false if the address was already in the whitelist
   */
  function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) {
    if (!whitelist[addr]) {
      whitelist[addr] = true;
      emit WhitelistedAddressAdded(addr);
      success = true;
    }
  }

  /**
   * @dev add addresses to the whitelist
   * @param addrs addresses
   * @return true if at least one address was added to the whitelist,
   * false if all addresses were already in the whitelist
   */
  function addAddressesToWhitelist(address[] addrs) onlyOwner public returns(bool success) {
    for (uint256 i = 0; i < addrs.length; i++) {
      if (addAddressToWhitelist(addrs[i])) {
        success = true;
      }
    }
  }

  /**
   * @dev remove an address from the whitelist
   * @param addr address
   * @return true if the address was removed from the whitelist,
   * false if the address wasn't in the whitelist in the first place
   */
  function removeAddressFromWhitelist(address addr) onlyOwner public returns(bool success) {
    if (whitelist[addr]) {
      whitelist[addr] = false;
      emit WhitelistedAddressRemoved(addr);
      success = true;
    }
  }

  /**
   * @dev remove addresses from the whitelist
   * @param addrs addresses
   * @return true if at least one address was removed from the whitelist,
   * false if all addresses weren't in the whitelist in the first place
   */
  function removeAddressesFromWhitelist(address[] addrs) onlyOwner public returns(bool success) {
    for (uint256 i = 0; i < addrs.length; i++) {
      if (removeAddressFromWhitelist(addrs[i])) {
        success = true;
      }
    }
  }

}

// File: contracts/P4.sol

/*
 * Visit: https://p4rty.io
 * Discord: https://discord.gg/7y3DHYF
 * Stable + DIVIS: Whale and Minow Friendly
 * Fees balanced for capital preservation for long term HODLERS
 * Active depositors rewarded with P4RTY tokens; sellers forgiveness, just 5%
 * 50% of ETH value in earned P4RTY token rewards
 * P4RTYRelay is notified on all dividend producing transactions
 *
 *
 * P4
 * The worry free way to earn ETH & P4RTY reward tokens
 *
 * -> What?
 * The first true Virtual Deposit Contract:
 * [✓] Pegged to ETH, P4 protects your ETH balance; .001 ETH per P4 token
 * [✓] The only VDC that is part of the P4RTY Entertainment Network
 * [✓] Earn ERC20 P4RTY tokens on all ETH deposit activities; send them to family and friends
 * [✓] Referrals permanently saved in contract; reliable income for supporters, at any scale
 * [✓] 15% dividends for token purchase, shared among all token holders.
 * [✓] 5% dividends for token selling, shared among all token holders.
 * [✓] 1% dividends for token transfer, shared among all token holders.
 * [✓] 4.5% of deposit on referrals.
 * [✓] 3% of deposit for maintenance fee on deposits for development, operations, and promotion
 * [✓] 100 tokens to activate referral links; .1 ETH
*/

contract P4 is Whitelist {


    /*=================================
    =            MODIFIERS            =
    =================================*/

    /// @dev Only people with tokens
    modifier onlyTokenHolders {
        require(myTokens() > 0);
        _;
    }

    /// @dev Only people with profits
    modifier onlyDivis {
        require(myDividends(true) > 0);
        _;
    }


    /*==============================
    =            EVENTS            =
    ==============================*/

    event onTokenPurchase(
        address indexed customerAddress,
        uint256 incomingEthereum,
        uint256 tokensMinted,
        address indexed referredBy,
        uint timestamp,
        uint256 price
    );

    event onTokenSell(
        address indexed customerAddress,
        uint256 tokensBurned,
        uint256 ethereumEarned,
        uint timestamp,
        uint256 price
    );

    event onReinvestment(
        address indexed customerAddress,
        uint256 ethereumReinvested,
        uint256 tokensMinted
    );

    event onReinvestmentProxy(
        address indexed customerAddress,
        address indexed destinationAddress,
        uint256 ethereumReinvested
    );

    event onWithdraw(
        address indexed customerAddress,
        uint256 ethereumWithdrawn
    );

    // ERC20
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 tokens
    );


    /*=====================================
    =            CONFIGURABLES            =
    =====================================*/

    /// @dev 15% dividends for token purchase
    uint256  internal entryFee_ = 15;

    /// @dev 1% dividends for token transfer
    uint256  internal transferFee_ = 1;

    /// @dev 5% dividends for token selling
    uint256  internal exitFee_ = 5;

    /// @dev 30% of entryFee_  is given to referrer
    uint256  internal referralFee_ = 30;

    /// @dev 20% of entryFee/exit fee is given to maintainer
    uint256  internal maintenanceFee = 20;
    address  internal maintenanceAddress;

    uint256 constant internal tokenRatio_ = 1000;
    uint256 constant internal magnitude = 2 ** 64;

    /// @dev proof of stake (defaults at 100 tokens)
    uint256 public stakingRequirement = 100e18;


    /*=================================
     =            DATASETS            =
     ================================*/

    // amount of shares for each address (scaled number)
    mapping(address => uint256) internal tokenBalanceLedger_;
    mapping(address => uint256) internal referralBalance_;
    mapping(address => int256) internal payoutsTo_;
    //on chain referral tracking
    mapping(address => address) public referrals;
    uint256 internal tokenSupply_;
    uint256 internal profitPerShare_;

    P4RTYRelay public relay;


    /*=======================================
    =            PUBLIC FUNCTIONS           =
    =======================================*/

    constructor(address relayAddress)  public {

        relay = P4RTYRelay(relayAddress);

        //assume caller as default
        updateMaintenanceAddress(msg.sender);
    }

    function updateMaintenanceAddress(address maintenance) onlyOwner public {
        maintenanceAddress = maintenance;
    }

    /// @dev Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any)
    function buyFor(address _customerAddress, address _referredBy) onlyWhitelisted public payable returns (uint256) {
        setReferral(_referredBy);
        return purchaseTokens(_customerAddress, msg.value);
    }

    /// @dev Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any)
    function buy(address _referredBy) public payable returns (uint256) {
        setReferral(_referredBy);
        return purchaseTokens(msg.sender, msg.value);
    }

    function setReferral(address _referredBy) internal {
        if(referrals[msg.sender]==0 && referrals[msg.sender]!=msg.sender){
            referrals[msg.sender]=_referredBy;
        }
    }

    /**
     * @dev Fallback function to handle ethereum that was send straight to the contract
     *  Unfortunately we cannot use a referral address this way.
     */
    function() payable public {
        purchaseTokens(msg.sender, msg.value);
    }

    /// @dev Converts all of caller's dividends to tokens.
    function reinvest() onlyDivis public {
        address _customerAddress = msg.sender;

        // fetch dividends
        uint256 _dividends = myDividends(false); // retrieve ref. bonus later in the code

        payoutsTo_[_customerAddress] +=  (int256) (_dividends * magnitude);

        // retrieve ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;

        // dispatch a buy order with the virtualized "withdrawn dividends"
        uint256 _tokens = purchaseTokens(_customerAddress, _dividends);

        // fire event
        emit onReinvestment(_customerAddress, _dividends, _tokens);
    }

    function reinvestByProxy(address _customerAddress) onlyWhitelisted public {
        // fetch dividends
        uint256 _dividends = dividendsOf(_customerAddress); // retrieve ref. bonus later in the code


        payoutsTo_[_customerAddress] +=  (int256) (_dividends * magnitude);

        // retrieve ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;

        // dispatch a buy order with the virtualized "withdrawn dividends"
        ReinvestProxy reinvestProxy =  ReinvestProxy(msg.sender);
        reinvestProxy.reinvestFor.value(_dividends)(_customerAddress);

        emit  onReinvestmentProxy(_customerAddress, msg.sender, _dividends);


    }

    /// @dev Alias of sell() and withdraw().
    function exit() external {
        // get token count for caller & sell them all
        address _customerAddress = msg.sender;
        uint256 _tokens = tokenBalanceLedger_[_customerAddress];
        if (_tokens > 0) sell(_tokens);

        // lambo delivery service
        withdraw();
    }

    /// @dev Withdraws all of the callers earnings.
    function withdraw() onlyDivis public {

        address _customerAddress = msg.sender;
        // setup data
        uint256 _dividends = myDividends(false); // get ref. bonus later in the code

        // update dividend tracker
        payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude);

        // add ref. bonus
        _dividends += referralBalance_[_customerAddress];
        referralBalance_[_customerAddress] = 0;

        // lambo delivery service
        _customerAddress.transfer(_dividends);

        // fire event
        emit onWithdraw(_customerAddress, _dividends);
    }


    /// @dev Liquifies tokens to ethereum.
    function sell(uint256 _amountOfTokens) onlyTokenHolders public {
        address _customerAddress = msg.sender;


        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);
        uint256 _tokens = _amountOfTokens;
        uint256 _ethereum = tokensToEthereum_(_tokens);


        uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
        uint256 _maintenance = SafeMath.div(SafeMath.mul(_undividedDividends,maintenanceFee),100);
        //maintenance and referral come out of the exitfee
        uint256 _dividends = SafeMath.sub(_undividedDividends, _maintenance);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _undividedDividends);

        // burn the sold tokens
        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens);
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens);

        // update dividends tracker
        int256 _updatedPayouts = (int256) (profitPerShare_ * _tokens + (_taxedEthereum * magnitude));
        payoutsTo_[_customerAddress] -= _updatedPayouts;


        //Apply maintenance fee as a referral
        referralBalance_[maintenanceAddress] = SafeMath.add(referralBalance_[maintenanceAddress], _maintenance);

        // dividing by zero is a bad idea
        if (tokenSupply_ > 0) {
            // update the amount of dividends per token
            profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_);
        }

        // fire event
        emit onTokenSell(_customerAddress, _tokens, _taxedEthereum, now, buyPrice());
    }


    /**
     * @dev Transfer tokens from the caller to a new holder.
     *  Remember, there's a 15% fee here as well.
     */
    function transfer(address _toAddress, uint256 _amountOfTokens) onlyTokenHolders external returns (bool){

        address _customerAddress = msg.sender;

        // make sure we have the requested tokens
        require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]);

        // withdraw all outstanding dividends first
        if (myDividends(true) > 0) {
            withdraw();
        }

        // liquify a percentage of the tokens that are transfered
        // these are dispersed to shareholders
        uint256 _tokenFee = SafeMath.div(SafeMath.mul(_amountOfTokens, transferFee_), 100);
        uint256 _taxedTokens = SafeMath.sub(_amountOfTokens, _tokenFee);
        uint256 _dividends = tokensToEthereum_(_tokenFee);

        // burn the fee tokens
        tokenSupply_ = SafeMath.sub(tokenSupply_, _tokenFee);

        // exchange tokens
        tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens);
        tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _taxedTokens);

        // update dividend trackers
        payoutsTo_[_customerAddress] -= (int256) (profitPerShare_ * _amountOfTokens);
        payoutsTo_[_toAddress] += (int256) (profitPerShare_ * _taxedTokens);

        // disperse dividends among holders
        profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_);

        // fire event
        emit Transfer(_customerAddress, _toAddress, _taxedTokens);

        // ERC20
        return true;
    }


    /*=====================================
    =      HELPERS AND CALCULATORS        =
    =====================================*/

    /**
     * @dev Method to view the current Ethereum stored in the contract
     *  Example: totalEthereumBalance()
     */
    function totalEthereumBalance() public view returns (uint256) {
        return address(this).balance;
    }

    /// @dev Retrieve the total token supply.
    function totalSupply() public view returns (uint256) {
        return tokenSupply_;
    }

    /// @dev Retrieve the tokens owned by the caller.
    function myTokens() public view returns (uint256) {
        address _customerAddress = msg.sender;
        return balanceOf(_customerAddress);
    }

    /**
     * @dev Retrieve the dividends owned by the caller.
     *  If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations.
     *  The reason for this, is that in the frontend, we will want to get the total divs (global + ref)
     *  But in the internal calculations, we want them separate.
     */
    /**
     * @dev Retrieve the dividends owned by the caller.
     *  If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations.
     *  The reason for this, is that in the frontend, we will want to get the total divs (global + ref)
     *  But in the internal calculations, we want them separate.
     */
    function myDividends(bool _includeReferralBonus) public view returns (uint256) {
        address _customerAddress = msg.sender;
        return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ;
    }

    /// @dev Retrieve the token balance of any single address.
    function balanceOf(address _customerAddress) public view returns (uint256) {
        return tokenBalanceLedger_[_customerAddress];
    }

    /// @dev Retrieve the dividend balance of any single address.
    function dividendsOf(address _customerAddress) public view returns (uint256) {
        return (uint256) ((int256) (profitPerShare_ * tokenBalanceLedger_[_customerAddress]) - payoutsTo_[_customerAddress]) / magnitude;
    }

    /// @dev Return the sell price of 1 individual token.
    function sellPrice() public view returns (uint256) {
        uint256 _ethereum = tokensToEthereum_(1e18);
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);

        return _taxedEthereum;

    }

    /// @dev Return the buy price of 1 individual token.
    function buyPrice() public view returns (uint256) {
        uint256 _ethereum = tokensToEthereum_(1e18);
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, entryFee_), 100);
        uint256 _taxedEthereum = SafeMath.add(_ethereum, _dividends);

        return _taxedEthereum;

    }

    /// @dev Function for the frontend to dynamically retrieve the price scaling of buy orders.
    function calculateTokensReceived(uint256 _ethereumToSpend) public view returns (uint256) {
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereumToSpend, entryFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);

        return _amountOfTokens;
    }

    /// @dev Function for the frontend to dynamically retrieve the price scaling of sell orders.
    function calculateEthereumReceived(uint256 _tokensToSell) public view returns (uint256) {
        require(_tokensToSell <= tokenSupply_);
        uint256 _ethereum = tokensToEthereum_(_tokensToSell);
        uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100);
        uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends);
        return _taxedEthereum;
    }


    /*==========================================
    =            INTERNAL FUNCTIONS            =
    ==========================================*/

    /// @dev Internal function to actually purchase the tokens.
    function purchaseTokens(address _customerAddress, uint256 _incomingEthereum) internal returns (uint256) {
        // data setup
        address _referredBy = referrals[_customerAddress];
        uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_incomingEthereum, entryFee_), 100);
        uint256 _maintenance = SafeMath.div(SafeMath.mul(_undividedDividends,maintenanceFee),100);
        uint256 _referralBonus = SafeMath.div(SafeMath.mul(_undividedDividends, referralFee_), 100);
        //maintenance and referral come out of the buyin
        uint256 _dividends = SafeMath.sub(_undividedDividends, SafeMath.add(_referralBonus,_maintenance));
        uint256 _taxedEthereum = SafeMath.sub(_incomingEthereum, _undividedDividends);
        uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum);
        uint256 _fee = _dividends * magnitude;
        uint256 _tokenAllocation = SafeMath.div(_incomingEthereum,2);


        // prevents overflow in the case that the pyramid somehow magically starts being used by everyone in the world
        // (or hackers)
        // and yes we know that the safemath function automatically rules out the "greater then" equasion.
        require(_amountOfTokens > 0 && SafeMath.add(_amountOfTokens, tokenSupply_) > tokenSupply_);

        //Apply maintenance fee as a referral
        referralBalance_[maintenanceAddress] = SafeMath.add(referralBalance_[maintenanceAddress], _maintenance);

        // is the user referred by a masternode?
        if (
        // is this a referred purchase?
            _referredBy != 0x0000000000000000000000000000000000000000 &&

            // no cheating!
            _referredBy != _customerAddress &&

            // does the referrer have at least X whole tokens?
            // i.e is the referrer a godly chad masternode
            tokenBalanceLedger_[_referredBy] >= stakingRequirement
        ) {
            // wealth redistribution
            referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus);
        } else {
            // no ref purchase
            // add the referral bonus back to the global dividends cake
            _dividends = SafeMath.add(_dividends, _referralBonus);
            _fee = _dividends * magnitude;
        }

        // we can't give people infinite ethereum
        if (tokenSupply_ > 0) {
            // add tokens to the pool
            tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens);

            // take the amount of dividends gained through this transaction, and allocates them evenly to each shareholder
            profitPerShare_ += (_dividends * magnitude / tokenSupply_);

            // calculate the amount of tokens the customer receives over his purchase
            _fee = _fee - (_fee - (_amountOfTokens * (_dividends * magnitude / tokenSupply_)));
        } else {
            // add tokens to the pool
            tokenSupply_ = _amountOfTokens;
        }

        // update circulating supply & the ledger address for the customer
        tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens);

        // Tells the contract that the buyer doesn't deserve dividends for the tokens before they owned them;
        // really i know you think you do but you don't
        int256 _updatedPayouts = (int256) (profitPerShare_ * _amountOfTokens - _fee);
        payoutsTo_[_customerAddress] += _updatedPayouts;

        //Notifying the relay is simple and should represent the total economic activity which is the _incomingEthereum
        //Every player is a customer and mints their own tokens when the buy or reinvest, relay P4RTY 50/50
        relay.relay(maintenanceAddress,_tokenAllocation);
        relay.relay(_customerAddress,_tokenAllocation);

        // fire event
        emit onTokenPurchase(_customerAddress, _incomingEthereum, _amountOfTokens, _referredBy, now, buyPrice());

        return _amountOfTokens;
    }

    /**
     * @dev Calculate Token price based on an amount of incoming ethereum
     *  It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     *  Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function ethereumToTokens_(uint256 _ethereum) internal pure returns (uint256) {
        return SafeMath.mul(_ethereum, tokenRatio_);
    }

    /**
     * @dev Calculate token sell value.
     *  It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation;
     *  Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function tokensToEthereum_(uint256 _tokens) internal pure returns (uint256) {
        return SafeMath.div(_tokens, tokenRatio_);
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ethereumToSpend","type":"uint256"}],"name":"calculateTokensReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokensToSell","type":"uint256"}],"name":"calculateEthereumReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"maintenance","type":"address"}],"name":"updateMaintenanceAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakingRequirement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addAddressToWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","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":"myTokens","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":"","type":"address"}],"name":"referrals","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_toAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"relay","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_customerAddress","type":"address"},{"name":"_referredBy","type":"address"}],"name":"buyFor","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"}],"name":"buy","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"reinvestByProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"relayAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"incomingEthereum","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"},{"indexed":true,"name":"referredBy","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"onTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"tokensBurned","type":"uint256"},{"indexed":false,"name":"ethereumEarned","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"}],"name":"onTokenSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumReinvested","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"}],"name":"onReinvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":true,"name":"destinationAddress","type":"address"},{"indexed":false,"name":"ethereumReinvested","type":"uint256"}],"name":"onReinvestmentProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"WhitelistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"WhitelistedAddressRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6080604052600f60025560016003556005600455601e600555601460065568056bc75e2d6310000060085534801561003657600080fd5b5060405160208061169283398101604052516000805433600160a060020a03199182168117909255600f8054909116600160a060020a0384161790556100849064010000000061008a810204565b506100c3565b600054600160a060020a031633146100a157600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b6115c0806100d26000396000f3006080604052600436106101735763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b811461018057806310d0ffdd146101b357806318160ddd146101cb57806322609373146101e057806324953eaa146101f8578063275893a914610261578063286dd3f5146102845780633ccfd60b146102a55780634b750334146102ba57806356d399e8146102cf578063688abbf7146102e45780636b2f4632146102fe57806370a08231146103135780637b9417c8146103345780638620410b146103555780638da5cb5b1461036a578063949e8acd1461039b5780639b19251a146103b05780639ca423b3146103d1578063a9059cbb146103f2578063b59589d114610416578063caa877e71461042b578063e2ec6ec314610445578063e4849b321461049a578063e9fad8ee146104b2578063f088d547146104c7578063f2fde38b146104db578063f9b04f72146104fc578063fdb5a03e1461051d575b61017d3334610532565b50005b34801561018c57600080fd5b506101a1600160a060020a036004351661095a565b60408051918252519081900360200190f35b3480156101bf57600080fd5b506101a1600435610998565b3480156101d757600080fd5b506101a16109cd565b3480156101ec57600080fd5b506101a16004356109d3565b34801561020457600080fd5b506040805160206004803580820135838102808601850190965280855261024d95369593946024949385019291829185019084908082843750949750610a109650505050505050565b604080519115158252519081900360200190f35b34801561026d57600080fd5b50610282600160a060020a0360043516610a6f565b005b34801561029057600080fd5b5061024d600160a060020a0360043516610ab5565b3480156102b157600080fd5b50610282610b4b565b3480156102c657600080fd5b506101a1610c1e565b3480156102db57600080fd5b506101a1610c5a565b3480156102f057600080fd5b506101a16004351515610c60565b34801561030a57600080fd5b506101a1610ca1565b34801561031f57600080fd5b506101a1600160a060020a0360043516610ca6565b34801561034057600080fd5b5061024d600160a060020a0360043516610cc1565b34801561036157600080fd5b506101a1610d5c565b34801561037657600080fd5b5061037f610d90565b60408051600160a060020a039092168252519081900360200190f35b3480156103a757600080fd5b506101a1610d9f565b3480156103bc57600080fd5b5061024d600160a060020a0360043516610db1565b3480156103dd57600080fd5b5061037f600160a060020a0360043516610dc6565b3480156103fe57600080fd5b5061024d600160a060020a0360043516602435610de1565b34801561042257600080fd5b5061037f610f85565b6101a1600160a060020a0360043581169060243516610f94565b34801561045157600080fd5b506040805160206004803580820135838102808601850190965280855261024d95369593946024949385019291829185019084908082843750949750610fce9650505050505050565b3480156104a657600080fd5b50610282600435611027565b3480156104be57600080fd5b506102826111ef565b6101a1600160a060020a036004351661121c565b3480156104e757600080fd5b50610282600160a060020a0360043516611231565b34801561050857600080fd5b50610282600160a060020a03600435166112c5565b34801561052957600080fd5b506102826113e4565b600160a060020a038083166000908152600c60205260408120546002549192169082908190819081908190819081908190819061057b90610574908e906114a0565b60646114c9565b985061058c6105748a6006546114a0565b975061059d6105748a6005546114a0565b96506105b2896105ad898b6114de565b6114eb565b95506105be8c8a6114eb565b94506105c9856114fd565b935068010000000000000000860292506105e48c60026114c9565b91506000841180156106005750600d546105fe85826114de565b115b151561060b57600080fd5b600754600160a060020a03166000908152600a602052604090205461063090896114de565b600754600160a060020a039081166000908152600a60205260409020919091558a161580159061067257508c600160a060020a03168a600160a060020a031614155b80156106985750600854600160a060020a038b1660009081526009602052604090205410155b156106de57600160a060020a038a166000908152600a60205260409020546106c090886114de565b600160a060020a038b166000908152600a60205260409020556106f9565b6106e886886114de565b955068010000000000000000860292505b6000600d54111561075d57610710600d54856114de565b600d81905568010000000000000000870281151561072a57fe5b600e8054929091049091019055600d5468010000000000000000870281151561074f57fe5b048402830383039250610763565b600d8490555b600160a060020a038d1660009081526009602052604090205461078690856114de565b600160a060020a03808f16600090815260096020908152604080832094909455600e54600b90915283822080549189028890039182019055600f5460075485517feeec0e2400000000000000000000000000000000000000000000000000000000815290851660048201526024810188905294519195509092169263eeec0e24926044808301939282900301818387803b15801561082357600080fd5b505af1158015610837573d6000803e3d6000fd5b50505050600f60009054906101000a9004600160a060020a0316600160a060020a031663eeec0e248e846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b1580156108cc57600080fd5b505af11580156108e0573d6000803e3d6000fd5b5050505089600160a060020a03168d600160a060020a03167f8032875b28d82ddbd303a9e4e5529d047a14ecb6290f80012a81b7e6227ff1ab8e8742610924610d5c565b604080519485526020850193909352838301919091526060830152519081900360800190a350919b9a5050505050505050505050565b600160a060020a0381166000908152600b60209081526040808320546009909252822054600e5468010000000000000000929102030490505b919050565b6000806000806109ad610574866002546114a0565b92506109b985846114eb565b91506109c4826114fd565b95945050505050565b600d5490565b600080600080600d5485111515156109ea57600080fd5b6109f38561150b565b9250610a04610574846004546114a0565b91506109c483836114eb565b600080548190600160a060020a03163314610a2a57600080fd5b5060005b8251811015610a6957610a578382815181101515610a4857fe5b90602001906020020151610ab5565b15610a6157600191505b600101610a2e565b50919050565b600054600160a060020a03163314610a8657600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a03163314610acd57600080fd5b600160a060020a03821660009081526001602052604090205460ff161561099357600160a060020a038216600081815260016020908152604091829020805460ff19169055815192835290517ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a9281900390910190a1506001919050565b6000806000610b5a6001610c60565b11610b6457600080fd5b339150610b716000610c60565b600160a060020a0383166000818152600b602090815260408083208054680100000000000000008702019055600a909152808220805490839055905193019350909183156108fc0291849190818181858888f19350505050158015610bda573d6000803e3d6000fd5b50604080518281529051600160a060020a038416917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a25050565b600080600080610c35670de0b6b3a764000061150b565b9250610c46610574846004546114a0565b9150610c5283836114eb565b949350505050565b60085481565b60003382610c7657610c718161095a565b610c9a565b600160a060020a0381166000908152600a6020526040902054610c988261095a565b015b9392505050565b303190565b600160a060020a031660009081526009602052604090205490565b60008054600160a060020a03163314610cd957600080fd5b600160a060020a03821660009081526001602052604090205460ff16151561099357600160a060020a038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f9281900390910190a1506001919050565b600080600080610d73670de0b6b3a764000061150b565b9250610d84610574846002546114a0565b9150610c5283836114de565b600054600160a060020a031681565b600033610dab81610ca6565b91505090565b60016020526000908152604090205460ff1681565b600c60205260009081526040902054600160a060020a031681565b600080600080600080610df2610d9f565b11610dfc57600080fd5b33600081815260096020526040902054909450861115610e1b57600080fd5b6000610e276001610c60565b1115610e3557610e35610b4b565b610e44610574876003546114a0565b9250610e5086846114eb565b9150610e5b8361150b565b9050610e69600d54846114eb565b600d55600160a060020a038416600090815260096020526040902054610e8f90876114eb565b600160a060020a038086166000908152600960205260408082209390935590891681522054610ebe90836114de565b600160a060020a03888116600081815260096020908152604080832095909555600e8054948a168352600b9091528482208054948c02909403909355825491815292909220805492850290920190915554600d54610f329190680100000000000000008402811515610f2c57fe5b046114de565b600e55604080518381529051600160a060020a03808a1692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35060019695505050505050565b600f54600160a060020a031681565b3360009081526001602052604081205460ff161515610fb257600080fd5b610fbb82611519565b610fc58334610532565b90505b92915050565b600080548190600160a060020a03163314610fe857600080fd5b5060005b8251811015610a6957611015838281518110151561100657fe5b90602001906020020151610cc1565b1561101f57600191505b600101610fec565b600080600080600080600080600061103d610d9f565b1161104757600080fd5b3360008181526009602052604090205490985089111561106657600080fd5b8896506110728761150b565b9550611083610574876004546114a0565b9450611094610574866006546114a0565b93506110a085856114eb565b92506110ac86866114eb565b91506110ba600d54886114eb565b600d55600160a060020a0388166000908152600960205260409020546110e090886114eb565b600160a060020a03808a16600090815260096020908152604080832094909455600e54600b82528483208054918d02680100000000000000008902019182900390556007549093168252600a9052919091205490915061114090856114de565b600754600160a060020a03166000908152600a6020526040812091909155600d54111561118957611185600e54600d54680100000000000000008602811515610f2c57fe5b600e555b87600160a060020a03167f8d3a0130073dbd54ab6ac632c05946df540553d3b514c9f8165b4ab7f2b1805e8884426111bf610d5c565b604080519485526020850193909352838301919091526060830152519081900360800190a2505050505050505050565b33600081815260096020526040812054908111156112105761121081611027565b611218610b4b565b5050565b600061122782611519565b610fc83334610532565b600054600160a060020a0316331461124857600080fd5b600160a060020a038116151561125d57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b33600090815260016020526040812054819060ff1615156112e557600080fd5b6112ee8361095a565b600160a060020a0384166000818152600b602090815260408083208054680100000000000000008702019055600a90915280822080549083905581517f6c61704800000000000000000000000000000000000000000000000000000000815260048101949094529051930194503393508392636c617048928692602480830193919282900301818588803b15801561138557600080fd5b505af1158015611399573d6000803e3d6000fd5b5050604080518681529051339450600160a060020a03881693507fb0c3654a9b0006eaf87cd1a772dc962fbcf10c9d3a29c48ec3a056b2a95155d692509081900360200190a3505050565b6000806000806113f46001610c60565b116113fe57600080fd5b33925061140b6000610c60565b600160a060020a0384166000908152600b602090815260408083208054680100000000000000008602019055600a909152812080549190550191506114508383610532565b905082600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588383604051808381526020018281526020019250505060405180910390a2505050565b60008215156114b157506000610fc8565b508181028183828115156114c157fe5b0414610fc857fe5b600081838115156114d657fe5b049392505050565b81810182811015610fc857fe5b6000828211156114f757fe5b50900390565b6000610fc8826103e86114a0565b6000610fc8826103e86114c9565b336000908152600c6020526040902054600160a060020a03161580156115565750336000818152600c6020526040902054600160a060020a031614155b1561159157336000908152600c60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b505600a165627a7a723058202049bfc2cb70f8eab78691f1042e1edfee55e5ee2ac1db26a9cf4b89db5f641400290000000000000000000000000a0a80cd0ff4f906ce7617a415787614a9651e1a

Deployed Bytecode

0x6080604052600436106101735763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b811461018057806310d0ffdd146101b357806318160ddd146101cb57806322609373146101e057806324953eaa146101f8578063275893a914610261578063286dd3f5146102845780633ccfd60b146102a55780634b750334146102ba57806356d399e8146102cf578063688abbf7146102e45780636b2f4632146102fe57806370a08231146103135780637b9417c8146103345780638620410b146103555780638da5cb5b1461036a578063949e8acd1461039b5780639b19251a146103b05780639ca423b3146103d1578063a9059cbb146103f2578063b59589d114610416578063caa877e71461042b578063e2ec6ec314610445578063e4849b321461049a578063e9fad8ee146104b2578063f088d547146104c7578063f2fde38b146104db578063f9b04f72146104fc578063fdb5a03e1461051d575b61017d3334610532565b50005b34801561018c57600080fd5b506101a1600160a060020a036004351661095a565b60408051918252519081900360200190f35b3480156101bf57600080fd5b506101a1600435610998565b3480156101d757600080fd5b506101a16109cd565b3480156101ec57600080fd5b506101a16004356109d3565b34801561020457600080fd5b506040805160206004803580820135838102808601850190965280855261024d95369593946024949385019291829185019084908082843750949750610a109650505050505050565b604080519115158252519081900360200190f35b34801561026d57600080fd5b50610282600160a060020a0360043516610a6f565b005b34801561029057600080fd5b5061024d600160a060020a0360043516610ab5565b3480156102b157600080fd5b50610282610b4b565b3480156102c657600080fd5b506101a1610c1e565b3480156102db57600080fd5b506101a1610c5a565b3480156102f057600080fd5b506101a16004351515610c60565b34801561030a57600080fd5b506101a1610ca1565b34801561031f57600080fd5b506101a1600160a060020a0360043516610ca6565b34801561034057600080fd5b5061024d600160a060020a0360043516610cc1565b34801561036157600080fd5b506101a1610d5c565b34801561037657600080fd5b5061037f610d90565b60408051600160a060020a039092168252519081900360200190f35b3480156103a757600080fd5b506101a1610d9f565b3480156103bc57600080fd5b5061024d600160a060020a0360043516610db1565b3480156103dd57600080fd5b5061037f600160a060020a0360043516610dc6565b3480156103fe57600080fd5b5061024d600160a060020a0360043516602435610de1565b34801561042257600080fd5b5061037f610f85565b6101a1600160a060020a0360043581169060243516610f94565b34801561045157600080fd5b506040805160206004803580820135838102808601850190965280855261024d95369593946024949385019291829185019084908082843750949750610fce9650505050505050565b3480156104a657600080fd5b50610282600435611027565b3480156104be57600080fd5b506102826111ef565b6101a1600160a060020a036004351661121c565b3480156104e757600080fd5b50610282600160a060020a0360043516611231565b34801561050857600080fd5b50610282600160a060020a03600435166112c5565b34801561052957600080fd5b506102826113e4565b600160a060020a038083166000908152600c60205260408120546002549192169082908190819081908190819081908190819061057b90610574908e906114a0565b60646114c9565b985061058c6105748a6006546114a0565b975061059d6105748a6005546114a0565b96506105b2896105ad898b6114de565b6114eb565b95506105be8c8a6114eb565b94506105c9856114fd565b935068010000000000000000860292506105e48c60026114c9565b91506000841180156106005750600d546105fe85826114de565b115b151561060b57600080fd5b600754600160a060020a03166000908152600a602052604090205461063090896114de565b600754600160a060020a039081166000908152600a60205260409020919091558a161580159061067257508c600160a060020a03168a600160a060020a031614155b80156106985750600854600160a060020a038b1660009081526009602052604090205410155b156106de57600160a060020a038a166000908152600a60205260409020546106c090886114de565b600160a060020a038b166000908152600a60205260409020556106f9565b6106e886886114de565b955068010000000000000000860292505b6000600d54111561075d57610710600d54856114de565b600d81905568010000000000000000870281151561072a57fe5b600e8054929091049091019055600d5468010000000000000000870281151561074f57fe5b048402830383039250610763565b600d8490555b600160a060020a038d1660009081526009602052604090205461078690856114de565b600160a060020a03808f16600090815260096020908152604080832094909455600e54600b90915283822080549189028890039182019055600f5460075485517feeec0e2400000000000000000000000000000000000000000000000000000000815290851660048201526024810188905294519195509092169263eeec0e24926044808301939282900301818387803b15801561082357600080fd5b505af1158015610837573d6000803e3d6000fd5b50505050600f60009054906101000a9004600160a060020a0316600160a060020a031663eeec0e248e846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b1580156108cc57600080fd5b505af11580156108e0573d6000803e3d6000fd5b5050505089600160a060020a03168d600160a060020a03167f8032875b28d82ddbd303a9e4e5529d047a14ecb6290f80012a81b7e6227ff1ab8e8742610924610d5c565b604080519485526020850193909352838301919091526060830152519081900360800190a350919b9a5050505050505050505050565b600160a060020a0381166000908152600b60209081526040808320546009909252822054600e5468010000000000000000929102030490505b919050565b6000806000806109ad610574866002546114a0565b92506109b985846114eb565b91506109c4826114fd565b95945050505050565b600d5490565b600080600080600d5485111515156109ea57600080fd5b6109f38561150b565b9250610a04610574846004546114a0565b91506109c483836114eb565b600080548190600160a060020a03163314610a2a57600080fd5b5060005b8251811015610a6957610a578382815181101515610a4857fe5b90602001906020020151610ab5565b15610a6157600191505b600101610a2e565b50919050565b600054600160a060020a03163314610a8657600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a03163314610acd57600080fd5b600160a060020a03821660009081526001602052604090205460ff161561099357600160a060020a038216600081815260016020908152604091829020805460ff19169055815192835290517ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a9281900390910190a1506001919050565b6000806000610b5a6001610c60565b11610b6457600080fd5b339150610b716000610c60565b600160a060020a0383166000818152600b602090815260408083208054680100000000000000008702019055600a909152808220805490839055905193019350909183156108fc0291849190818181858888f19350505050158015610bda573d6000803e3d6000fd5b50604080518281529051600160a060020a038416917fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc919081900360200190a25050565b600080600080610c35670de0b6b3a764000061150b565b9250610c46610574846004546114a0565b9150610c5283836114eb565b949350505050565b60085481565b60003382610c7657610c718161095a565b610c9a565b600160a060020a0381166000908152600a6020526040902054610c988261095a565b015b9392505050565b303190565b600160a060020a031660009081526009602052604090205490565b60008054600160a060020a03163314610cd957600080fd5b600160a060020a03821660009081526001602052604090205460ff16151561099357600160a060020a038216600081815260016020818152604092839020805460ff1916909217909155815192835290517fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f9281900390910190a1506001919050565b600080600080610d73670de0b6b3a764000061150b565b9250610d84610574846002546114a0565b9150610c5283836114de565b600054600160a060020a031681565b600033610dab81610ca6565b91505090565b60016020526000908152604090205460ff1681565b600c60205260009081526040902054600160a060020a031681565b600080600080600080610df2610d9f565b11610dfc57600080fd5b33600081815260096020526040902054909450861115610e1b57600080fd5b6000610e276001610c60565b1115610e3557610e35610b4b565b610e44610574876003546114a0565b9250610e5086846114eb565b9150610e5b8361150b565b9050610e69600d54846114eb565b600d55600160a060020a038416600090815260096020526040902054610e8f90876114eb565b600160a060020a038086166000908152600960205260408082209390935590891681522054610ebe90836114de565b600160a060020a03888116600081815260096020908152604080832095909555600e8054948a168352600b9091528482208054948c02909403909355825491815292909220805492850290920190915554600d54610f329190680100000000000000008402811515610f2c57fe5b046114de565b600e55604080518381529051600160a060020a03808a1692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35060019695505050505050565b600f54600160a060020a031681565b3360009081526001602052604081205460ff161515610fb257600080fd5b610fbb82611519565b610fc58334610532565b90505b92915050565b600080548190600160a060020a03163314610fe857600080fd5b5060005b8251811015610a6957611015838281518110151561100657fe5b90602001906020020151610cc1565b1561101f57600191505b600101610fec565b600080600080600080600080600061103d610d9f565b1161104757600080fd5b3360008181526009602052604090205490985089111561106657600080fd5b8896506110728761150b565b9550611083610574876004546114a0565b9450611094610574866006546114a0565b93506110a085856114eb565b92506110ac86866114eb565b91506110ba600d54886114eb565b600d55600160a060020a0388166000908152600960205260409020546110e090886114eb565b600160a060020a03808a16600090815260096020908152604080832094909455600e54600b82528483208054918d02680100000000000000008902019182900390556007549093168252600a9052919091205490915061114090856114de565b600754600160a060020a03166000908152600a6020526040812091909155600d54111561118957611185600e54600d54680100000000000000008602811515610f2c57fe5b600e555b87600160a060020a03167f8d3a0130073dbd54ab6ac632c05946df540553d3b514c9f8165b4ab7f2b1805e8884426111bf610d5c565b604080519485526020850193909352838301919091526060830152519081900360800190a2505050505050505050565b33600081815260096020526040812054908111156112105761121081611027565b611218610b4b565b5050565b600061122782611519565b610fc83334610532565b600054600160a060020a0316331461124857600080fd5b600160a060020a038116151561125d57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b33600090815260016020526040812054819060ff1615156112e557600080fd5b6112ee8361095a565b600160a060020a0384166000818152600b602090815260408083208054680100000000000000008702019055600a90915280822080549083905581517f6c61704800000000000000000000000000000000000000000000000000000000815260048101949094529051930194503393508392636c617048928692602480830193919282900301818588803b15801561138557600080fd5b505af1158015611399573d6000803e3d6000fd5b5050604080518681529051339450600160a060020a03881693507fb0c3654a9b0006eaf87cd1a772dc962fbcf10c9d3a29c48ec3a056b2a95155d692509081900360200190a3505050565b6000806000806113f46001610c60565b116113fe57600080fd5b33925061140b6000610c60565b600160a060020a0384166000908152600b602090815260408083208054680100000000000000008602019055600a909152812080549190550191506114508383610532565b905082600160a060020a03167fbe339fc14b041c2b0e0f3dd2cd325d0c3668b78378001e53160eab36153264588383604051808381526020018281526020019250505060405180910390a2505050565b60008215156114b157506000610fc8565b508181028183828115156114c157fe5b0414610fc857fe5b600081838115156114d657fe5b049392505050565b81810182811015610fc857fe5b6000828211156114f757fe5b50900390565b6000610fc8826103e86114a0565b6000610fc8826103e86114c9565b336000908152600c6020526040902054600160a060020a03161580156115565750336000818152600c6020526040902054600160a060020a031614155b1561159157336000908152600c60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b505600a165627a7a723058202049bfc2cb70f8eab78691f1042e1edfee55e5ee2ac1db26a9cf4b89db5f64140029

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

0000000000000000000000000a0a80cd0ff4f906ce7617a415787614a9651e1a

-----Decoded View---------------
Arg [0] : relayAddress (address): 0x0A0a80cd0FF4F906CE7617A415787614a9651e1a

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000a0a80cd0ff4f906ce7617a415787614a9651e1a


Swarm Source

bzzr://2049bfc2cb70f8eab78691f1042e1edfee55e5ee2ac1db26a9cf4b89db5f6414

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.