Sponsored Link:   Ambrosus Main-Net Launching: Stake AMB in Masternodes and get regular rewards for maintaining network integrity.
Contract Overview
Balance: 0.287259142354038438 Ether
Ether Value: $144.82 (@ $504.14/ETH)
Transactions: 143 txns
Token Contract: EthPyramid (EPY)
Misc
Address Watch: Add To Watch List
Contract Creator: 0x82ff243c78cdc6cbc2d1e71766a4480f331456bbat txn 0x6184c39b5cec68caae5f0c6b7af527a1d602f5dc708b2dd07b1ad023ad4d0500
Token Balances:
 Latest 25 txns from a total Of 143 transactions

TxHash Age From To Value [TxFee]
0xa62d3bddb12697f61745db48094d220692c7c892e996653b45c4dbe6a8faf2789 days 5 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.00062627
0x73ddc2471c0d7c6e01d75f6559ad58838f50347032d1188c003b35b99075954a29 days 15 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000187881
0x872a973f04344d44bd37d274bcae0aa6a8a4f2264bf9600b2f555a043be60ed048 days 1 hr ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.0003720087
0xff2397e0057ffe3b04766d040575110503527a076e114035f9200e02ea3c3b4748 days 9 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0.1 Ether0.0014865
0x946bbef6cf516dce081f230993c9851c58774f08d1c7286ccd57f3ab0086bb2849 days 3 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.00062699
0xa3837fe0b41e5b66d9553471b60a0b419ef6fa1b7b6dbae3dc92a3fca3b2e9a252 days 2 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000187881
0x85cad073aa316f253341adfe7af27e2f9eebd8e7e9bd4c669c41e269ac29929c52 days 14 hrs ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000563643
0x252e14a2b17d60ef20cc67be681b439bc075743dd701a600fecba5b0528cf42354 days 4 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000367416
0xf0baa23e90f8ca195ba143fefe40c2f741a7bb66001958dfa2068d6f0282ec9554 days 10 hrs ago0x3d2084d65cd56583aaf306e38db432a399b34b63  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.00075066
0x14117fcdd2e0994d7d72b0120400da17ebdd41b11159af6f34d5a050cc76e8e760 days 1 hr ago0xc56b6682d82dbb766e2f20898bf38ac163af7812  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000588969
0xad0f9ba930bae8d4d01da00b73bb740602ea94d5924411a51f2616161817026465 days 23 hrs ago0x1ed45acba1c716c8fbe88aa35d27842fb612e20a  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000187665
0x29e9353c8a3e6a36f8d50fa48f5b19c015f2805ad7d44345845fef96e239833870 days 16 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0.01625 Ether0.000118362
0xcef8e6b1622ee075a14d280cf092d250941d8bebb961d6f87af5706898bab38672 days 4 hrs ago0x7ff4b024e9418cffd16497069d81251319350cbb  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.0001939205
0x8baccae135db354c540655b6f7307bbd7af7388e131ed15227a38a371ec8a98072 days 4 hrs ago0x7ff4b024e9418cffd16497069d81251319350cbb  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.0001423737
0x1c1902e04fedc89ca1c977f097085777fb96ceaaae247593db321f967abc3c2275 days 8 hrs ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000137781
0x62770219d9dcee1fe6e5978ff6aec03a71537573dec92b2b74227635753dfd0978 days 14 hrs ago0x3052e2dbf3c84cf0b9693ebe6a7ef1b11b93cd42  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000137781
0x37144ebfde9d75e2be7331dc605620a906df5b25e825f9a38764a070456c3d8480 days 2 hrs ago0x3052e2dbf3c84cf0b9693ebe6a7ef1b11b93cd42  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000076306
0x8a5182aa991a51b23a32aa9fb6eea8b0f99a8dba4bc42c70a4b860c986afb57b82 days 20 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000045927
0x87fee2dbc01bca67927183e48853ed389e1efc98ce62e12248d164eb17e1757e83 days 21 hrs ago0xb9cc1875eec851548cb7eca33ecc643fce9d44e3  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.00012511
0x62235b7e72b1bc988174bfe30a323b5f9aa3a8e626d6473c0e332c553180ea1884 days 17 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000137781
0xb93c2dad57ada9f3f226179837fd39d562f2429ffb031159d13e1225ea87a26884 days 19 hrs ago0xb9cc1875eec851548cb7eca33ecc643fce9d44e3  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.0000229635
0xd8214b26a802946461b72e1e6917d11ccb70edda68610533832ff99ace2756fe84 days 22 hrs ago0x1ed45acba1c716c8fbe88aa35d27842fb612e20a  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0.07 Ether0.00009899091
0xd42657ded964dc1f87568e3bfd255a0d7b57e317a2b70da7a5ebf45f23e7079b84 days 22 hrs ago0xfaeeb28890c14f45e68a62e2e29b1b1e8d41c950  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0.1 Ether0.000059181
0x32f657f5073ca1351d1a9eea5015f03cf987af050852ba44324016b0d4d1fae584 days 22 hrs ago0xab8c5c034f1cd123c62413a88ef3ada2d90f68c5  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0 Ether0.000062555
0x8f08a2bd6b58e64fa6acb46ea29baba7c18cb5766a359a4d833571173945442285 days 4 hrs ago0x6ec751f86e3adff24db54822dd70fa4f5f763fc7  IN   0xfc8decea972435b89be675996b6bf825aad06f9d0.001 Ether0.000059181
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0xa62d3bddb12697f61745db48094d220692c7c892e996653b45c4dbe6a8faf27859288079 days 5 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x415e94a5246ac4d3f16a833f51ff9066f215a4210.010217240181291703 Ether
0x73ddc2471c0d7c6e01d75f6559ad58838f50347032d1188c003b35b99075954a581007329 days 15 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x361084af8d45e07885b31fcedcb642b9cc7b72d70.012393362655954026 Ether
0x872a973f04344d44bd37d274bcae0aa6a8a4f2264bf9600b2f555a043be60ed0570513348 days 1 hr ago0xfc8decea972435b89be675996b6bf825aad06f9d0x415e94a5246ac4d3f16a833f51ff9066f215a4210.002217399948968282 Ether
0x946bbef6cf516dce081f230993c9851c58774f08d1c7286ccd57f3ab0086bb28569905949 days 3 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.271767082633760481 Ether
0xa3837fe0b41e5b66d9553471b60a0b419ef6fa1b7b6dbae3dc92a3fca3b2e9a2568239652 days 2 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.011027276773092266 Ether
0x85cad073aa316f253341adfe7af27e2f9eebd8e7e9bd4c669c41e269ac29929c567954352 days 14 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x341c48c0e833e179cca6c605b823e9a4911a3d000.027499122208820058 Ether
0x252e14a2b17d60ef20cc67be681b439bc075743dd701a600fecba5b0528cf423567048354 days 4 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.008861031567744357 Ether
0xf0baa23e90f8ca195ba143fefe40c2f741a7bb66001958dfa2068d6f0282ec95566916254 days 10 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x3d2084d65cd56583aaf306e38db432a399b34b630.052154783900109313 Ether
0xad0f9ba930bae8d4d01da00b73bb740602ea94d5924411a51f26161618170264560375665 days 23 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x1ed45acba1c716c8fbe88aa35d27842fb612e20a0.05486464193790696 Ether
0xcef8e6b1622ee075a14d280cf092d250941d8bebb961d6f87af5706898bab386556813272 days 4 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x7ff4b024e9418cffd16497069d81251319350cbb0.004559321668710006 Ether
0x8baccae135db354c540655b6f7307bbd7af7388e131ed15227a38a371ec8a980556811972 days 4 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x7ff4b024e9418cffd16497069d81251319350cbb0.000329434196429175 Ether
0x1c1902e04fedc89ca1c977f097085777fb96ceaaae247593db321f967abc3c22554998575 days 8 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x341c48c0e833e179cca6c605b823e9a4911a3d000.004188743745608642 Ether
0x62770219d9dcee1fe6e5978ff6aec03a71537573dec92b2b74227635753dfd09553161178 days 14 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x3052e2dbf3c84cf0b9693ebe6a7ef1b11b93cd420.019577468950546208 Ether
0x8a5182aa991a51b23a32aa9fb6eea8b0f99a8dba4bc42c70a4b860c986afb57b550711282 days 20 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x415e94a5246ac4d3f16a833f51ff9066f215a4210.001309047797136 Ether
0x87fee2dbc01bca67927183e48853ed389e1efc98ce62e12248d164eb17e1757e550094183 days 21 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0xb9cc1875eec851548cb7eca33ecc643fce9d44e30.034531071151371613 Ether
0x62235b7e72b1bc988174bfe30a323b5f9aa3a8e626d6473c0e332c553180ea18549617284 days 17 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.028564551661771418 Ether
0xb93c2dad57ada9f3f226179837fd39d562f2429ffb031159d13e1225ea87a268549566884 days 19 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0xb9cc1875eec851548cb7eca33ecc643fce9d44e30.002120982586416485 Ether
0x32f657f5073ca1351d1a9eea5015f03cf987af050852ba44324016b0d4d1fae5549500484 days 22 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0xab8c5c034f1cd123c62413a88ef3ada2d90f68c50.335886228319231293 Ether
0x3ce4e2395e377a7fc904de7287580f321d978c4865f027727035773ef915afab5399725101 days 2 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0xab8c5c034f1cd123c62413a88ef3ada2d90f68c50.021713365282544978 Ether
0x29d25dc4c61583a736e2c68b955e3f1028785e5fe0b32cad13a1abd1b38376b05350014109 days 7 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x9afda2dd29775559f42833302feb357b0cf33f970.016199999999997401 Ether
0xce7d4676049ef5a4711d0cc62624cba9d5d4358df64686c35cf0213ac029c05d5335422111 days 18 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x9afda2dd29775559f42833302feb357b0cf33f970.000081406154389614 Ether
0x08916861bd341d2e4547112915d2872dd2ffef44e492987b7d9d625f0d3b439f5307984116 days 8 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x95d896cb40413ce1cdd9fef1f07f0ed8730477be0.006484999664535899 Ether
0xb432358d87db4ef139b1df975c39cbdfb94a8783b0a6133e9de816412c44b56c5291016119 days 4 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0x341c48c0e833e179cca6c605b823e9a4911a3d000.005727023666284533 Ether
0x27d9e8f07ccbed1f69e73476d2a7fe9b9d6aa236083c081e086d139dfa0055665257028124 days 22 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0xf2898375a42deda8a52147ae7bbf58d6c84c3b760.002923791471293747 Ether
0x17e5a56584ea34da0dd1c663351a20378ae584883d4180305e4c4cc06ad43adc5147706143 days 12 hrs ago0xfc8decea972435b89be675996b6bf825aad06f9d0xab8c5c034f1cd123c62413a88ef3ada2d90f68c50.006761932058332537 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Similar match)
Note: Displaying similar matching verified source code at contract 0xc908a34165d2720d12ffcfb6b99b47161b1c9946(excluding Constructor Arguments if any)
Contract Name: EthPyramid
Compiler Version: v0.4.20-nightly.2018.1.29+commit.a668b9de
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

/*
          ,/`.
        ,'/ __`.
      ,'_/_  _ _`.
    ,'__/_ ___ _  `.
  ,'_  /___ __ _ __ `.
 '-.._/___...-"-.-..__`.
  B

 EthPyramid. A no-bullshit, transparent, self-sustaining pyramid scheme.
 
 Inspired by https://test.jochen-hoenicke.de/eth/ponzitoken/

 Developers:
	Arc
	Divine
	Norsefire
	ToCsIcK
	
 Front-End:
	Cardioth
	tenmei
	Trendium
	
 Moral Support:
	DeadCow.Rat
	Dots
	FatKreamy
	Kaseylol
	QuantumDeath666
	Quentin
 
 Shit-Tier:
	HentaiChrist
 
*/

contract EthPyramid {

	// scaleFactor is used to convert Ether into tokens and vice-versa: they're of different
	// orders of magnitude, hence the need to bridge between the two.
	uint256 constant scaleFactor = 0x10000000000000000;  // 2^64

	// CRR = 50%
	// CRR is Cash Reserve Ratio (in this case Crypto Reserve Ratio).
	// For more on this: check out https://en.wikipedia.org/wiki/Reserve_requirement
	int constant crr_n = 1; // CRR numerator
	int constant crr_d = 2; // CRR denominator

	// The price coefficient. Chosen such that at 1 token total supply
	// the amount in reserve is 0.5 ether and token price is 1 Ether.
	int constant price_coeff = -0x296ABF784A358468C;

	// Typical values that we have to declare.
	string constant public name = "EthPyramid";
	string constant public symbol = "EPY";
	uint8 constant public decimals = 18;

	// Array between each address and their number of tokens.
	mapping(address => uint256) public tokenBalance;
		
	// Array between each address and how much Ether has been paid out to it.
	// Note that this is scaled by the scaleFactor variable.
	mapping(address => int256) public payouts;

	// Variable tracking how many tokens are in existence overall.
	uint256 public totalSupply;

	// Aggregate sum of all payouts.
	// Note that this is scaled by the scaleFactor variable.
	int256 totalPayouts;

	// Variable tracking how much Ether each token is currently worth.
	// Note that this is scaled by the scaleFactor variable.
	uint256 earningsPerToken;
	
	// Current contract balance in Ether
	uint256 public contractBalance;

	function EthPyramid() public {}

	// The following functions are used by the front-end for display purposes.

	// Returns the number of tokens currently held by _owner.
	function balanceOf(address _owner) public constant returns (uint256 balance) {
		return tokenBalance[_owner];
	}

	// Withdraws all dividends held by the caller sending the transaction, updates
	// the requisite global variables, and transfers Ether back to the caller.
	function withdraw() public {
		// Retrieve the dividends associated with the address the request came from.
		var balance = dividends(msg.sender);
		
		// Update the payouts array, incrementing the request address by `balance`.
		payouts[msg.sender] += (int256) (balance * scaleFactor);
		
		// Increase the total amount that's been paid out to maintain invariance.
		totalPayouts += (int256) (balance * scaleFactor);
		
		// Send the dividends to the address that requested the withdraw.
		contractBalance = sub(contractBalance, balance);
		msg.sender.transfer(balance);
	}

	// Converts the Ether accrued as dividends back into EPY tokens without having to
	// withdraw it first. Saves on gas and potential price spike loss.
	function reinvestDividends() public {
		// Retrieve the dividends associated with the address the request came from.
		var balance = dividends(msg.sender);
		
		// Update the payouts array, incrementing the request address by `balance`.
		// Since this is essentially a shortcut to withdrawing and reinvesting, this step still holds.
		payouts[msg.sender] += (int256) (balance * scaleFactor);
		
		// Increase the total amount that's been paid out to maintain invariance.
		totalPayouts += (int256) (balance * scaleFactor);
		
		// Assign balance to a new variable.
		uint value_ = (uint) (balance);
		
		// If your dividends are worth less than 1 szabo, or more than a million Ether
		// (in which case, why are you even here), abort.
		if (value_ < 0.000001 ether || value_ > 1000000 ether)
			revert();
			
		// msg.sender is the address of the caller.
		var sender = msg.sender;
		
		// A temporary reserve variable used for calculating the reward the holder gets for buying tokens.
		// (Yes, the buyer receives a part of the distribution as well!)
		var res = reserve() - balance;

		// 10% of the total Ether sent is used to pay existing holders.
		var fee = div(value_, 10);
		
		// The amount of Ether used to purchase new tokens for the caller.
		var numEther = value_ - fee;
		
		// The number of tokens which can be purchased for numEther.
		var numTokens = calculateDividendTokens(numEther, balance);
		
		// The buyer fee, scaled by the scaleFactor variable.
		var buyerFee = fee * scaleFactor;
		
		// Check that we have tokens in existence (this should always be true), or
		// else you're gonna have a bad time.
		if (totalSupply > 0) {
			// Compute the bonus co-efficient for all existing holders and the buyer.
			// The buyer receives part of the distribution for each token bought in the
			// same way they would have if they bought each token individually.
			var bonusCoEff =
			    (scaleFactor - (res + numEther) * numTokens * scaleFactor / (totalSupply + numTokens) / numEther)
			    * (uint)(crr_d) / (uint)(crr_d-crr_n);
				
			// The total reward to be distributed amongst the masses is the fee (in Ether)
			// multiplied by the bonus co-efficient.
			var holderReward = fee * bonusCoEff;
			
			buyerFee -= holderReward;

			// Fee is distributed to all existing token holders before the new tokens are purchased.
			// rewardPerShare is the amount gained per token thanks to this buy-in.
			var rewardPerShare = holderReward / totalSupply;
			
			// The Ether value per token is increased proportionally.
			earningsPerToken += rewardPerShare;
		}
		
		// Add the numTokens which were just created to the total supply. We're a crypto central bank!
		totalSupply = add(totalSupply, numTokens);
		
		// Assign the tokens to the balance of the buyer.
		tokenBalance[sender] = add(tokenBalance[sender], numTokens);
		
		// Update the payout array so that the buyer cannot claim dividends on previous purchases.
		// Also include the fee paid for entering the scheme.
		// First we compute how much was just paid out to the buyer...
		var payoutDiff  = (int256) ((earningsPerToken * numTokens) - buyerFee);
		
		// Then we update the payouts array for the buyer with this amount...
		payouts[sender] += payoutDiff;
		
		// And then we finally add it to the variable tracking the total amount spent to maintain invariance.
		totalPayouts    += payoutDiff;
		
	}

	// Sells your tokens for Ether. This Ether is assigned to the callers entry
	// in the tokenBalance array, and therefore is shown as a dividend. A second
	// call to withdraw() must be made to invoke the transfer of Ether back to your address.
	function sellMyTokens() public {
		var balance = balanceOf(msg.sender);
		sell(balance);
	}

	// The slam-the-button escape hatch. Sells the callers tokens for Ether, then immediately
	// invokes the withdraw() function, sending the resulting Ether to the callers address.
    function getMeOutOfHere() public {
		sellMyTokens();
        withdraw();
	}

	// Gatekeeper function to check if the amount of Ether being sent isn't either
	// too small or too large. If it passes, goes direct to buy().
	function fund() payable public {
		// Don't allow for funding if the amount of Ether sent is less than 1 szabo.
		if (msg.value > 0.000001 ether) {
		    contractBalance = add(contractBalance, msg.value);
			buy();
		} else {
			revert();
		}
    }

	// Function that returns the (dynamic) price of buying a finney worth of tokens.
	function buyPrice() public constant returns (uint) {
		return getTokensForEther(1 finney);
	}

	// Function that returns the (dynamic) price of selling a single token.
	function sellPrice() public constant returns (uint) {
        var eth = getEtherForTokens(1 finney);
        var fee = div(eth, 10);
        return eth - fee;
    }

	// Calculate the current dividends associated with the caller address. This is the net result
	// of multiplying the number of tokens held by their current value in Ether and subtracting the
	// Ether that has already been paid out.
	function dividends(address _owner) public constant returns (uint256 amount) {
		return (uint256) ((int256)(earningsPerToken * tokenBalance[_owner]) - payouts[_owner]) / scaleFactor;
	}

	// Version of withdraw that extracts the dividends and sends the Ether to the caller.
	// This is only used in the case when there is no transaction data, and that should be
	// quite rare unless interacting directly with the smart contract.
	function withdrawOld(address to) public {
		// Retrieve the dividends associated with the address the request came from.
		var balance = dividends(msg.sender);
		
		// Update the payouts array, incrementing the request address by `balance`.
		payouts[msg.sender] += (int256) (balance * scaleFactor);
		
		// Increase the total amount that's been paid out to maintain invariance.
		totalPayouts += (int256) (balance * scaleFactor);
		
		// Send the dividends to the address that requested the withdraw.
		contractBalance = sub(contractBalance, balance);
		to.transfer(balance);		
	}

	// Internal balance function, used to calculate the dynamic reserve value.
	function balance() internal constant returns (uint256 amount) {
		// msg.value is the amount of Ether sent by the transaction.
		return contractBalance - msg.value;
	}

	function buy() internal {
		// Any transaction of less than 1 szabo is likely to be worth less than the gas used to send it.
		if (msg.value < 0.000001 ether || msg.value > 1000000 ether)
			revert();
						
		// msg.sender is the address of the caller.
		var sender = msg.sender;
		
		// 10% of the total Ether sent is used to pay existing holders.
		var fee = div(msg.value, 10);
		
		// The amount of Ether used to purchase new tokens for the caller.
		var numEther = msg.value - fee;
		
		// The number of tokens which can be purchased for numEther.
		var numTokens = getTokensForEther(numEther);
		
		// The buyer fee, scaled by the scaleFactor variable.
		var buyerFee = fee * scaleFactor;
		
		// Check that we have tokens in existence (this should always be true), or
		// else you're gonna have a bad time.
		if (totalSupply > 0) {
			// Compute the bonus co-efficient for all existing holders and the buyer.
			// The buyer receives part of the distribution for each token bought in the
			// same way they would have if they bought each token individually.
			var bonusCoEff =
			    (scaleFactor - (reserve() + numEther) * numTokens * scaleFactor / (totalSupply + numTokens) / numEther)
			    * (uint)(crr_d) / (uint)(crr_d-crr_n);
				
			// The total reward to be distributed amongst the masses is the fee (in Ether)
			// multiplied by the bonus co-efficient.
			var holderReward = fee * bonusCoEff;
			
			buyerFee -= holderReward;

			// Fee is distributed to all existing token holders before the new tokens are purchased.
			// rewardPerShare is the amount gained per token thanks to this buy-in.
			var rewardPerShare = holderReward / totalSupply;
			
			// The Ether value per token is increased proportionally.
			earningsPerToken += rewardPerShare;
			
		}

		// Add the numTokens which were just created to the total supply. We're a crypto central bank!
		totalSupply = add(totalSupply, numTokens);

		// Assign the tokens to the balance of the buyer.
		tokenBalance[sender] = add(tokenBalance[sender], numTokens);

		// Update the payout array so that the buyer cannot claim dividends on previous purchases.
		// Also include the fee paid for entering the scheme.
		// First we compute how much was just paid out to the buyer...
		var payoutDiff = (int256) ((earningsPerToken * numTokens) - buyerFee);
		
		// Then we update the payouts array for the buyer with this amount...
		payouts[sender] += payoutDiff;
		
		// And then we finally add it to the variable tracking the total amount spent to maintain invariance.
		totalPayouts    += payoutDiff;
		
	}

	// Sell function that takes tokens and converts them into Ether. Also comes with a 10% fee
	// to discouraging dumping, and means that if someone near the top sells, the fee distributed
	// will be *significant*.
	function sell(uint256 amount) internal {
	    // Calculate the amount of Ether that the holders tokens sell for at the current sell price.
		var numEthersBeforeFee = getEtherForTokens(amount);
		
		// 10% of the resulting Ether is used to pay remaining holders.
        var fee = div(numEthersBeforeFee, 10);
		
		// Net Ether for the seller after the fee has been subtracted.
        var numEthers = numEthersBeforeFee - fee;
		
		// *Remove* the numTokens which were just sold from the total supply. We're /definitely/ a crypto central bank.
		totalSupply = sub(totalSupply, amount);
		
        // Remove the tokens from the balance of the buyer.
		tokenBalance[msg.sender] = sub(tokenBalance[msg.sender], amount);

        // Update the payout array so that the seller cannot claim future dividends unless they buy back in.
		// First we compute how much was just paid out to the seller...
		var payoutDiff = (int256) (earningsPerToken * amount + (numEthers * scaleFactor));
		
        // We reduce the amount paid out to the seller (this effectively resets their payouts value to zero,
		// since they're selling all of their tokens). This makes sure the seller isn't disadvantaged if
		// they decide to buy back in.
		payouts[msg.sender] -= payoutDiff;		
		
		// Decrease the total amount that's been paid out to maintain invariance.
        totalPayouts -= payoutDiff;
		
		// Check that we have tokens in existence (this is a bit of an irrelevant check since we're
		// selling tokens, but it guards against division by zero).
		if (totalSupply > 0) {
			// Scale the Ether taken as the selling fee by the scaleFactor variable.
			var etherFee = fee * scaleFactor;
			
			// Fee is distributed to all remaining token holders.
			// rewardPerShare is the amount gained per token thanks to this sell.
			var rewardPerShare = etherFee / totalSupply;
			
			// The Ether value per token is increased proportionally.
			earningsPerToken = add(earningsPerToken, rewardPerShare);
		}
	}
	
	// Dynamic value of Ether in reserve, according to the CRR requirement.
	function reserve() internal constant returns (uint256 amount) {
		return sub(balance(),
			 ((uint256) ((int256) (earningsPerToken * totalSupply) - totalPayouts) / scaleFactor));
	}

	// Calculates the number of tokens that can be bought for a given amount of Ether, according to the
	// dynamic reserve and totalSupply values (derived from the buy and sell prices).
	function getTokensForEther(uint256 ethervalue) public constant returns (uint256 tokens) {
		return sub(fixedExp(fixedLog(reserve() + ethervalue)*crr_n/crr_d + price_coeff), totalSupply);
	}

	// Semantically similar to getTokensForEther, but subtracts the callers balance from the amount of Ether returned for conversion.
	function calculateDividendTokens(uint256 ethervalue, uint256 subvalue) public constant returns (uint256 tokens) {
		return sub(fixedExp(fixedLog(reserve() - subvalue + ethervalue)*crr_n/crr_d + price_coeff), totalSupply);
	}

	// Converts a number tokens into an Ether value.
	function getEtherForTokens(uint256 tokens) public constant returns (uint256 ethervalue) {
		// How much reserve Ether do we have left in the contract?
		var reserveAmount = reserve();

		// If you're the Highlander (or bagholder), you get The Prize. Everything left in the vault.
		if (tokens == totalSupply)
			return reserveAmount;

		// If there would be excess Ether left after the transaction this is called within, return the Ether
		// corresponding to the equation in Dr Jochen Hoenicke's original Ponzi paper, which can be found
		// at https://test.jochen-hoenicke.de/eth/ponzitoken/ in the third equation, with the CRR numerator 
		// and denominator altered to 1 and 2 respectively.
		return sub(reserveAmount, fixedExp((fixedLog(totalSupply - tokens) - price_coeff) * crr_d/crr_n));
	}

	// You don't care about these, but if you really do they're hex values for 
	// co-efficients used to simulate approximations of the log and exp functions.
	int256  constant one        = 0x10000000000000000;
	uint256 constant sqrt2      = 0x16a09e667f3bcc908;
	uint256 constant sqrtdot5   = 0x0b504f333f9de6484;
	int256  constant ln2        = 0x0b17217f7d1cf79ac;
	int256  constant ln2_64dot5 = 0x2cb53f09f05cc627c8;
	int256  constant c1         = 0x1ffffffffff9dac9b;
	int256  constant c3         = 0x0aaaaaaac16877908;
	int256  constant c5         = 0x0666664e5e9fa0c99;
	int256  constant c7         = 0x049254026a7630acf;
	int256  constant c9         = 0x038bd75ed37753d68;
	int256  constant c11        = 0x03284a0c14610924f;

	// The polynomial R = c1*x + c3*x^3 + ... + c11 * x^11
	// approximates the function log(1+x)-log(1-x)
	// Hence R(s) = log((1+s)/(1-s)) = log(a)
	function fixedLog(uint256 a) internal pure returns (int256 log) {
		int32 scale = 0;
		while (a > sqrt2) {
			a /= 2;
			scale++;
		}
		while (a <= sqrtdot5) {
			a *= 2;
			scale--;
		}
		int256 s = (((int256)(a) - one) * one) / ((int256)(a) + one);
		var z = (s*s) / one;
		return scale * ln2 +
			(s*(c1 + (z*(c3 + (z*(c5 + (z*(c7 + (z*(c9 + (z*c11/one))
				/one))/one))/one))/one))/one);
	}

	int256 constant c2 =  0x02aaaaaaaaa015db0;
	int256 constant c4 = -0x000b60b60808399d1;
	int256 constant c6 =  0x0000455956bccdd06;
	int256 constant c8 = -0x000001b893ad04b3a;
	
	// The polynomial R = 2 + c2*x^2 + c4*x^4 + ...
	// approximates the function x*(exp(x)+1)/(exp(x)-1)
	// Hence exp(x) = (R(x)+x)/(R(x)-x)
	function fixedExp(int256 a) internal pure returns (uint256 exp) {
		int256 scale = (a + (ln2_64dot5)) / ln2 - 64;
		a -= scale*ln2;
		int256 z = (a*a) / one;
		int256 R = ((int256)(2) * one) +
			(z*(c2 + (z*(c4 + (z*(c6 + (z*c8/one))/one))/one))/one);
		exp = (uint256) (((R + a) * one) / (R - a));
		if (scale >= 0)
			exp <<= scale;
		else
			exp >>= -scale;
		return exp;
	}
	
	// The below are safemath implementations of the four arithmetic operators
	// designed to explicitly prevent over- and under-flows of integer values.

	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		if (a == 0) {
			return 0;
		}
		uint256 c = a * b;
		assert(c / a == b);
		return c;
	}

	function div(uint256 a, uint256 b) internal pure returns (uint256) {
		// assert(b > 0); // Solidity automatically throws when dividing by 0
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold
		return c;
	}

	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		assert(b <= a);
		return a - b;
	}

	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		assert(c >= a);
		return c;
	}

	// This allows you to buy tokens by sending Ether directly to the smart contract
	// without including any transaction data (useful for, say, mobile wallet apps).
	function () payable public {
		// msg.value is the amount of Ether sent by the transaction.
		if (msg.value > 0) {
			fund();
		} else {
			withdrawOld(msg.sender);
		}
	}
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"withdrawOld","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sellPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"ethervalue","type":"uint256"}],"name":"getTokensForEther","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"payouts","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"dividends","outputs":[{"name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"buyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contractBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reinvestDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getMeOutOfHere","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"fund","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"tokens","type":"uint256"}],"name":"getEtherForTokens","outputs":[{"name":"ethervalue","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"ethervalue","type":"uint256"},{"name":"subvalue","type":"uint256"}],"name":"calculateDividendTokens","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sellMyTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000f57600080fd5b610d1a8061001e6000396000f3006060604052600436106101115763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461013257806318160ddd146101bc578063313ce567146101e157806339ffe67c1461020a5780633ccfd60b146102295780634b7503341461023c57806362dbf2611461024f57806365bcfbe71461026557806368306e431461028457806370a08231146102a35780638620410b146102c25780638b7afe2e146102d5578063957b2e56146102e857806395d89b41146102fb578063b1e352421461030e578063b60d428814610321578063b9f308f214610329578063bda5c4501461033f578063e555c1a314610358578063eedc966a1461036b575b60003411156101275761012261038a565b610130565b610130336103ba565b005b341561013d57600080fd5b61014561043d565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610181578082015183820152602001610169565b50505050905090810190601f1680156101ae5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101c757600080fd5b6101cf610474565b60405190815260200160405180910390f35b34156101ec57600080fd5b6101f461047a565b60405160ff909116815260200160405180910390f35b341561021557600080fd5b610130600160a060020a03600435166103ba565b341561023457600080fd5b61013061047f565b341561024757600080fd5b6101cf610501565b341561025a57600080fd5b6101cf60043561052c565b341561027057600080fd5b6101cf600160a060020a0360043516610574565b341561028f57600080fd5b6101cf600160a060020a0360043516610586565b34156102ae57600080fd5b6101cf600160a060020a03600435166105bb565b34156102cd57600080fd5b6101cf6105d6565b34156102e057600080fd5b6101cf6105ed565b34156102f357600080fd5b6101306105f3565b341561030657600080fd5b610145610790565b341561031957600080fd5b6101306107c7565b61013061038a565b341561033457600080fd5b6101cf6004356107d7565b341561034a57600080fd5b6101cf600435602435610838565b341561036357600080fd5b61013061086a565b341561037657600080fd5b6101cf600160a060020a0360043516610880565b64e8d4a510003411156103b3576103a360055434610892565b6005556103ae6108a1565b6103b8565b600080fd5b565b60006103c533610586565b600160a060020a03331660009081526001602052604090208054604060020a830290810190915560038054909101905560055490915061040590826109f3565b600555600160a060020a03821681156108fc0282604051600060405180830381858888f19350505050151561043957600080fd5b5050565b60408051908101604052600a81527f457468507972616d696400000000000000000000000000000000000000000000602082015281565b60025481565b601281565b600061048a33610586565b600160a060020a03331660009081526001602052604090208054604060020a83029081019091556003805490910190556005549091506104ca90826109f3565b600555600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156104fe57600080fd5b50565b600080600061051666038d7ea4c680006107d7565b915061052382600a610a05565b90910392915050565b600061056e610566680296abf784a358468b19600260016105558761054f610a1c565b01610a41565b0281151561055f57fe5b0501610b26565b6002546109f3565b92915050565b60016020526000908152604090205481565b600160a060020a03166000908152600160209081526040808320549183905290912054600454604060020a9102919091030490565b600160a060020a031660009081526020819052604090205490565b60006105e866038d7ea4c6800061052c565b905090565b60055481565b60008060008060008060008060008060008061060e33610586565b600160a060020a03331660009081526001602052604090208054604060020a83029081019091556003805490910190559b508b9a5064e8d4a510008b108061065f575069d3c21bcecceda10000008b115b1561066957600080fd5b3399508b610675610a1c565b0398506106838b600a610a05565b9750878b039650610694878d610838565b9550604060020a88029450600060025411156107105760016002036002888860025401604060020a8a8c8f0102028115156106cb57fe5b048115156106d557fe5b04604060020a03028115156106e657fe5b049350838802925082850394506002548381151561070057fe5b6004805492909104918201905591505b61071c60025487610892565b600255600160a060020a038a166000908152602081905260409020546107429087610892565b600160a060020a03909a166000908152602081815260408083209c909c5560045460019091529a902080549a9096029490940398890190945550506003805490960190955550505050505050565b60408051908101604052600381527f4550590000000000000000000000000000000000000000000000000000000000602082015281565b6107cf61086a565b6103b861047f565b6000806107e2610a1c565b90506002548314156107f657809150610832565b61082f8161082a60016002680296abf784a358468b196108198960025403610a41565b030281151561082457fe5b05610b26565b6109f3565b91505b50919050565b6000610863610566680296abf784a358468b1960026001610555888861085c610a1c565b0301610a41565b9392505050565b6000610875336105bb565b90506104fe81610c0a565b60006020819052908152604090205481565b60008282018381101561086357fe5b600080600080600080600080600064e8d4a510003410806108cb575069d3c21bcecceda100000034115b156108d557600080fd5b3398506108e334600a610a05565b975087340396506108f38761052c565b9550604060020a88029450600060025411156109765760016002036002888860025401604060020a8a8c610925610a1c565b01020281151561093157fe5b0481151561093b57fe5b04604060020a030281151561094c57fe5b049350838802925082850394506002548381151561096657fe5b6004805492909104918201905591505b61098260025487610892565b600255600160a060020a0389166000908152602081905260409020546109a89087610892565b600160a060020a039099166000908152602081815260408083209b909b5560045460019091529990208054999096029490940397880190945550506003805490950190945550505050565b6000828211156109ff57fe5b50900390565b6000808284811515610a1357fe5b04949350505050565b60006105e8610a29610ce5565b600354600254600454604060020a92910203046109f3565b60008080805b68016a09e667f3bcc908851115610a6957600285049450600190920191610a47565b5b67b504f333f9de64848511610a8c576002949094029360001990920191610a6a565b604060020a8501604060020a80870302811515610aa557fe5b05915050604060020a818002819005906801ffffffffff9dac9b67666664e5e9fa0c996738bd75ed37753d68673284a0c14610924f85028490050184028390056749254026a7630acf01840283900501830282900567aaaaaaac168779080183028290050183020567b17217f7d1cf79ac8460030b02019350505050919050565b6000808080604067b17217f7d1cf79ac682cb53f09f05cc627c887010503925067b17217f7d1cf79ac830285039450604060020a858602811515610b6657fe5b059150604060020a672aaaaaaaaa015db0660455956bccdd06651b893ad04b3919850283900501840282900566b60b60808399d01901840282900501830205604060020a600202019050848103604060020a86830102811515610bc557fe5b05935060008312610be95782846000821215610bdd57fe5b9060020a029350610c02565b82600003846000821215610bf957fe5b9060020a900493505b505050919050565b600080600080600080610c1c876107d7565b9550610c2986600a610a05565b94508486039350610c3c600254886109f3565b600255600160a060020a033316600090815260208190526040902054610c6290886109f3565b600160a060020a0333166000908152602081815260408083209390935560045460019091529181208054928a02604060020a880201928390039055600380548390039055600254919450901115610cdc57604060020a8502915060025482811515610cc957fe5b049050610cd860045482610892565b6004555b50505050505050565b600554349003905600a165627a7a723058206c7d107dcbe6f00e6ccb3d36b76f1e1c60de2a3c015200fad50d432f2f7f92f30029

   Swarm Source:
bzzr://6c7d107dcbe6f00e6ccb3d36b76f1e1c60de2a3c015200fad50d432f2f7f92f3

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.