ETH Price: $2,713.59 (+0.62%)

Contract

0x84cD488424c0432FabC4a144289F1EC86d59c88a
 

Overview

ETH Balance

0.00304 ETH

Eth Value

$8.25 (@ $2,713.59/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Owner Cashout62231712018-08-27 13:42:132367 days ago1535377333IN
0x84cD4884...86d59c88a
0 ETH0.000169696
Owner Cashout62231702018-08-27 13:41:492367 days ago1535377309IN
0x84cD4884...86d59c88a
0 ETH0.000056562
Owner Cashout62230442018-08-27 13:10:342367 days ago1535375434IN
0x84cD4884...86d59c88a
0 ETH0.000028281
Owner Cashout61916122018-08-22 5:37:012373 days ago1534916221IN
0x84cD4884...86d59c88a
0 ETH0.0001998310
Cash Out61739562018-08-19 6:24:032376 days ago1534659843IN
0x84cD4884...86d59c88a
0 ETH0.000077833
Cash Out52363732018-03-11 13:32:162536 days ago1520775136IN
0x84cD4884...86d59c88a
0 ETH0.000068492
Cash Out51980992018-03-05 1:28:262543 days ago1520213306IN
0x84cD4884...86d59c88a
0 ETH0.000077833
Cash Out51920452018-03-04 0:44:422544 days ago1520124282IN
0x84cD4884...86d59c88a
0 ETH0.000051892
Cash Out51885752018-03-03 10:56:062544 days ago1520074566IN
0x84cD4884...86d59c88a
0 ETH0.000025941
Cash Out51752782018-03-01 4:37:112547 days ago1519879031IN
0x84cD4884...86d59c88a
0 ETH0.000051892
Cash Out51749242018-03-01 3:11:042547 days ago1519873864IN
0x84cD4884...86d59c88a
0 ETH0.000025941
Purchase Themed ...51500792018-02-24 21:35:402551 days ago1519508140IN
0x84cD4884...86d59c88a
0.052 ETH0.000752952
Cash Out51449552018-02-24 0:28:252552 days ago1519432105IN
0x84cD4884...86d59c88a
0 ETH0.000041
Cash Out51433462018-02-23 18:11:252552 days ago1519409485IN
0x84cD4884...86d59c88a
0 ETH0.000051892
Cash Out51428602018-02-23 16:07:582552 days ago1519402078IN
0x84cD4884...86d59c88a
0 ETH0.000129735
Purchase Themed ...51329262018-02-21 23:32:362554 days ago1519255956IN
0x84cD4884...86d59c88a
0.00121 ETH0.000626661
Cash Out51226652018-02-20 5:09:452556 days ago1519103385IN
0x84cD4884...86d59c88a
0 ETH0.000077833
Purchase Themed ...51193982018-02-19 15:50:092556 days ago1519055409IN
0x84cD4884...86d59c88a
0.0012 ETH0.001841123
Purchase Themed ...51160962018-02-19 2:24:262557 days ago1519007066IN
0x84cD4884...86d59c88a
0.0515 ETH0.000348641
Cash Out51158632018-02-19 1:29:332557 days ago1519003773IN
0x84cD4884...86d59c88a
0 ETH0.000025941
Purchase Themed ...51146922018-02-18 20:48:182557 days ago1518986898IN
0x84cD4884...86d59c88a
0.00848 ETH0.000714392
Purchase Themed ...51146772018-02-18 20:42:432557 days ago1518986563IN
0x84cD4884...86d59c88a
0.00119 ETH0.00117152
Cash Out51141942018-02-18 18:48:232557 days ago1518979703IN
0x84cD4884...86d59c88a
0 ETH0.000041
Cash Out51127792018-02-18 13:03:582557 days ago1518959038IN
0x84cD4884...86d59c88a
0 ETH0.000041
Purchase Themed ...51102982018-02-18 3:09:402558 days ago1518923380IN
0x84cD4884...86d59c88a
0.051 ETH0.0067048620
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
61916122018-08-22 5:37:012373 days ago1534916221
0x84cD4884...86d59c88a
1.816 ETH
61739562018-08-19 6:24:032376 days ago1534659843
0x84cD4884...86d59c88a
0.01036 ETH
51980992018-03-05 1:28:262543 days ago1520213306
0x84cD4884...86d59c88a
0.00006 ETH
51920452018-03-04 0:44:422544 days ago1520124282
0x84cD4884...86d59c88a
0.00016 ETH
51885752018-03-03 10:56:062544 days ago1520074566
0x84cD4884...86d59c88a
0.002 ETH
51752782018-03-01 4:37:112547 days ago1519879031
0x84cD4884...86d59c88a
0.00052 ETH
51749242018-03-01 3:11:042547 days ago1519873864
0x84cD4884...86d59c88a
0.00027 ETH
51433462018-02-23 18:11:252552 days ago1519409485
0x84cD4884...86d59c88a
0.0003 ETH
51428602018-02-23 16:07:582552 days ago1519402078
0x84cD4884...86d59c88a
0.00001 ETH
51226652018-02-20 5:09:452556 days ago1519103385
0x84cD4884...86d59c88a
0.00111 ETH
51158632018-02-19 1:29:332557 days ago1519003773
0x84cD4884...86d59c88a
0.00464 ETH
51037642018-02-17 1:12:062559 days ago1518829926
0x84cD4884...86d59c88a
0.00009 ETH
51035792018-02-17 0:30:002559 days ago1518827400
0x84cD4884...86d59c88a
0.00003 ETH
51011622018-02-16 14:25:102559 days ago1518791110
0x84cD4884...86d59c88a
0.00008 ETH
50995432018-02-16 8:02:172560 days ago1518768137
0x84cD4884...86d59c88a
0.00212 ETH
50982342018-02-16 2:52:412560 days ago1518749561
0x84cD4884...86d59c88a
0.00007 ETH
50933652018-02-15 7:16:322561 days ago1518678992
0x84cD4884...86d59c88a
0.00002 ETH
50920582018-02-15 2:09:112561 days ago1518660551
0x84cD4884...86d59c88a
0.00003 ETH
50863882018-02-14 2:49:422562 days ago1518576582
0x84cD4884...86d59c88a
0.00001 ETH
50815072018-02-13 7:07:202563 days ago1518505640
0x84cD4884...86d59c88a
0.00001 ETH
50743232018-02-12 2:14:472564 days ago1518401687
0x84cD4884...86d59c88a
0.01005 ETH
50742942018-02-12 2:07:382564 days ago1518401258
0x84cD4884...86d59c88a
0.00001 ETH
50741582018-02-12 1:36:402564 days ago1518399400
0x84cD4884...86d59c88a
1.752 ETH
50691672018-02-11 5:12:442565 days ago1518325964
0x84cD4884...86d59c88a
2.251 ETH
50690492018-02-11 4:45:282565 days ago1518324328
0x84cD4884...86d59c88a
1.309 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SpinnerProcessor

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-02-14
*/

pragma solidity ^0.4.18;

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

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

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

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

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

library Shared {
    struct Spinner {
        string name;
        uint256 class;
        uint8 speed;
        uint8 momentum;
        uint8 inertia;
        uint256 _id;
        address spinnerOwner;
        uint256 created;
        uint256 purchasePrice;
        uint256 purchaseIndex;    
    }

    struct SpinnerMint {
        bool purchasable;
        uint startPrice;
        uint currentPrice;
        uint returnPrice;
    }
}


contract SpinnerDatabase is Ownable {
    
    uint256 public totalSpinners;
    uint256 public availableThemedSpinners;
    uint256 public maxSpinners; //prevent hoarding
    uint256 public currentUniqueSpinnerPrice;
    uint256 spinnerModulus = 16777216; //16,777,216 or 256^3 possible unique spinners
    uint256 public uniqueSpinners;

    address[] public uniqueSpinnerOwners;
    
    address public owner;
    address public processorAddress;
    address public factoryAddress;
    address public marketAddress;

    function setProcessorAddress(address processAddress) public onlyOwner {
        processorAddress = processAddress;
    }

    function setFactoryAddress(address factorAddress) public onlyOwner {
        factoryAddress = factorAddress;
    }

    function setMarketAddress(address market) public onlyOwner {
        marketAddress = market;
    }

    mapping (uint => uint) public spinnerCounts;
    mapping (address => uint) public balances;
    mapping (address => uint) public earn;
    mapping (uint => Shared.SpinnerMint) public themedSpinners;
    mapping (address => Shared.Spinner[]) public SpinnersByAddress;
    mapping (uint => address[]) public OwnersBySpinner;
    mapping (address => uint) public SpinnerCountsByAddress;
    mapping (uint => uint) public originalPricesBySpinner;
    mapping (uint => uint) public spinnerCountsByType;

    function SpinnerDatabase() public {
        totalSpinners = 0;
        maxSpinners = 512;
        availableThemedSpinners = 0;
        uniqueSpinners = 0;
        currentUniqueSpinnerPrice = 1 ether;
        owner = msg.sender;
        
    }

    function addSpinner(string _name, uint _type, address creator, uint value, uint8 speed, uint8 momentum, uint8 inertia) external {
        require(msg.sender == factoryAddress);
        uint256 _id = uint(uint(keccak256(_type)) + uint(keccak256(block.timestamp + uint(keccak256(msg.sender)))));
        uint256 purchaseIndex = spinnerCountsByType[_type];
        SpinnersByAddress[creator].push(Shared.Spinner(_name, _type, speed, momentum, inertia, _id, creator, block.timestamp, value, purchaseIndex));
        incrementBalances(_type); //payout owners
        OwnersBySpinner[_type].push(creator); //Add new owner of Spinner
        incrementThemedSpinnerPrice(_type); //increase price
        spinnerCounts[_type]++; //Total Purchased of Spinner
        totalSpinners++; //Total Purchased overall
        SpinnerCountsByAddress[creator]++; //Total Owned
        spinnerCountsByType[_type]++; //increment count of type    
    }

    function addUniqueSpinner(string _name, uint _type, address creator, uint value, uint8 speed, uint8 momentum, uint8 inertia) external {
        require(msg.sender == factoryAddress); 
        uint256 _id = uint(uint(keccak256(_type)) + uint(keccak256(block.timestamp + uint(keccak256(msg.sender)))));
        uint256 purchaseIndex = uniqueSpinners;
        SpinnersByAddress[creator].push(Shared.Spinner(_name, _type, speed, momentum, inertia, _id, creator, block.timestamp, value, purchaseIndex));
        uniqueSpinnerOwners.push(creator); //Add new owner of Spinner
        uniqueSpinners++; //Total Purchased of Spinner
        totalSpinners++; //Total Purchased overall
        SpinnerCountsByAddress[creator]++; //Total Owned
    }

    function changeOwnership(string _name, uint _id, uint _type, address originalOwner, address newOwner) external {
        require(msg.sender == marketAddress);
        uint256 totalSpinnersOwned = SpinnerCountsByAddress[originalOwner];
        for (uint256 i = 0; i < totalSpinnersOwned; i++) {
            uint mySpinnerId = getSpinnerData(originalOwner, i)._id;
            if (mySpinnerId == _id) {
                executeOwnershipChange(i, _id, _type, originalOwner, newOwner, _name);
                break;
            }
        }
        changeOwnershipStepTwo(_type, originalOwner, newOwner);
    }

    function changeOwnershipStepTwo(uint _type, address originalOwner, address newOwner) private {
        uint totalSpinnersOfType = spinnerCountsByType[_type];
        address[] storage owners = OwnersBySpinner[_type];
        for (uint j = 0; j < totalSpinnersOfType; j++) {
            if (owners[j] == originalOwner) {
                owners[j] = newOwner;
                break;
            }
        }
        OwnersBySpinner[_type] = owners;    
    }

    function changeUniqueOwnership(string _name, uint _id, address originalOwner, address newOwner) external {
        require(msg.sender == marketAddress);
        uint256 totalSpinnersOwned = SpinnerCountsByAddress[originalOwner];
        for (uint256 i = 0; i < totalSpinnersOwned; i++) {
            uint mySpinnerId = getSpinnerData(originalOwner, i)._id;
            if (mySpinnerId == _id) {
                uint spinnerType = getSpinnerData(originalOwner, i).class;
                executeOwnershipChange(i, _id, spinnerType, originalOwner, newOwner, _name);
                break;
            }
        }
        changeUniqueOwnershipStepTwo(originalOwner, newOwner);
    }
    
    function changeUniqueOwnershipStepTwo(address originalOwner, address newOwner) private {
        uint totalUniqueSpinners = uniqueSpinners;
        for (uint j = 0; j < totalUniqueSpinners; j++) {
            if (uniqueSpinnerOwners[j] == originalOwner) {
                uniqueSpinnerOwners[j] = newOwner;
                break;
            }
        }  
    }

    function executeOwnershipChange(uint i, uint _id, uint _type, address originalOwner, address newOwner, string _name) private {
        uint8 spinnerSpeed = getSpinnerData(originalOwner, i).speed;
        uint8 spinnerMomentum = getSpinnerData(originalOwner, i).momentum;
        uint8 spinnerInertia = getSpinnerData(originalOwner, i).inertia;
        uint spinnerTimestamp = getSpinnerData(originalOwner, i).created;
        uint spinnerPurchasePrice = getSpinnerData(originalOwner, i).purchasePrice;
        uint spinnerPurchaseIndex  = getSpinnerData(originalOwner, i).purchaseIndex;
        SpinnerCountsByAddress[originalOwner]--;
        delete SpinnersByAddress[originalOwner][i];
        SpinnersByAddress[newOwner].push(Shared.Spinner(_name, _type, spinnerSpeed, spinnerMomentum, spinnerInertia, _id, newOwner, spinnerTimestamp, spinnerPurchasePrice, spinnerPurchaseIndex));
        SpinnerCountsByAddress[newOwner]++;  
    }


    function generateThemedSpinners(uint seed, uint price, uint returnPrice) external {
        require(msg.sender == factoryAddress);
        themedSpinners[seed] = Shared.SpinnerMint(true, price, price, returnPrice);
        originalPricesBySpinner[seed] = price;
        availableThemedSpinners++;
    }

    function incrementThemedSpinnerPrice(uint seed) private {
        themedSpinners[seed].currentPrice = themedSpinners[seed].currentPrice + themedSpinners[seed].returnPrice;
    }

    function getSpinnerPrice(uint seed) public view returns (uint) {
        return themedSpinners[seed].currentPrice;
    }

    function getUniqueSpinnerPrice() public view returns (uint) {
        return currentUniqueSpinnerPrice;
    }

    function setUniqueSpinnerPrice(uint cost) public onlyOwner {
        currentUniqueSpinnerPrice = cost;
    }

    function getBalance(address walletAddress) public view returns (uint) {
        return balances[walletAddress];
    }

    function getSpinnerData(address walletAddress, uint index) public view returns (Shared.Spinner) {
        return SpinnersByAddress[walletAddress][index];
    } 

    function getOriginalSpinnerPrice(uint256 _id) public view returns (uint) {
        return originalPricesBySpinner[_id];
    }

    function doesAddressOwnSpinner(address walletAddress, uint _id) public view returns (bool) {
        uint count = spinnerCountsByType[_id + spinnerModulus];
        for (uint i=0; i<count; i++) {
            if (keccak256(SpinnersByAddress[walletAddress][i].spinnerOwner) == keccak256(walletAddress)) {
                return true;
            }
        }
        return false;
    }

    function incrementBalances(uint _type) private {
        uint totalPurchased = spinnerCounts[_type];
        address[] storage owners = OwnersBySpinner[_type];
        uint payout = themedSpinners[_type].returnPrice;
        for (uint i = 0; i < totalPurchased; i++) {
            balances[owners[i]] = balances[owners[i]] + payout;
            earn[owners[i]] = earn[owners[i]] + payout;
        }
    }

    function decrementBalance(address walletAddress, uint amount) external {
        require(msg.sender == processorAddress);
        require(amount <= balances[walletAddress]);
        balances[walletAddress] = balances[walletAddress] - amount;
    }
}

contract SpinnerFactory is Ownable {

    function SpinnerFactory(address _spinnerDatabaseAddress) public {
        databaseAddress = _spinnerDatabaseAddress;
    }

    address public databaseAddress;
    address public processorAddress;
    uint256 public spinnerModulus = 16777216; //16,777,216 or 256^3 possible unique spinners

    address public owner;

    mapping (uint => bool) public initialSpinners; //mapping of initial spinners

    function setProcessorAddress(address processAddress) public onlyOwner {
        processorAddress = processAddress;
    }

    function _generateRandomSeed() internal view returns (uint) {
        uint rand = uint(keccak256(uint(block.blockhash(block.number-1)) + uint(keccak256(msg.sender))));
        return rand % spinnerModulus;
    }

    function createUniqueSpinner(string _name, address creator, uint value) external {
        require(msg.sender == processorAddress);
        uint _seed = _generateRandomSeed();
        SpinnerDatabase database = SpinnerDatabase(databaseAddress);
        database.addUniqueSpinner(_name, _seed, creator, value, uint8(keccak256(_seed + 1)) % 64 + 64, uint8(keccak256(_seed + 2)) % 64 + 64, uint8(keccak256(_seed + 3)) % 64 + 64);
    }

   function createThemedSpinner(string _name, uint _type, address creator, uint value) external {
        require(msg.sender == processorAddress);
        require(initialSpinners[_type] == true);
        uint _seed = _generateRandomSeed();
        SpinnerDatabase database = SpinnerDatabase(databaseAddress);
        database.addSpinner(_name, _type, creator, value, uint8(keccak256(_seed + 1)) % 64 + 64, uint8(keccak256(_seed + 2)) % 64 + 64, uint8(keccak256(_seed + 3)) % 64 + 64);
    }

    function addNewSpinner(uint _type) public onlyOwner {
        initialSpinners[_type] = true;
    }

    function blockNewSpinnerPurchase(uint _type) public onlyOwner {
        initialSpinners[_type] = false;
    }

    function mintGen0Spinners() public onlyOwner {
        SpinnerDatabase database = SpinnerDatabase(databaseAddress);
        addNewSpinner(1 + spinnerModulus);
        database.generateThemedSpinners(1 + spinnerModulus, 1 ether, .01 ether);
        addNewSpinner(2 + spinnerModulus);
        database.generateThemedSpinners(2 + spinnerModulus, 1 ether, .01 ether);
        addNewSpinner(3 + spinnerModulus);
        database.generateThemedSpinners(3 + spinnerModulus, .75 ether, .0075 ether);
        addNewSpinner(4 + spinnerModulus);
        database.generateThemedSpinners(4 + spinnerModulus, .75 ether, .0075 ether);
        addNewSpinner(5 + spinnerModulus);
        database.generateThemedSpinners(5 + spinnerModulus, .75 ether, .0075 ether);
        addNewSpinner(6 + spinnerModulus);
        database.generateThemedSpinners(6 + spinnerModulus, .75 ether, .0075 ether);
        addNewSpinner(7 + spinnerModulus);
        database.generateThemedSpinners(7 + spinnerModulus, .75 ether, .0075 ether);
        addNewSpinner(8 + spinnerModulus);
        database.generateThemedSpinners(8 + spinnerModulus, .75 ether, .0075 ether);
        addNewSpinner(9 + spinnerModulus);
        database.generateThemedSpinners(9 + spinnerModulus, .5 ether, .005 ether);
        addNewSpinner(10 + spinnerModulus);
        database.generateThemedSpinners(10 + spinnerModulus, .5 ether, .005 ether);
        addNewSpinner(11 + spinnerModulus);
        database.generateThemedSpinners(11 + spinnerModulus, .5 ether, .005 ether);
        addNewSpinner(12 + spinnerModulus);
        database.generateThemedSpinners(12 + spinnerModulus, .5 ether, .005 ether);
        addNewSpinner(13 + spinnerModulus);
        database.generateThemedSpinners(13 + spinnerModulus, .2 ether, .002 ether);
        addNewSpinner(14 + spinnerModulus);
        database.generateThemedSpinners(14 + spinnerModulus, .2 ether, .002 ether);
        addNewSpinner(15 + spinnerModulus);
        database.generateThemedSpinners(15 + spinnerModulus, .3 ether, .003 ether);
        addNewSpinner(16 + spinnerModulus);
        database.generateThemedSpinners(16 + spinnerModulus, .3 ether, .003 ether);
        addNewSpinner(17 + spinnerModulus);
        database.generateThemedSpinners(17 + spinnerModulus, .05 ether, .0005 ether);
        addNewSpinner(18 + spinnerModulus);
        database.generateThemedSpinners(18 + spinnerModulus, .05 ether, .0005 ether);
        addNewSpinner(19 + spinnerModulus);
        database.generateThemedSpinners(19 + spinnerModulus, .008 ether, .00008 ether);
        addNewSpinner(20 + spinnerModulus);
        database.generateThemedSpinners(20 + spinnerModulus, .001 ether, .00001 ether);
    }

    function mintNewSpinner(uint _id, uint price, uint returnPrice) public onlyOwner {
        SpinnerDatabase database = SpinnerDatabase(databaseAddress);
        addNewSpinner(_id + spinnerModulus);
        database.generateThemedSpinners(_id + spinnerModulus, price, returnPrice);
    }
}
    
contract SpinnerProcessor is Ownable {

    uint256 spinnerModulus = 16777216; //16,777,216 or 256^3 possible unique spinners

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

    modifier uniqueSpinnersActivated() {
        require(uniqueSpinnersActive);
        _;
    }

    address public owner;

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

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

    function activateUniqueSpinners() public onlyOwner {
        uniqueSpinnersActive = true;
    }   
    
    bool public paused;
    bool public uniqueSpinnersActive;

    address factoryAddress;
    address databaseAddress;
    address ownerAddress;

    uint256 ownerEarn;
    uint256 ownerBalance;

    function viewBalance() view public returns (uint256) {
        return this.balance;
    }

    function SpinnerProcessor(address _spinnerFactoryAddress, address _spinnerDatabaseAddress, address _ownerAddress) public {
        factoryAddress = _spinnerFactoryAddress;
        databaseAddress = _spinnerDatabaseAddress;
        ownerAddress = _ownerAddress;
        paused = true;
        uniqueSpinnersActive = false;
    }

    function purchaseThemedSpinner(string _name, uint _id) public payable whenNotPaused {
        SpinnerDatabase database = SpinnerDatabase(databaseAddress);
        uint currentPrice = database.getSpinnerPrice(_id + spinnerModulus);
        require(msg.value == currentPrice);
        uint ownerPayout = database.getOriginalSpinnerPrice(_id + spinnerModulus);
        ownerEarn = ownerEarn + ownerPayout;
        ownerBalance = ownerBalance + ownerPayout;    
        SpinnerFactory factory = SpinnerFactory(factoryAddress);
        factory.createThemedSpinner(_name, _id + spinnerModulus, msg.sender, msg.value);
    }

    function purchaseUniqueSpinner(string _name) public payable whenNotPaused uniqueSpinnersActivated {
        SpinnerDatabase database = SpinnerDatabase(databaseAddress);
        uint currentPrice = database.getUniqueSpinnerPrice();
        require(msg.value == currentPrice);
        SpinnerFactory factory = SpinnerFactory(factoryAddress);
        factory.createUniqueSpinner(_name, msg.sender, msg.value);
    }

    function cashOut() public whenNotPaused {
        SpinnerDatabase database = SpinnerDatabase(databaseAddress);
        uint balance = database.getBalance(msg.sender);
        uint contractBalance = this.balance;
        require(balance <= contractBalance);
        database.decrementBalance(msg.sender, balance);
        msg.sender.transfer(balance);
    }

    function OwnerCashout() public onlyOwner {
        require(ownerBalance <= this.balance);
        msg.sender.transfer(ownerBalance);
        ownerBalance = 0;
    }

    function transferBalance(address newProcessor) public onlyOwner {
        newProcessor.transfer(this.balance);
    }

    function () payable public {}

}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"purchaseUniqueSpinner","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"OwnerCashout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"viewBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newProcessor","type":"address"}],"name":"transferBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"cashOut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_id","type":"uint256"}],"name":"purchaseThemedSpinner","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"uniqueSpinnersActive","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"activateUniqueSpinners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_spinnerFactoryAddress","type":"address"},{"name":"_spinnerDatabaseAddress","type":"address"},{"name":"_ownerAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60606040526301000000600155341561001757600080fd5b6040516060806110f683398101604052808051906020019091908051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260146101000a81548160ff0219169083151502179055506000600260156101000a81548160ff021916908315150217905550505050610f66806101906000396000f3006060604052600436106100c5576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063315a6001146100c75780633ed4006b146101195780633f4ba83a1461012e5780633ff1e05b146101435780635c975abb1461016c57806363b6b31f14610199578063793cd71e146101d25780638456cb59146101e7578063863b3b66146101fc5780638da5cb5b146102575780638f9de24b146102ac578063aada1cb3146102d9578063f2fde38b146102ee575b005b610117600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610327565b005b341561012457600080fd5b61012c61056d565b005b341561013957600080fd5b61014161063c565b005b341561014e57600080fd5b6101566106b4565b6040518082815260200191505060405180910390f35b341561017757600080fd5b61017f6106d3565b604051808215151515815260200191505060405180910390f35b34156101a457600080fd5b6101d0600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506106e6565b005b34156101dd57600080fd5b6101e561079b565b005b34156101f257600080fd5b6101fa6109c5565b005b610255600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091905050610a3d565b005b341561026257600080fd5b61026a610d34565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102b757600080fd5b6102bf610d5a565b604051808215151515815260200191505060405180910390f35b34156102e457600080fd5b6102ec610d6d565b005b34156102f957600080fd5b610325600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610de5565b005b6000806000600260149054906101000a900460ff1615151561034857600080fd5b600260159054906101000a900460ff16151561036357600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692508273ffffffffffffffffffffffffffffffffffffffff16638ce7be016000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156103f457600080fd5b6102c65a03f1151561040557600080fd5b505050604051805190509150813414151561041f57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663439e10e58533346040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156105065780820151818401526020810190506104eb565b50505050905090810190601f1680156105335780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b151561055357600080fd5b6102c65a03f1151561056457600080fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105c857600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1631600754111515156105f057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc6007549081150290604051600060405180830381858888f19350505050151561063257600080fd5b6000600781905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561069757600080fd5b6000600260146101000a81548160ff021916908315150217905550565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600260149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561074157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561079857600080fd5b50565b6000806000600260149054906101000a900460ff161515156107bc57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692508273ffffffffffffffffffffffffffffffffffffffff1663f8b2cb4f336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561088457600080fd5b6102c65a03f1151561089557600080fd5b5050506040518051905091503073ffffffffffffffffffffffffffffffffffffffff163190508082111515156108ca57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663720ee37c33846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b151561096c57600080fd5b6102c65a03f1151561097d57600080fd5b5050503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015156109c057600080fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a2057600080fd5b6001600260146101000a81548160ff021916908315150217905550565b600080600080600260149054906101000a900460ff16151515610a5f57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693508373ffffffffffffffffffffffffffffffffffffffff16632e3aff3b60015487016000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515610aff57600080fd5b6102c65a03f11515610b1057600080fd5b5050506040518051905092508234141515610b2a57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663ea85c7ac60015487016000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515610ba557600080fd5b6102c65a03f11515610bb657600080fd5b50505060405180519050915081600654016006819055508160075401600781905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b07be1fe87600154880133346040518563ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825286818151815260200191508051906020019080838360005b83811015610cca578082015181840152602081019050610caf565b50505050905090810190601f168015610cf75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515610d1857600080fd5b6102c65a03f11515610d2957600080fd5b505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260159054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610dc857600080fd5b6001600260156101000a81548160ff021916908315150217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e4057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610e7c57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820b1da5e18b2a1b35f9d343f75e2dac4c8336aea590f25762fa200f69906f5785100290000000000000000000000005f0ca657fc96b0fa616ca01ca42d9414d02d54600000000000000000000000000bbfe2b67a4caded4d6c607cb91be5354ba6617d0000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6060604052600436106100c5576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063315a6001146100c75780633ed4006b146101195780633f4ba83a1461012e5780633ff1e05b146101435780635c975abb1461016c57806363b6b31f14610199578063793cd71e146101d25780638456cb59146101e7578063863b3b66146101fc5780638da5cb5b146102575780638f9de24b146102ac578063aada1cb3146102d9578063f2fde38b146102ee575b005b610117600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610327565b005b341561012457600080fd5b61012c61056d565b005b341561013957600080fd5b61014161063c565b005b341561014e57600080fd5b6101566106b4565b6040518082815260200191505060405180910390f35b341561017757600080fd5b61017f6106d3565b604051808215151515815260200191505060405180910390f35b34156101a457600080fd5b6101d0600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506106e6565b005b34156101dd57600080fd5b6101e561079b565b005b34156101f257600080fd5b6101fa6109c5565b005b610255600480803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091905050610a3d565b005b341561026257600080fd5b61026a610d34565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102b757600080fd5b6102bf610d5a565b604051808215151515815260200191505060405180910390f35b34156102e457600080fd5b6102ec610d6d565b005b34156102f957600080fd5b610325600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610de5565b005b6000806000600260149054906101000a900460ff1615151561034857600080fd5b600260159054906101000a900460ff16151561036357600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692508273ffffffffffffffffffffffffffffffffffffffff16638ce7be016000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156103f457600080fd5b6102c65a03f1151561040557600080fd5b505050604051805190509150813414151561041f57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663439e10e58533346040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019080838360005b838110156105065780820151818401526020810190506104eb565b50505050905090810190601f1680156105335780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b151561055357600080fd5b6102c65a03f1151561056457600080fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105c857600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1631600754111515156105f057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc6007549081150290604051600060405180830381858888f19350505050151561063257600080fd5b6000600781905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561069757600080fd5b6000600260146101000a81548160ff021916908315150217905550565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600260149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561074157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561079857600080fd5b50565b6000806000600260149054906101000a900460ff161515156107bc57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692508273ffffffffffffffffffffffffffffffffffffffff1663f8b2cb4f336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561088457600080fd5b6102c65a03f1151561089557600080fd5b5050506040518051905091503073ffffffffffffffffffffffffffffffffffffffff163190508082111515156108ca57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663720ee37c33846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b151561096c57600080fd5b6102c65a03f1151561097d57600080fd5b5050503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015156109c057600080fd5b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a2057600080fd5b6001600260146101000a81548160ff021916908315150217905550565b600080600080600260149054906101000a900460ff16151515610a5f57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693508373ffffffffffffffffffffffffffffffffffffffff16632e3aff3b60015487016000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515610aff57600080fd5b6102c65a03f11515610b1057600080fd5b5050506040518051905092508234141515610b2a57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663ea85c7ac60015487016000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515610ba557600080fd5b6102c65a03f11515610bb657600080fd5b50505060405180519050915081600654016006819055508160075401600781905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b07be1fe87600154880133346040518563ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825286818151815260200191508051906020019080838360005b83811015610cca578082015181840152602081019050610caf565b50505050905090810190601f168015610cf75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515610d1857600080fd5b6102c65a03f11515610d2957600080fd5b505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260159054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610dc857600080fd5b6001600260156101000a81548160ff021916908315150217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e4057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610e7c57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a72305820b1da5e18b2a1b35f9d343f75e2dac4c8336aea590f25762fa200f69906f578510029

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

0000000000000000000000005f0ca657fc96b0fa616ca01ca42d9414d02d54600000000000000000000000000bbfe2b67a4caded4d6c607cb91be5354ba6617d0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _spinnerFactoryAddress (address): 0x5F0cA657fC96B0fa616CA01Ca42d9414d02d5460
Arg [1] : _spinnerDatabaseAddress (address): 0x0Bbfe2B67A4CADeD4D6C607CB91bE5354ba6617D
Arg [2] : _ownerAddress (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f0ca657fc96b0fa616ca01ca42d9414d02d5460
Arg [1] : 0000000000000000000000000bbfe2b67a4caded4d6c607cb91be5354ba6617d
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000


Swarm Source

bzzr://b1da5e18b2a1b35f9d343f75e2dac4c8336aea590f25762fa200f69906f57851

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.