|
@@ -0,0 +1,48 @@
|
|
|
+pragma solidity ^0.4.11;
|
|
|
+
|
|
|
+import "../crowdsale/CappedCrowdsale.sol";
|
|
|
+import "../crowdsale/RefundableCrowdsale.sol";
|
|
|
+import "../token/MintableToken.sol";
|
|
|
+
|
|
|
+/**
|
|
|
+ * @title SampleCrowdsaleToken
|
|
|
+ * @dev Very simple ERC20 Token that can be minted.
|
|
|
+ * It is meant to be used in a crowdsale contract.
|
|
|
+ */
|
|
|
+contract SampleCrowdsaleToken is MintableToken {
|
|
|
+
|
|
|
+ string public constant name = "Sample Crowdsale Token";
|
|
|
+ string public constant symbol = "SCT";
|
|
|
+ uint8 public constant decimals = 18;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @title SampleCrowdsale
|
|
|
+ * @dev This is an example of a fully fledged crowdsale.
|
|
|
+ * The way to add new features to a base crowdsale is by multiple inheritance.
|
|
|
+ * In this example we are providing following extensions:
|
|
|
+ * CappedCrowdsale - sets a max boundary for raised funds
|
|
|
+ * RefundableCrowdsale - set a min goal to be reached and returns funds if it's not met
|
|
|
+ *
|
|
|
+ * After adding multiple features it's good practice to run integration tests
|
|
|
+ * to ensure that subcontracts works together as intended.
|
|
|
+ */
|
|
|
+contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale {
|
|
|
+
|
|
|
+ function SampleCrowdsale(uint256 _startBlock, uint256 _endBlock, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet)
|
|
|
+ CappedCrowdsale(_cap)
|
|
|
+ FinalizableCrowdsale()
|
|
|
+ RefundableCrowdsale(_goal)
|
|
|
+ Crowdsale(_startBlock, _endBlock, _rate, _wallet)
|
|
|
+ {
|
|
|
+ //As goal needs to be met for a successful crowdsale
|
|
|
+ //the value needs to less or equal than a cap which is limit for accepted funds
|
|
|
+ require(_goal <= _cap);
|
|
|
+ }
|
|
|
+
|
|
|
+ function createTokenContract() internal returns (MintableToken) {
|
|
|
+ return new SampleCrowdsaleToken();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|