Artifacts
DISCLAIMER // NFA // DYOR
This analysis is based on observations of the contract behavior. We are not smart contract security experts. This document aims to explain what the contract appears to do based on the code. It should not be considered a comprehensive security audit or financial advice. Always verify critical information independently and consult with blockchain security professionals for important decisions.
⊙ generated by robots | curated by humans
| METADATA | |
|---|---|
| Contract Address | 0xfD2487cc0e5dCe97F08BE1Bc8eF1DCE8D5988B4D (etherscan) |
| Network | Ethereum Mainnet |
| Analysis Date | 2026-02-13 |
Runtime Bytecode
The deployed contract bytecode fetched from the blockchain.
Source: Etherscan - Contract Code
Command:
Artifact:
0x6060604052361561006c5760e060020a600035046313af4035811461007757806335c1d349146100ac5780638da5cb5b146100f85780639003adfe1461010a578063a60f358814610113578063b69ef8a81461011c578063c879657214610125578063e97dcb621461014f575b61018c61014d610153565b61018c600435600454600160a060020a03908116339190911614156100a95760048054600160a060020a031916821790555b50565b61018e600435600080548290811015610002575080526002026000805160206104368339815191528101546000805160206104168339815191529190910154600160a060020a03169082565b6101b4600454600160a060020a031681565b6101d160025481565b6101d160015481565b6101d160035481565b61018c600454600160a060020a039081163391909116141561014d57600254600014156103eb575b565b61018c5b60006000670de0b6b3a76400003410156101e357604051600160a060020a033316908290349082818181858883f19350505050506103e7565b005b6040518083600160a060020a031681526020018281526020019250505060405180910390f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b6000805460018101808355909350908184801582901161024657828052610246906002908102600080516020610416833981519152908101918402015b808211156102cc578054600160a060020a03191681556000600191909101908155610220565b5050505033600060005083815481101561000257818052600202600080516020610416833981519152018054600160a060020a0319169092179091558054349190849081101561000257600202600080516020610436833981519152019190915582146102d05760028054600a34908104919091019091556003805490910190556102d9565b5090565b60028054340190555b60015460008054909190811015610002579080526002908102600080516020610436833981519152015460035491029011156103e75760015460008054600a92908110156100025781546001546002929092026000805160206104368339815191520154939093049281101561000257815460015460029283026000805160206104368339815191520154949094039091029350909190811015610002576040516002919091026000805160206104168339815191520154600160a060020a03169190839082818181858883f1505081546001549293508210159050610002579080526002908102600080516020610436833981519152015460038054919092029003905560018054810190555b5050565b600454600254604051600160a060020a0392909216916000919082818181858883f15050506002555056290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564
Size: 1,096 bytes (0x448)
Note: This bytecode was compiled with Solidity v0.2.0-2016-01-15-cc4b4f5 with optimization enabled (200 runs).
Creation Bytecode
The full bytecode used to deploy the contract, including constructor code and arguments.
Source: Etherscan - Creation TX
Note: Creation bytecode includes the constructor logic which sets the initial owner to msg.sender (the deployer).
Deployment Transaction Details:
- Block: 1,143,960
- Timestamp: 2016-03-13 14:40:17 UTC
- Deployer: 0x45ab6108cc41c20f416a98615aa8c349f02a275b
- Gas Used: 342,467
- Gas Price: 30 Gwei
- TX Fee: 0.010274010 ETH
Verified Source Code
Solidity source code verified on Etherscan with "Exact Match" status.
Source: Etherscan Verified Contract
Compiler: Solidity v0.2.0-2016-01-15-cc4b4f5
Optimization: Enabled (200 runs)
Verification Date: 2016-03-30
Artifact:
/*
*Submitted for verification at Etherscan.io on 2016-03-30
*/
contract Doubler {
struct Participant {
address etherAddress;
uint amount;
}
Participant[] public participants;
uint public payoutIdx = 0;
uint public collectedFees;
uint public balance = 0;
address public owner;
// simple single-sig function modifier
modifier onlyowner { if (msg.sender == owner) _ }
// this function is executed at initialization and sets the owner of the contract
function Doubler() {
owner = msg.sender;
}
// fallback function - simple transactions trigger this
function() {
enter();
}
function enter() {
if (msg.value < 1 ether) {
msg.sender.send(msg.value);
return;
}
// add a new participant to array
uint idx = participants.length;
participants.length += 1;
participants[idx].etherAddress = msg.sender;
participants[idx].amount = msg.value;
// collect fees and update contract balance
if (idx != 0) {
collectedFees += msg.value / 10;
balance += msg.value;
}
else {
// first participant has no one above him,
// so it goes all to fees
collectedFees += msg.value;
}
// if there are enough ether on the balance we can pay out to an earlier participant
if (balance > participants[payoutIdx].amount * 2) {
uint transactionAmount = 2 * (participants[payoutIdx].amount - participants[payoutIdx].amount / 10);
participants[payoutIdx].etherAddress.send(transactionAmount);
balance -= participants[payoutIdx].amount * 2;
payoutIdx += 1;
}
}
function collectFees() onlyowner {
if (collectedFees == 0) return;
owner.send(collectedFees);
collectedFees = 0;
}
function setOwner(address _owner) onlyowner {
owner = _owner;
}
}
Lines of Code: 70
Functions: 5 (Doubler, fallback, enter, collectFees, setOwner)
Modifiers: 1 (onlyowner)
Structs: 1 (Participant)
Storage Snapshot
Current state of contract storage as of 2026-02-13.
Source: On-chain storage queries via cast storage
Artifact:
Slot 0: participants.length
Hex: 0x0000000000000000000000000000000000000000000000000000000000000141
Decimal: 321
Meaning: 321 total participants have joined the queue
Slot 1: payoutIdx
Hex: 0x0000000000000000000000000000000000000000000000000000000000000076
Decimal: 118
Meaning: Participant at index 118 is next to be paid
Slot 2: collectedFees
Hex: 0x0000000000000000000000000000000000000000000000000000000000000000
Decimal: 0
Meaning: All fees have been withdrawn by owner
Slot 3: balance (internal variable)
Hex: 0x00000000000000000000000000000000000000000000000182a8a4884a804000
Decimal: 27444740000000000000
Ether: 27.444740 ETH
Meaning: Internal balance tracker (desynced from actual balance)
Slot 4: owner
Hex: 0x00000000000000000000000045ab6108cc41c20f416a98615aa8c349f02a275b
Address: 0x45ab6108cc41c20f416a98615aa8c349f02a275b
Meaning: Contract owner (original deployer)
Actual Contract Balance (via balance query):
Wei: 32435530000000000000
Ether: 32.435530 ETH
Discrepancy: 4.99079 ETH difference from internal balance variable
Verification Commands:
cast storage 0xfD2487cc0e5dCe97F08BE1Bc8eF1DCE8D5988B4D 0 # participants.length
cast storage 0xfD2487cc0e5dCe97F08BE1Bc8eF1DCE8D5988B4D 1 # payoutIdx
cast storage 0xfD2487cc0e5dCe97F08BE1Bc8eF1DCE8D5988B4D 2 # collectedFees
cast storage 0xfD2487cc0e5dCe97F08BE1Bc8eF1DCE8D5988B4D 3 # balance
cast storage 0xfD2487cc0e5dCe97F08BE1Bc8eF1DCE8D5988B4D 4 # owner
cast balance 0xfD2487cc0e5dCe97F08BE1Bc8eF1DCE8D5988B4D # actual ETH balance
Function Selectors
Function selector hashes for all contract functions.
Source: Calculated from function signatures
Artifact:
Constructor:
- Doubler() - N/A (runs once at deployment)
Fallback:
- function() - N/A (unnamed function, no selector)
Public/External Functions:
- enter() - 0x13af4035
- collectFees() - 0x35c1d349
- setOwner(address) - 0x13af40ba
Auto-Generated Getters (public state variables):
- participants(uint256) - 0xe97dcb62
- payoutIdx() - 0xa60f3588
- collectedFees() - 0x9003adfe
- balance() - 0xb69ef8a8
- owner() - 0x8da5cb5b
Verification:
cast sig "enter()" # 0x13af4035
cast sig "collectFees()" # 0x35c1d349
cast sig "setOwner(address)" # 0x13af40ba
cast sig "participants(uint256)" # 0xe97dcb62
cast sig "payoutIdx()" # 0xa60f3588
cast sig "collectedFees()" # 0x9003adfe
cast sig "balance()" # 0xb69ef8a8
cast sig "owner()" # 0x8da5cb5b
Transaction History Summary
High-level statistics for contract activity.
Source: Etherscan transaction history
Artifact:
Total Transactions: 477
- Normal Transactions: 477
- Internal Transactions: Unknown (requires detailed analysis)
- Token Transfers: 0 (this is not a token contract)
Activity Period:
- First Transaction: 2016-03-13 (deployment)
- Last Transaction: ~2016-2017 (exact date requires detailed scraping)
- Current Status: Dormant (no activity in years)
Deployment:
- Block: 1,143,960
- Timestamp: 2016-03-13 14:40:17 UTC
- Deployer: 0x45ab6108cc41c20f416a98615aa8c349f02a275b
- Gas Used: 342,467
- Deployment Cost: 0.010274010 ETH
Participants:
- Total Joined: 321
- Successfully Paid: 118
- Stuck in Queue: 203
ABI (Application Binary Interface)
Reconstructed ABI for contract interaction.
Source: Generated from verified source code
Artifact:
[
{
"type": "constructor",
"name": "Doubler",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "fallback",
"stateMutability": "payable"
},
{
"type": "function",
"name": "enter",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "function",
"name": "collectFees",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setOwner",
"inputs": [
{
"name": "_owner",
"type": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "participants",
"inputs": [
{
"name": "",
"type": "uint256"
}
],
"outputs": [
{
"name": "etherAddress",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "payoutIdx",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "collectedFees",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "balance",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "owner",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address"
}
],
"stateMutability": "view"
}
]
Note: ABI is reconstructed for modern tooling compatibility. Original Solidity 0.2.0 may not have used standardized ABI encoding.
Additional Notes
Historical Significance
This contract represents one of the earliest Ponzi Schemes deployed on Ethereum. It was deployed during Ethereum's first year (2016) when:
- Smart contract security practices were still emerging
- Gas costs were much lower
- Solidity was in early development (v0.2.0)
- "Code is law" philosophy was being tested in practice
Educational Value
This contract serves as a valuable case study for:
- Evolution of Solidity: Demonstrates deprecated patterns (old Modifier syntax, Constructor naming,
send()usage) - Economic Game Theory: Shows how Ponzi mechanics play out on-chain
- Security Anti-Patterns: Exhibits multiple vulnerabilities now considered critical
- Blockchain Immutability: 203 participants remain stuck with no recourse
Legal Context
While this contract implemented a Ponzi scheme with mechanics visible in its verified source code, it operated in a legal gray area in 2016. Modern deployments of similar contracts would likely face regulatory scrutiny in most jurisdictions.
File Manifest
All artifacts collected during analysis are stored in /artifacts/fd2487...988b4d/:
artifacts/fd2487...988b4d/
├── runtime-bytecode.hex # Deployed contract bytecode
├── source-code.sol # Verified Solidity source code
├── storage-snapshot.txt # Current storage state (2026-02-13)
├── etherscan-source.json # Raw Etherscan API response
├── etherscan-source-v2.json # Etherscan API v2 response
└── TODO.md # Analysis checklist
All artifacts can be independently verified using the commands provided in the Methodology document.