Back to Home

MyScheme (1ETH)

Crowdsale
0x109c4f2ccc82...7320294aea3f
FrontierContract #16Exact Bytecode MatchEdit this contract
Deployed August 7, 2015 (10 years ago)Block 49,924

The original MyScheme pyramid contract with a 1 ETH entry fee, deployed on August 7, 2015.

Key Facts

Deployment Block
49,924
Deployment Date
Aug 7, 2015, 09:03 PM
Code Size
925.0 B
Gas at Deploy
284,451
Transactions by Year
2015203
20176
20231
202519

Description

The earliest of four pyramid scheme variants deployed by the same developer in the first days of Ethereum. MyScheme implements a binary tree payout structure: investors send 1 ETH to join, and payouts cascade up the tree as new members join. The deployer (0x881b0a4e) deployed four variants: 1 ETH (this contract, block 49924), 10 ETH (block 49931), EarlyChainLetterSmall at 0.1 ETH (block 49936), and 100 ETH (block 60143). The source was published to Etherscan by the original author.

Source Verified

SolidityExact bytecode match(925 bytes)
Compiler: soljson

Exact creation bytecode match (925 bytes). Compiled with soljson v0.1.1+commit.6ff4cd6, optimizer ON. The original MyScheme pyramid contract with 1 ETH entry fee, deployed 7 blocks before the 10 ETH variant by the same deployer (0x881b0a4e). Source independently verified via Etherscan.

Heuristic Analysis

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

Detected Type: Crowdsale

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 Opcodes103
Jump Instructions48
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>=1000000000000000000){
            numInvestorsMinusOne+=1;
            myTree[numInvestorsMinusOne]=msg.sender;
            amount-=1000000000000000000;
            treeBalance+=1000000000000000000;
            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(500000000000000000);
                        treeBalance-=500000000000000000;
                    }
                    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