Back to Home

Ponzi

other
0xce44c75d3c28...d8da8375f579
FrontierContract #33Source Verified
Deployed August 8, 2015 (10 years ago)Block 52,970

One of the earliest Ponzi schemes on Ethereum - a 102% payout contract where new deposits fund earlier investors, deployed on Frontier Day 4.

Key Facts

Deployment Block
52,970
Deployment Date
Aug 8, 2015, 10:40 AM
Code Size
718.0 B
Gas at Deploy
214,109
Transactions by Year
20151

Description

A Ponzi scheme deployed at block 52,970 (August 8, 2015) on Ethereum Frontier. New investors send ETH via the payable fallback. Each deposit is promised a 102% return (msg.value + msg.value/50). Investors are stored in an outputs array with their payout amount. The contract automatically pays earlier investors from new deposits whenever the balance is sufficient, working through the queue sequentially. The totalOutstanding variable tracks the total amount still owed to unpaid investors. At 683 bytes, it is one of the simplest Ponzi implementations from Ethereum's first week. Same deployer (0x8674c218) as the MessageStore at rank 27.

Source Verified

SolidityNear-exact bytecode match
Compiler: soljson

near_exact_match: reconstructed source produces 677b runtime (target 683b = 99.1% match) with soljson v0.3.1 optimizer ON. All selectors confirmed via openchain.xyz. 6-byte diff likely from minor source expression variant.

Heuristic Analysis

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

Detected Type: other

Frontier Era

The initial release of Ethereum. A bare-bones implementation for technical users.

Block span: 01,149,999
July 30, 2015March 14, 2016

Bytecode Overview

Opcodes718
Unique Opcodes89
Jump Instructions35
Storage Operations39

Verified Source Available

This contract has verified source code.

Show source code (Solidity)
contract Ponzi {
    struct Output { address addr; uint amount; }
    Output[] public outputs;
    uint public totalOutstanding = 0;
    uint nextOutput = 0;
    function() {
        uint payout = msg.value + msg.value / 50;
        outputs.push(Output({addr: msg.sender, amount: payout}));
        totalOutstanding += payout;
        while (this.balance >= outputs[nextOutput].amount) {
            outputs[nextOutput].addr.send(outputs[nextOutput].amount);
            totalOutstanding -= outputs[nextOutput].amount;
            nextOutput++;
        }
    }
}

External Links