Skip to content

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:

export ETH_RPC_URL=https://eth.llamarpc.com
cast code 0xfD2487cc0e5dCe97F08BE1Bc8eF1DCE8D5988B4D

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

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.