Sponsored Link:   Color - Revolutionizing the Dapp Ecosystem, Bounty & Airdrop, Get 240,000 COL NOW!
Contract Overview
Balance: 0.717210111768918171 Ether
Ether Value: $361.57 (@ $504.14/ETH)
Transactions: 49 txns
Token Contract: EthPyramid (EPY)
Misc
Address Watch: Add To Watch List
Contract Creator: 0xfaeeb28890c14f45e68a62e2e29b1b1e8d41c950at txn 0x2601b7ad3ebec80f3bd05d141217f88ce9a4a465568bbf838bff400bef138e5b
Token Balances:
 Latest 25 txns from a total Of 49 transactions

TxHash Age From To Value [TxFee]
0x5205f42f5f11c9d9ee0a7372885677ea015783ce741c8409004751f1817793fc9 days 5 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.00062555
0x98037254b06b6a12abb45b5e049bbd50e8985106f811cc7be611a858c8c1349e14 days 23 hrs ago0x7e06af48b46a6c4c2ce5df9a7df8eb045471f9bc  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000642978
0x72aa707bbe3eafcd97095390306584347d0bba43124f34379c873a5af6c6227f27 days 1 hr ago0xb7b34a0a8a2ad8c01124f2fb8456d18745d21b24  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000045927
0xe329b662609038d97805f6543e93c3d1489452336030a3d1a537ec27e348fd3e27 days 1 hr ago0xb7b34a0a8a2ad8c01124f2fb8456d18745d21b24  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000038153
0x7d2d1e098719610f01a32163d2e2c07bc9815f94ec3bb273d953ba51efd51a7940 days 15 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.00075066
0xd90b03ef49c0375d98fdfda7d624d9a8049de8c9c58606575b055d0a0a381dc944 days 2 hrs ago0x05384a688f405db8b5b687fd3abf1ed62dba0327  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000187665
0x2ada028391935692f452a92d2c851075beb9afc2813a73d80ef23b7e061c49de48 days 8 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0.1 Ether0.00148362
0xc27fc03a44686f9eef4e16023fca1977a073110c41f599f4f0c5d393963433ff49 days 3 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.00062555
0x42aa0b438db97b337606c9669b65481eb01bca352eb0ce80c52b54235c26fa0b52 days 4 hrs ago0x391a3ea52c4a9f04be6900c3fd057dd9676c72e1  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.00025022
0x9788474856a662f4a7335bf7eea413df46343f3f6da6e34a328b1906c05bdb8e52 days 14 hrs ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.00062555
0x34836dff36b980367f39eaf4818d87c3cde1878a22b0a9e024111b11b6ef7c9b54 days 4 hrs ago0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000413343
0x34d7a1681fb1d3cce3192a00ff408ec3ebd60ba003d7509dc422567bd13a78fc54 days 10 hrs ago0x3d2084d65cd56583aaf306e38db432a399b34b63  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000921115
0x95187172e9be439878aebc6b16539d1a76b136cfa561e9959f2936ecdb4f05ca54 days 10 hrs ago0x3d2084d65cd56583aaf306e38db432a399b34b63  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000813215
0x5b7ee34b623169456644512446b715558ab7969c2e903808f6ecc4027d6911a370 days 10 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0.0034085 Ether0.000236724
0x0fd781084b35eed6c76d3e170dbd30f8cd5b9f76ed8d21a91d5a55c29dca432073 days 1 hr ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.00012511
0x9e401e3ab2524ea98761cee94dabea022a279252e8ba0864f635ab2d07ee936475 days 6 hrs ago0x341c48c0e833e179cca6c605b823e9a4911a3d00  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000137781
0x0ff10b6fb0f84b0ddb1392d8d2c63964cf376a0f3c3cc53bc70c311938d8969884 days 2 hrs ago0x415e94a5246ac4d3f16a833f51ff9066f215a421  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000045927
0x91d7c96070098dd6f22edf7ee51ba873d00c653db4191e4e627832f61f9c156784 days 14 hrs ago0xab8c5c034f1cd123c62413a88ef3ada2d90f68c5  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.00012511
0x5adcb245e6bbb4bae400c464e04c8c102781825952a5c383b20ec2dc7647b18d85 days 17 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0.003246 Ether0.000059109
0xdf30d31dd1491e71c028792b7e7143cb8a24f602cce9e13cb9bca2514e7e560689 days 12 hrs ago0x361084af8d45e07885b31fcedcb642b9cc7b72d7  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0.00195 Ether0.000236436
0x93a9ee1262d2a0dbcadc4b2d29f90893a43d10a283591ca54c0abe0cc2cc2fe394 days 18 hrs ago0xaec539a116fa75e8bdcf016d3c146a25bc1af93b  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000065369
0x0b8974e0322469e19eb0204130c6a45d7449f3d68927b0c32581d581cffcb7bf94 days 20 hrs ago0x999fe41174df4a6e311da87d2def232fd389b654  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.00012511
0x532762b7e5b342ca0885f31f321d79d28651e70bf5cceba664798d843236dab695 days 4 hrs ago0xd52c9c3b7c03719d6cc4c357df907749f24292e0  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000070855
0x8bd3ac305ae2f006d810daf249347014758c832bbcb97d97f7ccadc2fe3f5f9295 days 4 hrs ago0xd52c9c3b7c03719d6cc4c357df907749f24292e0  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.000062555
0x7b8861fd1c9242c2d180e8ece455b4cc1d9e88eb4ae033e8a89d85bbc08a06b495 days 9 hrs ago0x3258f084419f70219b9e3bc0ae3e6f64b577e52b  IN   0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0 Ether0.0000688105
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 20 Internal Transactions

ParentTxHash Block Age From To Value
0x5205f42f5f11c9d9ee0a7372885677ea015783ce741c8409004751f1817793fc59288499 days 5 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x415e94a5246ac4d3f16a833f51ff9066f215a4210.004659555223164952 Ether
0x98037254b06b6a12abb45b5e049bbd50e8985106f811cc7be611a858c8c1349e589555414 days 23 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x7e06af48b46a6c4c2ce5df9a7df8eb045471f9bc0.00008321711169489 Ether
0x72aa707bbe3eafcd97095390306584347d0bba43124f34379c873a5af6c6227f582510427 days 1 hr ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0xb7b34a0a8a2ad8c01124f2fb8456d18745d21b240.001293573980384532 Ether
0x7d2d1e098719610f01a32163d2e2c07bc9815f94ec3bb273d953ba51efd51a79574699440 days 15 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x361084af8d45e07885b31fcedcb642b9cc7b72d70.006823726657535584 Ether
0xd90b03ef49c0375d98fdfda7d624d9a8049de8c9c58606575b055d0a0a381dc9572746144 days 2 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x05384a688f405db8b5b687fd3abf1ed62dba03270.008923921819573464 Ether
0xc27fc03a44686f9eef4e16023fca1977a073110c41f599f4f0c5d393963433ff569901049 days 3 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.134199696910442123 Ether
0x42aa0b438db97b337606c9669b65481eb01bca352eb0ce80c52b54235c26fa0b568177052 days 4 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x391a3ea52c4a9f04be6900c3fd057dd9676c72e10.008253530169167599 Ether
0x9788474856a662f4a7335bf7eea413df46343f3f6da6e34a328b1906c05bdb8e567949552 days 14 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x341c48c0e833e179cca6c605b823e9a4911a3d000.029008864060101033 Ether
0x34836dff36b980367f39eaf4818d87c3cde1878a22b0a9e024111b11b6ef7c9b567038454 days 4 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x3e9f41ac3068bbb232dc422ec9d2857866b24c3d0.009046590209883394 Ether
0x95187172e9be439878aebc6b16539d1a76b136cfa561e9959f2936ecdb4f05ca566913554 days 10 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x3d2084d65cd56583aaf306e38db432a399b34b630.09142230460855731 Ether
0x0fd781084b35eed6c76d3e170dbd30f8cd5b9f76ed8d21a91d5a55c29dca4320556303073 days 1 hr ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0xaec539a116fa75e8bdcf016d3c146a25bc1af93b0.103738146529692638 Ether
0x9e401e3ab2524ea98761cee94dabea022a279252e8ba0864f635ab2d07ee9364555039875 days 6 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x341c48c0e833e179cca6c605b823e9a4911a3d000.002282151653577865 Ether
0x0ff10b6fb0f84b0ddb1392d8d2c63964cf376a0f3c3cc53bc70c311938d89698549973884 days 2 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x415e94a5246ac4d3f16a833f51ff9066f215a4210.000395466641362816 Ether
0x91d7c96070098dd6f22edf7ee51ba873d00c653db4191e4e627832f61f9c1567549685184 days 14 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0xab8c5c034f1cd123c62413a88ef3ada2d90f68c50.023092690171552936 Ether
0x0b8974e0322469e19eb0204130c6a45d7449f3d68927b0c32581d581cffcb7bf543698594 days 20 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x999fe41174df4a6e311da87d2def232fd389b6540.076054372232104241 Ether
0x8bd3ac305ae2f006d810daf249347014758c832bbcb97d97f7ccadc2fe3f5f92543496095 days 4 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0xd52c9c3b7c03719d6cc4c357df907749f24292e00.127595210134127913 Ether
0x7b8861fd1c9242c2d180e8ece455b4cc1d9e88eb4ae033e8a89d85bbc08a06b4543368895 days 9 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x3258f084419f70219b9e3bc0ae3e6f64b577e52b0.010433403951413109 Ether
0xc13d01b4a9e8f8930b6fecfc6361b18ece7a4c3b019b198a4d548ee2f92eba905350987109 days 3 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x9afda2dd29775559f42833302feb357b0cf33f970.016212870545852688 Ether
0x93b4be3f480057ed53e63f9720436862d53d916dd601b56a84829d554c004f545068626156 days 21 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x5e79ec5eb679cea45be3392381f4637fe1eb6e620.000810045004511956 Ether
0x2ed5d2946bbf124086c1825dec0e4f14685ce9c82a8f69aa4c18462edf57287e5027816163 days 17 hrs ago0x5037c9fbfccbbb8409157d72cb9579ac3d05661e0x5f8568ad07413eb409247ee2a31c33c0ce82f19d0.008104950616380786 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.