Contract Overview
Balance: 0.218956230218696832 Ether
Ether Value: $32.40 (@ $147.98/ETH)
Transactions: 454 txns
Token Tracker: EthPyramid (EPY)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x0070eaaa4a0ddf3b57bffbd032d712d26bb0fbf3at txn 0x39064cc5288aa0aae19893b747a682806872e3cb21d061a47ff085d1cf90f87c
Token Balance:
 Latest 25 transactions from a total of 454 transactions

TxHash Age From To Value [TxFee]
0xe4db77a597d778008183664bd7fd3c65fccd000ad9743d31bf0c298e5df018ac56 days 6 hrs ago0x894bcd33b13c2c521913b634d92efa01d7b32970  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.0003385746
0x40c037654c5c174bfbec326dff0feab5ff2111a550de6539eedfb87bb590edda115 days 4 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000062699
0x3795b9ebe678b219f5b5d9baf29406551de07edc96cbd8e26138d495b2aa648f134 days 4 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00062699
0xb18d76bb8abfb32c43c39def3c6e646dea7c351fc4d96c7cf2cc314a0b84d151151 days 1 hr ago0x53cd39080ee226a339362c44128bf272d528c1a7  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000125398
0x1e0ba862859019384152020e0d8ce3c0bb0158eae222ac65d5154e3cca5eb1cc162 days 22 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000117681
0x4713083a2318942efd547b77bcbee763a5d8dff275ac6ee2ff0b6c8b7a0657a3162 days 22 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.0001148175
0x749be7b3de0c02f7553e22cb6049f01fcc228b4d1e56378be81b57c6f1050a5a165 days 12 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000751524
0x9ddab7297de9d245e8f6edf7e06ddd2f1ebf75cf66d2dd0bb32aff98aaa35107166 days 11 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000367416
0x5c53950fe6150ec15f8941daecd6e9e765d2f8d2034cf53f680fbb9a0aca9895167 days 22 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000313135
0x2d190d98733748e00c0920249545c50bde27de4d3e237a1e1da8377ce08d6b8e168 days 20 hrs ago0x263b604509d6a825719859ee458b2d91fb7d330d  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00037533
0xf072254cf6f1a7198f3c1338fc062a49af51847556ab311789604bfbc61e0e38169 days 36 mins ago0x05384a688f405db8b5b687fd3abf1ed62dba0327  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000187665
0xcb2eef8adbafdc20ff21066fea20899c85fdb3fb2ee8a2a5257d036d027a3851169 days 4 hrs ago0x1db4408590fcda32928030e5ef2e8f2b04388b44  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00037533
0xa1869af8e4d4ad1269dbdd819ae7e25413bd442c5d37c07cd7e7d1d87fff3aa9172 days 23 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.0003720087
0x71feadd4af6bb5d867fa8a95a0211e5a259515bfbf29e51c4ac22268e62afed1173 days 6 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640.1 Ether0.00148362
0xb673c8fc83bfd6619d9b5255076a97f791998c44fb89060a787c13f0c8c8d6d8174 days 1 hr ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00062555
0x303cc25ad96640c1456a08105ba5f7545c52eff1ff48be9dcaced60fdd3d83db174 days 20 hrs ago0xf7b73d3e19f9642a33116cf0aa004e4627da1567  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.0003815855
0xbbef8e6f356c886f7bf16da456755b500d1c732e07324dca21370f0d8e7135a7176 days 20 hrs ago0x1db4408590fcda32928030e5ef2e8f2b04388b44  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.0001010394
0x31e2b4381ac8f1a99b8cfaaeeffd1f3eb0d867aab8ec3806edc39ddb3398f088177 days 4 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00025022
0x112df39a287d57a5012f226da924b3cc40cb7541d189d4a91c9b119f7f066662177 days 12 hrs ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00062555
0x0fb3f16775a382ecf6112c9208e980e803cec8da9bc87bb53e6afa936005bc5f178 days 6 hrs ago0x123085670e817602041e58febb243abe01a9a825  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00062555
0x8d5582a608d1e1c2976d1b9e4d9927a71a1b712b52840db1a9df47ea55444d3a178 days 23 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000321489
0xf3db9a1be025015b7874137014f41ed555ebe99d9107a36872a1267f2900de84179 days 3 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000413343
0xb66d1b32165a2afed98e4c78fa5557e912ab815864190d983eee685b82be692f179 days 8 hrs ago0xd477104699fb687a81bb2dd607b0bb0d1c729cd3  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000813215
0x1f211a48ac3b7df894c586ad204191d52116d4e157cf68531a6a83aead833d6b179 days 8 hrs ago0x3d2084d65cd56583aaf306e38db432a399b34b63  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000813215
0x862edcc63141bd0fb6b48165c46c86c39c339a1cc697d32b7ecadb7cf1dee708179 days 8 hrs ago0x543239e7407bf2755099d8d892260eb1ec288008  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000812279
[ 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
0xe4db77a597d778008183664bd7fd3c65fccd000ad9743d31bf0c298e5df018ac639164356 days 6 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x894bcd33b13c2c521913b634d92efa01d7b329700.025892427461809083 Ether
0x40c037654c5c174bfbec326dff0feab5ff2111a550de6539eedfb87bb590edda6040695115 days 4 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.036342473896913497 Ether
0x3795b9ebe678b219f5b5d9baf29406551de07edc96cbd8e26138d495b2aa648f5928809134 days 4 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x415e94a5246ac4d3f16a833f51ff9066f215a4210.008298356824345882 Ether
0xb18d76bb8abfb32c43c39def3c6e646dea7c351fc4d96c7cf2cc314a0b84d1515830631151 days 1 hr ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x53cd39080ee226a339362c44128bf272d528c1a70.091876259340172678 Ether
0x4713083a2318942efd547b77bcbee763a5d8dff275ac6ee2ff0b6c8b7a0657a35761679162 days 22 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x415e94a5246ac4d3f16a833f51ff9066f215a4210.001493035128949223 Ether
0x749be7b3de0c02f7553e22cb6049f01fcc228b4d1e56378be81b57c6f1050a5a5747045165 days 12 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x361084af8d45e07885b31fcedcb642b9cc7b72d70.004205426665505121 Ether
0x9ddab7297de9d245e8f6edf7e06ddd2f1ebf75cf66d2dd0bb32aff98aaa351075741833166 days 11 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x361084af8d45e07885b31fcedcb642b9cc7b72d70.004871933243877039 Ether
0x5c53950fe6150ec15f8941daecd6e9e765d2f8d2034cf53f680fbb9a0aca98955733622167 days 22 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.297104019301809381 Ether
0x2d190d98733748e00c0920249545c50bde27de4d3e237a1e1da8377ce08d6b8e5728245168 days 20 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x263b604509d6a825719859ee458b2d91fb7d330d0.006861559395109407 Ether
0xf072254cf6f1a7198f3c1338fc062a49af51847556ab311789604bfbc61e0e385727411169 days 36 mins ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x05384a688f405db8b5b687fd3abf1ed62dba03270.091858774648763411 Ether
0xcb2eef8adbafdc20ff21066fea20899c85fdb3fb2ee8a2a5257d036d027a38515726387169 days 4 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x1db4408590fcda32928030e5ef2e8f2b04388b440.039634974568804212 Ether
0xa1869af8e4d4ad1269dbdd819ae7e25413bd442c5d37c07cd7e7d1d87fff3aa95705123172 days 23 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x415e94a5246ac4d3f16a833f51ff9066f215a4210.004930112722736317 Ether
0xb673c8fc83bfd6619d9b5255076a97f791998c44fb89060a787c13f0c8c8d6d85699055174 days 1 hr ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.162284825558795637 Ether
0x303cc25ad96640c1456a08105ba5f7545c52eff1ff48be9dcaced60fdd3d83db5694581174 days 20 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640xf7b73d3e19f9642a33116cf0aa004e4627da15670.008551882754968537 Ether
0xbbef8e6f356c886f7bf16da456755b500d1c732e07324dca21370f0d8e7135a75683275176 days 20 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x1db4408590fcda32928030e5ef2e8f2b04388b440.007646473867413746 Ether
0x31e2b4381ac8f1a99b8cfaaeeffd1f3eb0d867aab8ec3806edc39ddb3398f0885681470177 days 4 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.305021294711982004 Ether
0x112df39a287d57a5012f226da924b3cc40cb7541d189d4a91c9b119f7f0666625679514177 days 12 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x341c48c0e833e179cca6c605b823e9a4911a3d000.110291300535983171 Ether
0x0fb3f16775a382ecf6112c9208e980e803cec8da9bc87bb53e6afa936005bc5f5675244178 days 6 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x123085670e817602041e58febb243abe01a9a8250.024413055144146941 Ether
0x8d5582a608d1e1c2976d1b9e4d9927a71a1b712b52840db1a9df47ea55444d3a5671194178 days 23 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.055450499053089622 Ether
0xf3db9a1be025015b7874137014f41ed555ebe99d9107a36872a1267f2900de845670350179 days 3 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.02264683349088321 Ether
0xb66d1b32165a2afed98e4c78fa5557e912ab815864190d983eee685b82be692f5669178179 days 8 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640xd477104699fb687a81bb2dd607b0bb0d1c729cd30.051673309804703664 Ether
0x1f211a48ac3b7df894c586ad204191d52116d4e157cf68531a6a83aead833d6b5669128179 days 8 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x3d2084d65cd56583aaf306e38db432a399b34b630.978658413182047848 Ether
0x862edcc63141bd0fb6b48165c46c86c39c339a1cc697d32b7ecadb7cf1dee7085669096179 days 8 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x543239e7407bf2755099d8d892260eb1ec2880081.071257093666869512 Ether
0xfff3111a450e43c17a1b92175343beb0a5539fb2edb10b40e430431849837d9f5669080179 days 8 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x8586107f0338099ec5fb86b680929965e92368a90.113802676666764479 Ether
0xd00246455cbec4c2becd93e48b017e1987bf2efacf3785720bfee2676d0dd3675669070179 days 8 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x868234b7ce5793279c7b5258410acd894c95f41f0.116086999857984955 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Similar Match)
Note: Displaying Similar Match Verified Source Code At Contract 0xc908a34165d2720d12ffcfb6b99b47161b1c9946(Excluding Constructor Arguments if_any)
Contract Name: EthPyramid
Compiler Text: 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 transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.