Contract Overview
Balance: 0 Ether
Transactions: 1290 txns
 Latest 25 txns From a total of 1290 Transactions

TxHash Age From To Value [TxFee]
0x4b33165873b6208845573899eb9c4d32b78e46fab01672088d944e728475202b235 days 21 hrs ago0xcdceca845bdedc19ef2adb47175bd43578fceaa8  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00116584
0xdf9aaaf6eb8054d189a6b88d9eff1fac58fb12f8756110370e186c062a3b6794236 days 20 hrs ago0xcdceca845bdedc19ef2adb47175bd43578fceaa8  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00116584
0x12ed66c7ccc0ed6c50a1ec20985be0d48c583704dacf3cbea69e6675bba5dd25237 days 21 hrs ago0xcdceca845bdedc19ef2adb47175bd43578fceaa8  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00116584
0x3dcacb60d2c97617195f8201e8a52d28e9fc94acd30cfc84efbdddb155c98a0a237 days 22 hrs ago0xcdceca845bdedc19ef2adb47175bd43578fceaa8  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00116584
0x25b8fe3f253647302f540a06f203fcc305728db89740cb3b68b1875fb9b08d68256 days 2 hrs ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00272484
0x369be43431d75d77d2340b3fd09aafd6ebae4127f228f8d9bcdf769c7af3bcc4256 days 2 hrs ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00120772
0x4690982bf1c426dcf9290468da9acb88dacbde56fd43a7c8634261a2cb598a60256 days 2 hrs ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00120772
0x1fe62b00c90b4bc0172d04b62cda1b3677bb8c28cc914a475c796f5c0afdb6c2256 days 2 hrs ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.0033274
0x6a5a2986527610d50a0d7022316b32c4b187c91a76dfb53c3584ad918d682800256 days 2 hrs ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00120772
0x143fc420e8602274c216304f0a8dcc9208cdb9e4d8d4ccf3c4c2fd34d7bfc1af256 days 4 hrs ago0x4aa0a1dafaf001090ebb72a69aa598e32973557e  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00118628
0x7b6b17413568dbfb93b15f9cae5695344a09c1ff1f655a4d659d2684744cc6ac256 days 4 hrs ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.0033274
0xbb6608cb3f13b5501ae1982c06b38e84a22d19a6afb99f04499d74120de49c2d256 days 4 hrs ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00116804
0x2f1bd6922f1423282772dd870fba8ef3a5035cd3f7cca2d3e23b066892c81a3b257 days 13 hrs ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00120772
0x6d9aab0541af45c09ca6b440577ced43d3a7c468195ece26c4cf531cfb5683eb257 days 23 hrs ago0x12696e984dd61b6d059009c1efbc9026bf8feff0  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00116584
0x0f91ce15f95c585d13af4213c79344b166b0050a1e5ccc622a7b9a2d52210a6d264 days 4 hrs ago0x40a3aaff185c94aee93820383293d48fe8f22f05  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00116584
0xcaca812ec1e5f0981df18a3697697b9bf3b0268dfa5d60eeb581a641e0aa362d264 days 4 hrs ago0x40a3aaff185c94aee93820383293d48fe8f22f05  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00116584
0xa2e975465c61ae06f5b2d404027561265fc208f9be4241339ce7f8bb63d153cd264 days 5 hrs ago0x40a3aaff185c94aee93820383293d48fe8f22f05  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00116584
0xe073693fc501bdc8141e374d12b9026420bc049040cc13bfafb85a6bfa872f19264 days 7 hrs ago0x40a3aaff185c94aee93820383293d48fe8f22f05  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00116584
0x6b28d1a65166e00eb4a29f0ab76d6eadc7fb56b12315dd4fb0e30b35583e2a27264 days 21 hrs ago0xa4dc4b1cf374c6446d9f094b3294b22b3c69675c  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00237256
0xb872650165c9a433573c73b10c49e67330c74ebc61aff7b725b8a7a33def2d94264 days 21 hrs ago0xa156dcf006a989d06208e9a4fe5bfe08874d86c5  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00118628
0x1701b6a631ac4218d0901c93404b1857c4452c0cd1994561f48e8241e90daeb2264 days 21 hrs ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.0033274
0xbf8342eced9d85448353d1e4caeb87ffa65b84b6c05df3690c4e9b3e0b1a2d3f264 days 21 hrs ago0x8cded76047727ad7ae04800b903b06c97762dc6e  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00118628
0xe7090b71bd1739725cc8c62640ee7c1a4f47975815e578286a752c9bc8b331ca264 days 21 hrs ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00120642
0xa75741f17150ff1b243fda5f326581b5276bb8925d25d9c18ef331db0570ff26265 days 55 mins ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.0039274
0xc6631527bf73d8a05f3606404a140a7b405401211ffa249a5f0b4dbc07d1ae56265 days 55 mins ago0x8a927d48849ad4e207aae07ecaf8a07a1c21f96d  IN   0xa53905e4e5d6ebff26605c853d68b4c87e7229920 Ether0.00120642
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: EdgelessCasino
Compiler Text: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

/**
 * The edgeless casino contract holds the players's funds and provides state channel functionality.
 * The casino has at no time control over the players's funds.
 * State channels can be updated and closed from both parties: the player and the casino.
 * author: Julia Altenried
 **/

pragma solidity ^0.4.17;
contract SafeMath {

	function safeSub(uint a, uint b) pure internal returns(uint) {
		assert(b <= a);
		return a - b;
	}
	
	function safeSub(int a, int b) pure internal returns(int) {
		if(b < 0) assert(a - b > a);
		else assert(a - b <= a);
		return a - b;
	}

	function safeAdd(uint a, uint b) pure internal returns(uint) {
		uint c = a + b;
		assert(c >= a && c >= b);
		return c;
	}

	function safeMul(uint a, uint b) pure internal returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }
}


contract owned {
  address public owner;
  modifier onlyOwner {
    require(msg.sender == owner);
    _;
  }

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

  function changeOwner(address newOwner) onlyOwner public{
    owner = newOwner;
  }
}

/** owner should be able to close the contract is nobody has been using it for at least 30 days */
contract mortal is owned{
	/** contract can be closed by the owner anytime after this timestamp if non-zero */
	uint public closeAt;
	/**
	* lets the owner close the contract if there are no player funds on it or if nobody has been using it for at least 30 days
	*/
  function closeContract(uint playerBalance) internal{
		if(playerBalance == 0) selfdestruct(owner);
		if(closeAt == 0) closeAt = now + 30 days;
		else if(closeAt < now) selfdestruct(owner);
  }

	/**
	* in case close has been called accidentally.
	**/
	function open() onlyOwner public{
		closeAt = 0;
	}

	/**
	* make sure the contract is not in process of being closed.
	**/
	modifier isAlive {
		require(closeAt == 0);
		_;
	}

	/**
	* delays the time of closing.
	**/
	modifier keepAlive {
		if(closeAt > 0) closeAt = now + 30 days;
		_;
	}
}


contract chargingGas is mortal, SafeMath{
  /** the price per kgas and GWei in tokens (5 decimals) */
	uint public gasPrice;
	/** the amount of gas used per transaction in kGas */
	mapping(bytes4 => uint) public gasPerTx;
	
	/**
	 * sets the amount of gas consumed by methods with the given sigantures.
	 * only called from the edgeless casino constructor.
	 * @param signatures an array of method-signatures
	 *        gasNeeded  the amount of gas consumed by these methods
	 * */
	function setGasUsage(bytes4[3] signatures, uint[3] gasNeeded) internal{
	  require(signatures.length == gasNeeded.length);
	  for(uint8 i = 0; i < signatures.length; i++)
	    gasPerTx[signatures[i]] = gasNeeded[i];
	}event gasP(uint p);
	
	/**
	 * adds the gas cost of the tx to the given value.
	 * @param value the value to add the gas cost to
	 * */
	function addGas(uint value) internal constant returns(uint){
  	return safeAdd(value,getGasCost());
	}
	
	/**
	 * subtracts the gas cost of the tx from the given value.
	 * @param value the value to subtract the gas cost from
	 * */
	function subtractGas(uint value) internal constant returns(uint){
  	return safeSub(value,getGasCost());
	}
	
	
	/**
	* updates the price per 1000 gas in EDG.
	* @param price the new gas price (4 decimals, max 0.0256 EDG)
	**/
	function setGasPrice(uint8 price) public onlyOwner{
		gasPrice = price;
	}
	
	/**
	 * returns the gas cost of the called function.
	 * */
	function getGasCost() internal constant returns(uint){
	  return safeMul(safeMul(gasPerTx[msg.sig], gasPrice), tx.gasprice)/1000000000;
	}

}
contract Token {
	function transferFrom(address sender, address receiver, uint amount) public returns(bool success) {}

	function transfer(address receiver, uint amount) public returns(bool success) {}

	function balanceOf(address holder) public constant returns(uint) {}
}

contract CasinoBank is chargingGas{
	/** the total balance of all players with 5 virtual decimals **/
	uint public playerBalance;
	/** the balance per player in edgeless tokens with 5 virtual decimals */
	mapping(address=>uint) public balanceOf;
	/** in case the user wants/needs to call the withdraw function from his own wallet, he first needs to request a withdrawal */
	mapping(address=>uint) public withdrawAfter;
	/** the edgeless token contract */
	Token edg;
	/** the maximum amount of tokens the user is allowed to deposit (5 decimals) */
	uint public maxDeposit;
	/** waiting time for withdrawal if not requested via the server **/
	uint public waitingTime;
	
	/** informs listeners how many tokens were deposited for a player */
	event Deposit(address _player, uint _numTokens, bool _chargeGas);
	/** informs listeners how many tokens were withdrawn from the player to the receiver address */
	event Withdrawal(address _player, address _receiver, uint _numTokens);

	function CasinoBank(address tokenContract, uint depositLimit) public{
		edg = Token(tokenContract);
		maxDeposit = depositLimit;
		waitingTime = 90 minutes;
	}

	/**
	* accepts deposits for an arbitrary address.
	* retrieves tokens from the message sender and adds them to the balance of the specified address.
	* edgeless tokens do not have any decimals, but are represented on this contract with 5 decimals.
	* @param receiver  address of the receiver
	*        numTokens number of tokens to deposit (0 decimals)
	*				 chargeGas indicates if the gas cost is subtracted from the user's edgeless token balance
	**/
	function deposit(address receiver, uint numTokens, bool chargeGas) public isAlive{
		require(numTokens > 0);
		uint value = safeMul(numTokens,100000);
		if(chargeGas) value = subtractGas(value);
		uint newBalance = safeAdd(balanceOf[receiver], value);
		require(newBalance <= maxDeposit);
		assert(edg.transferFrom(msg.sender, address(this), numTokens));
		balanceOf[receiver] = newBalance;
		playerBalance = safeAdd(playerBalance, value);
		Deposit(receiver, numTokens, chargeGas);
  }

	/**
	* If the user wants/needs to withdraw his funds himself, he needs to request the withdrawal first.
	* This method sets the earliest possible withdrawal date to 'waitingTime from now (default 90m, but up to 24h).
	* Reason: The user should not be able to withdraw his funds, while the the last game methods have not yet been mined.
	**/
	function requestWithdrawal() public{
		withdrawAfter[msg.sender] = now + waitingTime;
	}

	/**
	* In case the user requested a withdrawal and changes his mind.
	* Necessary to be able to continue playing.
	**/
	function cancelWithdrawalRequest() public{
		withdrawAfter[msg.sender] = 0;
	}

	/**
	* withdraws an amount from the user balance if 7 minutes passed since the request.
	* @param amount the amount of tokens to withdraw
	**/
	function withdraw(uint amount) public keepAlive{
		require(withdrawAfter[msg.sender]>0 && now>withdrawAfter[msg.sender]);
		withdrawAfter[msg.sender] = 0;
		uint value = safeMul(amount,100000);
		balanceOf[msg.sender]=safeSub(balanceOf[msg.sender],value);
		playerBalance = safeSub(playerBalance, value);
		assert(edg.transfer(msg.sender, amount));
		Withdrawal(msg.sender, msg.sender, amount);
	}

	/**
	* lets the owner withdraw from the bankroll
	* @param numTokens the number of tokens to withdraw (0 decimals)
	**/
	function withdrawBankroll(uint numTokens) public onlyOwner {
		require(numTokens <= bankroll());
		assert(edg.transfer(owner, numTokens));
	}

	/**
	* returns the current bankroll in tokens with 0 decimals
	**/
	function bankroll() constant public returns(uint){
		return safeSub(edg.balanceOf(address(this)), playerBalance/100000);
	}
	
	
	/**
	* updates the maximum deposit.
	* @param newMax the new maximum deposit (5 decimals)
	**/
	function setMaxDeposit(uint newMax) public onlyOwner{
		maxDeposit = newMax;
	}
	
	/**
	 * sets the time the player has to wait for his funds to be unlocked before withdrawal (if not withdrawing with help of the casino server).
	 * the time may not be longer than 24 hours.
	 * @param newWaitingTime the new waiting time in seconds
	 * */
	function setWaitingTime(uint newWaitingTime) public onlyOwner{
		require(newWaitingTime <= 24 hours);
		waitingTime = newWaitingTime;
	}

	/**
	 * lets the owner close the contract if there are no player funds on it or if nobody has been using it for at least 30 days
	 * */
	function close() public onlyOwner{
		closeContract(playerBalance);
	}
}

contract EdgelessCasino is CasinoBank{
	/** indicates if an address is authorized to act in the casino's name  */
  mapping(address => bool) public authorized;
	/** a number to count withdrawal signatures to ensure each signature is different even if withdrawing the same amount to the same address */
	mapping(address => uint) public withdrawCount;
	/** the most recent known state of a state channel */
	mapping(address => State) public lastState;
	/** fired when the state is updated */
	event StateUpdate(uint128 count, int128 winBalance, int difference, uint gasCost, address player, uint128 lcount);
  /** fired if one of the parties chooses to log the seeds and results */
  event GameData(address player, bytes32[] serverSeeds, bytes32[] clientSeeds, int[] results);
  
	struct State{
		uint128 count;
		int128 winBalance;
	}

	modifier onlyAuthorized {
    require(authorized[msg.sender]);
    _;
  }


  /**
  * creates a new edgeless casino contract.
  * @param authorizedAddress the address which may send transactions to the Edgeless Casino
	*				 tokenContract     the address of the Edgeless token contract
	* 			 depositLimit      the maximum deposit allowed
	* 			 kGasPrice				 the price per kGas in WEI
  **/
  function EdgelessCasino(address authorizedAddress, address tokenContract, uint depositLimit, uint8 kGasPrice) CasinoBank(tokenContract, depositLimit) public{
    authorized[authorizedAddress] = true;
    //deposit, withdrawFor, updateChannel
    bytes4[3] memory signatures = [bytes4(0x3edd1128),0x9607610a, 0x713d30c6];
    //amount of gas consumed by the above methods in GWei
    uint[3] memory gasUsage = [uint(85),95,60];
    setGasUsage(signatures, gasUsage);
    setGasPrice(kGasPrice);
  }


  /**
  * transfers an amount from the contract balance to the owner's wallet.
  * @param receiver the receiver address
	*				 amount   the amount of tokens to withdraw (0 decimals)
	*				 v,r,s 		the signature of the player
  **/
  function withdrawFor(address receiver, uint amount, uint8 v, bytes32 r, bytes32 s) public onlyAuthorized keepAlive{
		var player = ecrecover(keccak256(receiver, amount, withdrawCount[receiver]), v, r, s);
		withdrawCount[receiver]++;
		uint value = addGas(safeMul(amount,100000));
    balanceOf[player] = safeSub(balanceOf[player], value);
		playerBalance = safeSub(playerBalance, value);
    assert(edg.transfer(receiver, amount));
		Withdrawal(player, receiver, amount);
  }

  /**
  * authorize a address to call game functions.
  * @param addr the address to be authorized
  **/
  function authorize(address addr) public onlyOwner{
    authorized[addr] = true;
  }

  /**
  * deauthorize a address to call game functions.
  * @param addr the address to be deauthorized
  **/
  function deauthorize(address addr) public onlyOwner{
    authorized[addr] = false;
  }

  /**
   * closes a state channel. can also be used for intermediate state updates. can be called by both parties.
   * 1. verifies the signature.
   * 2. verifies if the signed game-count is higher than the last known game-count of this channel.
   * 3. updates the balances accordingly. This means: It checks the already performed updates for this channel and computes
   *    the new balance difference to add or subtract from the player‘s balance.
   * @param winBalance the current win or loss
   *				gameCount  the number of signed game moves
   *				v,r,s      the signature of either the casino or the player
   * */
  function updateState(int128 winBalance,  uint128 gameCount, uint8 v, bytes32 r, bytes32 s) public{
  	address player = determinePlayer(winBalance, gameCount, v, r, s);
  	uint gasCost = 0;
  	if(player == msg.sender)//if the player closes the state channel himself, make sure the signer is a casino wallet
  		require(authorized[ecrecover(keccak256(player, winBalance, gameCount), v, r, s)]);
  	else//if the casino wallet is the sender, subtract the gas costs from the player balance
  		gasCost = getGasCost();
  	State storage last = lastState[player];
  	require(gameCount > last.count);
  	int difference = updatePlayerBalance(player, winBalance, last.winBalance, gasCost);
  	lastState[player] = State(gameCount, winBalance);
  	StateUpdate(gameCount, winBalance, difference, gasCost, player, last.count);
  }

  /**
   * determines if the msg.sender or the signer of the passed signature is the player. returns the player's address
   * @param winBalance the current winBalance, used to calculate the msg hash
   *				gameCount  the current gameCount, used to calculate the msg.hash
   *				v, r, s    the signature of the non-sending party
   * */
  function determinePlayer(int128 winBalance, uint128 gameCount, uint8 v, bytes32 r, bytes32 s) constant internal returns(address){
  	if (authorized[msg.sender])//casino is the sender -> player is the signer
  		return ecrecover(keccak256(winBalance, gameCount), v, r, s);
  	else
  		return msg.sender;
  }

	/**
	 * computes the difference of the win balance relative to the last known state and adds it to the player's balance.
	 * in case the casino is the sender, the gas cost in EDG gets subtracted from the player's balance.
	 * @param player the address of the player
	 *				winBalance the current win-balance
	 *				lastWinBalance the win-balance of the last known state
	 *				gasCost the gas cost of the tx
	 * */
  function updatePlayerBalance(address player, int128 winBalance, int128 lastWinBalance, uint gasCost) internal returns(int difference){
  	difference = safeSub(winBalance, lastWinBalance);
  	int outstanding = safeSub(difference, int(gasCost));
  	uint outs;
  	if(outstanding < 0){
  		outs = uint256(outstanding * (-1));
  		playerBalance = safeSub(playerBalance, outs);
  		balanceOf[player] = safeSub(balanceOf[player], outs);
  	}
  	else{
  		outs = uint256(outstanding);
  	  playerBalance = safeAdd(playerBalance, outs);
  	  balanceOf[player] = safeAdd(balanceOf[player], outs);
  	}
  }
  
  /**
   * logs some seeds and game results for players wishing to have their game history logged by the contract
   * @param serverSeeds array containing the server seeds
   *        clientSeeds array containing the client seeds
   *        results     array containing the results
   *        v, r, s     the signature of the non-sending party (to make sure the corrcet results are logged)
   * */
  function logGameData(bytes32[] serverSeeds, bytes32[] clientSeeds, int[] results, uint8 v, bytes32 r, bytes32 s) public{
    address player = determinePlayer(serverSeeds, clientSeeds, results, v, r, s);
    GameData(player, serverSeeds, clientSeeds, results);
    //charge gas in case the server is logging the results for the player
    if(player != msg.sender){
      uint gasCost = (57 + 768 * serverSeeds.length / 1000)*gasPrice;
      balanceOf[player] = safeSub(balanceOf[player], gasCost);
      playerBalance = safeSub(playerBalance, gasCost);
    }
  }
  
  /**
   * determines if the msg.sender or the signer of the passed signature is the player. returns the player's address
   * @param serverSeeds array containing the server seeds
   *        clientSeeds array containing the client seeds
   *        results     array containing the results
   *				v, r, s    the signature of the non-sending party
   * */
  function determinePlayer(bytes32[] serverSeeds, bytes32[] clientSeeds, int[] results, uint8 v, bytes32 r, bytes32 s) constant internal returns(address){
  	if (authorized[msg.sender])//casino is the sender -> player is the signer
  		return ecrecover(keccak256(serverSeeds, clientSeeds, results), v, r, s);
  	else
  		return msg.sender;
  }

}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"serverSeeds","type":"bytes32[]"},{"name":"clientSeeds","type":"bytes32[]"},{"name":"results","type":"int256[]"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"logGameData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bankroll","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"numTokens","type":"uint256"}],"name":"withdrawBankroll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lastState","outputs":[{"name":"count","type":"uint128"},{"name":"winBalance","type":"int128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"deauthorize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"price","type":"uint8"}],"name":"setGasPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"numTokens","type":"uint256"},{"name":"chargeGas","type":"bool"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"close","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"withdrawAfter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"withdrawCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxDeposit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"playerBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"winBalance","type":"int128"},{"name":"gameCount","type":"uint128"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"updateState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"withdrawFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"closeAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"waitingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes4"}],"name":"gasPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"authorize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"authorized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newMax","type":"uint256"}],"name":"setMaxDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"requestWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"cancelWithdrawalRequest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newWaitingTime","type":"uint256"}],"name":"setWaitingTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"open","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"authorizedAddress","type":"address"},{"name":"tokenContract","type":"address"},{"name":"depositLimit","type":"uint256"},{"name":"kGasPrice","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"count","type":"uint128"},{"indexed":false,"name":"winBalance","type":"int128"},{"indexed":false,"name":"difference","type":"int256"},{"indexed":false,"name":"gasCost","type":"uint256"},{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"lcount","type":"uint128"}],"name":"StateUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"serverSeeds","type":"bytes32[]"},{"indexed":false,"name":"clientSeeds","type":"bytes32[]"},{"indexed":false,"name":"results","type":"int256[]"}],"name":"GameData","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_player","type":"address"},{"indexed":false,"name":"_numTokens","type":"uint256"},{"indexed":false,"name":"_chargeGas","type":"bool"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_player","type":"address"},{"indexed":false,"name":"_receiver","type":"address"},{"indexed":false,"name":"_numTokens","type":"uint256"}],"name":"Withdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"p","type":"uint256"}],"name":"gasP","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200001057600080fd5b60405160808062001aa883398101604052808051919060200180519190602001805191906020018051915062000047905062000221565b620000516200024a565b60008054600160a060020a03338116600160a060020a031992831617835560078054828a16931692909217909155600886905561151860095587168152600a602052604090819020805460ff191660011790556060905190810160409081527f3edd11280000000000000000000000000000000000000000000000000000000082527f9607610a0000000000000000000000000000000000000000000000000000000060208301527f713d30c6000000000000000000000000000000000000000000000000000000008183015290925060609051908101604090815260558252605f6020830152603c9082015290506200015a8282640100000000620017836200017f82021704565b62000173836401000000006200090f620001fd82021704565b50505050505062000272565b60005b60038160ff161015620001f8578160ff8216600381106200019f57fe5b6020020151600360008560ff8516838110620001b757fe5b60200201517fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040016000205560010162000182565b505050565b60005433600160a060020a039081169116146200021957600080fd5b60ff16600255565b60606040519081016040526003815b600081526000199091019060200181620002305790505090565b60606040519081016040526003815b6000815260200190600190039081620002595790505090565b61182680620002826000396000f30060606040526004361061015b5763ffffffff60e060020a6000350416630102305b81146101605780630c657eb01461024157806319c7670014610266578063203faa891461027c57806327c97fa5146102c45780632e102ee4146102e35780632e1a7d4d146102fc5780633edd11281461031257806343d726d6146103395780634659f42a1461034c5780634f23618f1461036b5780636083e59a1461038a578063651f066a1461039d57806370a08231146103b0578063713d30c6146103cf5780638da5cb5b146104005780639607610a1461042f578063a6f9dae11461045d578063a98540871461047c578063aa13e8c21461048f578063ad8ce06b146104a2578063b6a5d7de146104d7578063b9181611146104f6578063bb371fdd14610529578063dbaf21451461053f578063e714a02814610552578063ebc73e6514610565578063fcfff16f1461057b578063fe173b971461058e575b600080fd5b341561016b57600080fd5b61023f600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496505060ff85351694602081013594506040013592506105a1915050565b005b341561024c57600080fd5b610254610761565b60405190815260200160405180910390f35b341561027157600080fd5b61023f6004356107ef565b341561028757600080fd5b61029b600160a060020a03600435166108ac565b6040516001608060020a039092168252600f90810b900b60208201526040908101905180910390f35b34156102cf57600080fd5b61023f600160a060020a03600435166108d3565b34156102ee57600080fd5b61023f60ff6004351661090f565b341561030757600080fd5b61023f600435610932565b341561031d57600080fd5b61023f600160a060020a03600435166024356044351515610adb565b341561034457600080fd5b61023f610c64565b341561035757600080fd5b610254600160a060020a0360043516610c8c565b341561037657600080fd5b610254600160a060020a0360043516610c9e565b341561039557600080fd5b610254610cb0565b34156103a857600080fd5b610254610cb6565b34156103bb57600080fd5b610254600160a060020a0360043516610cbc565b34156103da57600080fd5b61023f600435600f0b6001608060020a036024351660ff60443516606435608435610cce565b341561040b57600080fd5b610413610f60565b604051600160a060020a03909116815260200160405180910390f35b341561043a57600080fd5b61023f600160a060020a036004351660243560ff60443516606435608435610f6f565b341561046857600080fd5b61023f600160a060020a03600435166111d0565b341561048757600080fd5b61025461121a565b341561049a57600080fd5b610254611220565b34156104ad57600080fd5b6102547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1960043516611226565b34156104e257600080fd5b61023f600160a060020a0360043516611238565b341561050157600080fd5b610515600160a060020a0360043516611277565b604051901515815260200160405180910390f35b341561053457600080fd5b61023f60043561128c565b341561054a57600080fd5b61023f6112ac565b341561055d57600080fd5b61023f6112cf565b341561057057600080fd5b61023f6004356112ea565b341561058657600080fd5b61023f61131a565b341561059957600080fd5b61025461133c565b6000806105b2888888888888611342565b91507fbece1b229c929279540d66d856136d3d9de34cfc3ce051ad16a5b99c5430c53282898989604051600160a060020a03851681526080602082018181529060408301906060840190840187818151815260200191508051906020019060200280838360005b83811015610631578082015183820152602001610619565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610670578082015183820152602001610658565b50505050905001848103825285818151815260200191508051906020019060200280838360005b838110156106af578082015183820152602001610697565b5050505090500197505050505050505060405180910390a133600160a060020a031682600160a060020a0316141515610757576002546103e88951610300028115156106f757fe5b0460390102905061072d6005600084600160a060020a0316600160a060020a031681526020019081526020016000205482611488565b600160a060020a0383166000908152600560205260409020556004546107539082611488565b6004555b5050505050505050565b6007546000906107ea90600160a060020a03166370a0823130846040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156107c057600080fd5b6102c65a03f115156107d157600080fd5b5050506040518051600454909150620186a09004611488565b905090565b60005433600160a060020a0390811691161461080a57600080fd5b610812610761565b81111561081e57600080fd5b60075460008054600160a060020a039283169263a9059cbb9291169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561088657600080fd5b6102c65a03f1151561089757600080fd5b5050506040518051905015156108a957fe5b50565b600c602052600090815260409020546001608060020a03811690608060020a9004600f0b82565b60005433600160a060020a039081169116146108ee57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19169055565b60005433600160a060020a0390811691161461092a57600080fd5b60ff16600255565b60008060015411156109485762278d0042016001555b600160a060020a0333166000908152600660205260408120541180156109855750600160a060020a03331660009081526006602052604090205442115b151561099057600080fd5b600160a060020a0333166000908152600660205260408120556109b682620186a061149a565b600160a060020a0333166000908152600560205260409020549091506109dc9082611488565b600160a060020a033316600090815260056020526040902055600454610a029082611488565b600455600754600160a060020a031663a9059cbb338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610a6457600080fd5b6102c65a03f11515610a7557600080fd5b505050604051805190501515610a8757fe5b7f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398333384604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050565b600154600090819015610aed57600080fd5b60008411610afa57600080fd5b610b0784620186a061149a565b91508215610b1b57610b18826114c5565b91505b600160a060020a038516600090815260056020526040902054610b3e90836114de565b600854909150811115610b5057600080fd5b600754600160a060020a03166323b872dd33308760006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bbc57600080fd5b6102c65a03f11515610bcd57600080fd5b505050604051805190501515610bdf57fe5b600160a060020a0385166000908152600560205260409020819055600454610c0790836114de565b6004557f693c1828300d1cab0919b948d714897f817e305af51c026ad14233b6a8939adb858585604051600160a060020a039093168352602083019190915215156040808301919091526060909101905180910390a15050505050565b60005433600160a060020a03908116911614610c7f57600080fd5b610c8a6004546114f8565b565b60066020526000908152604090205481565b600b6020526000908152604090205481565b60085481565b60045481565b60056020526000908152604090205481565b600080600080610ce1898989898961153c565b93506000925033600160a060020a031684600160a060020a03161415610df257600a60006001868c8c6040516c01000000000000000000000000600160a060020a03909416939093028352608060020a600f92830b90920b820260148401526001608060020a031602602482015260340160405180910390208a8a8a6040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f11515610dbc57600080fd5b505060206040510351600160a060020a0316815260208101919091526040016000205460ff161515610ded57600080fd5b610dfd565b610dfa611611565b92505b600160a060020a0384166000908152600c6020526040902080549092506001608060020a0390811690891611610e3257600080fd5b8154610e4c9085908b90608060020a9004600f0b8661166c565b90506040805190810160409081526001608060020a038a168252600f8b900b602080840191909152600160a060020a0387166000908152600c90915220815181546fffffffffffffffffffffffffffffffff19166001608060020a039190911617815560208201518154600f9190910b6001608060020a03908116608060020a029181169190911790915583547f03a6981b750fc8bdd6c0c53d263db8d5a4cfbbe60e9ba3c212ab4eb01d62327c92508a918c91859188918a91166040516001608060020a039687168152600f95860b90950b60208601526040808601949094526060850192909252600160a060020a0316608084015290921660a082015260c001905180910390a1505050505050505050565b600054600160a060020a031681565b600160a060020a0333166000908152600a6020526040812054819060ff161515610f9857600080fd5b60006001541115610fad5762278d0042016001555b600160a060020a0387166000908152600b602052604090819020546001918991899151600160a060020a03939093166c010000000000000000000000000283526014830191909152603482015260540160405180910390208686866040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561106757600080fd5b505060206040510351600160a060020a0388166000908152600b602052604090208054600101905591506110a66110a187620186a061149a565b611748565b600160a060020a0383166000908152600560205260409020549091506110cc9082611488565b600160a060020a0383166000908152600560205260409020556004546110f29082611488565b600455600754600160a060020a031663a9059cbb888860006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561115457600080fd5b6102c65a03f1151561116557600080fd5b50505060405180519050151561117757fe5b7f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398828888604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a150505050505050565b60005433600160a060020a039081169116146111eb57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015481565b60095481565b60036020526000908152604090205481565b60005433600160a060020a0390811691161461125357600080fd5b600160a060020a03166000908152600a60205260409020805460ff19166001179055565b600a6020526000908152604090205460ff1681565b60005433600160a060020a039081169116146112a757600080fd5b600855565b600954600160a060020a0333166000908152600660205260409020429091019055565b600160a060020a033316600090815260066020526040812055565b60005433600160a060020a0390811691161461130557600080fd5b6201518081111561131557600080fd5b600955565b60005433600160a060020a0390811691161461133557600080fd5b6000600155565b60025481565b600160a060020a0333166000908152600a602052604081205460ff161561147b57600187878760405180848051906020019060200280838360005b8381101561139557808201518382015260200161137d565b50505050905001838051906020019060200280838360005b838110156113c55780820151838201526020016113ad565b50505050905001828051906020019060200280838360005b838110156113f55780820151838201526020016113dd565b50505050905001935050505060405180910390208585856040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561146b57600080fd5b505060206040510351905061147e565b50335b9695505050505050565b60008282111561149457fe5b50900390565b60008282028315806114b657508284828115156114b357fe5b04145b15156114be57fe5b9392505050565b60006114d8826114d3611611565b611488565b92915050565b60008282018381108015906114b65750828110156114be57fe5b80151561150d57600054600160a060020a0316ff5b60015415156115245762278d0042016001556108a9565b4260015410156108a957600054600160a060020a0316ff5b600160a060020a0333166000908152600a602052604081205460ff16156116055760018686604051608060020a600f93840b90930b830281526001608060020a03909116909102601082015260200160405180910390208585856040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f115156115f557600080fd5b5050602060405103519050611608565b50335b95945050505050565b600080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260036020526040812054600254633b9aca009161165d91611657919061149a565b3a61149a565b81151561166657fe5b04905090565b600080600061168186600f0b86600f0b61175b565b925061168d838561175b565b915060008212156116ef57816000190290506116ab60045482611488565b600455600160a060020a0387166000908152600560205260409020546116d19082611488565b600160a060020a03881660009081526005602052604090205561173e565b8190506116fe600454826114de565b600455600160a060020a03871660009081526005602052604090205461172490826114de565b600160a060020a0388166000908152600560205260409020555b5050949350505050565b60006114d882611756611611565b6114de565b6000808212156117765781830383901361177157fe5b611494565b8183038390131561149457fe5b60005b60038160ff1610156117f5578160ff8216600381106117a157fe5b6020020151600360008560ff85168381106117b857fe5b60200201517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602081019190915260400160002055600101611786565b5050505600a165627a7a72305820c32e156f66d06e39f3f7086a5d32a798f20fee39c551d6a5b25b718d07c5517e00290000000000000000000000007ab5dfc486af477c19055d0e34ba0436b32c5e540000000000000000000000005209bb8734b013198f195beafbb821abaac4a54e00000000000000000000000000000000000000000000000000000000004c4b400000000000000000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007ab5dfc486af477c19055d0e34ba0436b32c5e54
Arg [1] : 0000000000000000000000005209bb8734b013198f195beafbb821abaac4a54e
Arg [2] : 00000000000000000000000000000000000000000000000000000000004c4b40
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


   Swarm Source:
bzzr://c32e156f66d06e39f3f7086a5d32a798f20fee39c551d6a5b25b718d07c5517e

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward