Back to Home

TheLuckyOne

Unknown
0x2adfc2febf51...c099fdd22f20
FrontierContract #1,673Exact Bytecode MatchEdit this contract
Deployed September 30, 2015 (10 years ago)Block 310,456

On-chain lottery from October 2015. Players buy tickets (1-25+ ETH with bulk discounts) in rounds of 1,000. Winners selected via combined server seed, client en

Frontier EraVerified Source

Historical Significance

TheLuckyOne represents one of the earliest attempts at a provably fair lottery on Ethereum, deployed less than 3 months after mainnet launch. Its commit-reveal entropy scheme and player-recovery timeout were sophisticated anti-fraud features for the era. The source code was reconstructed through compiler archaeology using soljson v0.1.3, with all executable logic verified byte-for-byte against on-chain bytecode.

Context

In late September and early October 2015, Ethereum was still in its Frontier phase, barely two months old. The community was actively experimenting with on-chain gambling, lotteries, and Ponzi-style contracts. TheLuckyOne was part of a wave of lottery contracts that tried to solve the fundamental problem of generating fair randomness on a deterministic blockchain, using commit-reveal schemes that would later become a standard pattern in DeFi and NFT minting.

Key Facts
Deployment Block
310,456
Deployment Date
Sep 30, 2015, 03:14 AM
Code Size
3.0 KB
Gas at Deploy
845,041
Transactions by Year
201514
20171
20183
20191
20221
20235

Description

TheLuckyOne was a lottery contract deployed on October 1, 2015 (block 310,456). Players purchased tickets by sending 1 ETH each, with tiered pricing for bulk purchases. After 1,000 tickets were sold per round, the winner was determined using a three-source entropy scheme: a pre-committed server seed (commit-reveal), a rolling client seed built from SHA3 hashing every ticket purchase, and a future block hash.

The contract included an important player protection mechanism: if the server operator failed to reveal the winning seed within 24 hours (the TIMEOUT constant), any player could call recoverLostFunds() to return ETH to all ticket holders. This addressed a common criticism of early on-chain lottery designs where operators could simply abandon the game after seeing an unfavorable outcome.

The contract also featured adminWithdraw() for the operator to claim excess funds while keeping enough to cover pending payouts, and a public sha3clone() helper that allowed anyone to independently verify seed hashes.

The contract currently holds 56.83 ETH, suggesting the final round never completed and the timeout recovery mechanism was never triggered by players.

Source Verified

SolidityExact bytecode match(3,065 bytes)
Compiler: soljson

Exact byte-for-byte match achieved via getter subroutine reorder proof. Source compiled with soljson v0.1.3+commit.028f561d produces identical bytecode when getter subroutines are rearranged to match native-build ordering. All 14 getter bodies are byte-identical, only their position in the bytecode differs due to C++ memory allocator differences between Emscripten and native builds.

Heuristic Analysis

The following characteristics were detected through bytecode analysis and may not be accurate.

Detected Type: Unknown

Bytecode Overview

Opcodes3,065
Unique Opcodes189
Jump Instructions124
Storage Operations67

External Links