The original MyScheme pyramid contract with a 1 ETH entry fee, deployed on August 7, 2015.
Historical Significance
The earliest known pyramid or chain letter smart contract on Ethereum mainnet, deployed August 7, 2015 during the first week of Frontier. Predates the 10 ETH and 100 ETH variants by the same deployer.
Context
The Ethereum Frontier release (July 30, 2015) gave developers raw access to a global programmable blockchain for the first time. Early deployers experimented with token contracts, name registrars, games, and financial schemes — all within the first days of mainnet. MyScheme exists in the same cohort as the FirstCoin tutorial token and TerraNullius inscription contract, deployed by different developers exploring what smart contracts could do.
Key Facts
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
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.
Frontier Era
The initial release of Ethereum. A bare-bones implementation for technical users.
Bytecode Overview
Verified Source Available
Source verified through compiler archaeology and exact bytecode matching.
View Verification ProofShow 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;
}
}