ETH Price: $1,850.60 (+1.14%)
Gas: 18 Gwei
 

Overview

ETH Balance

0.123764045432930425 ETH

Eth Value

$229.04 (@ $1,850.60/ETH)

Token Holdings

Multi Chain

Multichain Addresses

0 address found via
Transaction Hash
Method
Block
From
To
Value
Set Token Contro...56334502018-05-18 6:18:251847 days 16 hrs ago1526624305IN
0x3056Bc...4C7018B7
0 ETH0.0002908110
Set Staking Requ...55508892018-05-03 19:54:371862 days 2 hrs ago1525377277IN
0x3056Bc...4C7018B7
0 ETH0.000165216
Set Token Contro...55097652018-04-26 15:19:481869 days 7 hrs ago1524755988IN
0x3056Bc...4C7018B7
0 ETH0.000174486
Set Token Contro...55075332018-04-26 6:09:291869 days 16 hrs ago1524722969IN
0x3056Bc...4C7018B7
0 ETH0.0011923241
Mint55075042018-04-26 6:02:461869 days 16 hrs ago1524722566IN
0x3056Bc...4C7018B7
0.01 ETH0.0039179141
Mint55074992018-04-26 6:01:111869 days 16 hrs ago1524722471IN
0x3056Bc...4C7018B7
1 ETH0.004296841
Set Token Contro...55074882018-04-26 5:58:321869 days 16 hrs ago1524722312IN
0x3056Bc...4C7018B7
0 ETH0.0018073241
Set Donations Re...55074832018-04-26 5:57:231869 days 16 hrs ago1524722243IN
0x3056Bc...4C7018B7
0 ETH0.0018028141
0x6060604055074472018-04-26 5:47:381869 days 16 hrs ago1524721658IN
 Create: CryptoTorchToken
0 ETH0.008354635

Latest 25 internal transactions (View All)

Advanced mode:
Advanced Filter
Parent Txn Hash Block From To Value
60082572018-07-22 5:51:201782 days 16 hrs ago1532238680
0x3056Bc...4C7018B7
0.02463327 ETH
59649082018-07-14 21:10:481790 days 1 hr ago1531602648
0x3056Bc...4C7018B7
0.03114065 ETH
58073042018-06-17 22:13:081817 days 33 mins ago1529273588
0x3056Bc...4C7018B7
0.01669544 ETH
58072832018-06-17 22:07:021817 days 39 mins ago1529273222
0x3056Bc...4C7018B7
0.70780941 ETH
58072822018-06-17 22:06:571817 days 39 mins ago1529273217
0x3056Bc...4C7018B7
0.01413535 ETH
58072822018-06-17 22:06:571817 days 39 mins ago1529273217
0x3056Bc...4C7018B7
0.00207748 ETH
58072822018-06-17 22:06:571817 days 39 mins ago1529273217
0x3056Bc...4C7018B7
0.00629344 ETH
58072552018-06-17 21:58:491817 days 47 mins ago1529272729
0x3056Bc...4C7018B7
0.00001334 ETH
58072552018-06-17 21:58:491817 days 47 mins ago1529272729
0x3056Bc...4C7018B7
0.00009128 ETH
58072442018-06-17 21:55:421817 days 50 mins ago1529272542
0x3056Bc...4C7018B7
0.00003338 ETH
58071842018-06-17 21:40:081817 days 1 hr ago1529271608
0x3056Bc...4C7018B7
0.00003977 ETH
58071802018-06-17 21:38:361817 days 1 hr ago1529271516
0x3056Bc...4C7018B7
0.00707501 ETH
58071742018-06-17 21:37:431817 days 1 hr ago1529271463
0x3056Bc...4C7018B7
0.0016527 ETH
56676652018-05-24 8:00:371841 days 14 hrs ago1527148837
0x3056Bc...4C7018B7
0.009 ETH
56335582018-05-18 6:46:491847 days 15 hrs ago1526626009
0x3056Bc...4C7018B7
0.0009 ETH
56147922018-05-14 23:33:531850 days 23 hrs ago1526340833
0x3056Bc...4C7018B7
0.01165868 ETH
56147582018-05-14 23:23:231850 days 23 hrs ago1526340203
0x3056Bc...4C7018B7
0.0013079 ETH
56147402018-05-14 23:16:001850 days 23 hrs ago1526339760
0x3056Bc...4C7018B7
0.00034115 ETH
56147402018-05-14 23:16:001850 days 23 hrs ago1526339760
0x3056Bc...4C7018B7
0.00112094 ETH
56147372018-05-14 23:15:101850 days 23 hrs ago1526339710
0x3056Bc...4C7018B7
0.00010838 ETH
56143942018-05-14 21:52:311851 days 54 mins ago1526334751
0x3056Bc...4C7018B7
0.07377746 ETH
56060212018-05-13 10:39:531852 days 12 hrs ago1526207993
0x3056Bc...4C7018B7
0.0525955 ETH
55975722018-05-11 23:20:481853 days 23 hrs ago1526080848
0x3056Bc...4C7018B7
0.1168947 ETH
55932312018-05-11 5:04:101854 days 17 hrs ago1526015050
0x3056Bc...4C7018B7
0.00868215 ETH
55694582018-05-07 1:41:301858 days 21 hrs ago1525657290
0x3056Bc...4C7018B7
0.00529877 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoTorchToken

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

// CryptoTorch-Token Source code
// copyright 2018 CryptoTorch <https://cryptotorch.io>

pragma solidity 0.4.19;


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

    /**
    * Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
    * 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 c;
    }

    /**
    * Substracts 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;
    }

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


/**
* @title Ownable
 *
 * Owner rights:
 *   - change the name of the contract
 *   - change the name of the token
 *   - change the Proof of Stake difficulty
 *   - transfer ownership
 *
 * Owner CANNOT:
 *   - withdrawal funds
 *   - disable withdrawals
 *   - kill the contract
 *   - change the price of tokens
*/
contract Ownable {
    address public owner;

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

    function Ownable() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}


/**
 * @title ERC20 interface (Good parts only)
 * see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() public view returns (uint256);
    function balanceOf(address who) public view returns (uint256);
    function transfer(address to, uint256 value) public returns (bool);
}


/**
 * @title CryptoTorchToken
 *
 * Token + Dividends System for the Cryptolympic-Torch
 *
 * Token: KMS - Kilometers (Distance of Torch Run)
 */
contract CryptoTorchToken is ERC20, Ownable {
    using SafeMath for uint256;

    //
    // Events
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    event onWithdraw(
        address indexed to,
        uint256 amount
    );
    event onMint(
        address indexed to,
        uint256 pricePaid,
        uint256 tokensMinted,
        address indexed referredBy
    );
    event onBurn(
        address indexed from,
        uint256 tokensBurned,
        uint256 amountEarned
    );

    //
    // Token Configurations
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    string internal name_ = "Cryptolympic Torch-Run Kilometers";
    string internal symbol_ = "KMS";
    uint256 constant internal dividendFee_ = 5;
    uint256 constant internal tokenPriceInitial_ = 0.0000001 ether;
    uint256 constant internal tokenPriceIncremental_ = 0.00000001 ether;
    uint256 constant internal magnitude = 2**64;
    uint256 public stakingRequirement = 50e18;

    //
    // Token Internals
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    uint256 internal tokenSupply_ = 0;
    uint256 internal profitPerShare_;
    address internal tokenController_;
    address internal donationsReceiver_;
    mapping (address => uint256) internal tokenBalanceLedger_; // scaled by 1e18
    mapping (address => uint256) internal referralBalance_;
    mapping (address => uint256) internal profitsReceived_;
    mapping (address => int256) internal payoutsTo_;

    //
    // Modifiers
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    // No buying tokens directly through this contract, only through the
    // CryptoTorch Controller Contract via the CryptoTorch Dapp
    //
    modifier onlyTokenController() {
        require(tokenController_ != address(0) && msg.sender == tokenController_);
        _;
    }

    // Token Holders Only
    modifier onlyTokenHolders() {
        require(myTokens() > 0);
        _;
    }

    // Dividend Holders Only
    modifier onlyProfitHolders() {
        require(myDividends(true) > 0);
        _;
    }

    //
    // Public Functions
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    /**
     * Contract Constructor
     */
    function CryptoTorchToken() public {}

    /**
     * Sets the Token Controller Contract (CryptoTorch)
     */
    function setTokenController(address _controller) public onlyOwner {
        tokenController_ = _controller;
    }

    /**
     * Sets the Contract Donations Receiver address
     */
    function setDonationsReceiver(address _receiver) public onlyOwner {
        donationsReceiver_ = _receiver;
    }

    /**
     * Do not make payments directly to this contract (unless it is a donation! :)
     *  - payments made directly to the contract do not receive tokens.  Tokens
     *    are only available through the CryptoTorch Controller Contract, which
     *    is managed by the Dapp at https://cryptotorch.io
     */
    function() payable public {
        if (msg.value > 0 && donationsReceiver_ != 0x0) {
            donationsReceiver_.transfer(msg.value); // donations?  Thank you!  :)
        }
    }

    /**
     * Liquifies tokens to ether.
     */
    function sell(uint256 _amountOfTokens) public onlyTokenHolders {
        sell_(msg.sender, _amountOfTokens);
    }

    /**
     * Liquifies tokens to ether.
     */
    function sellFor(address _for, uint256 _amountOfTokens) public onlyTokenController {
        sell_(_for, _amountOfTokens);
    }

    /**
     * Liquifies tokens to ether.
     */
    function withdraw() public onlyProfitHolders {
        withdraw_(msg.sender);
    }

    /**
     * Liquifies tokens to ether.
     */
    function withdrawFor(address _for) public onlyTokenController {
        withdraw_(_for);
    }

    /**
     * Liquifies tokens to ether.
     */
    function mint(address _to, uint256 _amountPaid, address _referredBy) public onlyTokenController payable returns(uint256) {
        require(_amountPaid == msg.value);
        return mintTokens_(_to, _amountPaid, _referredBy);
    }

    /**
     * Transfer tokens from the caller to a new holder.
     * There's a small fee here that is redistributed to all token holders
     */
    function transfer(address _to, uint256 _value) public onlyTokenHolders returns(bool) {
        return transferFor_(msg.sender, _to, _value);
    }

    //
    // Owner Functions
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    /**
     * If we want to rebrand, we can.
     */
    function setName(string _name) public onlyOwner {
        name_ = _name;
    }

    /**
     * If we want to rebrand, we can.
     */
    function setSymbol(string _symbol) public onlyOwner {
        symbol_ = _symbol;
    }

    /**
     * Precautionary measures in case we need to adjust the masternode rate.
     */
    function setStakingRequirement(uint256 _amountOfTokens) public onlyOwner {
        stakingRequirement = _amountOfTokens;
    }

    //
    // Helper Functions
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    /**
     * View the total balance of the contract
     */
    function contractBalance() public view returns (uint256) {
        return this.balance;
    }

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

    /**
     * ERC20 Token Name
     */
    function name() public view returns (string) {
        return name_;
    }

    /**
     * ERC20 Token Symbol
     */
    function symbol() public view returns (string) {
        return symbol_;
    }

    /**
     * ERC20 Token Decimals
     */
    function decimals() public pure returns (uint256) {
        return 18;
    }

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

    /**
     * Retrieve the dividends owned by the caller.
     * If `_includeBonus` is to to 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 _includeBonus) public view returns(uint256) {
        address _playerAddress = msg.sender;
        return _includeBonus ? dividendsOf(_playerAddress) + referralBalance_[_playerAddress] : dividendsOf(_playerAddress);
    }

    /**
     * Retreive the Total Profits previously paid out to the Caller
     */
    function myProfitsReceived() public view returns (uint256) {
        address _playerAddress = msg.sender;
        return profitsOf(_playerAddress);
    }

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

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

    /**
     * Retrieve the paid-profits balance of any single address.
     */
    function profitsOf(address _playerAddress) public view returns(uint256) {
        return profitsReceived_[_playerAddress];
    }

    /**
     * Retrieve the referral dividends balance of any single address.
     */
    function referralBalanceOf(address _playerAddress) public view returns(uint256) {
        return referralBalance_[_playerAddress];
    }

    /**
     * Return the sell price of 1 individual token.
     */
    function sellPrice() public view returns(uint256) {
        // our calculation relies on the token supply, so we need supply. Doh.
        if (tokenSupply_ == 0) {
            return tokenPriceInitial_ - tokenPriceIncremental_;
        } else {
            uint256 _ether = tokensToEther_(1e18);
            uint256 _dividends = SafeMath.div(_ether, dividendFee_);
            uint256 _taxedEther = SafeMath.sub(_ether, _dividends);
            return _taxedEther;
        }
    }

    /**
     * Return the buy price of 1 individual token.
     */
    function buyPrice() public view returns(uint256) {
        // our calculation relies on the token supply, so we need supply. Doh.
        if (tokenSupply_ == 0) {
            return tokenPriceInitial_ + tokenPriceIncremental_;
        } else {
            uint256 _ether = tokensToEther_(1e18);
            uint256 _dividends = SafeMath.div(_ether, dividendFee_);
            uint256 _taxedEther = SafeMath.add(_ether, _dividends);
            return _taxedEther;
        }
    }

    /**
     * Function for the frontend to dynamically retrieve the price scaling of buy orders.
     */
    function calculateTokensReceived(uint256 _etherToSpend) public view returns(uint256) {
        uint256 _dividends = _etherToSpend.div(dividendFee_);
        uint256 _taxedEther = _etherToSpend.sub(_dividends);
        uint256 _amountOfTokens = etherToTokens_(_taxedEther);
        return _amountOfTokens;
    }

    /**
     * Function for the frontend to dynamically retrieve the price scaling of sell orders.
     */
    function calculateEtherReceived(uint256 _tokensToSell) public view returns(uint256) {
        require(_tokensToSell <= tokenSupply_);
        uint256 _ether = tokensToEther_(_tokensToSell);
        uint256 _dividends = _ether.div(dividendFee_);
        uint256 _taxedEther = _ether.sub(_dividends);
        return _taxedEther;
    }

    //
    // Internal Functions
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //

    /**
     * Liquifies tokens to ether.
     */
    function sell_(address _recipient, uint256 _amountOfTokens) internal {
        require(_amountOfTokens <= tokenBalanceLedger_[_recipient]);

        uint256 _tokens = _amountOfTokens;
        uint256 _ether = tokensToEther_(_tokens);
        uint256 _dividends = SafeMath.div(_ether, dividendFee_);
        uint256 _taxedEther = SafeMath.sub(_ether, _dividends);

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

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

        // update the amount of dividends per token
        if (tokenSupply_ > 0) {
            profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_);
        }

        // fire event
        onBurn(_recipient, _tokens, _taxedEther);
    }

    /**
     * Withdraws all of the callers earnings.
     */
    function withdraw_(address _recipient) internal {
        require(_recipient != address(0));

        // setup data
        uint256 _dividends = getDividendsOf_(_recipient, false);

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

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

        // fire event
        onWithdraw(_recipient, _dividends);

        // transfer funds
        profitsReceived_[_recipient] = profitsReceived_[_recipient].add(_dividends);
        _recipient.transfer(_dividends);

        // Keep contract clean
        if (tokenSupply_ == 0 && this.balance > 0) {
            owner.transfer(this.balance);
        }
    }

    /**
     * Assign tokens to player
     */
    function mintTokens_(address _to, uint256 _amountPaid, address _referredBy) internal returns(uint256) {
        require(_to != address(this) && _to != tokenController_);

        uint256 _undividedDividends = SafeMath.div(_amountPaid, dividendFee_);
        uint256 _referralBonus = SafeMath.div(_undividedDividends, 10);
        uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus);
        uint256 _taxedEther = SafeMath.sub(_amountPaid, _undividedDividends);
        uint256 _amountOfTokens = etherToTokens_(_taxedEther);
        uint256 _fee = _dividends * magnitude;

        // prevents overflow in the case that the pyramid somehow magically starts being used by everyone in the world
        // (or hackers)
        require(_amountOfTokens > 0 && (SafeMath.add(_amountOfTokens, tokenSupply_) > tokenSupply_));

        // is the user referred by a masternode?
        if (_referredBy != address(0) && _referredBy != _to && 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;
        }

        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_[_to] = SafeMath.add(tokenBalanceLedger_[_to], _amountOfTokens);

        // Tells the contract that the buyer doesn't deserve dividends for the tokens before they owned them
        int256 _updatedPayouts = (int256)((profitPerShare_ * _amountOfTokens) - _fee);
        payoutsTo_[_to] += _updatedPayouts;

        // fire event
        onMint(_to, _amountPaid, _amountOfTokens, _referredBy);

        return _amountOfTokens;
    }

    /**
     * Transfer tokens from the caller to a new holder.
     * There's a small fee here that is redistributed to all token holders
     */
    function transferFor_(address _from, address _to, uint256 _amountOfTokens) internal returns(bool) {
        require(_to != address(0));
        require(tokenBalanceLedger_[_from] >= _amountOfTokens && tokenBalanceLedger_[_to] + _amountOfTokens >= tokenBalanceLedger_[_to]);

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

        // withdraw all outstanding dividends first
        if (getDividendsOf_(_from, true) > 0) {
            withdraw_(_from);
        }

        // liquify 10% of the tokens that are transferred
        // these are dispersed to shareholders
        uint256 _tokenFee = SafeMath.div(_amountOfTokens, dividendFee_);
        uint256 _taxedTokens = SafeMath.sub(_amountOfTokens, _tokenFee);
        uint256 _dividends = tokensToEther_(_tokenFee);

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

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

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

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

        // fire event
        Transfer(_from, _to, _taxedTokens);

        // ERC20
        return true;
    }

    /**
     * Retrieve the dividends of the owner.
     */
    function getDividendsOf_(address _recipient, bool _includeBonus) internal view returns(uint256) {
        return _includeBonus ? dividendsOf(_recipient) + referralBalance_[_recipient] : dividendsOf(_recipient);
    }

    /**
     * Calculate Token price based on an amount of incoming ether;
     * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function etherToTokens_(uint256 _ether) internal view returns(uint256) {
        uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18;
        uint256 _tokensReceived =
        (
        (
        // underflow attempts BTFO
        SafeMath.sub(
            (sqrt
        (
            (_tokenPriceInitial**2)
            +
            (2*(tokenPriceIncremental_ * 1e18)*(_ether * 1e18))
            +
            (((tokenPriceIncremental_)**2)*(tokenSupply_**2))
            +
            (2*(tokenPriceIncremental_)*_tokenPriceInitial*tokenSupply_)
        )
            ), _tokenPriceInitial
        )
        )/(tokenPriceIncremental_)
        )-(tokenSupply_);

        return _tokensReceived;
    }

    /**
     * Calculate token sell value.
     * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code.
     */
    function tokensToEther_(uint256 _tokens) internal view returns(uint256) {
        uint256 tokens_ = (_tokens + 1e18);
        uint256 _tokenSupply = (tokenSupply_ + 1e18);
        uint256 _etherReceived =
        (
        // underflow attempts BTFO
        SafeMath.sub(
            (
            (
            (
            tokenPriceInitial_ +(tokenPriceIncremental_ * (_tokenSupply/1e18))
            )-tokenPriceIncremental_
            )*(tokens_ - 1e18)
            ),(tokenPriceIncremental_*((tokens_**2-tokens_)/1e18))/2
        )
        /1e18);
        return _etherReceived;
    }

    /**
     * Squirts gas! ;)
     */
    function sqrt(uint x) internal pure returns (uint y) {
        uint z = (x + 1) / 2;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"profitsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amountPaid","type":"uint256"},{"name":"_referredBy","type":"address"}],"name":"mint","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_etherToSpend","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":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"referralBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"_includeBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_for","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"sellFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"setStakingRequirement","outputs":[],"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":"contractBalance","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":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_for","type":"address"}],"name":"withdrawFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver","type":"address"}],"name":"setDonationsReceiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokensToSell","type":"uint256"}],"name":"calculateEtherReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setTokenController","outputs":[],"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"myProfitsReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"pricePaid","type":"uint256"},{"indexed":false,"name":"tokensMinted","type":"uint256"},{"indexed":true,"name":"referredBy","type":"address"}],"name":"onMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"tokensBurned","type":"uint256"},{"indexed":false,"name":"amountEarned","type":"uint256"}],"name":"onBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

6060604052606060405190810160405280602181526020017f43727970746f6c796d70696320546f7263682d52756e204b696c6f6d6574657281526020017f730000000000000000000000000000000000000000000000000000000000000081525060019080516200007692916020019062000100565b5060408051908101604052600381527f4b4d53000000000000000000000000000000000000000000000000000000000060208201526002908051620000c092916020019062000100565b506802b5e3af16b188000060035560006004553415620000df57600080fd5b60008054600160a060020a03191633600160a060020a0316179055620001a5565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b620001a291905b808211156200018157600081556001016200018c565b90565b6115a280620001b56000396000f30060606040526004361061017e5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b81146101d357806301ec07931461020457806306fdde03146102235780630d4d1513146102ad57806310d0ffdd146102cb57806318160ddd146102e1578063313ce567146102f45780633ccfd60b14610307578063465346491461031a5780634b7503341461033957806356d399e81461034c578063688abbf71461035f57806370a08231146103775780637f2438cb146103965780638328b610146103b85780638620410b146103ce5780638b7afe2e146103e15780638da5cb5b146103f4578063949e8acd1461042357806395d89b41146104365780639eca672c14610449578063a625664414610468578063a9059cbb14610487578063b84c8246146104bd578063c257c8511461050e578063c47f002714610524578063e102baab14610575578063e4849b3214610594578063f2fde38b146105aa578063fb3bc400146105c9575b6000341180156101985750600754600160a060020a031615155b156101d157600754600160a060020a03163480156108fc0290604051600060405180830381858888f1935050505015156101d157600080fd5b005b34156101de57600080fd5b6101f2600160a060020a03600435166105dc565b60405190815260200160405180910390f35b341561020f57600080fd5b6101f2600160a060020a0360043516610617565b341561022e57600080fd5b610236610632565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561027257808201518382015260200161025a565b50505050905090810190601f16801561029f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101f2600160a060020a0360043581169060243590604435166106db565b34156102d657600080fd5b6101f2600435610730565b34156102ec57600080fd5b6101f261076c565b34156102ff57600080fd5b6101f2610772565b341561031257600080fd5b6101d1610777565b341561032557600080fd5b6101f2600160a060020a0360043516610798565b341561034457600080fd5b6101f26107b3565b341561035757600080fd5b6101f2610807565b341561036a57600080fd5b6101f2600435151561080d565b341561038257600080fd5b6101f2600160a060020a0360043516610850565b34156103a157600080fd5b6101d1600160a060020a036004351660243561086b565b34156103c357600080fd5b6101d16004356108ac565b34156103d957600080fd5b6101f26108cc565b34156103ec57600080fd5b6101f2610914565b34156103ff57600080fd5b610407610922565b604051600160a060020a03909116815260200160405180910390f35b341561042e57600080fd5b6101f2610931565b341561044157600080fd5b610236610944565b341561045457600080fd5b6101d1600160a060020a03600435166109b7565b341561047357600080fd5b6101d1600160a060020a03600435166109f6565b341561049257600080fd5b6104a9600160a060020a0360043516602435610a40565b604051901515815260200160405180910390f35b34156104c857600080fd5b6101d160046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610a6795505050505050565b341561051957600080fd5b6101f2600435610a95565b341561052f57600080fd5b6101d160046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610ada95505050505050565b341561058057600080fd5b6101d1600160a060020a0360043516610b08565b341561059f57600080fd5b6101d1600435610b52565b34156105b557600080fd5b6101d1600160a060020a0360043516610b70565b34156105d457600080fd5b6101f2610c0b565b600160a060020a03166000908152600b6020908152604080832054600890925290912054600554680100000000000000009102919091030490565b600160a060020a03166000908152600a602052604090205490565b61063a6114d6565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106d05780601f106106a5576101008083540402835291602001916106d0565b820191906000526020600020905b8154815290600101906020018083116106b357829003601f168201915b505050505090505b90565b600654600090600160a060020a031615801590610706575060065433600160a060020a039081169116145b151561071157600080fd5b34831461071d57600080fd5b610728848484610c17565b949350505050565b600080808061074685600563ffffffff610e9516565b9250610758858463ffffffff610eac16565b915061076382610ebe565b95945050505050565b60045490565b601290565b6000610783600161080d565b1161078d57600080fd5b61079633610f56565b565b600160a060020a031660009081526009602052604090205490565b600080600080600454600014156107d1576414f46b04009350610801565b6107e2670de0b6b3a76400006110b0565b92506107ef836005610e95565b91506107fb8383610eac565b90508093505b50505090565b60035481565b600033826108235761081e816105dc565b610847565b600160a060020a038116600090815260096020526040902054610845826105dc565b015b91505b50919050565b600160a060020a031660009081526008602052604090205490565b600654600160a060020a031615801590610893575060065433600160a060020a039081169116145b151561089e57600080fd5b6108a8828261111c565b5050565b60005433600160a060020a039081169116146108c757600080fd5b600355565b600080600080600454600014156108ea5764199c82cc009350610801565b6108fb670de0b6b3a76400006110b0565b9250610908836005610e95565b91506107fb8383611266565b600160a060020a0330163190565b600054600160a060020a031681565b60003361093d81610850565b91505b5090565b61094c6114d6565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156106d05780601f106106a5576101008083540402835291602001916106d0565b600654600160a060020a0316158015906109df575060065433600160a060020a039081169116145b15156109ea57600080fd5b6109f381610f56565b50565b60005433600160a060020a03908116911614610a1157600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600080610a4b610931565b11610a5557600080fd5b610a60338484611275565b9392505050565b60005433600160a060020a03908116911614610a8257600080fd5b60028180516108a89291602001906114e8565b6000806000806004548511151515610aac57600080fd5b610ab5856110b0565b9250610ac883600563ffffffff610e9516565b9150610763838363ffffffff610eac16565b60005433600160a060020a03908116911614610af557600080fd5b60018180516108a89291602001906114e8565b60005433600160a060020a03908116911614610b2357600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000610b5c610931565b11610b6657600080fd5b6109f3338261111c565b60005433600160a060020a03908116911614610b8b57600080fd5b600160a060020a0381161515610ba057600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60003361093d81610617565b60008060008060008060008030600160a060020a03168b600160a060020a031614158015610c535750600654600160a060020a038c8116911614155b1515610c5e57600080fd5b610c698a6005610e95565b9650610c7687600a610e95565b9550610c828787610eac565b9450610c8e8a88610eac565b9350610c9984610ebe565b92506801000000000000000085029150600083118015610cc35750600454610cc18482611266565b115b1515610cce57600080fd5b600160a060020a03891615801590610cf857508a600160a060020a031689600160a060020a031614155b8015610d1e5750600354600160a060020a038a1660009081526008602052604090205410155b15610d6457600160a060020a038916600090815260096020526040902054610d469087611266565b600160a060020a038a16600090815260096020526040902055610d7f565b610d6e8587611266565b945068010000000000000000850291505b60006004541115610de357610d9660045484611266565b6004819055680100000000000000008602811515610db057fe5b60058054929091049091019055600454680100000000000000008602811515610dd557fe5b048302820382039150610de9565b60048390555b600160a060020a038b16600090815260086020526040902054610e0c9084611266565b600160a060020a03808d16600081815260086020908152604080832095909555600554600b90915290849020805491880287900391820190559350908b16917f4eca39a8b143e3338bfb6514069564a64d657ccc0413d67e250f65f5a9c37f16908d9087905191825260208201526040908101905180910390a350909998505050505050505050565b6000808284811515610ea357fe5b04949350505050565b600082821115610eb857fe5b50900390565b6004546000906c01431e0fae6d7217caa00000009082906402540be400610f43610f3d730380d4bd8a8678c1bb542c80deb4800000000000880268056bc75e2d631000006002860a02017005e0a1fd2712875988becaad0000000000850201780197d4df19d605767337e9f14d3eec8920e40000000000000001611462565b85610eac565b811515610f4c57fe5b0403949350505050565b6000600160a060020a0382161515610f6d57600080fd5b610f78826000611497565b600160a060020a0383166000818152600b6020908152604080832080546801000000000000000087020190556009909152808220805492905592019250907fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc9083905190815260200160405180910390a2600160a060020a0382166000908152600a6020526040902054611012908263ffffffff61126616565b600160a060020a0383166000818152600a602052604090819020929092559082156108fc0290839051600060405180830381858888f19350505050151561105857600080fd5b6004541580156110725750600030600160a060020a031631115b156108a857600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f1935050505015156108a857600080fd5b600454600090670de0b6b3a76400008381019181019083906111096414f46b04008285046402540be40002018702600283670de0b6b3a763ffff1982890a8b900301046402540be4000281151561110357fe5b04610eac565b81151561111257fe5b0495945050505050565b600160a060020a038216600090815260086020526040812054819081908190819086111561114957600080fd5b859450611155856110b0565b9350611162846005610e95565b925061116e8484610eac565b915061117c60045486610eac565b600455600160a060020a0387166000908152600860205260409020546111a29086610eac565b600160a060020a038816600090815260086020908152604080832093909355600554600b9091529181208054928802680100000000000000008602019283900390556004549192509011156112195761121560055460045468010000000000000000860281151561120f57fe5b04611266565b6005555b86600160a060020a03167ffdc3ec2b461920643ca94d52f94edc644fb20b5b3ba5ffb8b0c82734015f1009868460405191825260208201526040908101905180910390a250505050505050565b600082820183811015610a6057fe5b6000808080600160a060020a038616151561128f57600080fd5b600160a060020a0387166000908152600860205260409020548590108015906112d25750600160a060020a03861660009081526008602052604090205485810110155b15156112dd57600080fd5b600160a060020a03871660009081526008602052604090205485111561130257600080fd5b600061130f886001611497565b111561131e5761131e87610f56565b611329856005610e95565b92506113358584610eac565b9150611340836110b0565b905061134e60045484610eac565b600455600160a060020a0387166000908152600860205260409020546113749086610eac565b600160a060020a0380891660009081526008602052604080822093909355908816815220546113a39083611266565b600160a060020a0387811660008181526008602090815260408083209590955560058054948d168352600b9091528482208054948b02909403909355825491815292909220805492850290920190915554600454611411919068010000000000000000840281151561120f57fe5b600555600160a060020a038087169088167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a35060019695505050505050565b80600260018201045b8181101561084a57809150600281828581151561148457fe5b040181151561148f57fe5b04905061146b565b6000816114ac576114a7836105dc565b610a60565b600160a060020a0383166000908152600960205260409020546114ce846105dc565b019392505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061152957805160ff1916838001178555611556565b82800160010185558215611556579182015b8281111561155657825182559160200191906001019061153b565b50610940926106d89250905b8082111561094057600081556001016115625600a165627a7a723058208adcaf2fa26e4797573d4496350dcc1de66ea7cd8106c9a701534d919ee332ab0029

Swarm Source

bzzr://8adcaf2fa26e4797573d4496350dcc1de66ea7cd8106c9a701534d919ee332ab

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.