Back to Home

MyScheme

ponzi
0xa327075af2a2...6afe7430f955
FrontierContract #17Exact Bytecode MatchEdit this contract
Deployed August 7, 2015 (10 years ago)Block 49,931

One of Ethereum's earliest pyramid-style chain letter contracts, deployed 9 days after genesis. Required 10 ETH per entry and distributed payouts to earlier par

Key Facts

Deployment Block
49,931
Deployment Date
Aug 7, 2015, 09:04 PM
Code Size
925.0 B
Gas at Deploy
284,451
Transactions by Year
2015131
20232

Description

EarlyChainLetter10ETH was deployed on August 7, 2015, at block 49,931 - just nine days after the Ethereum Frontier genesis block. It is one of the earliest known pyramid-style smart contracts on Ethereum.

The contract implements a classic chain letter scheme: each participant sends exactly 10 ETH, and the contract automatically distributes portions of each new deposit to earlier participants, with a diminishing share structure. The deployer and earliest investors receive the largest cumulative payouts.

The deployer (0x881b0a4e) created three chain letter contracts in rapid succession within the same hour. The first variant (0x109c4f2c, block 49,924) required only 1 ETH per entry and attracted minimal activity (5 transactions). The second - this contract - raised the threshold to 10 ETH and became significantly more active. A third variant (0xbaa54d6e, block 49,936) was deployed minutes later with slightly different bytecode and attracted 44 transactions.

Activity was intense from the start: 30+ deposits arrived within the first 7 hours of deployment, all during August 7-8, 2015. The contract attracted 134 total transactions from 54 unique participants. Of these, 106 were successful and 27 failed. Total ETH deposited exceeded 1,300 ETH.

The contract has no withdrawal or self-destruct function. Approximately 130 ETH remains permanently locked in the contract - worth over $250,000 at March 2026 prices.

Remarkably, people continued sending 10 ETH to the contract years after deployment. The most recent transaction was recorded on August 21, 2023 - over 8 years after the original deployment.

The contract was compiled with Solidity v0.1.1 and exposes a single read function: getNumInvestors(). It uses pre-modern Solidity patterns including an unnamed fallback function as the entry point and send() for ETH transfers (before transfer() and call() became standard).

The source code (decompiled and bytecode-verified) refers to the contract internally as "MyScheme." The top recipients were the deployer (0x881b0a4e, 51.10 ETH) and the first external participant (0xa14cf6ce, 46.10 ETH).

Source Verified

SolidityExact bytecode match(925 bytes)
Compiler: soljson

Exact runtime bytecode match. soljson v0.1.1.

Heuristic Analysis

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

Detected Type: ponzi

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

Opcodes925
Unique Opcodes100
Jump Instructions50
Storage Operations51

Verified Source Available

Source verified through compiler archaeology and exact bytecode matching.

View Verification Proof
Show source code (Solidity)
contract MyScheme {
 
    uint treeBalance;
    uint numInvestorsMinusOne;
    uint treeDepth;
    address[] myTree;
 
    function MyScheme() {
        treeBalance = 0;
        myTree.length = 6;
        myTree[0] = msg.sender;
        numInvestorsMinusOne = 0;
    }
   
        function getNumInvestors() constant returns (uint a){
                a = numInvestorsMinusOne+1;
        }
   
        function() {
        uint amount = msg.value;
        if (amount>=10000000000000000000){
            numInvestorsMinusOne+=1;
            myTree[numInvestorsMinusOne]=msg.sender;
            amount-=10000000000000000000;
            treeBalance+=10000000000000000000;
            if (numInvestorsMinusOne<=2){
                myTree[0].send(treeBalance);
                treeBalance=0;
                treeDepth=1;
            }
            else if (numInvestorsMinusOne+1==myTree.length){
                    for(uint i=myTree.length-3*(treeDepth+1);i<myTree.length-treeDepth-2;i++){
                        myTree[i].send(5000000000000000000);
                        treeBalance-=5000000000000000000;
                    }
                    uint eachLevelGets = treeBalance/(treeDepth+1)-1;
                    uint numInLevel = 1;
                    for(i=0;i<myTree.length-treeDepth-2;i++){
                        myTree[i].send(eachLevelGets/numInLevel-1);
                        treeBalance -= eachLevelGets/numInLevel-1;
                        if (numInLevel*(numInLevel+1)/2 -1== i){
                            numInLevel+=1;
                        }
                    }
                    myTree.length+=treeDepth+3;
                    treeDepth+=1;
            }
        }
                treeBalance+=amount;
    }
}

External Links