ETH Price: $1,851.44 (+1.59%)
Gas: 33 Gwei
 

Overview

ETH Balance

0.013635 ETH

Eth Value

$25.24 (@ $1,851.44/ETH)

Multi Chain

Multichain Addresses

0 address found via
Transaction Hash
Method
Block
From
To
Value
Pause56333522018-05-18 5:53:501847 days 15 hrs ago1526622830IN
0x4970E5...13b74d51
0 ETH0.000314311
Withdraw Dividen...56147922018-05-14 23:33:531850 days 21 hrs ago1526340833IN
0x4970E5...13b74d51
0 ETH0.000467237
Withdraw Dividen...56147582018-05-14 23:23:231850 days 22 hrs ago1526340203IN
0x4970E5...13b74d51
0 ETH0.000678968
Withdraw Dividen...56147402018-05-14 23:16:001850 days 22 hrs ago1526339760IN
0x4970E5...13b74d51
0 ETH0.000509226
Withdraw Dividen...56147402018-05-14 23:16:001850 days 22 hrs ago1526339760IN
0x4970E5...13b74d51
0 ETH0.000509226
Withdraw Dividen...56147372018-05-14 23:15:101850 days 22 hrs ago1526339710IN
0x4970E5...13b74d51
0 ETH0.000509226
Withdraw Dividen...56143942018-05-14 21:52:311850 days 23 hrs ago1526334751IN
0x4970E5...13b74d51
0 ETH0.0005692211
Withdraw Dividen...56060212018-05-13 10:39:531852 days 10 hrs ago1526207993IN
0x4970E5...13b74d51
0 ETH0.000274355
Sell56059942018-05-13 10:31:381852 days 10 hrs ago1526207498IN
0x4970E5...13b74d51
0 ETH0.000181075
Withdraw Dividen...55975722018-05-11 23:20:481853 days 22 hrs ago1526080848IN
0x4970E5...13b74d51
0 ETH0.000263915.1
Sell55975682018-05-11 23:19:581853 days 22 hrs ago1526080798IN
0x4970E5...13b74d51
0 ETH0.000184695.1
Withdraw Dividen...55932312018-05-11 5:04:101854 days 16 hrs ago1526015050IN
0x4970E5...13b74d51
0 ETH0.00047099.1
Sell55931622018-05-11 4:45:381854 days 16 hrs ago1526013938IN
0x4970E5...13b74d51
0 ETH0.000255755
Withdraw Dividen...55694582018-05-07 1:41:301858 days 19 hrs ago1525657290IN
0x4970E5...13b74d51
0 ETH0.000146722.1
Take The Torch55690492018-05-07 0:10:041858 days 21 hrs ago1525651804IN
0x4970E5...13b74d51
0.015 ETH0.000863592.1
Take The Torch55683382018-05-06 21:07:501859 days 22 mins ago1525640870IN
0x4970E5...13b74d51
0.005 ETH0.00006232
Take The Torch55683342018-05-06 21:07:181859 days 23 mins ago1525640838IN
0x4970E5...13b74d51
0.005 ETH0.000460441
Withdraw Dividen...55670602018-05-06 15:56:471859 days 5 hrs ago1525622207IN
0x4970E5...13b74d51
0 ETH0.000109742
Take The Torch55643922018-05-06 4:51:121859 days 16 hrs ago1525582272IN
0x4970E5...13b74d51
0.005 ETH0.001338953.2
Withdraw Dividen...55628752018-05-05 22:31:081859 days 22 hrs ago1525559468IN
0x4970E5...13b74d51
0 ETH0.000254613
Sell55628712018-05-05 22:30:011859 days 23 hrs ago1525559401IN
0x4970E5...13b74d51
0 ETH0.000108643
Set Account Nick...55618082018-05-05 18:03:371860 days 3 hrs ago1525543417IN
0x4970E5...13b74d51
0 ETH0.000107393.1
Take The Torch55614942018-05-05 16:45:481860 days 4 hrs ago1525538748IN
0x4970E5...13b74d51
0.01 ETH0.000923082.1
Withdraw Dividen...55550622018-05-04 13:36:511861 days 7 hrs ago1525441011IN
0x4970E5...13b74d51
0 ETH0.000413988
Sell55550572018-05-04 13:35:231861 days 7 hrs ago1525440923IN
0x4970E5...13b74d51
0 ETH0.000289718
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Advanced Filter
Parent Txn Hash Block From To Value
56147582018-05-14 23:23:231850 days 22 hrs ago1526340203
0x4970E5...13b74d51
0.003945 ETH
56147402018-05-14 23:16:001850 days 22 hrs ago1526339760
0x4970E5...13b74d51
0.007125 ETH
56147402018-05-14 23:16:001850 days 22 hrs ago1526339760
0x4970E5...13b74d51
0.00462 ETH
56147372018-05-14 23:15:101850 days 22 hrs ago1526339710
0x4970E5...13b74d51
0.00495 ETH
56060212018-05-13 10:39:531852 days 10 hrs ago1526207993
0x4970E5...13b74d51
0.00162 ETH
55694582018-05-07 1:41:301858 days 19 hrs ago1525657290
0x4970E5...13b74d51
0.0082125 ETH
55690492018-05-07 0:10:041858 days 21 hrs ago1525651804
0x4970E5...13b74d51
0.00075 ETH
55690492018-05-07 0:10:041858 days 21 hrs ago1525651804
0x4970E5...13b74d51
0.01155 ETH
55683342018-05-06 21:07:181859 days 23 mins ago1525640838
0x4970E5...13b74d51
0.00025 ETH
55683342018-05-06 21:07:181859 days 23 mins ago1525640838
0x4970E5...13b74d51
0.00025 ETH
55683342018-05-06 21:07:181859 days 23 mins ago1525640838
0x4970E5...13b74d51
0.00375 ETH
55670602018-05-06 15:56:471859 days 5 hrs ago1525622207
0x4970E5...13b74d51
0.001065 ETH
55643922018-05-06 4:51:121859 days 16 hrs ago1525582272
0x4970E5...13b74d51
0.00025 ETH
55643922018-05-06 4:51:121859 days 16 hrs ago1525582272
0x4970E5...13b74d51
0.00025 ETH
55643922018-05-06 4:51:121859 days 16 hrs ago1525582272
0x4970E5...13b74d51
0.00375 ETH
55628752018-05-05 22:31:081859 days 22 hrs ago1525559468
0x4970E5...13b74d51
0.009375 ETH
55614942018-05-05 16:45:481860 days 4 hrs ago1525538748
0x4970E5...13b74d51
0.0005 ETH
55614942018-05-05 16:45:481860 days 4 hrs ago1525538748
0x4970E5...13b74d51
0.008 ETH
55536962018-05-04 7:38:081861 days 13 hrs ago1525419488
0x4970E5...13b74d51
0.01053 ETH
55506062018-05-03 18:44:311862 days 2 hrs ago1525373071
0x4970E5...13b74d51
0.016275 ETH
55505702018-05-03 18:33:531862 days 2 hrs ago1525372433
0x4970E5...13b74d51
0.0001 ETH
55505702018-05-03 18:33:531862 days 2 hrs ago1525372433
0x4970E5...13b74d51
0.00025 ETH
55505702018-05-03 18:33:531862 days 2 hrs ago1525372433
0x4970E5...13b74d51
0.00375 ETH
55461582018-05-02 23:49:271862 days 21 hrs ago1525304967
0x4970E5...13b74d51
0.0005 ETH
55461582018-05-02 23:49:271862 days 21 hrs ago1525304967
0x4970E5...13b74d51
0.0005 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoTorch

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 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
 *   - pause/unpause the contract
 *   - 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 Pausable
 *
 * Pausing the contract will only disable deposits,
 * it will not prevent player dividend withdraws or token sales
 */
contract Pausable is Ownable {
    event OnPause();
    event OnUnpause();

    bool public paused = false;

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused() {
        require(paused);
        _;
    }

    function pause() public onlyOwner whenNotPaused {
        paused = true;
        OnPause();
    }

    function unpause() public onlyOwner whenPaused {
        paused = false;
        OnUnpause();
    }
}


/**
* @title ReentrancyGuard
* Helps contracts guard against reentrancy attacks.
* @author Remco Bloemen <[email protected]π.com>
*/
contract ReentrancyGuard {
    bool private reentrancyLock = false;

    modifier nonReentrant() {
        require(!reentrancyLock);
        reentrancyLock = true;
        _;
        reentrancyLock = false;
    }
}


/**
 * DateTime Contract Interface
 * see https://github.com/pipermerriam/ethereum-datetime
 * Live Contract Address: 0x1a6184CD4C5Bea62B0116de7962EE7315B7bcBce
 */
contract DateTime {
    function isLeapYear(uint16 year) public pure returns (bool);
    function getYear(uint timestamp) public pure returns (uint16);
    function getMonth(uint timestamp) public pure returns (uint8);
    function getDay(uint timestamp) public pure returns (uint8);
}


/**
 * OwnTheDay Contract Interface
 */
contract OwnTheDayContract {
    function ownerOf(uint256 _tokenId) public view returns (address);
}


/**
 * @title CryptoTorchToken
 */
contract CryptoTorchToken {
    function contractBalance() public view returns (uint256);
    function totalSupply() public view returns(uint256);
    function balanceOf(address _playerAddress) public view returns(uint256);
    function dividendsOf(address _playerAddress) public view returns(uint256);
    function profitsOf(address _playerAddress) public view returns(uint256);
    function referralBalanceOf(address _playerAddress) public view returns(uint256);
    function sellPrice() public view returns(uint256);
    function buyPrice() public view returns(uint256);
    function calculateTokensReceived(uint256 _etherToSpend) public view returns(uint256);
    function calculateEtherReceived(uint256 _tokensToSell) public view returns(uint256);

    function sellFor(address _for, uint256 _amountOfTokens) public;
    function withdrawFor(address _for) public;
    function mint(address _to, uint256 _amountForTokens, address _referredBy) public payable returns(uint256);
}


/**
 * @title Crypto-Torch Contract
 */
contract CryptoTorch is Pausable, ReentrancyGuard {
    using SafeMath for uint256;

    //
    // Events
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    event onTorchPassed(
        address indexed from,
        address indexed to,
        uint256 pricePaid
    );

    //
    // Types
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    struct HighPrice {
        uint256 price;
        address owner;
    }

    struct HighMileage {
        uint256 miles;
        address owner;
    }

    struct PlayerData {
        string name;
        string note;
        string coords;
        uint256 dividends; // earnings waiting to be paid out
        uint256 profits;   // earnings already paid out
        bool champion;     // ran the torch while owning the day?
    }

    //
    // Payout Structure
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    //  Dev Fee               - 5%
    //  Token Pool            - 75%
    //    - Referral                - 10%
    //  Remaining             - 20%
    //    - Day Owner               - 10-25%
    //    - Remaining               - 75-90%
    //        - Last Runner             - 60%
    //        - Second Last Runner      - 30%
    //        - Third Last Runner       - 10%
    //

    //
    // Player Data
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    uint8 public constant maxLeaders = 3; // Gold, Silver, Bronze

    uint256 private _lowestHighPrice;
    uint256 private _lowestHighMiles;
    uint256 public whaleIncreaseLimit = 2 ether;
    uint256 public whaleMax = 20 ether;

    HighPrice[maxLeaders] private _highestPrices;
    HighMileage[maxLeaders] private _highestMiles;

    address[maxLeaders] public torchRunners;
    address internal donationsReceiver_;
    mapping (address => PlayerData) private playerData_;

    DateTime internal DateTimeLib_;
    CryptoTorchToken internal CryptoTorchToken_;
    OwnTheDayContract internal OwnTheDayContract_;
    string[3] internal holidayMap_;

    //
    // Modifiers
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    // ensures that the first tokens in the contract will be equally distributed
    // meaning, no divine dump will be possible
    modifier antiWhalePrice(uint256 _amount) {
        require(
            whaleIncreaseLimit == 0 ||
            (
                _amount <= (whaleIncreaseLimit.add(_highestPrices[0].price)) &&
                playerData_[msg.sender].dividends.add(playerData_[msg.sender].profits).add(_amount) <= whaleMax
            )
        );
        _;
    }

    //
    // Contract Initialization
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    /**
     * Set the Owner to the First Torch Runner
     */
    function CryptoTorch() public {
        torchRunners[0] = msg.sender;
    }

    /**
     * Initializes the Contract Dependencies as well as the Holiday Mapping for OwnTheDay.io
     */
    function initialize(address _dateTimeAddress, address _tokenAddress, address _otdAddress) public onlyOwner {
        DateTimeLib_ = DateTime(_dateTimeAddress);
        CryptoTorchToken_ = CryptoTorchToken(_tokenAddress);
        OwnTheDayContract_ = OwnTheDayContract(_otdAddress);
        holidayMap_[0] = "10000110000001100000000000000101100000000011101000000000000011000000000000001001000010000101100010100110000100001000110000";
        holidayMap_[1] = "10111000100101000111000000100100000100010001001000100000000010010000000001000000110000000000000100000000010001100001100000";
        holidayMap_[2] = "01000000000100000101011000000110000001100000000100000000000011100001000100000000101000000000100000000000000000010011000001";
    }

    /**
     * Sets the external contract address of the DateTime Library
     */
    function setDateTimeLib(address _dateTimeAddress) public onlyOwner {
        DateTimeLib_ = DateTime(_dateTimeAddress);
    }

    /**
     * Sets the external contract address of the Token Contract
     */
    function setTokenContract(address _tokenAddress) public onlyOwner {
        CryptoTorchToken_ = CryptoTorchToken(_tokenAddress);
    }

    /**
     * Sets the external contract address of OwnTheDay.io
     */
    function setOwnTheDayContract(address _otdAddress) public onlyOwner {
        OwnTheDayContract_ = OwnTheDayContract(_otdAddress);
    }

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

    /**
     * The Max Price-Paid Limit for Whales during the Anti-Whale Phase
     */
    function setWhaleMax(uint256 _max) public onlyOwner {
        whaleMax = _max;
    }

    /**
     * The Max Price-Increase Limit for Whales during the Anti-Whale Phase
     */
    function setWhaleIncreaseLimit(uint256 _limit) public onlyOwner {
        whaleIncreaseLimit = _limit;
    }

    /**
     * Updates the Holiday Mappings in case of updates/changes at OwnTheDay.io
     */
    function updateHolidayState(uint8 _listIndex, string _holidayMap) public onlyOwner {
        require(_listIndex >= 0 && _listIndex < 3);
        holidayMap_[_listIndex] = _holidayMap;
    }

    //
    // Public Functions
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    /**
     * Checks if a specific day is a holiday at OwnTheDay.io
     */
    function isHoliday(uint256 _dayIndex) public view returns (bool) {
        require(_dayIndex >= 0 && _dayIndex < 366);
        return (getHolidayByIndex_(_dayIndex) == 1);
    }

    /**
     * Checks if Today is a holiday at OwnTheDay.io
     */
    function isHolidayToday() public view returns (bool) {
        uint256 _dayIndex = getDayIndex_(now);
        return (getHolidayByIndex_(_dayIndex) == 1);
    }

    /**
     * Gets the Day-Index of Today at OwnTheDay.io
     */
    function getTodayIndex() public view returns (uint256) {
        return getDayIndex_(now);
    }

    /**
     * Gets the Owner Name of the Day at OwnTheDay.io
     */
    function getTodayOwnerName() public view returns (string) {
        address dayOwner = OwnTheDayContract_.ownerOf(getTodayIndex());
        return playerData_[dayOwner].name; // Get Name from THIS contract
    }

    /**
     * Gets the Owner Address of the Day at OwnTheDay.io
     */
    function getTodayOwnerAddress() public view returns (address) {
        return OwnTheDayContract_.ownerOf(getTodayIndex());
    }

    /**
     * Sets the Nickname for an Account Address
     */
    function setAccountNickname(string _nickname) public whenNotPaused {
        require(msg.sender != address(0));
        require(bytes(_nickname).length > 0);
        playerData_[msg.sender].name = _nickname;
    }

    /**
     * Gets the Nickname for an Account Address
     */
    function getAccountNickname(address _playerAddress) public view returns (string) {
        return playerData_[_playerAddress].name;
    }

    /**
     * Sets the Note for an Account Address
     */
    function setAccountNote(string _note) public whenNotPaused {
        require(msg.sender != address(0));
        playerData_[msg.sender].note = _note;
    }

    /**
     * Gets the Note for an Account Address
     */
    function getAccountNote(address _playerAddress) public view returns (string) {
        return playerData_[_playerAddress].note;
    }

    /**
     * Sets the Note for an Account Address
     */
    function setAccountCoords(string _coords) public whenNotPaused {
        require(msg.sender != address(0));
        playerData_[msg.sender].coords = _coords;
    }

    /**
     * Gets the Note for an Account Address
     */
    function getAccountCoords(address _playerAddress) public view returns (string) {
        return playerData_[_playerAddress].coords;
    }

    /**
     * Gets the Note for an Account Address
     */
    function isChampionAccount(address _playerAddress) public view returns (bool) {
        return playerData_[_playerAddress].champion;
    }

    /**
     * Take the Torch!
     *  The Purchase Price is Paid to the Previous Torch Holder, and is also used
     *  as the Purchasers Mileage Multiplier
     */
    function takeTheTorch(address _referredBy) public nonReentrant whenNotPaused payable {
        takeTheTorch_(msg.value, msg.sender, _referredBy);
    }

    /**
     * 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 via "takeTheTorch()" or through the Dapp at https://cryptotorch.io
     */
    function() payable public {
        if (msg.value > 0 && donationsReceiver_ != 0x0) {
            donationsReceiver_.transfer(msg.value); // donations?  Thank you!  :)
        }
    }

    /**
     * Sell some tokens for Ether
     */
    function sell(uint256 _amountOfTokens) public {
        CryptoTorchToken_.sellFor(msg.sender, _amountOfTokens);
    }

    /**
     * Withdraw the earned Dividends to Ether
     *  - Includes Torch + Token Dividends and Token Referral Bonuses
     */
    function withdrawDividends() public returns (uint256) {
        CryptoTorchToken_.withdrawFor(msg.sender);
        return withdrawFor_(msg.sender);
    }

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

    /**
     * View the total balance of the token contract
     */
    function tokenContractBalance() public view returns (uint256) {
        return CryptoTorchToken_.contractBalance();
    }

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

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

    /**
     * Retrieve the token dividend balance of any single address.
     */
    function tokenDividendsOf(address _playerAddress) public view returns(uint256) {
        return CryptoTorchToken_.dividendsOf(_playerAddress);
    }

    /**
     * Retrieve the referral dividend balance of any single address.
     */
    function referralDividendsOf(address _playerAddress) public view returns(uint256) {
        return CryptoTorchToken_.referralBalanceOf(_playerAddress);
    }

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

    /**
     * Retrieve the dividend balance of any single address.
     */
    function profitsOf(address _playerAddress) public view returns(uint256) {
        return playerData_[_playerAddress].profits.add(CryptoTorchToken_.profitsOf(_playerAddress));
    }

    /**
     * Return the sell price of 1 individual token.
     */
    function sellPrice() public view returns(uint256) {
        return CryptoTorchToken_.sellPrice();
    }

    /**
     * Return the buy price of 1 individual token.
     */
    function buyPrice() public view returns(uint256) {
        return CryptoTorchToken_.buyPrice();
    }

    /**
     * Function for the frontend to dynamically retrieve the price scaling of buy orders.
     */
    function calculateTokensReceived(uint256 _etherToSpend) public view returns(uint256) {
        uint256 forTokens = _etherToSpend.sub(_etherToSpend.div(4));
        return CryptoTorchToken_.calculateTokensReceived(forTokens);
    }

    /**
     * Function for the frontend to dynamically retrieve the price scaling of sell orders.
     */
    function calculateEtherReceived(uint256 _tokensToSell) public view returns(uint256) {
        return CryptoTorchToken_.calculateEtherReceived(_tokensToSell);
    }

    /**
     * Get the Max Price of the Torch during the Anti-Whale Phase
     */
    function getMaxPrice() public view returns (uint256) {
        if (whaleIncreaseLimit == 0) { return 0; }  // no max price
        return whaleIncreaseLimit.add(_highestPrices[0].price);
    }

    /**
     * Get the Highest Price per each Medal Leader
     */
    function getHighestPriceAt(uint _index) public view returns (uint256) {
        require(_index >= 0 && _index < maxLeaders);
        return _highestPrices[_index].price;
    }

    /**
     * Get the Highest Price Owner per each Medal Leader
     */
    function getHighestPriceOwnerAt(uint _index) public view returns (address) {
        require(_index >= 0 && _index < maxLeaders);
        return _highestPrices[_index].owner;
    }

    /**
     * Get the Highest Miles per each Medal Leader
     */
    function getHighestMilesAt(uint _index) public view returns (uint256) {
        require(_index >= 0 && _index < maxLeaders);
        return _highestMiles[_index].miles;
    }

    /**
     * Get the Highest Miles Owner per each Medal Leader
     */
    function getHighestMilesOwnerAt(uint _index) public view returns (address) {
        require(_index >= 0 && _index < maxLeaders);
        return _highestMiles[_index].owner;
    }

    //
    // Internal Functions
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    /**
     * Take the Torch!  And receive KMS Tokens!
     */
    function takeTheTorch_(uint256 _amountPaid, address _takenBy, address _referredBy) internal antiWhalePrice(_amountPaid) returns (uint256) {
        require(_takenBy != address(0));
        require(_amountPaid >= 5 finney);
        require(_takenBy != torchRunners[0]); // Torch must be passed on
        if (_referredBy == address(this)) { _referredBy = address(0); }

        // Pass the Torch
        address previousLast = torchRunners[2];
        torchRunners[2] = torchRunners[1];
        torchRunners[1] = torchRunners[0];
        torchRunners[0] = _takenBy;

        // Get the Current Day Owner at OwnTheDay
        address dayOwner = OwnTheDayContract_.ownerOf(getDayIndex_(now));

        // Calculate Portions
        uint256 forDev = _amountPaid.mul(5).div(100);
        uint256 forTokens = _amountPaid.sub(_amountPaid.div(4));
        uint256 forPayout = _amountPaid.sub(forDev).sub(forTokens);
        uint256 forDayOwner = calculateDayOwnerCut_(forPayout);
        if (dayOwner == _takenBy) {
            forTokens = forTokens.add(forDayOwner);
            forPayout = _amountPaid.sub(forDev).sub(forTokens);
            playerData_[_takenBy].champion = true;
        } else {
            forPayout = forPayout.sub(forDayOwner);
        }

        // Fire Events
        onTorchPassed(torchRunners[1], _takenBy, _amountPaid);

        // Grant Mileage Tokens to Torch Holder
        uint256 mintedTokens = CryptoTorchToken_.mint.value(forTokens)(_takenBy, forTokens, _referredBy);

        // Update LeaderBoards
        updateLeaders_(_takenBy, _amountPaid);

        // Handle Payouts
        handlePayouts_(forDev, forPayout, forDayOwner, _takenBy, previousLast, dayOwner);
        return mintedTokens;
    }

    /**
     * Payouts to the last 3 Torch Runners, the Day Owner & Dev
     */
    function handlePayouts_(uint256 _forDev, uint256 _forPayout, uint256 _forDayOwner, address _takenBy, address _previousLast, address _dayOwner) internal {
        uint256[] memory runnerPortions = new uint256[](3);

        // Determine Runner Portions
        //  Note, torch has already been passed, so torchRunners[0]
        //  is the current torch runner
        if (_previousLast != address(0)) {
            runnerPortions[2] = _forPayout.mul(10).div(100);
        }
        if (torchRunners[2] != address(0)) {
            runnerPortions[1] = _forPayout.mul(30).div(100);
        }
        runnerPortions[0] = _forPayout.sub(runnerPortions[1]).sub(runnerPortions[2]);

        // Update Player Dividends
        playerData_[_previousLast].dividends = playerData_[_previousLast].dividends.add(runnerPortions[2]);
        playerData_[torchRunners[2]].dividends = playerData_[torchRunners[2]].dividends.add(runnerPortions[1]);
        playerData_[torchRunners[1]].dividends = playerData_[torchRunners[1]].dividends.add(runnerPortions[0]);

        // Track Profits
        playerData_[owner].profits = playerData_[owner].profits.add(_forDev);
        if (_dayOwner != _takenBy) {
            playerData_[_dayOwner].profits = playerData_[_dayOwner].profits.add(_forDayOwner);
        }

        // Transfer Funds
        //  - Transfer directly since these accounts are not, or may not be, existing
        //    Torch-Runners and therefore cannot "exit" this contract
        owner.transfer(_forDev);
        if (_dayOwner != _takenBy) {
            _dayOwner.transfer(_forDayOwner);
        }
    }

    /**
     * Withdraw the earned Torch Dividends to Ether
     *  - Does not touch Token Dividends or Token Referral Bonuses
     */
    function withdrawFor_(address _for) internal returns (uint256) {
        uint256 torchDividends = playerData_[_for].dividends;
        if (playerData_[_for].dividends > 0) {
            playerData_[_for].dividends = 0;
            playerData_[_for].profits = playerData_[_for].profits.add(torchDividends);
            _for.transfer(torchDividends);
        }
        return torchDividends;
    }

    /**
     * Update the Medal Leader Boards
     */
    function updateLeaders_(address _takenBy, uint256 _amountPaid) internal {
        // Owner can't be leader; conflict of interest
        if (_takenBy == owner || _takenBy == donationsReceiver_) { return; }

        // Update Highest Prices
        if (_amountPaid > _lowestHighPrice) {
            updateHighestPrices_(_amountPaid, _takenBy);
        }

        // Update Highest Mileage
        uint256 tokenBalance = CryptoTorchToken_.balanceOf(_takenBy);
        if (tokenBalance > _lowestHighMiles) {
            updateHighestMiles_(tokenBalance, _takenBy);
        }
    }

    /**
     * Calculate the amount of Payout for the Day Owner (Holidays receive extra)
     */
    function calculateDayOwnerCut_(uint256 _price) internal view returns (uint256) {
        if (getHolidayByIndex_(getDayIndex_(now)) == 1) {
            return _price.mul(25).div(100);
        }
        return _price.mul(10).div(100);
    }

    /**
     * Get the Day-Index of the current Day for Mapping with OwnTheDay.io
     */
    function getDayIndex_(uint timestamp) internal view returns (uint256) {
        uint16[12] memory offset = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
        uint8 day = DateTimeLib_.getDay(timestamp);
        uint8 month = DateTimeLib_.getMonth(timestamp) - 1;
        bool isLeapYear = DateTimeLib_.isLeapYear(DateTimeLib_.getYear(timestamp));
        // OwnTheDay always includes Feb 29
        if (isLeapYear && month > 1) { day = day + 1; }
        return offset[month] + day;
    }

    /**
     * Determine if Day-Index is a Holiday or not
     */
    function getHolidayByIndex_(uint256 _dayIndex) internal view returns (uint result) {
        if (_dayIndex < 122) {
            return getFromList_(0, _dayIndex);
        }
        if (_dayIndex < 244) {
            return getFromList_(1, _dayIndex-122);
        }
        return getFromList_(2, _dayIndex-244);
    }
    function getFromList_(uint8 _idx, uint256 _dayIndex) internal view returns (uint result) {
        result = parseInt_(uint(bytes(holidayMap_[_idx])[_dayIndex]));
    }
    function parseInt_(uint c) internal pure returns (uint result) {
        if (c >= 48 && c <= 57) {
            result = result * 10 + (c - 48);
        }
    }

    /**
     * Update the Medal Leaderboard for the Highest Price
     */
    function updateHighestPrices_(uint256 _price, address _owner) internal {
        uint256 newPos = maxLeaders;
        uint256 oldPos = maxLeaders;
        uint256 i;
        HighPrice memory tmp;

        // Determine positions
        for (i = maxLeaders-1; i >= 0; i--) {
            if (_price >= _highestPrices[i].price) {
                newPos = i;
            }
            if (_owner == _highestPrices[i].owner) {
                oldPos = i;
            }
            if (i == 0) { break; } // prevent i going below 0
        }
        // Insert or update leader
        if (newPos < maxLeaders) {
            if (oldPos < maxLeaders-1) {
                // update price for existing leader
                _highestPrices[oldPos].price = _price;
                if (newPos != oldPos) {
                    // swap
                    tmp = _highestPrices[newPos];
                    _highestPrices[newPos] = _highestPrices[oldPos];
                    _highestPrices[oldPos] = tmp;
                }
            } else {
                // shift down
                for (i = maxLeaders-1; i > newPos; i--) {
                    _highestPrices[i] = _highestPrices[i-1];
                }
                // insert
                _highestPrices[newPos].price = _price;
                _highestPrices[newPos].owner = _owner;
            }
            // track lowest value
            _lowestHighPrice = _highestPrices[maxLeaders-1].price;
        }
    }

    /**
     * Update the Medal Leaderboard for the Highest Miles
     */
    function updateHighestMiles_(uint256 _miles, address _owner) internal {
        uint256 newPos = maxLeaders;
        uint256 oldPos = maxLeaders;
        uint256 i;
        HighMileage memory tmp;

        // Determine positions
        for (i = maxLeaders-1; i >= 0; i--) {
            if (_miles >= _highestMiles[i].miles) {
                newPos = i;
            }
            if (_owner == _highestMiles[i].owner) {
                oldPos = i;
            }
            if (i == 0) { break; } // prevent i going below 0
        }
        // Insert or update leader
        if (newPos < maxLeaders) {
            if (oldPos < maxLeaders-1) {
                // update miles for existing leader
                _highestMiles[oldPos].miles = _miles;
                if (newPos != oldPos) {
                    // swap
                    tmp = _highestMiles[newPos];
                    _highestMiles[newPos] = _highestMiles[oldPos];
                    _highestMiles[oldPos] = tmp;
                }
            } else {
                // shift down
                for (i = maxLeaders-1; i > newPos; i--) {
                    _highestMiles[i] = _highestMiles[i-1];
                }
                // insert
                _highestMiles[newPos].miles = _miles;
                _highestMiles[newPos].owner = _owner;
            }
            // track lowest value
            _lowestHighMiles = _highestMiles[maxLeaders-1].miles;
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"profitsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"getTodayIndex","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":false,"inputs":[],"name":"withdrawDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isHolidayToday","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getHighestMilesAt","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":false,"inputs":[{"name":"_nickname","type":"string"}],"name":"setAccountNickname","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_note","type":"string"}],"name":"setAccountNote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"isChampionAccount","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTodayOwnerName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getHighestMilesOwnerAt","outputs":[{"name":"","type":"address"}],"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":true,"inputs":[{"name":"_dayIndex","type":"uint256"}],"name":"isHoliday","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"torchContractBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"}],"name":"takeTheTorch","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getMaxPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","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":"getTodayOwnerAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_limit","type":"uint256"}],"name":"setWhaleIncreaseLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_listIndex","type":"uint8"},{"name":"_holidayMap","type":"string"}],"name":"updateHolidayState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxLeaders","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receiver","type":"address"}],"name":"setDonationsReceiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getHighestPriceOwnerAt","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"getAccountCoords","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whaleMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"}],"name":"setTokenContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dateTimeAddress","type":"address"},{"name":"_tokenAddress","type":"address"},{"name":"_otdAddress","type":"address"}],"name":"initialize","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":"_max","type":"uint256"}],"name":"setWhaleMax","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"referralDividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dateTimeAddress","type":"address"}],"name":"setDateTimeLib","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getHighestPriceAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"getAccountNickname","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenContractBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"torchDividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_otdAddress","type":"address"}],"name":"setOwnTheDayContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"torchRunners","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whaleIncreaseLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"getAccountNote","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_coords","type":"string"}],"name":"setAccountCoords","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"tokenDividendsOf","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":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"pricePaid","type":"uint256"}],"name":"onTorchPassed","type":"event"},{"anonymous":false,"inputs":[],"name":"OnPause","type":"event"},{"anonymous":false,"inputs":[],"name":"OnUnpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60606040526000805460a060020a61ffff0219169055671bc16d674ec800006003556801158e460913d00000600455341561003957600080fd5b60008054600160a060020a033316600160a060020a03199182168117835560118054909216179055612ca390819061007190396000f3006060604052600436106102375763ffffffff60e060020a60003504166301ec0793811461028c57806310d0ffdd146102bd578063154faf5d146102d357806318160ddd146102e65780632e92abdd146102f95780633980b6801461030c5780633f4ba83a1461033357806343212c3c146103465780634b7503341461035c5780634d9994e81461036f57806351cb860a146103c05780635c975abb146104115780635d0f4ee01461042457806362571cac146104435780636bb7f98e146104cd57806370a08231146104ff5780637597eede1461051e57806375d5a7c614610534578063770e9e851461054757806382d8dff61461055b5780638456cb591461056e5780638620410b146105815780638ceeaaa8146105945780638da5cb5b146105a75780638e767411146105ba5780639e8c39ed146105d0578063a35cad7714610629578063a625664414610652578063a8d9549614610671578063b5147d6414610687578063b8314c22146106a6578063bbcd5bbe146106b9578063c0c53b8b146106d8578063c257c85114610703578063d0ffecaa14610719578063d6349dd61461072f578063d8b3ad771461074e578063d9cfc1821461076d578063dbbd78da14610783578063e4403507146107a2578063e4849b32146107b5578063e5c0fa69146107cb578063eac5426f146107ea578063ef39438014610809578063f2fde38b1461081f578063f40a91121461083e578063f6fee73214610851578063f9f81a7314610870578063fd6180cb146108c1575b6000341180156102515750601454600160a060020a031615155b1561028a57601454600160a060020a03163480156108fc0290604051600060405180830381858888f19350505050151561028a57600080fd5b005b341561029757600080fd5b6102ab600160a060020a03600435166108e0565b60405190815260200160405180910390f35b34156102c857600080fd5b6102ab600435610989565b34156102de57600080fd5b6102ab610a22565b34156102f157600080fd5b6102ab610a33565b341561030457600080fd5b6102ab610a9c565b341561031757600080fd5b61031f610b0c565b604051901515815260200160405180910390f35b341561033e57600080fd5b61028a610b2d565b341561035157600080fd5b6102ab600435610bac565b341561036757600080fd5b6102ab610be1565b341561037a57600080fd5b61028a60046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610c2b95505050505050565b34156103cb57600080fd5b61028a60046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610c9295505050505050565b341561041c57600080fd5b61031f610cea565b341561042f57600080fd5b61031f600160a060020a0360043516610cfa565b341561044e57600080fd5b610456610d1b565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561049257808201518382015260200161047a565b50505050905090810190601f1680156104bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104d857600080fd5b6104e3600435610e62565b604051600160a060020a03909116815260200160405180910390f35b341561050a57600080fd5b6102ab600160a060020a0360043516610ea3565b341561052957600080fd5b61031f600435610f1e565b341561053f57600080fd5b6102ab610f4e565b61028a600160a060020a0360043516610f5c565b341561056657600080fd5b6102ab611000565b341561057957600080fd5b61028a611031565b341561058c57600080fd5b6102ab6110b5565b341561059f57600080fd5b6104e36110ff565b34156105b257600080fd5b6104e361115a565b34156105c557600080fd5b61028a600435611169565b34156105db57600080fd5b61028a6004803560ff169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061118995505050505050565b341561063457600080fd5b61063c6111ee565b60405160ff909116815260200160405180910390f35b341561065d57600080fd5b61028a600160a060020a03600435166111f3565b341561067c57600080fd5b6104e3600435611230565b341561069257600080fd5b610456600160a060020a036004351661125a565b34156106b157600080fd5b6102ab61132a565b34156106c457600080fd5b61028a600160a060020a0360043516611330565b34156106e357600080fd5b61028a600160a060020a036004358116906024358116906044351661136d565b341561070e57600080fd5b6102ab6004356115fe565b341561072457600080fd5b61028a600435611651565b341561073a57600080fd5b6102ab600160a060020a0360043516611671565b341561075957600080fd5b61028a600160a060020a03600435166116cc565b341561077857600080fd5b6102ab600435611709565b341561078e57600080fd5b610456600160a060020a0360043516611733565b34156107ad57600080fd5b6102ab6117cc565b34156107c057600080fd5b61028a600435611816565b34156107d657600080fd5b6102ab600160a060020a036004351661187d565b34156107f557600080fd5b61028a600160a060020a036004351661189b565b341561081457600080fd5b6104e36004356118d8565b341561082a57600080fd5b61028a600160a060020a03600435166118f5565b341561084957600080fd5b6102ab611983565b341561085c57600080fd5b610456600160a060020a0360043516611989565b341561087b57600080fd5b61028a60046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611a2295505050505050565b34156108cc57600080fd5b6102ab600160a060020a0360043516611a7a565b60175460009061098190600160a060020a03166301ec079384846040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561093f57600080fd5b6102c65a03f1151561095057600080fd5b5050506040518051600160a060020a038516600090815260156020526040902060040154915063ffffffff611ad416565b90505b919050565b6000806109ad6109a084600463ffffffff611aee16565b849063ffffffff611b0516565b601754909150600160a060020a03166310d0ffdd8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610a0157600080fd5b6102c65a03f11515610a1257600080fd5b5050506040518051949350505050565b6000610a2d42611b17565b90505b90565b601754600090600160a060020a03166318160ddd82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a7d57600080fd5b6102c65a03f11515610a8e57600080fd5b505050604051805191505090565b601754600090600160a060020a0316639eca672c3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610aef57600080fd5b6102c65a03f11515610b0057600080fd5b505050610a2d33611d89565b600080610b1842611b17565b9050610b2381611e30565b60011491505b5090565b60005433600160a060020a03908116911614610b4857600080fd5b60005460a060020a900460ff161515610b6057600080fd5b6000805474ff0000000000000000000000000000000000000000191690557fbfc7b47e079b745ec7404d7fc82a0635e2a8363341743448b3bcf3f79ad59d0460405160405180910390a1565b6000808210158015610bbe5750600382105b1515610bc957600080fd5b600b8260038110610bd657fe5b600202015492915050565b601754600090600160a060020a0316634b75033482604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a7d57600080fd5b60005460a060020a900460ff1615610c4257600080fd5b33600160a060020a03161515610c5757600080fd5b6000815111610c6557600080fd5b600160a060020a0333166000908152601560205260409020818051610c8e929160200190612b91565b5050565b60005460a060020a900460ff1615610ca957600080fd5b33600160a060020a03161515610cbe57600080fd5b600160a060020a0333166000908152601560205260409020600101818051610c8e929160200190612b91565b60005460a060020a900460ff1681565b600160a060020a031660009081526015602052604090206005015460ff1690565b610d23612c0b565b601854600090600160a060020a0316636352211e610d3f610a22565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610d7e57600080fd5b6102c65a03f11515610d8f57600080fd5b5050506040518051905090506015600082600160a060020a0316600160a060020a031681526020019081526020016000206000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e575780601f10610e2c57610100808354040283529160200191610e57565b820191906000526020600020905b815481529060010190602001808311610e3a57829003601f168201915b505050505091505090565b6000808210158015610e745750600382105b1515610e7f57600080fd5b600b8260038110610e8c57fe5b6002020160010154600160a060020a031692915050565b601754600090600160a060020a03166370a0823183836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610efe57600080fd5b6102c65a03f11515610f0f57600080fd5b50505060405180519392505050565b6000808210158015610f31575061016e82105b1515610f3c57600080fd5b610f4582611e30565b60011492915050565b600160a060020a0330163190565b6000547501000000000000000000000000000000000000000000900460ff1615610f8557600080fd5b6000805475ff00000000000000000000000000000000000000000019167501000000000000000000000000000000000000000000179081905560a060020a900460ff1615610fd257600080fd5b610fdd343383611e72565b50506000805475ff00000000000000000000000000000000000000000019169055565b60006003546000141561101557506000610a30565b610a2d600560005b60020201546003549063ffffffff611ad416565b60005433600160a060020a0390811691161461104c57600080fd5b60005460a060020a900460ff161561106357600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f4d7c2d647163ffee415429ee44043a4e5252a64365083793b624b51dfd7ce01d60405160405180910390a1565b601754600090600160a060020a0316638620410b82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a7d57600080fd5b601854600090600160a060020a0316636352211e61111b610a22565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610a7d57600080fd5b600054600160a060020a031681565b60005433600160a060020a0390811691161461118457600080fd5b600355565b60005433600160a060020a039081169116146111a457600080fd5b60008260ff16101580156111bb575060038260ff16105b15156111c657600080fd5b80601960ff8416600381106111d757fe5b019080516111e9929160200190612b91565b505050565b600381565b60005433600160a060020a0390811691161461120e57600080fd5b60148054600160a060020a031916600160a060020a0392909216919091179055565b60008082101580156112425750600382105b151561124d57600080fd5b60058260038110610e8c57fe5b611262612c0b565b6015600083600160a060020a0316600160a060020a031681526020019081526020016000206002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561131e5780601f106112f35761010080835404028352916020019161131e565b820191906000526020600020905b81548152906001019060200180831161130157829003601f168201915b50505050509050919050565b60045481565b60005433600160a060020a0390811691161461134b57600080fd5b60178054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a0390811691161461138857600080fd5b60168054600160a060020a03808616600160a060020a03199283161790925560178054858416908316179055601880549284169290911691909117905560a06040519081016040908152607a82527f313030303031313030303030303131303030303030303030303030303031303160208301527f3130303030303030303031313130313030303030303030303030303031313030908201527f303030303030303030303030313030313030303031303030303130313130303060608201527f313031303031313030303031303030303130303031313030303000000000000060808201526019908051611480929160200190612b91565b5060a06040519081016040908152607a82527f313031313130303031303031303130303031313130303030303031303031303060208301527f3030303130303031303030313030313030303130303030303030303031303031908201527f303030303030303030313030303030303131303030303030303030303030303160608201527f30303030303030303031303030313130303030313130303030300000000000006080820152601a90805161153c929160200190612b91565b5060a06040519081016040908152607a82527f303130303030303030303031303030303031303130313130303030303031313060208301527f3030303030313130303030303030303130303030303030303030303031313130908201527f303030313030303130303030303030303130313030303030303030303130303060608201527f30303030303030303030303030303031303031313030303030310000000000006080820152601b9080516115f8929160200190612b91565b50505050565b601754600090600160a060020a031663c257c85183836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610efe57600080fd5b60005433600160a060020a0390811691161461166c57600080fd5b600455565b601754600090600160a060020a0316634653464983836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610efe57600080fd5b60005433600160a060020a039081169116146116e757600080fd5b60168054600160a060020a031916600160a060020a0392909216919091179055565b600080821015801561171b5750600382105b151561172657600080fd5b60058260038110610bd657fe5b61173b612c0b565b6015600083600160a060020a0316600160a060020a031681526020019081526020016000206000018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561131e5780601f106112f35761010080835404028352916020019161131e565b601754600090600160a060020a0316638b7afe2e82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a7d57600080fd5b601754600160a060020a0316637f2438cb338360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561186c57600080fd5b6102c65a03f115156115f857600080fd5b600160a060020a031660009081526015602052604090206003015490565b60005433600160a060020a039081169116146118b657600080fd5b60188054600160a060020a031916600160a060020a0392909216919091179055565b601181600381106118e557fe5b0154600160a060020a0316905081565b60005433600160a060020a0390811691161461191057600080fd5b600160a060020a038116151561192557600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008054600160a060020a031916600160a060020a0392909216919091179055565b60035481565b611991612c0b565b6015600083600160a060020a0316600160a060020a031681526020019081526020016000206001018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561131e5780601f106112f35761010080835404028352916020019161131e565b60005460a060020a900460ff1615611a3957600080fd5b33600160a060020a03161515611a4e57600080fd5b600160a060020a0333166000908152601560205260409020600201818051610c8e929160200190612b91565b601754600090600160a060020a03166265318b83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610efe57600080fd5b600082820183811015611ae357fe5b8091505b5092915050565b6000808284811515611afc57fe5b04949350505050565b600082821115611b1157fe5b50900390565b6000611b21612c1d565b600080600061018060405190810160409081526000808352601f6020840152603b82840152605a606084015260786080840152609760a084015260b560c084015260d460e084015260f361010084015261011161012084015261013061014084015261014e610160840152601654929650600160a060020a03909216916365c7284091899190516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611be257600080fd5b6102c65a03f11515611bf357600080fd5b505050604051805160165490945060019150600160a060020a031663a324ad248860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611c5357600080fd5b6102c65a03f11515611c6457600080fd5b5050506040518051601654929003935050600160a060020a031663a6f0e577816392d663138960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611cc957600080fd5b6102c65a03f11515611cda57600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff841602815261ffff9091166004820152602401602060405180830381600087803b1515611d2657600080fd5b6102c65a03f11515611d3757600080fd5b505050604051805190509050808015611d53575060018260ff16115b15611d5f578260010192505b8260ff16848360ff16600c81101515611d7457fe5b60200201510161ffff16945050505050919050565b600160a060020a03811660009081526015602052604081206003015481811115611e2a57600160a060020a0383166000908152601560205260408120600381019190915560040154611de1908263ffffffff611ad416565b600160a060020a03841660008181526015602052604090819020600401929092559082156108fc0290839051600060405180830381858888f193505050501515611e2a57600080fd5b92915050565b6000607a821015611e4d57611e466000836121f2565b9050610984565b60f4821015611e6457611e466001607a84036121f2565b610981600260f484036121f2565b6000806000806000806000808a60035460001480611eee5750611e976005600061101d565b8111158015611eee575060048054600160a060020a0333166000908152601560205260409020918201546003909201549091611eeb918491611edf919063ffffffff611ad416565b9063ffffffff611ad416565b11155b1515611ef957600080fd5b600160a060020a038b161515611f0e57600080fd5b6611c37937e080008c1015611f2257600080fd5b601154600160a060020a038c811691161415611f3d57600080fd5b30600160a060020a03168a600160a060020a03161415611f5c57600099505b6013805460128054600160a060020a0319808416600160a060020a038381169190911790955560118054928216838716179093558f85169116179055601854908216995016636352211e611faf42611b17565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611fee57600080fd5b6102c65a03f11515611fff57600080fd5b5050506040518051975061202d905060646120218e600563ffffffff61227916565b9063ffffffff611aee16565b95506120506120438d600463ffffffff611aee16565b8d9063ffffffff611b0516565b9450612072856120668e8963ffffffff611b0516565b9063ffffffff611b0516565b935061207d846122a4565b92508a600160a060020a031687600160a060020a031614156120ec576120a9858463ffffffff611ad416565b94506120bf856120668e8963ffffffff611b0516565b600160a060020a038c166000908152601560205260409020600501805460ff1916600117905593506120ff565b6120fc848463ffffffff611b0516565b93505b601254600160a060020a038c811691167ff48f5c6dcc828289ac34d56b5cf2f546c704cfa7bc3f513c21dbbf397c26dff88e60405190815260200160405180910390a3601754600160a060020a0316630d4d1513868d818e60006040516020015260405160e060020a63ffffffff8716028152600160a060020a039384166004820152602481019290925290911660448201526064016020604051808303818588803b15156121ad57600080fd5b6125ee5a03f115156121be57600080fd5b505050506040518051905091506121d58b8d6122eb565b6121e38685858e8c8c6123bd565b509a9950505050505050505050565b6000612272601960ff85166003811061220757fe5b0183815460018160011615610100020316600290048110151561222657fe5b8154600116156122455790600052602060002090602091828204019190065b90547f0100000000000000000000000000000000000000000000000000000000000000911a8102046126df565b9392505050565b60008083151561228c5760009150611ae7565b5082820282848281151561229c57fe5b0414611ae357fe5b60006122b76122b242611b17565b611e30565b600114156122d557611e46606461202184601963ffffffff61227916565b610981606461202184600a63ffffffff61227916565b60008054600160a060020a03848116911614806123155750601454600160a060020a038481169116145b1561231f576111e9565b600154821115612333576123338284612706565b601754600160a060020a03166370a082318460006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561238c57600080fd5b6102c65a03f1151561239d57600080fd5b5050506040518051905090506002548111156111e9576111e9818461294c565b6123c5612c0b565b60036040518059106123d45750595b90808252806020026020018201604052509050600160a060020a038316156124245761240c606461202188600a63ffffffff61227916565b8160028151811061241957fe5b602090810290910101525b601354600160a060020a0316156124635761244b606461202188601e63ffffffff61227916565b8160018151811061245857fe5b602090810290910101525b6124a48160028151811061247357fe5b906020019060200201516120668360018151811061248d57fe5b90602001906020020151899063ffffffff611b0516565b816000815181106124b157fe5b602090810290910101526124fd816002815181106124cb57fe5b90602001906020020151600160a060020a0385166000908152601560205260409020600301549063ffffffff611ad416565b600160a060020a0384166000908152601560205260409020600301556125678160018151811061252957fe5b9060200190602002015160156000601160025b0154600160a060020a031681526020810191909152604001600020600301549063ffffffff611ad416565b601354600160a060020a03166000908152601560205260408120600301919091556125af9082908151811061259857fe5b90602001906020020151601560006011600161253c565b601254600160a060020a03908116600090815260156020526040808220600301939093558054909116815220600401546125e99088611ad4565b60008054600160a060020a03908116825260156020526040909120600401919091558281169085161461265f57600160a060020a038216600090815260156020526040902060040154612642908663ffffffff611ad416565b600160a060020a0383166000908152601560205260409020600401555b600054600160a060020a031687156108fc0288604051600060405180830381858888f19350505050151561269257600080fd5b600160a060020a03828116908516146126d657600160a060020a03821685156108fc0286604051600060405180830381858888f1935050505015156126d657600080fd5b50505050505050565b6000603082101580156126f3575060398211155b1561098457600a028101602f1901919050565b6000806000612713612c46565b60039350839250600291505b60008210612788576005826003811061273457fe5b60020201548610612743578193505b6005826003811061275057fe5b6002020160010154600160a060020a039081169086161415612770578192505b81151561277c57612788565b6000199091019061271f565b60038410156129445760028310156128805785600584600381106127a857fe5b600202015583831461287b57600584600381106127c157fe5b600202016040805190810160405281548152600190910154600160a060020a031660208201529050600583600381106127f657fe5b600202016005856003811061280757fe5b82546002919091029190910190815560019182015491018054600160a060020a031916600160a060020a03909216919091179055806005846003811061284957fe5b600202018151815560208201516001919091018054600160a060020a031916600160a060020a03909216919091179055505b61293d565b600291505b838211156128f057600560001983016003811061289e57fe5b60020201600583600381106128af57fe5b82546002919091029190910190815560019182015491018054600160a060020a031916600160a060020a039092169190911790556000199190910190612885565b85600585600381106128fe57fe5b6002020155846005856003811061291157fe5b6002020160010160006101000a815481600160a060020a030219169083600160a060020a031602179055505b6009546001555b505050505050565b6000806000612959612c46565b60039350839250600291505b600082106129ce57600b826003811061297a57fe5b60020201548610612989578193505b600b826003811061299657fe5b6002020160010154600160a060020a0390811690861614156129b6578192505b8115156129c2576129ce565b60001990910190612965565b6003841015612944576002831015612ac65785600b84600381106129ee57fe5b6002020155838314612ac157600b8460038110612a0757fe5b600202016040805190810160405281548152600190910154600160a060020a031660208201529050600b8360038110612a3c57fe5b60020201600b8560038110612a4d57fe5b82546002919091029190910190815560019182015491018054600160a060020a031916600160a060020a0390921691909117905580600b8460038110612a8f57fe5b600202018151815560208201516001919091018054600160a060020a031916600160a060020a03909216919091179055505b612b83565b600291505b83821115612b3657600b600019830160038110612ae457fe5b60020201600b8360038110612af557fe5b82546002919091029190910190815560019182015491018054600160a060020a031916600160a060020a039092169190911790556000199190910190612acb565b85600b8560038110612b4457fe5b600202015584600b8560038110612b5757fe5b6002020160010160006101000a815481600160a060020a030219169083600160a060020a031602179055505b5050600f5460025550505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612bd257805160ff1916838001178555612bff565b82800160010185558215612bff579182015b82811115612bff578251825591602001919060010190612be4565b50610b29929150612c5d565b60206040519081016040526000815290565b610180604051908101604052600c815b600081526000199091019060200181612c2d5790505090565b604080519081016040526000808252602082015290565b610a3091905b80821115610b295760008155600101612c635600a165627a7a723058202c516702a11bdf5bc4660b16a819234a09eb408072d554c0f54c17a5038ee61e0029

Swarm Source

bzzr://2c516702a11bdf5bc4660b16a819234a09eb408072d554c0f54c17a5038ee61e

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.