# Ponzi Token – A self-trading token on the Ethereum network

## Warning

Some people tested this contract with little changes on mainnet and, of course, a serious bug was found a few days later. I think at least 2000 ETH were stolen. Do not use the code, everyone can drain the contract of all funds.

I would like to add that I had no knowledge that someone was using this contract on mainnet. They did not ask me, not even invite me to be the first investor. And I also did not know that this bug existed.

Currently there are several variants of this contract with more speculative settings (and the particular bug fixed) in the wild. Note that I am not associated with any of them. And I did not audit this contract properly nor any other contract based on this contract.

## Shut up and take my money – How do I invest?

This token is currently only live on Ropsten Testnet.

Investing into Ponzi Tokens is easy as sending ethers to ponzi.hoenicke.eth. It's actually exactly how it is done. Don't send ethers from exchanges directly to this address! You need a wallet that can handle ERC-20 tokens. Another caveat: you need to invest at least a microether and at most one million ether.

This will send you tokens back. To see them you need to tell your wallet about the token. The screenshot below shows how to do this in myetherwallet. Just click on Add Custom Token and fill out Address (0x2CB6ef99FbC78069364144E969a9A6e89E550359), Token Symbol, and Decimals as in the screen shot. Note that the address is the same you sent to, so you can copy and paste it.

Buying a token costs 5 % fee. These fees go to 100 % to all investors, including you. So if you just bought a token, you already got part of your fee back, which you can claim at any time. To claim your earnings just send 0 ethers to ponzi.hoenicke.eth.

You can cash out at any time by selling your tokens. To sell them just send them to (you guessed it) ponzi.hoenicke.eth. Note that you don't get the ethers immediately back, but they are added to your earnings. Send another 0 ether to ponzi.hoenicke.eth to cash them out.

## What's behind it?

Ponzi Tokens are backed by 80 % ether at their current price and the contract uses the Bancor formula (with my own implementation) to maintain the price and reserve when buying or selling tokens. The gist is, if tokens are bought, the reserve increases and thus the price. if tokens are sold, the reserve decreases together with the price. See a later section for the mathematics behind it.

To make profits, the contract takes 5 % fee of the ethers used to buy tokens. This fee is distributed to all holders according to the percentage of their current holding. Other than that there are no hidden costs.

If you invest a lot of ethers at once, the contract behaves the same as if you would invest in little steps, while no one else is investing. This means that – since you drive the price up by buying tokens – that you need to pay a higher price for the later tokens. This also means that you get a part of the fees back for the later tokens, since you are already holding some tokens. If you sell your tokens immediately after buying, you get your investment back except for the 5 % fee (of which you only get a part back).

## Interacting with the contract

If you go to the Contracts tab you can interact with the contract. Put the address 0x2CB6ef99FbC78069364144E969a9A6e89E550359 in to the contract and copy the ABI string:

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"ethervalue","type":"uint256"}],"name":"getTokensForEther","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"dividends","outputs":[{"name":"amount","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"tokens","type":"uint256"}],"name":"getEtherForTokens","outputs":[{"name":"ethervalue","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"reserve","outputs":[{"name":"amount","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"}]


The contract interface allows you to view your current dividends (the earnings you can receive by sending 0 ethers to the contract) and show you a lot more information. Most of the interface corresponds to the ERC-20 standard. You can use withdraw to send your earnings to a different address. Note that when you send your tokens you keep your earnings.

## The mathematics behind Ponzi Tokens

The price is directly related to the current token supply $price = supply4.$ If one token is issued, the price is 1 token/ether. If 16 tokens are issued, the price 2 token/ether and if 10000 token issued, the price rises to 10 token/ether. This will ensure the 80 % reserve of ether, i.e., $reserve = 80 % ·supply·price = 45supply54,$ which can be seen as follows. If you buy an amount of $\mathrm{token}$, the ether (excluding fee) that you need to pay is the integral over the price $ether = ∫supplysupply+token s4ds = 45 s54 supplysupply+token$ which turns out to be exactly the amount to bring the reserve to 80 % for the new price.

The fee the previous holder get for the new tokens also depend on the supply and is decreasing for each newly obtained token. It can be computed by integrating over the spent ether: $holderfee = ∫reservereserve+ether feeether supplysupply(x) dx = ∫reservereserve+ether feesupplyether 54 x-45 dx$ which can be simplified to: $holderfee = 5fee ethersupply- reservetoken ether(supply+token)$

## Source Code and Known Bugs

The source code is available via Etherscan.

There is an escape hatch in this token. It pays out all investments to me. Unfortunately, it can be invoked by everyone. Please don't invoke it. I intend to remove the escape hatch or at least only allow to call it if there are no ethers left in the account.

There is no event logged when you buy tokens. So it is hard to see on Etherscan when tokens were issued.

There are some rounding errors in the fixed point arithmetic when computing price. It should never be more than a few milliethers so this shouldn't matter.

There may be bugs that allow to drain the reserve, create a huge number of tokens for free, or create unaccounted tokens. If you find one, please contact me.