aboutsummaryrefslogtreecommitdiffstats
path: root/test/compilationTests/zeppelin/crowdsale/Crowdsale.sol
diff options
context:
space:
mode:
Diffstat (limited to 'test/compilationTests/zeppelin/crowdsale/Crowdsale.sol')
-rw-r--r--test/compilationTests/zeppelin/crowdsale/Crowdsale.sol108
1 files changed, 108 insertions, 0 deletions
diff --git a/test/compilationTests/zeppelin/crowdsale/Crowdsale.sol b/test/compilationTests/zeppelin/crowdsale/Crowdsale.sol
new file mode 100644
index 00000000..bee1efd2
--- /dev/null
+++ b/test/compilationTests/zeppelin/crowdsale/Crowdsale.sol
@@ -0,0 +1,108 @@
+pragma solidity ^0.4.11;
+
+import '../token/MintableToken.sol';
+import '../math/SafeMath.sol';
+
+/**
+ * @title Crowdsale
+ * @dev Crowdsale is a base contract for managing a token crowdsale.
+ * Crowdsales have a start and end block, where investors can make
+ * token purchases and the crowdsale will assign them tokens based
+ * on a token per ETH rate. Funds collected are forwarded to a wallet
+ * as they arrive.
+ */
+contract Crowdsale {
+ using SafeMath for uint256;
+
+ // The token being sold
+ MintableToken public token;
+
+ // start and end block where investments are allowed (both inclusive)
+ uint256 public startBlock;
+ uint256 public endBlock;
+
+ // address where funds are collected
+ address public wallet;
+
+ // how many token units a buyer gets per wei
+ uint256 public rate;
+
+ // amount of raised money in wei
+ uint256 public weiRaised;
+
+ /**
+ * event for token purchase logging
+ * @param purchaser who paid for the tokens
+ * @param beneficiary who got the tokens
+ * @param value weis paid for purchase
+ * @param amount amount of tokens purchased
+ */
+ event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);
+
+
+ function Crowdsale(uint256 _startBlock, uint256 _endBlock, uint256 _rate, address _wallet) {
+ require(_startBlock >= block.number);
+ require(_endBlock >= _startBlock);
+ require(_rate > 0);
+ require(_wallet != 0x0);
+
+ token = createTokenContract();
+ startBlock = _startBlock;
+ endBlock = _endBlock;
+ rate = _rate;
+ wallet = _wallet;
+ }
+
+ // creates the token to be sold.
+ // override this method to have crowdsale of a specific mintable token.
+ function createTokenContract() internal returns (MintableToken) {
+ return new MintableToken();
+ }
+
+
+ // fallback function can be used to buy tokens
+ function () payable {
+ buyTokens(msg.sender);
+ }
+
+ // low level token purchase function
+ function buyTokens(address beneficiary) payable {
+ require(beneficiary != 0x0);
+ require(validPurchase());
+
+ uint256 weiAmount = msg.value;
+ uint256 updatedWeiRaised = weiRaised.add(weiAmount);
+
+ // calculate token amount to be created
+ uint256 tokens = weiAmount.mul(rate);
+
+ // update state
+ weiRaised = updatedWeiRaised;
+
+ token.mint(beneficiary, tokens);
+ TokenPurchase(msg.sender, beneficiary, weiAmount, tokens);
+
+ forwardFunds();
+ }
+
+ // send ether to the fund collection wallet
+ // override to create custom fund forwarding mechanisms
+ function forwardFunds() internal {
+ wallet.transfer(msg.value);
+ }
+
+ // @return true if the transaction can buy tokens
+ function validPurchase() internal constant returns (bool) {
+ uint256 current = block.number;
+ bool withinPeriod = current >= startBlock && current <= endBlock;
+ bool nonZeroPurchase = msg.value != 0;
+ return withinPeriod && nonZeroPurchase;
+ }
+
+ // @return true if crowdsale event has ended
+ function hasEnded() public constant returns (bool) {
+ return block.number > endBlock;
+ }
+
+
+}