These are the first ever verifiable pyramid schemes with provably known rules!
How it works: Each level has one more member than the previous one. Once a level fills up, each member in the preceding two layers gets half of their investment back. The remaining funds are distributed between all members in all of the preceding layers so that the members in the upper layers get a slightly larger amount.
In a geth console, type one of the four following commands
1 ether:
eth.sendTransaction({from:eth.accounts[0], to:"0x109c4f2ccc82c4d77bde15f306707320294aea3f", value:web3.toWei(1,"ether"),gas:500000})10 ether:
eth.sendTransaction({from:eth.accounts[0], to:"0xa327075af2a223a1c83a36ada1126afe7430f955", value:web3.toWei(10,"ether"),gas:500000})0.10 ether:
eth.sendTransaction({from:eth.accounts[0], to:"0xbaa54d6e90c3f4d7ebec11bd180134c7ed8ebb52", value:web3.toWei(0.1,"ether"),gas:500000})100 ether:
eth.sendTransaction({from:eth.accounts[0], to:"0x020522bf9b8ed6ff41e2fa6765a17e20e2767d64", value:web3.toWei(100,"ether"),gas:400000});That's it! Make sure the amounts are precisely as written. Simply wait for other people to do the same, and watch your investment grow.
In order to see the current number of investors, type the following commands in the geth console:
var myschemeContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"getNumInvestors","outputs":[{"name":"a","type":"uint256"}],"type":"function"},{"inputs":[],"type":"constructor"}]);
var c = myschemeContract.at("0x109c4f2ccc82c4d77bde15f306707320294aea3f")
c.getNumInvestors()
At the time of this posting, there are over
100 investors!
Anyone can verify that the code provided below is identical to the one in the Ethereum blockchain, by compiling it (with optimizations enabled), for example at:
https://chriseth.github.io/browser-solidity/ and comparing the data with the output of:
eth.getCode("0x109c4f2ccc82c4d77bde15f306707320294aea3f") SOLIDITY CODE:
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;
}
}