Sponsored Link:   Learn and build dApps today without code using Crowd Machine's Crowd App Studio.
Contract Overview
Balance: 0.281191131577419412 Ether
Ether Value: $132.62 (@ $471.63/ETH)
Transactions: 452 txns
Token Contract: EthPyramid (EPY)
 Latest 25 txns from a total Of 452 transactions

TxHash Age From To Value [TxFee]
0x3795b9ebe678b219f5b5d9baf29406551de07edc96cbd8e26138d495b2aa648f10 days 7 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00062699
0xb18d76bb8abfb32c43c39def3c6e646dea7c351fc4d96c7cf2cc314a0b84d15127 days 4 hrs ago0x53cd39080ee226a339362c44128bf272d528c1a7  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000125398
0x1e0ba862859019384152020e0d8ce3c0bb0158eae222ac65d5154e3cca5eb1cc39 days 1 hr ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000117681
0x4713083a2318942efd547b77bcbee763a5d8dff275ac6ee2ff0b6c8b7a0657a339 days 2 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.0001148175
0x749be7b3de0c02f7553e22cb6049f01fcc228b4d1e56378be81b57c6f1050a5a41 days 16 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000751524
0x9ddab7297de9d245e8f6edf7e06ddd2f1ebf75cf66d2dd0bb32aff98aaa3510742 days 14 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000367416
0x5c53950fe6150ec15f8941daecd6e9e765d2f8d2034cf53f680fbb9a0aca989544 days 1 hr ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000313135
0x2d190d98733748e00c0920249545c50bde27de4d3e237a1e1da8377ce08d6b8e45 days 26 mins ago0x263b604509d6a825719859ee458b2d91fb7d330d  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00037533
0xf072254cf6f1a7198f3c1338fc062a49af51847556ab311789604bfbc61e0e3845 days 4 hrs ago0x05384a688f405db8b5b687fd3abf1ed62dba0327  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000187665
0xcb2eef8adbafdc20ff21066fea20899c85fdb3fb2ee8a2a5257d036d027a385145 days 8 hrs ago0x1db4408590fcda32928030e5ef2e8f2b04388b44  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00037533
0xa1869af8e4d4ad1269dbdd819ae7e25413bd442c5d37c07cd7e7d1d87fff3aa949 days 3 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.0003720087
0x71feadd4af6bb5d867fa8a95a0211e5a259515bfbf29e51c4ac22268e62afed149 days 10 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640.1 Ether0.00148362
0xb673c8fc83bfd6619d9b5255076a97f791998c44fb89060a787c13f0c8c8d6d850 days 5 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00062555
0x303cc25ad96640c1456a08105ba5f7545c52eff1ff48be9dcaced60fdd3d83db51 days 7 mins ago0xf7b73d3e19f9642a33116cf0aa004e4627da1567  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.0003815855
0xbbef8e6f356c886f7bf16da456755b500d1c732e07324dca21370f0d8e7135a752 days 23 hrs ago0x1db4408590fcda32928030e5ef2e8f2b04388b44  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.0001010394
0x31e2b4381ac8f1a99b8cfaaeeffd1f3eb0d867aab8ec3806edc39ddb3398f08853 days 7 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00025022
0x112df39a287d57a5012f226da924b3cc40cb7541d189d4a91c9b119f7f06666253 days 15 hrs ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00062555
0x0fb3f16775a382ecf6112c9208e980e803cec8da9bc87bb53e6afa936005bc5f54 days 9 hrs ago0x123085670e817602041e58febb243abe01a9a825  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.00062555
0x8d5582a608d1e1c2976d1b9e4d9927a71a1b712b52840db1a9df47ea55444d3a55 days 3 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000321489
0xf3db9a1be025015b7874137014f41ed555ebe99d9107a36872a1267f2900de8455 days 6 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000413343
0xb66d1b32165a2afed98e4c78fa5557e912ab815864190d983eee685b82be692f55 days 11 hrs ago0xd477104699fb687a81bb2dd607b0bb0d1c729cd3  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000813215
0x1f211a48ac3b7df894c586ad204191d52116d4e157cf68531a6a83aead833d6b55 days 11 hrs ago0x3d2084d65cd56583aaf306e38db432a399b34b63  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000813215
0x862edcc63141bd0fb6b48165c46c86c39c339a1cc697d32b7ecadb7cf1dee70855 days 11 hrs ago0x543239e7407bf2755099d8d892260eb1ec288008  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000812279
0xfff3111a450e43c17a1b92175343beb0a5539fb2edb10b40e430431849837d9f55 days 12 hrs ago0x8586107f0338099ec5fb86b680929965e92368a9  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000687313
0x6761cbc91e9c4cc298f272d21cdf8578a0ca79a8114b1678bf80a1821148f3ff55 days 12 hrs ago0x868234b7ce5793279c7b5258410acd894c95f41f  IN   0xa9e20fdd18c792f302e273b09aa142984f25ea640 Ether0.000778613
[ 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
0x3795b9ebe678b219f5b5d9baf29406551de07edc96cbd8e26138d495b2aa648f592880910 days 7 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x415e94a5246ac4d3f16a833f51ff9066f215a4210.008298356824345882 Ether
0xb18d76bb8abfb32c43c39def3c6e646dea7c351fc4d96c7cf2cc314a0b84d151583063127 days 4 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x53cd39080ee226a339362c44128bf272d528c1a70.091876259340172678 Ether
0x4713083a2318942efd547b77bcbee763a5d8dff275ac6ee2ff0b6c8b7a0657a3576167939 days 2 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x415e94a5246ac4d3f16a833f51ff9066f215a4210.001493035128949223 Ether
0x749be7b3de0c02f7553e22cb6049f01fcc228b4d1e56378be81b57c6f1050a5a574704541 days 16 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x361084af8d45e07885b31fcedcb642b9cc7b72d70.004205426665505121 Ether
0x9ddab7297de9d245e8f6edf7e06ddd2f1ebf75cf66d2dd0bb32aff98aaa35107574183342 days 14 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x361084af8d45e07885b31fcedcb642b9cc7b72d70.004871933243877039 Ether
0x5c53950fe6150ec15f8941daecd6e9e765d2f8d2034cf53f680fbb9a0aca9895573362244 days 1 hr ago0xa9e20fdd18c792f302e273b09aa142984f25ea640xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.297104019301809381 Ether
0x2d190d98733748e00c0920249545c50bde27de4d3e237a1e1da8377ce08d6b8e572824545 days 26 mins ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x263b604509d6a825719859ee458b2d91fb7d330d0.006861559395109407 Ether
0xf072254cf6f1a7198f3c1338fc062a49af51847556ab311789604bfbc61e0e38572741145 days 4 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x05384a688f405db8b5b687fd3abf1ed62dba03270.091858774648763411 Ether
0xcb2eef8adbafdc20ff21066fea20899c85fdb3fb2ee8a2a5257d036d027a3851572638745 days 8 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x1db4408590fcda32928030e5ef2e8f2b04388b440.039634974568804212 Ether
0xa1869af8e4d4ad1269dbdd819ae7e25413bd442c5d37c07cd7e7d1d87fff3aa9570512349 days 3 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x415e94a5246ac4d3f16a833f51ff9066f215a4210.004930112722736317 Ether
0xb673c8fc83bfd6619d9b5255076a97f791998c44fb89060a787c13f0c8c8d6d8569905550 days 5 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.162284825558795637 Ether
0x303cc25ad96640c1456a08105ba5f7545c52eff1ff48be9dcaced60fdd3d83db569458151 days 7 mins ago0xa9e20fdd18c792f302e273b09aa142984f25ea640xf7b73d3e19f9642a33116cf0aa004e4627da15670.008551882754968537 Ether
0xbbef8e6f356c886f7bf16da456755b500d1c732e07324dca21370f0d8e7135a7568327552 days 23 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x1db4408590fcda32928030e5ef2e8f2b04388b440.007646473867413746 Ether
0x31e2b4381ac8f1a99b8cfaaeeffd1f3eb0d867aab8ec3806edc39ddb3398f088568147053 days 7 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.305021294711982004 Ether
0x112df39a287d57a5012f226da924b3cc40cb7541d189d4a91c9b119f7f066662567951453 days 15 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x341c48c0e833e179cca6c605b823e9a4911a3d000.110291300535983171 Ether
0x0fb3f16775a382ecf6112c9208e980e803cec8da9bc87bb53e6afa936005bc5f567524454 days 9 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x123085670e817602041e58febb243abe01a9a8250.024413055144146941 Ether
0x8d5582a608d1e1c2976d1b9e4d9927a71a1b712b52840db1a9df47ea55444d3a567119455 days 3 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.055450499053089622 Ether
0xf3db9a1be025015b7874137014f41ed555ebe99d9107a36872a1267f2900de84567035055 days 6 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.02264683349088321 Ether
0xb66d1b32165a2afed98e4c78fa5557e912ab815864190d983eee685b82be692f566917855 days 11 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640xd477104699fb687a81bb2dd607b0bb0d1c729cd30.051673309804703664 Ether
0x1f211a48ac3b7df894c586ad204191d52116d4e157cf68531a6a83aead833d6b566912855 days 11 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x3d2084d65cd56583aaf306e38db432a399b34b630.978658413182047848 Ether
0x862edcc63141bd0fb6b48165c46c86c39c339a1cc697d32b7ecadb7cf1dee708566909655 days 11 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x543239e7407bf2755099d8d892260eb1ec2880081.071257093666869512 Ether
0xfff3111a450e43c17a1b92175343beb0a5539fb2edb10b40e430431849837d9f566908055 days 12 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x8586107f0338099ec5fb86b680929965e92368a90.113802676666764479 Ether
0xd00246455cbec4c2becd93e48b017e1987bf2efacf3785720bfee2676d0dd367566907055 days 12 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x868234b7ce5793279c7b5258410acd894c95f41f0.116086999857984955 Ether
0x20cb9ae2c1bbc3a15b5e565a41523d78eb30e5a4e87352a57a8d57124f620c3b563029962 days 9 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.01174830577444722 Ether
0x267a877ab36e157f93dd31bef18a75c9c011ec5e64d3556895ae54f54354bb31561449365 days 4 hrs ago0xa9e20fdd18c792f302e273b09aa142984f25ea640xb9cc1875eec851548cb7eca33ecc643fce9d44e30.197988554813601015 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.