Commit-reveal lottery prototype by the EarlyLottery developer. buyTicket(bytes32) takes a hash commitment. submitSecret reveals the secret. payout() sends to wi
Key Facts
Source Verified
963 bytes. Source reconstructed: commit-reveal lottery by same developer as EarlyLottery (0x7af6af3d). 5 functions: submitSecret(bytes32), random(), payout(), payoutReady(), buyTicket(bytes32). Correct size match and all selectors confirmed with v0.1.5 optimizer ON. 935 diffs in optimizer layout -- exact compiler snapshot not found. 0.300 ETH remains locked since Aug 8 2015.
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Frontier Era
The initial release of Ethereum. A bare-bones implementation for technical users.
Bytecode Overview
Verified Source Available
Source verified through compiler archaeology (near-exact bytecode match).
View Verification ProofShow source code (Solidity)
contract Lottery {
uint startBlock;
uint numParticipants;
address[] participants;
uint64[] secrets;
mapping (address => bytes32) hashes;
mapping (address => uint) amounts;
function Lottery() { startBlock = block.number; }
function submitSecret(uint64 secret) {
if (!(block.number % 88 < 0x44 && block.number % 88 >= 0x30)) return;
if (sha3(bytes8(secret)) != hashes[msg.sender]) return;
participants.length++;
participants[participants.length - 1] = msg.sender;
secrets.length++;
secrets[secrets.length - 1] = secret;
}
function random() returns (uint64 r) {
for (uint i = 0; i < secrets.length; i++) {
r ^= secrets[i];
}
}
function payout() {
if (!payoutReady()) return;
uint winner = random() % participants.length;
participants[winner].call.value(this.balance - tx.gasprice * 25000)();
startBlock = block.number;
participants.length = 0;
secrets.length = 0;
numParticipants = 0;
}
function payoutReady() returns (bool) {
return block.number % 88 > 0x44 && block.number - startBlock > 0x44;
}
function buyTicket(bytes32 hash) {
if (block.number % 88 >= 0x28) return;
hashes[msg.sender] = hash;
amounts[msg.sender] += msg.value;
numParticipants++;
}
}External Links
Related contracts
Lottery
Same deployerCommit-reveal lottery prototype by the EarlyLottery developer. buyTicket(bytes32) takes a hash commitment. submitSecret reveals the secret. payout() sends to wi
0xf6bf0e...ec3b5cAugust 8, 2015Sha3
Same deployerA tiny utility contract that returns the SHA3 hash of a uint256 input.
0xb179a8...4bf09dAugust 9, 2015Sha3
Same deployerA tiny utility contract that returns the SHA3 hash of a uint256 input.
0x82000e...b0690aAugust 9, 2015Sha3
Same deployerA tiny utility contract that returns the SHA3 hash of a uint256 input.
0x627a6e...25bce8August 9, 2015LotteryPrototype
Same deployerThe first lottery contract deployed on Ethereum mainnet, created August 9, 2015 by one of the earliest recorded Ethereum users. Built, tested with two participa
0xcdd192...1b622cAugust 9, 2015EarlyLottery
Same deployerAn early Ethereum lottery contract, deployed August 9, 2015 by one of the network's earliest users as an iteration on a prototype deployed 42 minutes earlier. R
0x7af6af...fbb992August 9, 2015