ETH Price: $2,077.94 (-1.18%)

Contract

0xfF1f9c77a0f1FD8f48cFEEE58b714cA03420ddaC
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Flush House Fees39165382017-06-23 5:43:513186 days ago1498196631IN
0xfF1f9c77...03420ddaC
0 ETH0.0052266719
Handle Bet39154382017-06-23 0:06:473186 days ago1498176407IN
0xfF1f9c77...03420ddaC
0.009 ETH0.0017517.5
Handle Bet39154362017-06-23 0:06:333186 days ago1498176393IN
0xfF1f9c77...03420ddaC
0.009 ETH0.0017517.5
Handle Bet39154362017-06-23 0:06:333186 days ago1498176393IN
0xfF1f9c77...03420ddaC
0.008 ETH0.0017517.5
Handle Bet39154342017-06-23 0:06:083186 days ago1498176368IN
0xfF1f9c77...03420ddaC
0.008 ETH0.0017517.5
Handle Bet39154342017-06-23 0:06:083186 days ago1498176368IN
0xfF1f9c77...03420ddaC
0.003 ETH0.0017517.5
Handle Bet39154342017-06-23 0:06:083186 days ago1498176368IN
0xfF1f9c77...03420ddaC
0.003 ETH0.0017517.5
House Keep38468772017-06-09 20:29:403199 days ago1497040180IN
0xfF1f9c77...03420ddaC
0 ETH0.0009017415
Winner Decided38468592017-06-09 20:23:123199 days ago1497039792IN
0xfF1f9c77...03420ddaC
0 ETH0.0013712215
Handle Bet38468532017-06-09 20:22:153199 days ago1497039735IN
0xfF1f9c77...03420ddaC
0.01 ETH0.0005405115
Handle Bet38468532017-06-09 20:22:153199 days ago1497039735IN
0xfF1f9c77...03420ddaC
0.01 ETH0.0005539515
Handle Bet38468532017-06-09 20:22:153199 days ago1497039735IN
0xfF1f9c77...03420ddaC
0.004 ETH0.0005539515
Handle Bet38468532017-06-09 20:22:153199 days ago1497039735IN
0xfF1f9c77...03420ddaC
0.001 ETH0.0005405115
Handle Bet38468532017-06-09 20:22:153199 days ago1497039735IN
0xfF1f9c77...03420ddaC
0.006 ETH0.0005539515
Handle Bet38468532017-06-09 20:22:153199 days ago1497039735IN
0xfF1f9c77...03420ddaC
0.009 ETH0.0005405115
Handle Bet38468532017-06-09 20:22:153199 days ago1497039735IN
0xfF1f9c77...03420ddaC
0.002 ETH0.0007789515
Handle Bet38468532017-06-09 20:22:153199 days ago1497039735IN
0xfF1f9c77...03420ddaC
0.002 ETH0.0007655115
Start Game38468482017-06-09 20:21:153199 days ago1497039675IN
0xfF1f9c77...03420ddaC
0 ETH0.0009470515
House Keep38468422017-06-09 20:19:453199 days ago1497039585IN
0xfF1f9c77...03420ddaC
0 ETH0.0009017415
Winner Decided38468232017-06-09 20:13:183199 days ago1497039198IN
0xfF1f9c77...03420ddaC
0 ETH0.0013587415
Handle Bet38468182017-06-09 20:12:243199 days ago1497039144IN
0xfF1f9c77...03420ddaC
0.01 ETH0.0005414715
Handle Bet38468162017-06-09 20:12:023199 days ago1497039122IN
0xfF1f9c77...03420ddaC
0.01 ETH0.0005549115
Handle Bet38468162017-06-09 20:12:023199 days ago1497039122IN
0xfF1f9c77...03420ddaC
0.006 ETH0.0005549115
Handle Bet38468162017-06-09 20:12:023199 days ago1497039122IN
0xfF1f9c77...03420ddaC
0.016 ETH0.0005414715
Handle Bet38468162017-06-09 20:12:023199 days ago1497039122IN
0xfF1f9c77...03420ddaC
0.002 ETH0.0007799115
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer39165382017-06-23 5:43:513186 days ago1498196631
0xfF1f9c77...03420ddaC
0.00344 ETH
Transfer38468592017-06-09 20:23:123199 days ago1497039792
0xfF1f9c77...03420ddaC
0.04312 ETH
Transfer38468232017-06-09 20:13:183199 days ago1497039198
0xfF1f9c77...03420ddaC
0.04508 ETH
Transfer38457822017-06-09 15:45:183200 days ago1497023118
0xfF1f9c77...03420ddaC
0.04704 ETH
Transfer38438962017-06-09 6:53:273200 days ago1496991207
0xfF1f9c77...03420ddaC
0.03332 ETH
Transfer38438902017-06-09 6:52:093200 days ago1496991129
0xfF1f9c77...03420ddaC
0.0196 ETH
Transfer38438902017-06-09 6:52:093200 days ago1496991129
0xfF1f9c77...03420ddaC
0.0102 ETH
Transfer38438832017-06-09 6:50:293200 days ago1496991029
0xfF1f9c77...03420ddaC
0.0294 ETH
Transfer38438462017-06-09 6:38:513200 days ago1496990331
0xfF1f9c77...03420ddaC
0.02156 ETH
Transfer38438322017-06-09 6:36:103200 days ago1496990170
0xfF1f9c77...03420ddaC
0.03136 ETH
Transfer38438222017-06-09 6:33:053200 days ago1496989985
0xfF1f9c77...03420ddaC
0.02744 ETH
Transfer38438092017-06-09 6:28:453200 days ago1496989725
0xfF1f9c77...03420ddaC
0.03136 ETH
Transfer38438052017-06-09 6:27:453200 days ago1496989665
0xfF1f9c77...03420ddaC
0.02156 ETH
Transfer38434892017-06-09 4:54:313200 days ago1496984071
0xfF1f9c77...03420ddaC
0.0294 ETH
Transfer38434892017-06-09 4:54:313200 days ago1496984071
0xfF1f9c77...03420ddaC
0.02548 ETH
Transfer38434892017-06-09 4:54:313200 days ago1496984071
0xfF1f9c77...03420ddaC
0.02744 ETH
Transfer38434792017-06-09 4:52:083200 days ago1496983928
0xfF1f9c77...03420ddaC
0.03724 ETH
Transfer38383042017-06-08 5:03:133201 days ago1496898193
0xfF1f9c77...03420ddaC
0.01372 ETH
Transfer38369382017-06-07 22:47:243201 days ago1496875644
0xfF1f9c77...03420ddaC
0.02548 ETH
Transfer38369372017-06-07 22:46:423201 days ago1496875602
0xfF1f9c77...03420ddaC
0.02548 ETH
Transfer38369362017-06-07 22:46:163201 days ago1496875576
0xfF1f9c77...03420ddaC
0.02156 ETH
Transfer38329662017-06-07 4:50:473202 days ago1496811047
0xfF1f9c77...03420ddaC
0.02352 ETH
Transfer38329562017-06-07 4:47:243202 days ago1496810844
0xfF1f9c77...03420ddaC
0.03136 ETH
Transfer38329452017-06-07 4:44:413202 days ago1496810681
0xfF1f9c77...03420ddaC
0.03332 ETH
Transfer38316972017-06-06 22:53:403202 days ago1496789620
0xfF1f9c77...03420ddaC
0.02352 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
E4RowEscrow

Compiler Version
v0.4.10+commit.f0d539ae

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2017-04-25
*/

pragma solidity ^0.4.8;

// version (ZK)


contract iE4RowEscrow {
	function getNumGamesStarted() constant returns (int ngames);
}


contract E4RowEscrow is iE4RowEscrow {

event StatEvent(string msg);
event StatEventI(string msg, uint val);
event StatEventA(string msg, address addr);

	uint constant MAX_PLAYERS = 5;

	enum EndReason  {erWinner, erTimeOut, erCancel}
	enum SettingStateValue  {debug, release, lockedRelease}

	struct gameInstance {
		address[5] players;
		uint[5] playerPots;
		uint numPlayers;

		bool active; // active
		bool allocd; //  allocated already. 
		uint started; // time game started
		uint lastMoved; // time game last moved
		uint payout; // payout amont
		address winner; // address of winner
		

		EndReason reasonEnded; // enum reason of ended
		
	}
	
	struct arbiter {
		mapping (uint => uint)  gameIndexes; // game handles

		uint arbToken; // 2 bytes
		uint gameSlots; // a counter of alloc'd game structs (they can be reused)
		uint gamesStarted; // total games started
		uint gamesCompleted;
		uint gamesCanceled; // also tied
		uint gamesTimedout;
		uint numPlayers;
		bool registered; 
		bool locked;
	}


	address public  owner; 	// owner is address that deployed contract
	address public  tokenPartner; 	// the address of partner that receives rake fees
	uint public numArbiters; 	// number of arbiters

	int numGamesStarted;	// total stats from all arbiters

	uint public numGamesCompleted; // ...
	uint public numGamesCanceled; 	// tied and canceled
	uint public numGamesTimedOut;	// ...

	uint public houseFeeHoldover; // hold fee till threshold
	uint public lastPayoutTime; 	// timestamp of last payout time


	// configurables
	uint public gameTimeOut;
	uint public registrationFee;
	uint public houseFeeThreshold;
	uint public payoutInterval;

	uint raGas; // for register arb
	uint sgGas;// for start game
	uint wpGas; // for winner paid
	uint rfGas; // for refund
	uint feeGas; // for rake fee payout

	SettingStateValue public settingsState = SettingStateValue.debug; 
	

	mapping (address => arbiter)  arbiters;
	mapping (uint => address)  arbiterTokens;
	mapping (uint => address)  arbiterIndexes;
	mapping (uint => gameInstance)  games;


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


	function applySettings(SettingStateValue _state, uint _fee, uint _threshold, uint _timeout, uint _interval)
	{
		if (msg.sender != owner) 
			throw;

		// ----------------------------------------------
		// these items are tweakable for game optimization
		// ----------------------------------------------
		houseFeeThreshold = _threshold;
		gameTimeOut = _timeout;
		payoutInterval = _interval;
	
		if (settingsState == SettingStateValue.lockedRelease) {
			StatEvent("Settings Tweaked");
			return;
		}

 	 	settingsState = _state;
		registrationFee = _fee;

		// set default op gas -  any futher settings done in set up gas
		raGas = 150000; 
		sgGas = 110000;
		wpGas = 20000; 
		rfGas = 20000; 
		feeGas = 360000; 

		StatEvent("Settings Changed");

	
	}

	//-----------------------------
	// return an arbiter token from an hGame
	//-----------------------------
	function ArbTokFromHGame(uint _hGame) returns (uint _tok)
	{ 
		_tok =  (_hGame / (2 ** 48)) & 0xffff;
	}


	//-----------------------------
	// suicide the contract, not called for release
	//-----------------------------
	function HaraKiri()
	{
		if ((msg.sender == owner) && (settingsState != SettingStateValue.lockedRelease))
			  suicide(tokenPartner);
		else
			StatEvent("Kill attempt failed");
	}




	//-----------------------------
	// default function
	// who are we to look a gift-horse in the mouth?
	//-----------------------------
 	function() payable  {
		StatEvent("thanks!");
  	}

	//------------------------------------------------------
	// check active game and valid player, return player index
	//-------------------------------------------------------
	function validPlayer(uint _hGame, address _addr)  internal returns( bool _valid, uint _pidx)
	{
		_valid = false;
		if (activeGame(_hGame)) {
			for (uint i = 0; i < games[_hGame].numPlayers; i++) {
				if (games[_hGame].players[i] == _addr) {
					_valid=true;
					_pidx = i;
					break;
				}
			}
		}			
	}

	//------------------------------------------------------
	// check valid player, return player index
	//-------------------------------------------------------
	function validPlayer2(uint _hGame, address _addr) internal  returns( bool _valid, uint _pidx)
	{
		_valid = false;
		for (uint i = 0; i < games[_hGame].numPlayers; i++) {
			if (games[_hGame].players[i] == _addr) {
				_valid=true;
				_pidx = i;
				break;
			}
		}
	}

	//------------------------------------------------------
	// check the arbiter is valid by comparing token
	//------------------------------------------------------
	function validArb(address _addr, uint _tok) internal  returns( bool _valid)
	{
		_valid = false;

		if ((arbiters[_addr].registered)
			&& (arbiters[_addr].arbToken == _tok)) 
			_valid = true;
	}

	//------------------------------------------------------
	// check the arbiter is valid without comparing token
	//------------------------------------------------------
	function validArb2(address _addr) internal  returns( bool _valid)
	{
		_valid = false;
		if (arbiters[_addr].registered)
			_valid = true;
	}

	//------------------------------------------------------
	// check if arbiter is locked out
	//------------------------------------------------------
	function arbLocked(address _addr) internal  returns( bool _locked)
	{
		_locked = false;
		if (validArb2(_addr)) 
			_locked = arbiters[_addr].locked;
	}

	//------------------------------------------------------
	// return if game is active
	//------------------------------------------------------
	function activeGame(uint _hGame) internal  returns( bool _valid)
	{
		_valid = false;
		if ((_hGame > 0)
			&& (games[_hGame].active))
			_valid = true;
	}


	//------------------------------------------------------
	// register game arbiter, max players of 5, pass in exact registration fee
	//------------------------------------------------------
	function registerArbiter(uint _numPlayers, uint _arbToken) public payable 
	{

		if (msg.value != registrationFee) {
			throw;  //Insufficient Fee
		}

		if (_arbToken == 0) {
			throw; // invalid token
		}

		if (arbTokenExists(_arbToken & 0xffff)) {
			throw; // Token Already Exists
		}

		if (arbiters[msg.sender].registered) {
			throw; // Arb Already Registered
		}
		
		if (_numPlayers > MAX_PLAYERS) {
			throw; // Exceeds Max Players
		}

		arbiters[msg.sender].gamesStarted = 0;
		arbiters[msg.sender].gamesCompleted = 0;
		arbiters[msg.sender].gamesCanceled = 0; 
		arbiters[msg.sender].gamesTimedout = 0;
		arbiters[msg.sender].locked = false;
		arbiters[msg.sender].arbToken = _arbToken & 0xffff;
		arbiters[msg.sender].numPlayers = _numPlayers;
		arbiters[msg.sender].registered = true;

		arbiterTokens[(_arbToken & 0xffff)] = msg.sender;
		arbiterIndexes[numArbiters++] = msg.sender;
	

		if (!tokenPartner.call.gas(raGas).value(msg.value)()) {
			//Statvent("Send Error"); // event never registers
		        throw;
		}
		StatEventI("Arb Added", _arbToken);
	}


	//------------------------------------------------------
	// start game.  pass in valid hGame containing token in top two bytes
	//------------------------------------------------------
	function startGame(uint _hGame, int _hkMax, address[] _players) public 

	{
		uint ntok = ArbTokFromHGame(_hGame);
		if (!validArb(msg.sender, ntok )) {
			StatEvent("Invalid Arb");
			return;
		}


		if (arbLocked(msg.sender)) {
			StatEvent("Arb Locked");
			return; 
		}

		arbiter xarb = arbiters[msg.sender];
		if (_players.length != xarb.numPlayers) { 
			StatEvent("Incorrect num players");
			return; 
		}

		if (games[_hGame].active) {
			// guard-rail. just in case to return funds
			abortGame(msg.sender, _hGame, EndReason.erCancel);

		} else if (_hkMax > 0) {
			houseKeep(_hkMax, ntok); 
		}

		if (!games[_hGame].allocd) {
			games[_hGame].allocd = true;
			xarb.gameIndexes[xarb.gameSlots++] = _hGame;
		} 
		numGamesStarted++; // always inc this one
		xarb.gamesStarted++;

		games[_hGame].active = true;
		games[_hGame].started = now; 
		games[_hGame].lastMoved = now; 
		games[_hGame].payout = 0; 
		games[_hGame].winner = address(0);

		games[_hGame].numPlayers = _players.length; // we'll be the judge of how many unique players
		for (uint i = 0; i< _players.length && i < MAX_PLAYERS; i++) {
	            games[_hGame].players[i] = _players[i];
		    games[_hGame].playerPots[i] = 0;
		}

		StatEventI("Game Added", _hGame);
		

	}
	
	//------------------------------------------------------
	// clean up game, set to inactive, refund any balances
	// called by housekeep ONLY
	//------------------------------------------------------
	function abortGame(address _arb, uint  _hGame, EndReason _reason) private returns(bool _success)
	{
	     gameInstance nGame = games[_hGame];
	     
		// find game in game id, 
		if (nGame.active) {
			_success = true;
			for (uint i = 0; i < nGame.numPlayers; i++) {
				if (nGame.playerPots[i] > 0) {
					address a = nGame.players[i];
					uint nsend = nGame.playerPots[i];
					nGame.playerPots[i] = 0;
					if (!a.call.gas(rfGas).value(nsend)()) {
						houseFeeHoldover += nsend; // cannot refund due to error, give to the house
					        StatEventA("Cannot Refund Address", a);
					}
				}
			}
			nGame.active = false;
			nGame.reasonEnded = _reason;
			if (_reason == EndReason.erCancel) {
				numGamesCanceled++;
				arbiters[_arb].gamesCanceled++;
				StatEvent("Game canceled");
			} else if (_reason == EndReason.erTimeOut) {
				numGamesTimedOut++;
				arbiters[_arb].gamesTimedout++;
				StatEvent("Game timed out");
			} else 
				StatEvent("Game aborted");
		}
	}


	//------------------------------------------------------
	// called by arbiter when winner is decided
	// *pass in high num for winnerbal for tie games
	//------------------------------------------------------
	function winnerDecided(uint _hGame, address _winner, uint _winnerBal) public
	{

		if (!validArb(msg.sender, ArbTokFromHGame(_hGame))) {
			StatEvent("Invalid Arb");	
			return; // no throw no change made
		}

		var (valid, pidx) = validPlayer(_hGame, _winner);
		if (!valid) {
			StatEvent("Invalid Player");	
			return;
		}

		arbiter xarb = arbiters[msg.sender];
		gameInstance xgame = games[_hGame];

		uint totalPot = 0;

		if (xgame.playerPots[pidx] < _winnerBal) {
		    abortGame(msg.sender, _hGame, EndReason.erCancel);
  		    return;
		}

		for (uint i = 0; i < xgame.numPlayers; i++) {
			totalPot += xgame.playerPots[i];
		}
		
		uint nportion;
		uint nremnant;
		if (totalPot > 0) {
		 	nportion = totalPot/50; // 2 percent fixed
			nremnant = totalPot-nportion;
		} else {
			nportion = 0;
			nremnant = 0;
		}
		

		xgame.lastMoved = now;
		xgame.active = false;
		xgame.reasonEnded = EndReason.erWinner;
		xgame.winner = _winner;
		xgame.payout = nremnant;
		
		if (nportion > 0) {
			houseFeeHoldover += nportion;
			if ((houseFeeHoldover > houseFeeThreshold)
				&& (now > (lastPayoutTime + payoutInterval))) {
				uint ntmpho = houseFeeHoldover;
				houseFeeHoldover = 0;
				lastPayoutTime = now; // reset regardless of succeed/fail
				if (!tokenPartner.call.gas(feeGas).value(ntmpho)()) {
					houseFeeHoldover = ntmpho; // put it back
					StatEvent("House-Fee Error1");
				} 
			}
		}
	
		for (i = 0; i < xgame.numPlayers; i++) {
			xgame.playerPots[i] = 0;
		}

		xarb.gamesCompleted++;
		numGamesCompleted++;
		if (nremnant > 0) {
			if (!_winner.call.gas(wpGas).value(uint(nremnant))()) {
				// StatEvent("Send Error");
			        throw; // if you cant pay the winner - very bad
			} else {
				StatEventI("Winner Paid", _hGame);		
			}
		}
	}

	//------------------------------------------------------
	// handle a bet made by a player, validate the player and game
	// add to players balance
	//------------------------------------------------------
	function handleBet(uint _hGame) public payable 
	{
		address narb = arbiterTokens[ArbTokFromHGame(_hGame)];
		if (narb == address(0)) {
			throw; // "Invalid hGame"
		}

		var (valid, pidx) = validPlayer(_hGame, msg.sender);
		if (!valid) {
			throw; // "Invalid Player"
		}

		games[_hGame].playerPots[pidx] += msg.value;
		games[_hGame].lastMoved = now;

		StatEventI("Bet Added", _hGame);

	}


	//------------------------------------------------------
	// return if arb token exists
	//------------------------------------------------------
	function arbTokenExists(uint _tok) constant returns (bool _exists)
	{
		_exists = false;
		if ((_tok > 0)
			&& (arbiterTokens[_tok] != address(0))
			&& arbiters[arbiterTokens[_tok]].registered)
			_exists = true;

	}




	//------------------------------------------------------
	// called by ico token contract 
	//------------------------------------------------------
	function getNumGamesStarted() constant returns (int _games) 
	{
		_games = numGamesStarted;
	}

	//------------------------------------------------------
	// return arbiter game stats
	//------------------------------------------------------
	function getArbInfo(uint _idx) constant  returns (address _addr, uint _started, uint _completed, uint _canceled, uint _timedOut) 
	{
		if (_idx >= numArbiters) {
			StatEvent("Invalid Arb");
			return;
		}
		_addr = arbiterIndexes[_idx];
		if ((_addr == address(0))
			|| (!arbiters[_addr].registered)) {
			StatEvent("Invalid Arb");
			return;
		}
		arbiter xarb = arbiters[_addr];
		_started = xarb.gamesStarted;
		_completed = xarb.gamesCompleted;
		_timedOut = xarb.gamesTimedout;
		_canceled = xarb.gamesCanceled;
	}


	//------------------------------------------------------
	// scan for a game 10 minutes old
	// if found abort the game, causing funds to be returned
	//------------------------------------------------------
	function houseKeep(int _max, uint _arbToken) public
	{	
		uint gi;
		address a;
		int aborted = 0;
		
		arbiter xarb = arbiters[msg.sender];// have to set it to something
	        
         
		if (msg.sender == owner) {
			for (uint ar = 0; (ar < numArbiters) && (aborted < _max) ; ar++) {
			    a = arbiterIndexes[ar];
			    xarb = arbiters[a];    

			    for ( gi = 0; (gi < xarb.gameSlots) && (aborted < _max); gi++) {
				gameInstance ngame0 = games[xarb.gameIndexes[gi]];
				if ((ngame0.active)
				    && ((now - ngame0.lastMoved) > gameTimeOut)) {
					abortGame(a, xarb.gameIndexes[gi], EndReason.erTimeOut);
					++aborted;
				}
			    }
			}

		} else {
			if (!validArb(msg.sender, _arbToken))
				StatEvent("Housekeep invalid arbiter");
			else {
			    a = msg.sender;
			    xarb = arbiters[a];    
			    for (gi = 0; (gi < xarb.gameSlots) && (aborted < _max); gi++) {
				gameInstance ngame1 = games[xarb.gameIndexes[gi]];
				if ((ngame1.active)
				    && ((now - ngame1.lastMoved) > gameTimeOut)) {
					abortGame(a, xarb.gameIndexes[gi], EndReason.erTimeOut);
					++aborted;
				}
			    }

			}	
		}
	}


	//------------------------------------------------------
	// return game info
	//------------------------------------------------------
	function getGameInfo(uint _hGame)  constant  returns (EndReason _reason, uint _players, uint _payout, bool _active, address _winner )
	{
		gameInstance ngame = games[_hGame];
		_active = ngame.active;
		_players = ngame.numPlayers;
		_winner = ngame.winner;
		_payout = ngame.payout;
		_reason = ngame.reasonEnded;

	}

	//------------------------------------------------------
	// return arbToken and low bytes from an HGame
	//------------------------------------------------------
	function checkHGame(uint _hGame) constant returns(uint _arbTok, uint _lowWords)
	{
		_arbTok = ArbTokFromHGame(_hGame);
		_lowWords = _hGame & 0xffffffffffff;
		
	}

	//------------------------------------------------------
	// get operation gas amounts
	//------------------------------------------------------
	function getOpGas() constant returns (uint _ra, uint _sg, uint _wp, uint _rf, uint _fg) 
	{
		_ra = raGas; // register arb
		_sg = sgGas; // start game
		_wp = wpGas; // winner paid
		_rf = rfGas; // refund
		_fg = feeGas; // rake fee gas
	}


	//------------------------------------------------------
	// set operation gas amounts for forwading operations
	//------------------------------------------------------
	function setOpGas(uint _ra, uint _sg, uint _wp, uint _rf, uint _fg) 
	{
		if (msg.sender != owner)
			throw;

		raGas = _ra;
		sgGas = _sg;
		wpGas = _wp;
		rfGas = _rf;
		feeGas = _fg;
	}

	//------------------------------------------------------
	// set a micheivous arbiter to locked
	//------------------------------------------------------
	function setArbiterLocked(address _addr, bool _lock)  public 
	{
		if (owner != msg.sender)  {
			throw; 
		} else if (!validArb2(_addr)) {
			StatEvent("invalid arb");
		} else {
			arbiters[_addr].locked = _lock;
		}
		
	}

	//------------------------------------------------------
	// flush the house fees whenever commanded to.
	// ignore the threshold and the last payout time
	// but this time only reset lastpayouttime upon success
	//------------------------------------------------------
	function flushHouseFees()
	{
		if (msg.sender != owner) {
			StatEvent("only owner calls this function");
		} else if (houseFeeHoldover > 0) {
			uint ntmpho = houseFeeHoldover;
			houseFeeHoldover = 0;
			if (!tokenPartner.call.gas(feeGas).value(ntmpho)()) {
				houseFeeHoldover = ntmpho; // put it back
				StatEvent("House-Fee Error2"); 
			} else {
				lastPayoutTime = now;
 				StatEvent("House-Fee Paid");
	 		}
		}

	}


	//------------------------------------------------------
	// set the token partner
	//------------------------------------------------------
	function setTokenPartner(address _addr) public
	{
		if (msg.sender != owner) {
			throw;
		} 

		if ((settingsState == SettingStateValue.lockedRelease) 
			&& (tokenPartner == address(0))) {
			tokenPartner = _addr;
			StatEvent("Token Partner Final!");
		} else if (settingsState != SettingStateValue.lockedRelease) {
			tokenPartner = _addr;
			StatEvent("Token Partner Assigned!");
		}
			
	}

	// ----------------------------
	// swap executor
	// ----------------------------
	function changeOwner(address _addr) 
	{
		if (msg.sender != owner
			|| settingsState == SettingStateValue.lockedRelease)
			 throw;

		owner = _addr;
	}



}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"_numPlayers","type":"uint256"},{"name":"_arbToken","type":"uint256"}],"name":"registerArbiter","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"payoutInterval","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getNumGamesStarted","outputs":[{"name":"_games","type":"int256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_state","type":"uint8"},{"name":"_fee","type":"uint256"},{"name":"_threshold","type":"uint256"},{"name":"_timeout","type":"uint256"},{"name":"_interval","type":"uint256"}],"name":"applySettings","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"registrationFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numArbiters","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"houseFeeThreshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hGame","type":"uint256"}],"name":"ArbTokFromHGame","outputs":[{"name":"_tok","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_hGame","type":"uint256"}],"name":"getGameInfo","outputs":[{"name":"_reason","type":"uint8"},{"name":"_players","type":"uint256"},{"name":"_payout","type":"uint256"},{"name":"_active","type":"bool"},{"name":"_winner","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hGame","type":"uint256"}],"name":"handleBet","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"gameTimeOut","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_idx","type":"uint256"}],"name":"getArbInfo","outputs":[{"name":"_addr","type":"address"},{"name":"_started","type":"uint256"},{"name":"_completed","type":"uint256"},{"name":"_canceled","type":"uint256"},{"name":"_timedOut","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"lastPayoutTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"settingsState","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hGame","type":"uint256"},{"name":"_winner","type":"address"},{"name":"_winnerBal","type":"uint256"}],"name":"winnerDecided","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setTokenPartner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numGamesTimedOut","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_lock","type":"bool"}],"name":"setArbiterLocked","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_max","type":"int256"},{"name":"_arbToken","type":"uint256"}],"name":"houseKeep","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getOpGas","outputs":[{"name":"_ra","type":"uint256"},{"name":"_sg","type":"uint256"},{"name":"_wp","type":"uint256"},{"name":"_rf","type":"uint256"},{"name":"_fg","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_hGame","type":"uint256"}],"name":"checkHGame","outputs":[{"name":"_arbTok","type":"uint256"},{"name":"_lowWords","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numGamesCompleted","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hGame","type":"uint256"},{"name":"_hkMax","type":"int256"},{"name":"_players","type":"address[]"}],"name":"startGame","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_ra","type":"uint256"},{"name":"_sg","type":"uint256"},{"name":"_wp","type":"uint256"},{"name":"_rf","type":"uint256"},{"name":"_fg","type":"uint256"}],"name":"setOpGas","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"houseFeeHoldover","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"flushHouseFees","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numGamesCanceled","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenPartner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tok","type":"uint256"}],"name":"arbTokenExists","outputs":[{"name":"_exists","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"HaraKiri","outputs":[],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"}],"name":"StatEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"},{"indexed":false,"name":"val","type":"uint256"}],"name":"StatEventI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"},{"indexed":false,"name":"addr","type":"address"}],"name":"StatEventA","type":"event"}]

6060604052601280546000919060ff19166001835b0217905550341561002157fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b611f6b8061004e6000396000f3006060604052361561017a5763ffffffff60e060020a60003504166303015ea381146101d157806309e785e1146101e15780631123efd51461020357806313bd53e61461022557806314c44e0914610249578063189ae13c1461026b5780631e83ce171461028d5780632c78ba6f146102af57806347e1d550146102d45780634f28af6a1461033057806351c08f4d1461033d5780635364f7211461035f57806358a1cabf146103a75780635f437e48146103c95780636df088bf146103fd5780637612115d14610421578063809432521461043f5780638a75f56a146104615780638da5cb5b146104845780639307ca0f146104b05780639a6921e4146104c85780639e6d95c714610503578063a6f9dae11461052f578063b05455321461054d578063b26f7efc1461056f578063bcdaea36146105c5578063c9fa8f2d146105e6578063ca2785bf14610608578063dc46d9841461061a578063dcb4775e1461063c578063e7d87cda14610668578063f081d9bd1461068f575b6101cf5b6040805160208082526007908201527f7468616e6b732100000000000000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b565b005b6101cf6004356024356106a1565b005b34156101e957fe5b6101f1610825565b60408051918252519081900360200190f35b341561020b57fe5b6101f161082b565b60408051918252519081900360200190f35b341561022d57fe5b6101cf60ff60043516602435604435606435608435610832565b005b341561025157fe5b6101f1610964565b60408051918252519081900360200190f35b341561027357fe5b6101f161096a565b60408051918252519081900360200190f35b341561029557fe5b6101f1610970565b60408051918252519081900360200190f35b34156102b757fe5b6101f1600435610976565b60408051918252519081900360200190f35b34156102dc57fe5b6102e760043561098f565b604051808660028111156102f757fe5b60ff1681526020810195909552506040808501939093529015156060840152600160a060020a03166080830152519081900360a0019150f35b6101cf6004356109d9565b005b341561034557fe5b6101f1610acd565b60408051918252519081900360200190f35b341561036757fe5b610372600435610ad3565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b34156103af57fe5b6101f1610bfa565b60408051918252519081900360200190f35b34156103d157fe5b6103d9610c00565b604051808260028111156103e957fe5b60ff16815260200191505060405180910390f35b341561040557fe5b6101cf600435600160a060020a0360243516604435610c09565b005b341561042957fe5b6101cf600160a060020a0360043516610fa0565b005b341561044757fe5b6101f16110e3565b60408051918252519081900360200190f35b341561046957fe5b6101cf600160a060020a036004351660243515156110e9565b005b341561048c57fe5b61049461119a565b60408051600160a060020a039092168252519081900360200190f35b34156104b857fe5b6101cf6004356024356111a9565b005b34156104d057fe5b6104d86113c8565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b341561050b57fe5b6105166004356113df565b6040805192835260208301919091528051918290030190f35b341561053757fe5b6101cf600160a060020a03600435166113fe565b005b341561055557fe5b6101f1611457565b60408051918252519081900360200190f35b341561057757fe5b60408051604435600481810135602081810285810182019096528185526101cf958335956024803596606495929491019282918501908490808284375094965061145d95505050505050565b005b34156105cd57fe5b6101cf60043560243560443560643560843561179c565b005b34156105ee57fe5b6101f16117d9565b60408051918252519081900360200190f35b341561061057fe5b6101cf6117df565b005b341561062257fe5b6101f161193e565b60408051918252519081900360200190f35b341561064457fe5b610494611944565b60408051600160a060020a039092168252519081900360200190f35b341561067057fe5b61067b600435611953565b604080519115158252519081900360200190f35b341561069757fe5b6101cf6119bc565b005b600a5434146106b05760006000fd5b8015156106bd5760006000fd5b6106ca8161ffff16611953565b156106d55760006000fd5b600160a060020a03331660009081526013602052604090206008015460ff16156106ff5760006000fd5b600582111561070e5760006000fd5b600160a060020a0333811660008181526013602090815260408083206003810184905560048101849055600581018490556006810184905560088101805461ffff8916600180850182905560079094018b905561ffff1990911683179091558452601483528184208054600160a060020a03199081168717909155600280548084019091558552601590935281842080549093169094179091559154600d5492519316923491818181858888f1935050505015156107cc5760006000fd5b60408051602081018390528181526009818301527f417262204164646564000000000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b5050565b600c5481565b6003545b90565b60005433600160a060020a0390811691161461084e5760006000fd5b600b8390556009829055600c81905560025b60125460ff16600281111561087157fe5b14156108ca576040805160208082526010908201527f53657474696e677320547765616b656400000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a161095d565b6012805486919060ff191660018360028111156108e357fe5b0217905550600a849055620249f0600d556201adb0600e55614e20600f819055601090815562057e406011556040805160208082528101929092527f53657474696e6773204368616e676564000000000000000000000000000000008282015251600080516020611f208339815191529181900360600190a15b5050505050565b600a5481565b60025481565b600b5481565b60006601000000000000825b0461ffff1690505b919050565b6000818152601660205260409020600b810154600a820154600f830154600e84015460ff60a060020a830481169593949193911691600160a060020a0316905b5091939590929450565b600060006000601460006109ec86610976565b8152602081019190915260400160002054600160a060020a03169250821515610a155760006000fd5b610a1f8433611a51565b91509150811515610a305760006000fd5b6000848152601660205260409020349060059081019083908110610a5057fe5b0160005b508054909101905560008481526016602090815260409182902042600d9091015581519081018690528181526009818301527f426574204164646564000000000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b50505050565b60095481565b60006000600060006000600060025487101515610b2e57604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a16109cf565b600087815260156020526040902054600160a060020a03169550851580610b715750600160a060020a03861660009081526013602052604090206008015460ff16155b15610bba57604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a16109cf565b50505050600160a060020a0382166000908152601360205260409020600381015460048201546006830154600584015492945090925b5091939590929450565b60085481565b60125460ff1681565b600060006000600060006000600060006000610c2d33610c288e610976565b611ae8565b1515610c7757604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a1610f90565b610c818c8c611a51565b98509850881515610cdf57604080516020808252600e908201527f496e76616c696420506c61796572000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a1610f90565b600160a060020a03331660009081526013602090815260408083208f84526016909252822090985096509450896005808801908a908110610d1c57fe5b0160005b50541015610d3a57610d34338d6002611b3d565b50610f90565b600093505b85600a0154841015610d72578560050184600581101515610d5c57fe5b0160005b5054850194505b600190930192610d3f565b6000851115610d8c576032855b0492508285039150610d95565b60009250600091505b42600d870155600b8601805460ff19169055600f860180546000919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550600f86018054600160a060020a031916600160a060020a038d16179055600e86018290556000831115610eb85760078054840190819055600b5490118015610e225750600c546008540142115b15610eb8575060078054600091829055426008556001546011546040519293600160a060020a03909216929091849190818181858888f193505050501515610eb85760078190556040805160208082526010908201527f486f7573652d466565204572726f723100000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b5b600093505b85600a0154841015610ef05760008660050185600581101515610ede57fe5b0160005b50555b600190930192610ebf565b60048088018054600190810190915581540190556000821115610f9057600f54604051600160a060020a038d16919084906000818181858888f193505050501515610f3b5760006000fd5b60408051602081018e9052818152600b818301527f57696e6e6572205061696400000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b5b5b505050505050505050505050565b60005433600160a060020a03908116911614610fbc5760006000fd5b60025b60125460ff166002811115610fd057fe5b148015610fe65750600154600160a060020a0316155b1561105a5760018054600160a060020a031916600160a060020a0383161790556040805160208082526014908201527f546f6b656e20506172746e65722046696e616c21000000000000000000000000818301529051600080516020611f20833981519152916060908290030190a16110de565b60025b60125460ff16600281111561106e57fe5b146110de5760018054600160a060020a031916600160a060020a0383161790556040805160208082526017908201527f546f6b656e20506172746e65722041737369676e656421000000000000000000818301529051600080516020611f20833981519152916060908290030190a15b5b5b50565b60065481565b60005433600160a060020a039081169116146111055760006000fd5b61110e82611e64565b151561116757604080516020808252600b908201527f696e76616c696420617262000000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a1610821565b600160a060020a0382166000908152601360205260409020600801805461ff001916610100831515021790555b5b5b5050565b600054600160a060020a031681565b600160a060020a033381166000818152601360205260408120815491938493849384928392839290911614156112b457600092505b600254831080156111ee57508885125b156112af57600083815260156020908152604080832054600160a060020a031680845260139092528220919850965093505b83600201548710801561123257508885125b156112a35760008781526020858152604080832054835260169091529020600b81015490925060ff16801561126e575060095482600d01544203115b156112975760008781526020859052604090205461128f9087906001611b3d565b508460010194505b5b600190960195611220565b5b6001909201916111de565b6113ba565b6112be3389611ae8565b1515611317576040805160208082526019908201527f486f7573656b65657020696e76616c6964206172626974657200000000000000818301529051600080516020611f208339815191529181900360600190a16113ba565b33600160a060020a038116600090815260136020526040812090985090965093505b83600201548710801561134b57508885125b156113ba575060008681526020848152604080832054835260169091529020600b81015460ff168015611385575060095481600d01544203115b156113ae576000878152602085905260409020546113a69087906001611b3d565b508460010194505b5b600190960195611339565b5b5b5b505050505050505050565b600d54600e54600f546010546011545b9091929394565b600060006113ec83610976565b91505065ffffffffffff82165b915091565b60005433600160a060020a03908116911614158061142d575060025b60125460ff16600281111561142b57fe5b145b156114385760006000fd5b60008054600160a060020a031916600160a060020a0383161790555b50565b60045481565b60006000600061146c86610976565b92506114783384611ae8565b15156114c257604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a1611794565b6114cb33611e92565b1561152357604080516020808252600a908201527f417262204c6f636b656400000000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a1611794565b600160a060020a0333166000908152601360205260409020600781015485519193501461159d576040805160208082526015908201527f496e636f7272656374206e756d20706c61796572730000000000000000000000818301529051600080516020611f208339815191529181900360600190a1611794565b6000868152601660205260409020600b015460ff16156115c9576115c333876002611b3d565b506115dc565b60008513156115dc576115dc85846111a9565b5b5b6000868152601660205260409020600b0154610100900460ff161515611638576000868152601660209081526040808320600b01805461ff0019166101001790556002850180546001810190915583529084905290208690555b5060038054600190810182559082018054820190556000868152601660205260408120600b8101805460ff191690931790925542600c8301819055600d830155600e8201819055600f82018054600160a060020a03191690558451600a909201919091555b8351811080156116ad5750600581105b1561173f5783818151811015156116c057fe5b602090810290910181015160008881526016909252604090912082600581106116e557fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506000601660008881526020019081526020016000206005018260058110151561173057fe5b0160005b50555b60010161169d565b6040805160208101889052818152600a818301527f47616d652041646465640000000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b505050505050565b60005433600160a060020a039081169116146117b85760006000fd5b600d859055600e849055600f839055601082905560118190555b5050505050565b60075481565b6000805433600160a060020a0390811691161461184957604080516020808252601e908201527f6f6e6c79206f776e65722063616c6c7320746869732066756e6374696f6e0000818301529051600080516020611f208339815191529181900360600190a16110de565b600060075411156110de5750600780546000918290556001546011546040519293600160a060020a03909216929091849190818181858888f1935050505015156118e55760078190556040805160208082526010908201527f486f7573652d466565204572726f723200000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a16110de565b42600855604080516020808252600e908201527f486f7573652d4665652050616964000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b5b5b50565b60055481565b600154600160a060020a031681565b6000808211801561197a5750600082815260146020526040902054600160a060020a031615155b80156119ad5750600082815260146020908152604080832054600160a060020a03168352601390915290206008015460ff165b1561098a575060015b5b919050565b60005433600160a060020a0390811691161480156119ec575060025b60125460ff1660028111156119e957fe5b14155b156119ff57600154600160a060020a0316ff5b6040805160208082526013908201527f4b696c6c20617474656d7074206661696c656400000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b565b60008080611a5e85611ece565b15611ade575060005b6000858152601660205260409020600a0154811015611ade576000858152601660205260409020600160a060020a038516908260058110611aa457fe5b0160005b9054906101000a9004600160a060020a0316600160a060020a03161415611ad55760019250809150611ade565b5b600101611a67565b5b5b509250929050565b600160a060020a03821660009081526013602052604081206008015460ff168015611b2d5750600160a060020a03831660009081526013602052604090206001015482145b15611b36575060015b5b92915050565b6000828152601660205260408120600b81015482908190819060ff1615611e565760019450600092505b83600a0154831015611c945760008460050184600581101515611b8657fe5b0160005b50541115611c8757838360058110611b9e57fe5b0160005b9054906101000a9004600160a060020a031691508360050183600581101515611bc757fe5b0160005b5054905060008460050184600581101515611be257fe5b0160005b5055601054604051600160a060020a038416919083906000818181858888f193505050501515611c8757600780548201905560408051600160a060020a03841660208201528181526015818301527f43616e6e6f7420526566756e6420416464726573730000000000000000000000606082015290517fe0e85fe8d69ca593247064bffd9438c76090518a0ec0f0c452c31218c8b9e6a49181900360800190a15b5b5b600190920191611b67565b600b8401805460ff19169055600f8401805487919074ff0000000000000000000000000000000000000000191660a060020a836002811115611cd257fe5b021790555060025b866002811115611ce657fe5b1415611d6f576005805460019081018255600160a060020a038a1660009081526013602090815260409182902090930180549092019091558051828152600d928101929092527f47616d652063616e63656c6564000000000000000000000000000000000000008282015251600080516020611f208339815191529181900360600190a1611e56565b60015b866002811115611d7e57fe5b1415611e07576006805460019081018255600160a060020a038a1660009081526013602090815260409182902090930180549092019091558051828152600e928101929092527f47616d652074696d6564206f75740000000000000000000000000000000000008282015251600080516020611f208339815191529181900360600190a1611e56565b604080516020808252600c908201527f47616d652061626f727465640000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b5b5b505050509392505050565b600160a060020a03811660009081526013602052604081206008015460ff161561098a575060015b5b919050565b6000611e9d82611e64565b1561098a5750600160a060020a038116600090815260136020526040902060080154610100900460ff165b5b919050565b600080821180156119ad57506000828152601660205260409020600b015460ff165b1561098a575060015b5b91905056009e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d1df4241f9d28385037b9339fabdb2fac8a42cb5e489c20da7a82bb32f517e648a165627a7a7230582065899295bf18b68794ae4663f7902b2b3912178a798a20c2beb61b786886d04b0029

Deployed Bytecode

0x6060604052361561017a5763ffffffff60e060020a60003504166303015ea381146101d157806309e785e1146101e15780631123efd51461020357806313bd53e61461022557806314c44e0914610249578063189ae13c1461026b5780631e83ce171461028d5780632c78ba6f146102af57806347e1d550146102d45780634f28af6a1461033057806351c08f4d1461033d5780635364f7211461035f57806358a1cabf146103a75780635f437e48146103c95780636df088bf146103fd5780637612115d14610421578063809432521461043f5780638a75f56a146104615780638da5cb5b146104845780639307ca0f146104b05780639a6921e4146104c85780639e6d95c714610503578063a6f9dae11461052f578063b05455321461054d578063b26f7efc1461056f578063bcdaea36146105c5578063c9fa8f2d146105e6578063ca2785bf14610608578063dc46d9841461061a578063dcb4775e1461063c578063e7d87cda14610668578063f081d9bd1461068f575b6101cf5b6040805160208082526007908201527f7468616e6b732100000000000000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b565b005b6101cf6004356024356106a1565b005b34156101e957fe5b6101f1610825565b60408051918252519081900360200190f35b341561020b57fe5b6101f161082b565b60408051918252519081900360200190f35b341561022d57fe5b6101cf60ff60043516602435604435606435608435610832565b005b341561025157fe5b6101f1610964565b60408051918252519081900360200190f35b341561027357fe5b6101f161096a565b60408051918252519081900360200190f35b341561029557fe5b6101f1610970565b60408051918252519081900360200190f35b34156102b757fe5b6101f1600435610976565b60408051918252519081900360200190f35b34156102dc57fe5b6102e760043561098f565b604051808660028111156102f757fe5b60ff1681526020810195909552506040808501939093529015156060840152600160a060020a03166080830152519081900360a0019150f35b6101cf6004356109d9565b005b341561034557fe5b6101f1610acd565b60408051918252519081900360200190f35b341561036757fe5b610372600435610ad3565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b34156103af57fe5b6101f1610bfa565b60408051918252519081900360200190f35b34156103d157fe5b6103d9610c00565b604051808260028111156103e957fe5b60ff16815260200191505060405180910390f35b341561040557fe5b6101cf600435600160a060020a0360243516604435610c09565b005b341561042957fe5b6101cf600160a060020a0360043516610fa0565b005b341561044757fe5b6101f16110e3565b60408051918252519081900360200190f35b341561046957fe5b6101cf600160a060020a036004351660243515156110e9565b005b341561048c57fe5b61049461119a565b60408051600160a060020a039092168252519081900360200190f35b34156104b857fe5b6101cf6004356024356111a9565b005b34156104d057fe5b6104d86113c8565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b341561050b57fe5b6105166004356113df565b6040805192835260208301919091528051918290030190f35b341561053757fe5b6101cf600160a060020a03600435166113fe565b005b341561055557fe5b6101f1611457565b60408051918252519081900360200190f35b341561057757fe5b60408051604435600481810135602081810285810182019096528185526101cf958335956024803596606495929491019282918501908490808284375094965061145d95505050505050565b005b34156105cd57fe5b6101cf60043560243560443560643560843561179c565b005b34156105ee57fe5b6101f16117d9565b60408051918252519081900360200190f35b341561061057fe5b6101cf6117df565b005b341561062257fe5b6101f161193e565b60408051918252519081900360200190f35b341561064457fe5b610494611944565b60408051600160a060020a039092168252519081900360200190f35b341561067057fe5b61067b600435611953565b604080519115158252519081900360200190f35b341561069757fe5b6101cf6119bc565b005b600a5434146106b05760006000fd5b8015156106bd5760006000fd5b6106ca8161ffff16611953565b156106d55760006000fd5b600160a060020a03331660009081526013602052604090206008015460ff16156106ff5760006000fd5b600582111561070e5760006000fd5b600160a060020a0333811660008181526013602090815260408083206003810184905560048101849055600581018490556006810184905560088101805461ffff8916600180850182905560079094018b905561ffff1990911683179091558452601483528184208054600160a060020a03199081168717909155600280548084019091558552601590935281842080549093169094179091559154600d5492519316923491818181858888f1935050505015156107cc5760006000fd5b60408051602081018390528181526009818301527f417262204164646564000000000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b5050565b600c5481565b6003545b90565b60005433600160a060020a0390811691161461084e5760006000fd5b600b8390556009829055600c81905560025b60125460ff16600281111561087157fe5b14156108ca576040805160208082526010908201527f53657474696e677320547765616b656400000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a161095d565b6012805486919060ff191660018360028111156108e357fe5b0217905550600a849055620249f0600d556201adb0600e55614e20600f819055601090815562057e406011556040805160208082528101929092527f53657474696e6773204368616e676564000000000000000000000000000000008282015251600080516020611f208339815191529181900360600190a15b5050505050565b600a5481565b60025481565b600b5481565b60006601000000000000825b0461ffff1690505b919050565b6000818152601660205260409020600b810154600a820154600f830154600e84015460ff60a060020a830481169593949193911691600160a060020a0316905b5091939590929450565b600060006000601460006109ec86610976565b8152602081019190915260400160002054600160a060020a03169250821515610a155760006000fd5b610a1f8433611a51565b91509150811515610a305760006000fd5b6000848152601660205260409020349060059081019083908110610a5057fe5b0160005b508054909101905560008481526016602090815260409182902042600d9091015581519081018690528181526009818301527f426574204164646564000000000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b50505050565b60095481565b60006000600060006000600060025487101515610b2e57604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a16109cf565b600087815260156020526040902054600160a060020a03169550851580610b715750600160a060020a03861660009081526013602052604090206008015460ff16155b15610bba57604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a16109cf565b50505050600160a060020a0382166000908152601360205260409020600381015460048201546006830154600584015492945090925b5091939590929450565b60085481565b60125460ff1681565b600060006000600060006000600060006000610c2d33610c288e610976565b611ae8565b1515610c7757604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a1610f90565b610c818c8c611a51565b98509850881515610cdf57604080516020808252600e908201527f496e76616c696420506c61796572000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a1610f90565b600160a060020a03331660009081526013602090815260408083208f84526016909252822090985096509450896005808801908a908110610d1c57fe5b0160005b50541015610d3a57610d34338d6002611b3d565b50610f90565b600093505b85600a0154841015610d72578560050184600581101515610d5c57fe5b0160005b5054850194505b600190930192610d3f565b6000851115610d8c576032855b0492508285039150610d95565b60009250600091505b42600d870155600b8601805460ff19169055600f860180546000919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550600f86018054600160a060020a031916600160a060020a038d16179055600e86018290556000831115610eb85760078054840190819055600b5490118015610e225750600c546008540142115b15610eb8575060078054600091829055426008556001546011546040519293600160a060020a03909216929091849190818181858888f193505050501515610eb85760078190556040805160208082526010908201527f486f7573652d466565204572726f723100000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b5b600093505b85600a0154841015610ef05760008660050185600581101515610ede57fe5b0160005b50555b600190930192610ebf565b60048088018054600190810190915581540190556000821115610f9057600f54604051600160a060020a038d16919084906000818181858888f193505050501515610f3b5760006000fd5b60408051602081018e9052818152600b818301527f57696e6e6572205061696400000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b5b5b505050505050505050505050565b60005433600160a060020a03908116911614610fbc5760006000fd5b60025b60125460ff166002811115610fd057fe5b148015610fe65750600154600160a060020a0316155b1561105a5760018054600160a060020a031916600160a060020a0383161790556040805160208082526014908201527f546f6b656e20506172746e65722046696e616c21000000000000000000000000818301529051600080516020611f20833981519152916060908290030190a16110de565b60025b60125460ff16600281111561106e57fe5b146110de5760018054600160a060020a031916600160a060020a0383161790556040805160208082526017908201527f546f6b656e20506172746e65722041737369676e656421000000000000000000818301529051600080516020611f20833981519152916060908290030190a15b5b5b50565b60065481565b60005433600160a060020a039081169116146111055760006000fd5b61110e82611e64565b151561116757604080516020808252600b908201527f696e76616c696420617262000000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a1610821565b600160a060020a0382166000908152601360205260409020600801805461ff001916610100831515021790555b5b5b5050565b600054600160a060020a031681565b600160a060020a033381166000818152601360205260408120815491938493849384928392839290911614156112b457600092505b600254831080156111ee57508885125b156112af57600083815260156020908152604080832054600160a060020a031680845260139092528220919850965093505b83600201548710801561123257508885125b156112a35760008781526020858152604080832054835260169091529020600b81015490925060ff16801561126e575060095482600d01544203115b156112975760008781526020859052604090205461128f9087906001611b3d565b508460010194505b5b600190960195611220565b5b6001909201916111de565b6113ba565b6112be3389611ae8565b1515611317576040805160208082526019908201527f486f7573656b65657020696e76616c6964206172626974657200000000000000818301529051600080516020611f208339815191529181900360600190a16113ba565b33600160a060020a038116600090815260136020526040812090985090965093505b83600201548710801561134b57508885125b156113ba575060008681526020848152604080832054835260169091529020600b81015460ff168015611385575060095481600d01544203115b156113ae576000878152602085905260409020546113a69087906001611b3d565b508460010194505b5b600190960195611339565b5b5b5b505050505050505050565b600d54600e54600f546010546011545b9091929394565b600060006113ec83610976565b91505065ffffffffffff82165b915091565b60005433600160a060020a03908116911614158061142d575060025b60125460ff16600281111561142b57fe5b145b156114385760006000fd5b60008054600160a060020a031916600160a060020a0383161790555b50565b60045481565b60006000600061146c86610976565b92506114783384611ae8565b15156114c257604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a1611794565b6114cb33611e92565b1561152357604080516020808252600a908201527f417262204c6f636b656400000000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a1611794565b600160a060020a0333166000908152601360205260409020600781015485519193501461159d576040805160208082526015908201527f496e636f7272656374206e756d20706c61796572730000000000000000000000818301529051600080516020611f208339815191529181900360600190a1611794565b6000868152601660205260409020600b015460ff16156115c9576115c333876002611b3d565b506115dc565b60008513156115dc576115dc85846111a9565b5b5b6000868152601660205260409020600b0154610100900460ff161515611638576000868152601660209081526040808320600b01805461ff0019166101001790556002850180546001810190915583529084905290208690555b5060038054600190810182559082018054820190556000868152601660205260408120600b8101805460ff191690931790925542600c8301819055600d830155600e8201819055600f82018054600160a060020a03191690558451600a909201919091555b8351811080156116ad5750600581105b1561173f5783818151811015156116c057fe5b602090810290910181015160008881526016909252604090912082600581106116e557fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506000601660008881526020019081526020016000206005018260058110151561173057fe5b0160005b50555b60010161169d565b6040805160208101889052818152600a818301527f47616d652041646465640000000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b505050505050565b60005433600160a060020a039081169116146117b85760006000fd5b600d859055600e849055600f839055601082905560118190555b5050505050565b60075481565b6000805433600160a060020a0390811691161461184957604080516020808252601e908201527f6f6e6c79206f776e65722063616c6c7320746869732066756e6374696f6e0000818301529051600080516020611f208339815191529181900360600190a16110de565b600060075411156110de5750600780546000918290556001546011546040519293600160a060020a03909216929091849190818181858888f1935050505015156118e55760078190556040805160208082526010908201527f486f7573652d466565204572726f723200000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a16110de565b42600855604080516020808252600e908201527f486f7573652d4665652050616964000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b5b5b50565b60055481565b600154600160a060020a031681565b6000808211801561197a5750600082815260146020526040902054600160a060020a031615155b80156119ad5750600082815260146020908152604080832054600160a060020a03168352601390915290206008015460ff165b1561098a575060015b5b919050565b60005433600160a060020a0390811691161480156119ec575060025b60125460ff1660028111156119e957fe5b14155b156119ff57600154600160a060020a0316ff5b6040805160208082526013908201527f4b696c6c20617474656d7074206661696c656400000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b565b60008080611a5e85611ece565b15611ade575060005b6000858152601660205260409020600a0154811015611ade576000858152601660205260409020600160a060020a038516908260058110611aa457fe5b0160005b9054906101000a9004600160a060020a0316600160a060020a03161415611ad55760019250809150611ade565b5b600101611a67565b5b5b509250929050565b600160a060020a03821660009081526013602052604081206008015460ff168015611b2d5750600160a060020a03831660009081526013602052604090206001015482145b15611b36575060015b5b92915050565b6000828152601660205260408120600b81015482908190819060ff1615611e565760019450600092505b83600a0154831015611c945760008460050184600581101515611b8657fe5b0160005b50541115611c8757838360058110611b9e57fe5b0160005b9054906101000a9004600160a060020a031691508360050183600581101515611bc757fe5b0160005b5054905060008460050184600581101515611be257fe5b0160005b5055601054604051600160a060020a038416919083906000818181858888f193505050501515611c8757600780548201905560408051600160a060020a03841660208201528181526015818301527f43616e6e6f7420526566756e6420416464726573730000000000000000000000606082015290517fe0e85fe8d69ca593247064bffd9438c76090518a0ec0f0c452c31218c8b9e6a49181900360800190a15b5b5b600190920191611b67565b600b8401805460ff19169055600f8401805487919074ff0000000000000000000000000000000000000000191660a060020a836002811115611cd257fe5b021790555060025b866002811115611ce657fe5b1415611d6f576005805460019081018255600160a060020a038a1660009081526013602090815260409182902090930180549092019091558051828152600d928101929092527f47616d652063616e63656c6564000000000000000000000000000000000000008282015251600080516020611f208339815191529181900360600190a1611e56565b60015b866002811115611d7e57fe5b1415611e07576006805460019081018255600160a060020a038a1660009081526013602090815260409182902090930180549092019091558051828152600e928101929092527f47616d652074696d6564206f75740000000000000000000000000000000000008282015251600080516020611f208339815191529181900360600190a1611e56565b604080516020808252600c908201527f47616d652061626f727465640000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b5b5b505050509392505050565b600160a060020a03811660009081526013602052604081206008015460ff161561098a575060015b5b919050565b6000611e9d82611e64565b1561098a5750600160a060020a038116600090815260136020526040902060080154610100900460ff165b5b919050565b600080821180156119ad57506000828152601660205260409020600b015460ff165b1561098a575060015b5b91905056009e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d1df4241f9d28385037b9339fabdb2fac8a42cb5e489c20da7a82bb32f517e648a165627a7a7230582065899295bf18b68794ae4663f7902b2b3912178a798a20c2beb61b786886d04b0029

Swarm Source

bzzr://65899295bf18b68794ae4663f7902b2b3912178a798a20c2beb61b786886d04b

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.