pragma solidity ^0.4.10;
contract Ponzi
{
address public owner;
mapping (address => uint) public investments;
mapping (address => uint) public balanceOf;
address[] public contributors;
uint public totalInvestments;
uint public totalPool;
uint public numInvestments;
function Campaign(address _charity, string _charityName, uint _percent) payable
{
require(_percent >= 20 && _percent <= 99);
owner = msg.sender;
totalInvestments += investment;
totalPool += msg.value;
numInvestments += 1;
contributors.push(owner);
donations[owner] = msg.value;
}
function getBalance(address _address) returns (uint)
{
require(validAddress(_address));
return balanceOf[_address];
}
function getContributors() returns (address[])
{
return contributors;
}
function validAddress(address _address) returns (bool)
{
for(uint i = 0; i < contributors.length; i++)
{
if(_address == contributors[i])
{
return true;
}
}
return false;
}
function invest()
payable
returns (uint)
{
//process gains to addresses
for (uint i = 0; i < contributors.length; i++)
{
balanceOf[contributors[i]] += msg.value * investments[contributors[i]] / totalPool;
}
//add new contributor to array
if (investments[msg.sender] == 0)
{
contributors.push(msg.sender);
investments[msg.sender] = msg.value;
}
else
{
investments[msg.sender] += msg.value;
}
totalPool += msg.value;
}
function withdraw(uint _amount)
{
require(validAddress(msg.sender));
require(_amount < balanceOf[msg.sender]);
balanceOf[msg.sender] -= _amount;
msg.sender.transfer(_amount);
}
function() { throw; }
}