Contract Overview | etherplay.io
ETH Balance: 0.8 Ether ($10.50)
Mined:  0
No Of Transactions: 7465 txns + 771 internalTxns
  Latest 25 txns from a total Of 7465 transactions View All

TxHash Block Age From To Value [TxFee]
0x895289e71eec8b9a9e38eb0ff84e14725f331a5bce8f302b8daa442c1bee17e132394471 hr 32 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00083438
0xc5d76404498a1e07be948c5bfac75e53cdf29a77652472c5343511c12d6bbd0832394391 hr 35 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0x3c9c035e953486e7be62dfb5fe3be8cc66a2d25edcb5bb8f137d12210efa76d532394311 hr 38 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0x17be03a96b2ee3ee3bacd46efd76d52146f6523666ee38316e789f83eb98b72432394211 hr 41 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00083438
0xf012c4c8452343bafe7b8427cf64cbf4215404038e5fa915b13e85c85e1e1b9532394151 hr 43 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0x931534b3bf20afa624295c91996b2c4eb776e7020b1b039a427fd9a80d3014ec323608514 hrs 54 mins ago0x00565653ada11e34958e724c88aa2be3143744d4  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00061209
0x44ee803aab7ad898b7ff9f43cd1549573d3049cb7b82fe197a01df2a41a225f3323608514 hrs 54 mins ago0x00565653ada11e34958e724c88aa2be3143744d4  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00054244
0xddddfdffd1c1f90c9fd9d9b17a65b9d548aef60571a5e0d4caf47f6731f99cac323605115 hrs 1 min ago0x00565653ada11e34958e724c88aa2be3143744d4  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00061209
0x038ed7dd1bfbf9c05dbaddae2cb66164e409ee359da6b2772879c7e9690a0620323412322 hrs 54 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0x52080092159dd36bc16d3e8bfb4c24340690b22df7e2b030fd622e5283f09eb4323410022 hrs 58 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0xbc20845fb6640d8d41aba8424e864684ba3e9a28b51d98513c21ae4a64a619ef323404823 hrs 10 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0xada65cbe78af7a07c913dd0b6a088443d28c5c779f61cf1f2e808a24c8b48bad323402923 hrs 15 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0x2c4280769a3fab0970979eada8ba60e8bb0d76b75e18713b278520daaa845fed323401023 hrs 17 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0xfcd3cf2b67ffcf0f5a1a84e2998e21652fe9ae6548ce06184d6157e6e3d0c55c323399523 hrs 20 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0x0f625bab23c2ec486ef405405d60c4f3942f3574f2f24c9467ee3d501f7524a7323398823 hrs 21 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0xf26334a3583b93346aaa18cd19dde87ed445229b4f3964c0489ec632b4819b6732338121 day 6 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.0005672
0x67d0fd1543fd5cb2e0b6c58983dc524134262ba60394233ea76f1fd620c1a33732337951 day 10 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076384
0xe9f3e7ce6cc0d35ef043a2e3bc434f6ce407e3d184528ea079ec9677b3b35b9e32337901 day 12 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0xaa08bd92e5ca7477e768e53171a5c6da45a6cda2030aa5ad519329248aeceb3432337811 day 14 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00067806
0xfe4835cf1df181597c79a7669e6b329da15957f0d2b0dfe027f9e4dff1deda8e32337491 day 22 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00083438
0x1f517a99048c84cf704da9ec7d8d82c9c534dc684d77caf023de8c6b4464232832337381 day 24 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0xec0ac08b9a4c0d8f9369f225eb7b334c4734ceedee164d857d487d24ca2e100f32337171 day 27 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00166594
0x46abda08d07b822d3b6b64941ab4c5444c61880ba795d0c04a63dd58bb318caf32337141 day 29 mins ago0x9b837a13795097865a5ac95cc99e98a37b846ce0  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00106512
0x5f220fcb229ee75caedfdedd295d76052acd4396afdd5182358377ed0c7b283932331751 day 2 hrs ago0x7ed2b372765bdf13eca1f1f22bc0658306dc0277  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00166722
0xff5f8f154c2150ccae4e269e9f77d8bf6a65691a9bcb13b9539b16533fc749fa32331681 day 2 hrs ago0x7ed2b372765bdf13eca1f1f22bc0658306dc0277  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00106512
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns from a total of 771 View All
ParentTxHash Block Age From To Value
0x44ee803aab7ad898b7ff9f43cd1549573d3049cb7b82fe197a01df2a41a225f3323608514 hrs 54 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0xaa08bd92e5ca7477e768e53171a5c6da45a6cda2030aa5ad519329248aeceb3432337811 day 14 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x9b837a13795097865a5ac95cc99e98a37b846ce00.013333333333333334 Ether
0x43783a746ff2225d0901da4cee9c4dfb81d1c6ffa3a7e97b2174fb53b6c1755532300921 day 14 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0xc74bd65d7aba40546a89c066703045a2a059f80a5e018ae4926a9d563706264d32296801 day 16 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x6f69997804f49e5c2d17f1cfeb72f9dc80260ee50.013333333333333334 Ether
0x44cff26c3262835599eab3cd5b94969763c9f84a8dea25a305628c9f7dacc34a32255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0x628cfd53dc13236c2dde2c32c16835f95d50b83b0bba00296851c9a62244e94432255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0x7d3a532a3d784644298081783e8bca05e1bd277fb82a382449d812cd893e9aa432255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0xbb44301fa510c0c9ead9f1e3119248a20c605f18d649b439827e8ec141d6024432255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0x95577b1bd8f697dcbcc5ee2b998fb7e6f8f6d24ca1489113813551d3a024e14f32255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0x36abf872b654598f0b3c2886d0f96cf118786f9f37ea5574113ce95bee428e2232255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0x5f1f1445c05d1d09b5f81ea5a19293668932505cf8e6fb5862af84586aebe2ae32255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0x9e7aa505ce8c7a3c5ddfa93511dffe797b2c9dcd198e383681aef0dd59ad587432255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0xf42c1b0a0af94228f5b129193fcdefec963184b63e8cb3b6d9920d7fcc9c80cb32255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0x0bf489e22aa9e68d1e15c1b1d2eccecb6ceeeae27a6aa175d7e7a017eb7b72ba32255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0xec840313058f7b5a89b8e49a5d948250fd02309e2ba984879dae1d27e36417d232255772 days 9 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x00565653ada11e34958e724c88aa2be3143744d40.013333333333333334 Ether
0x884db10c6bd4d65c4b235f08baca5865bb2571813680e4a8cdb759437f67e83f32246912 days 12 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430xd06d38c35480829084f32106b374865b3c1e096d0.713873455010070751 Ether
0x884db10c6bd4d65c4b235f08baca5865bb2571813680e4a8cdb759437f67e83f32246912 days 12 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430xe8f6b2e55e37e6fafaac3b61a7bc4842decfd61e0.356936727505035375 Ether
0x884db10c6bd4d65c4b235f08baca5865bb2571813680e4a8cdb759437f67e83f32246912 days 12 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430xfe4312550625263f70e8dc16ef07ba2f7143f06f0.214157446267328002 Ether
0x884db10c6bd4d65c4b235f08baca5865bb2571813680e4a8cdb759437f67e83f32246912 days 12 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430xa8dfdac0e1c356bd27517af6ee17b12706caadd00.142773543443090844 Ether
0x884db10c6bd4d65c4b235f08baca5865bb2571813680e4a8cdb759437f67e83f32246912 days 12 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x6643ee5bc8ee7a80305edff7a9fb04e25012da770.101977823719569729 Ether
0x884db10c6bd4d65c4b235f08baca5865bb2571813680e4a8cdb759437f67e83f32246912 days 12 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x97b31391c36b709dec8576ac4bf36a35a75628420.076484802238331429 Ether
0x884db10c6bd4d65c4b235f08baca5865bb2571813680e4a8cdb759437f67e83f32246912 days 12 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x915a92877b3fac787d8ea785af571cf7db4e7dfe0.059489454584172562 Ether
0x884db10c6bd4d65c4b235f08baca5865bb2571813680e4a8cdb759437f67e83f32246912 days 12 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430xbebd280da92794838e3c3c7e8fd0a4a015a9dc1e0.047589268549491438 Ether
0x884db10c6bd4d65c4b235f08baca5865bb2571813680e4a8cdb759437f67e83f32246912 days 12 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x65b03b824535d118d85ec01c0a03db347bd9d79c0.038936674267765722 Ether
0x884db10c6bd4d65c4b235f08baca5865bb2571813680e4a8cdb759437f67e83f32246912 days 12 hrs ago0x5f742383b6d1298980030d6af943b76cdd9021430x44599829bb2f1574d47f74bc1781bff51bcc07060.032447228556471435 Ether
Contract Source Code Verified
Contract Name: CompetitionStore
Compiler Version: v0.4.4+commit.4633f3de
Optimization Enabled: Yes
Online Solidity Editor:  Click To View



  Contract Source Code   Find Similiar Contracts
/* Copyright (C) Etherplay <[email protected]> - All Rights Reserved */
pragma solidity 0.4.4;

contract CompetitionStore {
	
/////////////////////////////////////////////////////////////////// DATA /////////////////////////////////////////////////////////////
	
	//player's submission store the info required to verify its accuracy
	struct Submission{
		uint32 score; 
		uint32 durationRoundedDown; // duration in second of the game session
		uint32 version; // version of the game used
		uint64 seed; //seed used
		uint64 submitBlockNumber; // blockNumber at which the submission is processed
		bytes32 proofHash;//sha256 of proof : to save gas, the proof is not saved directly in the contract. Instead its hash is saved. The actual proof will be saved on a server. The player could potentially save it too. 
	}
	
	//player start game parameter
	struct Start{
		uint8 competitionIndex; //competition index (0 or 1) there is only 2 current competition per game, one is active, the other one being the older one which might have pending verification
		uint32 version;  //version of the game that the player score is based on
		uint64 seed; // the seed used for the game session
		uint64 time; // start time , used to check if the player is not taking too long to submit its score
	}
	
	// the values representing each competition
	struct Competition{
		uint8 numPastBlocks;// number of past block allowed, 1 is the minimum since you can only get the hash of a past block. Allow player to start play instantunously
		uint8 houseDivider; // how much the house takes : 4 means house take 1/4 (25%)
		uint16 lag; // define how much extra time is allowed to submit a score (to accomodate block time and delays)
		uint32 verificationWaitTime;// wait time allowed for submission past competition's end time 
		uint32 numPlayers;//current number of player that submited a score
		uint32 version; //the version of the game used for that competition, a hash of the code is published in the log upon changing
		uint32 previousVersion; // previousVersion to allow smooth update upon version change
		uint64 versionChangeBlockNumber; 
		uint64 switchBlockNumber; // the blockNumber at which the competition started
		uint64 endTime;//The time at which the competition is set to finish. No start can happen after that and the competition cannot be aborted before that
		uint88 price;  // the price for that competition, do not change 
		uint128 jackpot; // the current jackpot for that competition, this jackpot is then shared among the developer (in the deposit account for  funding development) and the winners (see houseDivider))
		uint32[] rewardsDistribution; // the length of it define how many winners there is and the distribution of the reward is the value for each index divided by the total
		mapping (address => Submission) submissions;  //only one submission per player per competition
		address[] players; // contain the list of players that submited a score for that competition
	}
		
	struct Game{
		mapping (address => Start) starts; // only 1 start per player, further override the current
		Competition[2] competitions; // 2 competitions only to save gas, overrite each other upon going to next competition
		uint8 currentCompetitionIndex; //can only be 1 or 0 (switch operation : 1 - currentCompetitionIndex)
	}

	mapping (string => Game) games;
	
	address organiser; // admin having control of the reward 
	address depositAccount;	 // is the receiver of the house part of the jackpot (see houseDivider) Can only be changed by the depositAccount.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////// EVENTS /////////////////////////////////////////////////////////////

	//event logging the hash of the game code for a particular version
	event VersionChange(
		string indexed gameID,
		uint32 indexed version,
		bytes32 codeHash // the sha256 of the game code as used by the player
	);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




//////////////////////////////////////////////////////// PLAYERS ACTIONS /////////////////////////////////////////////////////////////
	
	/*
	The seed is computed from the block hash and the sender address
	While the seed can be predicted for few block away (see : numPastBlocks) this is has no much relevance since a game session have a bigger duration,
	Remember this is not gambling game, this is a skill game, seed is only a small part of the game outcome
	*/
	function computeSeed(uint64 blockNumber, address player) internal constant returns(uint64 seed){ 
		return uint64(sha3(block.blockhash(blockNumber),block.blockhash(blockNumber-1),block.blockhash(blockNumber-2),block.blockhash(blockNumber-3),block.blockhash(blockNumber-4),block.blockhash(blockNumber-5),player)); 
	}
	
	/*
		probe the current state of the competition so player can start playing right away (need to commit a tx too to ensure its play will be considered though)
	*/
	function getSeedAndState(string gameID, address player) constant returns(uint64 seed, uint64 blockNumber, uint8 competitionIndex, uint32 version, uint64 endTime, uint88 price, uint32 myBestScore, uint64 competitionBlockNumber, uint64 registeredSeed){
		var game = games[gameID];

		competitionIndex = game.currentCompetitionIndex;
		var competition = game.competitions[competitionIndex];

		blockNumber = uint64(block.number-1);
		seed = computeSeed(blockNumber, player);
		version = competition.version;
		endTime = competition.endTime;
		price = competition.price;
		competitionBlockNumber = competition.switchBlockNumber;
		
		if (competition.submissions[player].submitBlockNumber >= competition.switchBlockNumber){
			myBestScore = competition.submissions[player].score;
		}else{
			myBestScore = 0;
		}
		
		registeredSeed = game.starts[player].seed;
	}
	
	
		
	function start(string gameID, uint64 blockNumber,uint8 competitionIndex, uint32 version) payable {
		var game = games[gameID];
		var competition = game.competitions[competitionIndex];

		if(msg.value != competition.price){
			throw;
		}

		if(
			competition.endTime <= now || //block play when time is up 
			competitionIndex != game.currentCompetitionIndex || //start happen just after a switch // should not be possible since endTime already ensure that a new competition cannot start before the end of the first
			version != competition.version && (version != competition.previousVersion || block.number > competition.versionChangeBlockNumber) || //ensure version is same as current (or previous if versionChangeBlockNumber is recent)
			block.number >= competition.numPastBlocks && block.number - competition.numPastBlocks > blockNumber //ensure start is not too old   
			){
				//if ether was sent, send it back if possible, else throw
				if(msg.value != 0 && !msg.sender.send(msg.value)){
					throw;
				}
				return;
		}
		
		competition.jackpot += uint128(msg.value); //increase the jackpot
		
		//save the start params
		game.starts[msg.sender] = Start({
			seed: computeSeed(blockNumber,msg.sender)
			, time : uint64(now)
			, competitionIndex : competitionIndex
			, version : version
		}); 
	}
		
	function submit(string gameID, uint64 seed, uint32 score, uint32 durationRoundedDown, bytes32 proofHash){ 
		var game = games[gameID];

		var gameStart = game.starts[msg.sender];
			
		//seed should be same, else it means double start and this one executing is from the old one 
		if(gameStart.seed != seed){
			return;
		}
		
		var competition = game.competitions[gameStart.competitionIndex];
		
		// game should not take too long to be submited
		if(now - gameStart.time > durationRoundedDown + competition.lag){ 
			return;
		}

		if(now >= competition.endTime + competition.verificationWaitTime){
			return; //this ensure verifier to get all the score at that time (should never be there though as game should ensure a maximumTime < verificationWaitTime)
		}
		
		var submission = competition.submissions[msg.sender];
		if(submission.submitBlockNumber < competition.switchBlockNumber){
			if(competition.numPlayers >= 4294967295){ //unlikely but if that happen this is for now the best place to stop
				return;
			}
		}else if (score <= submission.score){
			return;
		}
		
		var players = competition.players;
		//if player did not submit score yet => add player to list
		if(submission.submitBlockNumber < competition.switchBlockNumber){
			var currentNumPlayer = competition.numPlayers;
			if(currentNumPlayer >= players.length){
				players.push(msg.sender);
			}else{
				players[currentNumPlayer] = msg.sender;
			}
			competition.numPlayers = currentNumPlayer + 1;
		}
		
		competition.submissions[msg.sender] = Submission({
			proofHash:proofHash,
			seed:gameStart.seed,
			score:score,
			durationRoundedDown:durationRoundedDown,
			submitBlockNumber:uint64(block.number),
			version:gameStart.version
		});
		
	}
	
	/*
		accept donation payment : this increase the jackpot of the currentCompetition of the specified game
	*/
	function increaseJackpot(string gameID) payable{
		var game = games[gameID];
		game.competitions[game.currentCompetitionIndex].jackpot += uint128(msg.value); //extra ether is lost but this is not going to happen :)
	}

//////////////////////////////////////////////////////////////////////////////////////////

	
/////////////////////////////////////// PRIVATE ///////////////////////////////////////////
		
	function CompetitionStore(){
		organiser = msg.sender;
		depositAccount = msg.sender;
	}

	
	//give a starting jackpot by sending ether to the transaction
	function _startNextCompetition(string gameID, uint32 version, uint88 price, uint8 numPastBlocks, uint8 houseDivider, uint16 lag, uint64 duration, uint32 verificationWaitTime, bytes32 codeHash, uint32[] rewardsDistribution) payable{
		if(msg.sender != organiser){
			throw;
		}
		var game = games[gameID];
		var newCompetition = game.competitions[1 - game.currentCompetitionIndex]; 
		var currentCompetition = game.competitions[game.currentCompetitionIndex];
		//do not allow to switch if endTime is not over
		if(currentCompetition.endTime >= now){
			throw;
		}

		//block switch if reward was not called (numPlayers > 0)
		if(newCompetition.numPlayers > 0){
			throw;
		}
		
		if(houseDivider == 0){ 
			throw;
		}
		
		if(numPastBlocks < 1){
			throw;
		}
		
		if(rewardsDistribution.length == 0 || rewardsDistribution.length > 64){ // do not risk gas shortage on reward
			throw;
		}
		//ensure rewardsDistribution give always something and do not give more to a lower scoring player
		uint32 prev = 0;
		for(uint8 i = 0; i < rewardsDistribution.length; i++){
			if(rewardsDistribution[i] == 0 ||  (prev != 0 && rewardsDistribution[i] > prev)){
				throw;
			}
			prev = rewardsDistribution[i];
		}

		if(version != currentCompetition.version){
			VersionChange(gameID,version,codeHash); 
		}
		
		game.currentCompetitionIndex = 1 - game.currentCompetitionIndex;
		
		newCompetition.switchBlockNumber = uint64(block.number);
		newCompetition.previousVersion = 0;
		newCompetition.versionChangeBlockNumber = 0;
		newCompetition.version = version;
		newCompetition.price = price; 
		newCompetition.numPastBlocks = numPastBlocks;
		newCompetition.rewardsDistribution = rewardsDistribution;
		newCompetition.houseDivider = houseDivider;
		newCompetition.lag = lag;
		newCompetition.jackpot += uint128(msg.value); //extra ether is lost but this is not going to happen :)
		newCompetition.endTime = uint64(now) + duration;
		newCompetition.verificationWaitTime = verificationWaitTime;
	}
	
	
	
	function _setBugFixVersion(string gameID, uint32 version, bytes32 codeHash, uint32 numBlockAllowedForPastVersion){
		if(msg.sender != organiser){
			throw;
		}

		var game = games[gameID];
		var competition = game.competitions[game.currentCompetitionIndex];
		
		if(version <= competition.version){ // a bug fix should be a new version (greater than previous version)
			throw;
		}
		
		if(competition.endTime <= now){ // cannot bugFix a competition that already ended
			return;
		}
		
		competition.previousVersion = competition.version;
		competition.versionChangeBlockNumber = uint64(block.number + numBlockAllowedForPastVersion);
		competition.version = version;
		VersionChange(gameID,version,codeHash);
	}

	function _setLagParams(string gameID, uint16 lag, uint8 numPastBlocks){
		if(msg.sender != organiser){
			throw;
		}
		
		if(numPastBlocks < 1){
			throw;
		}

		var game = games[gameID];
		var competition = game.competitions[game.currentCompetitionIndex];
		competition.numPastBlocks = numPastBlocks;
		competition.lag = lag;
	}

	function _rewardWinners(string gameID, uint8 competitionIndex, address[] winners){
		if(msg.sender != organiser){
			throw;
		}
		
		var competition = games[gameID].competitions[competitionIndex];

		//ensure time has passed so that players who started near the end can finish their session 
		//game should be made to ensure termination before verificationWaitTime, it is the game responsability
		if(int(now) - competition.endTime < competition.verificationWaitTime){
			throw;
		}

		
		if( competition.jackpot > 0){ // if there is no jackpot skip

			
			var rewardsDistribution = competition.rewardsDistribution;

			uint8 numWinners = uint8(rewardsDistribution.length);

			if(numWinners > uint8(winners.length)){
				numWinners = uint8(winners.length);
			}

			uint128 forHouse = competition.jackpot;
			if(numWinners > 0 && competition.houseDivider > 1){ //in case there is no winners (no players or only cheaters), the house takes all
				forHouse = forHouse / competition.houseDivider;
				uint128 forWinners = competition.jackpot - forHouse;

				uint64 total = 0;
				for(uint8 i=0; i<numWinners; i++){ // distribute all the winning even if there is not all the winners
					total += rewardsDistribution[i];
				}
				for(uint8 j=0; j<numWinners; j++){
					uint128 value = (forWinners * rewardsDistribution[j]) / total;
					if(!winners[j].send(value)){ // if fail give to house
						forHouse = forHouse + value;
					}
				}
			}
			
			if(!depositAccount.send(forHouse)){
				//in case sending to house failed 
				var nextCompetition = games[gameID].competitions[1 - competitionIndex];
				nextCompetition.jackpot = nextCompetition.jackpot + forHouse;	
			}

			
			competition.jackpot = 0;
		}
		
		
		competition.numPlayers = 0;
	}

	
	/*
		allow to change the depositAccount of the house share, only the depositAccount can change it, depositAccount == organizer at creation
	*/
	function _setDepositAccount(address newDepositAccount){
		if(depositAccount != msg.sender){
			throw;
		}
		depositAccount = newDepositAccount;
	}
	
	/*
		allow to change the organiser, in case this need be 
	*/
	function _setOrganiser(address newOrganiser){
		if(organiser != msg.sender){
			throw;
		}
		organiser = newOrganiser;
	}
	
	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////// OTHER CONSTANT CALLS TO PROBE VALUES ////////////////////////////////////////////////////

	function getPlayerSubmissionFromCompetition(string gameID, uint8 competitionIndex, address playerAddress) constant returns(uint32 score, uint64 seed, uint32 duration, bytes32 proofHash, uint32 version, uint64 submitBlockNumber){
		var submission = games[gameID].competitions[competitionIndex].submissions[playerAddress];
		score = submission.score;
		seed = submission.seed;		
		duration = submission.durationRoundedDown;
		proofHash = submission.proofHash;
		version = submission.version;
		submitBlockNumber =submission.submitBlockNumber;
	}
	
	function getPlayersFromCompetition(string gameID, uint8 competitionIndex) constant returns(address[] playerAddresses, uint32 num){
		var competition = games[gameID].competitions[competitionIndex];
		playerAddresses = competition.players;
		num = competition.numPlayers;
	}

	function getCompetitionValues(string gameID, uint8 competitionIndex) constant returns (
		uint128 jackpot,
		uint88 price,
		uint32 version,
		uint8 numPastBlocks,
		uint64 switchBlockNumber,
		uint32 numPlayers,
		uint32[] rewardsDistribution,
		uint8 houseDivider,
		uint16 lag,
		uint64 endTime,
		uint32 verificationWaitTime,
		uint8 _competitionIndex
	){
		var competition = games[gameID].competitions[competitionIndex];
		jackpot = competition.jackpot;
		price = competition.price;
		version = competition.version;
		numPastBlocks = competition.numPastBlocks;
		switchBlockNumber = competition.switchBlockNumber;
		numPlayers = competition.numPlayers;
		rewardsDistribution = competition.rewardsDistribution;
		houseDivider = competition.houseDivider;
		lag = competition.lag;
		endTime = competition.endTime;
		verificationWaitTime = competition.verificationWaitTime;
		_competitionIndex = competitionIndex;
	}
	
	function getCurrentCompetitionValues(string gameID) constant returns (
		uint128 jackpot,
		uint88 price,
		uint32 version,
		uint8 numPastBlocks,
		uint64 switchBlockNumber,
		uint32 numPlayers,
		uint32[] rewardsDistribution,
		uint8 houseDivider,
		uint16 lag,
		uint64 endTime,
		uint32 verificationWaitTime,
		uint8 _competitionIndex
	)
	{
		return getCompetitionValues(gameID,games[gameID].currentCompetitionIndex);
	}
}

  Contract ABI  
[{"constant":false,"inputs":[{"name":"gameID","type":"string"},{"name":"version","type":"uint32"},{"name":"codeHash","type":"bytes32"},{"name":"numBlockAllowedForPastVersion","type":"uint32"}],"name":"_setBugFixVersion","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newDepositAccount","type":"address"}],"name":"_setDepositAccount","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"gameID","type":"string"},{"name":"lag","type":"uint16"},{"name":"numPastBlocks","type":"uint8"}],"name":"_setLagParams","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"gameID","type":"string"},{"name":"seed","type":"uint64"},{"name":"score","type":"uint32"},{"name":"durationRoundedDown","type":"uint32"},{"name":"proofHash","type":"bytes32"}],"name":"submit","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"gameID","type":"string"},{"name":"competitionIndex","type":"uint8"},{"name":"playerAddress","type":"address"}],"name":"getPlayerSubmissionFromCompetition","outputs":[{"name":"score","type":"uint32"},{"name":"seed","type":"uint64"},{"name":"duration","type":"uint32"},{"name":"proofHash","type":"bytes32"},{"name":"version","type":"uint32"},{"name":"submitBlockNumber","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"gameID","type":"string"}],"name":"increaseJackpot","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"newOrganiser","type":"address"}],"name":"_setOrganiser","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"gameID","type":"string"},{"name":"blockNumber","type":"uint64"},{"name":"competitionIndex","type":"uint8"},{"name":"version","type":"uint32"}],"name":"start","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"gameID","type":"string"},{"name":"version","type":"uint32"},{"name":"price","type":"uint88"},{"name":"numPastBlocks","type":"uint8"},{"name":"houseDivider","type":"uint8"},{"name":"lag","type":"uint16"},{"name":"duration","type":"uint64"},{"name":"verificationWaitTime","type":"uint32"},{"name":"codeHash","type":"bytes32"},{"name":"rewardsDistribution","type":"uint32[]"}],"name":"_startNextCompetition","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[{"name":"gameID","type":"string"},{"name":"player","type":"address"}],"name":"getSeedAndState","outputs":[{"name":"seed","type":"uint64"},{"name":"blockNumber","type":"uint64"},{"name":"competitionIndex","type":"uint8"},{"name":"version","type":"uint32"},{"name":"endTime","type":"uint64"},{"name":"price","type":"uint88"},{"name":"myBestScore","type":"uint32"},{"name":"competitionBlockNumber","type":"uint64"},{"name":"registeredSeed","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"gameID","type":"string"},{"name":"competitionIndex","type":"uint8"}],"name":"getCompetitionValues","outputs":[{"name":"jackpot","type":"uint128"},{"name":"price","type":"uint88"},{"name":"version","type":"uint32"},{"name":"numPastBlocks","type":"uint8"},{"name":"switchBlockNumber","type":"uint64"},{"name":"numPlayers","type":"uint32"},{"name":"rewardsDistribution","type":"uint32[]"},{"name":"houseDivider","type":"uint8"},{"name":"lag","type":"uint16"},{"name":"endTime","type":"uint64"},{"name":"verificationWaitTime","type":"uint32"},{"name":"_competitionIndex","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"gameID","type":"string"},{"name":"competitionIndex","type":"uint8"}],"name":"getPlayersFromCompetition","outputs":[{"name":"playerAddresses","type":"address[]"},{"name":"num","type":"uint32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"gameID","type":"string"}],"name":"getCurrentCompetitionValues","outputs":[{"name":"jackpot","type":"uint128"},{"name":"price","type":"uint88"},{"name":"version","type":"uint32"},{"name":"numPastBlocks","type":"uint8"},{"name":"switchBlockNumber","type":"uint64"},{"name":"numPlayers","type":"uint32"},{"name":"rewardsDistribution","type":"uint32[]"},{"name":"houseDivider","type":"uint8"},{"name":"lag","type":"uint16"},{"name":"endTime","type":"uint64"},{"name":"verificationWaitTime","type":"uint32"},{"name":"_competitionIndex","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"gameID","type":"string"},{"name":"competitionIndex","type":"uint8"},{"name":"winners","type":"address[]"}],"name":"_rewardWinners","outputs":[],"payable":false,"type":"function"},{"inputs":[],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"gameID","type":"string"},{"indexed":true,"name":"version","type":"uint32"},{"indexed":false,"name":"codeHash","type":"bytes32"}],"name":"VersionChange","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052600180546c0100000000000000000000000033810204600160a060020a031991821681179092556002805490911690911790556120c8806100456000396000f3606060405236156100ae5760e060020a600035046304029f2381146100b35780631f9ea25d1461012b578063263c0a8d1461015357806349593f53146101c8578063569aa0d8146102d257806359a4669f14610404578063656104f5146104f357806370de8c6e1461051b57806371bde852146105fb5780638d909ad9146106c55780638f30435d146107b0578063916dbc1714610807578063c91540f614610940578063fedc2a2814610c15575b610002565b3461000257610cec6004808035906020019082018035906020019191908080601f01602080910402602001604051908101604052809392919081815260200183838082843750949650509335935050604435915050606435600154600090819033600160a060020a03908116911614610ff957610002565b3461000257610cec600435600254600160a060020a039081163391909116146110a857610002565b3461000257610cec6004808035906020019082018035906020019191908080601f01602080910402602001604051908101604052809392919081815260200183838082843750949650509335935050604435915050600154600090819033600160a060020a039081169116146110c757610002565b3461000257610cec6004808035906020019082018035906020019191908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965050933593505060443591505060643560843560006000600060006000600060006000508b604051808280519060200190808383829060006004602084601f0104600302600f01f1509050019150509081526020016040518091039020600050955085600001600050600033600160a060020a0316815260200190815260200160002060005094508967ffffffffffffffff168560000160059054906101000a900467ffffffffffffffff1667ffffffffffffffff1614151561131a5761130d565b3461000257610cee6004808035906020019082018035906020019191908080601f01602080910402602001604051908101604052809392919081815260200183838082843750949650509335935050604435915050600060006000600060006000600060006000508a604051808280519060200190808383829060006004602084601f0104600302600f01f15090500191505090815260200160405180910390206000506001016000508960ff1660028110156100025760060201600050600160a060020a0389166000908152600491909101602052604090208054600182015463ffffffff8083169a5067ffffffffffffffff606060020a840481169a50640100000000840482169950919750604060020a830416955060a060020a90910416925090505093975093979195509350565b610cec6004808035906020019082018035906020019191908080601f016020809104026020016040519081016040528093929190818152602001838380828437509496505050505050506000600060005082604051808280519060200190808383829060006004602084601f0104600302600f01f15090500191505090815260200160405180910390206000509050348160010160005082600d0160009054906101000a900460ff1660ff16600281101561000257600602016000506002018054608060020a6001608060020a0382169093018302929092046001608060020a03199092169190911790555050565b3461000257610cec600435600154600160a060020a039081163391909116146114cf57610002565b610cec6004808035906020019082018035906020019191908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965050933593505060443591505060643560006000600060005086604051808280519060200190808383829060006004602084601f0104600302600f01f15090500191505090815260200160405180910390206000509150816001016000508460ff16600281101561000257600602016000506001810154909150346affffffffffffffffffffff608060020a90920491909116146114ee57610002565b610cec6004808035906020019082018035906020019191908080601f01602080910402602001604051908101604052809392919081815260200183838082843750506040805161012435808a013560208181028481018201909552818452989a8a359a6044359a6064359a50608435995060a435985060c435975060e4359661010435969395610144959301929182919085019084908082843750949650505050505050600154600090819081908190819033600160a060020a0390811691161461176057610002565b3461000257610d386004808035906020019082018035906020019191908080601f0160208091040260200160405190810160405280939291908181526020018383808284375094965050933593505050506000600060006000600060006000600060006000600060006000508d604051808280519060200190808383829060006004602084601f0104600302600f01f1509050019150509081526020016040518091039020600050915081600d0160009054906101000a900460ff1698508850816001016000508960ff1660028110156100025743600019019b50600602019050611c7c8a8d611620565b3461000257610daa6004808035906020019082018035906020019191908080601f016020809104026020016040519081016040528093929190818152602001838380828437509496505093359350610a1092505050565b3461000257610e8a6004808035906020019082018035906020019191908080601f016020809104026020016040519081016040528093929190818152602001838380828437509496505093359350505050602060405190810160405280600081526020015060006000600060005085604051808280519060200190808383829060006004602084601f0104600302600f01f15090500191505090815260200160405180910390206000506001016000508460ff16600281101561000257600602016000506005810180546040805160208084028201810190925282815293945083018282801561092057602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610902575b505093549298604060020a90930463ffffffff1697509195505050505050565b3461000257610daa6004808035906020019082018035906020019191908080601f01602080910402602001604051908101604052809392919081815260200183838082843750949650505050505050600060006000600060006000602060405190810160405280600081526020015060006000600060006000611d5c8d60006000508f604051808280519060200190808383829060006004602084601f0104600302600f01f1509050019150509081526020016040518091039020600050600d0160009054906101000a900460ff165b600060006000600060006000602060405190810160405280600081526020015060006000600060006000600060006000508f604051808280519060200190808383829060006004602084601f0104600302600f01f15090500191505090815260200160405180910390206000506001016000508e60ff166002811015610002576006020160005090508060020160009054906101000a90046001608060020a03169c508c508060010160109054906101000a90046affffffffffffffffffffff169b508b5080600001600c9054906101000a900463ffffffff169a508a508060000160009054906101000a900460ff16995089508060010160009054906101000a900467ffffffffffffffff16985088508060000160089054906101000a900463ffffffff169750875080600301600050805480602002602001604051908101604052809291908181526020018280548015610bb157602002820191906000526020600020906000905b82829054906101000a900463ffffffff1681526020019060040190602082600301049283019260010382029150808411610b7a5790505b505084546001860154949b5060ff6101008204169a5061ffff62010000820416995067ffffffffffffffff604060020a9095049490941697505063ffffffff6401000000009093049290921694508f93505050509295989b509295989b509295989b565b3461000257610cec6004808035906020019082018035906020019191908080601f016020809104026020016040519081016040528093929190818152602001838380828437505060408051604435808a013560208181028481018201909552818452989a8a359a9099606499509397509190910194509250829190850190849080828437509496505050505050506000600060006000600060006000600060006000600160009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a0316141515611d8357610002565b005b6040805163ffffffff978816815267ffffffffffffffff9687166020820152948716858201526060850193909352941660808301529290911660a082015290519081900360c00190f35b6040805167ffffffffffffffff9a8b168152988a1660208a015260ff9097168888015263ffffffff958616606089015293881660808801526affffffffffffffffffffff90921660a087015290921660c085015290841660e08401529092166101008201529051908190036101200190f35b604051808d6001608060020a031681526020018c6affffffffffffffffffffff1681526020018b63ffffffff1681526020018a60ff1681526020018967ffffffffffffffff1681526020018863ffffffff168152602001806020018760ff1681526020018661ffff1681526020018567ffffffffffffffff1681526020018463ffffffff1681526020018360ff1681526020018281038252888181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019d505050505050505050505050505060405180910390f35b60405180806020018363ffffffff1681526020018281038252848181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001935050505060405180910390f35b805473ffffffff00000000000000000000000000000000198116608060020a60e060020a606060020a9384900463ffffffff908116820282900492909202929092177bffffffffffffffff0000000000000000000000000000000000000000191660a060020a60c060020a888416430181020402176fffffffff000000000000000000000000191688830292909204929092021782556040518751918716918891908190602080850191908190849082908590600090600490601f850104600302600f01f15090500191505060405180910390207fa2f4a4124ab7224b7753e37c4d34f853613a576f8e812e4f6186a6f1e80d014786604051808260001916815260200191505060405180910390a35b505050505050565b600060005086604051808280519060200190808383829060006004602084601f0104600302600f01f150905001915050908152602001604051809103902060005091508160010160005082600d0160009054906101000a900460ff1660ff16600281101561000257600602018054909150606060020a900463ffffffff9081169086161161108657610002565b600181015442604060020a90910467ffffffffffffffff1611610ee157610ff1565b60028054606060020a80840204600160a060020a031990911617905550565b60018360ff1610156110d857610002565b600060005085604051808280519060200190808383829060006004602084601f0104600302600f01f150905001915050908152602001604051809103902060005091508160010160005082600d0160009054906101000a900460ff1660ff1660028110156100025760060201600050805460f060020a80870204620100000263ffff00001960f860020a8088020460ff19909316929092179190911617815590505050505050565b33828263ffffffff1681548110156100025760009182526020909120018054600160a060020a031916606060020a928302929092049190911790555b83546bffffffff00000000000000001916604060020a60e060020a60018401810204021784555b6040805160c0810182528a815260208082018b81528854610100810463ffffffff168486019081526501000000000090910467ffffffffffffffff1660608501908152436080860190815260a086018e815233600160a060020a0316600090815260048d019096529690942094518554935192519151945163ffffffff1990941660e060020a9182028290041767ffffffff00000000191664010000000093820282900493909302929092176bffffffff00000000000000001916604060020a91830292909204021773ffffffffffffffff0000000000000000000000001916606060020a60c060020a93840284900402177bffffffffffffffff0000000000000000000000000000000000000000191660a060020a918302929092040217815590516001909101555b5050505050505050505050565b8454600187019060ff16600281101561000257600602018054865491955062010000900461ffff16890163ffffffff166d010000000000000000000000000090910467ffffffffffffffff16420311156113735761130d565b8354600185015464010000000090910463ffffffff16604060020a90910467ffffffffffffffff908116919091011642106113ad5761130d565b600160a060020a033316600090815260048501602052604090206001850154815491945067ffffffffffffffff90811660a060020a90920416101561140757835463ffffffff604060020a90910481161061141e5761130d565b825463ffffffff908116908a161161141e5761130d565b6001840154835460058601935067ffffffffffffffff91821660a060020a90910490911610156111e3575082548154604060020a90910463ffffffff169081106111805781805480600101828181548183558181151161149f5760008381526020902061149f9181019083015b808211156114cb576000815560010161148b565b5050506000928352506020909120018054600160a060020a031916606060020a338102041790556111bc565b5090565b60018054606060020a80840204600160a060020a031990911617905550565b600181015442604060020a90910467ffffffffffffffff1611158061151d5750600d82015460ff858116911614155b806115705750805463ffffffff848116606060020a90920416148015906115705750805463ffffffff848116608060020a909204161415806115705750805460a060020a900467ffffffffffffffff1643115b8061159b5750805460ff16431080159061159b5750805467ffffffffffffffff861660ff9091164303115b156115da5734158015906115d05750604051600160a060020a033316903480156108fc02916000818181858888f19350505050155b1561169857610002565b600281018054608060020a6001608060020a03821634018102046001608060020a0319909116179055604080516080810182528581526020810185905290810161169d87335b6040805167ffffffffffffffff8085164082526000198501811640602083015260011985018116408284015260021985018116406060830152600319850181164060808301526004198501164060a0820152606060020a600160a060020a0384160260c082015290519081900360d401902092915050565b610ff1565b81524260209182015233600160a060020a0316600090815293815260409384902082518154928401519584015160609094015160ff1990931660f860020a918202919091041764ffffffff00191661010060e060020a9687029690960495909502949094176cffffffffffffffff000000000019166501000000000060c060020a938402849004021774ffffffffffffffff0000000000000000000000000019166d01000000000000000000000000009183029290920402179091555050505050565b60006000508f604051808280519060200190808383829060006004602084601f0104600302600f01f150905001915050908152602001604051809103902060005094508460010160005085600d0160009054906101000a900460ff1660010360ff1660028110156100025760060201600050600d860154909450600186019060ff166002811015610002576006020160005060018101549093504267ffffffffffffffff604060020a909204919091161061181a57610002565b83546000604060020a90910463ffffffff16111561183757610002565b60ff8b16151561184657610002565b60018c60ff16101561185757610002565b85511580611866575060408651115b1561187057610002565b5060009050805b85518160ff1610156118eb57858160ff168151811015610002579060200190602002015163ffffffff16600014806118e1575063ffffffff8216158015906118e157508163ffffffff16868260ff168151811015610002579060200190602002015163ffffffff16115b15611b3457610002565b825463ffffffff8f8116606060020a9092041614611979578d63ffffffff168f604051808280519060200190808383829060006004602084601f0104600302600f01f15090500191505060405180910390207fa2f4a4124ab7224b7753e37c4d34f853613a576f8e812e4f6186a6f1e80d014789604051808260001916815260200191505060405180910390a35b84600d0160009054906101000a900460ff1660010385600d0160006101000a81548160ff021916908360f860020a908102040217905550438460010160006101000a81548167ffffffffffffffff021916908360c060020a90810204021790555060008460000160106101000a81548163ffffffff021916908360e060020a90810204021790555060008460000160146101000a81548167ffffffffffffffff021916908360c060020a9081020402179055508d84600001600c6101000a81548163ffffffff021916908360e060020a9081020402179055508c8460010160106101000a8154816affffffffffffffffffffff021916908375010000000000000000000000000000000000000000009081020402179055508b8460000160006101000a81548160ff021916908360f860020a9081020402179055508584600301600050908051906020019082805482825590600052602060002090600701600890048101928215611b585791602002820160005b83821115611b7b57835183826101000a81548163ffffffff021916908360e060020a9081020402179055509260200192600401602081600301049283019260010302611aed565b858160ff16815181101561000257602090810290910101519150600101611877565b505b50611bab9291505b808211156114cb57805463ffffffff19168155600101611b60565b8015611b565782816101000a81549063ffffffff0219169055600401602081600301049283019260010302611b7b565b50508354600285018054608060020a6001608060020a03821634018102046001608060020a031990911617905560018501805460c060020a42909c018c029b909b04604060020a026fffffffffffffffff000000000000000019909b169a909a1790995550505060e060020a948502949094046401000000000267ffffffff000000001960f060020a97880297909704620100000263ffff00001960f860020a998a02999099046101000261ff00199097169690961797909716949094179490941694909417905550505050505050565b81546001830154600160a060020a038f166000908152600485016020526040902054929d50606060020a90910463ffffffff169950604060020a810467ffffffffffffffff9081169950608060020a82046affffffffffffffffffffff169850908116955060a060020a90910416849010611d1957600160a060020a038c16600090815260048201602052604090205463ffffffff169450611d1e565b600094505b600160a060020a038c1660009081526020839052604090205467ffffffffffffffff6501000000000090910416925050509295985092959850929598565b9b509b509b509b509b509b509b509b509b509b509b509b5091939597999b5091939597999b565b60006000508d604051808280519060200190808383829060006004602084601f0104600302600f01f15090500191505090815260200160405180910390206000506001016000508c60ff166002811015610002576006020180546001820154919b50640100000000900463ffffffff16604060020a90910467ffffffffffffffff1642031215611e1257610002565b60028a015460006001608060020a039091161115611fde5760038a0180548c51919a50985060ff9081169089161115611e4a578a5197505b60028a01546001608060020a03169650600060ff8916118015611e7757508954600161010090910460ff16115b15611f0a578954610100900460ff166001608060020a03881681156100025760028c015491900497506001608060020a03168790039550600094508493505b8760ff168460ff16101561200057888460ff168154811015610002579060005260206000209060089182820401919006600402905463ffffffff6101009290920a9004169490940193600190930192611eb6565b600254604051600160a060020a03909116906001608060020a03891680156108fc02916000818181858888f193505050501515611fcb5760006000508d604051808280519060200190808383829060006004602084601f0104600302600f01f15090500191505090815260200160405180910390206000506001016000508c60010360ff1660028110156100025760060201600050600281018054608060020a6001608060020a0382168b018102046001608060020a031990911617905590505b60028a0180546001608060020a03191690555b89546bffffffff000000000000000019168a5550505050505050505050505050565b600092505b8760ff168360ff161015611f0a578467ffffffffffffffff16898460ff1681548110156100025790600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff1687026001608060020a03168115610002570491508a8360ff1681518110156100025760209081029091010151604051600160a060020a03909116906001608060020a03841680156108fc02916000818181858888f1935050505015156120bd57958101955b60019092019161200556
View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward