Contract Overview | etherplay.io
ETH Balance: 0.226666666 Ether ($2.40)
Mined:  0
No Of Transactions: 6229 txns + 606 internalTxns
  Latest 25 txns from a total Of 6229 transactions View All

TxHash Block Age From To Value [TxFee]
0xcd71afc6c6a75fbf8b10c76a6e064f369780663724174ea0651a4fc65237c60f305663429 mins ago0x8dec6c435968cdfbce085c5828208826dcd1577f  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00055142
0x8e6d6671501f02978db1a588b1c7154a6450de7201deaa8a36e30ff76bb50bdb305658240 mins ago0x8dec6c435968cdfbce085c5828208826dcd1577f  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00074216
0x664008005fa7bd827671842cf5f7606ae6b5c8f311a3a71d736125c74c77c863305656547 mins ago0x55a4f78dd4a5575edeadbb69049b5fd3bcf69ba6  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.0010352
0xe293b4602a4c07135e0391d608ec2fea6e8e41c52fccacf2a856f99894eca650305654651 mins ago0x55a4f78dd4a5575edeadbb69049b5fd3bcf69ba6  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00074216
0xe038fbba672438cfc8df08400618332e98944ff09cb77a8ac7e7cbd29696f18230564171 hr 27 mins ago0x59f2095903ca562aae34405998a9c1b442a6efd5  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00083438
0xf8705ed6e6bf42e967abecc5194cb06f796972b43c98f47bece3a867051bee4930564101 hr 30 mins ago0x59f2095903ca562aae34405998a9c1b442a6efd5  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0x9744d6784ee612d30ebaece54bebe46502d3a4bcbac4ccbc4b2cdace51e3ccb130564051 hr 31 mins ago0x59f2095903ca562aae34405998a9c1b442a6efd5  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00106722
0x0aafa40058b7743ec83ffe3736a00e215eb4f0f14aa2e4c998bac748222f24f130564011 hr 32 mins ago0x59f2095903ca562aae34405998a9c1b442a6efd5  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0x5689dcc1acd700a22d934ac49c426ad5f868df7f9c4e9d47c333b0ad163564cb30563951 hr 33 mins ago0xd63b87fa46652a28cb3ffcbc56f7721fc60943ad  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00166722
0x75c677fdb5b5474dedc83cf474dbd8b05af3bf32f6839a82cffcffdded93fe5c30563861 hr 35 mins ago0xd63b87fa46652a28cb3ffcbc56f7721fc60943ad  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0xc4b4146ba656db479f7c95b646723abadf4f144610a633a5e2853fbe7e4e943930562062 hrs 17 mins ago0xfe4312550625263f70e8dc16ef07ba2f7143f06f  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00106722
0xdecf1c732b789614b3b98fd2bb073237bf0b0c67aef745ec246f140218f080e330561822 hrs 22 mins ago0xfe4312550625263f70e8dc16ef07ba2f7143f06f  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0x5a6d13053767f94ed3e43db600f7057c04dba0978efadb96f329758503c6d7ad30559973 hrs 2 mins ago0xac75b73394c329376c214663d92156afa864a77f  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.0005672
0x5c67db2e72500d01bdf766c497e4ecae62ad0bb2af8c57152eb2aaf42231cfd630559753 hrs 8 mins ago0xac75b73394c329376c214663d92156afa864a77f  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.00076512
0x970f412d90766edd17fb5ad2948623cbe47735c6d15b300bfdff1df8e56dbcca30559593 hrs 10 mins ago0x0718197b9ac69127381ed0c4b5d0f724f857c4d1  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.13333333 Ether0.01203052
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x0718197b9ac69127381ed0c4b5d0f724f857c4d1  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.01774352
0xdcb60a8c0916cfad9c60f315078c9f78680ad8e5f75ea99e0154ee8e42b7599a30553895 hrs 24 mins ago0x3ca9f66b736c8415b61a08aae0df719eac3cbe91  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.0007664
0x00755955047f471f90bfd785c021d72c3f3322515289a0d1d7a6f472a4f9aaf130553795 hrs 26 mins ago0x1e1cf8e7f81aa45ff8e51de7adbb29f5a1d0965a  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00083438
0x2b726125221685a0e8b5ee72c00ef966d18b4cb73cd00d03bec98ccd0d34af0d30553435 hrs 35 mins ago0x1e1cf8e7f81aa45ff8e51de7adbb29f5a1d0965a  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.0007664
0x76767e6bbc4df99fde84522c9dfadd347823c892f88f863a2cda712e70b38e9830553395 hrs 36 mins ago0x1e1cf8e7f81aa45ff8e51de7adbb29f5a1d0965a  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.0007664
0x1c727ca4dbc54f1d91d6df019dafb239c45a2de1f443c09811fd5f876771dbfc30553395 hrs 36 mins ago0x1e1cf8e7f81aa45ff8e51de7adbb29f5a1d0965a  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00083566
0x1ec5dbd9dde03857ba0dcfde7ad41a408e77cfc1285b595efcb2c3dd13ae602830553035 hrs 43 mins ago0x1e1cf8e7f81aa45ff8e51de7adbb29f5a1d0965a  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.0007664
0x4ef4b8695ebded56e437858b3f6b8874b4ac84a919893cf9aabb269f5b6ccd1430553035 hrs 43 mins ago0x1e1cf8e7f81aa45ff8e51de7adbb29f5a1d0965a  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00083566
0x80cc0309225e26c768bd6a37db3375c5aedabe0d40dbd3b2f3316f756b00015330552755 hrs 48 mins ago0x1e1cf8e7f81aa45ff8e51de7adbb29f5a1d0965a  IN   0x5f742383b6d1298980030d6af943b76cdd9021430.01333333 Ether0.0007664
0xa56c70409b2240f8a01dd927227bfb8f1c88f517d46e4d794fa6c3571cc3d16730551116 hrs 22 mins ago0x151ef3d2adb56b574fc62fac88fc98be05dc659a  IN   0x5f742383b6d1298980030d6af943b76cdd9021430 Ether0.00106722
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns from a total of 606 View All
ParentTxHash Block Age From To Value
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x6fd6ec0f08d10a4cdf77264bdd99778975fd09c32.44000000000000012 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x13cc003ed1582e333833435709aa4046e45809291.22000000000000006 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430xfe4312550625263f70e8dc16ef07ba2f7143f06f0.731984310699588513 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x1e1cf8e7f81aa45ff8e51de7adbb29f5a1d0965a0.487996077674897143 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430xebaa9e95d270a8faa63f104068ef7d3f3d14b3950.348557420267489729 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x3fb74c04631df17effbf7cd5e29cb6cbda2960890.261422968106995897 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430xb598b82999454172310a0cd553ae0a3a922a3e910.203333333333333343 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430xcb056334c50c72b62efddfdfed89e92021ef6b580.162658822016460913 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x3f8ffa33329bd25033bf4a5e4814f18e802229df0.133084490740740747 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x90241b4fa6bd1770f54e5bf826608493306969aa0.110903742283950622 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x649a433deb579a13a471d502ab1d5d01a12ab83b0.093841628086419757 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x3ca9f66b736c8415b61a08aae0df719eac3cbe910.080427276234567905 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x44599829bb2f1574d47f74bc1781bff51bcc07060.069719328703703707 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x9dcca525ca2dfaa7fbc9104b7c99f217e66726380.060992155349794241 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430xc114f48b3f9828e68bf253f0b9cfb713fc54eb440.044439943415637862 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x8604190b0925eb27c21528f2fba85921ecab98440.018238811728395062 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430xf42e0238f35ba34138b2f4d2b09af3c929aef56b0.018219200102880659 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x97b31391c36b709dec8576ac4bf36a35a75628420.018199588477366256 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430xa8dfdac0e1c356bd27517af6ee17b12706caadd00.018179976851851852 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x00d6f537d004c96f85b031884cc098fd5230db600.018160365226337449 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x40b7ee5ec141e4dcc15082c2027d7a4aed4f22490.018140753600823046 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430xc6af79355d76da979112e409480357089696e34a0.018121141975308642 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430xd5f73266a115b21c251dad00bbefe7f4617cd5c10.018101530349794239 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x11526347726a9388aa0f3ca0ef10be2f832aa2730.018081918724279836 Ether
0x41b0b119fca24e86bea3f712b774ae06e69fd8903f8bd99e0ab55186fb60b07f30559543 hrs 12 mins ago0x5f742383b6d1298980030d6af943b76cdd9021430x74760792925879d65671005f0ab18c99fd3dcdf20.018062307098765432 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